From 277b454d820f8d3bb363af96d9dac2b130fd8fb3 Mon Sep 17 00:00:00 2001 From: <> Date: Wed, 8 Nov 2023 12:32:46 +0000 Subject: [PATCH] Deployed bd31ee9 with MkDocs version: 1.5.3 --- .nojekyll | 0 404.html | 1401 ++++ .../CPP_SDK_v4/index.html" | 1667 ++++ .../CPP_SDK_v6/index.html" | 1682 +++++ .../Choregraphe_v4/index.html" | 1709 +++++ .../Choregraphe_v6/index.html" | 1687 +++++ .../Conceitos_Gerais/index.html" | 1701 +++++ .../Maquina_Virtual/index.html" | 1898 +++++ .../NAO_Flasher/index.html" | 1604 ++++ .../NAOqi-overview_v4/index.html" | 1667 ++++ .../NAOqi-overview_v6/index.html" | 1667 ++++ "Instru\303\247\303\265es/ROS_1/index.html" | 1792 +++++ .../Robot_Settings/index.html" | 1633 ++++ assets/icons/Bash.png | Bin 0 -> 35073 bytes assets/icons/Computador.png | Bin 0 -> 11608 bytes assets/icons/Guias.png | Bin 0 -> 17717 bytes assets/icons/Markdown.png | Bin 0 -> 16398 bytes assets/icons/Metodo_1.jpg | Bin 0 -> 100143 bytes assets/icons/NAO.png | Bin 0 -> 7881927 bytes assets/icons/Pincel.png | Bin 0 -> 27420 bytes assets/icons/Robo.png | Bin 0 -> 23660 bytes assets/icons/bra_robo.png | Bin 0 -> 35931 bytes assets/icons/choregraphe.png | Bin 0 -> 927 bytes assets/icons/cpplogo.png | Bin 0 -> 112631 bytes assets/icons/estrela.png | Bin 0 -> 827 bytes assets/icons/github_logo.png | Bin 0 -> 4823 bytes assets/icons/insta_logo.png | Bin 0 -> 16782 bytes assets/icons/linkedin_logo.png | Bin 0 -> 9491 bytes assets/icons/python.webp | Bin 0 -> 6244 bytes assets/icons/virt-manager.png | Bin 0 -> 51070 bytes assets/images/Damarcones.png | Bin 0 -> 249245 bytes assets/images/Daniel.png | Bin 0 -> 251295 bytes assets/images/Davi.png | Bin 0 -> 275020 bytes assets/images/Fundo 3.jpg | Bin 0 -> 302403 bytes assets/images/Gustavo.png | Bin 0 -> 277664 bytes assets/images/IMG_NAO.jpg | Bin 0 -> 128400 bytes assets/images/Imagem 1.jpg | Bin 0 -> 219880 bytes assets/images/Imagem1-sombreada-f.jpg | Bin 0 -> 219853 bytes assets/images/Matheus.png | Bin 0 -> 269137 bytes assets/images/choregraphe_v4-1.jpeg | Bin 0 -> 81949 bytes assets/images/choregraphe_v4-2.jpg | Bin 0 -> 36691 bytes assets/images/choregraphe_v4-3.jpg | Bin 0 -> 65228 bytes assets/images/choregraphe_v4-4.jpg | Bin 0 -> 18150 bytes assets/images/choregraphe_v4-5.jpg | Bin 0 -> 51454 bytes assets/images/choregraphe_v4-6.jpg | Bin 0 -> 44329 bytes assets/images/choregraphe_v4-7.jpg | Bin 0 -> 84311 bytes assets/images/choregraphe_v6-1.jpg | Bin 0 -> 38612 bytes assets/images/choregraphe_v6-2.jpg | Bin 0 -> 17390 bytes assets/images/choregraphe_v6-3.jpg | Bin 0 -> 28202 bytes assets/images/choregraphe_v6-4.jpg | Bin 0 -> 17364 bytes assets/images/choregraphe_v6-5.jpg | Bin 0 -> 23950 bytes assets/images/choregraphe_v6-6.jpg | Bin 0 -> 29454 bytes assets/images/conceitos1.jpg | Bin 0 -> 12982 bytes assets/images/conceitos2.jpg | Bin 0 -> 23354 bytes assets/images/conceitos3.jpg | Bin 0 -> 27455 bytes assets/images/conceitos4.jpg | Bin 0 -> 21022 bytes assets/images/conceitos5.jpg | Bin 0 -> 29530 bytes assets/images/conceitos_extra.jpg | Bin 0 -> 28379 bytes assets/images/conceitos_extra2.png | Bin 0 -> 54080 bytes assets/images/damarcones.jpg | Bin 0 -> 14456 bytes assets/images/daniel.jpeg | Bin 0 -> 24094 bytes assets/images/davi.jpg | Bin 0 -> 44698 bytes assets/images/faixa_inferior.png | Bin 0 -> 8011 bytes assets/images/favicon.png | Bin 0 -> 1870 bytes assets/images/flasher.jpg | Bin 0 -> 66507 bytes assets/images/fundo_puro.jpg | Bin 0 -> 514758 bytes assets/images/gustavo.jpg | Bin 0 -> 16216 bytes assets/images/matheus.jpeg | Bin 0 -> 27704 bytes assets/images/robo.png | Bin 0 -> 35931 bytes assets/images/robot_settings1.jpg | Bin 0 -> 81546 bytes assets/images/softbank.jpg | Bin 0 -> 46408 bytes assets/images/unbeatables.jpg | Bin 0 -> 120151 bytes assets/images/vm-0.jpg | Bin 0 -> 17506 bytes assets/images/vm-1.jpg | Bin 0 -> 220894 bytes assets/images/vm-10.jpg | Bin 0 -> 21823 bytes assets/images/vm-11.jpg | Bin 0 -> 10772 bytes assets/images/vm-2.jpg | Bin 0 -> 87872 bytes assets/images/vm-3.jpg | Bin 0 -> 62728 bytes assets/images/vm-4.jpg | Bin 0 -> 79255 bytes assets/images/vm-5.jpg | Bin 0 -> 82231 bytes assets/images/vm-6.jpg | Bin 0 -> 50647 bytes assets/images/vm-7.jpg | Bin 0 -> 53085 bytes assets/images/vm-8.jpg | Bin 0 -> 54705 bytes assets/images/vm-9.jpg | Bin 0 -> 13463 bytes assets/javascripts/bundle.81fa17fe.min.js | 29 + assets/javascripts/bundle.81fa17fe.min.js.map | 7 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.el.min.js | 1 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.he.min.js | 1 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.hy.min.js | 1 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.kn.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + assets/javascripts/lunr/min/lunr.sa.min.js | 1 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.te.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.f886a092.min.js | 42 + .../workers/search.f886a092.min.js.map | 7 + assets/stylesheets/main.4b4a2bd9.min.css | 1 + assets/stylesheets/main.4b4a2bd9.min.css.map | 1 + assets/stylesheets/palette.356b1318.min.css | 1 + .../stylesheets/palette.356b1318.min.css.map | 1 + css/timeago.css | 15 + index.html | 1890 +++++ js/timeago.min.js | 2 + js/timeago_mkdocs_material.js | 18 + mkdocs-kludge.sh | 23 + naoqi-2.1/cpp/about-the-examples/index.html | 1624 ++++ overrides/assets/icons/Bash.png | Bin 0 -> 35073 bytes overrides/assets/icons/Computador.png | Bin 0 -> 11608 bytes overrides/assets/icons/Guias.png | Bin 0 -> 17717 bytes overrides/assets/icons/Markdown.png | Bin 0 -> 16398 bytes overrides/assets/icons/Metodo_1.jpg | Bin 0 -> 100143 bytes overrides/assets/icons/NAO.png | Bin 0 -> 7881927 bytes overrides/assets/icons/Pincel.png | Bin 0 -> 27420 bytes overrides/assets/icons/Robo.png | Bin 0 -> 23660 bytes overrides/assets/icons/bra_robo.png | Bin 0 -> 35931 bytes overrides/assets/icons/choregraphe.png | Bin 0 -> 927 bytes overrides/assets/icons/cpplogo.png | Bin 0 -> 112631 bytes overrides/assets/icons/estrela.png | Bin 0 -> 827 bytes overrides/assets/icons/github_logo.png | Bin 0 -> 4823 bytes overrides/assets/icons/insta_logo.png | Bin 0 -> 16782 bytes overrides/assets/icons/linkedin_logo.png | Bin 0 -> 9491 bytes overrides/assets/icons/python.webp | Bin 0 -> 6244 bytes overrides/assets/icons/virt-manager.png | Bin 0 -> 51070 bytes overrides/assets/images/Damarcones.png | Bin 0 -> 249245 bytes overrides/assets/images/Daniel.png | Bin 0 -> 251295 bytes overrides/assets/images/Davi.png | Bin 0 -> 275020 bytes overrides/assets/images/Fundo 3.jpg | Bin 0 -> 302403 bytes overrides/assets/images/Gustavo.png | Bin 0 -> 277664 bytes overrides/assets/images/IMG_NAO.jpg | Bin 0 -> 128400 bytes overrides/assets/images/Imagem 1.jpg | Bin 0 -> 219880 bytes .../assets/images/Imagem1-sombreada-f.jpg | Bin 0 -> 219853 bytes overrides/assets/images/Matheus.png | Bin 0 -> 269137 bytes overrides/assets/images/choregraphe_v4-1.jpeg | Bin 0 -> 81949 bytes overrides/assets/images/choregraphe_v4-2.jpg | Bin 0 -> 36691 bytes overrides/assets/images/choregraphe_v4-3.jpg | Bin 0 -> 65228 bytes overrides/assets/images/choregraphe_v4-4.jpg | Bin 0 -> 18150 bytes overrides/assets/images/choregraphe_v4-5.jpg | Bin 0 -> 51454 bytes overrides/assets/images/choregraphe_v4-6.jpg | Bin 0 -> 44329 bytes overrides/assets/images/choregraphe_v4-7.jpg | Bin 0 -> 84311 bytes overrides/assets/images/choregraphe_v6-1.jpg | Bin 0 -> 38612 bytes overrides/assets/images/choregraphe_v6-2.jpg | Bin 0 -> 17390 bytes overrides/assets/images/choregraphe_v6-3.jpg | Bin 0 -> 28202 bytes overrides/assets/images/choregraphe_v6-4.jpg | Bin 0 -> 17364 bytes overrides/assets/images/choregraphe_v6-5.jpg | Bin 0 -> 23950 bytes overrides/assets/images/choregraphe_v6-6.jpg | Bin 0 -> 29454 bytes overrides/assets/images/conceitos1.jpg | Bin 0 -> 12982 bytes overrides/assets/images/conceitos2.jpg | Bin 0 -> 23354 bytes overrides/assets/images/conceitos3.jpg | Bin 0 -> 27455 bytes overrides/assets/images/conceitos4.jpg | Bin 0 -> 21022 bytes overrides/assets/images/conceitos5.jpg | Bin 0 -> 29530 bytes overrides/assets/images/conceitos_extra.jpg | Bin 0 -> 28379 bytes overrides/assets/images/conceitos_extra2.png | Bin 0 -> 54080 bytes overrides/assets/images/damarcones.jpg | Bin 0 -> 14456 bytes overrides/assets/images/daniel.jpeg | Bin 0 -> 24094 bytes overrides/assets/images/davi.jpg | Bin 0 -> 44698 bytes overrides/assets/images/faixa_inferior.png | Bin 0 -> 8011 bytes overrides/assets/images/flasher.jpg | Bin 0 -> 66507 bytes overrides/assets/images/fundo_puro.jpg | Bin 0 -> 514758 bytes overrides/assets/images/gustavo.jpg | Bin 0 -> 16216 bytes overrides/assets/images/matheus.jpeg | Bin 0 -> 27704 bytes overrides/assets/images/robo.png | Bin 0 -> 35931 bytes overrides/assets/images/robot_settings1.jpg | Bin 0 -> 81546 bytes overrides/assets/images/softbank.jpg | Bin 0 -> 46408 bytes overrides/assets/images/unbeatables.jpg | Bin 0 -> 120151 bytes overrides/assets/images/vm-0.jpg | Bin 0 -> 17506 bytes overrides/assets/images/vm-1.jpg | Bin 0 -> 220894 bytes overrides/assets/images/vm-10.jpg | Bin 0 -> 21823 bytes overrides/assets/images/vm-11.jpg | Bin 0 -> 10772 bytes overrides/assets/images/vm-2.jpg | Bin 0 -> 87872 bytes overrides/assets/images/vm-3.jpg | Bin 0 -> 62728 bytes overrides/assets/images/vm-4.jpg | Bin 0 -> 79255 bytes overrides/assets/images/vm-5.jpg | Bin 0 -> 82231 bytes overrides/assets/images/vm-6.jpg | Bin 0 -> 50647 bytes overrides/assets/images/vm-7.jpg | Bin 0 -> 53085 bytes overrides/assets/images/vm-8.jpg | Bin 0 -> 54705 bytes overrides/assets/images/vm-9.jpg | Bin 0 -> 13463 bytes overrides/equipe.html | 271 + overrides/home.html | 511 ++ overrides/main.html | 5 + release/index.html | 1606 ++++ .../index.html | 1580 ++++ .../index.html | 1698 +++++ ros1/general-instructions/index.html | 1513 ++++ ros1/installing-native-packages/index.html | 1611 ++++ .../index.html | 1721 +++++ .../index.html | 1580 ++++ .../index.html | 1698 +++++ ros2/general-instructions/index.html | 1842 +++++ .../index.html | 1681 +++++ search/search_index.json | 1 + sitemap.xml | 138 + sitemap.xml.gz | Bin 0 -> 513 bytes sobre/equipe/index.html | 1652 ++++ sobre/sobre/index.html | 1561 ++++ stylesheets/extra.css | 5 + vms/ubuntu-14/how-to-use/index.html | 2317 ++++++ vms/ubuntu-16/how-to-use/index.html | 2314 ++++++ 223 files changed, 56275 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 "Instru\303\247\303\265es/CPP_SDK_v4/index.html" create mode 100644 "Instru\303\247\303\265es/CPP_SDK_v6/index.html" create mode 100644 "Instru\303\247\303\265es/Choregraphe_v4/index.html" create mode 100644 "Instru\303\247\303\265es/Choregraphe_v6/index.html" create mode 100644 "Instru\303\247\303\265es/Conceitos_Gerais/index.html" create mode 100644 "Instru\303\247\303\265es/Maquina_Virtual/index.html" create mode 100644 "Instru\303\247\303\265es/NAO_Flasher/index.html" create mode 100644 "Instru\303\247\303\265es/NAOqi-overview_v4/index.html" create mode 100644 "Instru\303\247\303\265es/NAOqi-overview_v6/index.html" create mode 100644 "Instru\303\247\303\265es/ROS_1/index.html" create mode 100644 "Instru\303\247\303\265es/Robot_Settings/index.html" create mode 100644 assets/icons/Bash.png create mode 100644 assets/icons/Computador.png create mode 100644 assets/icons/Guias.png create mode 100644 assets/icons/Markdown.png create mode 100644 assets/icons/Metodo_1.jpg create mode 100644 assets/icons/NAO.png create mode 100644 assets/icons/Pincel.png create mode 100644 assets/icons/Robo.png create mode 100644 assets/icons/bra_robo.png create mode 100644 assets/icons/choregraphe.png create mode 100644 assets/icons/cpplogo.png create mode 100644 assets/icons/estrela.png create mode 100644 assets/icons/github_logo.png create mode 100644 assets/icons/insta_logo.png create mode 100644 assets/icons/linkedin_logo.png create mode 100644 assets/icons/python.webp create mode 100644 assets/icons/virt-manager.png create mode 100644 assets/images/Damarcones.png create mode 100644 assets/images/Daniel.png create mode 100644 assets/images/Davi.png create mode 100644 assets/images/Fundo 3.jpg create mode 100644 assets/images/Gustavo.png create mode 100644 assets/images/IMG_NAO.jpg create mode 100644 assets/images/Imagem 1.jpg create mode 100644 assets/images/Imagem1-sombreada-f.jpg create mode 100644 assets/images/Matheus.png create mode 100644 assets/images/choregraphe_v4-1.jpeg create mode 100644 assets/images/choregraphe_v4-2.jpg create mode 100644 assets/images/choregraphe_v4-3.jpg create mode 100644 assets/images/choregraphe_v4-4.jpg create mode 100644 assets/images/choregraphe_v4-5.jpg create mode 100644 assets/images/choregraphe_v4-6.jpg create mode 100644 assets/images/choregraphe_v4-7.jpg create mode 100644 assets/images/choregraphe_v6-1.jpg create mode 100644 assets/images/choregraphe_v6-2.jpg create mode 100644 assets/images/choregraphe_v6-3.jpg create mode 100644 assets/images/choregraphe_v6-4.jpg create mode 100644 assets/images/choregraphe_v6-5.jpg create mode 100644 assets/images/choregraphe_v6-6.jpg create mode 100644 assets/images/conceitos1.jpg create mode 100644 assets/images/conceitos2.jpg create mode 100644 assets/images/conceitos3.jpg create mode 100644 assets/images/conceitos4.jpg create mode 100644 assets/images/conceitos5.jpg create mode 100644 assets/images/conceitos_extra.jpg create mode 100644 assets/images/conceitos_extra2.png create mode 100644 assets/images/damarcones.jpg create mode 100644 assets/images/daniel.jpeg create mode 100644 assets/images/davi.jpg create mode 100644 assets/images/faixa_inferior.png create mode 100644 assets/images/favicon.png create mode 100644 assets/images/flasher.jpg create mode 100644 assets/images/fundo_puro.jpg create mode 100644 assets/images/gustavo.jpg create mode 100644 assets/images/matheus.jpeg create mode 100644 assets/images/robo.png create mode 100644 assets/images/robot_settings1.jpg create mode 100644 assets/images/softbank.jpg create mode 100644 assets/images/unbeatables.jpg create mode 100644 assets/images/vm-0.jpg create mode 100644 assets/images/vm-1.jpg create mode 100644 assets/images/vm-10.jpg create mode 100644 assets/images/vm-11.jpg create mode 100644 assets/images/vm-2.jpg create mode 100644 assets/images/vm-3.jpg create mode 100644 assets/images/vm-4.jpg create mode 100644 assets/images/vm-5.jpg create mode 100644 assets/images/vm-6.jpg create mode 100644 assets/images/vm-7.jpg create mode 100644 assets/images/vm-8.jpg create mode 100644 assets/images/vm-9.jpg create mode 100644 assets/javascripts/bundle.81fa17fe.min.js create mode 100644 assets/javascripts/bundle.81fa17fe.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.el.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.he.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hy.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.kn.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sa.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.te.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.f886a092.min.js create mode 100644 assets/javascripts/workers/search.f886a092.min.js.map create mode 100644 assets/stylesheets/main.4b4a2bd9.min.css create mode 100644 assets/stylesheets/main.4b4a2bd9.min.css.map create mode 100644 assets/stylesheets/palette.356b1318.min.css create mode 100644 assets/stylesheets/palette.356b1318.min.css.map create mode 100644 css/timeago.css create mode 100644 index.html create mode 100644 js/timeago.min.js create mode 100644 js/timeago_mkdocs_material.js create mode 100644 mkdocs-kludge.sh create mode 100644 naoqi-2.1/cpp/about-the-examples/index.html create mode 100644 overrides/assets/icons/Bash.png create mode 100644 overrides/assets/icons/Computador.png create mode 100644 overrides/assets/icons/Guias.png create mode 100644 overrides/assets/icons/Markdown.png create mode 100644 overrides/assets/icons/Metodo_1.jpg create mode 100644 overrides/assets/icons/NAO.png create mode 100644 overrides/assets/icons/Pincel.png create mode 100644 overrides/assets/icons/Robo.png create mode 100644 overrides/assets/icons/bra_robo.png create mode 100644 overrides/assets/icons/choregraphe.png create mode 100644 overrides/assets/icons/cpplogo.png create mode 100644 overrides/assets/icons/estrela.png create mode 100644 overrides/assets/icons/github_logo.png create mode 100644 overrides/assets/icons/insta_logo.png create mode 100644 overrides/assets/icons/linkedin_logo.png create mode 100644 overrides/assets/icons/python.webp create mode 100644 overrides/assets/icons/virt-manager.png create mode 100644 overrides/assets/images/Damarcones.png create mode 100644 overrides/assets/images/Daniel.png create mode 100644 overrides/assets/images/Davi.png create mode 100644 overrides/assets/images/Fundo 3.jpg create mode 100644 overrides/assets/images/Gustavo.png create mode 100644 overrides/assets/images/IMG_NAO.jpg create mode 100644 overrides/assets/images/Imagem 1.jpg create mode 100644 overrides/assets/images/Imagem1-sombreada-f.jpg create mode 100644 overrides/assets/images/Matheus.png create mode 100644 overrides/assets/images/choregraphe_v4-1.jpeg create mode 100644 overrides/assets/images/choregraphe_v4-2.jpg create mode 100644 overrides/assets/images/choregraphe_v4-3.jpg create mode 100644 overrides/assets/images/choregraphe_v4-4.jpg create mode 100644 overrides/assets/images/choregraphe_v4-5.jpg create mode 100644 overrides/assets/images/choregraphe_v4-6.jpg create mode 100644 overrides/assets/images/choregraphe_v4-7.jpg create mode 100644 overrides/assets/images/choregraphe_v6-1.jpg create mode 100644 overrides/assets/images/choregraphe_v6-2.jpg create mode 100644 overrides/assets/images/choregraphe_v6-3.jpg create mode 100644 overrides/assets/images/choregraphe_v6-4.jpg create mode 100644 overrides/assets/images/choregraphe_v6-5.jpg create mode 100644 overrides/assets/images/choregraphe_v6-6.jpg create mode 100644 overrides/assets/images/conceitos1.jpg create mode 100644 overrides/assets/images/conceitos2.jpg create mode 100644 overrides/assets/images/conceitos3.jpg create mode 100644 overrides/assets/images/conceitos4.jpg create mode 100644 overrides/assets/images/conceitos5.jpg create mode 100644 overrides/assets/images/conceitos_extra.jpg create mode 100644 overrides/assets/images/conceitos_extra2.png create mode 100644 overrides/assets/images/damarcones.jpg create mode 100644 overrides/assets/images/daniel.jpeg create mode 100644 overrides/assets/images/davi.jpg create mode 100644 overrides/assets/images/faixa_inferior.png create mode 100644 overrides/assets/images/flasher.jpg create mode 100644 overrides/assets/images/fundo_puro.jpg create mode 100644 overrides/assets/images/gustavo.jpg create mode 100644 overrides/assets/images/matheus.jpeg create mode 100644 overrides/assets/images/robo.png create mode 100644 overrides/assets/images/robot_settings1.jpg create mode 100644 overrides/assets/images/softbank.jpg create mode 100644 overrides/assets/images/unbeatables.jpg create mode 100644 overrides/assets/images/vm-0.jpg create mode 100644 overrides/assets/images/vm-1.jpg create mode 100644 overrides/assets/images/vm-10.jpg create mode 100644 overrides/assets/images/vm-11.jpg create mode 100644 overrides/assets/images/vm-2.jpg create mode 100644 overrides/assets/images/vm-3.jpg create mode 100644 overrides/assets/images/vm-4.jpg create mode 100644 overrides/assets/images/vm-5.jpg create mode 100644 overrides/assets/images/vm-6.jpg create mode 100644 overrides/assets/images/vm-7.jpg create mode 100644 overrides/assets/images/vm-8.jpg create mode 100644 overrides/assets/images/vm-9.jpg create mode 100644 overrides/equipe.html create mode 100644 overrides/home.html create mode 100644 overrides/main.html create mode 100644 release/index.html create mode 100644 ros1/compiling-for-amd64-based-systems/index.html create mode 100644 ros1/compiling-for-arm-based-systems/index.html create mode 100644 ros1/general-instructions/index.html create mode 100644 ros1/installing-native-packages/index.html create mode 100644 ros1/installing-precompiled-packages/index.html create mode 100644 ros2/compiling-for-amd64-based-systems/index.html create mode 100644 ros2/compiling-for-arm-based-systems/index.html create mode 100644 ros2/general-instructions/index.html create mode 100644 ros2/installing-precompiled-packages/index.html create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 sobre/equipe/index.html create mode 100644 sobre/sobre/index.html create mode 100644 stylesheets/extra.css create mode 100644 vms/ubuntu-14/how-to-use/index.html create mode 100644 vms/ubuntu-16/how-to-use/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..9c45741 --- /dev/null +++ b/404.html @@ -0,0 +1,1401 @@ + + + +
+ + + + + + + + + + + + + + +Para que seja possível desenvolver programas que controlem os robôs, é necessário instalar o SDK (Software Development Kit - Kit de Desenvolvimento de Software) do NAO v4 para C++.
+Esse SDK possui APIs e pacotes importantes para o desenvolvimento de tais programas.
+Para verificar a versão do compilador GCC instalado na sua máquina, execute o comando:
+gcc --version
+
Caso o GCC não esteja instalado no seu sistema, execute:
+sudo apt update
+sudo apt install build-essential
+
gcc --version
+
O qiBuild é uma ferramenta para criar projetos entre sistemas operacionais diversos usando o CMake e será necessário para o propósito do presente tutorial.
+Dependências são pacotes necessários para rodar um programa específico. No caso, para instalar o qiBuild serão necessários os seguintes pacotes:
+sudo apt update
+sudo apt install build-essential cmake python-pip
+pip install 'pip==20.3.4'
+
++Obs.: Você provavelmente receberá warnings do pip no seu terminal, sugerindo o upgrade do pip. Apenas ignore esse aviso, pois o referido upgrade pode corromper o pip.
+
Para instalar o qiBuild, execute o seguinte código no terminal:
+pip install qibuild --user
+
Digite o código abaixo. Você deverá escolher o gerador (recomendado usar o Unix Makefiles) e o compilador de sua escolha.
+qibuild config --wizard
+
++Para os testes do presente tutorial, deixar o compilador como "None" não implicará em problemas. Além disso, você sempre pode reconfigurar seu qiBuild executando o código abaixo no diretório padrão "/~".
+
Resultado: um arquivo é criado em ~/.config/qi/qibuild.xml
. Ele será compartilhado por todas as worktrees que você criar.
++Obs.: worktrees são ambientes de trabalho, nesse caso, do qiBuild.
+
++Exemplo de caminho: "~/Downloads/worktree"
+Obs.: NÃO criar worktree em diretórios com acentos ortográficos no nome, pois isso gera erro de decodificação com o qiBuild.
+
cd caminho/para/worktree
+
qibuild init
+
Para baixar o SDK de C++, siga os seguintes passos:
+Former Versions
.++Obs.: Muito cuidado ao selecionar a opção correta de acordo com seu sistema operacional.
+
Extraia o arquivo baixado na worktree criada anteriormente.
+Supondo que o nome do arquivo extraído seja "naoqi-sdk-2.1.4.13-linux64", acesse o seguinte diretório:
+cd caminho/para/worktree/naoqi-sdk-2.1.4.13-linux64/doc/dev/cpp/examples
+
$ qitoolchain create minhatoolchain /caminho/para/naoqi-sdk-2.1.4.13-linux64/toolchain.xml
+
Em "minhatoolchain", deve ser inserido um nome de sua preferência.
+qibuild add-config minhatoolchain -t minhatoolchain --default
+
cd core/sayhelloworld
+echo "set(CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0")" >> CMakeLists.txt
+
qibuild configure
+qibuild make
+
cd build-minhatoolchain/sdk/bin
+./sayhelloworld "Olá"
+
++ +Caso o binário rode e resulte no erro "Cannot connect to tcp://Olá:9559", o SDK foi instalado com sucesso.
+
Para que seja possível desenvolver programas que controlem os robôs, é necessário instalar o SDK (Software Development Kit - Kit de Desenvolvimento de Software) de C++ para o NAO v6 (com NAOqi 2.8).
+Esse SDK possui APIs e pacotes importantes para o desenvolvimento de tais programas.
+Para verificar a versão do compilador GCC instalado na sua máquina, execute o comando:
+gcc --version
+
Caso o GCC não esteja instalado no seu sistema, execute:
+sudo apt update
+sudo apt install build-essential
+
gcc --version
+
O qiBuild é uma ferramenta para criar projetos entre sistemas operacionais diversos usando o CMake e será necessário para o propósito do presente tutorial.
+Dependências são pacotes necessários para rodar um programa específico. No caso, para instalar o qiBuild serão necessários os seguintes pacotes:
+sudo apt update
+sudo apt install build-essential cmake python-pip
+
+# Atualizando versão do pip para última versão de suporte ao Python 2.7
+pip install 'pip==20.3.4'
+
Para instalar o qiBuild, execute o seguinte código no terminal:
+pip2 install qibuild --user
+
++Obs.: NÃO ATUALIZAR PIP AUTOMATICAMENTE (COMO SUGERE O PIP no TERMINAL) (o suporte do pip ao Python 2 chegou ao fim, sua atualização automática corrompe o Python 2 do sistema);
+
Digite o seguinte código. Você deverá escolher o gerador (recomendado usar o Unix Makefiles) e o compilador de sua escolha.
+qibuild config --wizard
+
Resultado: um arquivo é criado em ~/.config/qi/qibuild.xml
. Ele será compartilhado por todas as worktrees que você criar.
++Obs.: worktrees são ambientes de trabalho, nesse caso, do qiBuild.
+
++Exemplo de caminho: "/Área de Trabalho/worktree"
+
cd 'Área de Trabalho'/worktree
+
qibuild init
+
Nativamente, existe um exemplo testável intrínseco ao qiBuild, e vamos usá-lo para testar a instalação correta da ferramenta.
+qisrc create myFirstExample
+
cd myfirstexample
+
qibuild configure
+
++Obs.: note que o diretório
+build-sys-linux-x86_64
foi criado dentro do diretório "myfirstexample"
qibuild make
+
build-sys-linux-x86_64/sdk/bin
:cd build-sys-linux-x86_64/sdk/bin
+
E execute:
+./my_first_example
+
++Se a mensagem "Hello, world" aparecer no terminal, a instalação do qiBuild foi concluída com sucesso.
+
Para baixar o SDK de C++, siga os seguintes passos:
+Salvar arquivo
++Obs.: Muito cuidado ao selecionar a opção correta de acordo com seu sistema operacional.
+
Extraia o arquivo baixado no local de preferência
+Supondo que o nome do arquivo extraído seja "naoqi-sdk-2.8.5.10-linux64", crie um toolchain com o seguinte código (adicione o caminho para a pasta extraída e substitua no código abaixo):
+$ qitoolchain create minhatoolchain /caminho/para/naoqi-sdk-2.8.5.10-linux64/toolchain.xml
+
Em "minhatoolchain", deve ser inserido um nome de sua preferência.
+cd caminho/para/worktree
+
qibuild add-config myconfig -t minhatoolchain --default
+
++ +Lembre-se de trocar "minhatoolchain" pelo nome criado anteriormente.
+
Choregraphe é um programa da Softbank Robotics usado para:
+Com o Choregraphe, também é possível criar aplicativos contendo diálogos, serviços e comportamentos poderosos, como interação com pessoas, dança, envio de e-mails, com a possibilidade de desenvolvê-los sem escrever uma única linha de código.
+Mínimo
+Recomendado
+Sistema Operacional
+Ainda que o Choregraphe seja multiplataforma, recomenda-se a instalação no Ubuntu 16.04 (Xenial Xerus) - 64 bits.
+Para baixar o Choregraphe 2.1.4, acesse o site da Aldebaran Robotics.
+Desça até o sub-menu Choregraphe, e na seção do LINUX, clique em Former versions
.
Na página que se abre, selecione o setup do Choregraphe na versão 2.1.4 (versão usada com o NAO v4).
+O download será iniciado.
+Com o navegador de arquivos do Ubuntu, navegue até o diretório onde o setup baixado se encontra.
+Clique no arquivo de setup com o botão direito do mouse, vá em propriedades
e selecione a aba permissões
.
Marque a caixa Permitir a execução desse arquivo como um programa
.
No terminal, abra o diretório onde o setup foi baixado.
+Execute o setup com o seguinte código (supondo que o nome do arquivo baixado seja "choregraphe-suite-2.1.4.13-linux64-setup.run"):
+sudo ./choregraphe-suite-2.1.4.13-linux64-setup.run
+
No wizard que se abre, aceite as permissões, selecione a opção Quick install e, quando for pedida a license key, insira o seguinte código:
+++654e-4564-153c-6518-2f44-7562-206e-4c60-5f47-5f45
+
Finish
.++Obs.: Como alternativa ao processo de instalação manual, pode-se executar o seguinte código:
+
sudo ./choregraphe-suite-2.1.4.13-linux64-setup.run --mode unattended --installdir '/my/destination_directory' --licenseKeyMode licenseKey --licenseKey '654e-4564-153c-6518-2f44-7562-206e-4c60-5f47-5f45'
+
Executando o Choregraphe 2.1.4
+Para executar o Choregraphe 2.1.4, existem duas maneiras diferentes.
+++Clique duas vezes no ícone do Choregraphe.
+
++Execute o seguinte código:
+"/opt/Aldebaran Robotics/Choregraphe Suite 2.1/bin/choregraphe_launcher"
(com as aspas).
Caso a seguinte janela se abra, parabéns! Você instalou o Choregraphe 2.1.4 com sucesso.
+Choregraphe é um programa da Softbank Robotics usado para:
+Com o Choregraphe, também é possível criar aplicativos contendo diálogos, serviços e comportamentos poderosos, como interação com pessoas, dança, envio de e-mails, com a possibilidade de desenvolvê-los sem escrever uma única linha de código.
+Mínimo
+Recomendado
+Sistema Operacional
+Ainda que o Choregraphe seja multiplataforma, recomenda-se a instalação no Ubuntu 16.04 (Xenial Xerus) - 64 bits.
+Para baixar o Choregraphe 2.8.7, acesse o site da Aldebaran Robotics.
+Desça até o sub-menu Choregraphe, e na seção "LINUX (2.8.7 and later)", selecione Choregraphe 2.8.7 - Binaries
.
Quando o download for concluído, extraia o arquivo tar.gz no diretório de sua escolha.
+++Obs.: O setup está com arquivos corrompidos. É altamente recomendado que você baixe os binários. +Obs.: O arquivo de binários dispensa uma instalação formal, sendo necessário apenas executar o launcher do programa, conforme explicado abaixo.
+
Executando o Choregraphe 2.8.7
+Exemplo: se o arquivo extraído (choregraphe-suite-2.8.7.23-linux64
) está em "/meu/diretorio", execute o Choregraphe com:
"/meu/diretorio/choregraphe-suite-2.8.7.23-linux64/bin/choregraphe_launcher"
+
++IMPORTANTE: lembre-se de alterar o caminho no código acima de acordo com o local de extração do tar.gz dos binários baixados!
+
Selecionando o robô virtual NAO
+Connect to...
).Select
.Edit
e em Preferences
.NAO H25 (V6)
e clique em OK
. Na janela que se abre, confirme.CASO TENHA ERRO DE DESCONEXÃO DO ROBÔ
+Preferences
.Connect to...
.++ +Nota: +Você pode ter problemas com aceleração gráfica se não tiver com os drivers apropriados. Nesse caso, utilize: +
+./choregraphe --no-ogre
Antes de qualquer outro guia da Robo Connection, é importante entender alguns conceitos importantes sobre Terminal do Linux e Scripts. Esses conceitos servirão como ferramentas na conclusão de passos importantes para a programação do NAO.
+O terminal ou linha de comando do Linux é a interface onde os comandos de controle do sistema serão inseridos. Através dele, podemos instalar, desinstalar e atualizar programas, além de podermos navegar pelos diretórios do sistema.
+Como um computador funciona?
+O computador sempre executa códigos na linha de comando. Quando clicamos em botões e funcionalidades na tela, um processo acontece através de comandos que rodam no terminal sem que saibamos. Isso traz comodidade ao usuário, que nem sempre deseja saber o que ocorre por trás dos panos.
+Usando o terminal:
+Para abri-lo, aperte simultaneamente CTRL
+ALT
+T
.
Uma tela semelhante a essa se abrirá:
+No terminal de exemplo acima:
+gustavo@gustavo-Latitude-3420
(em verde): identifica o usuário e o apelido da máquina usada, respectivamente;~
(em azul): indica o diretório atual. No terminal, '~' equivale ao diretório /home/usuario/
.Um diretório nada mais é do que uma pasta. Todo diretório ou arquivo possui um caminho. Mas o que isso significa? +Isso significa que, se navegarmos por esse caminho, podemos chegar ao arquivo em questão.
+Por exemplo: se quero chegar ao diretório /home/usuário/
, posso sair de /
, acessar /home/
e depois acessar /home/usuário/
.
Conhecendo o pip:
+O pip é o instalador de pacotes do Python. Através dele, podemos instalar pacotes que usaremos na programação do NAO.
+A sintaxe de uso do pip para instalação de programas é pip install <pacote>
.
Em suma, o terminal permite a execução de programas de diversas linguagens, instalação de pacotes, edição de texto, dentre outras possibilidades.
+Comando ls
: listando arquivos
Para ver os arquivos presentes na pasta atual, podemos digitar o comando ls
. Essa ação irá gerar uma lista de arquivos e pastas que se encontram no diretório atual.
Por exemplo:
+No exemplo acima, usamos o comando ls
no diretório ~
(no caso, /home/gustavo/
). Isso gerou uma lista de arquivos presentes nesse diretório.
Note também que os arquivos em azul são diretórios (pastas). O arquivo em branco possui outro formato.
+Comando cd
: navegando entre diretórios
Para navegar entre diretórios no terminal Linux, usamos o comando cd <diretório>.
Para voltarmos para o diretório "mãe", usamos o comando cd ..
.
Por exemplo:
+No exemplo acima, usamos o comando ls
para listar os arquivos em ~
. Depois, usamos cd Downloads
para acessar o diretório ~/Downloads/
. Em seguida, usamos o cd ..
para retornarmos para o diretório "mãe". Ou seja, voltamos para ~
.
Assim, podemos usar o terminal do Linux para navegar em qualquer diretório do sistema.
+++Nota: para acessar diretórios com nomes que contenham espaços (como "Área de Trabalho"), sempre use aspas. Se quero acessar
+~/Área de Trabalho/
, devo usar o comandocd ~/'Área de Trabalho'
OBS.: Podemos acessar caminhos mais profundos de uma vez usando o comando cd
.
Por exemplo: dentro de ~
existe o diretório Downloads
. Dentro de Downloads
existe um diretório de nome Exemplo
. Portanto, o caminho desse diretório é ~/Downloads/Exemplo
.
Para chegarmos em ~/Downloads/Exemplo
, não precisamos acessar pasta a pasta. Podemos acessá-lo de qualquer diretório simplesmente usando o comando cd ~/Downloads/Exemplo
.
No exemplo acima, estávamos no diretório ~/Área de Trabalho/
. Usando o comando cd ~/Downloads/Exemplo
, acessamos esse diretório diretamente.
Comando clear
: limpando o terminal
Podemos usar esse comando para limpar o terminal. Basta digitar clear
na linha de comando e apertar ENTER
. Com isso, o terminal será limpo. Isso não muda o diretório atual.
O que são scripts?
+Scripts são instruções em sequência que executam alguma ação. Geralmente, utilizam um shell para executarem tais ações. +Um shell é uma ponte entre o usuário e o sistema operacional. Através do shell, o usuário acessa as funcionalidades do sistema operacional. Um shell pode ser de dois tipos:
+Assim, no seguimento dos tutoriais da Robo Connection, utilizaremos o Bash como linguagem de comando, sendo este o shell CLI padrão do Linux.
+Os scripts bash possuem a extensão ".sh".
+Ok, mas como executar um script?
+Suponha que queremos executar um script que está em ~/Downloads/
. Seu nome é meuscript.sh
. Esse script imprime "Hello World" na tela.
Para executar o script, precisamos seguir os seguintes passos:
+cd
. No caso, usamos cd ~/Downloads/
.chmod +x <nome_do_script>
. No exemplo, usamos chmod +x meuscript.sh
.sudo ./<nome_do_script>
. No exemplo, usamos sudo ./meuscript.sh
.++Nota: a permissão de superuser (ou sudo) é análogo ao ato de executar um programa como administrador (Windows). Isso garante que não haverão falhas de permissão na execução do programa. Alguns programas exigirão a permissão sudo para serem executados.
+
Os robôs NAO utilizam diversos programas para configuração, programação e manutenção. Porém, esses programas são compatíveis com diferentes versões do sistema Linux.
+Para que não seja necessário utilizar muitas máquinas, utilizaremos apenas uma máquina com diversas máquinas virtuais (VMs) disponíveis para rodar no sistema com o gerenciador Virt Manager (cada máquina virtual com um sistema operacional diferente, para que sejam acessados os diversos programas em uma mesma máquina física).
+Para ilustrar a diferença dos sistemas operacionais necessários na operação dos NAOs, observe a tabela abaixo, onde são mostrados programas comuns usados na programação dos NAO v6.
+Programa | +Sistema Compatível | +
---|---|
Robot Settings 2.8.6 | +Ubuntu 16.04 | +
Choregraphe 2.8.6 | +Ubuntu 16.04 | +
NAOqi SDK 2.8.5 (C++ - V6) | +Ubuntu 16.04 | +
NAOqi SDK 2.1.4 (C++ - V4) | +Ubuntu 12.04 | +
ROS1 | +Ubuntu 20.04 | +
ROS2 | +Ubuntu 22.04 | +
++O NAO v4 utiliza diferentes versões desses programas, com sistemas operacionais também diferentes, em alguns casos. Para mais informações, consulte o Developer Center da Aldebaran Robotics.
+
O Virt Manager é o programa no qual as VMs estarão acessíveis, tornando possível criar, excluir e modificar VMs. Além disso, o Virt Manager permite o compartilhamento de portas USB entre máquina real e virtual e a criação de snapshots (pontos de controle), que funcionam como um recurso de back-up rápido caso estejamos testando diferentes funcionalidades que podem corromper o sistema das VMs.
+Para verificar a compatibilidade do processador, pode-se executar o comando kvm-ok
do pacote cpu-checker
como superuser.
sudo apt update
+sudo apt install cpu-checker
+sudo kvm-ok
+
Para instalar as dependências necessárias, execute o seguinte código em terminal:
+sudo apt update
+sudo apt install qemu-system-x86
+sudo apt install qemu-system-gui
+sudo apt install qemu-utils
+sudo apt install qemu-block-extra
+sudo apt install ovmf
+sudo apt install libguestfs-tools
+sudo apt install virt-manager
+
Habilitando o libvirtd
+sudo systemctl start libvirtd
+sudo systemctl enable libvirtd
+
++Obs.: necessário reiniciar o sistema após esse passo.
+
Forward
. No próximo menu, clique em Navegar
e procure a opção Navegar localmente
Sim
Concluir
para criar a VMPara iniciar a VM, clique duas vezes sobre a listagem da VM no menu principal do Virt Manager.
+Em seguida, clique no botão indicado para inicializar a máquina virtual selecionada:
+++A presente seção do tutorial se refere à uma instalação genérica de sistemas Ubuntu Linux. Caso seja necessário, consulte um guia de instalação da sua versão.
+
Com a VM iniciada, realize a instalação do Ubuntu normalmente:
+Instalar o Ubuntu
Instalar agora
e em seguida em Continuar
Continuar
e aguarde até o fim da instalaçãoReiniciar agora
++Obs.: após o reinício pós-instalação, é comum as VMs travarem. Se for o caso, no menu superior do Virt Manager há um botão vermelho com uma seta ao lado. Clique na seta e selecione "Forçar desligamento". Confirme e depois reinicie a VM no botão de start.
+
Snapshots são pontos de controle da máquina virtual. Para exemplificar, imagine o seguinte exemplo: você precisa instalar um programa instável, e ele pode corromper seu sistema.
+Para impedir isso, você cria um snapshot antes de instalar o programa. Se, durante a instalação do programa, ocorrer algum problema com seu sistema, você pode acessar o snapshot para voltar ao estado da máquina correspondente ao momento em que você criou o snapshot (antes de instalar o programa) e tomar as medidas necessárias para evitar a reincidência do erro.
+Para criar os snapshots, siga os passos abaixo:
+Concluir
para finalizar a criação do snapshotPara acessar os snapshots criados, siga os passos abaixo:
+Sim
para confirmar e retornar ao snapshot selecionadoÉ possível utilizar as portas físicas da sua máquina em uma máquina virtual. Exemplificando, posso conectar uma Raspberry Pi no meu sistema físico e utilizá-lo na máquina virtual com o Virt Manager.
+Para isso, siga os passos a seguir:
+Máquina Virtual
Redirecionar dispositivo USB
e selecione o dispositivo inseridoO NAO Flasher é uma ferramenta que permite a realização de updates no sistema do NAO v4 e do NAO v6, além do reset de fábrica e outras possibilidades.
+++Recomendação: usar no Linux Ubuntu 16.04 (Xenial Xerus).
+
Acesse o site da Aldebaran Robotics.
+Desça até o menu "NAO Flasher", e clique nele.
+Na aba "LINUX", clique no botão NAO Flasher 2.1.0 - Setup
.
O NAO Flasher baixado no site da Aldebaran Robotics vem em formato de binários, ou seja, não é necessária uma instalação usando um setup. Em outras palavras, basta executar o executável do NAO Flasher, através dos seguintes passos:
+Vá até a pasta onde o arquivo foi baixado.
+Clique sobre o arquivo tar.gz com o botão direito e selecione Extrair aqui
.
Abra a pasta instalada, e dentro dela acesse a pasta bin
, que deve conter um arquivo "Flasher".
Clique sobre o arquivo "Flasher" com o botão direito e selecione Propriedades
. Na aba Permissões
, marque a caixa Permitir execução do arquivo como um programa
.
Para executar o arquivo, clique com o botão direito na pasta bin
e selecione Abrir no terminal
. Em seguida, digite o seguinte código:
sudo ./flasher
+
++ +Caso abra a interface do NAO Flasher, a instalação foi concluída com sucesso.
+
Este é um guia de apresentação de conceitos-chave do framework NAOqi, conhecimento necessário para o início na programação dos robôs da Aldebaran Robotics.
+NAOqi: principal software usado no robô para controlá-lo.
+NAOqi Framework: é um framework que funciona como um broker (intermediário). Isso significa que ele interliga diversos módulos. Suponha que você precise programar uma ação específica fora das ações comuns de fábrica do robô. Para isso, o NAOqi utiliza um sistema que resgata os módulos disponíveis (inclusive módulos criados por você, que contenha as funções específicas que você precisa) e os disponibiliza em sua aplicação.
+Multiplataforma: disponível no Windows, Linux e MacOS
+Linguagens aceitas:
+Métodos ou funções: conjunto de instruções a serem realizadas.
+Módulo: conjunto de métodos, funciona como uma classe.
+Biblioteca: conjunto de módulos.
+Proxy: ao criar um proxy de determinado módulo, é possível acessar os métodos desse módulo através do proxy. Funciona como um objeto de uma classe.
+NAOqi Broker: é um intermediador dos módulos. Por exemplo: o módulo A, em um de seus métodos, precisa de um método do módulo B. O broker "avisa" o módulo A da existência do módulo B, possibilitando o acesso desejado.
+Autoload.ini: arquivo localizado no SO do robô, responsável por carregar as bibliotecas quando o robô é iniciado.
+ +Módulos locais: Estão em um mesmo ambiente (processo), e portanto podem compartilhar variáveis e métodos com outros módulos locais. Além disso, apenas um broker é necessário para a conexão entre módulos locais, não precisando de internet para tal conexão. É bem mais rápido que a conexão remota entre módulos.
+Módulos remotos: módulos que utilizam seu broker para se comunicar com outro broker que possui outros módulos. Utilizam a internet para se comunicarem (um broker precisa saber a porta e o IP do outro broker para trocarem informações). Possui velocidade menor em comparação com módulos locais.
+Conexão entre módulos remotos: imagine dois módulos remotos, A e B. A conexão entre eles pode ser broker x broker ou proxy x broker (objeto de A acessa B mas B não acessa A).
+Conexão broker x broker: nesse tipo de conexão, A acessa B e B acessa A. Ou seja, trata-se de uma comunicação recíproca. Para conectar módulos dessa maneira, basta especificar o IP e a Port (usando –pip e –pport na inicialização do módulo). Então, pode-se criar o proxy (objeto do módulo) com AL::ALProxy proxy = AL::ALProxy(nome_módulo)
(em C++) para acessar os métodos desse módulo. Como o IP e a Port já foram especificados com –pip e –pport, não é necessário informar esses na criação do proxy.
Conexão proxy x broker: nesse tipo de conexão, A acessa B, mas B não tem acesso a A. Um módulo (classe) pode se comunicar com outro módulo através da instanciação de seu proxy (objeto). Suponha que o broker de A (que possui o módulo A) se conecta com o broker de B (que "avisa" sobre a existência de B). O proxy de A consegue utilizar os métodos de B através do broker de B, mas os módulos registrados nesse broker (B) NÃO possuem acesso ao módulo (A) que possui esse proxy. Sendo assim, trata-se de uma comunicação de acesso unilateral.
+Criar um nome, usar um IP e uma porta.
+Os passos estão exemplificados aqui:
+// Um broker precisa de um nome, um IP e uma porta para "escutar":
+const std::string nomeBroker = "mybroker";
+
+// IP do NAOqi
+const std::string pip = "127.0.0.1"; // local NAOqi
+
+// Porta do NAOqi
+int pport = 9559;
+
+// Crie o seu próprio broker
+boost::shared_ptr<AL::ALBroker> broker = AL::ALBroker::createBroker(nomeBroker, "0.0.0.0", 54000, pip, pport);
+AL::ALProxy proxy = AL::ALProxy(broker, <nome_do_modulo>);
+
Chamadas bloqueadoras e não bloqueadoras
+Para chamar um método de um módulo, o NAOqi possibilita dois protocolos de chamadas:
+Bloqueadoras: chamada normal de um método. Instancia-se o objeto da classe e o utiliza usando a estrutura: modulo.metodo()
. Esse funcionamento é exatamente igual às chamadas normais de um método de uma classe.
Não bloqueadoras: serve para chamar um método e, ao mesmo tempo, executar outras ações. Por exemplo: fazer o robô andar e falar ao mesmo tempo. Para isso, utiliza-se um “post object” de um proxy. Isso cria um processo que será executado paralelamente à outras atividades. Toda chamada que usa esse post object gera um TaskID, que pode ser usado para verificar se a tarefa está sendo ou já foi executada. Para criar uma chamada não bloqueadora, use a seguinte estrutura: modulo.post.metodo()
.
ALMemory
+Essa ferramenta é a memória do robô.
+Todos os módulos podem ler (resgatar informações) ou escrever (registrar/alterar informações) na memória do robô. O ALMemory é um array de ALValues (valores do módulo ALValues podem ser de todos os tipos tradicionais encontrados na programação).
+Para evitar problemas de acesso concorrente à memória (ações divergentes ao mesmo tempo no mesmo local da memória), eles utilizam critical sections de leitura/escrita para proteger o acesso, ou seja, os threads permitem a execução de apenas um processo por vez, enquanto os outros ficam suspensos até que o processo atual termine. Isso protege os dados.
+Para que fique mais claro:
+Suponha que existam dois métodos no mesmo ambiente, X e Y.
+//Código X:
+
+a = 5
+
//Código Y:
+
+a = 8
+
Se esses códigos forem executados ao mesmo tempo, a execução correta das ações posteriores pode ser prejudicada. Para evitar esse erro nas operações de leitura/escrita em memória, usa-se a critical section.
+ +Este é um guia de apresentação de conceitos-chave do framework NAOqi, conhecimento necessário para o início na programação dos robôs da Aldebaran Robotics.
+NAOqi: principal software usado no robô para controlá-lo.
+NAOqi Framework: é um framework que funciona como um broker (intermediário). Isso significa que ele interliga diversos módulos. Suponha que você precise programar uma ação específica fora das ações comuns de fábrica do robô. Para isso, o NAOqi utiliza um sistema que resgata os módulos disponíveis (inclusive módulos criados por você, que contenha as funções específicas que você precisa) e os disponibiliza em sua aplicação.
+Multiplataforma: disponível no Windows, Linux e MacOS
+Linguagens aceitas:
+Métodos ou funções: conjunto de instruções a serem realizadas.
+Módulo: conjunto de métodos, funciona como uma classe.
+Biblioteca: conjunto de módulos.
+Proxy: ao criar um proxy de determinado módulo, é possível acessar os métodos desse módulo através do proxy. Funciona como um objeto de uma classe.
+NAOqi Broker: é um intermediador dos módulos. Por exemplo: o módulo A, em um de seus métodos, precisa de um método do módulo B. O broker "avisa" o módulo A da existência do módulo B, possibilitando o acesso desejado.
+Autoload.ini: arquivo localizado no SO do robô, responsável por carregar as bibliotecas quando o robô é iniciado.
+ +Módulos locais: Estão em um mesmo ambiente (processo), e portanto podem compartilhar variáveis e métodos com outros módulos locais. Além disso, apenas um broker é necessário para a conexão entre módulos locais, não precisando de internet para tal conexão. É bem mais rápido que a conexão remota entre módulos.
+Módulos remotos: módulos que utilizam seu broker para se comunicar com outro broker que possui outros módulos. Utilizam a internet para se comunicarem (um broker precisa saber a porta e o IP do outro broker para trocarem informações). Possui velocidade menor em comparação com módulos locais.
+Conexão entre módulos remotos: imagine dois módulos remotos, A e B. A conexão entre eles pode ser broker x broker ou proxy x broker (objeto de A acessa B mas B não acessa A).
+Conexão broker x broker: nesse tipo de conexão, A acessa B e B acessa A. Ou seja, trata-se de uma comunicação recíproca. Para conectar módulos dessa maneira, basta especificar o IP e a Port (usando –pip e –pport na inicialização do módulo). Então, pode-se criar o proxy (objeto do módulo) com AL::ALProxy proxy = AL::ALProxy(nome_módulo)
(em C++) para acessar os métodos desse módulo. Como o IP e a Port já foram especificados com –pip e –pport, não é necessário informar esses na criação do proxy.
Conexão proxy x broker: nesse tipo de conexão, A acessa B, mas B não tem acesso a A. Um módulo (classe) pode se comunicar com outro módulo através da instanciação de seu proxy (objeto). Suponha que o broker de A (que possui o módulo A) se conecta com o broker de B (que "avisa" sobre a existência de B). O proxy de A consegue utilizar os métodos de B através do broker de B, mas os módulos registrados nesse broker (B) NÃO possuem acesso ao módulo (A) que possui esse proxy. Sendo assim, trata-se de uma comunicação de acesso unilateral.
+Criar um nome, usar um IP e uma porta.
+Os passos estão exemplificados aqui:
+// Um broker precisa de um nome, um IP e uma porta para "escutar":
+const std::string nomeBroker = "mybroker";
+
+// IP do NAOqi
+const std::string pip = "127.0.0.1"; // local NAOqi
+
+// Porta do NAOqi
+int pport = 9559;
+
+// Crie o seu próprio broker
+boost::shared_ptr<AL::ALBroker> broker = AL::ALBroker::createBroker(nomeBroker, "0.0.0.0", 54000, pip, pport);
+AL::ALProxy proxy = AL::ALProxy(broker, <nome_do_modulo>);
+
Chamadas bloqueadoras e não bloqueadoras
+Para chamar um método de um módulo, o NAOqi possibilita dois protocolos de chamadas:
+Bloqueadoras: chamada normal de um método. Instancia-se o objeto da classe e o utiliza usando a estrutura: modulo.metodo()
. Esse funcionamento é exatamente igual às chamadas normais de um método de uma classe.
Não bloqueadoras: serve para chamar um método e, ao mesmo tempo, executar outras ações. Por exemplo: fazer o robô andar e falar ao mesmo tempo. Para isso, utiliza-se um “post object” de um proxy. Isso cria um processo que será executado paralelamente à outras atividades. Toda chamada que usa esse post object gera um TaskID, que pode ser usado para verificar se a tarefa está sendo ou já foi executada. Para criar uma chamada não bloqueadora, use a seguinte estrutura: modulo.post.metodo()
.
ALMemory
+Essa ferramenta é a memória do robô.
+Todos os módulos podem ler (resgatar informações) ou escrever (registrar/alterar informações) na memória do robô. O ALMemory é um array de ALValues (valores do módulo ALValues podem ser de todos os tipos tradicionais encontrados na programação).
+Para evitar problemas de acesso concorrente à memória (ações divergentes ao mesmo tempo no mesmo local da memória), eles utilizam critical sections de leitura/escrita para proteger o acesso, ou seja, os threads permitem a execução de apenas um processo por vez, enquanto os outros ficam suspensos até que o processo atual termine. Isso protege os dados.
+Para que fique mais claro:
+Suponha que existam dois métodos no mesmo ambiente, X e Y.
+//Código X:
+
+a = 5
+
//Código Y:
+
+a = 8
+
Se esses códigos forem executados ao mesmo tempo, a execução correta das ações posteriores pode ser prejudicada. Para evitar esse erro nas operações de leitura/escrita em memória, usa-se a critical section.
+ +Guia de instalação do ROS1 em uma máquina nativa ou máquina virtual no Ubuntu 20.04
+Conforme instruções disponibilizadas na ROS wiki.
+Os seguintes passos devem ser realizados no terminal da VM criada.
+sudo apt update
+sudo add-apt-repository restricted
+sudo add-apt-repository universe
+sudo add-apt-repository multiverse
+sudo apt update
+
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
+
sudo apt install curl
+curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
+
sudo apt update
+
++Instalação completa (tudos os recursos da versão padrão + softwares de visualização 2D/3D e percepção 2D/3D):
+
sudo apt install ros-noetic-desktop-full
+
++Instalação padrão (tudo da versão simples + algumas ferramentas como rqt e rviz):
+
sudo apt install ros-noetic-desktop
+
++Instalação simples (pacotes do ROS, bibliotecas de compilação e comunicação. Sem GUI.)
+
sudo apt install ros-noetic-ros-base
+
sudo apt install ros-noetic-NOME_DO_PACOTE
+
apt search ros-noetic
+
Você deverá 'fontear' esse script em qualquer terminal bash no qual você use o ROS:
+source /opt/ros/noetic/setup.bash
+
Pode ser conveniente fazer isso automaticamente toda vez que iniciar um novo shell para usar o ROS:
+echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
+source ~/.bashrc
+
echo "source /opt/ros/noetic/setup.zsh" >> ~/.zshrc
+source ~/.zshrc
+
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
+
sudo rosdep init
+rosdep update
+
dpkg -s ros-noetic-ros
+
Com este tutorial, o ROS 1 - Noetic estará instalado em sua máquina.
+ +O Robot Settings 2.8.6 é um programa usado para configurar e gerenciar robôs NAO v6 da Softbank Robotics.
+Entretanto, até o momento da criação desse tutorial, o Robot Settings 2.8.6 é compatível (em distribuições Ubuntu) apenas na versão 16.04 (Xenial Xerus).
+Os seguintes passos devem ser realizados dentro da VM com Ubuntu 16.04 ou em um sistema com Ubuntu 16.04 nativo.
+OK
Pressione CTRL+ALT+T
para abrir o terminal. Execute os comandos abaixo:
cd ~/Downloads
+chmod +x robot-settings-2.8.6.23-linux64-setup.run
+sudo ./robot-settings-2.8.6.23-linux64-setup.run
+
Prosseguindo com a instalação:
+Next
até que apareça o botão Install
Install
, aguarde a instalação e clique em Finish
Com a realização dos passos acima, o Robot Settings estará instalado e operante, podendo ser encontrado no menu de navegação do Ubuntu ou na área de trabalho.
+++ +Cabe ressaltar que, como o Robot Settings não é compatível com o Ubuntu 22.04, deve-se sempre acessá-lo através da máquina virtual (com Ubuntu 16.04) gerenciada pelo Virt Manager, ou por uma máquina com Ubuntu 16.04 nativo para garantir a compatibilidade do sistema.
+
}b}^qesKIa>_q$kr%7$5`DBLSrw!J8xvMi zL_j`$pYR&uhmFkZl0k?{R|J5n{}PS3vpPrr7@yM)NPRso0BSk0%34(DpC|ZKRBG^} zR`g3E^N#f>>w<$a1EmP7B7ZD!B@sj1B6xe{$Ahicz_%l)hzG?Y%JQ;Q62@85a`vK?315BrExhl4|z@ntI zw9`j_D@%}%-7B-l(Pm>-rzw=lo`Yc@cJBdCd~gl~e}m&8wILQ|1*1s=0{B+iC}GS-6_c$t29F=C1+pnwX98nOGDa6SoJR$ zX!hV}T6(ejd~W%01=NQKasK`4bpd1TvNlSF7XvCJhBWg^<|Qq=0Oc~i3yfv{ch+fS zWI#%emYIOgTRS4DsfG-g3Fx^{@lZmehuk6gU-v~>+d~v=T`|_2SgDg`@g(D$D~9B& zq(P-O#Kvd_>C~#SK$S)%+Y>F()4>n7>r0M+mJsbz=L&?YCW~xzElzPeNc66GEu|qg zsFb3AZ-F3Q6$YdcoCo6+x9b-j^P8GdLqkzBqJS_y&GS{u2u2bK9nxP!UIt^rxZ7q{ z$vlF8IRDOaYZbQ(^c+o`tiJ2iS|CyGQU^u^kHQ%A2jsbpK&6e$V?2!1Jtrl$th>>* zqigeZhgR0M01A_E!>l+B1bl(+VThW}j~{?ej|m`wx^eh?&EwEh!ebK*9>D<(rI5fdX|&1QG n3vtuOWl(QZxv7a$gJ0sOA?NlDXR zVwf6lHWB240tP)#H$RlhFvskoYwMLG7EJ=&QY#Pm6{e;rnwsv|5)wa-w= =86rZ zOg-Uct-tc2#hBWG9)^k9`K7ERv##jcvMtn{NCvRNRo9czfZp1}nX$PkX?G1m6=Hnk z*Sq91y88HKZcD>cK$#Xh`b$+E!rb3|mzD%o1xD!=l6a}$Qq9V(MbR7VhGj27dzN8t zKA!cqKCiH9-jyK-=9NCVV010DzD=2VpiC^KZ-?l=x{{e3TNR1=y747;qK9)K*0u+H zZ}0n`f J@o{ZYajD!0 zwt6G}JSr*tmf*&7)>oTShzeca>wnqa29OCZ%Mo()5X2c>cA-k^qHy^%R21gNHxhZ6 z+ZX(-H`}9)Tjz3fQ_I6kUKbpmUF^uvrWd9$UCH6Smo?bhaNf(f&I&icx+j&^fi{#} zKTW|HEUa%PAX650|5mIu08s+ULj{d__H+s2%Yi!e_(^{^bbtx;O}?=@wU)t37NwY@ zi+?Lpnebu`x!xKV4-|#B+Kfp4ADCIx^f>hLH#eV}PJF&H15lhCp2M)>N=vPlZwM-V zuYL&3s%5&pi35vqd}g~A_M|E=KXz7P+C5{(tC)%~FdNihG$srqHHe} %KEZgS$Sb6j5pmpjmW{SeCBW{&Ym%_Y z1g#vb3o7bk*)cbB52HJEgTo^7#X^|jd*(5=j!>2`oJmv??M$`I>?PDP>^$ 0_~o $7sOEi3@`0LIm}*C!fptN?N(zXuE?vgjkx zGn{9NAD$*eKQsTXZ!pg2mc$FfLiqiUUbWQ*uGAvsJx1xC4oi)807YUklfkczv?6J| zL66kt5!k6)s>6&2w4DO|ayX(cqV&E`5-v?DJAX4VRyH&H?r)rSww^%?rnJ 5h4rfHq`r;(*h^pZ zdsH@WD`}XrOcm0J?#2@NS6|D(m4B80wk4VnJx`5MpP&b;TtcGBEX^7xB|Irl@T4`> zG2ppHU0uVZ%9E(4rL3&;GaYHjSBn}62^kfME%S1{XUu2V^z)zf7l;^*o;WQap-~J? zpzAFs@N!V{4lnXAGtglJx!;J0j>T4sAKu7ex9)gDZT`#7@NYh4RVaKD%z$5RpecHR z>3(@Bq4Moo7m Cn?WH44>J?_L$1%-y* z-EPtb0B8_Obf?dCE3H@vQ+!P}aMqvYXLF=)TaL~}&u$L-WC{^;*yX(=!0Hi6*)=4y za>B+~fTS}zj)Xj{PsmvTxpm?y)H8rua~q)H5$Js{fC5orCrw;sUQG>tYoAY8o#xP2 z>g{5?-b+ >A6rXbl`xu^P- zLw)h}xxk55HD%C3pY1Y`2T(zIzQT|HY);y*6;;Jx%OwP765JI(T%iZEbquQQz+=jZ z`N*6OjbfZ1fK~u1(EXZUOAgM`Fj3K_m;WNJ9rC=sd9O{9;VMueC9&Czm=aFV@X;i? z?r=s`M@NUCvxk@q<{s@>6$i2Sjfst2Wzvlb#CBibjNvFrY ; zS2nXiEmL)z`~|c^7c~1cZ+HaFC@z|e^b()p{zQnQcZrqf75DI %4A<1bA=0 z1uBX$5CAyzU*?RGxzF^4cp7kw`)EKTE?!kLZ@gk*pfxtbN^lHcH5pLz9ZTrLw)xFe zM9yb%Y1hw6QqsI8sVLZ2!Z5!k^*!Td;B-E~MIm>0_jp;tZWeG>k4x{^?Bb9KT1Nz1 z*1v6{$NtF3NKb2A2r_36b9|~m#g9A6G6gsrC&$KcM|=wWLRkEzzZc EU;ml- z1jCx1yNQsBYaWhj6`(-Zz7qosH@A?0EH1Jqm4aitY|6u@urL6!0m=|d49_?HlE`<1 zJ4w4GKFTYWtoSOWeEb;>$EiU`&6JXZqgJe8)u3Ji@hH^)RoPpHMfJULzcflC-Q5jR zQYxX8NQ1PLNcYh7qr0W0rAz4;1O|`>X&72Wa_Ht+{I7Fe=e#@*?`D|2_u6Z(z2d&V z-_If++ScO_xL5W!B$gM$)QiSN@jbTAaos%eaw%*fd(Hw zHHzAMrAnav0+tJ%cwi)i9m<<{sC@~#50d`y!Qe?xf}z8IhP-bUN`NZqCkC>Skr9|z zCJkCR@oGSydEG;dMSd}u+M{_)x^rk)wPWUSH>sX5&p>1+_ (O=|AA z+V;O=`*1IZbX h1dQ<)UptJdn z4~(o)^iTfo?_0L*Hvv_wvx`G}kRSZ`Yc3-o9dIhpyfmII24i{TkvXXUg?}GF$hS!G z=Jd*!;i=9>K+c3ecgD_fuYEdkZBzuN&h7#+hbZ2L)MXhCEo}^w3#}a%&VS}!_jl0` zzdTOJ-Yu*gZzij;O4a5D*u@RtoHI`?Cdwo4(!B?yf+oloV>=>igjE%p2=j$4J?Cb( z*Q44rxd(nas(8ayz`n_+`;c+{g61WI#^^@# q5%)=MojY~IPw_JgO_iH z6oj{4RWdhbW6M2{qwsKx;eQ2sohA?l6oWI9i&I14GN)#hxW?yW_xJH#f7;jr=*)Ry zV^txN@HU7eiT}r^@8uc?dMv%-9}g!4hu5=YyN+S&%gV}fn{@Ks?4M+&-!;tM@AGAQ z|JkwNngk|3rBRZl+momWm?JuOhQgTr>9miZmjFVVr2$vErq3tdm6iw%NTLusYP3ND ze16JH-)*E;uHm9}BBAk&u$rY2(UFI{*_sX=z>l~_9wf%k^;m!QeB;4HQ5oj=PVvct z2y!1Xo}=k=QJ5{hFD~Z(!*PSI$sH_UN=EFhNHPX0uRg}@8+)?vTI>aZ+ITw1g{|+D zBQR|@`ZqUTX`v>z^MAFA-u+1)Qb%fQ_O&a%2hR`tRf7MZOv5oET(9H$DP>kBQ2B&d zmB_Ka!h^g9E3i;#NUM&rGI1!8@_$4_p}+KB`;zAWSp4ICMB6UZJTBmPZU?^%3-F$o zaotMQ<>w#IJKa8pbTANP;NWY7sS%_ZKv9}?XFo?81&Tyu2{<&S6!37N5TKRWH_H9> z^NlzK!+ uOg~M_v>2@1 zS%uO&1`J6UpZ8#5+_V6Jb?r>&DsE7OU8>KcBG!Tm$AzfjDPsT|iQS^~fI4yFV9C65 zX^zRcxljg9+hJqMz!fBtKos%c>L045v)-=*TpoESIyUT!KMWHyV2(Yx8Z+bt{F^^8 z+tbq0&eQKMGyi#e%sEJeg@y5#J?GuYBWdz>BI;K1tCcfOB!Ij`u6Q1!Q9@%TZ;^Dk z7b+P|%EMS|AfoAUTbGy5m~8p!6Ty=s$*!?fZ{x`JkMSBXwTDH)+uVb3VJ=2Kw)CO8 zUEVeaM1ND$$Xak-?pW}AgMQOF1<>Ym5Mzz)4=H^bG?3d6P8l;B%W9(m43esd_7r}c zvZ^va`2ee%eUHuU?fWF#>O1U5J-A`O#{cGgxo({DzyPu1=KJ5f+y5%nSD#(=J7_~W zd75@IdCbBhdtBrj=Pj*x5 ) ztB11dswV22`I+_;a(wk>_px3r?dkX0+C8^d5=c%1-K!mi0bkR#)ug-6L=DIGn^s^O zYSId_=0w1==|H%aR4jLB+HitTQf+~;qxQexUL9k4F*KQ T#t+a@hc>5y)Muz!sVi*XmZDkZ^edETG19*i >iTInUg$UxD)9E=i?DN$VP2?Alg=p>?eT zGFGd9w10{ZBG8gP>UXVrqkRIt2C^vJg(+T2;K$<2#ubM*qhebs9(uJ>g)I}C-FS%< z#R)M}Sb8j<{)71GM)`d`$wKFnyu6GN%emxU6j}6X_xwF8>T<1Ls&=&^<1^#ic|TpF zXo)B;f-l@@Pu@4J;UvlrLddPvv%-eAhAs(*mm52y;xQu4Lt6j&n1d9; z8Z66UQ%(2Y`Paie4cR_y7tdQtN(!Oi6C%>0_8O+qK6zOgD2)CczXHu6Y> jGkmqTU)^XaWq@}_U|5@^N2}J_HoS`5uHS~uS3eW_fRwi9;L?P?VaqNPqekf zOJ4)E7aU$=%8&_@iNokLFM18?D{-Mc(3f3U%!?wcH<#B9ub@u6{ez`B!@{%oHcDM# z`uiu4F^QEo{*?*TlvVSKRY0e* ?=_ E4KS2>l?-nQFBh zhWnp-kk;2bVnKJ5U1w=Da~u0C`HPn_x<)>@U0tX6MN=H`>px9(J$Mp8JC!r%aDV>& z`}d>~t%Ug~{p4R!<&j%eBXoBOy18EpYhRk80v5rUP)OrJiVqYEFvC1|T6y0IPydLC zjWw(67RRRz){1%zPgNhhv-&Zjo@nt)3=<4WVIUqoqhVm8Y;VNF>t+}*g?oGEIQ#yI z?6H{~F{xhTtf1A{XX`G%^X*#M6$MrIWv*)pY%>Pw&H1kxl~s|t@Z@);-{Y&AjmB`i zFYQ<*>yOEdrur%vHJ?h0Z_bm)2 6fBN;%HJFE9bqa(;8hu}MettJ zNY&2>wTh=|*v8TNKHIC(q$`)op*iy5{`%plJH9Iqcq@*g?nm?UU)h J;&2@(wHa_1@mUn4VO# zC^i0C2;FK`F@c &0SVZO$tMK+Q; z&`i!T6#Rdn=KcJD=xrM0_1HY}$j!f1SFguO9D ^B`n_F`#w;bkU#0= zCPIvC-S@4%Dz3S?IEWLk*j?d%-fyr7rr!w>mPZ~6#AmGJAdq9Au&z^Q#nXKy=kNAK z&3|*l_hvKsswUv!aNEzQ gx%1!;HO{AsVtQaeJ~(y z&|{s~SY>=efVSE1VlhR6lQ_j Anmb_;7H?hU*=gZS?=X|C6%cm DZWo|F&utQ_u$k%YAI)nDWG8!OA*4x#ViK&@iHD6=CT93UxCxlDim+>&``0qu z`Mxl$Z0A5(jaK@~O55^gN_4`)!v!#aO3sB)ds-Ms3c3XN=SmqB6^{n*dCZ%*nceLc zpzfk~u__|b(T!Wj1}+*uFJ&lXQvjeuQylBiZ@W$JKGRR^cIu5ZpCR(^+2;ge%Ea=0 zLO$qU=wsCytIy8Q`K`|lvC!=~*fp{OB|r=_SvG4q+VlN!?v?BI)a(i-Y(1x+QkFI6 zPhx8Pae76KR$>t|xw(^B@2i`RG`H(5A9JbOfsi6i3Vu@C;i4uR@`n@z?2I_yU2lV5 z3@h|Goy6Xh?{S100>LEHmt=I|Juyb8hh27=EyF)oAjUUg+TP>CE=M?TC#;G)(ux#4 zn@29g`wF>&`_6b4f+(-DDXK3Jgqz}s9U=e&!r*emF+f(j#*ah;1sOYpOYB3Y!A8iC z2@Is?URzqK9+&(K%GmqQ@+p$tTRAxqrHuiC*q{9?H|ltPV_8?@;WA3BXYpf)Cy)aA zpL**Z9|G$(RMktl2E3inD}QWa6Q2EWck?{kLHT_NWOJ(3R$ aNSQ4R70`wU{~X11)iT3VZfCA&4RWy}y46xOAnJ?Co(^ouzYIa#Y~r z&}XZ49ysaY7u44do#$1KM}tgw*2XutJXGwyfpy66w&v8n=QYn@`-0p-K|yd@(qV(I z(KQfUB;Ao-M@iw3&RK!=(x);7yB%U9_IdrSKX& !0CBs{M~iMjFZK#_fnz?on+-w`WKC_4Nz* z?M%~qgCASVf3VGv$rOrIDBIQ2sLi~y5;GxQwFG%me;F%4S&R~6x`akm+BgGBZ95?D zo)=R~zlT@H$E~D-Bt@S5{kOaJ(0L_Hq8N2y^_gdRS!%ECqX}iBsm!=ZO;=iL>$Qa= zk+WLW;L=M6sF>^*stwdbh-i(>CT=_MG5X4{VXY2Y>zcz{^HfFFB{b2_-c8gw6G`wb zWh5r58wFB&lGK*W=LMM=9roEy{LCSz8C8`G1@-TfWzZ2N0n@>i8cD;cpZ?Szc&=QH77ITIG5{+1mSa%Y}I1ISK zyjl?L8Z3<$52I;X+#v~A3H=7;nT4yAl%qskC`ey)sL^!IH&M?H0Acl%-pX6ffqy7G z#!SPt8_pu>nL#ppTtOE*t$gp6jr{DoOeJRQ3}rQ4g+R{a@J<*f2FG>OOU4qhzC7=T zFy>5C*>9VOBt=KK#i`|f6bkBo7AQo0vr}ke;}9@E=6;pOYd*4I{mI_G2ZT-&e#i&) z1PaAP4Ls8)KO@v8*9c_l!-QWmd rk*i zCu&-qbF5u^;Ag);0pvp2ki8!k_!!sj=ca@=Q!2T?zeHlslKso%b5K32BJcvzCE5^0 ziUNLM8*nj; xlGAMtxh|V-ze*5A#5Hx@`ZOg@ zFjO}mV^LC4LVl=KQ*A#rjAGA0rh8AK@A9hm=m|CAzQ=3#1`Z3CzD4NLR4c&3S}qGr zod4mE{+w2EbX7m34#GVm6eH_j?Chka{JcwC{TvQb*k%O>Q|>11Vc~D|8v6wmFv9q| zFD0xnVTmJFJ9LzrUx?!JD{Kp+STsp%ku=JPd844@U=jfW9I$Tnycd~#z6Z(%r!D?B zZ6=7}Ol#0Xw=XPxjOm+?$fiSntul(ZmzDlGSeiHdMjG+-&-Y=!>6KksF1pR_(!8Ph z?FVv71!w7l0AZsTWV$eNa{&>07Y4IVXk4_%OsM|SbrQk@rZfUQ^ooH@Etk6Ak<|p< zt2bsf1!|8~TOI6O{fF+P9#My!I*%pd;o c8-_z zJMCm9UtMbl{9?=X%Fe3p48jh$!yX7$D^=V^6@(`?_%ATdKpM2nap5mb9O;HGj9;lW z!P&@KRs>}8XtM{AvDa;sLE2eYd*Y?NJdKf&)N>J$mz(^fX8b^FS6f$+T&Q;WeB};y zp%36iBr1(A%$UCQx7+IqnHx9N1?)e))PS|u)F~l{Y=1Z$e(_5B_C8+2V6j#{5AHK| z0W#PxS|w~g* +jF?7&rD}L^M%n+@ap4amJ{974O+= zEfBOzJ`YAfW&^xi6r%5*gIVF{-OoFF`+u5~
wzy-5JT8mt$w^|K0buoJK_t>Oy?6 zG!pyQYW1@D64b;e6El)x_u-jh>hfbbJLFz!tjT7YZ!jAu4a$apllFN<94F1N0VVYe z&SszqlF8)m*XFY`yxNcRol9 BkQS4S2KS|f6%%uVpqkGRYe~|&0*`T{?-)rHKYGY_=?lEk>_z}@_i`kxla`q z+rt<1Xmm%wl3A+_S?NvhIwb*d{oD()5mkGGJKbfEZB^e5pA}&4G*b-}HI41N;-Ly? z7nU1Mz(xJ}ee3SfM>PC)Dodc| Xzz4DOXmGOvOi+?WKhRq&_|847EOK0byOug zpFBK=!+vlzNrxm%Oa&ti^gffUBL~qJUu$$rb5bMn%Fu))Or@}vF!pMOzM{R>@s#08 z+aI&{Tzajo3P2z<>ck+H4LmjcI6$jWTxd)5a8p&&a43D_@>76qa#B*cFPTh{$9Za) zf4E`eJlgoVp=wxayiBid=lKKwtCs}5Z$`w(^0ur|+borh{BHv!dFduzv~7_znE;&3 z$-d~xrEI*@#9@HK%uJ#)2P5_?(} 88?lF< zc}Zj2T9RHt5S!Y(i~EzCCdKA|`@8FNMDb>o1WE5KyT#k%*G(<$>l6L49VQd|zeFU) z^v6L*+j#utP5NQEv4)owCPzO49t6ouj;RV%(jo*3+=xB>@UhA9rTHO39dA}IH+4C) z02XI#a$y`c8tqXUVEUfSZbwXw LA+! z(&F^3EurJ`z8B#u8{al$`a f^XrM>*Z z8#+0$xH#r<;$guo3e~jDE$#&LIP*G4_5}pL`aL~=T1$f!;xyCx^0w=N%jd8T^Wi)+ zptM+iDD0z?x*R9bdreKDoxD3WT_adt^}Wy{k6vK(>q-iforb~ZBWe3x_2jRq5 `0~A<_3m{}km-8uA4pd+o4@O` z@K$?AUz^_qGIqek414(iB?vXlwe&d{dHE2LOUf ko-#OCAL$002Uo3LU9#O!$qz^igL#AzJILbv-0cEzGX* zqlQdP^y|@^s}=y{aPT8wkbc(h6Rjps?l@mtjk--U)9!>^;8U9=bGP=)A2D_EwFD z?+N3ZZc3H9JER!&^-hmaehUkBfQd*m@?6Ps5GLf&meF}C5)i^Hii}@|Qw&fSF(f{R zZ(NOtjIvre{xdsvn6vZn$nN&}WanUJ`Y8eE|BR$PdNEt}APa6vO1Q1ZWmQ$%``^ zotOuICi-asgyw| X6@2LigQJeO~S E*2()x2q~}kK_b}zLe=fmECLqL|8TAN>Z&f+XIc|3_+P$kx*t~H|ppBX6)w; zA9vt5XZU~!!qnMZ#ZoIGo-NwjmY~HcZ?MQcW3M-+`*0C(x$tl&^Fl%tIBfY1k;TYV zueUqz;ta~F%UG`4=6~y6rNV|RW{6Ck5_@!^Vb(LQQ}&{QI^>0p-_n)&u9!SmyhYOu z&y)p`$>~;u3G3D6EWh+onOK}P#l*%5&dsX%*-H&wEQR~N8wz4MP)S|A`mXS-4e65f zeW6B5bx@Ex@QnrEuSw_nx{$C20wETTG~7BVrWh^(B!umChKO{omW|QHt8q-}UQGA} zp ;|gi%$hs`I1!AD_?> zk-R3ypd$Yn^(0HxT!jSo20})tq56xmoo_YcAIobQLW?`shln3({BCX@4qsdHGq!vV zWF5zlq@)%aHP^!;vOI^Zo` sNVlqdFf8M}6rzDc; zwv6~>R|y93%bAO=kwiA%%$tKQP5Er(802jx?l5{`uR|f%7IlY?6P?L2oEZZ{VtePN z^YmNq4&-2nP^*yGA-@fFEUAg3V(}DOVt*Dty!QZ?^v&BZdoG#ft(lRBv*btW#M>%F zrj?eaU-Rxe{m $fl?qxWgCVNbs&6KxJ zm48ZiekadOFOZ@1++6N7j~G0+tBMrCvXX=#kM@J{=5`DtUTDy4+W&L>C)zv;v=9Lf zN#s`vX56B$9d+^TRrmMW>`Z ZBALQ ze>(?-t@Vi{L+1>X*gL>!dDR^KL%G%502?N+hYHr;X6Bx3;dFjzCU@6e4Q3l3Na|uP zHw~d~FM2A)UBB7e6_j))rk&3NL!+v!5e>;aaTzp->;206At-cctn<032vHbe?&V(! zQO!)t%*!2U;)J?)tM?ZPTi&5GUUR$Wj8Tk6PFptGf(}tAGea)W9Z;y #NAJCc{1e9-1@%v1!s*;!s7d)AXx$HR&6i9XG5)8u(S!UWhiDO!!FW z{fI;b71^2}8q5?WI+}WSrm9d-v+r0+_r1~lw^G!h75%|x4xm5W-0qFfR-&My8WMV8 zXbRFWf^GJAe#;#o=*zNPj0^7zQ8dMAjwlIZ1 bA-cK)vq6-uoe16eD>Qkg=5lJY^O~=7DtP zP}$-6M>`e#uweq3cQ9pjsJHw(47c 2a- zb7yin`*8UTMDZ6lhoQR9>X9C!1WV-bH@~&C>+%aj2E0JzVn9cW)u+#}Jw6&?ZuWE1 zfbo>pocqg&)u9UX=!pJm0*D{R%pTE4XPkN?@A33dBwMFz5EXp9yRSJUZ_T-al(oV# zD%vXY#Cc8t<@qU-Y@yx4_owaM7&dkZ-7Ki@^`4XsSm^V6^3JY!bG@PVB(~1>5|r)v zAeb>6C}e;5nk~~>VNf#+8C8}E5UnTRGYYIZ-EYi%=eDd&b}#*lpZTsx381Dc6-P4m zFSy%&tFAO#*}73rt uTc4-GcP6%kR3p^=qmcb>t!LyoDTP?#fZnm zF*3>`r=VR6+`5@s5X*9KHzT_&QTiGvOmTp8Um*C_WQ9Jc%A(5;?`vy)RClg1P!IOr zQ=1RVZ6AQSkF5a}@bx?Y+ =B0zjGMqs%R5Ehj@yluaf?}_&b#-rzWxPHNlcT~n3L@-8dX`#T z0R$3L91sPZVESxAnN&K2#q2RM%gt9RI(h>_<1#PhTZ8@555rlM10KFcv21jfJOkpy z5`&-$EsXi4)m3t3&y{E+vV8>;PdZdoRB|eUqTuaOk(k#`gww*)&Gdb0qYo5xcbk}3 zQ>g*jGpdV%4KbMCA~EvAESTE5PYh4S j;}NPxwMZ!TT#xe-V)0zgyA+UNEin|2l% zC>q7_6$)yH-*4^d`orV9rvv=_Up0Sj${QuegcJn+Q1#VjNl2eu5go3UI2cVbIxhl+ zxew~ROp!?D9!kh|{KNyyrZH<`hw0m{z3O?ZW4cCB7cYdg8@pBg8{&><^r*+{%93C6 z_U9^}7j!m;9#l({C>j6K)j~n9wBONLzo%n-7#|;hQf)f#Igk8ZxM^Z)x^GSo&o(5o z6t{;zCf$zljgNsuNRRC8V!%BYoy5AVWa}|9i8^b}NiNWX0n+T(w)EmQUaMJ}bpCOf zg7tx+mgf`?a>%w>*J|s$jf{L{poYrrq`1x(FzJ4_o>Ar6ZX=N&K6N5z42BB&j7sKy zIC;)?w@Y^U$FozxBp^PDJ-PQi`+uiy7n4il!<}5`rTl*=C?<@#ysqqWV|+lZj7Z7( zVk8fc?tl^Z#!I5^BB_I%mK=<@S@b!ul1T`?QZDQ1OMpcfec|tUMRzqvNVne9)s?{i zJ7eP*|KpUE8s-PvZgOr6LznMr1gq`Vvi%qll3eG8@BCuZP`5~~ECmlDQD#yuIT4EM zj0Vg&vd7~6#y*v%I=gnQ5 Vdva1VRb5qypR3w@|SST39v tU~%r?LZ8O# zXJGp;E6pnT6&yYJ8Wyb@#^5&_SUN*N$DgxvVmu21g^N2ePRnqPKZ80I3K)G2xGv%$ zettkh^6s_?QA;8oe*xBzN%T4Ezq*Y368rt4Odifr0L!lThoHY!@&&D=-M_g&Ds26_ z3uA-M>3C_DaU7{;Ru>D=@deD4qF&0~Nv|Y1VenKORcy)H>bc;hf_0XAiA~G*^WP zZ}cBRd^c@uJ~4}?Z5XWFk t+wF)RDUYc_0cWz_Vi^vD4$>h6=5y^azx&NIX%@|Do z)$g1eg!{+V-UI~m1#FqjH!BW>Z8@AYps?NN{P;pI?_d`LKal>@IAWI9ac<_;44wO8 zC1zP6iJM&_2s))*X0#*A)K{#sY8OZiAO190%q~+ u0&`+*t#5p6IZ)pe8b;lPb;;I%9*W_ zwwUA$HX$l`z-2qq|Lv>Ast(473@zas9+|)>H _ z4b_DqU;&T%?t0z1(*Ib1q)y9`eIq{#LJIaep#Fxc?BJGipX*OLoZAmqPEV$a9oWX^ z%v2%8^u@4002XCNPh=Tw3X6Jo&$9``l~LPsFP@%|LN|whQ04||yl^!PvqNf qZ7}C8a*R zw5PJ50vbcH1amMF)eXf(158|TfD=-dl9Xp)4K6UFv0|0g*!GqPW_z8-U#`Ac84{i~ zj#O^#Q?6s>K$3B$Zx- W}ArI2_JPQWqh% z&Fatxvx@i`0k7tzEZ?1TocAxXPrLV*V&Gi-jXHP b zdw-vs<3B54 B_KwVyLYB^2 EvHfJY}+cz9RZSU5bZ)J8C^SM4mf0#t<_UNO4z?;v}7KfKJ@B(cH=r9a* zq&t(q8{Tz!esP~(T^-B0u7$z1UXpJfnsA@{s+_AFAUy9OWc<&cSE3AR?a(`LasmZb zA=zd7FM7?Y8qY6Aq&!yhNgWjb=)N}9q!0M05SXGqDQvdZ*kmlXEl12C!iVmm;nMf7 zc&|ss24iDM*F3inEZ_e+AZ6$MZI^~8O7UZuZ^*JTQPX6JtYH%Z
`H$-G+ycAH8E zAM*zA|D~ox2ZA|H#^=I9afLTnm3oabJh)Xj=eU9|UIce1VNE()IMYTWZ+~3*)0tPl zX1jhVK6pz40w+(@VUKva3U(^SHqG32E?&%qK03~}!r$G4!s6 v&51(rz(SFU9BzB__p-k9Wnch%xdpNe4f(H_!(y wF|NWOv+*yzSaYo{1fU#ODu!ajtkb$%^svHQ0@)njCyc&6J*?MO!C>@ESqbPyf ztZ13AlQI;mPJY6@XiI1HW3-^gCopkBawnyaV9Y}N@Cbqv25VIab79K9E!4amV3PsL z3qvVqX}A{fwDzw#vk=#}y8>XAj@J0{RL{$YCqCTpXqrEV-?m `bMR8gZW*DF*B#FadphqFAc&{YTT(#B!fA8%=+D=dF0I z_jP0$uHFwI G8_$V(7rQdtQl^2SMt{KsdI92OmV_Ck3OODMja&*y=aAxo4=|eAU3eNIDRXl* zCU*Nx&1o5T*6zgNC^dDu{SP#RoGR!3sp$!$n&1L`=mla=+r)(Kt^;+iVcVrKt3e8k zHLU|hUzSj^D<9iM;gd@={vwUH0z3OO^dO9VSbz6zK$i`33Cwsz}j>niFsiKT&+O zKezM7#1Oy7&f7}PyJwHD_BCBx&bEV|FWQg&{d*LRkzIDW#69g=MOImdgNr-4JU x)idE`Wm(*8LiLP;L`I0_7`rUZ0o?lDb z(gBwbY+59Y48wpNK8az%>i=Ub0F}_Hh4E+WRv6vaiPfU5Z ^=mEWal!3J%JOX7VrjGFP z`KmS+hZWFId>0wD0t0RWm;_DK5!z~!XZ>txrt*D}n)yT$2wDED_0z6_X>Wz^)q`JR zEKTwh?mZLT?UU5`sK|rAAPRK;BzZ&}D7=UmqUlX5- w<@zvvV2JCkbpnrB)VDGA6 zHi>WdwJY!2>YPn~&bP91YtxtbNXmoFbaVLZ*TQ?YHJ#0s0R)-dnbPLa@QI*tjn}Qo zvPBnq?f?1m7FD!S9VVCVR`yY%j;=Aq{|E!LX0Sz+_`m a5f1Fsh_&W$={cyWNOJp~7qjx!X5BtBu-Uen;+s-zdB zWd8bvb-eZjc!Pt9!E`$K;*uSOstMvGje-Mt9AQRcRrlJ){C%&F3IUZ6&UG*G;5$N+ z?fVZuqJV%3&H3gueN9oMhU#d-%BQKlpB#IJpe15dHRt*7832@xc6a!iQqC0Qs=O7= zb3p+}_3KBj>k3YcETw=(%cdjq?%}13wy-vkt!8_!Zm<@EPBb|0lk50$&))fb`@z=` z$f5y!lvm>L9cL -Z$>nowhLRg0!5g6XB|g5WI) zzWy<5YYde^0N4;&O4dYgw${U*F<4Jd6`;ywUKoQHI|*MH4Q^SSnwqL{Vk!P-wyKw! z-~0)q0 t^$oSmL(CRST^ZJp@fZ4v<` zA3+f=Fk=r+g&|))i2*NG)+S9JQx2Ash(o$*vY!TdwBm a|}tuZLG|Pw3&)mef*4OAg@JSSqhQX?rYGt+m|=6 zFHqns7qL-QZvR(oJT5Zb7^$H8!H&7@s25C=-jzeKucsYu z8sD+T J~$9@46;YwKvw7JVYP9xF4&)VrkTTeA2g+ z^br_G=H|7gJJ5YJ2h4k16=6Kf;!naev1{2vqxs``)*ElAu8ubFGx+@_M^w!}+1WAc zny|h}45Lm_+FIVK;N?*RP8M};(z2ngfy6>Rhrnyt@{L2P(w5$n6 wIr2O%ghrBg*hvpg27}uk|ya z%2_sY+mb2ntWLbX_Rj2&$uBF5G?ZldqP#oBp^0zFjz>B_u`&d5w|yFk-9b6j%Pz!k z)Fh)cOLBe^#*Vms_XN=<>%YG;U$;wtrwBz?4!1&g;^SXoPZ16Y39)nBMKfKRBaM?e z7~1^z^*#Hz0eb@9CI_*%&EbL)#kZQ8QZ3GX|Ibb?Lju%N&d 4gGp4iXo-~7`x#_IQD&%wT{{0KT+r3^QR1vEWO+zG$JO5Jz(OwV- z103^^5c#MOc?=8>4ek=QXD3%Qn F|qR_;Wdxi zvsxswAG##?KGngq6qEVm6|t|AK2QFG(6Cd2JCdzHT0;6x8Ol7JqW1Bgj~sl}Q<(aF zsx3q%>GSr;*{q+defQ*%K^Ps8vIfuG4@rv*b-mi>f}}|J )z-NV>xvbnS;>suM@wvKKJ983{pG*8a%jB)nrQtEjOxk2f55 z^?{UIJF#gaM?GErt%m$g%#~N_ S#^y-<*3fz!qVYl4aY2|Y+lT#dN+=`TUF7C3! zL-nQ{sA;_tCGQFoiqt0*uNBN9!BHtZLxB}eYi-Q2-}eO`t_M@ml_`EOVzd~Dy`3ER z#3VJnpUH)tCg?!ogkIan&TOOSM|rZZR9I_TCen^-h-LR2OOcY4DoFWbCpc2r0@X>t z!G%px*4{p)0$0JTTf=?<#Zch`5})D=-yw73GZj7k+Rug(HpqW$!Ci-M2~UQ|?JF=~ zry(5|jU4`=3T38AvNoq3p$g^JTbM#}Vmtb#{&w<}7jZMwAN9fD;xTqq*C5Qm0_V4r z+ng|8anV0&kKdk&IZ2FL6DNIF^Ak{$b|9`d-7%Gnr%F gZVZOvV*4kegM@q&`W`#OkpJ2Yuuh3e3ih7 zf}cn$?}2D5`Y=Iv0++pX`@yY8sc@obZFfc3QdGGp_o881^$R#-gdTD>cDosIlHkAC zFWWlg;5H}~4T9#O<_ZiP=CsjQ_7&;_!Nn7`L=b{Y)^T&{q;f;GVQYNYEh}hi<+)7z z*bOjtX6-Uzfp{rva35t!m6)TL{g8; zU}tbvrHkh~J6Wlq?60d(Mv-#`vGi-TRA*4hl5$}jRN+Nf>TzB>D7Q-QLHjB5pPUkF zLa~Q2*rfdE^F1{kR!agc%^sN_8#2hw9GjH>k@kZrC;*4@J@yjLQnZhiBBi*Lz~K`0 zNrFYU2CLN5Y; =V4Jb%Ew}%Qw0uzO${$7!iyMY$WDf~1XkXXa!yM7 za_>OhkuH$aQ7U3(HS}-|F_z@7(Uj{=6~j#hoJ5Y0#%-uIM*cBN;kb&_4m@5HZ-xFy zj6cWixFcGxctIT{HxBWjH;f4`K>2zx&?oRDs3}JFS9=rK_`VIX`%=HQ$n1h|m2uSo z+7Dx}9PJnA zH)YnCriegDNWmJcQ+@@rXh+yX?~44K{iCthia) w%vA1D!2gM=L; zTds%wF&j>}p#!d>ZHnuJ?ZlAl$gZ8Fs~A1&80pLj3dMO!y5rlU9H<*3ODSB_E0&GR zEsO`gx6{Khq&m!g_)I++aYg0i9MjbY1Fu|)s&de-ViuWneDqrJ+ItjZdSIobsqK9W zYUFc|;Hroz>k*E_Aw6zr5V@LAkT_&Lm|IU{ 9t#3?7Lm<~j-^+xE#|Ja71a@H-TlHxcFZeu^*?d^qE2d|| z{P T@thrZIb+sFXAa>7g6PsF6 Xz}u9UpQQO21nVz9srJ{= zW|^9(8+V7Lt|V~teVoVvm lt=7y@!X{cx*RnQ=;kYN&|9p@HV zkDSE>+*$cki9nftZOm-^C2GrEoQ;WB-Vz7JWI FBL*# z)4%srp{T Hb R!`Z{R<8yX%N!eQyb7|2JYVu&U4K9XH(QB~ za{Z#O6^Z(-v8rk)`}h;>?;7op8uZ+_yjTXQ3<#@}j-fTu2uyhII%pb-wJHNunj{LK zea8Fv(-!GTZxFPKz1e} ovUY}FS>71E$|WmY%}40=uR zSF32N%%&d {;_Dt-od;@6_jVfkWxPnwbcfsz#%zp-uUNT^84tteYY&0>LVqgHZf1243r zL04HCJ42r&B})ECOGy^sIc$6~)qF=>ASEO4kEzOY;p_y@lq~`C#f7W=N}<--%?g*z zH%pg7b;YEj2`y{1B<9C+CV>JmD}o39fB6yI@c;MN|ND=imH$82{ok?w_aDLgmBjr2 h9{c~}<4yo7QiC-Hg-<_gE)w`tlz%5z{n|A6{{Yy2OPBxv literal 0 HcmV?d00001 diff --git a/assets/icons/Computador.png b/assets/icons/Computador.png new file mode 100644 index 0000000000000000000000000000000000000000..a07b74ab36de34e2b0edcd477462b4f4d8c5fe04 GIT binary patch literal 11608 zcmc(FXH-+o*YBYOG*T=`v4D>rnjlp`x&nfs7sb#d(ggtl=~Z|v2v`nCZ=!-gfEaow zD)5Akm>^A50tlf<5RiU{=l$Qc-uvN}Z sI+ jNN >6jeBOwCt1bjde#Piqx*9Y*Hx``aeC?*xud aIE2-@ku{pg!dR9SF+BF+pNL zC^YZCPgFGO->&~n_a5bcsP`!UC-wiK`~Pj+|2EzKVcZsxZa0R|&bK#u!R#+@Ou<7c z SKJj%!RnV8R6xiySlgs)_JRFB~>C5e!?KTQyLIhXWK42_0W<99FGX_Kz^2PP( zZ45QpUh{Xzuba(Hnq(r}nfO~#VNOC?v-c4T>VO*|+dMrx*=dt8Sde0`sZ3U!%#qIi zTeF?_=| zXJv9`a-#SyVj8thFRT_Oxd3JaVMgHQ)}3Qr<)2(1>AokI(r94v1w$CM||UA>WU z)?U-dHx#kyEb|t3zJ2j7P|du&D7h39U_cCAr%Pd`V)I{3dJHl`YF6I3jb+mGCd)K2 z#7j HlL?Vs9i4(443F)hVTgo`-oo)eKR~8 FJX%j+ZQxdj1;EQm9IkAMzL>YK*q4-R$-6fNwde4 z($hEPc}10p4ajVIiMMF27-gvBuS55uQDbfaNQ!8%ow%h<+}}PyKl9ePUk@kj{D7xL zYfn=I?SKoFC`gkf^b1wgC@6a0EgR8bgWwV=XZmr>jsm6077!#TsgiGEo*4V*cT8m) z=3mA<5ieUQ)X>^0xH{;iT#iEXp6{rDrO(9;)8%*A4{3{b88F%yAu<%bN7Ev;Dy2ir zr~~eEwHRYVU)!Sagxu1qE55$L+bU#bOjG8pz~hVTk;80lE Yw(#LEcvs cHc1BgPsgB8|2karmLERT3>66Y-oD zSGf8&3(A1??#o8=d8h3h%-3|M _vS(p-WKH!IQ$nulTm}t+mEMH>Brb6u zDKBkMBqtOK%6aBo;E{AI+%{MLwz>hA9b`95|6o3Ua5oFyj01~t_+}2AlDvP%)Tbp$ z`8>IDGH6uq1Q6e_*Mw05E5XV-Crpn&OqyWWOkMyS9{ZMtX+ma~1oa-XxYPgf&5U?+ zqB<9MiPQ51O&$}GP79hicC38og#D9|@(v#kH1FpY{MF4xApfm*W6bAQE=0I0KN+9C zpi7D_97v@7gsTgNFNMTj$z4iLnpk(8{IhUqKbqGtn=ijk;@4= gz6{ z0;>UF1EM2RY_2}#(sUt8Hr;;ec`>54r_H;?Glhb&OB1j(FMHo#(#F1iY4-U*`*B`G zZKT*j{jg){g($8Jo2iuI&M+1 |w@b +G f##8%rM-oBvz=VcAkIoZB%>pY4b5xe?t;iC zZuudXe?Z5)%+h*$B$tniVGZj_5^b|-V|kGE)R=R`h&2!B%U3rKhyR$HLFZOJT@4gi z_zR3F@ qmGb1syGsGI;%r85G|k;JlM53^*6`x`f0fo)ASx$tst2y{huLNIH#SyuR8yYJC !${gwEVEYN4BDq36BRStaS`Sc6l z$#3kb{JoOPbIUrwwkK~qqlNlx9K+?QE0eD|f4xk~YhAtK>x_8nFv*BlNi8o3=9v=Q z3L4GF#)xmkAQ4Kk^Ulha7Ah`zNRwj8Ve^O?r+?dQ>ihQIXk4MfwJ_Pi3^FWi1wp&V zNgR9rs~|?oq7-t!MwE*4Ao55aqoXiVMnoMRsFL`)t9L=_D#0yv`b}M~uY?)&`IDt{ zc0`jHk7WAyp+aL#?{nxV>k$=78s0TdimT*P6R#r +(+{&$V&sB>K`%ZJ`cb!=HcbbFL7qv<%n&PlaLv7epmw|CAq8uJnF3|IR!Z( ziH@?oP}4 zG8O7$#>15is9dK <_{m(q555zTvM^#Qzihy^ Pp5f*%*FW^pFuK3*dUP>)lQX| zXv(!Jqe^egQ!ywNQg_Z8vgAQqDy?g&y*?5ZTj`H9^8u1`#!m*SAj2mg5*v&-(3T_W z5@gX 9T?(xqbixn0m7l@?5Th8;4Oz_$?YGZ z7M=~P)l*Y~b>d +@`a&9J$Cd;7{7+8G z%6?SwI}N@-PG(c-<;1Nleja?jiVFE9Ab-FmP6xBSl8oiN%=EU}L}W+{FqjyoCP>(S zvC%VwCf%BgQ)u167z4F)-qE+JHYK=wh9JEnGlx(RXP*W2+|zzDg8TeuxE`pHZRi|X z73hdUp}w0w3U&YPCqC)FB(KwVDDwI2!X*_qqs5pR`grP4xvOhX(1n@IY&;&Z8G2mFi-+TG z;lo`VWw2RRVk5 LGy51#I8FAyac(7p&1Q^#{iFG+ey z5>a|1ef59EXvbJp?nK fE+^@^V^`ct7tgLu `dfBEm?Py$rPKsHDTh;r#In}l(fH4LRp>VBApK(bxzRcEhj((K2Pxkm`$P0YW zADq>+DM4iHp@Yo>ACteKsbp(wTdFb-9<$PQwZ2MT_xQ&3157gQpGOLP1iEUzuzUR8 zIZu|9jqjf2 R_d%~RkPt4Bx@o5(--fCw4 ayy*}D&dJb2FO-C=Hx#~u5>NQDfYipm`*;rqma_#wj zKl*siOSoR7)?aS7;QEb-8xrp=cyy t|oCm*u+3Zlf$zt1cJ3ZORo#=)oPVd9~zrIj*ew~pA?I%6Tx2ZXgFOt&5 zHbt$@K3GbVb)0(Cw2)!nd J#|$;@blOLOd>m<9^GBWk)cZ)veAdc%IL zSEf$r&V4v-N>K4^h95q@>D!f|WU?=+HZOuJ*5e%yp3865{qVUPHQ0SEF6t9Ay@%h^ z{CEvWv#E`VCqy2Q%g4V;A7&<4)h}*n{bkss-C6f2TEWZp5ze>7s$Lg-Q)1^>N{~8> zHCh>k^&T@p5%hnE8hN;cA)$ZRA;E#;I~O_7RIIuJ*~bBjYQG>wUIh!i?MLLB5aa^% z>q>ctN^G>k**GL `VX-#KByg`t#~I z2-2Njy9|D3gR2XO4DrLV&L=OELgFVJJlG)qI27gyaPvxW4MEnZcgwObqgVK)^@-*D z5UwjgiY|_(dIw8#L0FTccrNQCn*RePD1L 0| z-L~w_>ZABz442Xr6YhPZoZVJMl9vSbp>Uda7x*|Mg?1Ee8F 6~YDr0n$$jaWl6# zg ?4lB&qNFD4OC`Cf@@Zjg}<$wYBxLjwc|IvEonnN3{Gql^U)i zp7B0V>fMnfe=N!U<(YVIC{?b^j4(VyX;Xv@(@N_N3qU*>NSt%H&C-%I^akIKPNs4| z*r!MF?S5}%IU%Yes@Ts3R_;q>ixLmSS*0As^L`N}J2)PL@<)FVr6jQDe)&!aK<Sm-U!6itS51z87s7bMl!~T`CuJ45y3miDSE04^Qwzd;f54{LIe= z(aWPL%FD>yEe@88^9?fOFjR5cs)5`9KU>srTAEWNXxc`iAnGkt@rPCU0H)lk)oX l7cEsJ<77YEJz^%)?rG_5V*j?s%Nn)E}?9YTlTa#_UkFA zWupY3PgHM|$6SD-E>o_Lb#SbS4VoGc_sZ@yvlDs0V!k9t14ySl!3=WC9CAK+o!~wk z!35E3qA8bDk7YnO(9<9bkf>`Oy>g07Eh?qBU`Hsbg9~lB{TmL>f43h>ScxZQOJEg< zo`_YO2y~u`heyP*D~$6Khavnl(6ahiDl3FCATb_5(9_RFM?`u6TmIiTl9gB?LUwgM z&eOw?`Qn7S6{#p?J{|+PHF)yiLwwi{{QEh3H-`96Dr;1m%~h&D%3uTq;py`d*b)9X zfTW3IvnpS_+Xt2Or~5a~pgdyte!sg9JOQi@kJx|TczTH>7EBox{RS5dU_?~$*V}Sv zX#O3RRP=DY?KD);riLmO {8dYK-j)mN@D)0wKnQkeQ=lz=6lzVW&NoU6XSK-yO4^f z8%bm7@s}aDgcWo$zz4B|Hdcf%z~cP(Gw;*yJXeJ(^gO65`F!}5J+U5m5ZoR9yLR6E zM^koST09+1J)`C($-Ji)aV)U#p3X!rdl+Y)Z^Vsx@9|&ZV&@$~s_Vr9&TFod7ywSC zu2}Nozrw`{dcaH+XS?f!3Og0gAh#=fyM$_`ySleF$=b!Rs(rL}`EMvyqRyhYv^an* z&U$9-iv(+nZGTq8K)$z&?t!L<_3`A@8X7UqxAj_z3l0ZPBl&!#0`i{*2Sp#P-lBwj zeGt7O;YhSI%#2djBDvSy`g#zY{;d7qJEa51dCTNVX!r|?T4@+V(Z9kP&)B1;W(_*4 z?A*0U$Bcao{&mc_e;xA`u)V)6iO~i@ttUM Q 6S=$}WXB!|;>>x~lk_k=T{ zQ LVX6BdJ;2dydUcB&!B-N)5r %P$~UTly+~2bSQHEFTE4649?c?gWJ>z5lS Iii&FZT!3IMpvW#9o13@0ld8h!62p!w=F>e$bLZqjljW^if;uRflBtdNPk}9&3U6LRY~txE zDR|)_-|qow8sT*^QHL@#!b7TTYwUQtZk&$asNdVXEjw**-yR%Cf^A%fD{l3;F`2ln z;+4}BJ*|_wMy&a}`~7o7{5utI^TA83-`T!6>?mT8moM4n9NXe=|Fp|VlXr1(3lj4j zEiWO5goGe)Ow5@PwScyGfipY9#$ehIHa0fhtx8OM`LQSEx6}tdY4+vR`b|0GaJedu zlZ G%efa3+x3U5GOb(aj zH!~F$ =fK#^fZZlE?c8pG*lPWhs8z4cx^= z0ySm5vm8*4(yf1u|6u2A%@ cu$! z(QB9m*&U|bi3M>wKALj>0g?%hNl{NWt?Pab#h|IXe~AAcIfZokK*U{zmH3&VK3S!t zm20F=M1U`>6Zi4p;q{QBu`#BoB`bUCH6A?Pn8Eo0YIEtlKa%j1&ZSNxh;Pb2`Ms )W@BmUye=Yjn$fEcAkC3Rd&+Lkn~HJ%V_vh08Mm z@-E$XR*|~8B7BY**5s$*A=3ii7jR?a@xS{g1&^`l^HPma#f4J(z7P4|8q_j7#vH4E zh0nMh-76?~ON?xFOxe@wVh$r|zMO)blaKuVo`aJM9e6h4ah8TUor))KOI)XAhb}C9 z;eUq_SNIj^Jf=fB_B_&%@eV$qLvpgI^;)mlJ^oNA#K~B5Uj04(ok@ g2%Nw@DII %m)?_DE)T6)0ye!uYwo# {2Ol_*xZu3Povw6Ao8*DO{2CR2Pe0)<9OSl@Ok!~HK7Ce&V;)hx93Ju zU*4?m?DM&v 5xmltj{m(QSA8x>KL;+ L$FSfS4 z=4ShS{EnZ8azw49_K>eI72_N^wlia-lku|oEs?_O@c>IKtdJ!O#ojZMju^0uikH>( z%zFO%IzTF}ZccxRN-(pQ3B|bdWQy+-`Ph{vUyfTnd`X5^DaoG`< 54Qa L-v-6J5e<;%ybW=W$)bhJDTE_gYiw^hu+@v z=%@qDAZ?7XKJgL{WcZTPS)K9C0#&RKkxhFFpktm5(|>W`NsB_ozfe)+06WBFZ-Q4O zSQNIBKtm$^!^9nq$KYmAtZLyo#|9-%Hu? HfBhbX<+gUpM!&y#Nf3YM>S)T2C-dpWb~0KC2cb_+g$AT3?-Ht~() zhxlVgkgX=L_5?k`kyi+w7X`f{h>+=>D$&ucB3sQ@HyxQ;t~6HSg~YIG_aZUA`QV#- z@`;%Mg^hc@K8`8nWr0k-fs_MaEABbn#9y6imj~{P3uoy%IsfJqf|0?Gm*XI{Pa8xH zNxu8htzWie$l?yrx0}Z2=pdUo@v9P!Ji`VdAYLm2H0@`+{Exz)(AdKJnzweOyjN@% z>O8~7i_q9iGLdUfoq6R{(O_q!9;BnLMc7S6DyfTO4WHE~Hjpl{^ ~X>s zru5ll_@O8;Iw~&2>bd)wI#nH}KC!^$_00${_2+>x%#G(XL6A0jua4o0OVBwg>Av^` zeh6Dhft-}hjVX^DH8Je@kDizt*|Uz?(5&la ZMa^$#fPig9@Y~cI)#oh8aACG zm+Rb%ZgmTjSA -(=_%l2zJWz{;8MS?vMlSj-y&2z+-b3OTi6mLoJqKUr*F>d^xSHI0v<68R|1-MSGpSikY zr?_wK{DS^Umt}^`E1ax&M5 42b8+t~yK=U9KHl0Xcw~ zRP;8+*n|;^p*~`9t5I;)P;Kn;2BdF#3@W9&O7fs%vsAgKS)w3AJ4-9TtYR3~K)%|~ zIITJ2>|UQ+IC2DOP#~-LK%A-N#>SPLA3{Lh-z?Bx-+!&UI}dW7ZO7b5rN!-u1S%Yy zny&^ NZQYTmDK_Xu&otxI9_wv|mfg-`T ziV6n253={&Jl?Uz_#`(T6@7V--;fat*9)(M8UwENh_ve(W>W%yTwl|`7gtmta@!ak zPpN|!rIyLPA3-S(*|aG9RshDg_Cl0dU0#<^j@0sgG3+lHuvK0`94EYlaLWrOj49Zl zbBhVht9H*XaW09r{O*9-FYE`*&daVN_J`O($;)UA#@LAQ1Fn9=BIX4=5f*);5(AR! z@uW)3>J>&QEYZqj=iywGaT8>u6E2t%a9eCh<_o9xt0ql>ha~PkeF@v2ZQph62m^&& zcl&_NjEN@5@sCU;f!YYje<)~h>5!uLuf@QdqRJxVGVqV(V&AaE9NKs*kRs9b0$Ecy z*tkf~0nfAl{MQa&HO=Z1;|r%jA&EFqmU2cmz>qNnho8RJHY3r#_+&C@HQt;@@@?#9 zVrH_teP&tP{a<~o+L#{k_W4^rSw}%(3RN1(eC9L=^X*l#y!Xu%w0~j)N;sIjjC`Gt z?H}t8OhvE1t_#`*MK00ND9*duMbpQd#K_J+qQw2Il(|wwYH#cn%5V*eC|7LJwodxA zyskY@W}5s{Z@JfRJSZA`xv2X _7i*@>QG9q*X3`MDa-ew5}Efbv;~|9Yyl7=Phqb#M^thCWGqiVDKF>ngwcts!SMP zYdlZr{@|Mo8frSB85qaPBl#tXg3(BG*P8*AX!`Ik{_80dj_tk;cwS&_nZw+6uR~3d zvBWS9vh};ZR%-GDZVhHnp7>yN8q~O?f+Dxiu!#|)=gW!b3%(u#Ya=NW-(2>}q_Qeh z$h$^F1B9<2yQCX5GgnLe>H z=;yOZP!-3J#z;vE3jwoB+%{y)Gt!fta$vnA;tKPUjJ~G0<4hi`BrL!KRM x6ien{$XZWP}j3aG{^7Qz^0n&A3l62*~|wJSW;ke)fQA?g1nim ztQLA)_vvDhyhTdNV8Y~@@8sk(hTUE59?Oayw(MNl)7Nz}JC`vx%x{E>q>1NKt*+~T zRw(SbeS?qtDjVuRs!XwkT}v2deRCbND&g$WeATsPH0z66vy|{`x_N%2ZHEE?m@RO2 zhy*Adlu8{Jr?fxbOdd3TvTQAI#n(pMd{A^f!d4qBR#Ojc=cT4| bawb=n|Geeqk<9hrNYc8qDKZt~DiR!kob2#uXRP(kF&LB-S_)=C ztaYY`QTJ-A=`>0V+cLphmXk90YUOpvgRucbO`W`2xH>o7w6&vHnB7=IxHrC*4mV?b z?Gb0pg0a8d=P}HJKBJhi`QgDnAZ*roTm65$&F9I#gQnE*w>{IG$P*2`uZJBR;^er` zN$xI;>UEnO5GpvRz7^m9;Od~N`tMC{kr@-BBDteIxFiT$IJ>gSoJH+O&}D-1Kb=4H w|Fh;6EVBP(2>ur?_L2sB&;O-#csCNdHGX|z#at{2R7FFW%f>pTTDa){0i_adBme*a literal 0 HcmV?d00001 diff --git a/assets/icons/Guias.png b/assets/icons/Guias.png new file mode 100644 index 0000000000000000000000000000000000000000..e0dcecbcc951866c3d2f545a5f25181b36f2d0d9 GIT binary patch literal 17717 zcmb8XXEdB&*giUA7@dgdJqFQxZxJDeAVeoh^iD*GI(njK#1JJCUGy&MBqE636TL p~znM%RA? zaFEh!mpTpp5qhW@dqE%q?AL!#-#o<^Ad%HtO;-~F@#BC%P+<_r=@t0D27!1BK_Kgv z5Qt1F1VZDEw&+lWK<+mo?Z$eA1J_Z%3inh>Y*Xp1TwLk_F!2!%+vr~$!iEr6AzDMaCC+2FV&j&X7ya+5 zf_v2()ar8mw^~+vU&_B^G;I_(3HU8Lx9xA&x_<#T#;_sLx#NWVAqXTIs)0syqd1Ug z8!Y;N`6yzE{6F*l?;q(ZK#l*^`(NJw{UeDHu=)SV`~UVhS)|T&)tMFiWlAno*MAM~ zH_jQ<3-zwUe%vcao{|>#Q%5;3_W1`mN%Q=iBqhQ7{WFrE=b>%(vy8J(;N#(K`J9vHMUKn& zGCTKoU*7WlE1gw<`u3Y0j0;^Z86F1m0H+i3fTnG$QciXZ#;70gg1VI%hZ%Q^H>jnA zz`8Oo3AFr20gV)y6tmRFll_|?=7wv;0+ Zw?|QZkK9aLY_%c525&kZ?X^ zsjQ+lo&ZFEFKAQRGzf-0?ZDq_GOmYB;7m}p9g(Gs{to5an9h4*=Ag&%9O5CoLqD&7 z(xoj}hj&7^!#?k{C*G7he5VJe(VSG{F)yM`)Eh}r5?_t*qZ36*QnPfex;()%Qws9o zt-TN0x2`IWEr+@bgpQeMWPAQpaJ(e%Hq2?edBVJ7y(iv?psUCoUdJ~#4gWNeq-~U9 z;wrF{-eK=dQFqC7!gktdh9)u6?c9J0;LIuo75wOs7k`%z+vZbXUrxBurm5i5BWrqH z$sINiH{rsTh+X&le6{x!ca9dTU!PMf)}t6a`Z2(xCx5=d2Ezr|Ehf~Q469McR9VSb zNmMy{`{SLW2*WA#Q9sE%Y?)X|f#BSyJz1vrQl%-d!l9D|o2LZ)LrkR~r uH zGj4RP|IXz8dUjxzE%N%^P=3-jlaJsjHD?Mm5Tn8|YFM+K9({Dl7O