aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohann Faerber <johann.faerber@hs-augsburg.de>2022-03-09 09:48:43 +0100
committerJohann Faerber <johann.faerber@hs-augsburg.de>2022-03-09 09:48:43 +0100
commita04bbf15b0f51696894e37f3e566998108aefd74 (patch)
tree35a36178bfb2fa257b0afcddaec29868f6e4fc77
parentfd7c3d6c1352353f3ee2da9267308a51fd67315d (diff)
added basic design directory structure
-rw-r--r--doc/datasheet.yaml26
-rw-r--r--doc/images/uasa-logo.pdf2737
-rw-r--r--doc/makefile78
-rw-r--r--doc/presentation.yaml11
-rw-r--r--doc/pulse_width_modulator_datasheet.md206
-rw-r--r--doc/pulse_width_modulator_presentation.md106
-rw-r--r--doc/pulse_width_modulator_report.md235
-rw-r--r--doc/report.yaml27
-rw-r--r--doc/uasa_meng_vlsi_template.tex1038
-rw-r--r--doc/vec.conf243
-rw-r--r--matlab/audio/audio_first.slxbin0 -> 23427 bytes
-rw-r--r--matlab/audio/audio_tone.slxbin0 -> 26943 bytes
-rw-r--r--matlab/audio/makefile4
-rw-r--r--matlab/makefile15
-rw-r--r--pnr/de1_and2gate/de1_and2gate_pins.tcl10
-rw-r--r--pnr/de1_and2gate/makefile53
-rw-r--r--pnr/de1_audio/de1_audio_pins.tcl23
-rw-r--r--pnr/de1_audio/makefile16
-rw-r--r--pnr/de1_binto7segment/de1_binto7segment_pins.tcl20
-rw-r--r--pnr/de1_binto7segment/makefile53
-rw-r--r--pnr/de1_cntdn/de1_cntdn_pins.tcl14
-rw-r--r--pnr/de1_cntdn/makefile53
-rw-r--r--pnr/de1_cntdnmodm/de1_cntdnmodm_pins.tcl16
-rw-r--r--pnr/de1_cntdnmodm/makefile53
-rw-r--r--pnr/de1_incrementer/de1_incrementer_pins.tcl25
-rw-r--r--pnr/de1_incrementer/makefile55
-rw-r--r--pnr/de1_mux2to1/de1_mux2to1_pins.tcl9
-rw-r--r--pnr/de1_mux2to1/makefile87
-rw-r--r--pnr/de1_pwm/de1_pwm_pins.tcl27
-rw-r--r--pnr/de1_pwm/makefile87
-rw-r--r--pnr/de1_pwm_incrementer/de1_pwm_incrementer_pins.tcl36
-rw-r--r--pnr/de1_pwm_incrementer/makefile55
-rw-r--r--pnr/de1_tone/de1_tone_pins.tcl33
-rw-r--r--pnr/de1_tone/makefile14
-rw-r--r--pnr/makefile92
-rw-r--r--scripts/create_quartus_project_settings.tcl84
-rw-r--r--scripts/de1_pin_assignments_minimumio.tcl282
-rw-r--r--scripts/modelsim.ini351
-rw-r--r--scripts/quartus_project_flow.tcl84
-rw-r--r--sim/and2gate/makefile67
-rw-r--r--sim/and2gate/makefile.sources17
-rw-r--r--sim/cntdn/makefile67
-rw-r--r--sim/cntdn/makefile.sources17
-rw-r--r--sim/cntdnmodm/makefile67
-rw-r--r--sim/cntdnmodm/makefile.sources17
-rw-r--r--sim/de1_audio/makefile10
-rw-r--r--sim/de1_audio/makefile.sources14
-rw-r--r--sim/de1_tone/makefile9
-rw-r--r--sim/de1_tone/makefile.sources13
-rw-r--r--sim/falling_edge_detector/makefile67
-rw-r--r--sim/falling_edge_detector/makefile.sources18
-rw-r--r--sim/falling_edge_detector/makefile_qfsm.sources17
-rw-r--r--sim/falling_edge_detector/makefile_rtl.sources18
-rw-r--r--sim/falling_edge_detector/makefile_structure.sources19
-rw-r--r--sim/incrementer/makefile67
-rw-r--r--sim/incrementer/makefile.sources23
-rw-r--r--sim/makefile87
-rw-r--r--sim/mux2to1/makefile67
-rw-r--r--sim/mux2to1/makefile.sources17
-rw-r--r--sim/mux2to1/makefile_equation.sources17
-rw-r--r--sim/mux2to1/makefile_rtl.sources17
-rw-r--r--sim/mux2to1/makefile_structure.sources20
-rw-r--r--sim/mux2to1/makefile_structure_errors.sources20
-rw-r--r--sim/mux2to1/makefile_truthtable.sources17
-rw-r--r--sim/pwm/makefile67
-rw-r--r--sim/pwm/makefile.sources17
-rw-r--r--sim/pwm_incrementer/makefile67
-rw-r--r--sim/pwm_incrementer/makefile.sources24
-rw-r--r--sim/resolver/makefile68
-rw-r--r--sim/resolver/makefile.sources21
-rw-r--r--src/a_falling_edge_detector_rtl.vhd42
-rw-r--r--src/adcintf.vhd98
-rw-r--r--src/and2gate_equation.vhd35
-rw-r--r--src/audio.vhd156
-rw-r--r--src/bclk.vhd79
-rw-r--r--src/binto7segment_truthtable.vhd63
-rw-r--r--src/cntdn_rtl.vhd47
-rw-r--r--src/cntdnmodm_rtl.vhd54
-rw-r--r--src/cntupdn_rtl.vhd47
-rw-r--r--src/cntupen_rtl.vhd52
-rw-r--r--src/d_ff_rtl.vhd39
-rw-r--r--src/dacintf.vhd60
-rw-r--r--src/de1_adc_rtl.vhd111
-rw-r--r--src/de1_add1_structure.vhd51
-rw-r--r--src/de1_add4_structure.vhd103
-rw-r--r--src/de1_audio.vhd118
-rw-r--r--src/de1_binto7segment_structure.vhd48
-rw-r--r--src/de1_cntdn_structure.vhd78
-rw-r--r--src/de1_cntdnmodm_structure.vhd111
-rw-r--r--src/de1_dac_rtl.vhd109
-rw-r--r--src/de1_matlab_audio.vhd126
-rw-r--r--src/de1_mux2to1_structure.vhd48
-rw-r--r--src/de1_sta.vhd32
-rw-r--r--src/de1_tone.vhd119
-rw-r--r--src/e_falling_edge_detector.vhd34
-rw-r--r--src/fsgen.vhd56
-rw-r--r--src/i2c.vhd245
-rw-r--r--src/i2c_sub.vhd79
-rw-r--r--src/i2c_write.vhd98
-rw-r--r--src/invgate_equation.vhd34
-rw-r--r--src/mclk.vhd48
-rw-r--r--src/memory.vhd54
-rw-r--r--src/mux2to1_equation.vhd40
-rw-r--r--src/mux2to1_rtl.vhd42
-rw-r--r--src/mux2to1_structure.vhd90
-rw-r--r--src/mux2to1_structure_errors.vhd79
-rw-r--r--src/mux2to1_truthtable.vhd54
-rw-r--r--src/or2gate_equation.vhd18
-rw-r--r--src/play_rtl.vhd101
-rw-r--r--src/ringbuf.vhd74
-rw-r--r--src/t_cntdn.vhd123
-rw-r--r--src/t_cntdnmodm.vhd157
-rw-r--r--src/t_de1_audio.vhd88
-rw-r--r--src/t_de1_play.vhd100
-rw-r--r--src/t_de1_tone.vhd108
-rw-r--r--src/t_falling_edge_detector.vhd116
-rw-r--r--src/t_mux2to1.vhd81
-rw-r--r--src/tone_rtl.vhd19
118 files changed, 11175 insertions, 0 deletions
diff --git a/doc/datasheet.yaml b/doc/datasheet.yaml
new file mode 100644
index 0000000..a8aae06
--- /dev/null
+++ b/doc/datasheet.yaml
@@ -0,0 +1,26 @@
+---
+title: Pulse Width Modulator
+subtitle: Datasheet
+author: J Färber
+date: April 2022
+lang: en-UK
+geometry: a4paper, left=25mm, right=20mm, top=20mm, bottom=25mm
+fontsize: 12pt
+code-block-font-size: \scriptsize
+titlepage: true
+logo: images/uasa-logo.pdf
+#toc: true
+#lof: true
+#lot: true
+#toc-own-page: true
+colorlinks: true
+secnumdepth: 4
+header-includes:
+# 4th level header rendering
+# see https://stackoverflow.com/questions/21198025/pandoc-generation-of-pdf-from-markdown-4th-header-is-rendered-differently/21204829#21204829
+ - |
+ ``` {=latex}
+ \let\originAlParaGraph\paragraph
+ \renewcommand{\paragraph}[1]{\originAlParaGraph{#1} \hfill}
+ ```
+---
diff --git a/doc/images/uasa-logo.pdf b/doc/images/uasa-logo.pdf
new file mode 100644
index 0000000..6ad508e
--- /dev/null
+++ b/doc/images/uasa-logo.pdf
@@ -0,0 +1,2737 @@
+%PDF-1.3 %
+1 0 obj <</Metadata 2 0 R/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 59028/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">Druck</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:MetadataDate>2015-04-28T13:11:41+02:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2015-04-28T13:11:41+02:00</xmp:ModifyDate>
+ <xmp:CreateDate>2012-02-03T04:14:54+01:00</xmp:CreateDate>
+ <xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:height>155</xmpGImg:height>
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:image>/9j/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABh&#xA;Y3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAA&#xA;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAAB&#xA;hAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFla&#xA;AAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRs&#xA;dW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAA&#xA;CAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQg&#xA;Q29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElF&#xA;QzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&#xA;AAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAA&#xA;OPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAA&#xA;FklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAA&#xA;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5J&#xA;RUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5J&#xA;RUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAA&#xA;AAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYx&#xA;OTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2&#xA;Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAE&#xA;EwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAA&#xA;AAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3&#xA;ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEA&#xA;xgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFu&#xA;AXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQC&#xA;XQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOK&#xA;A5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4F&#xA;DQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbR&#xA;BuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI&#xA;+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtp&#xA;C4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4O&#xA;SQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFt&#xA;EYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAV&#xA;EhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6&#xA;GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcd&#xA;cB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yIn&#xA;IlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kn&#xA;eierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0M&#xA;LUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0z&#xA;RjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8&#xA;Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA&#xA;50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhL&#xA;SJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQ&#xA;cVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjL&#xA;WRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh&#xA;9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tP&#xA;a6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1&#xA;hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/l&#xA;gEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqL&#xA;MIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaf&#xA;lwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopaj&#xA;BqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+L&#xA;sACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9&#xA;Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3&#xA;yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZ&#xA;bNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy&#xA;6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4&#xA;Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////7QAMQWRvYmVfQ00AAv/uAA5BZG9iZQBkgAAA&#xA;AAH/2wCEAAwICAgJCAwJCQwRCwoLERUPDAwPFRgTExUTExgRDAwMDAwMEQwMDAwMDAwMDAwMDAwM&#xA;DAwMDAwMDAwMDAwMDAwBDQsLDQ4NEA4OEBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwM&#xA;DAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAJsBAAMBIgACEQEDEQH/3QAEABD/xAE/AAABBQEB&#xA;AQEBAQAAAAAAAAADAAECBAUGBwgJCgsBAAEFAQEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAQQB&#xA;AwIEAgUHBggFAwwzAQACEQMEIRIxBUFRYRMicYEyBhSRobFCIyQVUsFiMzRygtFDByWSU/Dh8WNz&#xA;NRaisoMmRJNUZEXCo3Q2F9JV4mXys4TD03Xj80YnlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vY3&#xA;R1dnd4eXp7fH1+f3EQACAgECBAQDBAUGBwcGBTUBAAIRAyExEgRBUWFxIhMFMoGRFKGxQiPBUtHw&#xA;MyRi4XKCkkNTFWNzNPElBhaisoMHJjXC0kSTVKMXZEVVNnRl4vKzhMPTdePzRpSkhbSVxNTk9KW1&#xA;xdXl9VZmdoaWprbG1ub2JzdHV2d3h5ent8f/2gAMAwEAAhEDEQA/APVUkkklKSSSSUpJJJJSkkkk&#xA;lKSSSSUpJJVOodSx+nsa67c4vMMYwAkx9L6Ra32ps5xhEymRGI3JXRjKUhGIsnYNtZX1kZY7pu5p&#xA;Iax7TYOxafZ7v7bmOV7Dy6cyht9JOx0iDoQRo5rgpZNDcjHtodxa0tnwkcqPNEZsE4xN+5A8JHj8&#xA;q/HI4ssTIVwS9QP/ADmj9X8l1/TmteS59DjWSTJj6TP+g5aa5n6tXuqzbMZ+htbqD+/WfcP81z/8&#xA;xdMovh+X3OWgT80f1cv8D/0FfzmPgzyraXrH+EpJZ9vXMGrM+yOLtwcGOsA9gcfzXOnd/wBFaCsQ&#xA;ywmZCEhLgPDKv0ZMMsc4UZRMeIXG+oY2PbXW6x5hrAXOPgAJK5voD8jJ6rZkuc7Vrn266Hef0dZ/&#xA;qfmf1Fp/WHI9HprmD6V5FY+B91n/AIG1yF9WcfZhPyCNb3mD/JZ7G/8AT9RUs5OTncOIH04gc06/&#xA;5v8AL+u2sQEOVy5DvkPtx/a7CShddXRU+607a6wXOPkFV6f1fF6g57Kg5j2CSx4AJB/OG0uV2WWE&#xA;ZxgZATn8sesmqMczEzESYx+aTdVDreU7G6da5jttj4rYRoZdpLf6rNzlfXO/WnJ/SU444Y02uHmf&#xA;ZX/6MUPPZfa5bJIGiRwx/vT9LLymPjzQHQHiP+C2fqxXYMS17idj7IraeBtEOc3+s5bKr9PxvsuF&#xA;TR3Y0bv6x91n/TKJkX1Y1L77TtrrEuPKdy0PZ5eEZGuCNyvp+lJbnl7maRjrxSqNdf0YpElS6f1b&#xA;G6gXtqDmPrgljwAYP5w2uerqlx5IZIiUJCUT1CycJQkYyHCR0Kkkkk5apJJJJT//0PVUkkklKSSS&#xA;SUpJJJJSkkkklKSSSSUpU+o9Mo6gxjbS5jqySx7YkT9Ie4Ob7lcSTZwjOJhMCUTuCuhOUJCUTUhs&#xA;UGFh04WO3Hpna2SS7UknVznI6SSMYiIEYioxFABEpGRMibJ1JeV6h/k7rnrjRu9t/wDZf7b/AP0a&#xA;up5WH9aMcOqpyQPouNb/AIP1b/0mf9NX+i5H2jptLiZewem/4s9n/Sb71Q5X9VzfMYOkv10P8L52&#xA;3zH6zl8OXrH9VL6fKjt6DhW5n2txfJcHurBGwuHc6bv+ktJJJXYYscDIwiI8Z4pV+kWtPJOYAlIy&#xA;4RUbeZ+s15szK8ZmpqbMD9+ww1v+a3/procWhuNjVUN4qYGz4wOVzWBPUeu+udWb3Xf2We2n/wBF&#xA;LqlS5D9Zk5jmP358EP7mP+UWzzfohiw/ux4pf3pfykjvpryKX0Wia7AWuHkVV6d0jG6e99lbn2Pe&#xA;Nu55EhvO0bWtV5JXZYscpxyGIM4fLLrFrDJMRMBIiMvmClyjf8o9fnms2z4jZTx/n7P/AARdD1LJ&#xA;+y4F94MOa0hn9Z3sr/6blkfVbG912SeGgUsP/Ts/9FKlzv63mOX5fpxe9P8Auw2/7ts8r+rw5s3W&#xA;vbj5y/lB6FCycerJofRaJZYIMaH4hFSV8gEEEWCKIagJBBGhGoaPTukY/T3PfW51j3iC58aAfmt2&#xA;hqvJJJuPHDHEQhERiOgTOcpyMpHiJ6qSSST1qkkkklP/0fVUkkklKSSSSUpJJJJSkkkklKSSSSUp&#xA;JJJJSklXz/tf2O37HH2iP0cx46xu9u7b9Dcufj6zf8P/ANBVuY5r2ZCPtZMli7xx4os+Hl/ciT7k&#xA;IUaqZou91LGOVgX0AS5zSWf1m+9n/Tasj6rZPuvxjw4C5g/8Ds/9FIEfWb/h/wDoKXSOn9Sq6lVc&#xA;+l1bBu9RziIhwP7p/f2qjLPLJzeDLDDljX6ufHHTgn/3vFJtjFGHL5ccsuOV+uPDL9KP/fcL0ypd&#xA;ZyPs/Tbngw949Nnxf7P+jO9XVkfWHFzMmmluOz1GMeXWNETMbWO90fvPWhzcpRwZDAGUuEiIjrL1&#xA;en/mtLlxE5oCRAjdm9vT6kP1XxwK78kj6RFTPg33O/6Tv+gt1cpVT9YaaxVSy6utsw1uyBJ3H/pK&#xA;cfWb/h/+gqPK837OGGP7vmJiNSIfpH1Sbefl/dySn72PXb1dBs9Qksrog6t+l+37tmnp+pt3Trvj&#xA;Z+Z9H6S1Vo4cnuQE+GUL/RmOGTSyQ4JmPEJV+lE3FwvrRkBtVOMD9Nxsf8GaN/6T/wDoK/0XH+z9&#xA;NpaRDnj1H/F/v/6LfasrrvT+oZGebK6TbUWNawtI0Anc10lv57kKPrN/w/8A0Fme9LHzmbLPDlnp&#xA;7ePgjfpG5/wm97UZ8tjxxyQj+nPil+kXqEly8fWb/h/+gt3pn237FX9u/n9ZmJifZv2e3ftV7Bzf&#xA;vSMfayY6F8WSPDHyaubl/bjxe5CetVA3JtpJJKywKSSSSUpJJJJT/9L1VJJJJSkkkklKSSSSUpJJ&#xA;JJSkkkklKSSSSUgzcqvDxbMmwEtrEkN5MnaP+kVkf86q/wDuM7/PatXqN5x8G64VevtbrXyCD7Xb&#xA;vpez99cz+2Kv+4GJ/mf7Fm8/zM8WSMY5hiuN8Jh7nXfibvKYI5IEnEclGr4+H8Hd6Z1qrqFz6RW6&#xA;t7W7xJBBE7fzf6y0lidA6gMm62tuLXQA0ONlLdomYDLNPpa+xbas8nkOTDGcpjIST6hH2/8AmsHM&#xA;wEMpiI8Gg9N8akkklZYXP6n1irp72VurdY+wF0NgAAacuVH/AJ2Y/wDoHf5zf70T6yYdtldWXSJO&#xA;PO8ASdph2+P+Dcz3IZ+sWD9m3jH/AFiPowNk/ver/o/+mszPzGWOfJCWeOCAAlj4ocfHH9LhP95v&#xA;4sOOWKEhiOWRJjOp8PBLpbf6Z1erqLrGtrdW6sAw6CCHTwW/1VfWN9WsO2qizKtBDsgjYCIO0Sd8&#xA;f8I562Vb5OeSeCE8vzys7cOl+n/mtbmYwjllHH8o076/pKTeSdYvVeh5OVl/a8e0B8AbXkt27f8A&#xA;R2M3bU/PknCHFjxnKb+UHh9P7y3FCE5VOftivmri1dpMuaPQutWjZbcCzwfa9w/zdq3Om4RwcNmM&#xA;X+oWyd0QNTu2tbr7WqPBny5JESwSxRA+aZ/S/d4V+XDjhG45RklfyxHTvxNpJJJWWBSSSSSlJJJJ&#xA;Kf/T9VSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKVb9nYHqer9mq9SZ3bBM&#xA;/vcKykmyjGVcQBraxaRKQ2JF9lJJJJyFJJJJKUkkkkpSSSSSlJJJJKUkkkkp/9Tp/qv9YOoZf1l+&#xA;seD1DKa7F6fdWzDrcK2bGudeHDcxrH2fzdf8456k/rvUD/jFo6NVkh3TH4BvdS0MINm6xu71dvrf&#xA;Ra32eoud6J9WOh/WH64fWlvWMb7S3FyWGkepZXtNjr/U/mH1bt3pV/SRsDofTuh/4zqcDo9P2al3&#xA;TX2hhc+weo4vZv3XOsf/AINn5ySnquofXn6p9NzjgZvUq68oHa5gD3hp4222VMfVU7/jXrVv6n07&#xA;HwD1K/JqZghjbPtJePTLHx6b22Tsf6u9npbf5xecfUfP+qWJ9Weo4X1idTV1EW3DqtOXHr2kE+2t&#xA;r/097mRs9On9J9q9T/CWLIZTm0/UX6uXdVY53Ra+q+rk1kF36sX+1z2N93pP/XNn+k9ar/SVJKfT&#xA;+i/W76udessp6VnMyLahLq9r63x++2u9lT7GN/fYua+qn+MXprPq9iXfWfqjP2jkPt0DJeGtftr9&#xA;WrCq/QN2/RfayvetOvq31HyvrR05mEKcvqxpsGNk4kWMqra2PTvsod6bHOr9RtO9v6H9J/Mev+m5&#xA;v6l9J6ZZ/ixz8mzGrsvvpynWWvaHPJqa9tG17vcz0fTa+rb/ADdv6X+cSU9/1Dr3Rum9Pb1PNzKq&#xA;sKwNNV+7c1+8b6/Q9Pe6/ez3t9Hf+j96D0X60/V/r24dJza8l9Yl9fuZYAIG/wBG5td3p+7+c2bF&#xA;wDcLBy/qh9U7n9Xq6R1TGNj+nPyAHVPcHeo71A/2V+m6in07rP0X+A9PffWjYPWOs5PU+tdKtZg5&#xA;/WbOlXGrqvShNhcxu2mi272e/wBR7PoMr9O30P5z/BpT19n17+qFfUT01/U6W5QdsI93ph37rsrb&#xA;9lb/ANvLJyfrgel/XjqOJ1fPbj9FxsJltdb2t/nnGn+bLGfarrNht/RN9RYnRer/AOL2r/F5Rj9T&#xA;FNwZDsrBaR9qfeH621s31Xu/kXeps+zfof5v9Er/AE7C6dmf40ckvx2upo6ZTbi1WsLfTP6vXWfQ&#xA;ta11VtdVmzY9m+pJT1uB9Z+g9R6bd1TDzGW4eM1zsiyHAsDRvcbKntbcz2e7+bRbOu9Jq6QOtWZL&#xA;W9NLW2DJh23a4hjHbdu/3Pd+4uCox6qMv/GLjYtYrqGK3ZVWIALqMp7trG/vPe9VOpfWPorv8U1P&#xA;TK8yp/UH000fZQ6bQ6uxllu+r6bK211WPba/9E//AK4kp6zqHXs5v12+r/T8TI/yZ1LHvttrDWkP&#xA;21W20v8AUcz1mfRZ9B6v9V+u31W6PmfYeo9QrpydN1Qa+wtn6Pq+gyxtP736Vc1Z/wCLf6l/+m+3&#xA;/wBtrVhfVq23GPWsTP65h9HzH5V37QozsWu514P0z9ovup9ep7jd+qM9T/Tf9qUlPrVF9ORSy/Hs&#xA;bbTa0OrsYQ5rmnVrmPb7XNciLl/8XGPiY/1ZZTg556nhtusNF5pfjwCd1lXpXue522/1f0i6hJSk&#xA;kkklKSSSSUpJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSU/wD/1fTcfp+Bi33ZGNjVU35J3ZFtbGtf&#xA;YRJ3XPYA6z6bvppHp+Ac0Z5x6jmtb6bcnY31Qz/Ri6PU2a/RWL9cvrhX9V8bGeMY5uRlvc2vHD/T&#xA;Oytu+63f6d383NTfof4RbHTM+nqfTsbqFH81l1MuYJkgPaH7HfymfRckpr5v1b+r/UMn7XndOxsn&#xA;I0m22pjnGBtb6jnN/SbW/vq9bjY91Dsa6plmO9ux9L2hzC3jY6t3scxESSU0endC6N0ovd03CoxH&#xA;W/zjqa2sc4c7XOaN2z+Qi0dM6dj4bsGjFpqw3hzX4zK2tqIf/ONdS1vp/pPz1ZSSU0beidGuwmdP&#xA;twcd+FVrXjOqYa2nX3V1bdjHe530FLpvR+ldKY5nTcSnDbZHqeixrC6J2+o5o3P27vz1Qy/rKMb6&#xA;14P1cOPuOdQ+8ZO+Nuz1D6fo7Pfu9H/SrbSU5x+rnQDn/tE9Oxvtu71PtHpM3753+tu2/wA9u/wv&#xA;84rLen4LMx+ezHqbm2N9OzJDGi1zPb+jfdHqOZ7Ge1WEklIKcHCoyLsmjHqqyMmDkXMY1r7C36Hr&#xA;WNG6zb/LVFn1U+rFfqbOk4YFwi0ehXDhIftI2fR3sY9aqSSmt+zOnevRk/ZafXxW+njW+m3fWwjZ&#xA;6dL43VM2HZtYq+f9Xeg9Svbk5/T8bKvbAFttTXOgfRa5zm+9n8hyfrvVf2P0x+f6Xr7LKa/T3bJ9&#xA;a6rF3b9r/oet6n0VoJKY1111Vtqqa2uutoaxjQA1rQNrWta32ta1qkqPQ+p/tfo+H1P0vQ+11Nt9&#xA;Ldv27hO3ftZu/wAxXklKSQMHJdl4dOS+mzGda0PNFw22Mn8yxo3bXo6SlJJJJKUkkgMyHOzLcb0b&#xA;GtqrrsF5H6N5sNrTXW786yn0f0v/AB1SSk6SpdI6pT1bAZnUsdXW99tYa+N002WYz/olzfc+lXUl&#xA;KSSSSUpJZfSerZfUsjLIxmU4ONfdjV3G3da+yh/oWudjCr06qXWNs9N32r1PZ/NfpFqJKUkkkkpS&#xA;SSSSn//WsdZ+snQT/jIdZ1vJ9Hp/SMWzGpG19gffc3Zk+yhljv5nJsps/wDC6f6ldXa/6hde6ZTe&#xA;bHdJqyvst7ZYTRYy63Hvb9Gxj/Wbkfy6vYux6F9VOn9GObYHPzMjqF5yMi/IDC4uMuhvpsrY1m99&#xA;r/8Arigz6ndMZ1vP6sH2R1Sg42Zh+0UuaWsqc6GNbY1+2v8A0n59v76SnnMjMyW/4nRl/aLBkHGr&#xA;/T73b9xuaz+dnf8AyFWzrMnrXVfq19WMrMuxunZPS6srINTyyzIs2P8A0L7fdv8A6Pv93/C/4T0v&#xA;T0W/4qcH7I/p9vVuoW9PBLsfENjRXW4nd6np7PSss+l/gmfTel9cuhgYnSsV3R7usYOFW2g5WLZs&#xA;zqdgrZ6lVTNrMj1G17tm30/UZ/gf0aSmt0jCs6R/jFPSMXqF+ViV9NdZVRfa6wUuc8bcd43fmfzt&#xA;f+E9G9c5azJwar7frXjdbxurtsn9vYtjn1N3H9G1kPpxWU/m+nU//ivS/mWdF9Tvq28fWW7qmP03&#xA;K6T0pmI7Gb9seRlX3WOa+3JsG99tLtv5zH/4Ov0f8J6Wjb/i49Wg9Pd13qLukvdufhve1xOu/b9o&#xA;czd6e/3bNiSnH+sGLT1z68/V7HozrmY+Z04uGZU707rKtt93se1tex2VW39J+j/m/U/Rq30am36t&#xA;fXa36tYuVfldLzME5bKbn7zRYHPb7X/mtd6b/wBz+dp9T+b9Ra/WP8X/AErqeTh5DcjJwT07HbjY&#xA;YxnhvpiuTRY2xzX3b6p/0iP9XPqdi9EycjqF2Vf1LqeW0V3ZmUdziwR+iYP3PZV9N9n81Wkpwfq1&#xA;mZL/APFLk5dt73ZAxM8i9zyXhwOQKz6hO/c327Fl9St6pk9D+pFGLnXYuRnO9J+S17i6Xipvqv8A&#xA;c31nM3e3etxv+KvpzGZGJX1TPr6XeS8dOZaBUH/mPeC1zbvSc1jmeoz/AAVXq2WrVP1KwDT0Or7R&#xA;dt+r7w/GPsl5Gz+f9n/B/wCD2JKeZ61011HWOg/UZvUMmnpN7L78nIdZF+Q9zrr/AEbL2tY13vG3&#xA;Zt/w3+Eu9FE6dgHov+MnD6Pi5+RkYAwrLWY11zrBUXep+hiduz2erXv9/vWr/jC6c7Npw/U6O/q+&#xA;LW93qvxbDXl0btn6XFaP5/dHvpd7N9VX/G1ZH1Q+rtjfrY3q2J0zK6X0zGx31l/UD+s332fTtsrc&#xA;+xzPY7839F+h/wCESU9N9eyB9WbidAL8Mk+Qy8VdAgZ2Fi9Qw7sLMrF2NkMNdtZkS1wg6thzf67F&#xA;iH6s9YsrOHd9YMuzpxb6bqzXSMhzNuz07OoNr9T3fn2+l9o/4ZJTk9Oqy7vqx9UMOjKuwftTmsus&#xA;odtc6r7HmXvr/wCuen7LPp0v/T0/pq61r4LX9O+tR6VTddbhZGCcr08i6zIcy2u1lG6q7Ksuuay2&#xA;u79JXv2fo/6603dIxZ6cKgaaulP3Y1TI2x6N2C2sz+YynITnpdR6yzq+93rMxnYgr02bXvZeX8b9&#xA;+6r99JTznT83Oq+r31Y6zbkW2NHoU9Q32mLK8xoxG3X+p/O2UZ1mHb6jv0jKvtH+kUuodV6o3G6z&#xA;1bDfYP1mjpXTmbdwaW3MwsvNqx7bK8ezI+3ZWTTX63p12fYcf1P0K2qvq/iM+ro+rznPfijGOL6h&#xA;j1Nu30/U+js9Vv02ez6adv1f6d+wm9CsabcRtQqcXH3uI9/2lz27f1n1v1n1m/8Aaj9KkpwMarq+&#xA;NnYD+m4XWGFtra8/9o5NV9NtDttd99gf1DJ9HJo2/aKX4VNf/cf0vSt9l7AxMjN+svWLcnMyHYuD&#xA;k0DEw2Wvrra/7NiZFj3ilzHXVvc7+jW/qn89+h33KzX9XsyzIqd1Lq2Rn42La26jHLKqQX1kupdl&#xA;2YtdT8r0nbXtZ+ho9Sv9LTYtDE6dVi5eblMc5zs+1l1jTENLKqsQBmn7mO1ySnlcn1MW65/Xbup9&#xA;PyX5D3U9Yptc7AZWbf1Jjsau27Dx6PQ9GnI/aWB6f87Zbf8A4dbga7L6/wBUwbbbRj/Y8JzWV2vr&#xA;LXOs6h6j6n0vrspfZ6NXqPqdv9irP+qVr6T053Vcp3RXk78B2xzywu9R2H+0HN+2fY3fzWzf9o9D&#xA;9D9q2LYqwK6+pZHUA5xsyaqaHMMbQ2h2RYxzfztzvtj9ySnkug4GTV9SMjJ6Xbkfb225F1TDdbYH&#xA;vxMvItrx21WWbGNzfT+z5Xp7PtPq/p/UWyzqJ6v1rpzcG57cCnFHUsgt9os+0h1HTKLfcHem5n23&#xA;Jsq2/wA5j4yJgYmH9WMa85fUhX059rnY7Mo1VMpNr7cmytt59N9vqW3P/nrPoMQfqT05mJ0h2U2t&#xA;1X7RtflV1WGXV47jt6did9lePgto/Qf4D9IkpL9Ycm92X0vpFVtmO3ql9jL76jteKqabcp9VVo91&#xA;Vl7q66/VZ+lZV6vpfpP0iq20DpfXMLpVN+S/B6zTk12VWZNtj67KWsuZk42Rc+zLo31vuqt9PI/n&#xA;Ps9leyz6ev1bpVfU6amm63FvxrW34uVQQLK7GhzNw3h9VjLKrLKLqbq7KrabbFX6d0O2jN/aXUc2&#xA;zqOc2s0Uve1tVVVbiH2jHxqfY2y9zKvXusdbb+ir/m6/Ykpz/qV0+jHpz7q33ucOoZ1O2y+61m1u&#xA;TYGu9K+yyv1vZ78jb69v+FsXTKn0zptXTqrq6nueL8i7KcXRo6+x2Q9jdob7Gus9iuJKUkkkkpSS&#xA;SSSn/9f1VJJJJSkkkklKSSSSUpJJJJSkkkklKSSSSUpVxn4ZzndOFrTmMqF7qPzhW5xrbZ/V3tRn&#xA;vZWx1j3BrGAuc4mAANS5xXD1Odj42N9eLf0duVl+vlboBb0zK9PBxq3+kH7mYtFfT+pP/wCGZk/v&#xA;pKe6SWN9YOq9Twb+nYvTKKsjI6jc+gC9xY1u2q3I9UuYHeyv0t9jNv6T+brS6d1Hq1fVXdJ6wyl1&#xA;tlLsnDy8UOZXYxjmVZNNmPc+6yi/HffR/hrq7qrv8H6b0lOygDMxTmOwRYPtTaxe6ruK3OdWyz+1&#xA;ZW9q5jF+sf1ps6DT9ZcjExGYApGTkYTC85BoDfUuyqMhzm47H7f09OFZU/8AQ/8Aaz1voXcexlv1&#xA;4vsrIcx/SMdzXDgg5GWWlJTu0X0ZNLL8ext1Ng3V21uDmuB4cx7Ja5qIuVp+s7MX6s9HuooxsbK6&#xA;rW1mLQ5woxKv0br7LLHf4PGx62fzdf6S1/p0f4T1GWelfWNz+qt6Tm5OHmW5Fb7cTJwXQ13pen6+&#xA;PfjOuyn03N9T1an+vZXfV6n816X6RKd3IvpxqLMi9wrppY6yx54a1o3vcf6rQnpuqvprvpcH1WtD&#xA;63jgtcNzXf2mrkepdW691T6t5/VcOrG/ZFuNkeljv9QZNlAZdX9rbf8AzNL7Nvr0Yv2W71K/+1NX&#xA;qfouk6IAOjYABkDGpg+P6NiSkHVutdEw7GYPUH+rdc31G4jKn5Nha06XOxsavItbV6jP559fp+or&#xA;PTeq9P6rjfaen3tvqDixxEhzXt+lVdU8Ntptbu91VrGWLIso6r0jruf1LGwf2nidU9F1voPrZk0u&#xA;orNGz08p1NWTjOa1tlW3IZbXdbkfovenxOs/V5lfVuvV02Y2ZRUx3V6LWGrJApY+zGbdj2lrN7qn&#xA;vZj3s/R5H8369no/o0p6FDqyKLjY2mxlhpf6doY4OLHgNf6dm36Fmx7H7HLGxsj64EUZWTjYfpXO&#xA;b63T6y8X0MeWjf8AbrH/AGbLtxmu35FP2bG/7r3Wfo/VA76xU9PxetZZxaw/G6g3FrZWW1evdbXh&#xA;tpsyb7P0bHb8ljL8h/8ANY1P/BpKekSXL4v1oux83Do6nm9Nyq+oWNx2HAe7dTe8PdXVYyy3I+00&#xA;WuZ6LMn9W/TbP1f9J+ilj9X+tHUWZt2BTh01YGVk4wbf6jnZHoWurb6bq3Mbhfomen61n2vfkf8A&#xA;aeqn+eSnpklz7/rFk5zOm4/Rqqxm9UxW5+7JJNePjH0psurqc2y+57r2000V2V7/ANJ+nr9JPldc&#xA;6p0fAyLes0U22ssqqw7qHimrIfe/0qWPZkPuswfRdt+1Pssvq9H9NT6v8wkp30lzGH9Z76c/Exup&#xA;ZnTsxnUHiit+A4h1V5a+xtV1dl2Q6+i30/Srym+h+m+njfpf0b4vW+vdQtyrun/YHtw8iyl3S3Od&#xA;9rLKXux3WXZPqNqxLr9nrUUWYdtfpel+s/pPUSU//9D1VJJJJSkkkklKSSSSUpJJJJSkkkklKSSS&#xA;SU5P1mws7qPSz03DENzrGUZdocGmvFcf117d4d6j347X47Gf8MoXfU76qXU2Uu6RhMFjSwuZj1Me&#xA;A4bd1djGB9b/AN17FspJKeKyx1/Fr+q1VtNd/V8S++rbZYQy4U4uVV6vrj1XV2ZmMz1v0jP0d9n6&#xA;VbPTqerZ3WB1fqWKOn1Y1D8bExC9ttpNz6rcnIyH0bqK/wCi49dFVdt3+GssTdc/8UH1c/8ADWR/&#xA;7Z5S3UlPC9Ib9Z8/6m4PRGYdLas3Brp/avqj0q8a2rZLsT2Zb8+qh3p+mz9Vsu/TfamM/RLocXpN&#xA;2N9ZHZlbA3Bb02jDqM676rb7Nm36X81ZX7k/1P8A/En0f/wlj/8Anti2ElPJM+rOcz6v9C/V6b+p&#xA;dDYN2HeQarQ6p2Nk43rQ9ldjmu9Si7ZZX6tXv/Rv3rQ6VRm2Z7cg9Jo6Pi1NcC13pPyLXuDdm12G&#xA;X049Ff6T/D22Xf6On/CbqSSnj3YH1nxOgXfVfEwmZDBRbjYvVH3sawUOFjKPWo2/aPtdNRrp2Mq+&#xA;zWP/AEv2mtdN0yh+N03Ex7Btsporre2ZgtY1jhu/O4VpJJTgvf8AWHpefkuqxX9ZwMuz1qtl1bLs&#xA;d21jH43p5bqKLMTcz1aHVXepX+k9Sr/DKqfq/n9bHVcvq7G4FnU8MdPx8ZjvWdTU022tyMp7HMpu&#xA;yXX5G/0qf0VVdfp+vb6i6hJJThYud9bLTRi5HTase1jmjMzjc1+O5jS31XYVNbhmusvZu9JmVVj/&#xA;AGf/AAll+z9LVyPq3m5WJ1iuKmX39Tr6hgG6X1ONLMP0m5LKzv8ASusxLaLf+Df6i6dJJTzeHR1O&#xA;/MxtvQsbpDKnh+VkWGm5zgJ/Q4DcT3++zZ+s5P2b06/+03qfzd7onT8nDwc2m9obZfmZl9YBBll9&#xA;9t1DtP3q7GLWSSU8ridG6r0qjo3UcbHGVmYXTaum5+F6jWOcwCh2/Fuefs/rY11VnstfXVfVZ/P1&#xA;o+f0/rfXunW/a6KMKyq+nJ6bi2k2nfjv9Xb1Kyh7qfTy9vpenjer9mr/AEnqZNn6JdGkkp5zBo6j&#xA;fl45HQsbo7KXB+Te802udAd+hwRie7+c2frOR9n/AEf/AGm/0dLqXSutdTDsTN6TjO6iH7cf6xUu&#xA;ZWKmtd6tGXVWXu6pTlUbWfqbH2Y9tv8A2r+zWLsEklP/2Q==</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:InstanceID>uuid:551f298d-e043-484f-abf6-792d02bf587f</xmpMM:InstanceID>
+ <xmpMM:DocumentID>xmp.did:CDCC195597EDE411BF6F8D436E9B2F4B</xmpMM:DocumentID>
+ <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>xmp.iid:CDCC195597EDE411BF6F8D436E9B2F4B</stRef:instanceID>
+ <stRef:documentID>xmp.did:CDCC195597EDE411BF6F8D436E9B2F4B</stRef:documentID>
+ <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:05801174072068118083DE96E4AF4DB7</stEvt:instanceID>
+ <stEvt:when>2011-12-18T23:44:36+01:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FE00D69E062168118083DE96E4AF4DB7</stEvt:instanceID>
+ <stEvt:when>2011-12-19T11:12:27+01:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:parameters>from application/postscript to application/vnd.adobe.illustrator</stEvt:parameters>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F1174072068118083A72FB8BC9D6D</stEvt:instanceID>
+ <stEvt:when>2012-02-03T03:52:24+01:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:00801174072068118083A72FB8BC9D6D</stEvt:instanceID>
+ <stEvt:when>2012-02-03T04:14:54+01:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:parameters>from application/postscript to application/vnd.adobe.photoshop</stEvt:parameters>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:CDCC195597EDE411BF6F8D436E9B2F4B</stEvt:instanceID>
+ <stEvt:when>2015-04-28T13:11:35+02:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Photoshop CS6 (Windows)</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:parameters>from application/postscript to application/pdf</stEvt:parameters>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>derived</stEvt:action>
+ <stEvt:parameters>converted from application/vnd.adobe.photoshop to application/pdf</stEvt:parameters>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:CECC195597EDE411BF6F8D436E9B2F4B</stEvt:instanceID>
+ <stEvt:when>2015-04-28T13:11:35+02:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Photoshop CS6 (Windows)</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>296.999959</stDim:w>
+ <stDim:h>210.001652</stDim:h>
+ <stDim:unit>Millimeters</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Black</rdf:li>
+ <rdf:li>PANTONE 151 U</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Standard-Farbfeldgruppe</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Weiß</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Schwarz</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Rot</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Gelb</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Grün</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Blau</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>14.999998</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>80.000000</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>35.000004</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>5.000001</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>19.999998</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>90.000000</xmpG:cyan>
+ <xmpG:magenta>30.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>30.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>80.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>45.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>70.000000</xmpG:cyan>
+ <xmpG:magenta>14.999998</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>5.000001</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>25.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>35.000004</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>10.000002</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>19.999998</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>25.000000</xmpG:magenta>
+ <xmpG:yellow>39.999996</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>45.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>5.000001</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>60.000004</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>55.000000</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>39.999996</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>39.999996</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>30.000002</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>65.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>35.000004</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>70.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>PANTONE 151 U</xmpG:swatchName>
+ <xmpG:type>SPOT</xmpG:type>
+ <xmpG:tint>100.000000</xmpG:tint>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>48.000000</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grautöne</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>89.999405</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>79.998795</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>69.999702</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>59.999104</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>39.999401</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>29.998802</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>19.999701</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>9.999103</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>4.998803</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Leuchtende Farben</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>75.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>60.000004</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.003099</xmpG:yellow>
+ <xmpG:black>0.003099</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe Photoshop for Windows -- Image Conversion Plug-in</pdf:Producer>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
+ <photoshop:ColorMode>4</photoshop:ColorMode>
+ <photoshop:ICCProfile>Coated FOGRA39 (ISO 12647-2:2004)</photoshop:ICCProfile>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
+endstream endobj 3 0 obj <</Count 1/Kids[5 0 R]/Type/Pages>> endobj 5 0 obj <</ArtBox[0.0 0.0 660.0 400.0]/Contents 6 0 R/MediaBox[0.0 0.0 660.0 400.0]/Parent 3 0 R/Resources<</ColorSpace<</DefaultCMYK 7 0 R>>/ProcSet[/PDF/ImageC]/XObject<</Im0 8 0 R>>>>/Type/Page>> endobj 6 0 obj <</Length 31>>stream
+q
+660 0 0 400 0 0 cm
+/Im0 Do
+Q
+
+endstream endobj 8 0 obj <</BitsPerComponent 8/ColorSpace/DeviceCMYK/DecodeParms<</Blend 1/ColorTransform 1/Colors 4/Columns 660/HSamples[1 1 1 1]/QFactor 0.0/Rows 400/VSamples[1 1 1 1]>>/Filter/DCTDecode/Height 400/ImageName/ps7F12.jpg/Intent/RelativeColorimetric/Length 77183/Name/ps7F12.jpg/Subtype/Image/Type/XObject/Width 660>>stream
+
+  
+ 
+
+#$%&'()*3456789:BCDEFGHIJQSTUXYZabcdefghijqrstuvwxyz
+!1"89Vx2AWw$7BR#%&'()*3456:CDEFGHIJQSTUXYZabcdefghijqrstuvyz
+oͱjڛnEbMHUӏdfIT|’.\tSžE)Zʵh 3ģ؆'f'}-"N\W;$>S`ت >NmjjAb:=w'5#sFؖ5dQI3ܖ2>b[7_c*xOfE>sVhu&j%,]qɌك蔤W]M$nJ._55,"lXg!9fN"ML2E'RjEY/fMuM@7Kp
+(,5eJQ`rEu5uN?X]Afʕ21G'f)Se8JdV=
+=ۮl, Mlgɦɵ#Jt!)',\i5!cTKY$aO ]9rgr$P.>`tLP6uVqr-A
+YHrzvyk5PbDMec۾>=X_ɱ6KFk-3%|<\+|x.}g>0
+8bs=?ɘμFxfF=]Si=OKȶչT\VǭRUc芛Um(7څͷ'#%TL=awILsx2ˆ`r3Y *Rq,r1lc>C cŌrLsg
+ЧnB[;RNk16h':X"-\zٻƊWh$ĚLf(rJlgE\7]9H9j"<*"'2j|}P!q
+\d$-?X&b |$s{1lL8)SH6qg $'d2+޷Z%IjՉ7"iGnӗ~Q7n_pvcp xYCߥ" Y6d9En̓V O"٪DAe4! Q@g3cg}k@7fw#rqF]xHoe2P9z v0̮nX%cC}16;Y"f1c<$AYϰG^F&JwQ</n %c2<ؗT*`\cdg]ɀP5!@
+e*묡eYSET91s6}6s =?
+`3NnMZc@巿>9[˦ZV{Kǿ L]e
++Sdb+^ʊ@,xK繏Bw))wUUJؾ9g!{"sI O|>}'
+tdǠ
+B)vT> -\-;ʺX;:T#d9%R)3 g,.6rbԆL6<i%;1춺j{6+ɻrOWXX^{s+ekr:++[|
+Q[K>tO۶O ]
+lgܲT`ɮK~o\}1dT5ARM"yǷ%Q%1PC @
+rTPW6CO<p
+Iq:2s8pع+!s8
+l0K^:@6̬"T{Je
+汔56L"E>ڙ<<^>qDEcWNN5ەJDzĤsv!]Eɂq^Lj2R%yS{n2x2jfIB(g[8e" x|9L7VJ،
+ن}hE#X4`,mF%4( DFːvďTErdSmDԩ0LZCD˂ÆlIc<Ǯ𻵍%W9w+x8l^?69%+6PAۥTjԹs-l"υ$_o`
+MviŎYuj$jlq\̎{O[d {4'9]^Uve7t&1t
+ˌ9;<N\90ծ9JQ(k<䬑']%죅H
+s͒D)J%KYVddq,h[$e-YՖo^ߊf }ap
+-&l]j4uyjrչڞ|%\608:ՊDEH{&+Y9Y KaB{?6m.SO|9T.4i:RQeDK`O%<>MbDo%% rԻc^ԧ{Xɖz
+QQQْkTlT ܯfjݥ Y$2YCX$lE&31
+ _t$ fDerQk%$|"d2s(,;g*5'2 e6ᳲ@
+MP& D!~DWZjʳ.m^H1}AM^8:f]SP7 2OzyJhfX[Hlm|g?FSQck]>{5VG2r^YofK .Hcc͒-ʫ+h2*'RRaX)0X/q{1B
+~.78)D_MF.E1$lR~/Ȩłr/*|1af5VLi6WQxdK\bQ*>͈WEF*ACMS²3g07hj{c9uLg>f3 g+9 |519cQD
+gؔT]?Ӹr㫹芽>*|ʯs\UqeJ*nWq]e),P1
+L=Jc2zj;v:تۚK6b[bM hcZm[Tx9ޥ ؑ,HM*۾*:jkgzʹT&KqcэwEŁG(+ ZTJxu}F!7ӷAT9Y>A2 ۬'h;KR}]ٴ>s{:꓋sfs.9ꫜy:Ǻ|U޹yOn}x{<s◃'--g?*<7܆|vgx
+GhQCg&<F87ȔKI9Bq1*e\̝ggW kZ{?Y*awAK>{K(wQR%++ˀtI}DFQhArmC{
+d\\|
+t֭ifYgm")m9}Hvf(?*y6 :
+[LGZc)=̔6}@Q9
+dd(M#$"cE*)*d)J\;Dhl gAFW{n?R:adr[*oz&z.LIfx{bM!рFWa>U+(nE1HCr;ڄM2ګ9W&Tzl%UOJ\'.D1ݹ3&S1dڶMi`Ï
+w< l|99#*YW9r ̾ѱ,b.
+Bڷ{)Mi~sEE.LBf,\&r\c0w
+V%j":
+2Hئf l*(ʊ*]ceuNs&fneu!$gnqYcM"`rTHI"2}@
+xe
+TUUaj2*V*FE 18ڈ5 bŔc6ǰdmb7H"H6lES.0TH! `1tSǏ$]8} ;O.NWT%pcUPɎ1l6s=`
+P6tS̴|u'cRV"TE83xfWnkr:Z-rULc_#}.=(XU=ӨIKc) I\JG-̹£\! ؓWz2gsVdĉQ<f^q4cd)P
+ʥSKÜg\{ nooh/{
+m9t_9ex|]D=/_K҇i8
+Dᤓ)17cc=QCwP1υw:M;`RXcZ=C=ҭR.s2&^ɔ(k~*:ĕ2ەѵKZ9bQQ$x#QQދڌ*dsƒ V;gaFE۬sITȡ{8n6~Gh;59LȮH!gl6am#gZ#^X [EV0zȒ۽x&#UZY3_^+LkSM3`n4vs1bυT\=^+.)=Q׏ͯIE`.KhTں.3gvHݱIR:9x
+x,
+l;r,3%I=Mu\7;D ݲp.=ߜ'-ũwtt~am0CGK9!{",
+Q ϋĆ{\,'ru[VI_5yTq)1)4[c|FKz
+ʉ(C
+MVj|>YXUFțj9=-]ZTEݸsPq~)X=s:OÌ͖:S%s6qf_(RiVkI_M3g d,7o2bc92uKV:*ХuҭJo UVMqDIjٻ&ٴHڴA&͐OneI/4R`R`+.ʧ]˥pe3Qe9USN1͟s'?
+I4jrC̚?jQ}|%pc1e`i,9ȪL4Nҕ*T}U3>Y⋌}{$ċI\`.hmYzI\R2:OQa F%~ ^G7l ^v*9C,ccBjZ㳟^EͶ.𢱏wb|QXt9S)
+ ?sy)y;zs(dH=}3D
+Rc{:K]d}/:ԟrQ¨ ZNNռΟw;J-}\W)/Ͽ߹ӰÃyfa8n>8 `sa^CW],~߃%?`&PD
+7Ncs,!oe%]OYvǷ8W-kXֱkƣZ֢5kSsZ֦F"""&NnXܥ)K)K.1lcdz==dzl91Ɍcg9ɳssۜۜr<
+˿! YGIJA9ri^Cyd
+JvOwZ*f nG5ѹٛF7Eup6M64d 2Yݭt"')j;`3ds
+渶aTpt*r:fዄڲuUHbw % 1e s-6F̭ǽ85g{'ףnvXh VȇO+ǹu ʹ{L"3Q1V)>1d1~Ƀc>d#w4ʵٺxbϋdTymcۢMH.q6 %E
+cDǕ)cŜ$ !*$^l~ҹ;i7Cim^Y:.-]R$[8[JըBʰ6yӝ<<vLT_4e^]h]yc'J8vf0EaeCՐAEnZɖS&19;_takc\ںeCVpl.r ",Ls
+0R"݊g(.v_#~;tj虜ϻKQlb ?c{}hvImwPĵoY
+$ܤ[dG&S;3v˴vtrVT./kU׺ᄣ);-^^fn$X#,Vګ9U%W[ cɅR
+aĤt;nj3`Y(3xgrzL\tΣ 0D"` UW`2O)Ōp]euW!d.ek%ڑسfĮt,W9U{r"![iII\JI9YV;N8>TYuS&:(sd1V;cts ٷnFL$D5l0DE"cM4Ɍ.?K|9O@{
+BxpeagDJ
+,T<7Pɻ'9J6Xp)"2%Ğ
+,+
+TT*)8qg3}38dys8qg3fq|~8{>w#%4+2SKfMÿYd~2Ov6^m+B: .< ӶyǓq?UG A842K|?ts>3Dj
+
+5r<*̓M%,L|ጃd^R(w+*
+Uc'1r1s8ff|&{{üvb2X) |)l]Ez
+NB]OGȱrO-G2.Ooc \K˜8ȝ&1eݢ6I<no9L Fw"|`
+c2GDjQu^np\ewt̖`nȲNBۙlɲׯԗEZእ:Ew769d1V.wDGO1L]I=> dD$٫t]-SfFM{?8AyWO& [dz&LyYo$YS.8e3Sa5vҬm/NF}6L$19OZd:c%5DE3Tz7#Yo6-~W UP-O &ء!]*|/p|y[WH8LϘƴϜ~EVAMsVlc&L&(E0
+ɨ1*:hNacM$D8[죆*&)rOUrا"Ex%:8_a?{33gw.0HM-ݚgf?At?G>=3#a4c;^_w.0Hǿ@_l>g#nDV?f^q9sk6C
+Ϗuz j9 mkP*ܽrD6
+5P#>l~9Kl)kVIj\2ΓX,c^l't+UUQ7DCqc9sǷ9~ ccKsc|>cs07y;rھr8dvy{'tW-޵Gj֓+npY,l3k,6|FqE'*%lgPE9:U>E9)%2uՑ#ŸKA֌ݰzrLhh%]l-;&'AHgI,|%L
+bg9&JVi+9Ks#tˡ,S`3iGc(ty`{g;q
+W\ oZSܧi*>3I\v
+
+ʧIXAˇL 6jd.mIC ,
+ƥXJ-Oz)]eY,Dz3عi[Lmɀэ5)t9]Mےc3 Lv쯥RU(i
+r
+4ki*V*auJS
+Li;XnlRW&gtsĆq0QF9۫koJ$$$"mjBW'2+ˀ r7FqǪ/pݙCYصݻDޠ e+Ťex0ā&峔ESJ D=#xO͎^d.`h_ *UYc׳+#*t8
+M[ߕv{m)PZ+k[w^N$Vu7ٚ
+w.s(묡,cC9l
+aǙ
+{'ҭ%e7B=R5
+xJ\J\y
+[!=g/v(t8ɩ淳z cպcIl)KQf,dyiH$
+l
+0WY6\j}ĸ
+f׺ivɵXw6]>c]ŔJ~_Gq} EtWILMLW*8i[?M=z|45UrV}fr4CR5Ӷ=j39 iGTy z"DBښŽaY
+Q I7zz.GcYXlijm^>1tB|N_U,pFn=,&W8mW<j
+'&Ns˞
+kս^F+H=(R' O2Vm(!QVcd/<[ULM
+ɦL6N3be##2UV
+SoFĪӐTnwg=bE' ƶp鹒hE$;Mâ^€ rҍWn:0.26p^md9jCCJ=ٲ<Z%YxDŽ<x9ɰb
+? ztM?z5"Z3 ak{=g[4ce6%yRYY8 \$X2
+ͲhWR[$ו$,kƕӃe^^ʹN`>J
+' ,3A'"fe
+8AL e*`Zw:R[[-t+i9mWC⣯Rg
+T
+]}[Yq# *'s$
+aiDR8
+j
+ă9h5+̮@Xpߚ֢۲֥n6lmIy~1mX+f/~iSux}WIWtpђC˚O= bc+VKk0̔lR9 iX+ vη/$:`+R
+%2EqGO"QZǎ'Kċڢ7WP- ;3
+w\ț9N-KcTEF^j_/!v*m6p[3g+Z@`g"p9W; v=18l)[a)Ln]VNC%]ݣג<dQ"kjn
++$IףךH"FgW%Y9j-0kFưI&r
+kLKWf%kѯ`CMCɵYLcYH2pD3| 5vtȳw ()b9l9ֺJ|hwݪ
+7j枣j{~Jܭy"
+ )dXnKf12l(^\S
+ }vɖOtKUJ_YIp
+\{(nY
+t{zirR_Gl
+? + u[K3;v,W7OR,vQxaMI
+]V5Cpl<>2c alg:(
+i&u1@ÏK6~&
+p;9Hř5ֈk Pj[.[Xlqnk `قݰtHr xۏ}Re7eYt3gvĽ!{1EܮHؒK"꫱RQJSpގ N}Kl$h^5:!b^!U9&1sFxM
+y9B.Z.Aw 雤]Hr 0zLsߢlk
+o"Q&$HЁ=Ce0r7o%:Wdxq*ã:
+εt~޴\=.pI˻2LC&fUp
+8q5U
+9=.exՃHk69ڟ/hS' 5)- 0TNa݌3H<$ f
+\
+dLc{5,͢<x9)
+
+cǼli:TmSS9
+3;ƨ )ۨ:V9vU;,.ڍRO 3+JH*H
+#!G
+V/ uQ*i&-\>"l
+> q\U
+`)@7l걡e$e)y0k,KEm/9A4Nؽ}4F,
+vSg-~tɭ;ۧͩ/G<=Q5ө[8Y}R.*_,e}(t7%m9bտQim'˺)=PILXݷ!ȖR
+/.%\y+$ɋ8
+^~.1y
+8w*UԏK~ݤNz݉_^mF)5KrŶfw YcyD
+Șs'k75tW5DRlXP y<g\$P
+
+Sj۵y&r'eդ9Q J@
+*حftKWj𨿞\
+.%XU7є3.e=~L$|bǰd"<
+Vu2zrarno›ƽǼVBW=,Ud}G/f'eї #$kP+~'6xޠornqc𖉸{TWyǫ<lm*6$:$HvI1"qj8UK ]=o'-[Md"% ;vI'I $0tp+`$1
+
+WʵYf1eZvMV2P+oQ})*
+i
+weǢLKEd>m7 ɍ\
+fO
+
+R_5y)qk4_fbQ:s}]wGh
+
+<(L(
+3s~N6G,o&Cu#iCXLከ;)
+k]83=U+۪MvpZ)2$馉Rg
+SGmM}orRAuvE2D:3HC\
+
+
+b1C%9\1L\L\81sgl
+Zz~ƍՙ֟p枞+.uS#rQL@
+V~4amԨ-snaE,&F/+5a3P*ƀ}':u/ҟӻ:5i" LNyaJ2ij+9[+]IVvm@O;cΎAqy㩘in+gvDʽUۣuP!Y3e:j
+Evnj$oIaNqrLcd㱘<l˒>&
+N
+j:hԛ&IS"rC1
+
+m\ɼjf34zVDkit_CT>;.7#m])ZyI9xjʬAW)qXװơFJ
+3/fctpvϪ_OXM2Y62ѡ-,54}R3MT}U{`
+?
+RU2p
+8smV}r܎0g^L_©Ž>$d,+JZ[i#]J:;pH~7OnѐоˢE ګ:W!EcSjr̐?U\+@o?h
+e<T
+C<lT¨eO)L`6
+C
+ЍϕF|to^GIlr6uH4Ro~gI7OeZ,g4_YxԜ.? 6AFX,clMR`6Q)
+rYtR3
+Ṝ8|N& [8握
+ӥpˍ|]Ç ,)Դ,*19s&r
+dVGdUS6(N:j&r93g
+2SH)MU;NJeGH
+q&L{H}Яy7kj^=_1YRZl/h/H,<vJ3] G'_mתtdr=WԔF "6L7W٫"ykN_
+ 5b?|y+=5/Tq'
+}nf]Wӽ][כ5p4XZz3|mEUnJqg G sJm^zb<
+2cyD&k_'gV+8@
+nt-}3e' KD克GUn]ƚEԤ^ȹλ=.#Ƽ
+zbiz-ǼRfig
+
+)+Y$2:>j}j]Ym_sZj
+`꺖|Ը2:~d*
+0,ymq&V
+M(B #z-78~ yEp
+2*6ue8wa;EPjK嬑ɜ
+uGOM~!A徂5Y[7D};@G4FiVh1֖!
+2^9Ø6nع]5կ[ޡTjh>lGed5υeϤrwyAId<,pvUU}idAjyTm
+ ÕKV)҉`R) "@jͷǷY׻e9'fYfߩO̺y+-$\tM:
+wM&Dj
+Fo|Jjhk߮UlKXo2wfs$uhd)Pl&V6vJ]_xd$n&b%ʭ&gIuNJ KL0
+pFƩPpՑWlwʦ&.f 
+FnU㛷hkiJ[lԆI}utĔSWD>rgn\
+R9Iu5vv̢"XH
+q-6}c]hѫ'R3A$
+
+ߠ UnkvOjh=bB3['Aac+rY [m/niٛFf[4p\,V4승Yܪd$_9S=]ÂBп_
+endstream endobj 7 0 obj [/ICCBased 9 0 R] endobj 9 0 obj <</Filter/FlateDecode/Length 492593/N 4>>stream
+HwPS -Ћ!H $!.HZHǂ DAJQDқ4A =3μ;͛y;7g5u
+pݑfz9eS+q*8 /?&
+1r8jF=(HpE$=n2
+Qߎ'JHKJKde+19X\#P^IA\G^iWyIeLOs'
+]tub#NcfZ+ 3V֟N ~85`o08zzi/.[{P"ܓKK ȁ)M!}a,(h^bgT_x{q)DaoBT4'WFAKfZވ̺
+{ /@? J ؏z~$Os9=}s&w6w|B䥸s+~_\l׍on"ߖvwǿM_ U D
+2-&6Øa YNL(%#,Vk 3*G g >70^_><@Qk
+W]TkS/?nyB@K׬] =I<h#cU}qVbT+G&
+"xEE `8lR,b
+қH"ņ1oy ]zyܭӽCy |+ᾷ.9\^qcMJ[:~ m]yai£so? {#{WCɎ<݂B "(M K]3Tf,&'/&RLLz9hW._VЯl,}_+QbͪħWW6խ\}tCӖk-٭t5]v rL||?8iA45=<i{_|K?/DX
+Kxl qQW2:HG
+r;A;bjJ
+߹/3
+><1]^~|h
+>$P@%hیoK/<U˥[:5pzgE>{W4yw8 f8e D*RBy;`nQtVy:_@ϨgaJ
+O
+#/a^#.y?FPgq?:K1b4wߘUuF]WqP&<g\|KW'SE<nǪ}XL'D{-IZkOoʗ=i
+z"̏97 3g`0'Cw%|WHo;ZN*tQx2%α e}|N J.
+2 caZnpHu|
+zP1iDhTL.YeP]G&G,,<d !mH79/8xR&sHz^B#Me&h?˂$VÌGͷwf2]"6m}R=bfclqgU=d0ՒWN{D
+
+'->` ]
+7p=z=`nLh(n)ݡa&so쓝@Zl
+v>*K&vV,*p$i;Rxټ_PG?+\ʽMbL6))r>=@x5*fv]^Zduz]X?P41p 9Q~*^ *,0#%8b;Q'p*$LEf"޵wǕSC戽Hah :-"dk>uy7C/)d%x`'qyo SY "&]#6؂5;
+tk/ G &0,#Bv"R9 59oQm@;/D5RIP+-GM#º'uhAt0";=kմ?{-We_]ډ[jA )H>Au%W#Ժ>D.ٜJA1~ S̕V asUB
+䪪/j)+68˼=wpmbnv\ߝtGOx;`uKJ ̄wAߕx~Ϟl.ɂQ!h0RȥjEGlsܦ5# J58/G V//"N1J;mh`$?,Wq$L$0lJVzq+ĬЈAaix!dpTP/H_ zZY
+U)$Yǭ, H -Ϻg,7xeIHh6 <{*M@+{ Pw/f
+X8Dm*Q/ZB\@a8~r;E=,7!oM2D[..Reړ7tA};GbsWh q2A];%mi"+g=Uf*l3xݲ?I a~ /&.u
+궥
+>'ggUi AN?oO%),z~U޶ 3^Gj)ȀZMۂFiPnQY#TVtgSVD^O˿:JOg+SMnveKlou"̋'gøSzّ[ oIpkк½+/eM=Pm4?EAO =Ф>˭=@tVw {[u)jW>'jcJ|e57R1a7/zu c\V˞ Bb-C~}5ְGU*Z$SmƩૌL "CƼ+g~>dwE͢B`Ѥ*]vQ)TTڒWЬ~E0!U~Jqb `,<7q |?
+;.ˊr_/C:x)P]aΥ:媀B3-⊗cpcـ=#ӗ=Z"#j%"b7KJːйcle/_>‡*E7@+V6ŸnvQGM]wTnG<2 !_,>P蓧VwN5[,*tgGvR20B'džɫ+ tGj x1jMTn"AKFoUkoȱ*h$e1%#*
+V"8%{4G(ȫ*d+~?ɟt#gG9w[wߺ4ݑĈvOrb4鴶ר=yR:p(bHY-Ƞ$D~)5a:GXmr ]c^vzKS8=UĊ3c7o1UNϹu!8EGpҮ69 Esu|?Wx5ɻ3FI a ~۸ߕ
+TCY bY#thG:tW5-BG^pw+.xZ t#4r uI_o$郅t/*-]V:SI#<
+BqEd_07<He@.zjڌ̘k~ Kf(U%5Yzt@љ3# ʒ֢>Ɉp0 e,%(IkLgu=Xin## Ί9W"o;!t%-Izx`to[!֦Z?Q,YjwgW tCOTmW}9Ӓ B$pqL?5LRDH|]gpOhz셠kJ$ۨ
+sOk|8C "rզqc (:/k~%Dj[ihH5nߛ-787_A%V"RjxwڶᎣͿ3"汬6EVÄA'X*{G~GZVAZv}&(lݽ6$>Yԟn-ZT3(( D;峰&pۜ :J2gkSIJ}']V
+WC;KX_="ŸXʰ #ލ=Omp(e{K  nK 溞b@mfl_#va^X
+5s'nW*B6núowcj\ě8]qQPCSܕ5'YQ4R0jf9Tv.if\PqBjB5n~'C͔qՏ\0&v iz\M\O$B5/ p',Q9= Lr{wuhhxˬ[æ=O*̥B@4'C =?촺t毃4g[TN͡JAW4˙^M'cZ
+aUIrÚ=! 0KN"𚙓0qq(ynmi]a PU>?IG<բ038|"5|;"yh!lYf`TڧHϦݤ<30ŝ)#ae^ڼxภl`ST_'HF<{ڤ0iN#({-~~r}f}Z}OGD~ C~7H+)Ѥ݁j~n
+rI;fS炜ZKO^?Cm]7{‚+EܣՄ'd+т~@( rf"Zv&NܶCG67^4+(>0N?~/m r7if+ZegN͵ҊC:Y;7R5*g^W΃}̪qwen"Z/NPCF7>n*H2HSՃU}qhʙfe{/Yڹ=NZWBђF7#I*Ɛ3D.r݃},kq;e-,3YVNB'E7 *Xxi<|pķ]dྠZYHMmB}6S+ffOBT;|rp8dX0M@Bp#6񧴜+™@ |r|`p;˯dNSXMpEBPg~6-+- <{
+[stw`(W~kyp ;nGN5|d>C?1]@8l^|Eb?,Υkz,
+00X m[<?bPAߩ,C] IGe_ ߠ .1^IxO/'`c R.1B8- 梛x*g;ԗ~KtCP^W.T
+Dw2EkH|0`W*q"]|P&XbĀC\1=.kCլĊIUl(ha^ȊKJmXpq}P9Vaâo^Q#ŜdD@@φPފ YAɈ~j<T($8}o#p}kR5)ZT " QvK1T5q!pnAu:XIO3`[)m!{}Sl-/kZ朜!:^́tsc!Xv[d1
+qIgVZM&۷d6 g9~60hyfT1_uV͵z[qIҙ
+&1O%D'M DzFHq K0;J5 7GdQX"/! C\8"wv%>+>r'ф1N[Mƿɢuo✔b/HRl+W|[{ṕ)LvŝiC؋pׯ—g߬ +1+KL!Ԙ@|m#>`V(S<{;PXVK~JxY'VV}b{7anWT4
+08^`lw`Yll`ײ/lp q28u{lbۇ̝9M;]w[c]|B[v4hL̫%B"HPgp"?es1c\cekE
+B7)*ѧ7{>ĭGulk(67aRܶcS|}<()2L/ΤX.`sk$Z<%S0aF~l7'y i^2N@HS&xpyRF}Nք5Qd-!c%٘$cL#
+ Zx..m}1K橤ybI֜%sSBqrMї8mr0)YͳRܹB wWX8Je3)}U[ )WO{eTS pJJyςG5ꪲ5\E2zP$\
+YFtQwd^N
+1wEtHt8Eu%UTTl^*!%U,kF܂0!wi
+KyشvYV:^tFƔ.{od%;V:6C&1nG(y%^eOacD=4ONi6썂; ˭L`f7Qk{2f7PI"ăW(^\ $b1S.%.F6;oAAj[ T>f+(n_I߉^ʻǫbȌ[nq 13ߏBb7C Ӂ|S綵<*/У%ڋDrܱo|RהulsUZ_fת@^uP6T)#:ςlama$Hl^z'1`XPҺ}*%]ibd9&e@՗}@v^HdnKn(
+̖{]1;R ;e#ZT"?hpiK Bzޒf1zlRIP<΅R1bm],2;%E7THM>+aOέbw?R HGQK+6f[ev&ŧj|xR4X%kZ% Nhr  HzOޢ[WJk2V\^Jpsκ[GFH'3Yb}O. =דgM!.grWsG @d+Mw8|oA8a
+6'GCg5ɇE-h-;^)(pdϔPY u_Te.<e $ZOrǶJFrGڬ|G)+ME8VUad<'zfd{0 oLXf4iicQrph)W1 ~hrQfYXG/N4J;Ft_fN
+*&/x }vuL7 Z
+ڡ>k$G-)1="Y_w: j˱LiYm! ;ʀ}bZFr'^;hͰYնg0hE6AL%eO%wAݞa?UBW24a:Qc᪜~yʦ/ dWm_Z!ÿlq* MlX[͔+l;):|UKeo3W #
+)ln>fĆ3 _yL3̀yVii߇k4[p+Z~ɮNW
+WB~l^Q%¸k=LzbBw -lƯ*
+BD+R<lMMtRV #y6_vȑu -|
+Go
+%>7[T*Pu2Gn.(+QO^K#6`.m@6?e÷ Yk7|RO;1KKCXo }Ic?bVx*r7k23{7}M ;=3˚P1YldHv^Jg1͘܇L>Lۡ=mz!b= ,;1) ,%=3|~XEq1o[9^iUSlwzXRkTNP'JeR@݌1p4@ٕK\Ƽ42i|S`D7n
+"kSͲE~fy,p
+7%Tw#UUCs0}* ڇ(jWA,ӘTR r`]Crz5_VYA9?uayK$mZiin%44Q5Zq%!'Jj$;tр
+a,ߛp,=Dշ{nk>Rg,*CcL57iRXZ#EoP
+LԠ?2o$?9a s}DZ4qlse -X"Lk-?pr2i@$~Ó2Mʉii}ppʬdsƝX3K?P20l,$i|d%|_^pc˧jWSKS>񛎛P1$Nݎ/M,{oi{c6W
+':Ғ1)Xtjwi|Ȱ^T5=SV,H?>V3Bs(Ț1V6IȋybtPyuz_v֯zwA{<xK{yr|#z^|{yH}|E1T}I|} }=w'Gx9"x3yvz8zxq{"\{G|*0| ։#
+TJ?Lql~ukۺo͙-j_ gC8yI=9~:spլFf{W8)4Җ.fLʆS:4mY:cO
+qdR}[h*wc7%_H.3׷d5v4W<Vq*;iɟjLRE=J t=>}6xBxvPŬ gcn
+7N\VYgM`TfM~o1*:hgKxD:ppqR /Gx-<Uw#<I|zp sFc1;TLbЖ%#,慹bUX8أP5f7Y`xlXb3{WVvd\٘ d!.DCX>5-Ӡ`_ol ts&+s0K2'AkO*
+7UdAjD-Q&!Q B \ 3h(;l 0weX{!i)5$uۙ.mD&WdXQ<ZKV<d^x:?T;it쯲>6l44+\e8\SaOƞ*˞!}S|ILJ\
+h8񜴸
+0?ER.ocqE-輏'l$m'X
+<۝|!b_7sD]&1b+r'"ؔ\ާ7-rܕbMxswq >"5OE"ϞGG2/#w5m_QwRrRq<$W`K(ABc>%%D 0oD`D :P˝nYE5e۹+F2Wͪy"9u/pQF$'ߕ>r3&=70N@9
+mUQ)!..U[_
+?KFJ4GĹÄY$ܐ''\]fG63IAv_mfax"C%k4BbT4TՂ"k<\{dq s7/d4V
+{lhxZ]b[~=ifig 5Fb(ק9;O٧ViGGX_}n]wӸik6f:,p,@бkbmuFR!s37:!?`CW֧&`':gUDtx4DLؠ²CKh#NL
+mRҦUa9B6c.oo18g JVnv[[mFGvzB+J02Nhļɍr/ 䜲Cy5(raDlGx~H?I.ȩ GH;A!A0sARxJ8*ۛD[Ѯ~b
+W.Q{!n(1_9W'IlCw'Cp^~
+UUu
+nIR:^ar]J& :þҝm)%қFҚp} 2e d';(MdFڶk ]*HДPPCjߙ m> wE2j샽/;Έ?* ,oqS6wniZMfOdI&~Ej<uDQKkM|\hF:;TBYćCK u;w1/5%>*tcHV=֗7<Lk2XF]E=m,6rU蹲P/WSEFlPyzS8Q:/~`~kLS 0RߪnFS
+( + d%/eo2Q,xuԁQ,j M2hƥ(Y諧 $aig_cOl,Mު+ܱw_1j9CBu.ёb`hOq
+TddVvϦþ\f&Qn='қ޴T*l{_"orKCbqѿ6#Y0|SRaW dxGjZ7K&DS=DDKvt:NtOh_pZ%WIj@VkG*EL<QN@>S"R&D}cQB)ٺ:X~IuT$'+{5mM /)y ]X{.OI-Qx  bYzEIbxo~Ub.Xܔ#NA(lcZVrA6󳟚cJ!,i9+x);kfċJ1$kGeNWIbP@vɛ/ySj_ʥsJ3]jAxL RdȆkHx?H n'kd,.62@-:3+r2Djgylդ~e|^D4\UY ?d=eH;:Oah::=`#?vTE96MI2R
+ޫ']|_{T#t=ჸi}f5A vijթXd!S)q OK
+_0ˤh;vpzi"0H nU\קX~y7sTfJ0 'i_WΠmJ(et>f݅]m[-S]Лc<"_.×z;,^Aɝwp36
+i‡WRj|pI%(E:"L{+:eȾgdOژ9ؔgF:fՓ ԙdb:JJ[pdR"QfQPge
+U.4hzZZ_<dm\4 ml vMsk],1x@A2U١(Y ZW!lM
+@+PJ6^ݯ_ϖWt]pw]Z!*g~#Q}Vn'+
+ mzݜaZDٞIj\!bD'7'^5P<v,gv 2n1[0tK)KwN _A iGBuL'Eov}ĜU[ʸ?Mb=uvUٝxFڢXaI-=nN:qaf.ʖWf5L.{UB7%t m'O5v^k8Ys 饌0w!.vy~"qqHSN
+'غE.>m]$h$0Åzm㍝|Si aYvq%Ҟ
+Я%a@"{/[VG+RYpy-²L'80lK6wǫ[Ŧ"VaM&}V; 碇s-x٣j$_aЦ[z_ ujlQ^ˣS/)Gi;kA.!b1x>؋ǯ]uG_i?M^.ZRbG*I;Ҙh.}h!BQ0bPEYBtZi+m]xR)^FПf:s.C?!%8^k gbztٱh]3YQǟbFc:y'.!ܖYi3s{Wrp?sBe t`Y|u]NZLvB@w6}x*@z1y{l <1}8${
+uxo﷑y<dyYazPN_{BW{6â|*.}M~ zbon&dF@YNMũvByo6T*&@ ܘ= ynLn쵗 cްXbMy1B=6o* D>ӚRPg΂MyiniƊc]*,X;߉aMAI6:)phgz<όۂx葿mݴbʯeW9.L2A\58)ݛ?h<x]]mU6bLW@LAAHoj5ʞi)ț
+ǍH}ww̷lϳaЮ|Vͪ&Kߥ,@蔬5g)s<{)@bRwHlKaP VV+Kx!@mW5Z)`{}T],˃v3k̲]`᭯FUCKD@`;5($)xq!-v_tcOvjkZ(`cUJפå@&4̞)c#䊇o}s|e*pt+ZzitOnuEfv:ۮ x-/yh#z.{ '~
+oVye1OyZPz"O`zEe{B:ܭ|/Ȩ|$}l
+W[n o%e
+meߏDo dپZCOƴ;JEP$:תۄ/զ:$Aҟ8$ K0B oD0dY#OPE:)/ʥ$Q
+$ ^$nyRd+dYfO$Dέь:!/ċ$^{HI ^#nncǻ,Y9ÓNѱ D*:Pv/9$i|6]  )Ebn cnX+NODJ5:$ؔ/l$t@sg; Z.ZڋmͿtc# XN9D9Dy/xі$ ۚ k!mp1dbֺ%XU"M1C۫r9צƜ/jN$8 ϔɈ[ym֮rbǫHX YMȯƥCX9aN/_䜄$" FuoPvqw_rxsғxu*yYvmAzwYJzxD{Qz.{z{{Sܢsy>tz2uzv{'1wR{Qx|Mlx|X4y}PCzZ}-ez~ z~-qԃ s-t;£9u(iv1}w
+!!$$wߛ{C I0B{M ED[T~{QfiŌ=~\C¤P/P%`vָ)Y /Y4T?5hMsqjq+:m'E)̐/kby@}{DR39놑>cvvSDžƖM t?65)`o&Z]d?qF4
++0@ל7ty
+^A`qrF:TZ,ʡ2m T)q YK|_iY y{.uXN.|K$F^k}fVST D^7{ѷz~gȡO L-*݁yV0]?3mnH>1GF)eDK;hز
+wGPXkm
+_BIѨ+ ڣ㞠t7tj}7Deߣo]3%j%Hn- E/GXr#3,+b=?^'NC%}Uss6p)n2
+TmJocz}a Ҽ؈ WǖS<c% n*DJ=}K䄹f^JkcN3HCKy8B(
+Y lѭVbjtȳǼoەԊQ*J$;i+_lFZdTn-s:?@[Kݠ\(h
+)2
+[!{81ar+9iFk#q׻";m{ &k޵}K>Kl$t_@*CTV z7vdr]&4DiOQi lp;#K}&<c[w[oA,
+xJкDg&vhh\
+6+5DľGѺHs͉}dU3 ͫV>2 
+ ]-jxP$#LmNܫyZ44CDcXj66DgmZHSd}Wlɾ[oy@nę&)Ι;-~(.xrZG`znr YoB)`cТzٶmixC,WSeH)5ڗ>B>dS#YZ퐉FyQ R!,-j"~jo**e;
+I`h]<nVD¤Hb,q(Ȕ4ZcGP=sQpv/R0!pxe_l&!?F%GNw33䊘""=XC7Βq/߉)˗M9h;F奢.qY8$I-BD/ĵ#L(>f+oZˎL;T
+O'{XzE|H>PcU)'ItJ&}>wͧ3dQ%{z ;-'L5CXj>^!#ͪIWhMsfZC&9
+3WʏeL)!acE2'(h*A)?+f7GHtcfի-(U+bІ]Qx[Beb;<R,ꌤX5oXDU}6)AG-dQl:g0\_ŖX^C7L+e8_"9˳w> \h3J0 DMM;Q[9Ԙ8L*fd@kR9rLDg5ٍBuJCa&NOlٯAM :m!vİ̞;('y *1\_M
+
+Ϧmߔq;K/G(:'ܷb^# jQtkA}R*SY<~522]
+/+ %U)lD鍩TՇ_+T0A+ Ng9S.јFw9[InZKG%!Fo}]xLD
+(p:'"x98\tWؑF+e]-vl?
+{NC)j]܉cVA)1-Ū'}F pcnND6lW<CnFCM.~JoQ;g
+ 2VKCnݭ69u1;X$i:Œ~omI_tfqү;V3:lTɬ^}hEw#ÚETh|A
+[%KL$I?웠u*
+^ 3$<+gSa)j* jRADʢ(Le{KG(Yr1ݴf([c#YKllbS#Cg~>)2I1_vZ4^u)j'6kV6V, Vb# ?/;̱;o5g:nĬ7},4mG6_n) yҰ_2l(󊞎hs`L]x7z.թQһޜ첱nEͣc:6ԥ4ݨ`j(a֍4kɪRM]Լe+-[Zb_Hq6Zن:2+}Ec]ZH&:LQОkdèi_V.36$o^ϰQ-E4<7*,+}3a$}r RHjgKV\zRffmÉl@$]{%qf,h`=Zo:5snX5~ ą(
+wejwtpO1Yt37z h3HjYh+0`ҕ#ݶb?&ZQ~ )TKty ɘ1r)G^T>Q0ON\PP+8\6zQ-*Ze^Pxe
+dP&ub~JY!Y/!]1h>@jVuF'lqV螩m1:UH≢8QEvWb\#ˡyNſ'\u/H$wuψ
+MxoI&v}!&yh嫎\0tx
+̙+{S
+t^yuSvHw>-xx2!y&.z_| 7~irzhz^
+<YgʆJ]LSۅNI?+6+ ɟyA윈h kiIa"g=]9SF &Ilz?_
+Buf\aRHTq?9X5x+!
+``ĉ܁f3\@wR`HK>Z5x+!KVӘЍ
++B eq~[8RtH^ 6>ͧȚ5R*+p!$
+ɑK<ł0e9P[}Q-H.>R254$+a_!8F
+feh`Nrj3.s%l5Vt#n#bu oJuqzvs[gzwtTaxv@vyww*yxfzyoѾotK*puH|r/v@sPw0thx"xuzyfPvyS_wz?xd{* x|fy|`m~o#~"p~8q~_Is~wt6~e<u`~Ruvw'>wfI)wNgxE|k݇%mêo
+gpqlqńvPsjd:tRQuu>Dv}))vgẃ~j
+OlJrmo^pƋQu!r$c9svPt=u(v'w8i^kdmin<psqpbBrˍP
+t ?= u(uwjvWc hӣ$j&lL%mښ̈́o[!rpѕalr4Oasy<tu(Lt݌u?ƪh,iTkm7nr p=c`q7Nr4<>sx(tOg
+#yd1t#96`GGp4c]ϹNM;(A ? B_d=tC8e@@"h$[RJuq5;
+~(^b
+_0SR>0͡#,WٖM
+ r]S~³Km#jc=Bf3>"d',EodbU})XO%yڪ!J@U~e ѼvӋ@qnM!{ n3۲c iwuCcS:dZ7;Kw%7@ks5N'A̝ra{;N93&`q
+=PmhbaOZG|mXs̩^4 >?@Uzڽ'a8,Y oۃ<)P [i H60?[^&=NBG 'i]a#
+@LA5&i6u3QsN=g6P`f+]i@'RG@=`eU~Qa!:ǶWK_5PK)P>-hΎ7Tհ\W9'i6["%ӡvȘY)
+IN0
+CA# -nrf,lp%ǜ(l0yL@-yDS~-~e
+S4c^z
+]5
+tk
+΋@ qѶN6I`a?bꢗ `Pl{i0>#xz)FXہvgڮPxKkn<R M8Dv78NeZ^tj5LG2wWhE?mTs_I;49u0% d;D7^yb3orsqUc@,ZʼWn?(Iwz3,}ox({͜o?s^\2Svkz'ԭN ϩ P(L6I@ͼFJ[QZ\6MsReg؛\ަXjx dxN> Y^㫳3\~qUv*mI{RXj;,&9N\FD Dwx#YvZ򚹠NۙW)+(YCv:+4CYM,ٸrNF"I~y
+~%^ At "X]-ig48|GҴ 3" _
+#V%@ǃ*PIER=A
+䩺j%7<h֐+C5{tlV7ag rYOMOd8XѽVɲOv"p}ߎVhXՄqs/g2;6I8CP)N{ͿO~J=ݻ(mn%=B%h%]n%#La} -к0SaňavPBTZoRD8m'ǖף}q<_ qS@1lAK]7`=_*F"IZj:yW?zVZ51JCR="PfJQ~s0w!J{ /ӯnS{9Y~Ll^\kEX#?"p\*hc'Ubqqܝ弸Oa>%d_o: ~_/l9PKo:~Ty(mmaWHЫͳ/stMDxI,LQ5 SMzt)$"`rSh
+K 
+XQU<]-}!e \NfQ,u,.|O|f~\Z? έA }sy%*_I)ο`ߞ6_ҷ;I\la Ch)Ha{~ T' 3zIgKw{5czֺUw: bĀvX~fծrCi ˳?qLr(|#
+/[cW}BwsZk>KcYpڸ?fr+"4'90Q&OVt\q]s_x>[2Tލ (Z_kN4
+LEF)"bv׸ۊ<.|ԲBT?X  hLcԀ ci.W$-lBB5 +_ƭ$SYo^,^rhT (ʥ )4gɒ?s"z`Gyو=\ϣ_RHO Oq|< 
+6J rU>{E10Ipe6V <Ro|I&AĈ]g̥PWRj:W#tx~ne&61/c9z/V\b!簉HS@S c,u2%یsΘ!rg2pU0v>DOy!
+
+ldRp*<s-qwTGJ*_Y$,';b,^vO'χjtZJԡ' c;l?o7t=-~Ԯui87uԕX.W涐h'y`
+Ep/dtu]9 _]l .}oz"{D| {~
+/1(i2_VJLE0Bc8~u-"ٔ'
+{ jh
+ <kсhcH^ۨU>K~Ab7--:K"ɕ 
+.d!g뫮^Y}TO"KA]“t7]-q" ^ g|g[]٧Z9TLěJlA 8S7g-> g"W Ŏ .fê&]cSTJ]@Ŝȝ57/R-"q蔻H D=F7a_iGW¸RjN56l?D9m;EQo1qz'@sEwtbxvјz
+s1KuY'vxLϞyX |
+5,~^
+pirl(s7n;sGt\pBa|ur0O-vt<wu&xv ywxƹk^nmpx2nq;psQ+qxtrru`ctw+N<uMxS;GvUy[&Zvz
+%u}: w{}f}g i8k2 lYzn;op"^mqLs:t-%tw ve{>HgŠ;i؉Ck\/m^no ]~pKr<9vsI%Jsuւtd6wfxhҐCjP}l{mn8W\oފK%q\8rN%rUWu'3cA.e#g蘟 iՖL|klm}[o.Jp8q$r1tb}d壉glif{jklҗ[nIp^85qJ
+$q@t2ua߯媧d@fx\hozjX)jl2ZjmSI|o'7pN$qDsfaDceWgziͧj)kYmkIn7p;$}psN/`Jc0EeyO:gnoyii[ik8Y^l@Hn7fo՜u$ep&+sAt1dK#uf2ui`vk}wAmm wo[xqJ <ԉ
+y9VlxZk|][$HC?nW3^#4#`'-q%;Q/خf̛`ƭrw O'erϩutKeJ4@x!@/I_!; y@8,Z=lKzQ{T/!G=Jl-x A 3F6rpJǚ;jhi-+
+4OyUVX=oRNwPFV<m1*GP<,yyfC%T/QyM&_Y88$ 8Rt8
+l/E@Cૺx+6]0Bl)q
+kd "Ym?7hk$"P!(0 ,V ohJH}nJޣDY"?ޔU=a-\Zq`8g9f\
+Y|7j)
+[ݤ^UtsNo׬!(rZ7C5y'gϫA;?JݎBņȐzc*K?]3'7(;\ޮ4*|KNsB!+| pF`OWp"+&ނhĤ=- {/5&2=(yA+=?9SJ} t*DlBU(ѵv"9s>y1zȭV!eQ6_T~7FD]Cw[k>D3 |LEH-'P8YOz2j = ^ u)>QJ$$~=Q Dp7!aa΄E?Z6n;u95~VT^>)
+x\q})Q*flfwD,*'}=?BuppQF~)GOFWW/h4^֪͡kUj\uEʌmd_?
+ʞouQ) E) Rp!%~^݀mlD+sbW4M
+I"Tq`h孁;2-"1̄G ?XxAs~=pQN5F
+T-Qjau!MPNi.? B+SO a_BL~nhw%G~y]wJB`E} oe7c[_j$'(߇ |6lTB򴽉6AX+aO.-P5醲=DMHPo5r1O+qkխfIRzjY).A[6FW|{./]Lm lcŻ
+ENֆ\$,K*䙊,rBV.ܠeXyIiw[8Z'Uqhc%(>5$ܑj2\gvi,8<HLmS[RYowr'*R<CeyUYSaҸ\p5"*Z+ UBƃ )Aj ^)V `{++ ƱgŒGx5`Ij{"ДE'>ɂԂ;^ q8
+N(7O`AlYʿ3WGvRF wy&]=B)+D_7:zrzC
+)dfe$)eǵ5ߜJ \iC &)֬ Gb^QQCBe@|%xD2,Z*첄ɳMI}{Hϳ^k
+:%(ʩ$?'펠dIW;Fs/K->#n\J5d["tY`L-UӮx["!.vψoKh++쭼 'VxhU]'V'7 |IJl!ԍ. ~;pcn
+kT!8+G6|| {H+ƌ+h(4f[  Gg`W':
+UD@q *ug@\1_a"Y918$镖$BAcoXȮm uM+W=u \_6}mtciZ_+
+*(żLKe4z_Yz^(| hi2K^ڲNë.iP-SVu%|aQItߩՁFjXi:$M4;1e )=V=Gۈ'>EJqtʽL:#sZD,QREIpY͊ŴX.ϰ),vUO_Q ǁ, &˵ +0kěY
+0/J}+^,"8xd@1;t$6c-IC S~1L
+%d57SE;g65N|v#e!!YH/(~*!)h#j |xT"JJӆ)0nGya OY9^`%*$'LTgw@!!a=>>j>mPbػnX!mSY%#C!ﵼ='4Ut|KaO+aWc%^^[^=3lXqv[^dVo{P fܮ=2spӏ7Bl{B
+:ط3&N_=@ 9ˑlW>` =Fx8*>zL[`㛻ͱ%(U;hn頑̯ϛ'@5[\#/N^>-a#J-P
+mW
+ͲXY}^%=<\7yE0jw\XzZU͈޻g7{BmTtnj U5'_%_hI*OWVωsCU%oT_`-Id$,$5~u>UVjKDj2*u}?
+MTC.aB.3j:@c~h$:䧒.u^H^*GAf
+D[;PCKE.x9Uu,ڄx|njozycp,%eregZiOel&DnX7ɑpY*r1fs u{Dy|io=ikd<mYӖ2o.N3pCCr7ft1*u@u}fw ڍ x}"xapn3qcʖs;Y tcNuB v7lx *Iy.*zK +{
+~w[w\m2x#bؕxX2yMVzUB]{%6T{*|}t r~q<v8~l2~~Va~Wm~L!Aώ~64b)3 hX҅9u:wkMia-7VLAP 5Ҍ)F(% ؈R+[$tMjs`~ԉV&(K0@n5}ꇟ)n^_x ewXsti _˒&}UMlK l@sό~5$M).ctnrahv_ cT珳J@
+1H|
+~Qhl`t}
+ˋJ(kl-b$Ѓ4XN/ND:\ /_9$v!8 ǃ\́fjHa}X
+vNG.D[䇋:^4/$f߆.Y ?Յ a
+jΏg`ڛDWyύMʖyC6&:r/v$A.* f
+9\ݔ.ޓ#܌iB  fhS_dU+LnȜB͒9qn.r9#ŏ` '2
+)eS}c\eRhHj&?0lB5Wnf*bphrC\s{w
+osP>j _kbӝmSewnhJ} p#jl{qm[|roZItAq~7u\si#ut Ixufihkjmlo]{n&qkForZsqStKIru6sw"t_w ewmxd's@ftEhuNEjv\zFl[wXj'n#xNYoy4HGqmz 6Arz"?s{ vk{a|adj|vf|h}1y
+j}~il}Xn~ Gp4~D5q~i!q~U u~P`~Dbe,sg^wiyhkTWmnFo&59pz+!p tγ^}aR<icf8vhkgjVlF;nG4o!oȅ4 &tP]Er<`&t!bԓe2ugyf0iKV4kEm4vn!{o ps}\FW_-a)dOtfGechUjE3lΏ4(n2!cnP r[wH^dacsedh/TjKDl)03m!Om rZ7]h`{bs eJMcgTni4Dek3m !?m. r;֭Z"])J_Rbbg rodȩcugTi<sDk)3l!2lÓ~ 4qp
+_Sq bMTr)e/s"gvLt&jdfu+lV:v8oEFw<q63uxs!xtX B{uGlhnjjolIqntrBpfe]str#U:tsDxuuZ2vv9ww zyx"jrql&rmt0o)uTspvkdEqw~TQs@xCty}2\uzRuz x{ʭ$h\zj:{4k{im{rho |lcEp|S|q}BCsX}1te}t} x ҇_S
+fL2`=t"C
+Iy(¼=鏰5#Eli+qe#3^d]$ h7F2:c/۸# KBOq vJb;\VI; :O̤Ӥ`_
+Atp5X ]}=E-c&%k ~(N[঱) 4⧆x W@F6ȩٰuf#O~ W+ y_#Tw#B>(fbK%,rИ5yS02xbymbE##@ 4>-4zڅhx{]8)9lۜ{dX+$PV?V¸eexoz2u4y/o;I;,QjUO#?w1>5>S{)4\s(nfY' \[gv*!Ag6f˾NsN|r0q4Jby@Y}<pO =6wXEΜ` {Wh': v r_|r]WS$a5ɿ5KQM=WBԧ!L/ +s\r70Wwȹ\'d=/>LN2M2G2+K7W <$?ъ0Gy+)~Ia/
+TM3U$o;* -(oAnUqpsz?n 46ڝD%.C kXP$,P~ I)ldIN?Apc
+/T$;
+E1TIYA:H9>`'rd'G #0k6H,AE7e %a1% J"u|L8>b>
+|.'8= Ѹ)Î̥x{*\9RkD.25t{ʍoum xX%+0_NjEG7Ům}*V`JÖ2,fMsқE_g'ڷnejiRP GZ)E[Lёh_i"jeڿgm-&rG?j-< CNIUq-*lβEmS P""ϛMήӈhG#Gx\{"IaԤg@ry  #]3Ý HSGrDDD7]85/bEF"]PuI*2,[VAGBx͖;h/TZ><a(XdLg,hC~DW[޽j}2埶holpQITVE)\`MBU ^r"9vux: ɋ4W.Q26EpOhb۝{UȢ68dC]X=_v5oXk)aYAvKU`/IS9}Z=U4=h(݁{s07dZkNhm"}&\I&˭ !} v0V|bO&8>A 9Ѵ71iK]"]_@3W"CV}(s@pJvJc>a54.QS2ǜ(1#ZoZe]dWP_ֿIe^R-L!VgFz'j+~f]@fgy$#hw̦<{=IնS 9޷Ȯ
+ؓw8+x*ր!4Eǣ(ܨgè (1[Z<te79 : ~̦=kGX*ZU+t:Ns%V17d,WT'*IFNo8
+ BgWeWL@s X"}G*jn\{i_&BQ F:Xrg|pWE
+(՝{ӄȇe3`SV˥(6[S]d\Tψ/ jg>BU/Bwߥ/
+h[t]
+;H%JS ' aRWIzBr2ɑSads|b%P&Rdރ
+Eٰ&,i6;Zq'pzUKtE+qrϦM=oI;4t$XZӲ`Jt }E3d |vTn % ׼e{"yLkޣDW խNd."߅~$N@CB|)@s^vSk $BTLLzJ<ۇ? M
+B>ق)p]4\RYNYenvV>2H5;qз=S$@ Ju"0@G<tqam"匆Fa ;]PeYh'qF
+KjY9 !:k2y^X?0iql9YA? Z`!ض›YEAM;]94ۯYF*7OzO1Wr#rL6*Cݪ&K=!=w:!_v,a7k+7M@$I>s j/fXfV!옫*մ /€,+
+]?TsdQ8i9CЦ1xWvWuZLOoeb0;\ hrC.LJM_OՌ5 NY@8oQ9Y7g:m]Řc pcMcu\Oi
+h)%L۩Z<ËB
+sv2BԬ%F`w s0/Bw\CM0A& HԆ[p70NEӜ[" [2,2xKȈv@]uCE޷TzȓtST8{C2O%.x{)w95@j 6Pc@ N7a.% ֍.+:>XRP:UH(?˕7O.ȑo%[3ύ^D<LHj>`S*7_&JapBc:%f1hu)j\m+;o: "Lr 㒐wP
+npr Uu*Zy
+W|0q}(›~4~s 3ڋx
+8'ړX0E!(jk , pd:
+{Bl{1pni|KnU|0 ~t|ɪZל`\č_Ubupeag{RiAk1m8&m sR%XQ[Y،t^I~aoqc`fTSQRhA`j&0l<l'
+-sVhkY8\{|_؍6n}b_eMPg}@iՈW0fk]KkV
+rDUd4X[Ε{^ɓma_'db/Pf`@zi0)j&j
+rN0TU*W Z|{]l`˘m^ycOf@hPC/iFj q:SnEV2KZ#zH]+l `]bᛨOeu?g/iWqiM FqDbR$VJ;Yjy\k_~]pbOJNd일?g6m/h i#B ppPkZ{
+YrxwzRbu]Sdv:fwyhwkbjx]lyMnz\>Fp%{ -q]{-qR{w |ա3`~ b~1e~]xUg6~jJiJ~\kQ~M9m>=n4-fp3Dp)%<v?4^pIa?cow&e݄iAh[;j3(Ll3=.mS-o6o7uc3]N̐_ލbVvdjh\f^Zzi5WKkFW<me,nWng
+t@\"^aa>u-cgfIYhQK WS
+<T U5$oy(WTc5kB4}[OLg0E 2Sم"Mt=qɳ==r>
+fQojvlK|7%܃(.CDZaM\)>-́˧!ct (Z1n{sBsj*!-QU2!w\h?||s:#^.#LE)!56Fy.[%O:"m].^(-#9UdiҰxiGMF*]As nks!Yv-XsN8MU-ɉ
+K{vʯl1krȴDnʚS}n8)re]Նl*-QOdW*b@8~(M;H?e>amаcHlBy>ӡ/ʰ%iK:B/ߒI
+};p"[՟z.Mf<gc GiEJI4[IX,X683U@f!\tG}HC{R[pYs1"Ah#80kA7 X=1*14+k4 ٻNȩsqd?l3gDzNU
+b"怺*[6[p.~Ѧ̹@DhnmL]7Ȝd T}Ɨ
+N7B/䮱c mܿ8160yFMQ"Ѩ>ہ1vX˅
+syxhYSYhO>yi*6D `R}䪪p3=]rM>\ ^9#&ăOennfj)Ĩ4_Gg._'HBhwj7zЉ5T
+Ԟ64%O5:N '7Mu^.V~yG޵wBuh`4K%?#I>/%O
+f c~՟<PH+} sܲD'N+mxqɿW ,`*Tm-옕p᩺P,΁<9mU X1UZ'lc Z@JC, :q!YdgN\&"dZ)=SGҵCDEN*42qKA<= 1#bz*D
+&ƝIMgS; 7 'Cq~zì挓3'p^19xa 3wuXp<m0.BA̮3P1'
+wj5MsW}(Vx#WuV,+iZZUۋWJ/}d[аێ0a?b}V<e{(M^x*,U1?K*VdkWM8V V؇~O6Ei}0Cߜ%JםNko,ԌZHnk/2ՑM*W[/-24"Zǫʪ٠dYV$DCIVZ}oIdTw<.UGY*x,L7+id<J.. TCź_Jb`͜$xޱMu} vXǏ=4 rk‚5{s 5.sICb Z1-pf8C{% c"$Tro Let)HΞM6Cm z1ˊf7%b{B0Jz~ǧ6Q;9\~3>%xoGP*/91KOGcjGc噉X0oNE
+>X Jb'(%7^Rg#=X T@NKdAב!i0j-;2n
+{~^ShE"32u!b0C>;Ѽ$Ϳ2H% W!'E~R'~cK2Lf nZlB''x j3i%y15Dȷ"@ 'c8~<F DWxwŇ0C\Tkq ̸ lbLst'FL<$&ec爗I՘=r_c>C
+iw1#BmÌxhp;_dRJ I߰!_cΒ#Ղ*MWw[q#
+bsl<UƩM7q<Pe*S6A(K02 KV $|o7,SDDCZ=p4<<^ X $v"牋d'+'LϪBqs~O$zk?R
+6V\F'fnC8KT%˙y״;I#AxTUajgL` 5ED_Qf N2++8c
+gRQi"hū@>"iVV!dKAd2)Y酼8ʟ"/CgGdrǝ--D8cK(>5!LqU
+r*d$("eu1Lj9YlhW ߣRUΗ4K !6=%5MQ&3
+s&$&H(QEf-1n%/ش‡i BnKL@h&>W&Ap[Z72(MIIҩl7l'i)3KhA
+[Rb'3
+/i DfhsSNF|QD1_-&AʘppL/l
+ RxW9)?§Xk%'_nXHG)_3p<
+LWҞ3]LUiyZ _|pi#5M>AV@V!
+ s)lx
+"hqblyR%I@SsbO(PIe+{HĊ&ӽ _[OBTF]|}ہEҷ-W 7O ^b:ޝ\TR]SJtæ|9د"cl 1V45.^z
+nqwSwVfj92DT1DvPF k8b~;d]~>n.!NyN7NXəC+T8NIQS`Y0?4 x<'Z7̃g
+.lsMY#q3'dy)ZmŴ-IF^hFgmwp97ĤՌ^U,_{ܳ[ǯyTM'Ӗá5<\abcP%:9;ӉK}*WP­3`Ŝ(
+8W8SX.yކ>MXƠjD!E8];SZ]O!ﲶ+'+{_"6@ cpZDN.᧩X3Agis$ 7 U
+6ޢ*$EtQpj\ bnIH_xBPe4K˜\FTQ
+FעkRrhiq<
+CӰ:5տ5<)J)79[ |#{N9X2O=xp?AوQc_;|0,QPm Yůh{CM6gk uZk9>gjc:cY[.[|Uۊ9'a%9IOeUN97%|\-$_[׏Չx"e1/\gUjneji˜n`U[ %b%?dw}Zs,pvH[xr|S%PE9'#.xjy[/jm=jݿ!i<4]lmuS"l% :^hh^ԥj9ض3t"w݉e dzv
+\>k2 `jP_4 TG2¡p[st?pÑ,4<qqr1g.56W[yJ忢)[HE|ou|4.X|$^s6lE2C#v/^X I/ӧ yD"Am |y̨,̬MHkU]{i%鉪Uo*c`YO.ӊ$&1P/* _l4
+qڞx 03&<@öAoްRӉ p-bѿ*pq&s[n)kŻ뚒ӊ50NC q,1˧ʯEϴ3T֒=Eʳ
+_s] ʞDCheG)I oT?NbEܜf+'}#hX<'{NfHs$*'O<PۖB'COm}G94
+y/\"çs T=u^an`. ґk# ,hs,׭c/K_jsH;s]d72߰Eΰήm{KL41#_myZHTm v3n8r4aᗰ3HeG[v;#6_֔>!IFQG '|6,܍7Xo`+.8aycM}M?E$D%Ւ۞M_M=.ZT@Q(KC[Kk%%ɪos<˲Khhp+PlJn i;YӎLucuj8R%lWf&EUC%X[9ᚲ~$~uۖ0Tq
+N*p}5y
+AF~+Cc9/NtӯܲavUџ$MWM }ō1hmohF^*; q'-oܤcE[BZ[5)8!j RkIT}):Sה̨]\
+4if$"׵aR?\]i1`qCC6g~zsə³2_D2ܪl~\ܟڀVCf?/f2]INTx9"Wsu.BuN"*Ţ}U4LN_ψU>Ѱ$%&]*_u7q28}Gjr442/%dt2m qS٦#;WC37Y
+D729X.i' P# rCpRML޸;a7ʠ+-7c|\LY05|-lŭE0ERJ8:t;)adsNr j,܋
+&amYD<=d.q 
+x$ʂKhK!T@p  䘙L$$K"u(mu]TJ[*?<_VH.j\RC7dxm ɛ |`=wm*РCYǡ A`O9m2~02pCqЙ}w_>j1#@ffkB
+p͢Lp 8GVms\iiIIWBO2zig?UYng`N,DLs9Vv(ؐN\+f6D)->Èj7zYO3 M3v]@Ĭh~LcptGk4^ZbEJh}]K'eM=ƧYI/ #b Id}H/0,1hg*%X*$v="}U牮ℤu8QE S!ڑʉ
+q`5zkE!sLFI{ML&ًEt:pbi)8Ϥi/%N`s:Gu Mhp_y4!i2+
+l4V?lT4-w Jj?ƕN @hQϦ`RP1Ȧc+_UߗTB7Ia -P` &h
+ަ^YvUYTWv-sVT+Ť`()z:ܚE<Cp BT_ "U/<,V#J PS0uF5E@ Fr(:Z'NWW8\[ P%BI m,3K2i+a) h^V
+-6
+ڪ K(ڛt[ַ=sWƲə0M9fmS-E5i~[H3NKt-dI:;D&:I4PEJ͛$n3%lO
+si9պ11BR:`.nX?/ceDh#-/~xV/FS,jLH|h,FB-AfC"49<jY2hďlBV햎PY}`4щD/P9[_񚏚Ή!3VTSsgO߯!5҃N,MC,RXQjT_T
+[,svZHGQ M0(_ǴϳwX70V(gnT͛^] !t%Eo5L8NJ<EӾo3GYlv fxXQJ ^5JW$2ن(gnf96Xd'
+|`,>Vɞ/ Gqr
+Źd*G>ꈚ!wM/<oϋI,LrS2LU1M RɘQUl4&x٨oK+:*[R?^e5)?"\;xB?ρgC
+6۳+ wկۓݏ?ݝR,R6dvCSO\e=~|?2}^k[Ez+Q f۶ xޤBB%],]`4M/%Cw)XMiz -J猑R/ܴ łb掲Qp5/_^%reD]}&g{ !e 5"b(,CssnօRї+cE)Jzo^.Mu?% ZN{J1FWś5\.9(*7Ǖ#h5WUL:[%ΑHۼ|R2I@wƷ*X[J
+㉙"r^vۘ[z1:._%DUkv 1kD{$cf4a5_V}ӌCSNp0@jʭ4'Ua([b7$ p&
+sn^m7&9都،_cDUPlZ[ʳ>${;^AǑnΔW{CfG Vj<0AP\2{#g? `XH-)7ٲTvTo4n/iL >f=4k=Èkԇ>B
+R:Wj??8T5ՁzҸ9Iه8RRhLa<g-Osy:@Ɩ^gqɽӵI%*/9b{V 1]-6v= 1 r}ʌOex-HS\+MBɉWPGIx2^sMGO-V]UD` bOǞ ݓ㜢bZA<((&)<I/Hpq++Mt}B?5XHbcLb\k>Ex@X(eJSq!dUG3OMRiq |-!at.B.ɯR|])P!dHTOk$'QkV:~FnⰖmU
+#ؤ'k#t]6M
+^qwQXoM
+zeyOP bN0zq#褔b+K3jFZx$ J.zfw*w56/Wk I>,go! X.zZ,.
+ˈe1e*S%^[W5xQav53< 'xJ8:b$W[Tǘ%-HI;Ѭa4²6ܤ8z0҈p̩K{oU/w
+K>R,VR;c=eNfMHNI?=)P7hkʔ]i"r:3S8=3n뼝X6&ՖO6O]DRǩGvT[UCay;쩢}.g\ 8^O(+
+W @4)q&*KJVo''7F)$b<jHل"` ~YŨ=6Q o(ӅK[ &nɞC3l2&z)P+'VlR$4ek%z"
+;9BBQv8Z摝<HEUew!SOCgU* ^_
+Jr:0+(bU@NxH4#j9(JЗZRe om/sF39ďiYUv(t HV!'Q(^Ac ؼNsZ7p0ܗ&ZiL
+̣*Xi~K E,) Y CjQ#36hx
+8,Ye3;Sn 8@O"ofrB"G4zˠ+cӲ̺,/f*bZw1WFO\e?;;`Z1㧵_OR$cRd 7j4L{f>4^RuHUO0b
+*vc& _'ddEP[+~!nZ<TF ?9w/wTc #R!_R:tdz7?͠)6.
+jRE|^dY<B"U2"a3$vv<G1*x@X(|.[Jd4ixC-BѣOHǪU~ 5,|=BH>}A`a e52$mGhTuxoHAR4F
+u.ؽo {A6
+2:JӘ;rZ9C7h]]yz.olcG`z&y^F/~Ƞ_KAƧ fZ:ol#fCd$wg)xp{WJR;%=NH9ﵽFI+dvy ֻ^K0
+ *hPV<SAȅ 2~c $_̉)ɷtP1юtj;k}Ts|ܟlcaJ/}cewk_ +z4 gA
+
+ު춼A( !x(EHHx9A2_$J&P(t!mߏr/
+R&!Ӎd%WS.Y]-㐧qbE($L\J%+49-MQ蜧H}1HRڂQɀ+CJencJcr
+C#+,(ov(݂s'p7v>ܰK [fISB3E;F<BBF>F97g9
+.V)mvpx"#nɿwqN-U5U
+@6!џ:bކ.10nn{ׯdb6Z,2/*Z&5)ɦX7 jx1+0 o;ȱ]2.{*dZ@R-Hѧriik8PU,+v?\Ձ:Z7
+\9$"1
+BExJP=y?eшs>x%<
+U5D@a-{Q"1uE⁹&)?Gϳ7bɓ2`b<[X*v(4Y%bAi-ߠ5
+,} Z/xD@'ʻIMPO;k( XnfȇE zX,oau
+)T_[# Hc (\8 MҫH7ZkM(K|)G^*QŤbV1Tڂ<(nAHPX)e";F~ 9 ztybTނ4]W@̆y!R[sdz|T&{}0G=
+dgn=UTcn`"Ahn~k{
+}Z[i1Xsɍ PSeWcsoD>/Dk:=*lagzN`CCU+kSiտ< Y6QU/r,gF<'H
+IoGi'UQ2PؚEqmђO"ٕ-`#)t˴|7W2c4RruP>v
+R*\a|k(㍇Wdngt~_hרZahGHU+]5T:9HcG~MLߩ]B5<bBd
+)-sr"~y[` tpiҘgcJPVN8JO+ *t>r4~ΉH օ/Pf
+O(,Ϳ~*w&{,;>UϔRؿyXTԊG=d
+V^0"@2 o=VL2'\0}
+<i;
+Qxy-ӕc*Jjn4uDKn򮽚_L:𢤜ƭ~eYVиJ-'@1=T4m:Ue J?Q;-SOS$LR整~HYfb'nȀ{A_Eo3LP2K5I_Z}嚦HR
+Csh h
+&J/fGZs@՘))jID:cwq+[8*XOox3hl-!/Z$RG!nqAt<ډad$-wk)>O fu[}M:L"C8fXI]jczI<8yS);GwwtƱx3e᫳2fשs6yZwx ԦҩIC_MB?H)]iRKx9e= {|e i,nAspTY꬯jzb1|#~6[(4 [
+ ."2.@HHɗޓ$$0PԖ{VQ<UO=Ϲ`QW6}]_ĹD%k@xCF!ُBwRO2yدxZLڊӚYjm}ONӢz
+]AJ#,=x(1fD ͦASugݏSmv4!Ѽ) r'E
+% [ SBԬZBߖlR"؏)<犳܄tūB~tR\aUs_iBI뼙<z;OF=9_7\ 9sI~r=%WQHEېjS!2'xųV7׼@-,ENJͥM8w/ ,!~Yb%=2_,=7޵l,չ@^{*%G~<^ZHG6ɪ$~ (S1!:;:=# 7Gغ'L!C;)'1- 8\[NkU/蚷Tqy/wPvUՀjl% :
+D+* F)&MIAUC%J,1% @XA`/(*bgMs͘G-yJ"ω(K}A]ZD7Fy0:(B&q쇴=BXDzK6rdTÔ3E$ d~}U0Ea8&] L.S+%Q|^mOJt̮O^a9`Wx Ch򃔃=2/4ݸdv,F7ݬvchr'`|RM֟]>fHXlSD3l=;92v^µŁ`l'ԱX׊w`5qꨣڌ:~!vbht8x\JpFG[zP9P=V!:[1^Lע6cTDgt)egS:HpK>\S4փ>jo8D|(-@7*i cAx6Rw Dv_+h̔y յKCF'6^8I6k|.,jU
+x4>40wPs)x|i5t{.ڰ{KJ :u[p \A Jz!<I7SQ:!3Luy:%&Gr@ H4yyWeU>`Q,Fiٌ8D?GHR;
+[v
+֌+3: e.BC1'N39OP;6Mz%s5[2`eSO)YZ6֩<ggLf*2*k$1@
+UN4gJZgt3s~[g@%l7G*L@zT ˟am. ?lyFhe%?&PI z"\ q`>2nPDYY^gLGVɞcdIvuxn~ z똝KvPG*KsPydI=X&(I6SC7"g#]V3 NyjFo7e R 2!]$u#?*^M38_O<!>/hPyn6* nen"°D shF0hÚ
+@FM1
+ %Pw9'{l=nZ
+ZĪ8njŢx\g}/N0NXe0Bhp]*lbNezW,Q򏐇ҍ*2er<+b"g!L#@rH
+H4TG
+PyP*Vo致ADZAZC .Bh3U0oPWT}wwI^8QP@_M`<fВϐvëzjskJhw弒~ӗ%q8P ?7:p}\shm5!P]q]3ޣZ gKf;s֊ҫ_mI\RG[v,}Iܺk&blˋ?m_P= -'pL%B<Ǻ(f77=wWuSEU6\u
+9>jݸb{?0Qe{DYP Ah ::*o=,:
+ C&X({%彈>S©!JT*Լ»gfDWCJPǚ5
+؍k"(oh3.w榈gF&r߆t]炻S8:c~_X{}[i}xLJxy_FopAhg,d}'UZ8 ͂Z1v4Ա6I@SؒӁ0R;`m4}
+lQic5O򡖶c0g-űZ;wN!\ҝ?l !uK7#ө&n (m~RʝexꟵf>&|Igg 6Ͽc~&B
+zSҩ3 4ɛZ<q@΋h&ӠÔi585QW|PS*i  *_u3,6,<VlaJ`tWuR ;GG3j(Gd֯F,Ak ChBrp{Bҁ3O* ~^%*ve?Z|yjzX1Kck~sg/
+RR V=jeپp@ݶ]c 1ij@#<O`[$]XxrIv-K}vlRJX]Ka.E1z1J7{?@oظPZgYq\Ei8UOf)COK&H9*x.у&TH JD#9o$9]uR>-
+
+~U^rViĠؖ?#SNf4sNJjKtrBs1t\ Vn-WT߆|pUa%jq.>!=NϢu HٯڥJ{e^ 0)A !@+b>"I$uAQOe {CrIYlPfh.<*4M_hAtr&Z^W,1薔#cƤ!F1G&yʌEHbh-¿$V屬y|,} XG]ߵeJu{py5w@]lq kAWy+ۇOy>muIMG<[QgD[0nIr+gKs`o)1op؈{JS6G'2rc%ddu*I[=*ƍ
+u#jM|G+Tk*+g7Ls0U.lf!9q]gAiӂb1Yrރ^Yv
+B_}%rb
+E!UQp=/9f-p$0+KS!V>]I8XԩWsߡt5[ ;|?ݐh1S Q 5#A?0M:Bg/t]ڐfbNB(sdkBEu8$
+AojJq%{Zpr?^lTcOVIG9z9{1!RSޏyk\7(I&dca0)>wM V{V+y?JEVH3\~;~FC]I<$m %+CU8S\
+pjƷ
+i:T 7u8/ -O_zil,+'u^|,%Sbqz1LFt!&8t -KVo~N4Ғ B'~@ u3j,'Y9
+)qs~n
+ͳs䖖
+r
+zm9 1\09Maoԝ>jjXd|nY!^1GXYUaV(bpm߱q<'
+1 @(.$0cdJaFQBZU{c$+h&1Ľ8*cA4S"ӻɺ&nǠ8[E7׸m2{¡ 0\½ȏT7> &Qߥ|> R#`
+cjmZҒ՟U**ByN,GQh<*.{KTmI1i!(GAO!A,9pyqX)0qP5T<K ⪤{?(4][0$8z[9br,^lW$.))5
+Lڨ"rFfL!=[$1Gz+f+(Et"HFMS f5}ٯ4K4+53ѕ:RV.WU'KN{Kx[XEyXJg2;qeX487ˀ-QrLEut@J y飌q7c)6@ `7spb-[/1c':J-2ϨM9V7Br~ezDy#a'*
+B:㮡`EZ9/ɐo+2!~c yЇX8${L:jHtm" Wl/] #%
+5K)%Y?4Riy?3/l ǔ H|?p.H2E
+qM:ZV]Rҋ//7:^2`ӡ/G5BgOk?9ZYL`c|sSu{rK{Ϯqmu[=ٽ7ڐw.wI9uoI?&~xn:e4_5ͮ?IFo{ !f0so>͟[87S?
+LffSV[uVC-6k!7)!NjZ҉LqrF&Yk{<@\+$;r<e=V>H?<@0A%BCD
+EEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abdef%g0h<iIjWkflvmnopqrtu v9wSxnyz{|~"Ceх@Qcv͐5RpҚ>dۣ/Zߪ ;iǯ0Nlɸ
+,Os>lśHq̙4WxԘշ 5I[lzy`F+qO, uO)lF!gD!
+ V # g;^0{N"qE  !"#p$G%%&'()j*L+/,,-./012p3\4J586(7889:;<=>?@AB~CoDaETFGG<H1I'JKL MMNOPQRSTUVWXYZ[\]^_`abde
+fgh#i-j7kAlMmYneorpqrstuvwyz%{;|Q}h~ς
+)JkԋDiܔ*Rz˚HsɡEl 4]ڱ0[=lŽKx¦
+ ^ % zA _'Hk4T q!9"
+*+,-i.D//0123f4A556789^:8;;<=>x?R@,AABCDqEMF)GGHIJ|K[L;MMNOPQRuS\TEU0VWWXYZ[\]^_`valbacXdNeEf<g3h)i jkllmnopqrstuvwxyxzq{k|e}a~^\[\^bhoyÌ׍4Oj×"BcƠ'Ffé ?]|۳@eݼ 8jMČRɖ!gέ9~ Qט'pܺP:16Nu>d(
+a;|q7bA'):8%Xܯul4
+}D0[~->IpcOYd1XF h3SB4rE:"<;$;:ׯk"2wP\%U:%#y+hAZqgwu" {^!xH_m0ξJʹ(%@h3ҭyx
+1@]!],\~HJ_? L@ M)LD"%9)ey% :h~!> n`NN<ٵ/<P2C
+C<
+81W{{7;7*U[+) Mmiӳm -R2b:#~]b/B
+>?Ss{=ᰬjxkz^[
++-=
+ʯ]1GjÖNgGW,T$=]EN:uİwv E{䱙6Chf()VލLu&oޛ,fR@7W}(\N:__zQ>
+}3<SiI(qFq!uK`((zFs$/y˙ mOTW*\蒅t-bK(D׷\
+b^E6,ءԻ;*s4ER(l$LKDE6Pou" >;/e3ކTgMN2_6Ç=^9AD
+b{}z_![JR?&Z;AHQan@({.YOwL/ W qxTd`Tk 
+18mL~H nx`,F}/ék?٢ɥ<ܧ8d~G% I=='o\*_!9&(=zN4脹QQy,\e;B*LM//eG9?~?&ʯ -8QWeH. hU61f
+_|kw.A qm˴5+ge^lVӃ"W_״<#Ș(A 5ˆ/b<%i4l<]+;rn*XgNV9h = Clb3Vs]~ }]E[gs Ϙkgɧѩ#eN8l5.Y4#FFqzV)5.qIǝw+&UH6ہDmt"ҦA5*rj](浴k+k*+nKF:iM-8[9%aӖm( BBꝾ3dѥ$.XekD{ܪ潹aHCDCaG|Ojyћ(&v#1K/`\B"W^]o$SX!
+!{A^O /]++M1|-H8MZNW7tnU{UT:P\ V:0ɲ.X]9ܓnUNPVI19wY1!ݭuL}`%z
+^CLuEe Ȇ^FuU6Q^=Wڗgg#J6ZbzgO}Ԗ5?WxEdkgtLrs剖͆[IݪF=uv>( !#9KM?!׵MځZj6wu1g+m:z G ˷ˏY<"ExQtꁷ JJQwCy}yy]Y[B𬋆MGpm=>K;9qw 0\u^>>P5Pޗ
+ 0Q@s4rStvse<:lPYՒ&
+d1zFzii0k
+ sʮS&0g'ǮSzO8-1vԪ{Xϲ5'&'P%
+V^!DL:IT-
+˯^O8n,t
+p6mreYME%wHҮS&e6Nx&Mƀ 0s`R#4l'2n^M\34\HW҆c 8a8m% #(5&^}?q% |^_S&5c8KS"C#%%{$:w"Y @'\,U֭I+Wfy/J깜3Y#q$tkH #ap%Xҭq_˾Llq~zv3^꥘C>e~)~
+?b#2i7
+T~-u\ŮPC3%yZhWr 0 Ulg8YLGBZ9@sʤCYxmԁw ݺrUO\ATDN8I,~,bFAWPeW3rReZ]< WݕiD`6pG,:l a'["[):ZɞmTu]RrdZ!?Qip
+ce7F
+XZ1
+Jpa;-6{\JdDӎ
+aM'UL7,NnfȺU0*B7K8-
+LGA_֍ɏCmɊעsO 3~6lMs8X?נ׉X2c B]UtGݡUJ9ܙJ o>.)Cd%ޠ:V uMt лohܮ=ߢܘ^HZHT5&{ʯ
+|D=๝9_B.R?vup=oiHӑVuGU΋270=[Ǟ$2øR>6ǦV\l;Z܊V +Kv6Iz D[BGZO7e֢&[)\|Jd('Քȏrv!^!qKy=#ksbh'9rsrY[klʂ4jY8I{P,YM⑁ PƜEB@J=GLu,Z[1?+4֩}֮ZFOQ-81Tzw UsZf;9-rI7x8.ԜY~R8Ѳ}" %Ռ,GAW"VDD_d5৪x CaB=H~m?xH =EKEWOTv>}-jNH0
+ }vWqĴufKқ[0\{PptE͞w;sD1݌(,x Y53Yh}qFeӮbZ̨P$nE ;`Α1l(I |άpس.ejZsOEss;Pjh1 m(b U>|+^p~neqZ,1O(EQa;C1(ui9 ڈsZ~v0}jr}`
+}U~BKg~ATdi76.%Bdfu
+jl_޹&U`K5A0.7ueg.&*%;׍ɂ΁9˂u;jx#_TQU:&K=Aτ7i.,q_%[7)̏#uEmjg؋_U-t|K
+BA%7d.1͆
+%w*Ere u`È|j1{_r厱U"J@pO7bS.C%VŅ$Wu ܗQiݼs_%2TǰJéЎ@飹7c._m6%4pڀ2͟ tN i^ⵗ^TgJ/w@֣$7d.xՊ&iAwPGtsˠiMVD^T]җJ}9@Ȣk7kv.J&GN֩Mt2MSiѡq^YuT&?MJ]@7zp.ˍ>&t#qok)shź_i^2SKJA@~7{ .Օ_c&A@sh ]곗USѭ\J+#@7f. Y&o |zo|z̑}3{i\}| )}|~ }/{~K}gn~~*S,~~>~*(~{,x{o{ta|k`|ǂg}zX}lJfB}ł R:~>L~dp*~5yOAzrYzC{b{͈ڌ|4y|e/}Qa}x=}܃*\~;;yTyg}z zsz{f=w{xd4|gP|=4}a*&}׃lxE؋xΞAyJ"y!z5j>zv{M*cQ{܍O|i<|\*}rhwTx(3xy(NRyƉz@HuzՔb{nyOl|<|*(}VwՅwx'ex|,y<yНtzm}a{ <N{<H|;*8|vʾ$w@w)-xJxިyrLt'z*aFzN{N<{*E|t7v/wCwyMxx$y'sby`zVN9z;{*P|76^vѾѬvʏ'wEqwϼux^Oxꮫryw`EzMz;{]*Y|mvAGvdAwˆwû<x/x!r2y>+_yȤ!Mz_;{'*`{ދ眃tx؂yvz+9zқ{ˁ|?ur|bAI}O~?;ހ~)lẃ<
+D#;큊ZtLsa1dN/xN;SY (5eڋȀ!Fvh$lX
+l
+s(C gOJcA pWLQQ xqyVŘ ķD҄k\o#wYy13K(S_~g뻱峅 ~[^0pɈG+ܵ} 5nȺcls✀J1"*<
+^J6~QCX鯁59\ a1dFD04.w;0u.E_&Zcֈؕ=Gd+*erPh%sr,aе
+b;i3 U^o#HV굾)2,obqVi4]vw>'׳W6!EI>_pz<ZEL#B qMhK9/,\A!+%oK%¥>)xxcvL0bquf 7?jjh>?^\Y#ʯG)RBQX ~F8F_D<
+Q<_CUXyF|sM{v*4UWp`H
+0 8Jm?qWߞS|lLwy ޙȫ
+NL헡,
+l~øjb7*&"4+\rT'Vn\5.q`&s S.R kICwv&[r{k
+z!(A p!UjIRU:=ح.?\jDtE"5c9!ه=0 /F3h8{24Ulx @ڦ>_L֩l-@]Nk GY$"N (64{/ׯl"eGeu1Y/ìD6J*%F@M#x|hUGZ-*|>'叹5EJw Ty[uG)P*Gb!
+,g,{?//\~7
+r#
+jk|h?|s.jb6P^$@gH4<%"/+0i0 =yA ~'Y
+NxR#po=F͵ڞO-t&73<á'$RM»"0XNG^1D>jhQߨM}&ǨpjO|dh2:'x iT+kmc{d4.W}iK?^-H,Q.So2P"rcWz$ajUNsZ2i󺩢qe͑
+ hIGO^)uԿf}C&=
+A%RV*Ȇ ^^{B2ણ𫟠pZ'Qw?ⷛK<Q^nEf<۾VF
+^-c8=ȣv&~
+r+*$v.g.
+m_[U3:>7Մ;wb]
+Q.7 f#D(xabaO"Fޒn:`VuɖTUUNK}!oOrJoaxA؇u/PȆ2-6]*[U;/reU^ј
+/.TklO"7{77T4^uo ?yi|Wɒ4}Z?K5ukqrt-D tP)j}6N_߳Tڸ4Iq2VQFޒH@&5(AJ)]?E,{zuq yɴQti_nE>
+bH|apԠ#_
+ex()S0I'b9F`" {1ϫ>ʑ[oc W[YޙwiP19b$,&ĀGht~In+d7*' W<̓'Hfb k| %c*p }
+d>_RW2nqQُu5f%ďܖ5b9YŔg=0^n&kk;7O,5|Wz/é/O앗1/˹x%:Y0
+{XG(U.vabYG錝=2 D^9'rGL^ ;Zc3z7+g EHu`V5 IDI|31vba0fsq>5vGYyf?B,ѽe91x"wԲ`&`h5 f0ظAۣ]SMC4aZQIPD" B`Ic͛DU֒v#(<KNݦУ۔7KC-dkm>snQqƨhM^{M 7nJ
+dsAZp|EPGP!>+5n+,$ˆW$ymÃ=nd8AZ-P}G*E=򠍌5 ҋ,"$ď1UfyAndEc"_YLPGG=65C,”vy$󎪈=
+Kxˆ nc}YBPDF$]=ٟpu5,%2ވx|mռ*cr#dYl>Ow=Fɤ=ў5)I),%Bω F$x2mJc?ĤY<٠OFJ=ʞH52쑂-1%_c.
+òz|wkzwٝ#{bx؉{yvx|[zc|{O}i|<C}}x)7~^~Zw+x[&yyzz6>nz}u6{ja| N|;}<) }v(ҿw w͇xw8y'yڄt zY`{GM{;4|S(}Qt咈uؐvӫ"wp(hx8yNryЈ` zMM{]:|(|t tSBuؖv9wvxTqy-_6zaLz։':i{(|rtsdydtTu6vFv8awƕ4px7^wy7L-zg-:'{?2(| ޝrήsctnuyQv^pfwIpx6]y Kz9zM({)4rdtʝsU\t:Su gwu򤴁pvoRwϛY]<xKXy9zQ({jNr/Es sIgtVutvnws\x]vKyI9zBD({+Oکr=rļs=QtyƑZuYvv@mw%\8x
+Jx9qy)z+٥qԜr`sptDؐu!~vgmQv[wơwJx9UyȒ)zΊssˢu
+mτ sqBiohZyHX%+)!a{ȿiE5Jl"{IXf
+ڢ1u,,r-U]wuq2&[tyqdܾonCQ &Pa/C9a>#~a&uhbIQ;5)t'VAZẀ|%搾0S#Vuv?aboUsmDցzA6 hׇ
+ƻ%LP()HPu'^hvPءlDntYryW+Ŵ6x'&ғw-Sq4¯Th00"7
+R.'|aO&>0HS#ma7CG|3=7fx[:I_ƛ[SK'fAр/ńm8,po R-.\ [&g(ǂ\/{,` vbLT
+xG(=?j<@-h5-Ά1J8)5^6JnyE UD`<Rg= H_3<u P8a>)r.6 %'IBXEuǏoF_Y2 ;+CitSttKn:Inq;Ԯ
+>M144b3fP/b$׌Zp 6NAy$Օ2>XчdmpG|j3'l5X)ی7=a/)JToKOӯGI!S~5{X!FM"U晚!(_'* RKQb%W!6Jӽȶ5T nQ
+
+*TArNr&f{.qM LqL&0N;
+n-ugzTnR
+|Mvb [|(ߖLwud|іx\"qmw(Ta]g@5:^A D{l%Gly/@bjDؔ݀:lK1I%P&Er"=1@cJ:G$x|@෺z'ƛ;NP);09%*P 0[F]^k~m(WmяMQe
+ g*Vsfdj4!N̩nOGjmA8!#)9ʼֻJ'SaZS eod+ekٓ<! /xolƷ4/hKtn`~jœTW
+򄪶/c`Ў)C齑ee~x&u ٻ +&ȌIAj1sA/9t?׌ s#6ki|dT70t.r>9CHL(B,6X uznzMA*\_OZw%A}a209Tw"G(>bʷp0D7JלX8e~T.¬0~{=#b[1m0
+Vw5/mUZ /VHTM51R`Ji2Tud\ DxC|եߨ:msރYԵ#ݵ}\jb17U@ZGf&O
+Uxftp<Tgu47JSM4RPNX' /n)5dg QwUۂ3":+GB"H"+ACRp6h7k҈YJ1Ԥ<WrfNj#pK&/,VcNK 7iIHveԌgp=5ۇ~SA0bwq*6Ca'PA.6hG.ZI:WO#kKLrk,oov5:?ur-)TF'-P2D(X,#d mC7mc]-%b]N(;;'Tipxza߱%x,Ao]Wk}f;!w7.鼶Ne'iܝ%;ho!͉ ݠ(Wf*ץ|-ۛK1فAIV^:CRU:XEVR Kfsw[Y~y.W,⡵yTrU`v\>Η~H7qN(s~;}!^p}x5
+DEDTK)(.UR ɔd&ɤ 7a;;;*SAdmw)k{ Y<]%t@,kM@̑nc}ORUoM%I2;5kۮO22֠0}(d͇7-ӒOg`Av=u2"\7!s799x)gChUI!_V TZ8\ x54<!gHsW]>5fl)w񎤲bNJa}(П\XI\t>b7XYR2~8<T5TpUUK
+q}#{+yk|NB[I i B]e$5~kh2"uT'A)bƐ|Ϗ-:+<b,tDyI;Lzۏ77ֳnFt2+J)O *Sis%zagQ{p&%pV#/fCҊ/[AD][@ ]eofj̠O>+i:%4弭'DUeQ"h_-$cFۻ +sֲX;cC%gwb3$s-[r`OϐV i DBƃz+)@*sG,#:jg֗ߒ$|tIC尞yP5uTsYmg˶;K7?5'-qhuw~Iܲ^ƺHiw*}݆<f՝lV3_TU
+. 8c
+q2 'vذݮhQ v^uw
+TL "
+aO#%z
+(*D[0LBof= B 0Bd6FTR<=\`i8ZjveI3yqƨfnw޼%{'J _X3N-ލ}wElg)i=3pb
+&|ײP^"#}hKB8m/򻄙Ebov%"-{Dȡ@!5acNm֓;bEW=EEwQ1_牋}+{OF$m~HXҴX+NMDKzW-I
+_[JL%k?zwҾ|B=3R{aHDLk½KȞTK}x*͕}Y>ރVՉ's<LM'%jT[Ѥ>PF arʉe-3{yh+gԝ:9nb6$l`-6LK9 2G(k7%u}bLjQM4yWPD-
+_CPny~3
+9[1הeʞԦdʤqM1jٛP6ds 3p:2_[(dQzI^M,)Ǫ`1;,Iڅf߰+ BkXnXZV0%+r34ߕ[IK265Eֶa:ҭN"ذ BgBS_5Ӫ8CT=ƕ^Y].@Ǻq0y7\U&64@r9ʥlG>·CP7W7Iֳ!|L}
+a Q$<4t
+&14$P,4]*@qtZYr_D #nǍc<V6F40SQ.vbp;LCh'Di"IfG[
+X{;MOr4ۡuf=VO\
+<v*΄GefHK+.1Cl͓YX)dLt y]3'S0N,ro`pMf_vEksta)rJ,M7z[<Al nF<kY/k3ⱬ*xYlyTnF31`>
+-;\T.Ls^Ӭ=XRcap|n;M<Kc|J<>ȹsÛWR􄾜֢6{:~#x,aGp_
+vwƍC{YG*df6W*xnZ6W~& .멌
+Z]WݭNiw_~ᅘ>.sϩWڞh{,-c(kyH^EL1 y{d79_9+Yx?|\F%-3Ϭ̟XH)["cf]k\dqcxV?6>Oqn"5f+
+Y䯇w͵[i1BHê'a"_?::_?{p9 ],P/e/Y8*݊o,B & 4_^}$!>ra9ByGOpx N
+zܰaZÅJ(J9WQXDhI+@E LhA|ؽ|*<|D7 ϝa4(DÞ 6ua ?rQ}NdƣT?;)IYArCOB_"O9*ԣۇުeE%V(0Fޝ^ F]*a=RÚ#,&AGlG+`GX̱5ƨV̥c7R!`)rt .5vxAL_bYY'Lb&Jq K : ٙd'{א(yq2a7Kj36)x QfE4WwSԙ.T3r<{W  F= 6}G6ݡgh||9Eu;(ݕɶ{?y/ёkup'᧎}oQocI~ki0ʪhJ[I;n$e]%tHzgtnv&6A%f82N5u754@KgdO~Csi<FOD-]כL^56-6ii)!n!5/i|/<)h}D7*
+ġ:Sz˪D_PWv=[[<lF8#6Ƕ *^v"GӁ_j[I Mw2:EB/KZ/Cbom^OV1wIJ^ G˴I<J
+VdHWG eynXs2Ӹ#9cYO6+אּKe K)/&w_
+眛 %b5?Б9_m卯Iu.Q)^ƿ
+!іk-h1@Ou9=R'hLЩfJb($i+ ( bW6Mrd'\r}ȀhZţr*BH߮lHZOqĭ~!*%AC {k!Lnt:򥃕=טOKl$M+E9S R
+􁐿VC>uM(4Jv?{AEBHt&@Msp)( %ӜP3Xkez֗"§6s͟Fc{RH."#O7Z1upDp@K>am'fGCAe}cX:|Jx+~WLjm®H,wH@5[UHRPgMǴP 4cMnܙ~ZC>
+lE8x?'} :遲;V.Ncj\DthU&ptW
+T?Ѥm(G@ENux.ls 6*팵aai85Ts)S-?gOĢt78#@ox7~8D\bQ{U0E;C(~fRH)mс@b~uϫ @ߚVEGSojul6Si?*Bø;UJnv⬭6]g܋l0zWy7=O,8C= 4Na\I[-%T)m($[l(+0dj8J,:wa_5c3"*lcqq^yEc3حm b4"}I@zW* qK z]Vc¤>EB)/A{Y昖)yn__[NQStĮSsts(
+Wj;й۩T7AZzd!p^;VmJË%z
+^BH(~kάe՟+&IUطƕٗt=)Y ޡwD:%b!$gF<{|5bW;F!QmBd]LDdSwb [b3(gYo:@ƒÀZ4CYF>a剺v[_6%SiiGc^]ap;KF 'd܄1UOg^sN
+[iMY_~$? c!EUaExc4ZW9Ab.h,0X.Y>=4<5Q:ݏeoB]5;Kq*V7
+/PW%=ƈһ"aY욑?pIWFn^<QOI,J2G֡%7e1E{dN)U;[Vab[*i~B&zP;_v':@^{Vb+G5"ﲆ%D"RD pWH
+ޤ^yDs~j#z؂~K*=pӜ cAru"u. cqn A^
+v􀏰ц>|r g\9ˉQ䈫F;U1'لׇ L`|1@q[5f-a[GQe>Fd;njډ1'V>)暠{fјxpJeޗ[)ёPF -;kz1jY'TlsVzx9oܚ_e-NZh&P-vEƐ;:1<?"'~9yҝ%o,dxZ
+8O0EGn:􋱐1ꌾ'+iǟحy-٩`n̥dYƝOd#D':k0!'g̃(mpwu^o"lapbArNWsMxFuBwc8$y.qz$*|u~;&svͩ%u lPEvaw#WKxDMVywBz8g?{.}}-$O~wۈ׀t
+800.Aa%Gだ~#tHSjO`SUޛbKՄAg!8.b%m:͆~9bs륙i_uIUcˆK:A·7h+.L%?}sҒsD $iR^"T6K=JAkI7Ǐo.u%
+Q|\QruhԔ^u8sT~J8A)ь7l.~%1C| q#gca]TAZJƑ@ޒa\7k.gV%ƈ$Ʌ{iqYàgY]i[ Sܘ J+d
+@7<.P3%̇ˈ҄tXz̧)lpӣof柸] SPmI@e97T.>%ч0wMn'mocqPY訉rPJ=tmFv%=vw4 ~y+0B{d" }|~wtAm.OuWcavcYw_P@xFy=Zz4|=+OM}"ߎ"~ v~zRl1zb{oYA{O¢K|F}>=<}4~+kt#RMIWu벼;l.-\bqX᥋uOuWFQ=4؁2+q#QubІ kKbQXwO~FL/<04+J#tk(a4XNŸ׈'E˛_<̗4s+T #7X<BtGgjadWjNt@Ed<3+†#݊|~wsٖIj*e` WGڐN#EQ_<s3^+Î?%#)s:Xiz`9CVߢNM̞,E `<R3ґ+ÍƉ${兼ri9q8_ѦV՘MDҙ0<(b3{+`$'LM cr8whҪ_}rV:t(MBZDD<7e3'+$6)rlԾ]o_c`[pZ&QqQ:@sAH4t@<"v7x]/z%'{ }%,lucF+uZ3vQ,*wH(x@<!y7{@/ؚ|(0} 5@lkzc{Y {_Q{H{!|@7}E7~/~(^!/nd:l-]bܵ΀9Y
+kb;Y.1PkUGfc?g7뛁0)h(ڑ!τ2r6k7+aZmX鮃P-GϤ?џÉr7X06C(8"%08]j|aXܑOCG?+7֚K0Ak )"S&j癜aWJX_8OZGo~?7Ǚ0G)4"y)
+tp_dr`Tt yDu5wj`&y<giYWkB lnt pHdqCT9sDu`4w"&x܈w`gNii"ejdLllFn>vsuokcqISsZDTu4v菊&x0$xcixkרy=myo݇zIqw zsf^{quSU|wE|x4g}zh$~L|2v3s0vtVwuvjx2vxwuyxeTzWyT{&zDk{{4||$}}tU|du(| u|v}6w}txu}dbyZ~QTzH~C{63|?$}rۅC/s˄^t9nu҃{vuswcx|SaygCkz3{$|q!pr͡stoBuXrvBbw/Rx؆By3fz$|qopدq̔KrstqvHaw&}RxLByo3:z%{ٽosvq r'珊s;QtUpuq6avQwэB3x3z%{8oO+plqqrsÚ|ot+`mv Qw^Ax)2y‰%7z;Qnװooq
+o p1qN|rxms^tOv>IAwj2x莔%gz2l~i.b~k^'~mt~o`~qCp~s(`~tPvAI?x1zT#|;~|r
+|sTw|t@Sg
+
+ALV aPA9zwXS[Zz**z̃VS ]r7O;lW ~xL/'HhwGH\ŮP<7CUXy96`Ȅ7̨݆}j_, 9II[O@M .hv,-B;,Q9]U a4tNNv3Ƿ0/2&l}R|,sd6*Qe%LYp!=%*:|]|ӿA=b7
+L7+ziD-fU܀#Ogʤe =<}* `<bo4H[ Z%}$t!~WY*ѹ$׺]CsKT`[fr;]|K qm\1!7mFCzaHO8!ۢBgh
+"g>xG=iu#J26|&Ue6'L_Fss*vp}04u
+F0iYS0yHw
+ob<ƑjJB5>;T
+3D˞ 3wKHhYiE\6+>UdG0Fym^#:kyQZ`J)3AÊ@H9}F{:RאSOAD
+2ҦpVv|[2 Y&;]
+P <CCK
+CӇ*VYKe\~WT,t4ZCVm7թ %Fԛp/̀h
+#۵0К(w
+NaX-STNHzN7
+:{t  꽭Yw J] ֦g]_W[Lh s0 A)iSc@ qn)N|bj% }ļE'$8ۂ}g M-4{VO
+qt\xNa%+c
+f6ҁL uDxI YTn32f8rܣ'L% Tܼ,Th
+a|
+;S|E\dD\)vmyxgyK's,%y-`#ڈ-Z&ԤtPUu<3T>^^Ӌo] bkҠH-$\wahu4J5`JkJ 9-YٗfVaj}aƃ $=.xy%WW Gj5Keo,J!Җ)ˤM)%k "١xO>W-'fm1`*ڮZ(-ꗉ,ŭlXw:eJUC^="]NFHW
+*-o}Va&ܨ38٨KUaG)}zT:<hH>V: B2lPRq(2IDw B 98r;w\5I?vB7jª=l Uit<r+ SI@t"n> .= ƴҘWOBte.񭹈]hA#0_!sKT@cs|< ip3< hl"җ9t%0=5i6@L({|"l|=ZT--,Y}זTAn/
+ħorF0<h^ĒU{Kt[A!8.؆&lF3ezƩhpܥk f7m\oS q IyWs?/u-5w@,=ya##{}yodp0dpf_ra\ysRuNI Iv?V+xq5z ,W{#g}Py5uot*vew[뜝xR;tyHŖHz?7{5/|,n(}#1~UU$xR{n|Od|[O}.Qv}HbN~:>M~5\R,h#׉|)wm!dTсZQ@H}>5e,$˂%vףmAXWcZ4
+{\|{S\|J}|B~~9~1sU)!*҇Dn<,2e-D\4&NSQsKJ\B@y9ΕB1)
+"3n&/mLdCL[^RퟰfJR
+m d5([]IRWJ TxAЗ91c)ą3"#pl2cZR>e=IšA 9koG1wه)<"}2nl"P`cDOZpQܝő*Iq#[AX~9@ꋾ1`W)닿&"Lj'sĄk{bΤÙ^Z-Q:I*A Y9x1K鋭)Ul"هŇG;jrk1pbbKYȠyQ?ɘIH6@󕦒8
+@ -q"侵V͘H)\\ zFKv$w''Ro5ݱ6'YB;;b QOGl EA%-zVuTS87)>m{WX]eGOsCX:}6R|t+jOPHFh}A&|1>SK3m3<]@Μ,_@z.=B1OF?{ۅ@o8g</kop߁fȈ$%"+P+G}=3hr/C}lg&;ɩC"6{ gcz"؁ fL*\fsӆrjws !VIN\a69Ǐ,8{,J,@tiQ0 Y'=H4/zY4NR3.5q&[(
+s&NIh诰WȞ!_+<mʢ .VC1HMq.xھ蕂#Ao4#R$;ٗNBʬ.Ȟ?@w.U<t9`
+OG7\_ږ}Ny Yx**n=n$^p?NiyҎ?hZCRr-N%MoE0צ
+;ks=R\T W=$DE!A$K?弓|K ҥ6At&& ~@" ]ꕆKΏ2VDQ2DqyG+=}r;v;M'4w_un#o/c/p
+×Z{^5JgLHy(n_Mê28Ɋ D#ӆubQ[GD ԠUh4hsTP0RLޤ.>㿰#&Sd
++:):i5+FV 6Ed<G?vAdRU75+aX'Cp
+M.j#ڋ~+cq<wAFpSe헢6qi'Axs7X-6BP
+eah_tѲw#[& f4cl
+x:S܈`n!'wv(zY(v©KV=RF5ӾI'!e(3xHN }qS>+<`29oS7,TQ[Ī֔ZHv
+L[<iXct7>(1;*NvA并KMUuk󫿌;.Iw_ݧ Ww?/>&:x҄+I
+Vݼ?ʄL7 -ղ(U]>PoKi^<(mGq]5:+[g=lצ@Q͞pt_ ʈ 98=a|6Eڐ{=hWhHޒ=]ՔnxTD~(eZ8T?! |oߜŚy&nPZ8SZU2UpP>G$Z=sAf՝Uqv&'jl¥
+3H_$U ]\7;@φ9QՇ~麝ډ=)]\UwS&[K VwkG !.a)BEaA<jtm'OY51tV]d3R?a JM~M
+\]MrDR
+-GTL2>^C.%./ Zs3
+kb3OL
+"ԥE<c]DxL;7o Cszq|w/g;6kU$_˵xo!ۉWnx! YY8iaq̰M<G$0aOm>53%qʂ|NX9>]kO$ds n= 
+Z 6dHb@ 论!(Y
+lo|,&8neq'[Z:Gû$Ҭ!PhJ;j+6*j"[{@Z#Z0S9Nz?+Ue]E#CҾe=L Qo8y*ˣhGQ8oIQ+ͺd*RMJ4d)-e[U2e+ bUֲ&j1zhB6m &
+Ic#.=+) ԄE>!禔0U8)!R0&lIP^xM*<C=V}4@C5[ Q]e98j縀nBWd7y@ 98GZnB?"72p؃5E߃"4
+uGX:){GX*<d8U$yݢ1%k0,K>rȸ'#pS)rllB6SWX4 \5'kW9[JoG)y %;LI+&k&V)
+xƛؐ@FUmA/Е ˧
+hnMm G]݀w*psJN&O߰oє>QT,P:DWKrԅV7,NS= 0+[XZS=<cߋ5kS뺋<^?q$EKcBd|P9$ Jٶp~>cލWEԴPs[9++f$w=\ٔɡIp1-HEl^)㲾[Fc)#gTcfA2N+V  Tq,GD"
+%cqvFCSy2ZnL%q`W88Ndbo/uItl,4ޚSzb(v@]巽JFܯU uF˚#ĵ&L[vBϕy6Ur ⪬.?6FPI~o)x.$uyK8,$O]ϫ3jZkzKcuV{vii]sl]gaSŘ+lrqeK %p^tD W/kNoԕ anh՞IhjWrL|+LD?o:wQ>/ʦ{\cHYyA6 [
+UfZeҩ=j+7'2m=ʃWY]+ gY1tGt<@!gM"$MH
+1L SaPXW"1)\)|+`E
+Z^f*6OgQ
+GeH"|ۉi\#$#XBȭxxOuu{mEeU*G>h:h>Vg'6+^hóG
+1pXɢ<σe´pSv1\oM
+BJI[oXJ1 `Ȋ5pv\kE@]~#U.T`K !ѾkSxwmX<ȼbx 3LXjȗq9"JTIE?EB ܣʯE t`2c
+5Lͥi=^%;24qw 7$dJ0I`j\#0 _'uwu\(5o>1jJt8wj21L) A"HQ!Nl~GASMN!P֣+H;ޢ%R֑dL-Y/F7w-^9e1{Pj49$. V$$(X=d,D"#WdB Pښ3'KBUʞ h=Hi44GbZpIˬIYcMH^i]swƆZ3 [O֘<nj}y(Qq ̓fʪ%^OT'iPR6͕ӺO&ڢn{`LfsI/~88,o<'a
+YU/2%;m|?hDZE/mqSܺIQJ +G/dDŽ\ȿDUލs)َB~ZidMbkz0GDK=FB+*M⯊9ŏtS;=ıC<I .rx^"N%^
+hQ/p=nD3fڛgz485ڭ`,n&l91ˈn ~ FA@ L#ꣶ?aiYG NĶ7n k |vZMH] ̗ +p387G *(O\+ۖى"2.&Jވ]],tES 2/n-x,f,?@/|&:Y+zJ^-^?gcM1UOGpUb (;. i@F7Mtz(8c/xxI{G)b-*wEreL֞5/Lw|/YiIv)#!KwkᢈD"T
+("G_|INVAeUQqբ(X@\-z,-/̓ Im.!u*FU0k^v--,ٖk%4k˸Ymz| jCO0K LDPh5&-,Oc|/Lu:9dցD~` ^ b(ʳD0¸d&va9b9 ̾}_dp3 6XCa뙈FEJlrDhJS7[wJ\63B63!&itBP'.Tg`wVvOcsP?IA<ق2
+lDV܊QŘNvo SY@cE A.yKqMX ލ}rܑtanQlg4M)$13:/yXmK1 &œ\IҤ:gcքp.J:T<&%I&er (J:pqŻwJObl2}gn_ɹ
+q?ky2ra;`U Ff ')kش-V 0Xd}:QwE4j'C>g,zTs :tLx|-dmf@/&_
+$D.$w#B2N!,Y-H@3 78/D=H=AlE&I6e/@2p".xM F`<9r ~':- `~Sq1K,ǽ]ni7bD(g GLaP%fC!+ faǤIg4Gw1E&?STJ'YYq`G wt]#%~gq3iڻbpv1@MRJ4DžAqj
+4.7$źHjʼnvl""10
+nfd5l8x
+lW!ڃ~SRq\v|eǻdL>)~6s,-8 榃dpůC
+z/o
+Հ.fÔW?Xlcgl| Tr}r* kAr:;9^Rm7`xM";Mғ'*wɱ%^jײߕyTsM&MiNf{pZ0bw'4U54
+lI5buT AiUs/8O>O.PNo jX[`ޥʁm.m@=XHt+]"fTNYeI!S:,$9CJ1Aj;+{+i:[4`)V
+j2U`OR"v
+v)S0>D3$[C fˊ1 샭s~!)FagqL܊ç5A$3z8NXE"4vha. D=B\h_}<kizVb# 4pZ
+_Baqx%_DsqףOس"zx [;VQT]5D-
+AN?g:5g4D_GdABƒG
+]) [B G}{]wvOɑjNG)@⽂ {1>rQ, HZЏ(جd}iO_}! ?a5 ;5<V<ݘkXTOU~MW]R5$7S$ws,cHaid놶z2=cc׸_du"epL^ʊm/اAL#!fRgoqfAhh֓*` AMR2~dQ1z E6
+i) GGp'c8QF1^${.s# X1i &
+²4s,,\n%H+\ʽ
+yBy47 Dl~Wg.cř!J#Kb BVƭMl_ԣhba]Yc7/2M{ H< "51wѥaQX5Igq?34;ƪE=Lm:N?"\g4ż%"xM *u`玿rnP/gl2"uyiRC{Ao5_8"(wn+W,?ʻ^W}ڔ.CxM[[|d彁,ɦsUՖtU_.xҹ9YT6A-,4]\3Ͷ4 *%jԧj=*x}f\NHL]_՗lv4n]t7u[fypyNQ%0jIbM >3dEtj6h;_מصU6\i>iL@bd0m_ ԉ_S
+Aʰ|P
+;q`BS0dKG,_SMd5y@+t[cMJ XC
+9!zERdNoSckzrd'BRU'z!*"
+ѽCwP|%4=B"Ce6̇>B'p-sџ3ш<Mַiۜ5Fibt9E
+~Ւ4B b @68- 6aѲ3m6Iص?*A;=NVItXh1}C/'9eż,yj^q|vGJOui)|aB0YUs]qh:Mh&=]?77Wu3Lɡh^bYuTCUf'B`o=\։G7}D$Si`0ZRٙx֝E4 Q'|"ɨ+Nҭ7_P${|U핿c^ngU%MTG;@xN.7&
+"2 "qB! o{M"]&JvI>SV{%l"uV+J׏zI%Mx:\6玬rN{Lf˛8aQRC[o^ꥧY"Ѩ-/rDM~0KH팕ϲ=xײi٣XI{HWZn*
+a8SkJ!6
+x>.1ц2I|m&!{m4% 6 "RmH&b9Pljkt ֬Qfrܢ4f8?$B,hnx4p<:(yWD[ƨo:9ȾEͦ!WDԉMz69f%!D>g"%ĥ܏ke&i5aHq{ba] zT*6Edn{C\Tk=*@$v1Pn(tl]'|s7*Ζ. }2
+Js*oS
+*sUihjVRJSWw3nʨX_33!/RAxB?~q=QJOM`H;ffXT.nYLDVt`FUe[ >YtU}5X86"ژ8vu~|1D2R;%_|"Sh:f m;'Æ
+iXa\#=QI--*u'[<vrԹiN:-OK%T.y `IJ4<FPeb
+s.jzV/<^F'+hli[<מ\E#) 4dKR"/619R¢5Sl8MMv-waX.~^7".} ܨ*2#|/٧ǰ@y63-Hcћ}M8[5|
+PT=}*(/]O|7ՙ
+@"R,D QY5 [ ٨YV]vs:Sa)!Lg.!/.[modp,R[WK8~E!rei/p aAE{3]~gYUa$O&u
+Ns,|>寛)%<Fq#oJ+Z7lWQ#kKۄ>rz*pQrKG(7AbuiP3 bEG85 uTX ꮘpPxT)
+aKؐ s_areE^EӑNt;F"ϐ/'{{d2J*weTsih{}|H\_=K0;yæočdq[o&_vΩl]/
+^QcHe.^0>bn?|~k@
+3t3dzT5mد7olҏL.68խo,*a$<;U-kf³̳L=Q:_2My!d0NS9 f%Ena?Ժ,|
+hpMjʈ HyC@t 1Nր+L#l^s)]|+rt%aP.K?R-pp *]ZXO@5иmC'DQ4+sʽcu?нU8m"Eƍzbe ⊫ذG6Iu3ЇUb Ԯ|E]@SX@Rj!GV'ܖC`P2*_3"
+o|6XazGrx6oD+Eɥ=h[BkI6쁦 PYt?ҡns󪅰;}I9OԥT򉋁=r/&A儿 @(즄Ę>=m`;Y|b[rw[̓/G#Y 0'+|@`?81lo)ʺk`Jͫ-`#-Lts-DPnfՌ Rh,R{`tgNQ7po]\oNkc?k%/9b!8Ǻǟ
+*U#U̿+̡>Uy/#
+ޜ%h(+"+) +sL)k zG) <`Y$NմS]L$N"(/3Ql*Cc:MOmm-@Su_%MUϸ8lu)\3l5I*:VPXnknߛ}T` *@xfɝ:> U?vqŧ;ʰ$]kk]kmU5 ^hȧw=T8 Թ|3V+hinP$YkŖ9ƿOU7 (
+EuK "1 2aa_ͱWAH;a} ,2wcBxV9 Lj =`|
+O<fasGjmJ"[^Ƭ?Apu
+ @#
+s=b F4j/".ܻvA;H @RNYnh$54ņsӺgj7fv Eߦގqߟkˠ<Wę?Ə\XĐ.ŽӨ.tO|X=e},BolX #0\YdhE󡩬Eq]쩨ƎaVbَp</4ֽ4֧5nMI$bq3Q_~/{xb(!6w-Í&/ԠR%1EsvU]kUBVMT*́nWwM (~Koi>׻ DiuY5a(g92Q^y|V`R#XjJxzV3UBo*6&Ķ/eonnoYэ<FlMx-U?cTj=yY4S ;)%8u ٭-ӵ^"kSC؋C%MmRO(-O9vGz%pV~К! `Ȁ5U<QFQ;8*K%)̔Q8V<>T$./Fgv9l=G6ިQ7Ȫ۔)uj#Nb`Poyd"X̟*>r8P.u6 rwW<QgPEr!D0hیkbpztdrS*Cs ظ_x-O
+ GݚfZLu ~}fi0Oҧ9Z$NhFg G.{wA'G p]{l#tTR8oBS|=b<s98;J2W=8<Yu?G Y}7ߵl΂<{͝IBb]%z+DVk.^&p,FkSD.}E^7cGtSjE=Nz]N:U=u_ SɾN,ikOFRu(veV|YsEDŽ& ˯W1z*J~OJy5d J.էxeVI8.ԥ|MJ)=[/M<F]38/V{3Gj]iIeCN<>A~k@
+ЎOYVq+, rySpL$#'|*;O*F{uF?H99yN8O/pRšRD|ʫT/s+}(uc@<1u_`F38I"#3^(D*+ܫhXj\ @/ȏJȿwRA]CR#8"N/D/J„e\@P[)UqPNPYu#v'u崳
+9SxSKPQ9UXU0əR a!Y{inqVw릜5
+3NK `H(BXӃ} f*R@QZJbsUԅ#o# D,&dHϘD3þ
+yk-:X|u7\@p䶹N F)q.HJ6F|J˽ ҪjqUUJw=E܅[Lכ6c Fl%F@M,X#]7u,Q]kg%6{8oyZRh J@m]E檖xJWGbj$Z`9wI;u bޭfA2_5Ep$>^1ϬI+ 1π2-K<R I ›ߢCE'>>N~#+;㾭uueV7QJӠR<C% J~ H/eבK*tȿ/P47v1) l>.~<`(aHru0 ^HYɟ#/Pp"V=#/duKU\gQ~X%|(,+fYړu>~NVjfʸ\[ J-P\~Shem^K^ s%vL}W-<R0s^=l^LRLGw<ey,OG/*eEpʺ!402X]dwsvIf+([WdIxe%عf ]bmρ$c" uxTW Pf i.ƛȜQ6߈:r[Z@4zL]xسXq@CvݝjIj{,އDYƱsRi)]
+tw·&z Ti߇Hd&P- b
+DtxCS2Vu ; U8{28+4Ùu;l[H B=4PN ES-ʫ}u:Vd6`*+A6ڙ ?
+ԲW <ff6Ǚ_HcEҋ9dk} 85k *la)sW/]VㆣYšbU5׬;|Cma0Gi
+
+(U\=purٿJPWy ,<h8g&W8wTIl@3o뢝ݺ-9!IL:LÀ?jۣ'AUgBʟbFy3= 0C]P
+̜ԤCU syy;g.wHFyEtC?FQ۳%Dubp"Fy}3wr}Icu3!QDwVHcu|H#aFɗ2db6/$V~ |$}8*
+Z{x[)4tuLM~q|?D7̤oi'[!tqÙ~`7}B7de*_B;ekэ3qQ8!!.d=<`jEɌu4F-8owrE
+h1K g7 ?lN&E-CJN$I%O|tQR^<UY$_`baGqa?zf@[aԷE.s+].*2BeʄԢr2XM Pk($H1
+&Ȕdd#+aBY9'mE[U񪷢ŁZZۊ֪rE׺j-y})F>76ѧ0
+.*G|\ x'I'ȪP}&-Y>Ht"5"7<%5JQ>RBR20v"7cS0W6l mxvPQGKzchND2Vľ`o$NU:ÏڧtEя zٳ s7GP΢X/?89RK."q5r's R|L6pX߃e[Q qP?`BU~vT{8,S/ k[iQjw|aUѰZ."8*{Jw6
+R8fXFnK]:|7MlELu乱[DW1-rd= oެXjo4AG5^ϷO>[ts:]c
+㗢m/%nH*~є:O߱?QvԭVt1gis3$YV M^!ɽ gU|hzR8j:iԝXaɼ2C:s'Aæ !j4՝Uqb'n4:UL βMfN&_37ZCa?T jg}%T2+֫wqL ][/%30e}ML/e
+M
+iQ/V\V+ #uU}9 ,'C "Qyc=S^kI?+cѱ aөƸ *RZ
+d):d/Q~_C7e\Nz1SP}rETp,h0DcX_ļ88V@ەhcBփB:GCK L+$\e,#%  H 0+H&obW;Ƚx|h0Y  $Flқk$&M]|ZCz$$\$~S>8/t $0g qEh3v9Q*!rgL\0d%A?4G/ǘ;!(SH0Bo!bp\{wN./5a5UuofK` cR p1ݷ 71aݴݏQ9EXJXN
+"S޻.]G6 9&LS5լ'k№JA|c ]8s$ͣ:ƻu8/od\ի~(TAs]&Kʨǐz DOm<. l-\MXWfĘiIefX[w97Fo/3ۀ4.R=/o>qfB?"%6r}nّ~δՠMr0~0@K L%>BW.~Nu Oo8dYw@sGȔL/s~C^_JGT X)z@@
+Rݼ.Sy^eLbVNm=ZTdiZ^a76
+x^)^hƥ{|F{ FUk4>,h@DBwB~Q/mGcrOpGuq^L90m5YJ9hIFb\D'l_$0tWdnx FO>FƔRC\;NI|W|"0UJ"Q wdTbPjˊ1|'r
+򆟨7LA4QТ-ek7w´_lLPEڠSC1U}NA ͚49h3Cd>ЩTDS1|ּ$0PCA<
+BP=xFjU9<8 7 >ʏfLbz
+v7&2F1դ`BމY .&=Gt,PG -
+|. .ܫCL=k4҄$mŏq1Ec#oڧ a%- {ֈ&W&hWoV._QL?k*H깺-2L }2%ln͈i[A¤S݂FwWn@#ګ陻VTO2wMX&HS{b/.ifL
+t5dqQG6֫`yБ;Q`/%Nj$1.ȫׂaf895:Ktg8rܣ~6dtQ}ii4["YIV 6Iֿ Pb5 QMSEHEΒo sҖȇfLvٸQ սQG画!Κ
+\ѲӏuKPݤmeI4= b(rdQ0d~ qyOPÒ\5 qԵm7/}-7Th:|X}.O_j\mg@?Rx࠳w
+3>&P;y [fs[*
+᮪%Œܚ-l3^dSkvfi|W|78qmw";%eg0OJʇkmOEUd<v acgU K8G#~|}`YPG'Z aIg3iǵWZiN=Mh6ԍU9;lZ׼!qSw3C][岮7M[_46@+sh^R{%L̡bi!E8f%0B~/AtIؙL$0|Mꃅd䕴f|HRWP)?APos)7
+zT+
+0xQ :GdN;FM;c`\ё02x]ɒ[AYNۏ0 i:(ܿYѪ h7&r6l[]M+~jX_N7d\oPS5u
+[c/2*>%-1En T9|+NeN
+*:ݭ<l4w>DaRsK!"՘w 1djuDvI_~3|S^kRZK8oF[f*ƃ"i2f=1NJ# Q+,$fNZµSk-]ewtts:fl8Hc0_l}{Pe$ t~<a
+NýA]2Ѹ0O)2Ú([*j#T!эg+ck䭮tӅRצen*y\fƙA7֐`@
+<5j ~<u#:Dx'Dw욪.<?+Mi\ln C .',,keKTJ0_CWD;9lo~|_cmV\gK(ߘS:/"vIuÔ
+!ȳWxpd(ׇ:5Ġ\'v]_R]*dhZϑ*n@BSw
+,BuH"M܊DĿ1M`t*6e>O*lE}d=ML>VG̨:W52ĖqRØJ4Dϣ_!d%q!9vR%-P2w|$D%`,fȐk fʯp1z6_o^`n|z(Ւ/M? s)Ŵ 2D]J3*B]T^ڇ8\\ht%rQEbߐ\t(f'✷34JŔ9.`p^g{y4u-3LjF倐kfUvW+MW
+eWL/xNꖻ!
+ \# XAl>/LjXj\,:@f-ճj_;q6XE%“Yܘ1=ʥTS aM!q#zJ/@=Lb6M[T1 QOTر(c 9qb1m`QDYMl݆P(}Kĭh
+v6 ai C!ԋg׬TB1AG.зrB
+Q} DۦtcRb"Zͤ-+?b=[#V[cd 4r%>v 7_?=`.^*g{d+Sզ> ?VPg"c4oJ*kHc(b鶎`+{m"fUq-µ+NK`HpeS^dɘ&q^R]p ٱh>\ U鿧O]]y:qNRQᆎ y6ɟZgҾ5=4iD!:+Ѻ/
+[vZb⼄ XI燖՟HYXI\$_;j o'Pz´\K}X{i]~Xc-|Rj䔂݉RY8S+AHGѿ@IJLˮ+PNi]$`l<UwFKÁ
+W ӰXh5 ?8䐡[_t*0_\9FMor*/: Ad4i^c
+˪ #YZP+25c~F0{ ]cvIHf*H3I]$T?|P*:O%%]WֆH+-h3HEbTHzEW:F/MzUP*7QTF6~kh"/G|~P2 \@d8tN4,F=
+3)pmF ih.p0,?rMވ牵^D諻 ;5۲)5 JNF2('FMϢi7
+Z r]FBM'& B1z>2!hD_cpNq
+PG%R|^08V*4;}XbLhOtGD:m3 1CbȔȦqfmU|:MM,uinkAPyX^]Z&2V>BZZ,Nj\@園A) |F嫇I<=Nx7]")Xޓմ2dS]:?&Q{CMFkȨ+B?$(qyu۾t/q V,b H5R&sdSJk>Z*irm
+gsS{7]hM7e!͗Pxey+8WqRg)JZsZ6]WMZ9;hVXcZmQ5[F.s*Ū@~sdIy@꺥T*~ O~6t>Y0C7{a 40F"TxLAnQ?
+iW0wBZ (+zLҴ}*|)1&=ŋh(m Coӆhd0`0=16]B;6n
+B ]Jm% بDD5b!P>K sxJנg ]%K3$]iuѧҽ'>*fDsT1 YdB
+6?'Q7j!,Z-c0k +'kOX[T!f<75?Nd{6zmC_cSus=kei4OmMk!T<2|"Ӧ"s*4{S/kvD1f<E?+zΦ9}5ޤmx4XEFÂ/Jlr?*z7׹I٨m<*hjS^Ycy՞bQUĿ3 `?s+V,cOTeIvjf9sph3],N*`]KF¿gW&jGN<B[LVtZQ\M'+^Ro*UA[-}O5&JѺk7)ʸ_Z`S'Uljw1Ɖ?†Y5;HͯTL2S$ vP.P0lju8[hQw%texjʔX ŋ Zxx]pzIJ6?1U;餍X%v-vXn +i HPt8 |r؜7=IAÉh9DcJlLySx>-.߁GkG盉䗹c/IO6x(9
+:B++쉻~3xy?P󠑪ͭ0'M' hh'<H8 }NVFݒ!l.]'ծNO?zYδa7^\R-cǡڜO,I]| f>}<@tiTox8h쯯oRՙBˡXz
+^i b .y:+W6̮·3yhD6/a{CoxwBJ
+W.yUIYݫ,Qzp(v烜ޘY_.N޾!a^CxdmA$d',1Usg{cϜ_qb.gm ZKÖeo"._T v6(פΒJ'0c9nȘPx7@c'meZc%7WMEr3WxMe>hF<ԧ0ωnehG.Û-TJά05ᯙ(MGKPyP$uM>q8D$.{(v*rt YOC;ǣᇨ AT_JeA )7D軀DE(y:GI1?qk{
+:^KjAd.##o<r v׏\Z5;'H1CYML"M$`&"_HAaWBăR! DLQJ4KPJ{7ҜQ_.Δ1|.PS :._R/@Qo}ׁNpvb|ڕMӞi۰ΨsL-1.━wn|[bK}u!3 '赺
+iu)Y_Ev֑Z)pgEgYk$~JƊk;ڣ@"!=|]ڂϙ(a8DA-3 x!
+OZ3t'X~0p@"J1"E[L;C} X QCTk{ j/kwh0 L  6[6֘,ykp <c>f{'*$g!}ߙCH
+E?Lߜ+^I[CE  ѡ~ˬ/n{6\fhZ*ͺ0wFqe8<`vU<MO;ڠ5nj|InEGV4HOv} U:;M"]uE? ӌ{պz;sY&Ou,TҔM^Ol1ڡ?|Qs_2?Ǻ"ISu[vҔM+mO
+mh Domx*'to0ƕǝl
+37>*N792ѓ/ø IN<YirMY.ӄ
+|U o~Y><,™!5@)ܠڤÖ7䥪`4\)ҬVMM\Q{d~L
+&kUC)"듲85_:֜CM$n4e \
+l
+
+(nEHb!=d&N
+%&PkpZ<7/pLaRv%V/:b)<Hm J&+.JvA”&Xҝq[AG2BmOOӝ93OYyK\dwi 0Vtz'{l}g8(xc( baHtdw¯.EVQƱ75`8ʋO 5^|uEK{~osI6񰡂joEhZc
+$Hx(ԍ<w2| *G8]j(.L3h1 PڤXi}߄?h5آ : ߱ K<q^i;2f# C$fMXs T/,^39&)iTY\f`fl@4-6J07{)?v?r2H6Nxhx@F%c`*R5qmd!ֹ!c v5&WZ{M89< KWtmWp]ũQ7Z,=HY@^'y"+<'i^ xڷE`\%`WΈmxG`aR"/әLi|rODi
+UCYZ/ST 5ȼ.NQ8r|i2K{>T)7%k[*qیL]>>b-i);i' lm-OL=W!fcO ri8z}働dFTF3wd
+r_Ģ
+)))U$7kZ6!  dwNH}+MUjx'5I},# y<zQ5Ս2LuH-s;]v {
+m1rMȞɬ;I_guҭKjdEAVTujjryF :+7Ab1hO
+UZUݲ“ ;P_9
+:&` <yMXԃy!O`}JgS\Z;S9; _$^7pxWcA=]xsj]U*-+pBk̉~e 1tk
+3y`C8y7}"K,/Bhz;]^MIVdkӚ4P% zR͋0-}F_Yk}絃x` ~|i/|#e9-KžpUmo/E q^)tkvvRI2OVP1Y1J殺Q}Ѵ@=^
+XbT! ½onNR
+ s߳3;'l&e4TKxPLUZp _ׄq*geNLy}qs0Һ+Lo5hٸިvC>6i)PjN:GN4yC)Dn!EHEܗu][BH5SQAkaFvh>la 3Yڦ"ciǰYJ."fibEφiQMn"dib0b".)V XȋD/S|"SaÂj='҄O@V8Er0!f+.-m6h#Ƶ (A0e##B懿hn
+oܠǙiQ`aamt.MegH GG_?-1'6sD53J<oXkOhCLaθӒOAcKd*iDa!2.ՇO~p:<:-D7f:1l2
+][i*=(5@JrXr־:"~'PJ KT{(~F䋛Z|D<oR8gL:ãjlcZ*/̱X)=q-u;oU۳`{/]ܗ</P<g<( K̩Qs b_f}ƋU;wsR3Y̬*57iw=)z[OGZg3m?ǩJS\?jYyyҭ"{Ho_d[5e D=u\E @r*#B]TXY _ݨcFus Xd5q;cetO02GRu]46cT6=f&>)mDb{ ~|XtBs[ hN@Zø_.FxvH=r͙#{EDaq<(t.i`PX:tnӮ!xF g.z vaCkPg.c@5jPuT/"p[B
+J*/3rVxuxtc?Țzh9UJd
+Ԭ?Y ܷҧlpʀ}{*Γ=sֻ]+] @ffL- ]NQ'tw$UyqSK% ¢VOm'?4\ᵚ#U}ܙsGuE[{ݯtyru볊GU[$/6]7xڌcyH`o }Ɛ`Y /4>i|*-~A>]{ORnu|3f124r?=B
+&+?_
+ty/ockێρ:v MBTCWQPRqGe%2^aԶDG-%a(!V!ى$g46aD%KOPVd&=V('9&Ǝ8$*#<H85qE<M[˃؄uP?<}N k(jjdϾ%d~]hsKCNZb 30(ʞA_:s=>y^?_+y`GI6A#eګB*hboXfaaS͇
+
+KԥvǑ:U+EbuC
+)%@3NeCI#në/饆˅p854*c\QAY
+%bjIfhM>E"pHÄ4M*tq\U:, <0y3 etE>~Fgo*۰&6$N'ҒCX; l๲rRW EM(e{O ö֢Yxb?IԓkdV)TP
+B\oW| L^472V2qQT`){N`
+%KP#J +э\f e dyi'-V[WChd&CꘆV3P i`j*Zԡj̷o^e ~r5dd<Y ~Zh˖Xj~WP$()WUSڠq-ĭf@ھc'pn#=&{?`nq#G?ayᔣ3>~g|1B L
+xW]0̤oqfi<imcp댏`P0%,<*RkI7553efepǿ)pnk➸(n]ݸmo 7yŽǿ~%SSR4瀦44a:˕2==ܟ׾Φ4sY@gM&W=X(bQl7000000030Hq) wAW;OYIO{W'`u<+_ F?\(G@nWӥo!k|XWVOȅ>esgvSS|!g 9IgQث§|sU"UG>8\ddpga乆^\'t{UovՉ}kJE|VҗddCCT08S&r\cyWS><hqixZ^-7im@0rXoa*a*g; "j+~MB_'z$,)) ?I5$xa}J w_6X=BXh),ڲ
+ún zgI )I{IÅ/vrZ7U扪%/ʨ
+KͼڛEʇnR`>wdg zK_Ai'
+QBGlZmmh6;csqDFWcm0oU)kfjriJE!_,.s(]fnۛfj
+
+_!R4E,͕ :&4M̙نc-,tQK'd-
+(
+""(*^"xcu}ӗ}<3Oއp;R-Xo7qr0:'MjqJ-ҦW)URÚe[ܥpi4 l Ր8Ȕ#N0iVQQʊ/2fjr2fd*"t:E=YˮUjU? ]짶:+ H>nㆼWGޱbUI=Jڠ(cTd5 f2Z3W3WP)8A݅2p/鄇1׸ܥyvBZ+OWh "yz*B;[Ti;
+dù2B7x@lCyQEn\.Y2ϼ͚TL)~CQȘm!3f  ag>?
+ʩe. y ܃N1"ϔNa[~8NΠGUam=#$FQ.'3<9f"-]0ۂGkq[A{N/.',È}PRP[ţ}yM"V!n9wn>
+ p$vmȼ&Rs,lx.G<˖G IY\O.<͜!,_`o0IA,t[6 4^yyߊ>]0GoCPP,b(d%kr5AR1ei\< |H%rM 6M.8Ų[ yUv W>&LǪ2Jp +4
+h|fuC9tИ0LTdh(m,<<5C4f<m y 7@X3hsl۞:8.:<|GWI6ŋrޫWEEي
+pj$;茙Œ#1!P] ON[j7 6xJc~h=Oaȥ,9sxKc.rkzl W{-ajTŝ_WwT}5ua XiO_'/ڗ'c ϫ#N9PK=
+&x֝4A[ܡw[j濾8m+n,}H١]\;~.'q1*6&gɅkre<>Ї-moMʆʀ5tj;N
+ui4\~:dBJ8T!0: Ee6)k1 KĖNS2/3`K CB!7y͗ tA&<
+ hґ84gOY%>~WYTlY3MN2 cl)Sd죈]TQM[ ~p~0<@wh@ŜH L;IDvCL($^%*ʲR{ɅF}f堎,
+y&`~4p  @ AFHG24y_#zFeqzBTmfңэRScR&o<V_í+ DPG"^xKS+<Q-"xXF ufkl$G7"vsD*bǚR$7 I=2AZ@7 e~>-ZhB '2#E
+ƪXc,Cd OaM-(M~N]LDטĽV1i7CϪ63yㅌDq{Q& < |+">f?,?a6tLj4j\BR+8fz%eR^2I`1t{ܚ~b`@s؄@SFmmtW 3لyܫv5[5rXjfs
+&2xqJ5g,º Ad Bˉ}wnOfjp0?I7Wu h%+:K,$Y! yd.oĚ
+oރ6<e/&s֣&oʋ5@ȓM* k©-XsUѿNwTN_|l_v5;7͇w${pg-tțwz!N =ci_c$M#KBc(^fM@?
+m!3m~ձ(nɩ4rnEKzε:xֽ&p֫
+j69 #߯fhS϶ΟU~;u&J=gOJ޾q37|vASrŹ^2Yf,AXvͯF&~˞O?R='dK[*"$DJݹmu!#{Nצ3Խ\ xdžUv32`e
+
+8
+K9bh|l.7nIh^J>*T<HFTɒ02:GaR( 41|
+su
+4F/ǂ"\N Jn8dcm#e.F)ֲh5mc9Ѽr< Z]/JiWPz-5 ;eGeX-aehV>NAT2$]ZuX4Fjbl(^`:`A2a侮j?]w\"g'cm%H؄7*bg,L& GEw%"+'NcX'gh ;|k}?1yZ=N&"gQQ4eFu2 } ^kk
+ٝt@#dh:9h /T:l}Ώ!"<G"I깠BtH=W6.Y0$3'?{';X3,0=h}c Z.gpǽGLz\-4o! $
+*yUW5>G#;6B7v҅-錵 vg 4AcJϺOZܾzʶ2#2xuK9.u:P4chձ*Tqle܄
+rK N&7)
+0p<=NfobЎofῚ,`4{o/9Lp1(8VBN%Eq&i~`=kPݷWp|
+K*FSJVz*"^pd&<7ocx5C!4P@٩PyVHwWE-e+xt0$]NIQ1lG5ب1Є4;%#Y)eڹE_N([7+hQ,3m9<l`Lv{}P5@S`0 ?>x)M4Jj^y2%_$ ET\ Zrȣ3bht`::IЀQC=j񆖀sЎaH H.[L|ZaiR6SިZ t i2d>C9ۢPP)S9NsF'pKh9Љa2u[gl57ZWJE*,2Glkh?Zvd@ƋjGMc0hD {5OB{@
+lflP{p=tA? yi]J-;IwE7Ы1ZQ7ڨ"FJLơrQC7tIQYo Mjh>g@megJ\`<|NLbRx%}c,ZQc.%mܢ)6+fEհYa2{} ;بHbr!} >P?ɳk{K4\iaTtEQ!6iz .w541-MB69u^ϜӧTf0Jr]#AC԰ d:Lw2vO[e+M,.>fِȔkOk9M}m@\>aX[YlWsMǒw#KⲴ\IЄZPC3j>
+;HK]L!.bq$1g.5|̀r#Y<܍R}[q&jؽL2^Sg]Ըkk.OzkxZ~=>G@qmMPt)؞vߝpWigp*R\V xefS=Y^* L6"Jf̓w 9 ߽Ezf<l8pg**yۑRaIkP:TyVES'˅e.J+k2M0IJ'(mqjzq{~ H戓 SsSgo`p5&6XsKŽlI:OP4'ڝ#nqgK.D7߭sRڵ-5{}ӇÛFUGףˑ7mL{&2kj\d2DžokYi8WMe"Uɞe Ҡ+1X= PC>8s%DwgMaN] @f~(,`OD. NgX&>sMxȘ2f!S7b$o?߾M+э_\yzrt>2 *Mv/*êyr:r-I1MR钯7hգIѩS:ۮ$hC A|m_7g?~xw_?{xt5ϸ_v4Č8vZq;c׭x, @B @@$$
+S6N88I_b>ZB90VR|V]ӼiF/їa dnH3Mfw>7xcS }
+aEdǀn8K,BZ*lȞ`wp^w^8@:$u<dִm*ov
+=ls }+x#-`ǃV.`u{
+Ü9\N{x"|L] !菐fo l7x@?ґ iq#]+([`dx%Th`;D+^@il:VӘI؆` 86ҐnggW!THE^CB,}LR*YEˡŒeLt9TI$˸k><q@<9$֓GD;ewE.E5Q.oc!π5Z,Y&HpgʗRF!eKa] ě3g1 mژ |+ H
+P((tB,ȐKZR\ZLʖXn a rrS9yB3X1A=#K߮Ax6PpEA сCd}`RrW.Gp|_xW( :+ŪU A1|8q?b#HiXbSPꎆ2 ( "A1!4fR^2$Q| l4f*RS<ZO *R%R ' W1kCʍ
+NťrN}{]s]l/v^,^oPpd
+8EHU@*Ґ4dB/pd6FV2_v{َT^ܾ6HE#/68"bIsgruLzT*^T(j/}褚Nfӭow~וրFAVYmhQ~J^WKayЂ
+uHa۵|JP2J] i@쌠s}?-~G
+kP'T2_=u!.2J **MR rTKJEP3䂪3nedA]Pig҄3p3{|G; x |3_|J[Oz1..w%=.=-jK`fASԭ@:B.~5v?|iu5{emc;;W1xs8u@Y_kkSd4)K|U]u= @&Ґ4nznta8Ťk)_6)Md
+osOV<Sþvu[}`o%Vf.
+S}M3Za{|{ci$٩v^%0U<FO09|J=Ĕ{ʘJjK^O{ HCѷPkyA֑u/ߙ=}Ūn _+w!DEO% NP<' ሄי%|ƛy:AopU 37̿y:ߦm잷{@]Kʛ; aE!s1EϡariSBtZ6, ڻfilտ3j`r6w,ؠŘk0|Eq8¿8?99'1g]#J~2<.'"2ln
+iH mYru#Q=su.o
+l,raߞ06081pԇV$ =N|@8Yp'8
+uvĺ]}0,`q 8Ha*0`Ă3
+>BռFOk`1[{!/ɂFvD؋qg8sS<]7;@mhND+-O
+'y2><ϼ4=48hKDHC84[px<N)_'k)2+ՐrQ($ZJDC|z f'}<Kz}U"vAC4cvp1ntBekhҔeJlR$_T!eTLCOLא-td;" x&}D# B!l!DZB,"Oi"
+?8N#^vOf}^L[U->+R}w{(?D68*RbH!i9j v&tΣ
+("( r
+ ((X'呷ece5~? /
+r,_5KRқV@Z?}\ڃ^e159@K@
+N;,iΥ BDDԡjyZ5yP(T@tO :
+/P
+!'Io`0Mt04Q[
+ݍ4FL/78
+ :p`;
+^#<]Ҿ{'.<Ќ
+0G'7%ڴ"*'ʑq::bڈfBi-mtY \f%CB- [ b] f>?vЉfs|ΈtrAu)%hy Y| 5U4Ś&n3=Y3tm*v!Ynqٿ9~>8h?5U4Q}*ϐ4xMhJReMI2EclITt7`TD(rYCkombc'<Z_ЍiG$-q2[Ȓ"&z!QGXC}]l]!_XWtCtZﬞ[~8:&MÁQr{߅&3cKȭB\3Fh4k(Tn6ՠthm5F
+f`:uɍK7{-=w=\>ntS_ Ie
+"Yh^Rw$+MERw({$:. OTE2.l;X.hi.{kEݍϺiV ̙DsegO0c(vh l4Yty /L!SzA|k:<Ϳ<0-puoZ`_,m_3 +'YW|Ƛ;.{|QJ_8@L!?z@ͅO? KEu r|W-F޻tpbڏ?n^3Xok/lAOWϽQg> i|q1OϒPOgAE be΢>0Lgtz:ֵAEa HBBH ;T@A nXEq_uwT`P,
+XQBM@^z.>7=y9; fd [Oh6 %37DiDý/B\X jG]Un-uuҎxDx#"户<luC!v0:hF5~#j*3fj:Z7x|m*q4,~|_LΫ8C @1#xpkcC2#BԱ([;.ezω]bωJj /-ӈ:0,Wbb;-lҰʃ]h 6D1GkB (P7"Pdwݐ yf5SKS_55glXau*V;s֓Þ
+bAu#v`g9AD%s^&+d AԼJcB̙n*,^*wV X>
+Λ=k.p r{+.;∐7I5-o"/i2W
+|
+wJ~ѐgl߸IxDG|QlBSTJ@5MHg&O䟃Ze/dN+f'2Bx.b.R\ #
+q\' AI5?~Tۧh:Ov)AʱV M>K#kSќ#l[ |Hs4# &Q0 :?z2`3Z3xX3tB=|^~C)j85Cd[kKewl=Wݧ2珆Es&wpjȝe?$ 
+*Szn8F7zL;_ڏa44G0=qvvWӔЧ5dlH ĶVP;:_BB!d}N?SQJ #+c @+c}x]D}ۨEӽa>ĽԶq- ݺF^Abw9H=ɋf#j)6+llO' x3C&Ҙ*rG{zb겺Y2n;8Ox]'un&cd`l\% #s#[YU,{q5_e]9܎XSN[\M΋ pnqy_s$rCБw%<H!ِb2l#i5
+<u;h yz%"Y{2󔓟)36%16rk z#5Gv͔v5a֋gS̓tt̂r!!iSl&wPK"VfD!!]+Lk5)܇I
+&U/9B )RKkvZܺNK9 drrb%J)kwQ?]d0C:
+Xr) L{SUSWSJ/ /
+k/NO^|6?ŧ%-uҖcZS '|i9)V6_U2<:Mwp"4\WxN[r&^l*;%)(;!Tv\#沃e@>s: fBk[/DwMY1`a{LJ?,NJU$->UTf(Z~TVj:"c:8j:8kQ1Oo2U5Irs?Ph
+KM%/q/ \bO=}z= K#?&YFҋdKQii(q߫C @z?D͝GhOv^+;eGb2| |KY&F{.{y$Hp{>+,wcq(k6nKCyE^C.hT,Z؛jejZk/63IHgtF$b# #JXPDz>N3dDhfW꺯E|vo-
+Pe1ZRLp0{ M16@xF_u7U2ukʛ%!_![UxH(/m'8۟DF )SWV`,i@j &81p<^yjP8
+QqT**"{oV& OHBHR@
+8YGVҒۿHK]E'Ŀ<_Nc!gDC
+B,"
+>j?GXaUx}֧}2mm6:8B f(Ofi"f=s C
+= pe'((I E : yV #&/0 !qSm84k "7V3[! s)N|>DSHLF퍒D)1Z~ȿſwȯ(>k!j:`X XVa7wlT> GF ϻC%˓~%2 b:IxtCx-l6F#g/S>(uZfi r~ںkVnZ{<q דHv"Lf3w$L^Z)Q B &@g G2ϰ+?!j5ׁvG-T' |lB]iȎDj'OnNM?ϐ2
+$ѥZI-YRT%!ɩ!IgHR @[cD5^5slQub^srL{AGFxޖ®Ѩ\nr'I\K
+yEV~:J^9//\ʋcʵSy2(W#2C@ٸ& e
+k1)q-wcg.=U[jRDL.)VXHRJYQ)4H(^QצPqE;}m `i ]&P?uN:fiJenk.
+!9dbC&s&-&L/U<2/>7?7^ë5gnxxJ)?`W5۲CkמXy[W_KQNmLPc> _Cg4HF^ ';!@*J A:=Q-JhW&<>^AQ!Xm,sHٲ;W.i͟3~Usx~Uo;>O8D4UTf/rҳs2RT)BF&
+Ka/Oߞ"ACuBBC zJCږܹ|x*/-h3ѲruCpR|T(*`+lDd T"*4%촚Vbfo,QڣM-283#o^;~__=k&7y|Rp]Y(.#u8Y!3%Uɑ*4YJTRU%dYs1IvWGvk =0`
+m
+۾|WW xںKVl=/n{TYV.“sNQb3JD [B(y AQSpyZl~S6׫ Yt$__s|>|agX|ymW[\[Kw5ufq
+ETHG?R(2
+RȢ(xz
+ݯ_o1Z4 k"u8wo )ϼ1_'T.lHVݩض:o;Uy$S]y6Cu~BVuy[U2H7NGNۡ*;t0?]l˚|o &mFh\t W55K6jVo&lLDJW֝٠MS?[y&:Ƣ"|y.<4;?󉀹X$%6*L{2AB4,NU[*i ޸{5 ET,}XR
+kn*k kMG-zx
+[U6UݳCeƠvڙ3^oy Z7uT+lU/[K//LKv$`cKKګb%6޴mȵAOsj{yd:r'euZ:R=O%EcQԥ1 L&~Fc䇬|=D47m-sƚBzKoC?M1~Ӏ| {% ,
+2ٚ(
+8MNg'̝/'aLGR/s!؞!2#Ͳ}>AhO+B>!0jd2>&O 9K
+sW, @`O, `:`A $;::IwPZ.42l0zNDLu
+sak
+F~V
+ :ۋqA@$
+mPBh&h% vV ߔqE۴
+༖s z,. 1"oWW
+$I`ev@U.!}A *-mA~,WfQ~( Qt9 wAz:Ȩ0e HOUw ,Z[H _"O-eՐՠizA:^QT!Uۀ3\A̘Jz
+Ye|`%_dUNV^~W!yд+4YTe7bP
+?S5XN,g]"ԳmY1
+v-~urvܞLRdW:xFaم"q-E8
++XrmJX1o+=P*qYAB.ҥ* FENx)>x-?bE nWޞIOlX̚\,CmBLQ,) *T/U TDYXef>VOf I> |5˪
+׻=mwlǂqcCΙZL&
+JP1j\Jm&Q >Ջ[tY:N+jŏ4#FABqisa֗.ty[qF׉ʭ-~LUtͷ*rsTOtZNed' JYA!6`1C~6&{I|}
+ sa v~}k穪5Nk6w<N u1Rhx) Rfaʔr,CkRY:2m$Ad2L {xO 48,Ey .ZWupU{y6-@e)4Nʷ0FG
+2TRDYXV.qlř\b('9/6i3R@\^2.u[i*p׾\m:U:rK)޲*be$rYb$zQGZ<DGה4-T E;a'̈jP ҦR\ab9-Sx>ΥuW{ӁƆM1KG 6:CU9i1L2dM'Ds`0&Z{~Z`|h48^ Tvp vvҶ/5lÉkC!S ƒ3y*r4+@/0g Od%5k 4 ySڄ)L fx8O6ܩZP۳ʩg낆K+=[P]s1HQYjZNWU̸
+
+wʦU6*b+1ϰXۓ \̠j?YDnwt\rnW9_Is{ö黢e'rO*?)مhK=d@5mnE7J[n_I^ɢk_:C\0r tq4ѵ>LJgnR %
+!qnBrlDu
+""^DO';:u;A<
+gA7GY\ojr<!G!_%DŽ;f>?S|
+֪Ho=&!;lOgOl&tu0c>c?ixXr0$Pƒ@u?̡~p0^ALJ8 ( Цg#-BzIiJ~uDSKd^#^ 1x/E#>0X@0$O7ea<HPY +dO!c/idluJFMaa#ދ @ h6/*aq Kh4H-\R-F_u2 8:N
+#jXtI$iO^#W4(o ?2Ph3VBiΣ )Cլ ;1|,dt#+kꔁCެ `3XP90ba'Cgq9#T#]~']]>>W^O*]ʛ=E'"PuTE 
+ stl FN% K1dS̀rWD׭XRlҾQ~}th^_ v5Ui5+뺘:I }=82N Sa
+kv02"P 5J̶{LN据LJCfMUЬۡV骦tWܬy`5<;&r# Y@0LTd!?P6Z!,Q&uyŭ{a\`zf\fybW#6S}{#i/Y5;[o-VZ6j>
+*S-Dt/Ž,ץ7٤O
+4mswmͶdmVg;hݰ__گ:kr:CswZ6GA$̍OfL]߿ڹjYN|2PR/5ʭt:]wq^ulr^鼜cnRż\ 6iWAkXPQUWOEvdi;2qr̀UgU-wҵenOEss.ɵkKYv]S'
+?/]|EqUaOɡ{񟈊1X?smG3~YiJ[\}RE OV GWQoCG*8P\[boɛ9K*#9`YS|7Lxt{8`nj#tA.ZK !3̘ 3F342.CY\JnIWNw<J-v={|~o݌k}a+8PƱ^
+%᧔̔r;JRO'˩ NjC M2NS<եJ}K:!Z(gˊƚwx^jqՔ7Gùúm4zJ3MmHi46Qʨ&2F%yYA~Q^30')3TAenBOb#RSrsJ;{2C;.CD6NLjJ}Ffz Ǭ
+*RV9UFmbRYREv >^$_Ez:Q PUXt*2yiYqg0>OI,z*Kb^"z'OD x,O+VE`]HF x$2T_Xmu{W8xPl-ro( kI2VfferB0!3O1[9~>90`Y.<\䩂V#@MjeP fJsL)mVJc uʼn(fXlDbU 2Y& ="g;`-YrUA}
+_7Tٺ0`7,W]t>[k,[]1'NEi|-etn-+"T^(w07U{*H9+s  >K|%(W puƅ5M^;TT[C..%JSRy
+)l!)?()E x0`Np?W7JZث4h La7JNUmP48ȕQG$,N=Adlj
+cŅaM@,'GKĢ~lj(EK V}+`ZwZaU0m;m嶱פ-Fv:MH<T%%kRUV\93(GKkr*r"+w9 Ent
+jj"TfjppI wb&}]}Zͽz*J~ qGZcC qi Riz+>';^WTasP]FbRZk*"Ҁ'
+l{bJ7=
+^< 0څm?lv\YQ3uҫ .{]$f QB Ia1}}TRP_6)Ot,21`h@8#xGU
+^e.m"/M\0^kd>k%7{7>N߿ tv}]e2bGߪksx-[Q%}\ P: x B2>iawQM6ܵqvO;>9Y|~gok/v_ímYleg=UZX&s cn.V`P89 ` @{Ñ>Ӊ@k}_dd̶ۜ=7A.VcCi"D$3nۍQFtj*
+˨_L=
+ |PWhUa@ۅҪQz-u~ ;2l Y~v7D{8g6Y@2xt6."B
+(؟<}$:m3<Ag>B}@B@<}c rx쯼rV WE+'0sIFwF_N}GQ;}P'F4@2_ 28RN " d]
+sHcA)>a'0-,u
+s?*vp y\~r6.󕤍&d>pGyOC@8<
+ݭ!z(gmO.ul.=C4-}5'B7W+Mˊ]]K,;u:=>;DpD=fbl@4LnVj gd|Ck^,Zu!27rYY3S*y}.ɤIuc:#gCɟKP<P2 v
+|;ZA.rtL/s-MzQȰmY.ri^s=GθlL:EMzq±ʣ)kGR*[}IՇj4~\Kִk߫jwkwf2d[b3u߱fބgؤ{EN͹$; 7i#ܤRSש*5t4{t5ݺ{mi[zUJ3 Rl kX<npǵm^c[J)oWK=/&O-TWmT]٭/mחmoKߢ%J4R>}~]_oX5lAY5u
+Nv`51JcZ7@o@-o5H<ή"_ϭ)YRݝcTmIl\42l23V* {eڌu%縮^c`XC%M czJ2{F"Ҽ4;bY?~Y#g(TY޶XL-3\n*5g*M;טdNf2].4=)]9ԓ3('aȷ-t"mi︆Jٍe>qJюȪiK?/1/ )\a0[6m\C.`0fȥ%各"Jn$9{vkHK;>~yίuޜŋϚ7wyZo0=_V.ϓU6R+W.˳e2Ҧ2e3ٲ/dsT[S/Dm2-Frn6pՆ霩ZS-v8T8JXU,/1fWNjr^<-GQ-ϨVg(';CkvY,㹜Ș õL[SfJ`R-F}O 7]|X]y[xuSH}[Cwmޙ=)[P(
+TF6E*^1S(cȉW<ޖ=59FkhbւZk`A n6/V6l㢞&?fK}`mKeUϞqaY|DNqRBZQjZb~"./OWw07jg*reD9yOT_eͅA}W
+i@[%2ED|*5[)jHq`s! t‰nŽ.e͝ƵBNacIcgSD@v}Lhjm|L|urrDeZtRDZY!<.업T\5*bG0&`b/u
+:$n9G|eQ№xi,YҠL n(I n<]x$I؟ts[Pda&AT*QT*i.n2*;M
+ 눏 iO jW}۾;VQUq:*zĦ·H}R<,#38p``t3[ Ctk_p-:a8+tHrmHDMYa"*4Uؿo<ȯX!DY2׿
+7fG!GHBkFPvR躃+5㪧YKBo=C}"C ~C +|}{|W|*L{? :zdC=
+ (20-˗c.Ks#/Lp?
+5,؈As RPCK-q2s\@ MW!Sњd:-AWE譫ej(]Jo
+D M@Cf"t&LdULd dgE-tO︟Lpf>Z`fAEK
+D1r]ih@j9Zb9uDZ!͐{ܳL 3Xb|1?K wkd΅tC`QgFEJ3 mL&)lVWD>Ѧ_=-t#tqR26͆i3vlvgEn]uq*su;#{t
+}ܯ?ޏ>> _P-Qms?t;<wn"`j;uo F1x~N
+v u:vys~<<s nσdz 4 @;g! WփP*k09x~jz)lDN5F仐}oCy =wKMaCgaansx5>q
+uxЋ
+jì]7E3DU vB X0@2Г\[^Vŕ< ۢOo!f(1{eJF$ ֱZq)gx7wxJ|[)╋J/ay;_o
+M[Yfݫݕ#mgg)t)5[Uf:MSVkU.BsM-׌qR3%W#3M7ifNABF [m \ A[v
+[vTNTp bsL^&fJST
+mNLkФhk4~MxHKP;*ԾQ'k'I1 41&У,SkwZ[\z#"]Zb#+?%15W)U"N8NO5kx#i\T~PѽRsNxٓJc@dApu7X@@M>CH5uTzS
+^DvYMc/eՙFT}iffG !1j.P(1
+DdFAe5,g>*#xܺu{s&HY-kURܼ=yekխ^wcU\Ì_: f~FϠ!9Jj2D~QW}=!_sToE)q)+
+2Ss22b)8]pcEtA[JT~oJĮ;GSuLЛC
+KzhO<Ho-o$*(q ?_ߢX{.Ѵ[>R<I=xt^G G/DmbUDdU
+:C/cdK*Ksӫ$G{{d*^dd({md_
+h~:-zB MGDh:lfCB\ y3Ș(RQA`"6
+SX(bpa ={(:H('T2Т1->K_OZޤOJƤ
+;*[:ր:ϱƱ٣ct;_*۩@^
+tA !m84t`QEHC7nJ6N(caer`P'w9}
+EUh ʸ4T0P0Eo)ID/{@{h-Yjk/̻=2-,vxP?Ӝ{i=Ѵzgޢנw(#X37}1TlZ9u<ȅGO+DN4oޟX>\gcL0|qAqˠ *0HDICv$ {N%$
+@T\^ю9v<Vfl;}XXwx#\纇{?ލ{F~t]ƣcxt˥YaK($_b.]Y==jy<wxugaǛ1w8
+sXItbn0I=+sA׃<Jy|v 9CBCOа٠ Q/h*XJ6m?!2.MU5}Ujv15:drrr:B=C f<;x9c2|1qbcLШ0 .VI;$+yĸek\1,l~1̍8,fE lؓ&V
++#ORw pNLQ^^]t`t7=?s=lױ-wC|ww@ xyr_7Te2m16})x
+v9DOXqr}c2/l)qmRExHKr Iq9.#7%:
+#[rtJH2 FVͨ51*eG*d esR8"2,MCЄY ^uJ&2\_9gR&׳%(k:[=zdSW)3~VR.E9Spc4/C晑f=ׄ٠l"i9w>uwnj"ppPawE]Жqf I15rbEJ2ݚ.Vg
+զ|E`V&AaK_}J"2FTQg.x
+N +Z%̫(za{>qe=VkFUdH %Jz.cJ1r5bRKj%4]sIy"MӾi%kEiLPptǹ
+_P)ԺWrgi" *n`F
+[ȿ䉙 f*Dm
+" ?_{;ڝۦXS %;{3/xg|{.F_(!S9JO:sNBiEYRǦ8b[QIv>۱Q4o>?B<\к2>wU$Z\PUV:2Yt;+2)9!IEi kBl٪UE I=܍P BN!4B*Z<Z1zcvN]zm8cu*mjꖪbTZ|- ?*b
+ ge&[YJY3,>exp
+Hp! 9쩐B7^vy"3ϸ|Zp ͸!Y:
+ASBFzˁŒ
+:\Ot;1-{A n} p?@"=#0_D1E0fӥÆ~װ1_Q]DDOBwÏ N ;Lg:A[D%Sdn&)&R
+Bh"h!*%!(Jًșy'$3G;<q[VTK9sj)X[Zzl']oX}Y@q5|Ār"/@E@RqGp%&JM鈝#oi_*kJN魄߬7ۤZwd ò:[Vk;-fs5ϥć}ʳ1u *mD.Kt 2W.;#L0%*kg+n+/R6$}KZIZAu%yRvݪsBuD]8p4hKbt[L,Ȧg˽zs4ޏfsẐ[3t9r텴s~P\tU8t-;te{tJ݁gOd3Z2 3 0v(B'8RY0 sIW0O?h='S(<+]y.+;5/kaHٌeR? ŮՆܮ"wc;G3G2 d
+=y)`YM{ bo&Dy ؼ0 OvF5uq ".ŵ*@ @f@ % vv= ADAPc-[G匧uα=3z[l?>??{XONG=pWyiE,juw`Z )'Zqwo=ϯ j#X3y$aAl*/'#"!҅`;H> /[)Ao\Ot?!z]$a\x?AŔ~ԇmAn|8 oP;!w!-_CE Ivϔv8VpG 3<F:fUaC
+)y AIiYREZMk6ڤ]a-fxI\xvxzz9Hp[8R }S3Hp7 7sf ~Η2\ϧ<ոo21ȢHmOLoI00兌rSD>^Y+2JrIqT \N" 
+F>2Ӳ:MH1M8E#VkFIYJgR\^Ҽ$iB9
+Ĕ tAeƧfE<RW.;k%OI#R~Z* >t2/"RR|f?'j
+;p~Q| p~3~<7xekD 0۶:;@KvVkiK΂&F옶^LI'T)qs*3eMFgǙLq\e.׼[5]*#^q:*>@7vs߂ݠM)Fc'`ݧkTȉRISy lnibqbb؍HV㣈#FE)z PS
+@_.1/qQDo XN\ojߊŕ2wegF/7[aх箶@r?s
+墐Ԥ_7`|9^\k3G:0qkQY@]MP΍GH
+ұ9lj$z+=}y\g
+t4h(L$x,luX>VB߈ J ܯCȷ!M#B
+@ )
+b_Z)=@y@@H0!Uh"<@?r-C 4P.O_r3s3O.5i%ژnVzHA.'
+ϰ/O)X bIJC_R /H "T;!t;?MNРC bLNwʛ8Ty\ou&N.bș+Fe-ZdҴ2 kADA-X@AY$}A@"@$,ְM,BTj\ѱjS;L]PxB/ۙ*93ܿ}y}{Ň(QJOԉԊ_E׊!f%ff6c
+
+S񐩔07to$.fp՘Az\G֐T.ث..eY&mo͈gS[RY XVRɚJY'PQ <Nlu##{̕,}` |?G50T ꭎ`<K4MU2EMPyz\.ȖY C _*dlK^q
+xYRTQ#JW$nQhbTL) 59?5?<qkɏ 0F̠`{B@rgS!αQrx%U*1٥28VT$LUU%nRmOLQ%N
+6MKTKT4,x &;_+ AW?Mn;syeϳ!ѯP)X^%Ό\NP6+&bOX+8T;,W̶QI%iف}1:]k53J3ڮjݩU+mI^,Kk̈IϦ'j
+42f9՘84vq_5f%
+{9tbЇ᛿{>MO;ҶLZ_%'H NiOmk \6P9Xv>vjގHh> l.+8'{
+
+8CՐk(1Ԯ1{F[I1uλEnFkġÇޮ -fs76
+?E7ŶdF|oVn%8G!yLOo}Mr:+ْ3?9ߤQNE7/
+ ĊB塄XpzTKc=?'`><(
+g@x/,^%{ cM&
+J)O6`_AH5#lvx 
+w̟,(-Ѻ-'KDY Yr;(Gq0g:o1zE)'VhYXPSSlWQ~wmgm/ݶw+vϨ0ȚCb&9sY݂<lY$NQqԓg:-v^JMKe#۵kve:%I$<MzF[iSsksG/ SȇM"X1Jg^O-)5xw*wygyg5<[<뻙)dvHkzAw~fduZ[^s?*E&Gt8Bc!
+44G0֜7FL}8ڕ~ߟϺ4: Lvqۃ2WNN.o}+v˚dGee_ !yܫQIxƅG
+sjG\{3Br:B#MNjm3$a||+Za!EAEE~EYyͼAq|_,YT jjY|@
+S$
+R3R
+T$TX@AA LXXk\hƬbI,ѻgx̽ywO~}<\^ c-{ cמZ3ǶM}urY3-VeDd,sZ6=yiwbjj”))sR(f4(RZ)1)71ɃA1ɯc?& }kpȗuRl/4CUbZINA^њб#rbR2&\5obtyl*ELZQptfETnA靁"""#
+#%p-,#iO؇KPUbR+LQ),[`U8cyv_=$e9AY_go
+>Y>!/}B2 F*kp.w;Mw\TV裴~+&KJ̓gY/s]85 3"wX~Oh~!_7}F!'=+׾3h0Bb >Fg|dľJce+]VTyk/dhcق +blq
+/OZmFY{p:7EWEYy 砲+N%CE\nf}by}=yϯ`U12wXagɒOiRFm%&DpB Wf:) ʝvʃ6U'U]4d׆Ov\a Ζ
+6c^D7;#hɛf7Fik՘d6qgchQM<5^4tkԽ]|4,ѓ̿-z
+p]8}օmK躴˦mqnۧvD˱o4'<ղmt95F
+Ojc4:0Qܡ:vDH:㥓;I;WuvnTԹKպEeb_T&tvKƟ|by⍪wj>Dn欤.=
+9Ǻ`3^9~hs/Iٸ?P3 F$SSGDI$͇)I´B2lx5iH涐rgȧS!I8y7cww(8%x/)c<
+f`=فt0DFCSdzoҫ'IEY^%˭~mNy|JJ|*Q> [`uW,SބX'6
+"pɃQKw(cW%һ
+T[JN@ lFKhemjD[Эu =F'U%V%zeBbU3+PY3y"<pݸ 0wMz,f $/[jۗ-h$]mo3X672ZEZQîR4Tts*2HHxHb.XehPeAcP \3naց$
+
+^e>,@?gkaH_5|-zoP_""Hk(5uxmeڤ`(CRKxF X`>~qtz)^Wj|ȕ‹-z ?W8=
+w]Wy
+#dg;k
+N_rY ,ENZ5.+B
+9\K,?=T_)A[.^6_\EsPpgp(xX{Xg_Ž!{B!ZCU]5RyXTQf,aU9^֢~C)1(L)6]R!*!<fyFȍ·8#BmT_i_+=#ԕ1oɻb&iral1͆̕/䭆%Jysl)6_SESSS[c{fC769Zb%%Cr籟ľ:/p&= Q$͎a҄[hK>'n4i t&zj]1Wc,[g,622 jaX;!b_@ !B dMl QO"8nxqicם:v4Ӥ[bil̸xF9wyrx-byF϶6|G8f1
+q&<Ra8&;dnx&ʼ6 ! Dh(ljND/e>KĜ"c$6}7}f~})1@<NϰqO8^nc|W- 7K,%'y<
+U.rn+uqܑtw1`k~7pVfnQg!PK/3
+SMlwΗTkg SfMi<}("d?:?:
+}轼=ݼ| W 
+[߮M TrZr7
+^d6Q&#a#d#}l דd_D?9GD+)<$Du?Җ1Z[猶R+"_YzQyo6` u[tka6(6#ɣ\h%I҈~+PGu ڢu#dV&؈v .7 ~Txuƪm1y5
+$.A->TےVx$E!MRjl"[*~-z|ɒV},%!W <-\Ex&kTs5ԙn}/ m0rqQvLǑʆ84G,[Tɶ88"-P[ P,E$^ zCMԾ>Z1o9lZ m0ʴפtlo.oQhT Xy)U(RĊ&Ne]Gn ΐ.[N+NZY.{SZw?T9/6YkKyowpow`DNڷgg0
+vlwQ5hISub!9BuSҦRxZjWmTVvFJ׬Ǭ"SVQKĶ]؃+G0sqd3wBw0t@GO;˵뀷*, "EڪZfik#iekzR4cB2Ws2PsYX88I4dM=>{p r^" @7HՃ_I/HSV]( \&@׍qn#Н9}@w/*QtnǓ9=~=
+Ʊ];=^DQq
+^j$Jr-@r5Уq 2g*.l8B/D ^MAqSٗ 9T3w<F3ܾ$׏\72m d_.Q"
+|G/8~Mq_...^pkK'2VMr{Ѫ;N~CޕWF}O@ݤnQwOn W8(=e3~B|)8[Q2R Ј F &f!W23q "F9m젝=)@mH=\kD6=у-=xC0=)|j$ɛN\rRJG[@f2ʸn%KToф8Nn\'}Õ.9O? pWDϠcHr9əMNs0GYUdrk
+)"+xTjp9:αj1IO\\$|!91[,YqdMg̓LKZNJ\MN(|eq8#܍vmLʞ`-Y\*H=Fkݛ37ɚE|Tr"'26QTutpq;y:DAI$HȷD[w%>PpNO$8-)4|Z)8fV8ly8(~E)hT֡Au{UgQo}{7rP(`+
+H'x\E
+g|%yeo폓&wQq82\gbk"m)ܖc{sQ{<JPQ]y
+$E@{Sv6D
+{%ǥ꛲|yjAU V/<}gk oaw0qu~6EV!+ՌmLk7kȋ4 %tzm@N-~dQ֞WPfiQejVjJsw:_Ŝzl0l B[p4\oU>DQVn*SMQfU2jJU.W^h^nfEAOm?fLn]NxlW<:ߜ&lIP9[#E%޲A:E@u65vvvYv+Vۥ/gۧ;,ӗ:,W;.7;.֟qZ)Y)yS׺|MYcl Q饒qDM}9FͪḦa醱N ӜR K S ΋ . y.Ɇb$C<>D)9N'n u? ?wDTb(GXXe}f6$rbxIy)t9c,G^3ӍS|w㍏^*<6+ߜl[X
+xbML(sxoYTQS,F$sGy\S,SLSrnSپ S~{L-LT# &š-cX-Mn 9\(J\.haQ^3,#|Y[&MlgY8ђ h,h6x;Gc߹H2 3
+l2 DAvG`aU6dWѸhmh&F5f['O㾆k{}9咟7N7XK\[#dP0'Mtse8)].m~<Ш"9ĬX9 Qb`/wʒfΔK˅i:W5E+JE2!Q#QBg q]~ <Q."ٛdG7i2ASݴju+2 [clӓ a,O$%jVT#ce%K7I⏮BIf'A'962)6
+VyM)YhBek蜘*Mʋ%9K1 ѩ;QđSn("yN0:|LqzCd[t2~衺
+E()*,[4U 1Kˏ+ώwJ.rR#E8\.Zv U*C2
+C2WtzkdB5%Z(/5Cq=
+ĂRo]EiAZbE16
+˓#0rPe0Dt,VnH90cPSWNA9I3ߧzSlg7i$@JUȩ"S;O?rQ%f*cmdBK3*KINҷg ,=1sAeۀ;++ziWs#v^U_rW!
+iNH#HWh 1\aJb6zamMPm2u3kNoWsK_[̯|bt7-UdHk-s((ȹHjV;HDXlfcoМjהkVSojML}Lig 6jxlYuoL'8]:зIc^p&ץn+DwBzwAz!S# }|RuU;ճpnWGStwT_qKm)n?~1kt&ց2s;TDq=6TFR`m|UA:^%sUKUzbUHUjmvۭwXi9-/6BaIFZ^"[I7浜{^Ablo6<ࡶnjԾz`:\ऎ8S\,uN
+&8<"`"* iN l7.p`֐fπͰ#Ř> @X |8r+1uC
+|6ec<ft1?M71#{sm{U\s w|>Eˇ(\Ɣ?1g>sB^@6l 1Kw8<΢3IWy6qUq Nc+/` D3s}6܀loif3r> ~E?6Ib99zCO^;zԟ1>/ɿ-r#Yl6٘=uyDs= Lt50 & _dqR-ď(3 -x=0P.1ɺſn)}C4݌11+n.^"(z̠OI_ }U6:x ^zezF2m,#\㪮[40` :1X2YJ̈0|8:Sˡ
+j詧XKO==\\|}y\dDx꧴ h10}1/ķbLWȤOIO =܆05p{g=j/=\QIi!
+"@AAMY*PQPTKTL3-5Ki6u.Դ]LsfͶ{mjgne?>x<jL- sqa`d/Q>0dĜFaPW>fuQu<p6;P>>B|\q8hupw,8_ۀ@?7WfLԩD7Gfi 󘓳?1g`}N
+f"a:rDN~LN
+a) ?%%
+KM<;,w1+Ap/DIc1J8phY)L/\Y=Ly`2 u޸>=q{a4iw<i8"igH;&?!_7|%!j],XZ8\΅c+
+1i&!8!&ľbb<Ktnb$q=;q1NLJ %n'oOCH:HO:NK:ӛtǧ' ǔI^|-sluR{՜~2$8_O3&ʢt]N2$ZC.ZKPE>QoӷG-%">Y!I$&;U*Z,P.KB&޷ϡ-`LX
+bwJiߠTE$fZF*Ӻ$UNImC됴K{ۤ;7J[s ҅
+FPe4 <CCL=Fg1h jbJ':[P"P彈Ry z2d
+3l#tۡ( ?zjjyO-~O-.q }>_{D^dJ1*8P^ % Dq״6*
+[*~ki~c+/ձ;21Õ"$ ʞE*r_q>,2lGq og k|:ֽMʯKJ5tպLw3mOssR\vԵ#qm`vuv
+[ftfo?]3Vr7I:< }fmN޹ |qkN$4'hRGuGE]q;p"*\Df
+gfKBӗ~ñrc՞oEU%
+Ԅhhl~qGȼ;oͻ'8+obkjL=]9!`1p}_ H]A_^ JY~=:xh*
+OKh4Pؤ1%aN3eo1QLV{0dF@j\ېl[JkRI%2<9]#y`wk~гs nJ|σ=c4s4fUiSfe={+ՓeJn$y6{7y=ExjS\e_W}+W/)-l\1eWL1^=sc*؋8ieDƲ<mf
+Ws;|3+)f4tKCI񌈽-
+TB}
+*To|dM7S&ތf@0xCu鶯<]JOZ/-'zp7Ii;>-R)Bc E1h7e".{9p)vLhvЌ^Z΢/ˉw!^N~ȨgVr.g 9 . %!X4ĥ@'b$,~_7~U-H <ODcafL?PtK(:^r #&]8p)rr.(49$"'0tEN<m}IOY/P00/K!Gt BS+CRT2Z(p>>'|_³YGJxs\q _nЛ-tQb
+we_̹n1s1@D:J4^?h2g~˜2.e% J9sg?UOUdCW3q~#l>Y/t uBك=(>
+w.xR-N. .
+maUc+%ҌVJ
+}-jyBE E
+с,tQaԔ$zRUWZcZ_;lVzy>ސr7o@5WTG=n 1^;ʻ qm>
+DE))ja? b|FAMУtb;5c^|\d|f5YУ-lRŻxwq8=hݨ:XV,c
+7h\FX2gߧ7zt]8ߡu;:E7* MC ;+.ݚة^q:p~ W%8f|GI4Zeb\^no1T<eƲ6qG2 KIiaN0,Jj W leJJu4X=VxL0^E#61 ֓ϖ]aQZ+KMfC|ɜ2VNI5v&j8Seec1=˘M/3& h#cW$SE!ku Өc#hVH}u`uD 9ju˦2&حUj#f,'3YȌY`=-+^J)4Eo=)/x\j' :I
+Ƴ>SZZ#ݖ@Tk`sUmѕj~EKilYQk5bOT*%X<XؼX๐PyS$V(!ļ⼆Z30;^N.ٻu{ԝi*;uΊbU։&QS${Kq;"ؾ7c۾jۿNpIݶnx}DF6!󀘌ap3G *"4倁W_#^I~v!^VI6ߋܭ78}q2{?n^13 Y0مmo2_?sD#,ϐڟNEmGEy~}v):_7p;8-ͣFgoyv}GD:y; Ơ=
+cK`>cМp&Anhb X"J}("0+|l"#:CzFpdu
+Qt1B!?faN%9ysz&[07!rc7.;BB8uY p
+'^
+Zj6 usZݴ+:Ugk;i7{Y>*k|=|y}؟JL1}ɔ[dN=9XZu:O]rQK:+Ӏ,_edva_㓁9FDSTWдBmqJ#_
+ZKFa;x/.Er0}ܳwp-#{<F1hf%3YQN_*ɩ宍>-'U<vp8,S,?ac ɓ|Jח
+9Fm^["Vkkj8Uv8UuZUTO4?褨,Υ_KO~([`$[敇vs]eu2X肅M]NgՆCBf9Wq^\[\kĥ%}=s݈4_,_,O8dW6y5^ڲ;vX1MZaMKhBY\O%ezT'-ϕȊe᭲n.9wQQ߸a%2mf⁝&j m6-Ac*EQ!B\j΍JE\
+2Q9BQeQՊCnRd60r4qO7u=-kni<5gtk)mi09EfoT5y Qq\0 3\f9T=&-;&}=XalH3vxƮL6V&(W֘1<Qsd5g7\}ZҮF(PnRdA%)?A'5=Bj7gd4Sg)Wi3)$sjnSYk x!<6SLL*sJsC;2؀])jʹk1day9IziFAj5)lVG%Mi ul2YyYW{[1փh)ڐai2<HcYT+cߗs].FA
+313C#tJOI咔$xħ(M,u-+6+:ːTJүH9
+ORmW;J}UC5D B&0|j, ?[\;?A}2eâ0̰,(JTⒸe":0 (pkPѨc4m5ڦijjR.mx9clZ212J@uL@kj̐! CY˃Y7 Jz>0~µ Oy|.85؇4Zr}:ViJ4`ʹ(%+Lc:htVaDVqXfA2Y2FO/==o}2
+3Ψ~+%vUKLw1Lj<o'MX2xh̙({
+wl)u4fҨVz5M!9r<r^2%چ4Xz&[l6K/<sii9mOiǽOwtU)Fe=4Ge6[ΕdIp LwY k=B5] x{WUS}wO{w4\S}WԫۜjϮsv{v}yYcY_;֫9ՒkTzbssvu\<(N]G%h0c7cW11ǣcGb^ᅼC(rNJ"5}vuP):. :߉%,I=-r8::ޙ#Ԯ`" զ`"9Y
+^~DA(`-GmFE9ss{2KA|JS"KW{SZ^Vk\*+W>.L%**c~VaEynXmY=gDأҐRb=R&EB*Qt=@Pbit7u0nf#X &J-c.<>v:rΫIRr)Y)nXX́Z5\jt#TpkIkX' Bkeut[kpv͆=5`^K u١Z
+,osƮj"ı8vr#:.$|r4z= ֳh<ӈKt]Bz 57}X9b0#vHuk'~~.:sr8<L"&
+D-Rg芊՜Gyzj@#w R]
+5FfxG$s 8:(%f{4z}b3-f0pI?SȡD/T(ꥃ٢ym:Cpf̶ay~x3W7tع2fJF*=rw> 79߬h(ܞ'
+Bzh~qx4V6pn1o1ǼU+^k__{}~@7:>Efh~PTxŕ3"89xKZ 2Tws8OtRtخLT/Z
+cG?ǘw֗Qx92 Hp[<'m ƒS*1Npk#geQI-E-5F~RÇr?W {CTլ~0ggc#wɤC젭jdmTij9]l3Pٮ*,SJTAE۴ʿQ+QG*BA<>zu ~qքv|7g[sUʐ8['i]P N+,C%aT6Sie" ܥZEK#vkIZmCqu^Q>m`%0 # $@ ]#cK`lu2m:'Iڦm:dLvI;iڸnijy ߽O߽74̻OyY؝F뿉s+/" %vҪRE+Or8hA-(S#1:\>:g{&iv<Mєj&TиSFoӰ}R ?rUY{eJ?o
+.uYW´m*~ifglyM8q IZd\K
+:p;X㿬ÞeoFKCr
+{|ݽiXQVX^RToПXK?/܋߃ucq1 "8½_Fm\
+T0~9o4juz۽aPXjߘW}'Y"[{Q^#34ݕd ,{k``y` 8.\ǂDZ;'oup Z5(rS0&
++CrcZU.H+B/HCߑ?wĺRmL_Yp΃sh>@P<B=c4DyF <+Vc5V7ǜªGl6K Ѩ<-FĺtBmˢ Eo
+4 QP$r_\~(Ȓw%آY0Gc tw tƥ?NN9QT&L\C+x@ %MbHP$뼽E]q v> 
+g5î}J7xf(.8$9# N#1 JgyEs OqevqA\8`΃AhxCNPMnC%s<EUj Q;>{C6GG?f?{]P(`D4}R}Lj=ݭwLokdN
+S_)xf^!A/o^WQO1/3?U<SY4kT9*u0`4h՟1_j(t "3^/(ڳL/}G&!F'./t
+`Zs3Ï8kl ͔6d7r9,ܓX:NtOI7}
+}R^HQa
+9 F)+_z"lLiR
+;6QҳP7 Rb=z5Fy9Nqc6˰ZjBlf8m0ڱ۩GK=B.q7]X؍]DDPߏ.69gˠ2F1 fg
+9T[
+VB.YUz5I]l6 ʪJ
+Bmn߯ྉpcob+V*,R90`TplWYR8+tRT>v1:T:֣wRk'׏pCm,qMM凓 gBb(sJ85TA=&8mpVa^A>afr_*+qq?kyL!pG僕m0iP5kiVԠvR4ky[jR!XݖKj%ϵvUkzuHa\cv6 &[6؝t$jMdS>0_+i;6pZVk٠EjԬvWjܥE!UB^т!vW;ԧFq}pptm[x7r 2Hk~~:FaZ>|ZlxZFy,5%#0RC>t.ׂkU3rGRUc*."=ͻ_{ Yǣzi?vpoAz׎Q65\"2کj !<CoW} Ս)TՌ_VUbUF,SEj͍O,[ugECI仆/w>G^<;iuYcCd(- ʫTUGT5MQ"ܨ2Cy|CYBCit$P8;f;bN b.gżmiV}avim&u梿],?@uP8oUөJga3PL79g88;v(Td*[iќ? 'ZŽe96h/$~u&r<$JǗZMUpm(uJ\dSkЕc.pg,,3Ֆ܄AS$<h=a5+Ik 5&̚/7ǜѲdf |ǯX4R-*Ui,$f&&,AAS=ϝl|[w-mMv3[޽4T9d{S{jUp'
+LK%*Tپ*LL_a/4-c=)%(;9HαMIηg$ϱ}i:Go#%e×r#ٷǑ{1w]vx阔 qp7Ytj5:W9~f*/}rQ1˟`淦e'pҊI`9_HoqLwcvwvw'w7ׂ[07M3U<7߅<QNVnUfxCzeJ x-@5)ir@cb̑qMWV=>k3m8j x=6kGl5~`g4Z>@ur
+"
+ h7dEeE妨t jL66&4I1jk$Dicl{㼊˿9}B˓3+))F-hu"5gi`nM~:4:w5<j7O[ l[nvxMq&0=ԥැ km0?YiͰGh=FIC=8>k})lgO3۳LcE8{w}w}hs^N{JhNiZw3MQK ^52,I!ʆ&Y,欐g9H4)3JJpL2uL3q1:z8zrd(7tFd2Ddhx]a+~;ay s̵Z 7cȖ8c4ڙhE9gisF8m
+wPө2 u)ԹSC($,+_Sp Y?%+d=4fCa[9ғX$'B)ȤHWF*8 sMTkRJr*@W]+nCE/˧--s=p=0\)哳v*Ey
+q4=mjj]
+zgN {69'qk0b06ͼao}b<\<]M C
+ZGa付L; Z^gNgRIpcRO(g=c/ChCa}G_{|;?HVs#>"ZGKGa[yi
+&iD ~tB<ˏ!y# `GYG1zrd`G<t몤UŰu*,u:&h^J^֏.D A8+&Heqo'=dsuNtT;
+!&>K3 f KgB~"a4Ġ gfuz%:.ӓn&n
+{Z29zw~}ۗ{tE?TDKpf™O|+ݵ?T.^Rk`T6Wx'?RG=:vEx
+ +0f!mķsTd?S0JaT¨QOmګV:h=Me^k35ӟa^ OR /\baM3/!20r9 `x#ଅQB%GYi#QANn=B=w~H+BNicg&a$g`,Is)Sc=ycomdXZ ovD޿uYO^p0(xa%I8,lr@\ kp*U
+W!szǴ^
+/WUサ{ӆ+ͻvw&Gwd7MdC6&ImhhB)BbN BA?# 8((2< u?=s~{4©\ږLVM^ѦR9I4hF+NJq~UC4|Rq4@6`Xtn_lu֖bMTjSOzm,\6viOECJkxZx>Q&`}+]U'Uy#U!,Q76q|>6K_җ\L[[I_ W\a F3F_|)ft1*'fjnk-}hk-6ܻD7}~XQD7VUjkUUfOU]ivUö-Z3ck>`_voqho)/#¼ [~x7ڎ{~mdjгBz]f'hzB6O鱯{!GowqqGwj=f^׬-+y}b]Z~y'6. mw~l@Cg׿D<uKW~j-VGjǭ`n_}y[z/WIE? HP׈Gi4Q~,P,hSgpl-AA{}0;,/1q2׸=ӴZt ki4~Q:{Ὄ38gu6qZ?Һ&SrZPP}uhZP%&:<kU/;*gGeWm5o]-\[q;]!|~FPuU}D6K .RH*RgDmՑ6{e$fˣ){Ytg[4z,>lDcG^14Zߵqk8JQ踶]jwZ$owVu&VX*bFYt֙n$6h͢،Qس(5c_3~Vy]/+wF^ǻf^G{`( $
+z8N9;MqOi:|9xg~yJHut~TxKa>cRJ<m3aXf:C_R{1aH;:{qE}^dô?S_VnDXpsNO?}G 31DσK0/&ߢ1y>f`\BW5 {v쵰o%{%0.^<oAP8zXnzҳ0c
+x^|RLQK螇[pc%{=z?Ӫ箅%!Lk;~N?~;< id8}ջ& ̣0|7B @/dL&6d,6Y!8I DDTP(TT˩VOjTkuhW[պ)GSlx/_f{}Cw6L_Bo:Iw5]kt;B%E:癰Y~>)?SJg?> wNJȪ'թ۽q@/ q8f<Eg$SL~ԝ L9*ަ|]:.^{Qu NQcLjײ ,&S+|aC,|{8ߘ/L qYgʃdUpq؇;$)9&H񼔔ԽV߽ol~K0̵X;RxL `eqqè#øF]xO=&</y/[ݛ;}Vnu Bϊc?sa2<Q++܅?d]&`L㹙ܡ8PoDuװZX}z >7`r{3g1-  F5ch 0ǘ8I7໕S{+f.cXK&:Nm}WGmgx)r~daN jSn$5|k;#FFl%{c63OVst}űv戵q3W o XNp4%Y85O㽕Hv"f3u)rb-|-cܜI(;BpG!J>=(W60LxvU{=iөί`"VÙUZmT8U7@ǵ|W1bg:5઻rh?Uh7ϗr׎mRՌHWjnN6!>;s+8UOܨؼY?oƒjyaEhY1&52wg6z.Rmfʂ4=?]S
+4Ԛ
+N邅MZ]㋺[<G4S4B-Meh(n#_rL}iOЗzpsۉkf=LdyZdO/T,L+2*5QhFevj4W#`V\ަޜ+ԓ_ݹ*uWGuf2k)}v;) Ztת<CZhn"y%h(F
+ԟRoz
+)DеtJAuw~یVFqdhZ1:e͸o(;WO 5&$1bY昫G9
+;+tR݅u*lVgaQgZ<a4l2Jv LV1WY[.}i =pg)Eg(֢81-'Qb,ߙ^gB
+\jo4&W2ecf}مϽѪujX[*}#UQUu}arrvʮ kJS1噧O<j8qrQ>OY[j*V7jUz6o[ES*rWkU>j/Z޿Xl.epԐ(NBQJbA۪\X Y^*_uˍ[hUtX>6b+]es[wU;d|Gfaꓶ['{dE ]'[-Ɵ*"yep5҆6c4XE+uqioko26m4oxe՟0OZ7 g ~
+4QI*RW$Ӛ*wk\v9*x@@X6dŌF^6#mv۾#l}Y-'
+[aMZ+Q7̶Vz.JZZz9r+C|ٻUUPrCM PfhL hI
+*.t=gMt[3]6 n5w?%Ҿ$)'CaÕZ+5ܮpJւ—i^xkn߃J{Zs{_Wb?4S] {g nue+]*F6P) -+9R"J(!Ҝy.*4?yA8 4AA@Q~98"P+xIs\d6Ҕ5a붩զn;n5ήl^w00||}U2_% 20ElEB ZFwj{%|uU++dwb+S+lҨ2 ss9ɐ;"'ue
+F&*ПUspp-bY8p05$eTd5BW`D$-
+:װ.^?V_i@U4|fO>68~\Ǐqu.{z[PI:s7@_?θ ;[8bd<.;ˋ~Ǐs(& PM|\F!ScX{R}?~n]Ww
+$:Tgr.ĶVtb۵nrlBk~36>
+$љ/\-hp
+G,Ӱ?kv!mv`۵kqJ7^jMeNpW7tW^wq<Xg=dl`#ʆ}+Wv5i=IM:y&کF}~
+ӱ?:c3~lvHRGP5نjJ[g<}@G><F_t2#
+i8bH#t`? f5j&M<]22H-˖yؠA_qr}
+:WF5Xc"qLgVj,8r("Rn-^47a5TH#2Og xCƆQuE{b>\!pE8xi1RVy〣J |
+RNuRδD;qf5ȵ5r6l9[9N8
+! 424aܣT dSg֨k
+))r=?W^u]۸nscYXkIjT {ʽcU Ol>3U2dphV(o" [l5UY~2.hupO|:ljZ|!0dQSU4S7"U9#f+{d,R(2G-TF22)ԩ}J3U鼦>Trxnb FVV4A%;y^
+/%4\;:L٣;&Fs+sLfYcJ VJPSRM3Ue%Ӕk)Ac$p"YyA5p_
+KCf_eM45tD0ORjHRBR5}\Bs5-ԦJ%5hUq͚lyA,GXY#&*kĄ>4 }lgꄿ|9"0"K6dl-#f T%LI(M Vbx'+>"݈?Ϙ<ؘYa<YoD2ڍQ{ Q/OG1Qֈ=b3\I.×LJjROS&%X͊Fhuu
+
+"ZQ FMR[hjNLFMMQ&ĤL8Q;m6f[XN9>w{ҕe)b#Ti$֘وKm&4bNIhӧxonLԀJPvm>oV̔
+|clC4'B UJž˚n*fdEeOSdvgnKW-K6Jbs)ض\sVќ.$shЄ75~G
+Jw2`dKf[bz9_?US#5`Yڭ
+iX 5^q)x\^5:朓_uλܿj .72`!|oIsع#Bq
+r+Xs$ic6v#Ǒfpn"D<6k??6[ ߂\
+¨ ]jd5"S`B(-dc-A8=pՒ
+0x39pʥNd`5F2jkѹu\ln^A@דzpFLrn\[Z-bl)Z[ˋ@9:@>Y4bN@Eo /ci`hro$+E=<hCq=3،V  @~K与XRP n 1\R4S 7M iÕ`5~q3x;:4{I >GЮfSlE/Wї-_h9|5_@mRjJ
+oWOYYڰ QZGD/؀.k EQ
+bsN8rWjxIXχEAbܰ*{ٰ@:
+I|9MNPA2
+<~?Yx?^y_~<;:ŧ'>7 :&W<<b2Wq
+?N ̎D̯/QЗ9Lć S
+<K$N?ZFc(m0p$‘NgM>vQ0u9/A8 y5`ctt >K`jQ}cXѢwP2Wr\\خ25آP;Waq;K=C|.d0#LV`
+ xBEc' \ )*yj2VEd J:SӾ@0[֡m\sEV_{ib^4R\!xR ʃx*2<ZRUBUaŜ*/'DEԣcY M4s4z)ﻹvF2m>!9Ď'\8M2PR(7*WYu-QƴڦuGVRi+lL&M>^<J~"ˆ
+ Sdo3+fL9E.nQV e/P}Bo`ViJw\tS)E_(HZb784; AAi̥Iq+ˑ#ê̲Re9^斡ܫ~SrMGNإ}/? s\S3%>
+[8G}`r4Z>W
+>𪫊"+Կ3 !xz͠T6[>8WXMoHV+S.b]6ŸUEnzL!. 5 Q)~J 3 肫 4PZmx/l;D QLSǠpOB 4Sxn|^3b} @ks jgT6YnjҰImHvrx9} >(G>~zx^LSx1B0({\yuTUj?;XJX7ZOg?P/~̤q~qz1(ݘ1|ypS=FpRo b›e2^ Yz1^ xØ!fb:R”ͺD l=-k{
+XI\09ֳu4rɯ{g* Jrm͢U "9
+8%>7"6Gs 3۸w0c{u'IQ;)[J[X4xk*fb 1˾¹![w;)`VMO^fe]wxh^b/|_ft߾~ֺnpt~6Xc ߳A0
+%;6y'l3l7w?a~D3Op'iq q|0w
+6P:'{2>5.o%{d..ip[2`Vl;v+?YP(;* [eM
+: al73[r]]v끏~'+˶('t?6Q*qE)ש M2sj}٪sT9}[Uf{
+?xivx5ӖZ9Jl;؀쇱ߡScqOs%K:+A9@U KTے>ۯV 5^cb88ʱ_up4~UX2~,E%Iڋ{jlα#fYYv>_[9s)Y#28Z-aicWtπ5Iγ"K#|;g U?ۍ?[kp2#G1F?ȸD]PU
+5i')>&q4("qg PDr'Otqi'9J& fF
+k\Up.\A"puA<#cVbdbu;*tv}¹1_f<fl2k҈ѬaCveϪSA}B1v(fUW.u&Ԟ3Hβr+{^ܛj}@ٿWw _%}\>x8?繁\7ϪXC]y.u{՞P$?…q
+/ZVKq/[KS<E]XOz/umS Crc]fPgiڋ)TVK/ Kj*Sc*]qL󪳼,j-o粗!G3 sp]∟` 8։?QKȚ,\uj6S]U;zFՋd~CնDdPdR׈,;Iu
+\6U\o>$KA'UIsXŞ27\S
+<?T=M"2sH
+ElO#GqA=|qΈ\+$P,sCAr ڣఌe*VNV p
+~\_''H5J
+e}TDȇ?WK4410" udzXm?o<MU>Shۜi
+#\[rBʱv`۽1:V`{ (-VM:?Y7ҿI)LB5
+^J'T%uc7@)4w`YhQ^{viP;Vǣ4hG7f) '{*ph6-=2Nlz@-hv6
+{OZaaoIr(l}Y."]:A\
+FFVImyLp- uઅf=$:ة<Yzr"L HϬT =z z1`Y^| }w32wO#8^`THb25V)jVT!V2.vL(P0->,_y y1/Ou¿ixW22r,}`!~D9j21PhWRQ)@QjZTm< eD UQUf}BN!9_(f}?<[5$n(4?C\YT!6l!U4mPb1.cZv8gesqPk2";'tum8&[DYdC"t|׀?!O59 r,SyGβZ9#*-M%!Y+VRqM2gTޥʯxYFyJƲkz.FNz Znx@(w娴^鐭R֪YeTY(7B'or|)˩;WqJW*f4Q~flZ}?OV2UTPS~MPy5Q ` Cy-Cb,FNPi3kZ;\ZM 2'@ h>jx{;ϊkd
+d dA! p0Cףˆ0&s1֝'|Ob{ Idbw1
+4PRb .
+>ɞ<555V5A](ra8bpᨀʬ^v[dj>*(Ut\yG#ш-\URRZ[`ƾ V)7'Fᩀ{ ̇c1]WIQͦjb0jo|'kp]XoYZgI'<nxD#8*[ \*e!TڥHPeGqjL~>w6pv ڸ[9<: . LxW
+80&Mx
+؂tꔄsEBN4 şo[2,wffV>GrZheXgD˚4;eܔĿv#Q#@5(%<Oşk+M<9VqegGWrbwKfndKYly:ŔGxX/!ܸ!]7ek \|Ҡ.@?b<+ A,n&9ndy%#/KbJL,Z1gQ3eL
+;
+'|7+`GE2imb*"$3JEК14EB1c7B喊C ܒGoB
+gBt-`-7-d-c0Dɀ^BJG(q":q,A}~ 363p(gX`)jusݻ}:
+Z}&gt`kNqžn0ҍixV j9YC/!č pNDM`
+ (s2WڦAaA%Z 
+iXG{H FSr8R/j
+/W~jך~~Fl%h;{Ͼa>roǎ8ug|KWrcb]OHrOĒ<i;%w?zXS+ohlni}'ή~y?_M(f#Yc DA&݈7#ِoE%'bN\ ~ĈoD b!f%n%~|O 9 GK.O~)?W%Dg҈5BM6'{J}bP5#5ävR7_蓼Lw1=a{Ͳ7<{۴uݦó,X/z),`00=MŒZcXtB\QҖ^Ťp,q$[ ;uu7n .t|3G]ۅk׫$EA"2BNhh~q4?ioή/^ToKg2ZǷb5-H1AN!bnDHnatS
+CUh6YzMpq,m pwqxA$jCCB~/`hkRpjE2"!ej̲lF27HC(sYl21|~CBɢuEడI!f\1AtYf96Bܸ ͒aopp'&N}|3Y,*29'ηU Eq
+U&FG<E!ra>PYkFW?]^2XqQZ!%
+k<u)v%^酜
+1'S#U>[omD8oQUqCC[^G9| VFU{V?pxWC*`e#ےсb~p̜_AMyAvmtjx*"
+(UTKʡr ձ]u+'$@D!$ $! %vvf 3<೸{ߔi3hg7YG!€!
+l/vyfchPI
+|9 wʅG; kX4OhӼ]&n{](sY8qEͣfq(OiI")k
+KҢ&bxp:˪IїMH\75<:6
+:o{nq{opJP{&F[R|֣'ؚ̙t/{#pr][8J!9BR)#EQL[(
+W6_ԍI̾4`ik*V4M4$%3pm)]f[ ,fسvehzu鲼)`D,JJb$){<Sh@W#L2Uсڧ@IQ1
+ln93yL$|R!_̟Q%iȑyR Šb8f/bK;2c@̛݀.}`ֲatvf+ĜkPc3{щ-*O ḚwhxJ?yU6A=$/6t W OW G+!b
+UE3TXE;:at FKܟ[f.(6)|DP)1RT4."3o̫r,&`8<G9h it!RގK%|#l zC V͐`%ԎPaؾfLN5|D/  γtwg+ݠ#"C. "leP_ &00H'+'cnLrL"lw-nޕ@°:<=KOM3&x'Ѓn ǏB,=d74A\L,SbabK4lٲ'w0טY7ZX@?oxuIBⱀ>& N:4 csg<P`1Rrw631=6^,̣_Θ纪y7G(kqYi\FJ|7Ӟ> O yZCɟ-;+u{#g#xzvU}
+YOU7&~`  P(rp,oaq^K_m:ld4)c:@Oʊ %e}TB0AU&SLZtݘ[7rWꓹrZxMb2W;7<AJK|47CeD3T^k֡(f bR\뭁wv9C`zX˖`kŵ4J#)wp*Q%rԔҡS:t͔W;$NG08ǾFx*IКĵPSefjj1WoW[03u
+n^FKICB awVjUggp,̸Nzq
+[%hdn?߮S_o
+ĥ1Yon#R!/քVTQLU( R(\iN/{i#_ђ=:[[;یc]:j?8iqc/uj}ik_;NgjtD*CB$}_ a B$EY\
+IS10Fq|<_uÔn=?! %í nyJ:iY]"4
+ز1SIՄ49aMp mwB uUr': >E
+D<gkvWL27{kXl_mI`>']ԶYA}+'pXu@t-0E "a̴BK['q
+Js-J(w+MM\joaZM\K
+k3hq'@ߋ
+Y2iHv)MuT[Sͭ
+j^P`fAY8f"YjQg+
+%ΆGUv<SJVE`B=9hE
+c;Aubcf=賓)[YC7s)U=ė]//{F5.o}xYEyٝi[;f lWv?{/l.vz1ճr3tܹ7JgåUϷ5ri9M<zS =N~Vwf׋^믞zD?g[<^&sJ.5] ǮT$8I"PІjꠛ6 k(u5e$YWݼRoì?}ޯuK'XoيdR|+ >/`_|~,xyI|{gW;B$Q%Xj޷K7[)ya)ElDlbk\ÄRɋ>[W=FQ%^%"KQb0{{#?mY:'5X p5N&x*<t6<w:g,+l&|>mՄ縘r]L.8iE k0g`MjY;5%ÇșL8gu&[K'ˆNE=CX8p>}Ӽiމueu8iQ̣_aZ[)aKy:쳎oυAG
+r#7=(1IӪmPa"3ʕqqiQ:6a1Rؾ- _a[73G=/q/{8s\eIXt\PDY(& pd[.>'u1<0gFR__R3+3eEr E)efr,n$#/D2"Cp6(gyA|+ 7!p A o8A}; X;Hs$@4I)q9!ZD+Jt: ]k+MEJRi
+՚()jcxhbѢdS< d_C.2 C2nE,bZWb8p&)2Ld|Gm$ꌁEu QZSg ֪i ꑰf`N٬ "C2!CAF:!\x%/f'Q3 43Z2$Q=_5LWO('ZA;٤j>nvZl\d!CA C.a<%.3X8HMGG u/&yMEM!M4U(S8US0>͂6 y9𐁋 | H_/b- H \r ;r.7Fk&iiMCHQ&i S놢4XNݏkѡ5 r7 [A |dAkPD"CWt'9C01X嶍ӊ&Huk_>Aږjkfڴ( K6 <dG2p8❡ ])'e-&elԘ]gNҍ9%?+:);Y{(MRm26I 1
+,Y) "C;8A5 &M^p
+gBE&A4?R0^֥KuiRe](9J*{T*( !
+A;xG3lƛ\C\%/*nvʃDq*M+g{lI-Hvɺ, xP Pwn5;mUu+'o:R|wLN/Ҵ:iiUUUE^![SȖv,ࣟ7P P (k>+j"uQ{3b'a9m4T^ʬǶWrS ߩdV
+2EOU_OMx`]jvjzr}p+'D@%!6rrJ9Í 0@@A仿죍@2iVRE!盝6 EW@TYB]o x4S g^}->-am9y1D^4X۩%Ci)w?4I(1օ*;8 NfWR{Μ P;:uY5OD bWP4Q<xfZ2]!ڐ$^TcgFB|C(iWNkj~ %67P`]`dE
+цݣ[VY[|jyQ6l}nTfa;/;\oP8q%/#&HaJC@?'libK౿UĿA]Yv"6OjB䭦_KN\7mWXWq<I¥"|_?HmbRsY&fy_ Pp`҄*߿n_뷭86nXzUcCnf%ĕ<w%2F<ޣn }WF?Ppbz}_7wTq㦉kնwɺM_IH܍yOcIr  mz6+_ޣOTxLy,+x)Qi]@u/sv3f`/ٶ7I]6rSBXd~a ܧpb)bebnхn7YM&PI.F(߯Qjla5+N߸y\5K6\LٸUEʍLR<f-H3|kkb w FegI*͖ jm"HMgsb1\2Rc>] RGz( %-d;T!a=a 
+yр Ҿ^͟^ g'¯w ޴:\CqkFJ(U+v˱Yš\9U2edTBV5mX~~-ޅ#v$0b) , At6z>֟ V[&,- eeg2£,-wޣM"H h @۰CiM#$8f 'm u xs! r,(`f
+HBV(sV(-9r<ƫ+{ʧ7T%Gn C{!mC8fC1LVGoWst29WL)* z½5GG Yo`ٛ;כ; q{v !mԻ\S+q!n^`&VQejBr@&@ȩkEzhё?̟w^ v@<6pц+`jgH!❴)rZ\5Mo4;xDQQw.juUkP<@AG
+Ԡ@5& P#eٸKub\eBLp!S gu3ƲM]A)gP1
+5h ?$@q>jΟ  dP@)}GLbZ2 9 ¹ƞ8~\Z47rD\COArZ6Æ
+@ U߁g@7@+&0oiҌ<<4F$#HSHƳs^b뤚| *dp=:@%l {@Wq`l4/Ǿ|SܘHJ.e=—dR{ogBVʕZHVA"-/ʭP (69;VwWШ5~d+^lBG"aN{eydWZZ%/RjaZŇk>
+y@i1P#rT.3rC Y ` 6aC=`ݞG 8D-?7] nE nIZG+?[Lmו\ ci"tw\'X T*mzhpp]ڐx^S{?1kB;O
+>{/fVpjTC稒XtQiW&ƮJX2F Ff̥ro`>uzE#aV'N~ 2E'C?^.#íJM/OSHj}?GM)tmjϮtt-6 _SzX{~bGF<Ck$B)?D02 X=NcRExJk)jU*WNoUimaѿlH>s{'ml7y)ʿyP,w*(q0
+2O
+%|ś=S̯%bMÞO1YSg7offzhe8;~ kswryCs.H,c##/o1eޓ§>tLG4L4& ~=慦.dj!Mh܂
+H C` 6a[ý@ (x3tC0+"^ԇq . {Q;NaYV
+h&;@E^v[> {H2i1kTb CƬ>ðg3HC? ,",A`! .U@fT%O]R"Wi6)ކ (^_Dݗ?FѬH|_ mlj"2^
+ӯݗKԭ1PÜ; iȘ?l' A0J;Ajf
+5S e$h2x2xR<vhquTˤc-7\8@{{/z"ҐF,hz)ۡ" bzdIq(#d"\7V[:֪`׽)y+۴a`Pp78,dA<O.Eꥐ99@9^^AV( Dؙ$dLv"2 F́[G/ѽewJyw~$ Jrj iH_8Uq (zyBmh"ҘwwnU"s&3񸞃[;}I)˩Sw)i̕E'w4
+]h66%x%H'yU*m<4i7w&2LepBZSLF&iQ6
+n_ҧ-8ؚ'3+[mEJegA'UWN)o-Sv*ԤAE䤡K蝾B۲ck~;As|pt9vu GŠq!OZ.د>ԩ՜(\(T_<]t0r6 mVWH d?s%-mv?Cw|tu\h`_{TܕQ^v|y</զ{Ku9ݜ"I*[f`ac3cd86;E"K bZJ)>z߹Ox|?;7JoJݼ)ycSM)RϪZi6LQ`fRcTgoⴟEw~ ͒:d#ԊʨEl-vC\ͺ2Ml~KsvĜSenH<ޘZ ҩT!je6 l~?B;O;|L:^l=+
+jh^S}"lKɱCq œ'=tClޙqΪk !jH1{&fp}/ܧvd̼u*ϣ09i!M=۳"%DL RևU5W;QZ*l[.*_;d"P3a^f6u+uq_b,>sד]W\qI*nLm ٢6*euƑ5AM kj:kmGE!KO;
+Y|!-X%fgPa, s[3ZA>v BLd'^V:/`1X`0@O -W2h
+AL钃OG=_|^> (g6p/ o! TkՐ"mjf_
+0`=|ث'3e{>ـ?/`k5TjAH[!Upku*PFQCQG
+WU`>TQĈד^@@⥨_ѳr@#c0#CHfObl-!n=;"_j$B{C$QpE9 h0Q`\ۃGk<YA<M@ꥸOT:@E5Ȩ)G5HY lWxC$74 ܨ'E J:ׁf,8]11DGF=|,  x(nũGZcE KB  KB AEE"dmYvԪ[osk|=pMDk+@;A&'pq>@9 !
+mmk(]+C=" xm*%F*Wz]\kSR5^4( ť!Y e 8ΟANG(:mˊ;7;2Y1T
+$
+q\2YXMV
+jr|Et(K}J9_)+hR`:(7HK- 3HYxWd*(96-jOo}9?Vޫ n%zajfUPThB^]hU1+$r1,ѧʥ+rB
+k Pbʯ_W[ssuNy~AxGia)z _."*1_*UvSݩ峻*nS.` }*Sll (Cf(rX~pKQSkgmk[w]]&
+]Đ*e<BXDUesi54λZCu0 ,np8=vO)@1_
+Dc} d}n *-~kUS7Ojvehq]{&2FAT4<EOR0ՄLA->'$ :t C5)SKuiijSjl Yr7Yr?tl^\l8wf >(>:X'pKRKR6>+ԣ jjb:!P$& *.)@36Aom/kX>o<`1ݾoký[r|ՍHU$.6ŋh "VD+ҪR-LW,.Vu]Ln:>4/1e pu[rumfconuٲ;7ðHJ
+['EA?׎Mb dXC bJgag7lhy٬A[cfOMw~5}a
+v}Og;$g?xWҽCӝ++/'WPOu۳R[fͳIcUsN.<6 8"9?%qGoy>@#(7g=lk}o t4W*ŏWg[}w+MFKBnCnrzp>3#%F #u#jg6 ʝEbgv`DW>VP)Oo(KGIbTKoPP_
+Nӄ2!?<Mr;&c!u1iFBt4͔*9ZLJk*ddm(`xˍysZrX1%5o;IHyB.5rrf+<>@vѪQq&йJň
+Fܥor4tP݄T 7=A)
+p2pR
+] eD'3r!W Q!:ƌz R> i-̤_Lg}o}-1ft(G1ӡr涩G,-kv4m`7 Ɔ!/)$eP*0AXeѐ`Rp,Bx2,\m$m8iCv4lu? ΢\@\|ABuQ+%1PFFq:V>&ѬENWOJJN;_ /P.Svvk u/Z C%LCM9Ce/˯TB(5oa'ռ
+qdJ2k6 im%*)wYޥ>UT{S\ڡ(m38 V|ovT^ k_ry0z/f7rjc{ L֊vEبX ߴ+kumojlګnX7]|WM~_}5g\&0.Bbl]:Y!SQ#;3m2MzYg-=yK=S}O9\xgjoZ6Y[j^?upc0CѩӢm"$%o5n,1ff`̂8"%D!u8Y,u[=N-|DƼLo}@xQGxqu 0JK n[!iLߧaΕ<_]><3u0NP\fod16^ױnEu:Y7cẌ́ꄅ̪ʄEj`44Dmփ);ta>]kb]hvxQe10c&iX6-V[m&TsZr5y^U<4Sqg!P6´:W
+)^v܁y#0?;:NLj0kĜZb1
+:_E_&=䫒
+Di\9B4[]i=خ shC_ˊ?/;UsL==
+LJg$gPiٕdv*Y T˄
+rrS()iAaL8e6_DCWcHdY۴`nɡuf^U4>iG(2OH jv)!Rsb1XR\:P(/Qa^ꔈ:-Sg
+ H~zH6Ԇ(إM~ґuҝ4V}
+=
+[4b8&*V%4Q~:[KʳJ9^/gߑgeY )M{TȡM4P gM(ީ8\e~^g5Uoe0|i__egEs"4F*J8<ɐ3
+:SLc(RY]
+*AYc1!gLJ2e?*\ Gam-PIgͯsM4osWG Q1W@гid<SJVq%=ZF+If(IZ`&mX5aO[WnW[ 6fnWGkk.^PVGLGb|*2BpC!-GKJqy<{BHD:Z0KO վ+ r>mcFQ3F7\L6^j] TG9cӔ 9%)$TZP"SC- IhB?!NJ54!Yy((
+4MAbDW࡝ gܩQ7/\h$x}
+sG.IOtm $eWջ`*PK
+^#;D@=
+
+0gsVtwXWl!HHVH; P#K{:lźXJkUzjjE(T(twȃ\@G4cq?p]N܃?R^rST( 57Z R'QLak[:hp^ Og\\pu"WtW+X-&IҨ<E}{PfrM ST+jN'j^21 Cm 3Xzl;agN6pRm,J1dVFH#|I"5:Ez-KQ͏HgU0DQiԜxP@a20v
+hc--`a֖p4bxY#B,͇|
+L?CFXl
+[anڃ7xer-ұ%.Z6#Ly~VgIhaum5
+v|YpvO݅ݵEn/Z4XhzSPƢ5\[Ɇz(0Xj-4XΛjfVV߶1 lh]nI?Wu8\Y\jzꎒ[궕RrnSɕ u65z`Uk@&P )(֟UK|_s8p׺dp{;ړ'[ҥGW*Z^]q}ٮֲ-eW66kh*{V?4꽍=C,32YN0Dj0h>&k&)JVEQ='-R.%EzNyf^|//߬Ҭ)$MvUL%HhCX2bB}bt]8̮p51[rRHTmr}wDτ۹˶s_MMJ1rr \yXLVuܯ#m6[\ؿuJԵ;zmkm|xGrJmY:WXUXϫTꪳy-znVe=qs˳sd(h e)_~< u­ΥW]9g~@Q"vLLQ<[̭kuiڤ5IO+76 I49L|yHy]hִGtл[Z#qBklL(OȯI/e j˄u kbW8'JH(%
+U$Dž`础FX%OPaUvI uc!wQ1OC{;v8!VДmLg-kyYYyTո0Z4.䔏ǖJdi%%0Qx­Tҫ ?aHWn?ܳz ⎘hޡ-܄}Ȧ҈}E͗ac=E5őUa,P+
+<]t}F@}95ue|U
+f2ulܛN׃®EƮjFkk%h.η 8|{?&, T 3 pAݤܑݏiP3+%P,~l6f7:ڵCBs"|Gx{?n |t6hff#<ͮd`d7 ;8K1hg4(ґb(rl4^M:ZM:LxLxNFLu6Uj=Vʩ+i$&w3
+QSZd d2ZYOtu1HG9ښD Ա&MU<@2X{
+j%cP<9]bv`;#Ob~uǫty?<02pF V J3pZX
+_D+ ۀ[$\.9_ݎaz\g/n|!t1<14N1"d <
+g $
+2.0)鍩bg5αvzbXgb{XX'dwpp:fvk
+U|s@QW(HVRRs!Eu&X#2Z ,wޯDmEؾ9NXr` MM v`i 7Z].M2),W.WUpԻq'Tyl\N`NBΐ2Q1Ht  Zք }ܳYp>+ZvlwFm+jjPP.M(۔[*̋)ۙS~\,&g 2 wQA^}nfkvP *EM1*5EQPJ
+plZЏ>T[-q,QpZˋ?sִsMٳ˴kWٱ"5x)ז$i]}mR͖ :&[
+.PD5?ɇ;y'b5ʒM+Kӣ}xZVFIΜ R^\}ARɡyI%?Iŭ
+_M5? vYs-}zpg3}jb:-5g|U'gV'L:9|ƴIJ k˿WQ4- *Z֛5H؃o㊺-> A13
+? CgHFg(RZ -Ұ"%\КkilWh|;>PywV)_\S^t:PmC=sX@Kȿ5tz8lr7&[<>ەe~Ջ}ze^ rwS䚾o}ԣP+>)>т V F3HEFG
+'zTW` 's .sFXE&-8G3xg/ kȿ3 czG
+qcq(`)C%K^cqdc<N8[NEXe7OYp 6uOO'\;@D D0xq8NȲ!߁R'tu~(4 D;k̴?pXv k `B@HX?/a#]F:q icvQ@^yU%8p&cP$e ߝB% yZgd9S3:ei!֛8Gsu %rsg{~6qpiMWY%0PD Ejgzsc&]5XI <l!78CQZqD=wx(zEq%} g@D!xBKЃjP R&e,)Q{ӽ(ʠ|.pE[B
+QrQj!(%@#v?ݐ犼^9
+Q şjA*fJ1r6*=n[]Ӊl1ʗHPY;V AbT7T}vQ[3 |B+J_z=ʅ TgNB:
++TbՂ
+!(ؤ-,愅+AosF Yȵoa'g0c=l
+~R'3RrE^"ϑ;!Y~En[fK3dJ2dϰ dg kE
+6'K'1Zڨ8TTtU&MUFҫ+ROdW3 E^[wnfp%/t`l{=haWq꣇b71+rE"ZneTH:AjjB۫ku2ZFS*O*3u^]׬ȹ
+ؑs/*s8зN Y',t*ѨO1dņ"#f7&T^dxM?`9XX dtw=
+
+3y3 li`4 5ÜzppA4߂r
+Sq@Q(smL/>s9+jp֧fԏԗړ]g?%4 78绂/l?^ŕt8D(!wN2э#U-~qVpEJK.%85Za9 m1美[ztok#n>7hky:zg@[hv #O>OȘ)A:a#;?&vF(]ȮHmأr{: U='۸'AOzdn qm_@kyu<CK ɿOܲ{{> Wl2C!SnBcX=Iu+bXj7*t߄l%/%d B=G_m>$n  / ra4"&J-Q I"W,FH } 5CMg2$! rRJHmBGxx/_ZB%T F P B7$ }* fS yˆL+h!^k$$GB\ Elω{ ]AS9o)} <!] 효`vPɴO[ ^Ӈ^/,Hs+T΁W,o *)<g7x3/{>_Q[DAS@T@|!$/` _ ]"P&ġ8EQ!f d™R!H b $+$$] >1GΈ"Ǣ>_ 9Q/1%:4r ~VTJ(PQ&= Ň,`ZFfB#[)t'_%} O Bxtr rr0+``W7[C70Lk|PK+/y.꠼rQ,M>
+e;-wCAC``J8*FPEjNQ TQ-Pd]z\4xI&UOvoݶZ声FEgX~xw'Wn 67l0  R礈 jD&`?{>Ac>[0b3S]GR݃i_تث1yNs٬nuvhGF A`QFѬrbXX$g1YGRcs^LN,S{\o-6ވ_η9akfSR Gx  T!t
+#es]\sSFYŌ73B2ߵ͚c; T_e .:6gOxMNh9O'ѻܙAE ry|x5γajs8,CCAt^.ob~{q4^ /q,X_MނC1 *{W a3wC!F$B7<i_0 OT; ץ1sںҊbMWNž.YkG2׶[KK%n.KTz5i}iWҁHYM C&HR6IE&7LrJQp4jvOHZ6-lV9o(_Uʌu3VX]QR把+#ki2~><zݽIڦȵ*0vjzXUw`R#uy5}a { VĢ Hq a0$d #pXaCdjāxǪuXZl㴽ioʇy>Ώq=Rq}Lnv~@'ήsVΉfؓ:6 e^6 XPZ<W
+c
+g4~ʶ+-:<ZH|Dک;6~jP OS0y Qd1kx#L%&3Y%r. --|I
+Xì2ᙨxB4HgdD `ďK@cZ<݋75rr-LsPsqCA:÷bvR5 fU|
+\S"VpJN9@}+=AǖQ"q#}0pyU Ζo(s6:Z"|ScNGMׯ2-Q] Mϑ NLz\&(L$LKĦϲ$s ! {x4An>](Ui STzwX73DUrh%Y|$:;5/K$+$II56I|rD<*KV,J5N/I',0bsq\ͅsh!#[k<MWY*BFxsDԬDT&U na)G6ϖݕeE)!72'Os?D?1q 0nz]muNø&hcEu6EEgNIl@z0B禊9hyYBTNs0>2$"(<U\D02 J6Gx2
+,z-O=6P=dtsiA]]]~~_}|ozӺ&tҨ#, 5?}p{4,; PxNRN;饜r3ZֱN90v~}]]>}|kwyILt}qxυL`7
+s5^[ka>Ʊqڸ˭w^Xrz7vk3VNWeb
+])+S n1v1Z=C5 2|6Il\\_YGG.~E+xQ6CG
+XNG]yh@vb~W
+}D;u8 <;l+E9Ը\- H1QsTutie (;
+zTvQv]Fwz~h~#Z
+ჾt.s9@|}`,cDv 8{mCt.>o>ioy7|} 0W4J
+GC3;.\. !E8!u ^L{-c<qn
+KbDW$JK5Z[uWXXf}&+ӑlNE6ٜis<1imǶSzӮCbtHp:Z#{Da@.RާQ$[ICSr.#D=1 VgcT:1XLcWB*ob:d ·eۜe{d·g\Z}.O\>vx{{St'2KK7"Q~L?"1>$.![EkE!<σc$ԌݗP?vo& ;v%yH<ݒ-͉>M _>G
+aU:ܿAA(wk\ó~o!s )496Eȴ
+jQUG/QZ.RA‰1>sx6yxΟ3No8Rf
+7i&k*0%MdI&OZ3yFLuflyf|Y
+̵E*3Zds\ysee[6 QpB
+,:K7|^栳ԇshX 3]LMJ;IR5%'ziN|QV2<"kiRyV]RYVSRfoRhlMoRIbb&Ɇz {>S}us
+;ތPAcibSmr\tUBMtE~^|ٔ(.L-]:3wC]SsI-ȹy4A٠@AUr ߃E٧c[@H[>ٷȚl_Iۼ0B*+wXQdNzpŬ iɴtmQzvJ_ӮU淨U.Ӡ(, ozETVE
+*; H;(PAqDPhTPp#h .@M&qIJ$*ʢXj~< Ϲw{ҾM֣^f4]9á~d
+UNm3.b(M* O YnqLʚ􄄬dUc1ٗٿGg GƸؕR`<4P2NmZcUF3MǠ`{輒1+ =S7 L_ް,N1aN6QyMqy_FuDŽ Ězhl-h.8B3h5R*[(",oXWf|e&&-J*\Y!&4::*)"#,;4?<h3FcD<'
+=*kzԋר۷Q'^C٫AcaE3&Zmx4Ru$.pSHzr`B嬺 }}=|돺Է9uoG-NNAp~ 82 AG4? 2-.u$ o@b}N%j^F\h\i|ff?[|e38+x&ttWP ב[{28 Y6nc"]mn6o@mmjsn홊i̦WN8dh5r2|<M<έh1˴Z^ CZr{Y?$<}`U7
+s'_ @i+!Wv
+ P84T裙245 RF4fTL>\KAqwz1 {zw͟C;%vY޿,Q443})KV_e0@ ąŲ)DH $=!@Id kX ȾCAZV7ZZ:ں[vt<N{@g^O낖w߸~sM}隆o`ZO|Q#^qgq\yEzi}_k$HJo} AkHYdww~$6doCUMwvX
+܅>h7~)h<c5ʷ6W(mx~ Αy2\u6Sz̭` p"\,zYlI|@ؔD#.,jX~ZkwbwiH뷿6j! X?|N?[9ǚ0Ut>J.3ZB
+ȷb,- `Le?}~ތ_ǭ\dhW]ܺȢ5 QkE;e9av9b:d;`M;Ͳ:cs>ʺì׮m ݧ@"b^ ,K>?p̯sm9ͳkO>町V6p_b=GaC^)}I#=ؿ&09zq(Sf` y+1r>)
+y.q3#LCm>ӂ>a3iRI+ذG4aBøhwLtwDtw
+B(
+ Ry=œq֔#̔.X]
+2R 'c d
+O]%NqqV\?(J O%ߋ |ȗXS^p eG׌ J힠kh VĬ14=
+$~9ItuP!
+RCDbh BQ_X>+(bbK!_ 1S~Q]@xe0m D/bGhhعѢ7tvUiN&6q]>&+ ꚹ~~2&~ū_bbϙw*cLyp)
+"rz&Fgh.zgt<IN% Q ,he, XK<k&C߾~y!+{VĬ5 .y;g,չwӄE")e4\;v,ҿ!($t\sqX08Fz8I֚T"ΐDfdޱeF2\m}\c]1Q]tHsZ>y"Gd"g}LwI!gq%ikǝm6bhM1Ԯ~}Sveq
+IWk{5Ih{jH/v=ݮm74~ N\+B-5^mowU1gnFlu<Vd{l
+'IIJdzxt {F&y>IX5הPصйVsC&[*ڲw>`{@ k.wWiN|@02= ث.r^N55iY{h:v*v*6O١vwګrx#Єڶlm^Iw.39*-
+Vq$ORH?—V>}s+a1M/>u0=!t;Os_W
+'A$ Yf$-2
+D H
+d(S|" |Ffyk El<ƪ eşxm($+32C3g[#_%f S2& It֢x
+`/(M+?6eIBb` :fp2=9&23̤*yy>7?a7?LC&EI#kg^F7B1C"c3-?LJ'/bԂi\BrzVӱMs u~ W*.(*h>a2Kx h'j5U<L~ TSULnkJYhMpCZi⊶ uqIW^uh04"I?8'䘟P5
+N/*1hլZm H/GuMe߻1Ϥ\tβA8T8΃ʼnQ waCBU&Ä
+Zh .p<Ҍ]ك^drwX
+59!/^q&/h٘=ݺCJrƄZ3ٺ*gc-t.
+[+p;K×9w/98zDnNKl,2Hnfߠ#f= e("XEv
+a  H
+lz<Dy&t؋<+ڝ22vgݏ徃bį7;)=J7ɷ lM69T"1 k!"wwgw>㎛^K-̃dNE;I8â,߾\1`w@2 n
+zCZ!Mj"^pZ8&gju ud*\CjV
+
++9+A*IN/sDEH[HFĈec-?a/<:<•Լzs dX L5&Ơ\f]A#i~Y%ȂbK,H$6Y0$g+2K ~酯+A{}|l-<GSfѻAGCH$r]*#B2E 3եj]_ݚHLUOsRy{ly,W*[BDZ^=]G\-(Ӽ -oAKk
+}5O DQq}q
+
+q9š~|\<{Yԟ9qwv Ƭ˜
+ MaMHcԡ "
+" QDAE(+ .F#ڢ$h YK4cy99s38sw}޻D?[=v!z s l/e@0?p5 畘"|G ߓUo :}1x1~+׶DoDp }&P|  e>шZK^.杊yG=s/G
+5Ut>K? yaL 0\JX)u`dLBF֪\TM1
+0](K@l;j8Ko7+>^_x10DB 1 .#%bH+g)^V}^?h.GX # H1"1b0C  1LF ! pU RZeX݄Zn,U=(C&^|"0iïA ƈ1!)sL3B8J02_I?#}ŏ#+=z<t~;<^d&|L΄jj*d*&0Pe<+@7 %˂g><p,Z85ñIQ G*+%Ŭ1yT7`ZkLTXbmn{)>UIe=' UͥB.,ketETIEkh=]Tk~8B47#ni3:s\q1׺勘g<331зpiO[!t]CRA}g8:gRAgMY2k-tbIF9l{-%d*Le%Sn3߆̎8oƨPhn¹m4zR+$) n]!} C9*a5N Cͼ%_HNKHTwI^ vJpZZ0(r<;Zh%[K:0{jD~sQî\3_t//w_.+]-#6ڤE;<Z=zԶy<Toh2Fw ltl4rH~7A#E@L踇KP;>AcOfON;|Z}hVhmU*0bl&#7ΏlծЩeZ&^; ~tw/.`k=3K]ώ!篹/td_6dV 6,PP>N>`~]Nڀ5g { V?7hʏȌ*&2!s0#k8^ÉNMEKM6`WAkL90P90`<h<ո^iNgR+Zb
+jՁ fUv
+ SMyot23_̆<Rp>z.Љ=\ԢpV1^sc$0PYMh⨪t/BXV[ ))ZZi,duYH=6!lJ/, ~lSfA.
+bVaXFr$z
+os(CS cvyal -a0=\2
+][#[Xek8|NNGJ,+&d-ZU2)kspl&d|\Feeoys'9|
+&BXuBKLH[aZ4jx.SS<'kyOҤeM+)9i\3<GJx~7\=A+6ڽ 
+ET~u&>uyץѭRi^mƣ{5)<Pᾧ_K\w
+ڴ~!UR8
+lf]Ɛu[/HzxHx
+6|:e:F*&3dR@62B%}Z/gzЈ%~"zYP`,Y#kd !O'9zVҡoXGFtU1z ]9Oq-i`kNEت!y։?DJI?k0e Fv5hfMs]ɤ#OPH+k ~a/ً ǧ\&M..o7.m#wA}Pk>X[8ҳGCOF =驢c؏pn7qUuAHAF?cpMOaӘk=idғCO=Z~Bvc
+2>×8 ?Ϯ}観tBF!dXf N K8:<jfY+qy͜*:v%9NI:$m8gp >1zV+43q9|PoB!yfbt{4e"OE<\P$݃riZ!Z3+EY%̫qb/Z-ٲMm89)Y %G5D*>uo-\;J P e3?BM"}65N;.E˰hr)8\1]Am]WB/f5`@H@ 0
+3Fia;p{]4}B4}\&rY]Y,)oANf<E&[ރ߻|[.eex>G{R;!6k怣΀UI_d$pY2$tJV$A7IH> ? rp23YC@Fe!d> |v?ţ-)sCׅb%+60VÉ5.by@66f3Szv1b1}1#~f0wFWbH}-`oؽ #E1h]F<Z$Y-CdY>rZf5GOzevd̨l1fXc+8;Xp+alobkcyxt,
+2/a^Ղl)h]iR<y󥒠0Gq΃Xrר>~DoSt% *vJhb-ڢt]O&*b)B<ͷpB #𗰞uxwLu4‚5
+(4E*u`_ZCUiʶ$'K9ܡNnS.XRKSK@o({TOtW%}3ug -BT='*3d;rZW!CSڦiNAFziV;&:N}iTcV>gVK*O<9rܷ݅ ;zֳ~h.M1cB[Mvp_U~ՠk׫i.i֚&mN1jjW~+- [[S*48͗2t=Asy?xl3|X2kFdߟa3 @k4Vj*Od긕ZxVN?ge|<OOMR GY]Z3/C[--@\Vz&h% [ -\Oks{f,b+kl&f@S)TU S#|EY^Q yª9؅%7L7Op/B6
+5
+LgLYYX-Č8G p/v'B*0؁!=@Ojax4f$4%v()rzq%sdVNg`K-,̲kkyLiyNnzI4t%Ea`~BddډR!.8k Dzc=DY>9ZY-{\liz3Qluž);_&f6* C`b
+gyB1_4hDY0ņu6#%BzĶ=]Y͘ݶљODw
+_X^/C۰k69
+H- 4ҁ|sQ75ת%7%;r?&7b7`-G)Qͮ7 -CclXxs-<P~^wjw)5@<15 0}I@
+6괌E8!Y$炁 E&"{\8Q;Ucfvy䦓ƒ;#@p On/S9SKe*mȡPŁvu"wh]^8ѱN372d/?zD ?u#ׁ^!FE1\gSg!ǃgz,D/3(^G1_uj ~=L1amOM2h>wI'T!FZt ͢bYE`1bŊNp㾫jn:]TMQ T23`=^#l!~eě xx Ӭ+(vakȷHh#m y BE7XDR#/|E<{;~FCR}.1T?S%2|.Ii6 nAχӿQhDz*Y1d#+d]yV!݊;mT4Zpm7SA7D>saE;Ћ6*Oއk&YsZH2rVL^spJ>*uhEO:h#I61
+}g uPf5ĒORHH#g-99-< GQ(!~sˌ6H5P]e]|[,oO=@?+ie18.ġEGI8"K!Y:ZeaulFM),hE$]F=8IDe*DTiO>|o;M)kף! pe&)&XK+nisn\zc=PRu;UP#J^
+۽Da(xnu_)Yj,
+u%Z]6<hAOھAMOQY쟊
+tf ;|/R6zįY( ݕ=|_Q_K"Co^vCacy;ウ .4J0T !-:[Z?O?AZ\5 MV)+
+ YVP&+mp*/Ն9lE,j- @4,G8[і!=P;LHv?RV:bUɈ)6El>jn.צiA9AAvYvvڛvOWi#iԇm
+#[8:c:ڳKk*JFXo֍u}c>!GzB,}:*L}c>1]_F_锦orZkuN}眬{<sR8Rt֣lw~e.s>zaKHIaycuvq:G=fdf湮1$R\WEa"PLS\6rkţV.Fp%v
+iD"e=)<J,|גOz/^B=?<CV 3;OLEzGfEOJա{Av}GӮQrdO)%'gs\Xpœ"#Gg;/֔mZ1jMŚ͚jMhLeu l"/K(""8 2
+pD8\a\:.Ubƭ}jZMl4imbf3h[8|3c޹޼;is_+;B!}g'ۉe-:{KsAMc3cT&WL.d, )*+*(<_^רwgO?5zz0uuP!J75{X<YC,-SN7WUQsed/voq:hVNNvfaD̹*fAT!*K"jf*CK9}-"5?PBҲ`W7%+Wl^bYʳJeWu,W?;iN:030g&,;??R?'*S[1,][7,M|XvCT֢=wghR%B&(VnREK86 z)sCb~MYyto}X]i{t933ӊUSuQSt5d1rn]ĤCu&.LN(>8~_C ~vd/lVB#T?+A 2*%vʯL;bi>je9!ɥEaIeCK&6N(]P#(o{%901oϔLh#D*WȜwȬZm^mLoMxՓܦ-꙲0'iL€üx"~ mc 1<hw܂[^W|{l? VsD wr_"M>i*YM#2vHm'!-!}@B}׸1sGWy?77&Nݣ_]w홚#UʀUjF|[ ױpWCmZn'-2%@D$D%sHX>yT8_Qc,q626}:Ҹψe/ _vyXs.MkDY9s׋ԁ<BMH9BZ4J5"L` eg1ۏ2Mvipnqf*v2U8L ս[m=`zWȚWkRqZ8(NVNz+qu-Ý&2yȘM^.2-Q`Q$k3Ԝ`jN 1g lͥsoG͐~Z?l+^;e}+8Dx֮bpђeoI"2jHvN2)>
+q,>6qiawqzGqFG1pjs5,11DJ62fzOxc-"*=q=`/]nb5DlĦ..]\Bp@Γ-{(=I弮ɹSd)Eq@$䠈+"J_{X? \s ;?x't'j`5ȱ|].I_C.
+ߖ6le?]W7\ӻD&9B qߋ84؈u9<Ӌ\.rr!|**
+_K? k'uyKX8qY^pހ?[v
+y'[p 71'^ټ&7vFȟ{ޅ]A]1 w==kWBQtDuD</<8G{un <S|>?=͂;TM^-F \g`y
+kI8͝U2*xc(9_s<呔 ?,5&cً}.,q8ۡɇD-X%Z|]]rx$'qDx^"fSfP\)¯S N$]$ұ C&ة
+csP1>/l\NI,J`^H=,{NKsjƄT|Z1Y;,ec4.[`{]ҟm?k%mV juo/Ens
+-19RS<c,O;"װ~r]'{C]@|>]d_jɽd}?1iPC?
+>Ua@4[Yܩ4t(-mJǪ(rӨ\W\U3?3!:yd\-'<| ylW[Ĺa\`BN],1\ѯ3z59be`{&ZT֬67"zu/V=5qK\C9=n L2V$9H/pG*lu=Jo\\ |:*`R
+KER˱4en2oXVY69Yf6}<$д:VCVrBFv7
+qmTkV
+,C` v/y
+<hWUx H #"_z;\:|)q4Eg#'\5S䛍}GRьG3
+R
+S>t>N[nJoG~x*\^;E.tp_&i<Ѯu
+N!/b\~ <үaPgCyܰ V<׏7A0,l{UuY*A5 /X7poZ1͐hNBg:g-^^STN X>ŕaP3D1+~)G;Y{!hrE}hM@#Cu<t
+pz4E}/$Uо7xA1H?ˊn$QǡM'z#$4sagOcON'UABuL;uxD|];7}/ˇSK@$e<M[$lɹTzKtD)%:D-^Fm#,Ѵ#Ҫ=v_3+='Zw
+udZux ~<V|_1Hj~43
+ 4E[ j4f4WLќ bY:ulZ.RIUVZ=W Gћ! ? .S7mf
+m;T`{Aʳ}nXbbȵyOuK}+x
+W$1'݌Pmlw긁rC4%<d(Mj(N|Pc(L\`Xs1g1˸ۘsqqsEo$~jp<7c;_rpkLe:bY^1Pn,4% 3$oOk^<ɼ4Q>)s|,YR0g~JenJev~KN䳾3~}7K|bp3xG Əz"WU+E8-P״,$-ݒk>o}BdLys ggˬ5FkŚZiiwHTO<)^zgPƏtz
+pl
+<pwФG&WCZ& п
+%+X Gk_.(+ & jPE4DDa(01UMms4$͢M$M,IkCHN[9p~NZ9ͯ1cv+=eh5#ƚ+*Li i̥iⴭ´}GyͶyͶl)׍P[
+u
+x~D~>a54Vj
+
+]Mޥh笓歗ֱ^=
+5-Sx{*w{S57WA[+4g|{vg6_{Ut{~jnu]AMRvuR]q/ݡꋒ_7x`cSQ><(8Fr}!mcv~n $7%ԻS*!lla25~4q4jWU9C~F68H-A-,;93=Aȴ^Lİ{`=hvnEO&мyN*Aa`Y#xG A8a{MvHw+pM;YІn%A 7n
+ba(ѩI +D l@g :(nw!n=]'|LA';@Z1h&W
+yJ^SգehFc-,FWY 5T/PcNiQ&8}$2*랓hc+
+h.Ztگ8@~z$ :ʍ>'5&`4G9f<tr(i^i`K6Q:Mo<Co7NGǨœq=w%#a]S<O1\ W 9FXsu]q<m I @^A,b
+ x4]'N4[IvڦNttd2mӴIן|<$s߽|Ldžc8უAYᘄc8f` +2=oCtWV.#M6a[1<=v?|k5+.*G#l'1
+?M`~Q_{u<>M" S|\tO~];Y>9uqNby+v}_c|BUx)8OR<J(?`^e(M;cm2tk t.FvH/pNhVŋ">A Z_E=ZOQYtXHY~=Qdp%vsQyI
+r茢NX鄲+X\;^ZJфQ:ͩViVN3kVݥ)[4zƷ}JcX:B*ẏ DHCѠx6zNoE'vhXwJZLfOvl4Mgi"t(,RH"ߠ!/'́8dLb9\h1(q/!w</dE<R$h%e-I4ͥtF hb&38g\4!h4g8s3y{@ h^5s2~+ϗ7{ӶxRЀr6\܈J޲OGh6GMӹds(VB:ވvu I_wDЧ{VУ(jo ExrљQ;KFtdo+`<iDoXц14).gpFya?F0TG ~Ck3}^Cgz .ÜcXu6D6w9XSϐ(Q⯔a\磈eLE:hAũ̀)o"5D>CmtF7vH<nI1 0$miqE2Kץ EH
+ߖ:
+?:[0 Q"庅 k
+ZSY6 $XQ*i!*k1{.si7%|VQc*yYQYr_2m6ZW+bjE>x&( RI}$5yN["iɜEc35euBi.*mӱ֫eeb-ec̥1[>W-lfVkpc`LUFl_áZu;vǑphDP].sTUv{[_n[c8~EiØBb
++>WB[PX8xpe4Jݴڝ{l^SSAD]Q\PmTT)q'/v⌎9eؽ1E<y^?yU vV}{ S`{/О
+-mЦ8ZUB[9Bfv*L.WlSY5FcYE<ϵ)9HHr~/n,:e=A:<`m!0h;k:yT/j=TIc*=\>Y,4QhIVvݽ2{$Z>,uq_gw(/ԴN8JsT+<۰'2|3 A
+79pMnL}fg߹;zX+ePq0 "g/ܭpكDf\ Db
+œ&2BҞP!*eԡjNR0
+$#JERdZ*`2}|S>:#eqL9I' r6y < r keHKM8%
+)\
+c\ dDR#uxQgIa>lh8(6!ߝl&
+o0xlXu ĸx?x+ApJA i
+z5[ hwҔ`G .].6ul<7M}fs>1y(
+;[D44;h7zuS 
+1""G9QlG]a|Uz>"S7I~0=6Y@:#ˠE`NА!GΑq!Rpu q2z8 I;EQ0CHOa2)t A{09G݃FDnҨ}tܸNoqE2bǾfi|=nQɎo=avfm㴶ͺ>BeH{]wϷ-ia}
+>E?hAo0iY7z4zbH4l:3Y2cbf&r}+'j)$Ml5%~JC!f_`= n1~4Y0Xc0*pZW0MLg%a>"hy[Yݭ^?6Ĝ#sw3Wk"?[ )_2c^T>J|akm$5-4<ENAq돏q8?;5 c*)s)̇QH:ɴ{y^tQB(O(u
+ .㚖YY75n\God5k֛{:(ZnU>EU!K~UW+T_bF-YKw+MŽwg]"AͼB+i+F?o漢NʧU%Ae]GkE-HVq@e<-)V%ZlB[~\qvA/nhvs2tYC\\sMa"u񵁴;6lO{OWIO0h
+*?hS88] drC
+RaYc
+l e>f!-af 15erS҆6žV-!~*]46,`X6ژd jO5>87<ה^`/5
+5dJ iv4-=sr/S1O uyLy>{"Jz}=>jD5|*Ŷ~̞}}?@"B4?1>Ȕmjβ0gzd'y̶xgyEf[R#,#[E$[wX'Z'D&j{~.븾(emytպ աh|_>ЪQT֠0
+n1,ɈRzREY&xMO7wl\R;K?<3 7H;RE,*dQ`XCP
+AYq%**(`eܠZ"S9k[w˨ڱ3gTghmi3p{~3} I |j%NLᝐءxROS㜚8t @\g͖"2ijO,CebzK^z*'M`Hզ|R "]B`7,3<kr@;:&: M;qNmTJtj"tF Ir ;g4~N{fĬޒ=XrCYY#]'dqKLLH$edx'tcuzc.hc\mlFD_i<1gDmT&܀Rh4daB4X<1$'Fs"b5./=4^7MĘrMѦRmJ3T5Ԩ0m {}x?e8^ӖM/eD&勘m/1
+iJ0PK[HVUp^A8sס߫~r09=:=;aȻ^5&w O11o[U2+AS$K".#U5S5:QbYg
+.v ujmuRrp[J
+)p+|gq8JMh9
+4ֱRS7n&zfm"jJP=r2 _@
+E1(Y~W=+UƅrOu[VUW;\7807pk_X>o2..йk
+K<%)&~5̒<y#pǻwpg8X41^&7Y#P?;q a{'V: [h?+QN;΢--F-TQͱ9@o+:!G+̿nݭ0%V2 u)X5x<: ytH 1W㍲\"{f;;ڨ O=+W~B(x8TE|ķ\^$vhjb.ղ=AnmdUҕ[P~?@Xb$1F씉ğL%t`90pwV6L&YuDmb?jō
+ ytut_*.xF ($$L3mp*, n Cy&؏DcWYekzKzƒkםy ~$eE`MM p ԓ 'EN)t\XYG>ǻvV5: ʵ\Mg||l''r!w v\\NsunIHB@nJ-v6UueĺJ6mZM6iNl|;Gw<9aǙq?m߻lIDkzYk}Y5ӂS
+N*XVyq\ǒ؉cb M1La^ǜt `JSLH!{qO!K
+58MI}N$plS%`1 [Z1̤!naS#L[DY]Ø5l`]D D8?N` =ekE\-y9Gˌxf$2Ոd:tc:ˋCY~Lfwb"rb8HγA8*r^`wП?BolYz_ [E>OmY$YءlV+T~T!VXF(jhQ
+5]JJmh*}RE[֩-oҖb7)l*^S~_UkeޏUyGbG7}<k-!&h@S?FMp YYN`)-NUy^mKA$8 Ua xEر-ENWBvNJ,#UOVg||))r]n]tu==}-k(B( 턩Pڭ0E! ԡ)rG;B3BvhY c{߫]EzקBzPVo|s\>r܎ڥҰH
+
+QG^ԄhrNdGa[(ң0DHހ~gErHFr,Ls["_~&܍Тi-Xb0L:QZl")PbEc4i?eC("Cq\iKob.uE(PNkRL}HAI8 L1r(,6q^8/R/3óI&=4} xd\" "1N0uH= `W&Eh3A`O  Zɜ&$"/4 4sGL8=~|(1{x{a>7cޏvQ}"kbkre 6ScMfoC]BV8vnr>2 %Òyb=65W&q+_%sqq<T\~\bcov}̱8盜gb18<ƈAsknZ`pe?l=C~r*/wBx)ph</S|-[L\Эsyܼyp>#$fxuN[Z^!+yɹ\ tT7,B2ed$dM2!@$@E@6AieX"X<j=JZZoj;ޛ]﷙^t#.[&YYY6r
+f1ÏAA^j%{qzi޿…q?s#1Ws!:'P8PB~
+\YG zNG;Cw,~rq\DO5pWsVýS_8><u6W<iQ28*΄8DV{xs7)XNQ>T>a#A-#Y6ӧdbW<)*xji3Z鄧_c .$ r71_*8]p)@䔑Q<<X4*
+#t'Y+⨀ZzI5YD.𯛷ҩ \4 բ\-ix:Wܝ\1lFX7gA1B"}j,'I!]zre LNy#j(ss-ƥf\--i2>&=2x\Lץv+FDjHe=X<[λ>|Y:*P2ɢEH*']1-Ai .-Ylj٦y`Z"3M 5=*5Rm:&UAoTӧR|{#Y f7p5^gg+ɂ2α*b}bKsh-rV%3.YjJMxTRTR^WJBn+U3sJO-wON~4JZ#)2J2+.Nv)3KfRmQ̍Ts1/TW(eCÚW5M^mm^w:$& DoV( q&$8ؔjKʒj=r4muڦu[Ee:.ײMHN.3ߺ0³tkF?+r _A}Af$PJ6+][fsJm.V*[ekOuslKN[>ӶYk5-iHMMzMMI$|Oz7lw :88tf5K-Z6Z< RRESi j#W(2:* َ, \ñ`w6m~O'_U֔6!!k<
+ zyқE@+@-,8MR.ٱ˙ul}, HsV؝ )Ύdg!ѹʐܠd=ePc3[zk0y ;gϐ%+e9
+:ޙW
+IWsZb-3dTN,ⷣr^ySQR3NQ2~JɕS
+v.RP*7) o復n9*qM{2f{p5kM*9Y$JcT}JdrV{zWhuwTF)*C)%J W*F%5]_KλR ;wB> y4HdDddᲯ᢭ba0j|Vg
+ўV+XӀ\Ȣ=׈mRiib5qК(n#f @՟"0$^-k
+~J)^ &$ḵ0242m3|K$C.VjYkPRVr:gԣe#"$\/ZJt=H:)ށ og`x<VG~Ə5= P Eܶkк?ۛ^MZJk8oT $,d+.uSRx`7:8l[HVrс/uJbvJz} 5 Jg\8 /efeRrUc?
+#?
+5ϭAV6/M# Ϋc([ǡ7`xF1&iOf4ٰogTa]e0>WНfkUh'tzs ܏pEn
+"D3KᙈSᘁ};󴖺?Vӧmj*i3x*%Sg>?{CbM<p<cᙄiT|&)pd#bWhVTyd+^BX8=D^#\-
+/kqZQp xÓS<jbv4
+N/wK:o`rcoe
+kSFFLf:>
+١އ8 (V
+լ-ʎ+uoJYTdUy*/|rç)'bʎR%_R,J,V9ͶWefDSbYM
+"[AH.qVI1I=R b{dS%jRUc jQ/T"+dp&XOТ?KX5 8;\dpM ;sԂlJ+HR`IxG:2$a(G(! wLA2@B+ڥF|+{S+oKHO@=L<Do9({hWd2T=%&Hp`Q93e@œrZ~ꬓWKVU^F꠨# Ze r|/A>YRrOXk@%({#=Hd'5"ᵺC{뎒A%m"vՅr!\ZDXDIi-mkV9; >7m-2݁T _Tâ0Ca=9Ap
+ ާnI\r<UnYcEnh/L5%<mr::L,:/M^ {]`4ܴ|DdIT0
+s/|O<{4vb&^y ~`_
+*
+K< }$rNNX:xD[@[]G\EK\E|," ɧ1~Ï ~fxN24'w@5Pc$(-߄k[:KL<q8)ZǏ~Cŏ#,,7tPR졄i3x7y~t|KcpV!PDDx,: cvEa&;i_v #o9~l>c
+Fu5nS][n鱶vm?zMH4Mvlz2O}SO3mpXwkYZҜQE~]y-:c,/},Oc_B#‰)xR"|x{<5䃣Ȼ 1iO<O$C'q}է!\_[3s [k}D W!8ٿ.\^Z^zc5q'Fn6}1H~NX?뇿 m (mi#R,hf9甊`)8jk5M.`gT'v:
+ WJ+"UJP,۪Bwņ2rܻfa#=mlsVR\WuKIUBXw%>2O}2<v \h][YTurT)&Vdx,q(S&ZF=J *3-JT|em6V[;USLmr%>|{x+j|Ɏ4!K Ѳ4$*k6UixKX-J);XxU".)LuߔQSv}pϿfU^o 쇯4אZ4e6=|JnU?Y m*P\~>E(uTF+ub&R_}.5q
+``x.[fЁkG-"P'\${]NKÝ?&)!d/AW
+P?AUpFǼ QI쟤Oc}w >
+lb-K膟%Hwt02࢛OT141h4r < =۝&àmൊK9W o5b ~BC,p} i Ce!3vsx|O=fV3i>TO.:ɒ x {n6L;h3DX` v},d"/%8L=9L"qcه%Q:sE̎Q
+[\
++Ր
+S뜗闸ornRܛ$&ܠ"ͳ5A̽L3[ErI 'CB|+ O\o ɭ9XwW7w]z4w(]xM 0T0:r]J9ěo!Ϋ!#?53vH=dPC*[3nG'2wCIC dsl%lͱcM97lAb*Mp` mZҊ)֊ub+XikR
+^be00φuv/s}jϨWfz焦n]Oʖ^Mk^ cGP*z bYw
+i/$|LOgU4JBU!IMw~tH\ӿ!D I Lذi~[,DoW:߇[u fϘ%&7&80zuY
+1q=]݀yC'#ipH~B?dOˇ6wc?Yؾ xc۫ƑK)9~?Ci چz;>9z4F"ӱ|"XaM.c'~Gc;~l?BadO6CވD,) ֡4)-ODJnbء,w)je?6XO~<J"s%W:m=k\7SW: ;\b3yQi00ZF+m"mpb6gkȌxF "[h>4
+v%"ٝeT5#zG>D_а9tg,qZ#i}b@qe\E`U:X!
+oyT%DgNvh?mҏhݖ@;tZ
+TcWRN[*PinJrg8wl+UIydTv~UY7QH{Y\2Vc2A3_>!WA ,Pea Tj+SFvPdk5l=tCm@Vre6*ӶKd.846ݔ9/LjFl7`f11@Ԋ|J{ re/VqI9*tT)`une;)1OoXԒJ)yRIP|R EX% iua^x\tԎQ#m 9QY9^AE*4)Ң<YvV(٤tg)JuUstO++FPlG+xGH^?d8`Du9jzfQv%*ӕ W]6ݥJu*ݡDwq+޵HڮPߒꂢ4y[[CVpgтau&FT*ai uaL%zkשxob~xz황(ginIov]ܟ{XaM`U2rc-^O4eOH6Ed?0ME 0-<- ,Mt'?nip얺Xg3jDvL%s*u(k4?8\rb̙] ]x]K7qǹ!~]
+agc6S00Ld)}IIllG}4Af 3^a5dhH2ε
+8Ù_( ȢkevXZEXQQ"A8
+&AE&Qhڌ!ɴ555Ʀfi☴Ic:I˗L;# }^3b~/gf)5 ɐJi6L,۔2XM1R,,F_I<PsG]j,S9R# %zf¥:?ڨI;C!䢃۩G{7ϰH.`YkE`(ֽ* Rȧ29J́;E4
+>KcwS^e|Rbq| _Z q;FrB;-Rpt SBdB`5uY,h]
+]ϱp$a=l2_d-ܶ-G3oyPfT_G?#E.L3
+xl8I'$JUKQ%ʧx
+x>=Gq"%j[ D@~4:\[?A{H"5=iM LV y$h&yTdJojSiƛzmڦ̠:*Wy]\ hqoA`(A1{>MCL ֔2Z%(wX&e0@3)| gn˼\iJ1)ɼ_Ǖ[9B*>s p_,n5` <%<S<2@E!aQH-ZR9Nّyʌ,8TfWu˔`]xkb#T9,(z䇲 8¿6U/S\1<aU^I9QÕ=ZѱgK˖4x'*^$L%kW}beoh>YO}A-Ej1 2nPs9x&36PaJTj]c,u(Q\1-rtX%K#߫q{^aW>1^m!l/I^JA(
+snVHn K<s2%Pmm$ÿۍHJxY25
+"/3$>ਃ\ PN88Dz䎏<=@E16F JhcIMjkڔmdB6hgҦNFљdj\N<>pT#A13&d=O)0IFKM/z<k_ :{-S*%&6$0x` -Bn3; )' ps
+\Y³hy7ͭTd.E\O|pݖbv8 JXy/g"v?dyBFVqx TpǗ~>cǫaaaf>ΐlTcu#'-c%p"^yfszH2WKKN#\E=ìnE#?j> m= я2QluG>xu~Rk+)'y1V%%G.3[vm v V+Xd[7A S  v1.
+^bNa=o Kڅ0{4Z/C@=x MMtS'D,w;jxA-"`!fƌ.1VPfAq h=#187t)CWi9\u}?51H] TH;\ G+ف۹@HфOy
+ ^c|gS`
+6ʯu@I{dh@fSo/bƨj$F. 2x%;?b O.xp.ٯ`eTGVrY`; ~& oþSc
+X@divY]щRxZnd3BI<|ls@𩌾ChVa0P_Ă
+z%*$Cq 8Ji\p3ŭW?♋ EYSY6F7[,nAw÷)֯E!?ZB <|_4|sRFR_6|fb,bYg\R)|:'.Գ9,:!S+\ƽs<]TuS)!ZqE8b8"ҥ(2ClybJaSQ\Mdk$S/jFdfT5u\R#^Dq)|[Ƒ;;YNJ57֖J.='-'+6ND)/XHnErtŒ ]t͒[%ise$Y7&FaI{Q gŠ$#mp ٙOf`]Y @1xd6Ia%'!Y%#1SL0!咖e2)Fc$G$>%>) /JD.KKFo o<H낌r{\"
+
+!( $hSvhwfdcX2b35Y9إYoϙh/﾿}s%Δ'BӭkLgS&yC#?*
+WP519F̍KbxqZ[pi .8 D;_g;dc~mG^ioӠZ ӡ*=+ɐ }b|/cbLQQʔƈ̴i314(dVƠ蟹8f"a4Q;kIx?6:ȭ_ZA!=sڎ40FJFi%ch8"N-1ԯ;rJ,% rfp%rL~_ K'3jaˡK"F9܊\92
+TL,j;V+k
+|[Ve6RB ?L0v?Y8^шk%y6 ʈܩb@͐Sk%m R[%ܻuZݭRLjӸb>C__@~ ̀iPn/bÝ5E ^a5HF$PMi vFݾi0 LzBI9],jPQlcZ? :UOq.N:GXmgj4ي//iwgGCn b8Z -th3?xV%mkWzV\b6o1@Z5v\B):G̅rbvskv<
+=v]@'%u߫eK</4p''8?׿DC;m'mϯۙQIJP4%Yz\ '%.#me1˽]i6> ^%x-q/^p˼:x =0tu=#q>9,Gq$Gһ<?RVjeuYˆU> Si*НhA1_ˏMd=Ow2Wj)ݶ<,.pe=*Vue{%ghIŭ1|XGv٭dwhf)_-׳m Z޸Ndn%{)ˬ}xw.Nz2Md(r'ĵ8Dkq*wՕrd?=.>׍.3,&[nIߚ6.m vxy $t2B!]EvUC 9Xgshpflb Du^i_+'  Bȇ+#*uq9RWNn1vٍ8|
+z,nqd K!sU| Rܒ@ʟ Lgl/|=xY\Jan3y-ƵgE;ϵhJl&Q3wYj;Y6س:uB@LrC;ťU/ew3},uePxԨjF%u|%N8zr&,ӻ%+\BEk sGUk2r\b|ZW"15Uzh*WESd}6EoAѶ*b~my3}/\686epD%Z|quExLUUM1K3*HW+2
+ţPnٻq>Ū\X`Զymzg5>79C*gDTᛀoRLIuLi9FQ򘐳u+DK*6'x]8Ν8u
+|dJ5]k-9JTVZ%ɵvXl+dmmѶW2G%rR Y$5sZ  `0wg45 B
+KAI^8Rg|Cɳ{%^!6GXM_2Hc:+ a 9 9luEp1P S(%wInQ؜buISYr19Òl6Iu!)NE'ñw y !<:sوa8zśc m>
+Ssp3 p0S"4:vhPXQNse׬g2gQad$!#|އ]m^ >tq"xf1"65
+ jiPiɵdXyс/:
+=Nƈ4aQ~bލ (=b)(ʯ6z8k"gތn;gpbÜ6PE1Њ'ODs3A݄/6bⱎ>vl3ܻ:A>Ow6U3F}۪NxMLv؝$cx<2JNl%/|&95|\fyWƹASmp7@|r8;@lG8POB>AG<&?vr+F-YSC{6-CVJ- /
+1Ʊ ^DjA;尌õ ?O`>rOcUx!G~'+ϲ[ !6)8OǓ O~&:? .i*h`;aݣU ik M%d e=2ܣńlE‡5ȍ95RFx i#p QZj|m<9ܠ xKrޖ6%[kW;($ɼjda\<L+^8!k =am޻W3]W=E<kD8@ vx_*dGi TiBT0B )28޺`8^ߨs Fh䠤3A>( rWRdD=^#E݌+8O{ڋ"Bk|HL߬+ɩѩ L蟎L8r(@~ ː 3+!" o&K:h}Iz"3XOh_ۯ6:6S+h&&q$.
+gduatX\qD$ \1#MѪScVciS5.uZS[MҴq[5uS퓏yf?sy{Ϲi >kpЃFVxى bf`FvQ)vm4ߪ j:pxxeOJ[ڃ3hZ4(3i7D
+h_bA4ϣ#~n9DjX$Ȝ),3ɯ@|ޏQd`n _{dc?a0d@cgnK(!b 2KPP-~D1YRג!>Nb_JY8ug(w|M&O~6v  R@">
+ 55GC|?$
+#9+1/"~>1` Xt;%$(6)W~bâ#4TAA;(jL@᳝![2ߓX4qPC$ HK:q<
+:⨾Xn9Dsc;Αѝ$?İd$KXN,)Z'X[_8z񒘭
+=Cy%\0ۓ3
+e [Aɯ3tufy7ޘ MG$ eѹE]Wmv|Sk$ۥ;5 
+1<,-ǡ)Wxѩ=ޭ[ր
+B@WCYI7Jcx
+5 6čJ\R%1vI-)%qswFXSgǥ [LŃzr]_fL+>x)m[γxڧn
+:UΜZb]0,X 1 lĐ-h~Gޥb1aXb;eS?I+Ssquq͎-݁,7?+
+Id1Đg5]U^34.iFGWڦPv{K8[ M6zbOnR9!1*~*Ǘfگ^g;X
+ǬICg<=_[q 6<[ܛH"<ݐU^81֧{/Cu7/̙FŖOӢa\;=2N*GfsAѝ@ }˕Mim`DKc*/_K'c"A[|;S܋+!{}(Gw
+;pH*TePPPAݚNN:WmWI&>Vh_% ?|-}<%+Sr`s>2X8v|PY%`-{KsĀ9;d dP Gwni8ؿᨊ״P6
+@Y56IM bOEGǔ=J `
+7<k8<~k6H@ Ɉ!a9\}ȷ"׎F[Jar^&>Y1~~02đQ*ɹO p[_'6 #&b#YyVc}a8.'pYi!EIՃ}ݡ:BJfo{6in8{ڧE=[1l>|쀒4?13*Gr#u2=fgxgwsڥ X% B
+b {ZHJ,$J}B[kG8ϷYnVx[󝨞;%C_Vɐ Bb(1ԅG.l…>- s_z<o͡
+7zcxÌд3{ X}PfZi_SjljSBkeƂNX=gw߹Ec ޢ ؈C?!W7(Rrhr2`>rʄ9Pȫ_Ra %%njE'F ` J۟ J;!1i*Vh3-4aɳbTMhͭQ^W.t1soENMX[CJbVKt'>l|RJeù, =Yܰ0sԏJg JgC EY(PݷVy|Y1'1\Ɔ ='m%ڼ&r Σ#ZO+= d r>Y} 6b((Poл0+Lh8.Y4H--ka495lj\i5^~>/Afg1[zD @/Wݳ\Y䠑+c׾tHӤUR3BV~7l~lRo[^MFt]ctPDviLA ~ϫމ4U75ri}geofx RcǔJKCĹ1^xWꀳc=dmbBEv!SzfECgq 9e& rov  WȱŭALً#.cC}h3:'Ty\r;OKFԜHER<`uJm: l=! r{e'gʉg.Y2);}9Z:6Xap\۾K>{#Km[¦c?HUU^L7McUJܒ_[pY y<Es+&ieF\XQ$o((%X_fI-K@t6KA>n,h:}ԽFE9ͣHӖ1)|իK-_9ܶxu"u VsD'/|+\8e)%:(kD) ԉHCv`etJ\4 -bA ;`;`}1 %۷Ȇ{AA!
+Ղᔞ7w+C8z֪QQZnh(PDM
+2ɧ
+wm]Rt ! \,~M; q0KMLlXgCu1
+ ke=VJ0"sd;F=Q4I$GҊH1'} M@` ",@U c +<r=_'/B)9Oc#)1>'_ fg=4נ5(+B!b(A \PeY{r _&?+NFpG e񝢤Ik\9..1%2jGLDhZ7CbU EjTϯ՘c
+_
+\jSfC+2}؎DImR@uuFs{Dr{1
+QHaȉ<#T~#FӺj?@ mUbel{DOPrq%z{uA4'q0#sY<~>H` &!1wS{j%wM&/ۭܞw:৻]S: 4rv.#7<?Z<Bg qR4ebi{_wIM:'2"J:8 wNT/NH!Ǔ~'EF$ (;71U;(=ZG5詽26g<&l|1yp]&l qEۜ(Y0t>Š 6C9oF-zg fؐq$Ɉ3E0[Ȫ4yD A05pݏ&کo{vJRYޓǦ8MBǸ#vĵ-4u-W7EZSdti@ ~@9G&(@ 
+Tw=;?ft_61Z6`s&) %׆*k. nލ.ҘgivP&(ޱhжx~Wcr]Iͣ%U=U}+ȼy)l΍?
+p6,r!'CJǡ (P2~8M@z0?C[_5/[T{mJбd.uɔps<%l2oŠضȋ0Fe؎mnlƓPw'3]78Y3ݍ4N&4Sښ_kC<~Ʉ0ILs~j}a>v%f+j*)";M@|
+=Z'plX/\c0v+_G
+b`j| :;: ;lJYۏe]f<y
+߲1t}$&"
+CQ똞fi0UT6(U
+3635CU9Qt"y=?9AXUPA ʷUUoW=pݝfڊcټscpg8g|ޔ-?;Y?N^
+?]4T'ԞxD|TZ||I*\+@coȄzŴlҸqƱj.?3+Uگ02R,;1_8S8SU𼌫*N Z j/nh">^>1F05⁅-|6g]q< iR
+lژ[4@kW؏CϦpL,mล[YX8[w%/}Jh͐vpDkCU)2O@Zb$M8Z`YSI\'-a.bEs)z:K} UwmHW6dևb !l|f$C"WDZ-,b؛yoA0~{{!T+7Іܣ{nuΦ@ a3$&KB k.p6x)s|otuOѷc#%wBGJ 4͵l244"ou
+`~ylPfxG_>#ޗޔP&
+qrNhM|WzW.N^OkmDy(EX4Xiv( Vu^ӵo1IǜY5|/+tt!MK)b>_
+`) 4#mJPcSTCHQT E]94i;᜼Pْ%7g<j i}Ml('m.kr5ix|(2e>2O9?\-nR))'tבZymti 8YPl`jP.iLgQhg0jT2&!ߩM(*W,b[-'xd^_$+8+c::.*j`(zH.i/4yThDvOMjUk9AnbJ~L)
+hW+NJ\o ,eCFi
+X4#xQLr`&'ѡ
+(&Bs˝L^ x8<ᏺNiaNN8mxmVlʊj;DŽ=cqߌ+5dC_TRʆMϣo]mTʸkEI729=ބB^_|Q}oT;Yљm !h!7fmạ-3VƂ.C}A;[/*՜SnK%uGeF )mm knDC̗ xߠFyUmm{8N.z^ fy ܆Q1=!էzk.todV4N
+DhJጢ.*o\l`} !qQV}K^9z|JڙZ/'CCR;XJYL~ F]k+I(\BDV
+p'6o_K 21n){AҜ>ƥ[,>=ё,jjnNkɧ]h%EQ$#2Y X+IV|1qx`o֍S E 2\9#g<똃!׼|peh</
+%DC8~M$>B}c\Q{uo-+^[s_٦M9N8<w~YU,YfEpx[Jah(CծK{׽-':*طnkZԣx"0u\7ΧT_DDD2i28Y^0Ue@IGvٛߓ>" ~kN}+Yg풾VgcEYIa 㙳3nosqyoSsؿ;{n>[}-_7~Kz/N;Ώ$VUdj#g&F0c-sIvs$۹$Dx0p+bi ҽbοkZUŏ2<(J:4C< 0QW;`dLY ^a_ #VV R)FN" ~AzԴc}-I_
+*F8vJzPԁ6t4C-u`
+K-PDIqIK!|V0܃P5yDQB1mDڛ fP* в@+ 2K!i
+OG(w@ [y7M><bGĤdsחkPCq٭<$qfZ;/[QoF0/F~-
+7 `<Y?H{K<n?1ɸ h*(-= ɦH!MA$,09ˏ]eǯ0.'.$-u%L>QʔC:31 h!Rq'Uw
+2<hC"{3bㄊ,2t}T' d/u)>4p1Ι f2>0
+30b+ІJR)INYZB4$m݀X!^qTv᤮<(:<g,OldJLpNt@ikֹ?eM?Ow{ z|vrckhH&∆$d*D
+J8e\d)}.; ='=NzQ2X{*?;άJSQV_e?ca 9] R
+k8KEpIA=ѢGE@!KѰ 36D!IHY"eGZ:pQ_s}]j/TGU\yEJzYk*093lkkiǎpc(ESW0v;U׆-:j
+ef;rMԻZu~s-0_;BdbZX:w8Jqq7}[\Q-./N&1tuFlUC0T];"5+>LM\òdDAMM`dɕ&7ד A'q4ЀS:jnf4 v8.޴z9̵=cc3b2HKҩY삶Ό20.g6 ;:mƔ#y6EDOmP
+l owKl[w~iE>`]M,VW(']& [|c'2_3~ept%[ ÍPo#A6{6?C#Z"Ӕ rZJU%/w_#\Ziy=$S.&g FՁ+_!p
+ % OzM†p<72ZkĊRF U^ҟZv]]L.Ek(2\5Fuh ݧv|mgGoC}]s2f)ST.\UA?[$KvK)8 :_lY dõ@7ZCk?
+m#vL9sw %t]awGЄv,МܑҘq=üfuD0#rQduj(T5
+lUT+br9V\g)jgw
+ߣ)Z6YY>O_>~lq#1!ˮ%$ԧs.<?%<?$y|&'z|aݗZܗ*1A&ebDU0֥~)6΃G:,/) AC0
+{7]JtYa\
+N1[gw
+>
+sn]}edtsc Ym
+nY ea,8Cɉqb!^)x/Kצ_ģ!l/Ԁ Rp;ixHC@^kL; 8Y$fR'>pɄ&m,#Äb+|UA6kz$w1:OmK+>h4ˌvpA= NԱ=&Eq.>L
+Hbs,)AP&Y+DlF.P~PJxuTKԀ1j0E,a!ĭY
+Iv@d@/yGwOe<AĽY)}qIc$E*D1U.Nyr]AQ^Q^~(eiIkID yH7CζU Qwy_xgBzx8}!Rzܬ["MjfQ@u=5Vu-*KDP{+c*b3.Bx9.|+}lU&K-94asHO҄l @q.)n/ҋM*ucBZhWҺq+JirJh}Y
+Fo>HÏn75S{Ǫ<?ѠzTQ9"K9
+Jxr ',WUUW~R:*嬎|Vwi.Gú_5-A v0b5ޖ۳~D{u@{|snu$F!ۜGO c˫%ɢ3I$EMF. k29!:5RsP AhilA`j%Vپp~p~mXPG>ب184aE^|VrV\Hj8VKE@Ҽkf)Ɛml2l5}_e>ְ{`Gvݮ lnDJbS+ <*/_!jSSeԪzAگ\QNr{ Wة
+k[A(7Tb2Yl䢯k^>tCl&25d]dqE2.ѱ2#C_kOk;5 ?
++ݾZ[ݮzGVV;u
+ 9U/,CrݵO'ϪJ.I5d*]U_+5ѕ 'oG9]\ 6Q 9TC.|~J;mmjw3LK-I^vbSŞM):<62S ǥgKUwH+Ziz:bBc3ivVW y14i?9;|+ۙ%9‚zmaFMɦԦݪe>HRXܰHx? 
+/^x rߡx$T"wHsVcԋ5v/<cqcrx [{E}mV=wGt&6Y(3$/k'uIɤgvGG+斾gx{zŔgt$&bgDr_nx5sSnXW_6sޜi~,zM7yO%ɃmR[~Wazgy+v 07{13|+^V7,'SfrS2kBV~Nr-5$5T#PFHYB4h{:Lzc3
+ǖ9L8<s'i3T9-DFCb8cq5VVǜYŜ(e&&@GCWS i5\xCNa֤RM9EFy
+Vి&- ~fj!zIl~6fOOc5aa͇=NApX '7/z0p/Lex@p)'m)r4QG囄<hm:L_CfI0^wm+Lw qGBKn T]i BJ{AH.հD'd:" 4 ?z\`E6KAÞt h6pYÓ4K٘M  76aK%
+gG(~J6(PÜag7jé2> R D B?xI! CDn\yrA=6B
+?񇄃>;?ʣp}* A*P8Bx6kMB!8,I&Ւosq5tT&}oeυ#g `*CD5D[́ I˭xbˁ4M8!Z/EDW(FgÒ!ɍ/1$ToDU/ѠxX  C5͍4A<-@R˱8g\,*Q1,U}UJ Қ>^YC'ݕdϓoRzR?%ޗ5ˆ j"F1җAB!+k"GWE U_ƤO>
+Sˎ*W]Fv5[v;S֑T6یه[ޕM`mYH1Y&v5rc~ʒI?&{b֥uGC7
+1Gm_jlZfkǶvUSoAYx1&ez; |NWӑ'%Fs& 9<i!S8$n 0nJ^p~ tqէLDP
+{J#)["
+%䷦-f~Sj1UïESVWSfVh
+X6ViN WÉ?`$a)xVKz6:QuiA ^T?H0#1fX,(i!i%[e_oZ8mYEjъ0ҘvZMGgPҙJR&OVe%8ayNQ.(fhļ2n3;`c? `6;~NV﫾bu|åuYW8:DPz:+ I /+F)%-"Kbi Pq@ZL;sr0%>Ic ʹ\=vk=pO&a%RjCέ,b˘Yjz:d9a)D@!s)gLAƁlg
+L`Ǫ#f']lnw|}>ȣK& U|t "znJa()5Y9U @#T4̧%
+JdQCm<&?n|01
+(_.:/:1_^<{'g8b;!|7-`27 '0JaBy{ps73ү.y-4=߅:Jzt[Յ:G +:wN6w'o"|]>\r
+[r OR`,k99
+)[V;1sx啥m
+r.r3h킿G׺_zh1a>RB/On~
+rs:5+k>|YTW?sD@D@ }C' l
+^Y&"@Gb| RO<>y([ca VZ&J.ę];A4 1\;8:dU
+:#ɢ$E#U 4$! h0H$u/AjH#Q`OFM5A/ ,? _W)`-"5%tAH^XwƂq Sul'uĀ  짤4pFhӜI$qҧ/lH'R<^;ң|vz$Y1`%QfC"R%՜QRk"8!]L
+^H;I:M}:6}28 c?O2` F$Sim-y9AŞȈ,<9Wu* l6pəN?șJ?ΙLq|
+_s?
+ '/E`=i
+X@H6!G3=pq1!N 'k[cf_YѰhH%?Iފ$/c AtP
+)&C6TTT'CB#)E6s\VHFīC⦌AC%-wɅ~ɍ7ҞWWʧAe쓢GY~W>%)ȱ dv_h2hC\&%hG+d ?dTeV(^K6U==?^Q?+镾(푿/1ߕ9sC1y5kJf
+dlrU vB$ܨ}(_:<bI?{e*jd>WQ<v+4׳՝9ÅsFs+?gٳ g\Gh\Qm r_3>\R.Q>ʭ*}hXv[Ew+k;+UsΏʛGNe?ն}(=7j7y T
+u^֨6F:}ZnMjpA6JsG)ίYv35zμ3  t<YE5Xl
+٠K<`3~ qno62F?Z`߭-PRUVzz٥"}݅Bs =E gZ ]O '+ߕ!܃r{KԺXiVmu~A⟪K(YqdS%֒JO[]3+Pet{JLAL(Jgs&?a6hPYN.WzHCҥ+Njo5ƵG5i<TqT~o*5mYİ]vOg
+TdC٨3GX1sruPh?$ot%w6\*h/<;[n<Pj}sUƽUۛvWlU]ӎMۗ:q
+٬-`ϫS>Gnln6zOVGGƧtQLfm^_9P_ɩȼS_J]-(go1?gE1Nzfˊ`!!Sܦ%sYq'\H:PZCⒺK[utZUeRZyS1Am.k.Ⱦ՜O[ng=g>+ͣnq R++QӡI|ThsH⠳L%#}52l:14Zmcֲr:YaV&+#!+#w^A<'.Ib/#U05WCZc$.vwbϵ4Sk *YM m *),vr ;? E
+NoD0UB eX+W|/qKfG8#~}]Qg˸/ԥS+3KsJJ:bK:be{m%M̵`<7C0K `>—.ywóIYx4)p)1#g:|#zbRsy٭%)iuu٭̶ƶְɖІк2^0QT|/[d`W
+6iaXQ#4L[ _u68qk߻v8$d02ψLojig4;z:'j:+Z6n2y$n<QOxBa~Aoj`蜥W3iJU ԑj¥  Aʀ*J~Ce~n2zu)"BX$B!?ܻ&
+s?G"nW降2udrJ|41`nb飻vשO?T|pt3˺#/<=e
+[ S79n&܂v Oaqb#26ǀ#,pp
+"".iVfXӾSSLifeZZn^|^ν\ C<*w^
+~|.oxP7~#6WDs.b`_7 wQEڀp
+pQ^8~5A[0>6?G{X!ܖCZml&yB@h
+d?(v4g 큏^
+5Poq1~4vHd%;7uSꢻ(PZc^Q~}I@'.Y+Gѣ1q'oF,f@ -֐$b_aA*/!+zM_D%<,a>a>ֳKma=c=>;&n3[5K :
+Cw^SFfbm
+9^2W n0+G{Sۓ44 "!.9͑q\ w_kWWW6˨O3e ?JbM DVs n6.p@]akBafG;&&A~V4{`>A;jg)Ujj}OiA`0EE 2@0srO5k jQ&O|mV]:#tbT<NsHW*WJSԊt.uJܩ։+=Y>ѧ4_͍mf閳 v.qF_꙯] ogmӥjʦAǴLA ݐ*SJ5<T)IHj
+
+
+]yIOf~Z_:Td(,fB r-0}ϛz}вs[cpɬ]aMXQPi5U[=%y%93%*l˂9^e}>gj |#Cȴ & \4q~r#~$Th[xa6WRLeYBYW.W(e(fF*^K2%,}45%&jl~vʃ7n2?x#ѥm7կAUbTWr%Bqn:]+QUU:JӤKroTsU/ Y]̷9@g[Nh:iᔻG]is7=u(`Q{K}={am"_*dZIPYhUUI :ValWXY;(EJ!$T#U)ǎ aUlbY,Xб8Vڊeul˨ 2θ*` s>_=oAjfqf٭ AX:Fѳf܌VHG\,9u*LPr<gYBXᑤ-ųr~;ߐ}E^r^NAR^A퇶'oK̿5aS[7 y(uLϏУ^ ֽ&Kg/Zq>X}2.8S֗>`Q2rm-ӊ
+6'M[1~r/}e?2 Ըw)5̘1ڒR=rE+埏O\{*q)sM[R:MBɒ%rJcKfŖRv}US~x"&XolG!CDN-~W:uoZzC>j5 6D2wSOOK=P>{YE1Yy+/:{fi乺őEgD0?aXF&[^՗fݯuwwͨȝwU6[h]oz>9hqI gTJZQfAx'מmҙeȨ '] \Ct1ԛgЭOe9OԎ`ͬ #:[S!uӂ_&?r/.~=gwp(эsDDgo=0}Oh+kNCr^yg3}4i01**qzL91Mˣ7F5l1\Rmu=,/4 dwPiuDlDf$;|Em"mR
+q{2NԦibS;2t5Z͇m~h>T\GKeng`;Owv<#mb=tYgcT-Sףizu
+u[-ۻ/[їտF՟'K2x\$CAwX*.U CvDV15ZrD2ļc}\ᢆL T <<. ; t Pw'W\5+WN OT(ha 1r"c \Oxܠvrdq\r1Uvb-Rye:,~!vD(L@fQ0!`
+-e'x!'і;.8lXVm`X>nVT2P2e`/Fbd64L )(O 0t,܊+k;Xۀ3
+<VT\YQYj8 LkԖc a=Sķ]A|xĸ#Yd9C]N .ArҟVq!9!~w#nްcyZCʱi<'@n/#d:gH\!Iv8 5{ .wI>*\>Pv; L[ CfP9>r.PD(|;V
+Q
+k w#߸G^Eއuh<C`+0*(
+'S!@| }5+f}Y;m7aعI햊HR{9b9vfj7+#ɶ!vTJ3LD8V-34sgR/4] y>P9yc󾠻y1ew f$쑤iDuiyb*aQx:kz7a=RR\
+Ev-\o^ <>{.ZdCf!#,Fdwf
+,=E$A£<W ʤ<"w*?rQ`9")b,R/ %3E+^q+y쇀փ猴lᤚبrRZWJXU&R6JbEU^EJ^(~+,ͤOuC,nмdfb%fzpe!ہV.s>g^rlSN*ݮU*%RY*ɴH
+fMS iKGk kYP/NwA.2x@C
+ q##BD9} 
+Eez=L7_OZx͵*ӵ&JFsG6s{ns>nyܒyr&פS# ͹04BאGS zpo0EfΎ ퟕ-Ko䨯$tfWX۳[\Zhq6{L&ǩ펓9UZGcnsj}ywGm|
+ :3 Q@< 3 R3^Lb*I^LU#)>*"\cot[J72MFVYzvkiv_t-{(=]yŨ-Q1TC C?΁V
+SheR5[ swi>e05='撚"ڙӼv Wͩs\=w[sOqu ~(⣰B>"--f5<_F#Wi=7^7-ܩ=
+UB)\3%<A1LPį;bcs?jOZ<[+|P~TN1-, ɖc ,"K/!9Z(t_?+t%QbW%"Ke"V8/J
+sa8GX-J2%$iǒt,?]Ng> A$)7#|H7_f~:ev+%nk{ msCs"OԤG%s(EV.dK I,M/OTUFy\!'H%c%DD6$)MsYK>~*1rS
+z{㫻Nmo)
+9XGqT3uܔ,H * qDy\BW;"uP>'W&Dq CP2$O*#V\pFMpvYo핾֍}d|OI2Rb*LT(b*PSTs*JKy/|#&sc At -<cwc%k 0xf 3sjRSQv-"rhJ5'IcdFjڒDK*/$F[! HW3
+N&JC}G}^,\@~t7V a@77] Vpw7A=IÎd߹lNm_{P[$4ߛ<_[Lo/FOϡG<^pt}+JC߆
+)*r01k dC
+H
+r桘 f
+drd"AC<&Odab%PzϾdRz_~c2wPTK%r&5AyAW?.i,0H?\/4OhLIrHd^r bA<iB|<1Y
+"1" !_KPnBC~ X0r6
+7a9_
+($^|
+z~d"G?lL+ݨ0e>6z4~FȻ呷M_D4m=6zk5WR[5^v;BZGԹ?mFhS2C Aɷx#b
+߷%a]1g6aE}ǜ=9z+Kc/gTj/fTi6hϛiϙwkZtg,ͺ6KԄkǵf:8% QDzy4Xdy'eo>Q[k956' ?ZW'K895.=C٭˾xJ0o\h#)B
+H;fp-vh9Ny<3Uzq0dnxc9s>3~t8gPӁܝMܣ);7FʞƆEcwC7|}5<Q熹 J/Tu,,3Ցm.tpzʁyMK3 *{ {
+k ͻ Xv`QtղmvjGIH
+&oLt@f{ .Z̢DrsX3 'X91ʼng7fMeZo4k}uv:{[l_ۏ6/jl5_Oq mtq
+tyTb/yuS:u3ec~X=(Cyh-qfaiۦ̵mq,ʱ<wcm^&o.co~9\A^AՔ.[?ʉNS0ͥw;bug;uc'ui:2zDrHE,MÂqus)[ʝMe3sO]PP(tUqUiuڒϝ %KV:Λʩe&VNuE,C4 D
+"Z
+&![ aװX ;
+
+Ej h]`ZNDZPЎ8ЎΌJ3Ǚ{ws?Ais*_ +MZrϺ NYӉhc괌ԃeRauB)ag!ab|ფBѻB 0x9BYHY
+7b1M QM}3aM!A0p9o2
+{]i}%~5551٢o;Y3iGn|E^ϩ\
+QEcc
+.\8MW('O?
+`
+RZ_GCsP[
+P-8hhECK]ԵCzC.29Ȕj#r-dkzYqJ5zuf 﨡OWA*/k:+AzC3q\ Pa rנNpQ[ALK٨SFMj Ϩ&,/HRChƄB -BBt2 }#;*ʱfPYl`A3|{}{y~M0
+>?࡯TCp@5x~D>SxYJ{z7nqo0h% "Ly~ :,q/s{E5X[ˀ~j !8tPȯbk_J͞jIOHzo%=ewC>GH|FHWIw|'nnvo4*2?..@B!BO b!Rk" 4{~|_3-XNTX bu+pտX]9hz< WoZ_ ~js1˳r/ꇣk \2$ql5_ǹ=c=
+]ͳg;Ĩr ktx9ln}‡΄8F\s!Ɉi_2{& G2@Ԅ%UUV" E3B+Ntl?cXcQ|KtyZ3ROEmq?q<ha{ G_93q8#.}lp:~)UӀ8J
+ BWmlA~*|#҄=.6m{&K9{˦+Xs$6@;6jf3^ O%|,zvs u)PQhL
++ UEn>KŞ+<5.GELx$>us)?i꿏#=SNo:<n( e-ܗLl:O{=a7YȍuW=ox"3|吔|HDzᕆՄvBwv0y}m-Kam{a-!->Y
+u2׽D26^l]((.;"cΎuܟ]-M%J H kDlG "[-͂f~f`(j\T`"^2^9^A"G&@Ye(s.n*`WLrgc:Fu&xvf&C$&QIL:AW'j ˪ E#J vJJ 0*-1"0Y1.\7ѿv<vvTi-بik=ۭ]ݒҔY[+]Ϯ%TJ86Nt7T-I%JrRgcҀYa bLn*s ư(n0ĎٯjV#-;J\
+|~P]8*+#,C)I/N*J5'Kߑޛ,K?M>!/s1V B*C>[
+L6=,ưWQsͨ(sb}[,}[(J>:[CM6mgUr*Cde4('TP%M,,p
+ gDEw E<n<[tiT0;
+ ; *( HAc뒨1hA# J0Ah XcƦX\c(Hnroo{9MVjk.SZTH޹ 렬l`閹N[v}>˛;y]Ng-ںx3?ɘpv殌Ĭ4cV|cv[jbV_rb,4&eb»:a y4v
+g2*,-)l)l)苊cORG6"}A]
+=r52C
+.*xmP"+rt)*Rm!lcv |D5YuD̐m"~ xFoQ?YZ{%S*POg W"?A4rVHQ"4c[(D^
+tW[.E_ldDB͇=b_hܗ{SylV<.[~߻H}@S!S-uIiQzG*EoߓvLodW}Qv<tUQ/Ɖ1QA^W~-z_ بcآmءXxP>?diPgīj9
+c: 7Q%sRU.ܡ4)(JҤZFeEyfV>UHLڐ $g {
+{ml UּfUWu iVw2YS:Evzmm#ʹ?d@p% @p
+m\{$T-.юsBuq~JFAܟEy9E6rNԃGȹ7!ALZ&̡1xVl7w943>U^P (/X":cݤ4K7'IO.S
+>CwͿ҄2hFFZ@fwjajF뱸A_VUbJA./UH˛C32 RaI"XM*
+ȕT@3?C]Ps?v
+UC@\PY QW*ZAyO99Ϲ'y~~r?/XFgyNO1Q'L03S+byT)e6c3;`=sses%9;dsysMPgaչ?`J*mK_iux^eu@*Jr
+!c,nޜ@q`|';S]wkĮXM
+V]$Qvȟ]a\=ad] 1 h4"}>4@^@οLr S 1Y}'iyFiH,2('
+B aIB[ D’
+)18vNdǾm9+lIyQ+$ρtbrwZ~`g2C
+nօ [BZf>jp4Ax&T+>+.4"
+|)TiLA)ߟ^7 ΢eIBZ2 B22µ 4MF6c:c$*TDeƵHUHUM$PS\ s ;;kT
+q#H[(b.YQs :*TD+b[VfPuլU:EeaFyNbY(-͗2'/9Q~?Kr%#̖Q92n&s>{Gj jz5K;j"wjqʓ}Kӂ
+=(%)(DLyk|?>M~8^(:.E>O7FX@0
+HS]9T AG״7:(Vtz ˩VQ裬L+2vY%9iJe\bg@'*OJ& %/bKޱIJ"ToNzx3/.cat5̦Jq)O,%5TQUvR*&ԼxU#/NˉS'bx,9#*f%M.\C:ps`ų{)uu]!*wEٗk6J[d7 “xMQxF&WhFqt9c-^c x'6
+~'y C
+MU^FU7I6S xӌ<om*wie*~tvkr+ϙ&3fƖlj>3k:˒ >Z MuyG=V\u d'`O ,aC{p\y\QHG=>I'yOrzZ `p=߃ݓ 3SG)~
+@5SA6;
+
+((
+"u[?ā{oV⠊ZqTwҞr8シ{)e;=V
+ʭ픹yKpmT3zJ~!ONІhk/A%X!7J~ bՐS )`e0L;
+-7pLRtZJ2[1:Vh.F8'ɼ7t+D Lv$TZj2OG
+桴i k1e4=[FGd$ | H%&W^!)F`{蕳VdFs9<}k'VK1ru F|;|vvipod껵z/{"'rϓs_C(FX|)a=w>
+c/gkwIFߙ9qnpWrWpTq^
+<x{>L=ɠcA p
+v1xhR^2N['%8Xp70F}aтkYa‹a φ/((X/:UtTOT8*>">-ޯxjO^GH";; pʏƳwjaZ]YMQQ}{ mNζ>j]c}H@bژ256d7fnAj9۝Fv[ToThWBM@<)ce;/HA\VJ%PoR?.{y;;Ŏ+d[5͚*>& Nh8Ӵ;ՠl?+`E=K
+ϵuY^+uVy{/Uxy/MYxgq⏾Eϼ>xЃt#PE=^z\&iLv#-b6.k IL+,etR}RTbE 
+U O[ֿZyzuxJ=hN;hk{K>H=m)aT6kWx1,0GabÌE=V66T2 a6lQ4ûc '~>>E;'e_WL13hHÎtL]UteFV2AaA9w<9Y3ӍƊ\IQף?Gf߄eŞGg
+@:4P.wcղ.W+sͼ }d&zLHf 9vt2-%Oeb|ez@=R6[6[YΪZnd=܂HTC=\{Xǿ{ڵ*2)R)$]uHiJdKmM)#HrefJ3gʐNf$sa<A?>ϳ]ou:k!]l^]h.C%Yʂy*̨͉?gVD3RRB>IJL^6!8dMMau䫣S:ƥ "R[p}5,}(
+ PH5Z ,}"eYۉKǖNpxȒ^%^a%JʇJ ]R55H2sճ_ѿ`ZH.3bH];Hf<2$q2aUTؕ}Vw _1yJ7PMk&`|@Fqip
+Դ:,owr/N~ݸ5xsXpp5z`F{6$|I[0ilfMAʘᖑbTq}B8iSj3yh׮mYvĺv[5]v+E?r=za;@N@MWW-GB v S60lW2xWy`U_>Uze]m]Uf9jWUٰCwc[bw*e x 啴fj L} DbT-B\0SW# VxՎ6ZoY;ģv,unu ]kw =n0R8F+?Ǿn-,S}H&j:(0k?lG#$d.(=g]nI7[˓:K?mKz%v'#!Fz~-p;8vH*z<8 ̤wq 8 8 A
+6DfGX7ê-a0o$(/΅B(ZVðe7- ϠN@ucݷsܕtZ7;x4.̀%
+`|C
+[FݲV?n<@.7»۸}GS-zֻGJ?sg |kL
+:>Ebw6靷Tӿc_^НqJ@y/Jum^N/3sbg7ϑK_p O ߲{1f͓9#p瘝v?f>$u'w&;Ă8/ L)F+ּED_HP`@@L`T`D@E"fi+ G:t J?R{1;Л98*<H'\o%tjd *ǘH= ~F'|B:nR[sk'dYi"Yg>`UOw0~ dhw%NٟI'*aL005R #!g7sP180Y3%ϑIoEt-GؕZo~IC3pwf~{&\a$
+aT3;CaP 1 =NL<li>UBO9+-ng\5I#%=Vm\@%γX&c!9ka02{\[;ngf~&q&I{TQqS"\Ur% l;Zkp-dلַ8m%9i'i7{tF5ueq\H!򰠼IDH <HH $ \LH0;1;"*TԂJe`0ejkGl5:vf:egvZl?ʇ:~sw7BPID= ͍ןGk差WnYC=zi@yѧޭOvۧ{[n@V)Ku:B}-^X.^ 6APHYl %{AxBem_bi nyr-t#t=EZf$-1HטEIU,22yJ|-Y?Z !g,zzVЫ(qwYL*v7$m&Z WY/EZ/FZ_^losmso39ϙN۞^.Nsn=ܗvǸo즸$; ,HV4oR?rѝh/cy16$~1bgcg='cDž' w.:;Mv4*iX@qhYG0 t?"ZKpCK1vN$v8'Ju}H|BT|Llp97p\Fœ;Fgw w Ww}}"-. "2Z(/Aw)hA`q>%Tp29y*I$m\s{WR>"t%.CC%cf)^ɊWsN3zK$!6 BV<'We8t4IVG\FSS݇RpYwLcɪ|{d2_ϯC6.;F1f)mkV]Z)IoF x7J @{}wJ S\q.d٢:fF2ғ͊=>=iJJW!/Mڀ6yK@3Y>(? W['j*9A
+)Q *Qa(@ `AdBt}
+-!(ZN}A{u^_NA/*YtzVS1F5&JSj25<\K|;'Cs8!@ϠA~Rq
+u~#kVQ%v)HԗiҌb/r<yA%?R˓EK g q
+s$H*),`'|qyV
+yvL#tx|P {=E{'<PMd<k.&,KH=,*
+ EIPN:EEA$,`Da0R1֥EDZ.SNvSy>swsowK Z8S$^Y~=V*˪u̳1'f}N~W_NWQ>d߅B`BڀEbO *(q\ǥwE6=6B>6Qo}n-reFۊt] k]
+j:|ʿ'\# WK%kībJ^U,^^eE\e'twW{T]I(NTOTyr=M`/P٫R*oB+Xo9e
+`.}SJUj~stD;G4B&8,R# A9;X_G.[h2~Kjd7<\@tA
+$;k@zOo~
+s׽ d>#ȚYsfZ]T\wH~"%w} x
+PG2괂ӪxslSO3N0<' {kWq&2N56?cuWYLSaPfEzNq}OjSwԥ#9mKrfQ{ΣM*lNٔMc׋8YNWGvqn:1CUYsmie\΢aa;-&9%nmi9-bIҊ5^bwXFܳJ<Ոp+g|JSRV*a/"g1 y(D3'c-X->E鶼V[vBfi63S!q5r^ַB[&SIa~䊿B2|WH y<<@ ܁s3'ڌIp!%hW'wEX6%8˓ݪs9ܲ|_T/jҭA
+i_P`\z"8Gz)8[ypy`-?[E Go!Uf`ⱻ̒zݨHWfޢn(.HrUyR"*zAL'ȒmHe Mv< N H1|=j[uȃyh$:o
+
+RAF~MXz~[XZ~OXb04E10CO g9z S-5Ўu7 tZM 5U16*MCae{nywviD(V*)%U$e`r_P9JP
+W~__/;ϗm}3D`=#ځ|K&kjh&*mԲuI5b*'jMP9(AoLjn6|SÍ)śU=At 硓kykovhT&[k"t44fp6iem/A٠ݻ*F{;Z{Ɏ>\WYǰ#k"seE- =D-D.#RuSq)YKӷ/O"rnNwxlcth]gcn:QH9k;Eyu+¸.rg63AcG==;#c~RQV/+/D3"iG҄屽ѽYz "{*hv8Dۯ9"]Xa
+_مt2+;E>Ely$cD[@,sЈC+(eCICp(}V#2mmlBl[C, 8bwjI,wl,cyfPោΣ}0`ī1>ǍZP̨#EzSh +btqh`Dh<f8"QZԚGtf#}aSIUß{Ϧ{?cU|#>JgiP~GQނ琟ޟxpWmd0bFJeNO <0+cE'A wU$R"JÈDSD~07&g-9CZaXO dkȠe2Ta3Y'd2}͑d2L&s bp 1 }mvu
+1?}%w3›m"?Y}7'zhfĝ#)g
+]N/{߀)x^`-?cPA~~BL^Amx A^X2j
+( "EAVDZ]QKu]u;Yu۩[ֵov|@&<.|I *4v` {:G1>{=
+hKj:zAzCo
+:k2F'}\L0GmS1?B9/_`5qXgb^` ;SKzv(G7(7Ri,.kE}lBg,7GVtjE'qq:j;IGlШWt^02o`];1/p=qっǞGw- f#IE4ᢦt@MtңtLPOG=::IzCAwz ϟie9;
+W0ۋ11Ϩ̂.򦝋s皿/[Ȣ6;e)2Md&+Y'im5ۮmm5ʆVˎحMn;ʾvh_wڟb;2}G;i{E1ۼ+rՆVyC<a<ӱI /u\-q\)ot9{CUQ.eG.%u.^:Uh%si\yٮv-1LzY[<ܮiұ!JRRXZvVU**V(V+Z]%~"~A _qӤ W#7unox -tϧ;=
+hk*޽B,(S%JgīPY㕯l6);|rU[}#q_AA;]zO Kge]g3Q/1톗>J$ojNsTF8kn1<MO&7GSY១Y`Դkz4Á)1a0I}?0I?Iլ>{1됃Y>=xA>6SK5ɴ*<(WSZ7h ˵&a,(E[׶'j{D ]xQQvR ϧX-~S|uS9r yi5rJF!SmxW<̢(5Δ钩W &$uiAlNW,Ոcukt1!ZwX$V>Qt0: S:\3F'1sF w k>ۑs<{(=sSB,CSzR`mrX/U+BɝKwD&_YWђo_ #l`d:\Bh?~
+J)42KgK)E N*ug)1 27]k
+rLNp49 G *ej0.5CD0  b* y,SAvt5P#wUk/ϙ~=|3)9{b+.sBJGliULu-}FDU
+Υy=_P*E
+]@tzc
+jנ}=xlDGv{P {6(vyC'WWP\R%Jt^s'7ʻ
+,w}m^^h E 0N>%T B{BY@P! $| KvTH
+{%6v6U]Y_M󐯺[_a3~G1h rE]ZTKs5}q$3$$*p$H p$r 3J
+U[vnw1n;q:|Cb朴yPZ˜60{SN椬咍eXdYc3Uaُ<eg> ^{b 8B? DKLz-Y@ a9+Og k\^On7zۼASWz)}z|w}O:_/I~ɳ^˲=6rr<-33qt{Z2wXY;,PV+w*mϿS9Ʊ+g8{9ʥV孀f_MFۘh1GEh9nz[1t\Y[<F5W|35zCUЩvj{U6U+U෨ͪ&Ցչ:Ս `v܁21TgT4Z#cZM.F9s9)>]ٙYZ^ߢ16kLAMKp9^[3 h͙j[a&̓JVW@N z]sDŽE9 70z
+X|w>cix9,Vk Va'ܤ iOJW%E߁e@*G o<{^ٍy 32YH=(lh+Nj.L/YA|ADX7q&1"EHDdrdH7KNXs@*E7Z3(bB\C"j]\.+M5fp*tbCPY`h7tD ha*:p<Zkm1
+|)N)p
+ܢU`~ h5c=!.},fs :Y[%LWe9Q3VG룳볌Dx,*t9RUNdF铈t?%%8%c_B@j+ja/j̵aZ=BuTkQeIbצd fm:Oc*gLjLSkarEWU-UwE;~b<<pE
+qX@>&Zl$IN |x^8?`E 1x)5X{#gבsDB..3c9
+m !YA7q
+6oАߗ4F{a-&
+qAPUq츔:h:Q8uZe7 =?w}D/
+޿c8+FNκGN.]Ht%.' l@7&בk%pwuwm%M<g!#D B 8?EE#
+2F/s,83!B1;:
+wOsΎȫp2p
+VGs0xi+Oh'V :oH
+g0 5rF?9
+s Bጆ/ ɀ'bT[9<̃xڑp³
+W/oD'\=p-ُom}<c0k8C1 Ml`W=
+Z-^Y#Rl)u{KwR!T:|Q%)YV<b[GtGi5@n3 (FҖa֍њ1fcG+|ho9-KΧαMA~淞ZvPj?Y z< 89>h6hQ3>5Y Htds9m%Yjns`wa`+wArnCP>ho~>^m׼炪@VP9̜
+OE3Tr$щXA0`ס5ɊŴD3is[4/Ԅ;4hu6* U犪DsEjYFrMcǩTѩD۹XsԹPsC\y,~X;vCPnOFn^cn%Q[&4DL׆G:VjNYTrm TqvD[RRȥ@嚯]alU,W07\u4~8u`C? 9@]Mϣzo˩*u
+gE;EK1Z
+|=)ej<r&I6Ty3iATW
+gVzعMtpfcnq,fQAsMiNxnQ0=&Ա0:R7=rtVI.3S7+CWmWz)dR~,Q@Q/;WSWf݁8q5 %')(f"ٱ: cfHJ5I)2HdH0)⍋qU
+qhܯ1WWVpup4qB"GUDeV9X9xYaζHxbN0[,e\i4*c̭hsRgeØς
+&ci9oj0
+#toaafASO1ݙ?gBqy~y~)yK|+ޑ'1wB~W|iS\eǯ{u ]q'-UR\u2b8TӊGjjqaT,X3%YJ<`3[yY*{r.z8qԟ{,txF8LNJaźV XÆ*fVJijLSJ54@K)4F)wJ]S⬳cXk1ƺ8Z6Z6Z:ºe]"V2DhVc2SF/TӏR&f%]]sM76lcTmmehmnc3Dr CmE0jVjHe*(`/\k)aXpqz?XfXM#kfKa4C|v/ۃjT=Vd')>C5Ⱦ@򱯐iz m{M6.P{zws;̶&Eje6ߌ{$(Iޭ&yɣ%R2&˵Nbs-4Z3D2M e#p! o w-mR !3@P*0f[Gro7"bp\NoiWhlmlv>we&6bhU]vofm^i9ZvHЄ}R3Rd%"]~6!.Ciѷ/`=\<zCCYc <߲?_wQO,)
+3'wL
+bK1xN" ,Daj?(c.ray5B}@Nj4q -s΄; zvJgpCч1oҮo؟kҏ,$q88zY^x^O<k
+t9ctW^Go_1|'#\rA%œ5|2h,E90(":IoQFXzMͬK/1"8D<;;@ފ|i09Gp9͆ C.9CQU
+\AGݦgաNӬqS~R;=hw]>SMjqZ/8dyN!gUk
+Xh_l翷SZf: S[N;@c_=oEMCFM9#Xڧd&EP
+a-zt;=i-En1tpX]N3ٍWU~S5m+'}oc sQ3ҭuū#]{LNj3= m.VU}֪n`T;pj|;UwXNj_SeChS}(Fm~+#ח9rWmj 38~T]m
+QMH6.QuhևVU: kڰ,VҡWr
+S? c9-l WCdꆧv4mq6De*jlQ"*Wk
+T>rh&3~# V$I$ ApI
+j&a=Vhq\l< j4&ϋ덷%u%'E2/ʑ*{5T5,(tLAn<$`J/Hedq,yM4ZnqZl4H΄z@f<)KY%Vo&U?M5`i ѻ۵9XͰ1 1g_Naվ,Z6JlJk55$=ڶMViU=#r &[
+c[ieF"} q:B(tTQk:Mz^CI&9U
+{kWmrGXYR{/'Nv_O.r|\x,t]YhgEE
+ŽݩLn&"R%+sV(g٥".U%u*u5z_irFir `E|ޅvxl:-hRzUY*20ʼROQy6O٪x̞d2;0xߓz-Uf9GnA_F0n{1g!hQM[GuZ=U',J%V_)L2׮4L?(O'e$&ff$eT12@?7Qc~%h=6h7sۤ w**kJe6ep-P MRcCURnCCRNC();ПĤY$#pE1c.H^Da3#Mcj{[ž/lCo܎z(LCK/ .U %Pqh9C)d iY`6'?hڊ9m.RV/h 7DP< <)HkOm{{W<͖ofFĈxyz8y^\w@=F1xO氒ëNp&K6r2Vp)O7iV^j|xt^}뗬՝x[W-
+FЛ^@=":E`г6AG(#tu@ilJX-gk-50kUd22A+"Ҳ t=R }CK=ez6_pOC86o݃ zJƉ11ڱz,VŴ\,V
+hY*I Prl+)bQHұ$9G;$9 Dă ]<8fycؑP!01yfh2M.'d
+%LjI<KI 'ʈ?'d+' ߇Fp1~'(\ ]x^#M9o5qҗ-HqXa~88hq4V
+n>fw=T$Oqtaw ]n@ = ݓ=@>F
+༂!^t ZSQuCp5i:<\œ|P
+fxz2h3'6q i#<4z7Sz+GG[Y.<IDi[>v)KmL\߸N;f?Ɓ]0%3i46hc~&9wV?3V=SJݓiFZ>y-޽ὑڼwP[xIjr}>#_^ĕ~;xrs_4fYxQM2x֏L biմ$f.LZKK}]WLm~eį5SvZ8}%->@MӷQ5/PM]x©
+`9U,"
+92);sǖK MV8Ś*[,$Z܊kBcmPL cmC24vMeAe`t9 bxN؀ݰE[я\X n|.eN"[/e9W5:bzGHgO$3j{,_e*G4+r('Ꭻ0_Y @;Џ}50V#ĒpIJF һ8:N(֙&V9%N$(]uqG, ur>23""Q\q սU*8ʀ #2( .ȦR%BdQc
+Ԙi$5165*&j=`=was}}L3n9%{vw}VSK[` x/s~*.f 0E# C##_rcqm6;28M=[B{wAsn:~kww8FW=[sϠ&eeIIR,%r4sz⦁_EX[}, , aFe12b3Y ,CgPzuK|[ w &<2$My
+T򷎔u[5V>օf5_V#o5:\ۢ'd7!52 r-X 'z4"K_?|l]eWIz6TrM-F.yrі+cv  mXZ,eܑ˰Įج
+Rꑟ؊"znd!Ct,(/ d(`
+ (|8#Kyʕ\t
+@-Q-+H9~xz K(^\`+e(e(.oi<h,hQ=a
+MVΡpg6jD~
+CxXDXPYGє3H.!jx8B.WTlxdx$J
+;De]f*%N:WnEZ1]96e+˵DTNGe_U=x؟`L#:&z2*rZPwPP:Q9^/+kf)ˬ J^,wҼW)էH|*٧V&-P 5k~{JfW| r !#->JT*ߠվo2+ORZ(%` - \AEhnPOiv%5
+gcX&]χqs>9]&F(P-9JI J4Ei)ZM*4WDܰ4C\0;|aV&*ÌCƘ8D쎭x8=jŊӺ2n;#HekY6]Є&4M($mJ i)4Ȗ*[,@Uѩɢ"2:0(BuX93z 2B0y{S,Nnb:$ь2-#Cɰ*"fb٣55栲\oVˌ(+3Uc3TŪժҬ%Y;6Q_vfFڔRkDV[cU)rdKL lEbS WUZ
+K:d)UY415ܹ@QUbko}AWd=^ {s~?/blx_7<p-F<QO^"N2ST\UY^zL[+Qyb[of/{MIae? 4l׍D; 2jZO-U":蘋i8gTI3MQVv#]ZPW({eBxC3bt;3w.0:]+ogv׫F!yјf9&[~<`;´j|!:fW2GALwKNw)`iXA^0ߔYayhl3zr<9_?G$L9 1xoƒ<I $Z@}X:Zұ+,ž /]Q೨F5΢"(`+kZTkf-y2CEߪQ?M}K/ɐM5b|a
+8{u=HBh $IA  g [9,\h.wh}N Lg]Fp6=جI n S
+T \ФQZЧLño{}Tz% Q2bP3UC(y!"7dUr\^kB5!iz`UjZՀʾ)ˮK1 މoY #`111CM\Mb %~NparPدL *~)s)Ջ}kw/2JPn9@4q㣈 - *zKj]3KUR"NI-#A$EfIH\EVu ӤieRPE?b[$y#zB1|cѓ5H#,IA=%ݢ6uKhtC^tfrNQL;"ʩrW纨''d'[}[Ѹ\KEՠmħ'3!$X_Ɔ:fU!^b$y.e9x9xx{
+&%th~JJ4DOb'}Pzq87g:\Xq68E
+<*'PϒS?{MwqxhQvg^pY~RxS'___>n 4n]bqs}6<l3^np\!ap`
+R<"6::K\J ?C)B#a9]ݰcmhpSeci$!$s88N'8'&Ĺ P@^a@9KP2ڵkv0UeSZm!M:umS ?&g{~_Dɴ6IfJ1D1nLiVzq1\+|e%~@>1Mq(0UZ/+a).4=<?h1bLtmċq ;1YBOE'ii1?aŦA3% %@sM&b1Xq<N'Ѱ8p<}1R{{=X>}?[*zX
+\C,mA|FX ĩ>^N98MN=yd^fF ew?hdH>&qԟD\G- [21xj5qL:G!bkQ$vz;Ǚ&czwX,b@~O6
+m#/wb.xsBh"6덿댟Jo\M5h9K?p =M9ʑcNL:?g ].T :ItM+!cM[:Ӭ.*,//zC2} ;MSg8 4uE۸ku09n(L3c<-*ciNCـIKf1zG3nK\cT[&jiݣTZ)KzK-\Y,,̬ޡ_#59~g)"!\D--d4ٲ u6XSZ&Jj[RekV+m],v&fZ-QKUulZlD-.JWl"Krz#j/kׁ)}?WXG VFG]ejBHt:J%!;JcjЕT묕#:sܭ9JJ}%%+]CUho;=K۫ WrL*줽jT\vҕ
+WP沊rr)G-vE5+USͰZޠw*y}N6_r?KY/嚚Uޠop~c!~c3W
+baQɃc=eS-x<O6zz!8%e7E}Y1!'BBZRjiu]
+qcNP(;\Gi
+[ `
+SՉYfQ3}ְ:#>仉D]$ ͟ ^MoҤWiĿ0d}*cs\Fȥv*5w0v-+ ]z[@)&$@-!ֿ1X_wDwK5aI&ܤpb#r23 _Ϝ /?VyVK!X@iH >`² *<#*@dp [ B R r?~G X/lfNld2CZ4@._K.6r56#"J@d(BFBf
+!7 ]ӔcT.- %>:=Üż>o$@
+?ϵ{s}Yoz/1yہ]QQW}ஸ@Fdf%숀QDA\qjDtbpE+1ĚQQS۴6Mml&i1'<|}>~)P,.
+"68Nzp
+,B\/Czr?bAHM.q/\x(-𭃫Jx8,X>.g9p\C-Nw-Vsvoܦ?=].w.*3N|Qx\1D
+R>p#(5-EHҫGx-ЗR.z[~D HChݧR*Od&p|) Q҅;o((HB~N e kup |oF"U_u2X&uD=D9}ǏOP?P^~⼏μ%o.H$}No?Qo |Abp&a{|v?nnn0~!MplL)We;E u~A 9i%7΃/ 01ȥĤ_^I<)" /$RyWfUṗc1XDތ^Zǥ(Y165 ycy &#<VZ~ Xc؞AU؟ep
+G&90e#~4G#~.d5p*©iTRNR]XpdĿõwz+Jh.-bhx%;<E)D_l³kdٯ@ˉC=f3u3%FPo-
+׭k!FS Tf58VK% 3tttk*Ӯ~n\F!֏W,WVVf5>
+qS0R1|%Y*i2G'UW+_*eF2ޣJz,=Ȏ).tOܐdR')}/3ϰ׍jw e,->en@꥗12E%e}ejl)7AJHR<B
+TK?Q{%ϷS^%>Aπ?ItA4e[E6֓:곀uҷiCtH ⡉R44U
+2e_L(vb_.y$:yidZddސL2VH2tπSUb?Ϻ |n6r
+ʚ:ud0) ÆKA@>,$ox<,A$+hd/I"cBkFդ\$|I~$; rX">ֿԁutd^Wô2)dCt*Qrha)9b&#,GI ^I __J](#?Wjw02ki Kmg%ߔ^]+|(7ҳy刡2."P2#%=(c"4I4eTx%9ʮ$^U 3UKBJMޤGQcOk1ShdpjMQN/ךuCvVO־Hh2?G>~dXI)TM$cj(S:2&S5Ej\l6&n}׬ԨjD{>U/>$'(`&!Z§%QSN2-ZII'6$Ē&lVbj9C5F,,ejeaYMjUa=ZUS-_f IEV%#hD,dŏ
+jS MH|Rd3hm([( rߑKCbxԓU
+ A\Aŵ(-56D<Ɠjb2&1iDMNMV63eĎKt7y@l(|HJ~C_vC!!xCaqBu9r9EḷUw,.[/8I"52"]C5(&DW Nj8oh2M2IeO*1%-WhRz%5($鰂.*(㻜&t9 MD!5x.q4je16Y1)S}/5Z}R+<uR+Ԕ^ f(T@R6N~CI}Sީ7&v/o<z.ӗ`Ru̝KO835{(P#<PAa
+4Y=.ߌyg3\喱U9ߐsrI%)6KGo\HO AjpGU^{s+ [ynqŖ
+,K- e,rLe d)U
+z6I
+.r[N,,erA++l:
+!q|ԫpmeF=l,<ԃ9=BV
+I@v䀍EԆ6B[/ȉF,l =8z»C C=oeYx/w2۞6ѺSu,&\ E'u>[Vr v5UJf'j$E`&80Á/@*tfUd7̒Lm''(w3y{mZ[K.VY<qR 8xG8
+bǍp$s~-2s9{6gЪ%_
+uoӫ
+G?H! SD^;9`[p(m{[mU/o0\)ر4QNh Z i-@U ok ӊmx_ 51D7S? /YӉz<S
+2ήR5_X<YWK%ݲ.[ /mF_qo!pF@x3O8Ҩ,<Oȇ%$+btN>'i1]
+/Us0} urO| ã4_?“OcR(>ʴ
+&HlIxUD `d.ׂuaBܣ\w-\K͓;^'qZbHZH},cRs|љT *.ȡoG;YN2J=gy1_͊֕T_,\CaOF2e+óA6c ǕihSNwRkY֯X}є[blVŞ*qBwe\ihpgeqi1]yXY,gҽ5ɫI&cJjDJ:3\\{є Hbk, ;@پ7\~cT{LT&g?KEX*%*!h⃎i|PA_@]:ur<y`nJYkev
+( Q"FXZ`V.d=
+3h#6U}1ֳDM5F$fL2&'ZL2]g;3w}އhRUVҡv8@EN+?R#j\%60V9a>+ /ك{ {Pq{/`p;b_AW0_tT3MB3Q RaHCR5<ԡ +VvX'^̈:#+ݲJJa I8c"wS/vfac| / g1-kȾ* K,ʱ*˒(G]9Gc
+#5z3Hi6l+؍F\lOSLL)6Hx<)guEHltLAG9Zl3kV_٭QJ+ŚaFR\a/56ք9Fш-7lo>#v]QSx|Gk~]{*G_"QJ2jq${)-qR![UII&gyFLrRnDTYFDB#,mA洷zRzJo
+J8̚s"8s125h{5)V>}g*=T1hEmd+"#ie!2g*ȱ@ uc|'4$|3o/k1tQpnmM'R+l!9X&^I9l_EdМxsRB䎕hHsi@^Wܿ;{ Ⱦ'c?<oco-YWei4Z dzRA
+*P@A bW!\8B PX!WT/YF}
+wTD77Gyoe&l *hAK5Ur5=K`B+AqRgp˙y8]2&W_F'f{7er,Eyخh
+pTqWqTQ̕l1N&%L"SH]KV-AR lHM_bd8̲L\ \ԐrQ[C԰y3=MN_TM Mez^Lݬw+^lha^@^밅S2-їBn,êyIhbo xzz.$h:6x[|YuulYFOlXM_b~rRg^= b}hf.E C"{h&4^3DR!XKuX=k3#:8QJIh
+_! @O6J>Zrt,gOZ9LZE+~,#-[C G&O&i> F%-Z'(>/X8<
+y`'mXA bكql'';wEfOpؽIӿI;O6Ky<LX]y4
+Vw:Iyn v#Jx5NuJiq|?G;vp
+^ dMAEdx'(цĮ"3ĮmҾ p4±V*7plo/>Ul]л~ Vg%߅=(W<ipd
+'pXAG2A7@AkEW>tȮ#\ƐCaF?U"8N!* IZ7PRW+?Qer-Rn~D*G)eG^Wf#~'{ʈx9}\<`.y\Dz!x ?F{UQ%Z%OrDYe;)WtrW)'RΘz9b*+v2e7M*tR)kWrgJ6}%ksYc q_$yYC.2[Yr ;gܦpLZaiJQv|]\\ts6+%al}JL(,weS7Zn+`N3|o}u <UeE:
+Ea'
+O3Wa9LM`4H1')%dʜ,L6fg*&ۥhG"p4*٦PnRPΔPK*0{N0#OƷ1YWI;7.E͉O}
+Rtn"]&E+,/GK
+W
+pݭ\F nS$?gۘǰvը ^piBW' $0{bߓ*?C+-['vayE,k^/܃
+7 8<I]
+!>wn U4|b'ZR,(-*H(rU2\ʷczIXp/aJC]G#6k:#s6Me $Yi Zv;ObV555I"YQ ;Vߥ5O.wk>8@064@oໍp7%f;ߍ~dlf43liM4&Ip=ai T=:c~{wXÎ i`
+ s |.с/p vHFѷ8C[kmRz܈mzK,'G0I=|jҩ.4Ҽ2{xI!1EEwA|'܁"~ǂ 78?ӅCp T'Пxd}q\Jq
+'
+~ooĈg6D~
+Gq1?C0xqD` _Sc0=)dA|>Ai }[̨7~s`xa7a/GN!c2EL3)i:Ń'/COћ(WRlNS|˫WF|1Kg^e,1HDR_$3G<N,!Uzx݂UcX*\$0ۥOj]ȍ ;].˃ӫBS;ƙ}َüX!9pcbL2rga)>H{D2
+c_,/u
+2Ct~W/dGCس>qbK_
+n,%8S*il2 3AaRxjkn'SIt$<G]֠<YIYk&oqDL\6rRdԀUx&e",B1N LvLjh \XGv8ݑ \+ -Rz&Xy`
+F5ȷxs i sMfGqprTL3 \][Y{᳚QVՅ^rIMC|f`eGEM&jUǧZި!+UTM*f=1KŴ;9J9K-Nq}rDVekby4ԫ5$@~a جĖElT7\~#RyG#
+lSKņn 7Ra
++pR/*pMA(_ Qu(+:,sS"{S;>i7&8BUA&U',$]#BrtH(Vq*a3+e,q2"N)-o(#UT3&VpY*5ڴQFVѬe*T1^d9"3BFdVveL-.մ\)MJ6SRIc>tK
+?1~i@2TfI&ghlfS%I)IJNU -9y.S\Ŧ.UtFE1S&cwLω }h <Wr-A.΅4H=ҩNNmJ)#լUiيKsȔ>B1ިȌ6msnQh R *(cg|!:Fur3w_[zjSANLƜ=DqYQJPtv"3e+^0{Bs*$UAd]eeQaaK%z?;![Z9ѳ+axK9iK=\ʩ[9Icn#Ђ
+)P#OGn;WX8-b.ZBV؇8ckɿ#Ӥ<K;\Z:\rLN]
+) S`iK^'d4FwTN~.t[\\g ŷu~0&(n>{.5N \Y}XWqѸS5m%MS9ϼ䆼' 0ywe/gK(}%s{
+In=|6M5*(Yqk"'!GhL}ACK1u4UAnpf0
+aP>N
+V.(֋jUmlScS趱m665kjulݮiibɆ<<{}{>xsO'I*ޯ2{*~G!1/9cNc;: h /E=SO<![Lk?G ׍'A!s%z:(!:]
++7X};؆6t1xQ\6Jp8 DdznPW|~KASb.9z1w/>Xttsuqw+Wڅ;ORx&}_i
+13 MF]Șk!:Q/H/HLS#'lc-('sٽkrw.<.%'X#%|Y&>^V?o7q?+?6p>%;-&?3EIs߱Y|F 'l!S,>bq}>`%/. W8x | d%3|1bk.< Y Oح{lSWhVﰁ-tLAAb\y`I6I\F/@WpvkwW*E-f96+9G56f-aʙ](qp)ttCzMl$'<?:#|1%ÓDvK[ح"ErJ6bhDzG%!n^'#0Qu7!c$<v8fbs)Bl`s, }4^b:SO
+4\b `:?8x,kmngǪ$77at!i)K[/E<YExn'ssrM=+k14;8Uۉݑ&XELk*~_$Lp%5.y||fd2+.NNit4rg;ʕSF~pkf#>b$`\[J+,f×"J~ f2'9"9nYƭaF%h5080_'ݕl`4-ZnJwOR{fyd*#OIJ4+P)K1^z*kLS>,^[=YVH=n/N-kWɛfҼdofX5.O5[(_V)¿V)sL? 
+:ǘug\`=b=n[JȗM92$觘&Y+:ЦDE*<h‚*4d!+bڠ ;o9ߔ麌gNqSp0vbuE_5c2rO8 "ḱ
+3OS(e
+MQH+0l-+N>;bD1"US,w5iZص8"+*I'Y"aR`d"c$ sm-BZybc~1Yy[R s}k@-[ѲV_|;#%]FcgWMDyƧݞ#7;δc2;d:C/FgzG{yb_7z'h)B|̢vb3>1&sFܒح)d(eC2IuLndn*i}c=3 6.Ѳ
+-%Z29Z:" |bpp8hu$Ee0f
+I 1*(K,A6AEUEDDTDaPZwetڎ3utNt*N;M?!ϩ:swFu Kp麈 2\ʦj#[Ʀ)c1]zVifG( Z!‘Lj':fMjNKj9R8J˕E%AɌK¥;I=&D'&*O[5Ǭ0g+#֬ғbrseUx:[\s DHtUrQ%U*4=1M3M@[u<Lt6hMkq0B+5i.JV(15bNpT
+7kYΈ/MMWnej7:#7НoW2ߗX,/]IZm5ps5 <nX?Ȝ.ftᴈA_.0E4n ڶj bEG
+J\Sɑ8ߍ5XJ]VjʌjZaˁ-3PK(%F vhڢL#|k~1;Чc*H FhF3q\hl2(הzS(ŷ.ߋo ' x4wf5zs&kp^뉺QDϸ Bq$zoǃg^?j $ JSfgG wu>`k}jvw5~w-3xqch%ۢI4'Llx"Of؎qqTo3 }qBOpS_;br{kC[]rͤ="[f\`.oow=C}ʜrV:Dw47/T﹄8$~EcHOr@' ۱oi7 { W}r|R _'Q/_ŧў
+8~K M3CQcyx!/:^e~O 'xAJcxGg!ESÿ]gM;AJHM|s^OO''4r_em/OxH40?K`'NO ^q/%kIgcL3ׄǣ\^<wZsz8{C>U#Ӷp>-\_ȷVn9mkq9 M^5yۅCxe9vޮǣN]ƪآ7ɓ`Q&M5|zĝ+x&Fo/+rPwܯ&uV<fQO7dU0f˜F/mqOoղRC5`/Mum&׭,x}Ty
+'AOR5,~gG˖<E9` 5$.5/Gf'+b{*NNAhdn$ 5]BPV``v|XEz:rPu&|Q'sNn5}߮yWJ-IŤ\9AM!MEfe7x=ΆU kO>9}Ul= ԗ8mKLdӱYqnS^k=$Z-w.""7dXR*L9́^ >PkorN^I#?>u1d7_,6q7w.@N%Ƒ#ȑtJR.'z+^ɥQ7ڗEQaDwy)"'薺$EVZ]d6Gc1d~,{زȋƑB/( e /lEiFZgE^gENs[Aixtθ422YՑH6:t4Er#)뗑Q2Mrngo!Ǘu=~3f~7B9gvr#';-"K^ddD~H64RsD)H5]Dy.Ku'zz9y샿k\̢x]&.d.aEizUꑡrr~\{DznfuE'(,洐Y-dz:mzotdS-<!~Krְfr2RRN2PQbSP%ȕhR*jK^Y/,ZB!xw®gMkYb7l%fd\22[,'9x2XQ5 !iXJPB"DB,Q_RY$iRboe j0-RN;MZKZK"{K-9Ǚ{B?{>tCK ōqv#(;;ڋ,+-H[0)ǷrCKoᲞ]v?uC_a
+2(a =ը7tpҘCUэٕՕǥ @hpV$?!SP^B^bj~%b .f4R7OtI*[w|זܗ a9 c-}.zEo#cK6r'r` f Kewny]T,b ⛩CgL@'@]o 6&R%4(9.͍Me
+.V+
+% % ca!F1 &$dI\F*t,|HBrIj{d#hɗ|3㒝IzK`肤GQ1$ݒ,ݕ4=|T^{f^dP䫂
+(̖-kʤ)pfC5cV%(^F͚N ygԩ 2]bdJR$+T2bLV ~#FED0)&6.>a9)R3s-ygUkֽGjJR!)dV$Q&q(^Hv\BW⟈[ {˃>DM4D_#c/c[h&OܿPj߾-wK=%9E
+Ċ >޽ǧT avfD'Pm[|ps/ב_6D6n:Sn(g^=9Ke{)#]ʀ}edM+گj(wE$*F6
+G7FsRewdBFf_tN 6hb!?Yv%?+a@U;5d/Xz%Y`_He]L-FfP|6W ;mC5߳ Yhc_l ]s,"~
+zx[n}6Sաv#/41#9i+6<h7&m[P7R i$mKRc+؏F׭N
+pO,JV8kN-
+ hI@лnUԠY
+6q4KB6N+ԸM.v.ɲ+YU :/鼫w?0@]P]$k o[
+HU]Иl!yRsA Gd ЉтyL)$@4 }L@X7o^ߠByFM-:;3P~<r);,On?5Q5Gc-3;V~[ ]V~۪XjRq$ mKUK™( pC:zHaU)O%u!FAGi? p&@.gt%@,# 5cOC7@2e#:tN6yjV%4a(H!Zм`.dwgo"Hc@A#3@ D"`HB\L)XE&
+}XDArC))'Ju4d5UeO?z&Iiēܔecz~FH&o9o&F{+j_CJk1Pg
+$(1A]
+DyB^inܦ0Sace̴nOi6~~ԗU\,
+~T 7_l;oIRYW~<sء1l.-U}-!ҔKW
+l H9"~s
+Dۜiы)VD$f6>d</9Zƥsg$%%~
+n 䍽~luϮ( }9`A ܽqՒsf͘1cւ^FkVMq45P1FQpK, Ts (8E@vtQULC)LbBbO0\V$zٷh
+uckz%079eO]wY tʚC7c`H޼x񣧯~"mĮƺڪʪꆎ)w`G{0?j+I6vLRGf[`/np
+
+Aer&z,RI-+a_LT2I*]qC3W3u_˂ߗF(ѵ'=zı3Wn?!kFMI^VFzzfzvaE%DR"|l,hׇ`'Jlیv
+M1ʊXwnma@I~ ;bju3浪ξK:K]q`?l]fڵ8z
+w&DG&M\qO4My9YO3э 5oZ{#ԫ3ɘՕ;[e-<?ն.u [
+(<w-~۵C|CS^ a6 *Y}G?m\?w=x>y -g0W`
+endstream endobj 10 0 obj <</CreationDate(D:20120203041454+01'00')/Creator(Adobe Illustrator CS5)/ModDate(D:20150428131141+02'00')/Producer(Adobe Photoshop for Windows -- Image Conversion Plug-in)/Title(Druck)>> endobj xref
+0 11
+0000000000 65535 f
+0000000016 00000 n
+0000000076 00000 n
+0000059182 00000 n
+0000000000 00000 f
+0000059233 00000 n
+0000059439 00000 n
+0000137044 00000 n
+0000059519 00000 n
+0000137077 00000 n
+0000629746 00000 n
+trailer
+<</Size 11/Root 1 0 R/Info 10 0 R/ID[<64EF656E86A13F4BBC364BAC8316D01E><DE8C070F82399748B7C6019685060DD8>]>>
+startxref
+629948
+%%EOF
diff --git a/doc/makefile b/doc/makefile
new file mode 100644
index 0000000..ac16ff2
--- /dev/null
+++ b/doc/makefile
@@ -0,0 +1,78 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating documentation process
+## based on markdown and pandoc
+##
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Definitions
+#
+###################################################################
+PROJECT = pulse_width_modulator
+
+DATASHEET_YAML = datasheet.yaml
+REPORT_YAML = report.yaml
+PRESENTATION_YAML = presentation.yaml
+
+###################################################################
+# Main Targets
+#
+###################################################################
+
+help:
+ @echo '"make" does intentionally nothing. Type:'
+ @echo ' "make datasheet" to create a datasheet'
+ @echo ' "make report" to create a report'
+ @echo ' "make presentation" to create a presentation'
+ @echo ' "make clean" to remove all generated files'
+
+
+datasheet: $(PROJECT)_datasheet.md
+ pandoc --template uasa_meng_vlsi_template.tex $(DATASHEET_YAML) $(PROJECT)_datasheet.md -o $(PROJECT)_datasheet.pdf --highlight-style tango
+
+
+report: $(PROJECT)_report.md
+ pandoc --template uasa_meng_vlsi_template.tex $(REPORT_YAML) $(PROJECT)_report.md -o $(PROJECT)_report.pdf --highlight-style tango --number-sections
+
+
+presentation: $(PROJECT)_presentation.md
+ pandoc -t beamer --template uasa_meng_vlsi_template.tex $(PRESENTATION_YAML) $(PROJECT)_presentation.md -o $(PROJECT)_presentation.pdf
+
+
+
+clean:
+ rm -rf $(PROJECT)_datasheet.pdf $(PROJECT)_report.pdf $(PROJECT)_presentation.pdf
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## project
+## |
+## |-- makefile
+## |
+## +-- doc/
+## | |-- stepper_motor_controller_datasheet.md
+## | |-- stepper_motor_controller_datasheet.pdf
+## | |-- stepper_motor_controller_report.md
+## | |-- stepper_motor_controller_report.pdf
+## | |-- stepper_motor_controller_presentation.md
+## | |-- stepper_motor_controller_presentation.pdf
+## | |-- ...
+## | |
+## | +-- images
+## | |-- smctrl_modes.fodg
+## | |-- smctrl_modes.png
+## | |-- smctrl_modes_simwave.png
+## | |-- wave_drive_timing.pdf
+## | |-- wave_drive_timing.svg
+## | |-- ...
+## |
+## ----------------------------------------------------------------------------
+
diff --git a/doc/presentation.yaml b/doc/presentation.yaml
new file mode 100644
index 0000000..fbb54bf
--- /dev/null
+++ b/doc/presentation.yaml
@@ -0,0 +1,11 @@
+---
+title: Presentation Title
+subtitle: VLSI-Design Module - Presentation
+author: J Färber
+date: July 202x
+lang: en-UK
+theme: Pittsburgh
+colortheme: default
+code-block-font-size: \tiny
+---
+
diff --git a/doc/pulse_width_modulator_datasheet.md b/doc/pulse_width_modulator_datasheet.md
new file mode 100644
index 0000000..2f1caa4
--- /dev/null
+++ b/doc/pulse_width_modulator_datasheet.md
@@ -0,0 +1,206 @@
+Introduction
+============
+
+A heartbeat generator can be used in a digital system to ...
+
+Features
+========
+
+Normal rhythm produces four entities – a P wave, a QRS complex, a T wave, and a U wave – that each
+have a fairly unique pattern. [[1]](https://en.wikipedia.org/wiki/Electrocardiography)
+
+For simplicity the existing heartbeat module generates the QRS complex and T wave only.
+
+ * Models QRS-Complex and T-Wave
+ * Average time values based on 72 bpm
+ * Enable input for external prescaler
+
+
+General Description
+===================
+
+![Heartbeat Generator - Schematic Symbol](images/heartbeat_gen.png){width=40%}
+
+| **Name** | **Type** | **Direction** | **Polarity** | **Description** |
+|-------------|-------------------|:-------------:|:------------:|-----------------|
+| clk_i | std_ulogic | IN | HIGH | clock |
+
+: Heartbeat Generator - Description of I/O Signals
+
+
+Functional Description
+======================
+
+The shape of an [electrogardiogramm](https://en.wikipedia.org/wiki/Electrocardiography) as a voltage graph over time
+
+
+
+![Electrocardiogram](images/ECG-SinusRhythmLabel.png){width=20%}
+
+The important QRS complex and T wave are modelled as digital pulses.
+
+![QRS Complex and T Wave Pulses](images/qrs-complex-t-wave-pulses.pdf){width=80%}
+
+
+Design Description
+==================
+
+A conceptional RTL diagram is shown below.
+
+![Heartbeat Generator - Conceptional RTL](images/heartbeat_gen_conceptional_rtl.pdf){width=60%}
+
+The simulation result shows two full periods based on a clock period of 1 ms
+
+![Two Periods - Simulation Result](images/heartbeat_gen_two_periods_simwave.png){width=80%}
+
+In more detail using cursors to display correct parameters of the QRS complex and T wave.
+
+![QRS-Complex and T-Wave - Simulation Result](images/qrs-complex-t-wave_simwave.png){width=80%}
+
+
+
+Device Utilization and Performance
+==================================
+
+The following table shows the utilisation of both modules heartbeat_gen and cntdnmodm.
+
+The following results are extracted from
+
+ ```pure
+ pnr/de1_heartbeat_gen/de1_heartbeat_gen.fit.rpt
+ ```
+
+
+```pure
++--------------------------------------------------------------------------------------+
+; Fitter Summary ;
++------------------------------------+-------------------------------------------------+
+```
+
+The following results are extracted from
+
+ ```pure
+de1_heartbeat_gen.sta.rpt
+```
+
+```pure
++----------------------------------------------------------------------------------------+
+; TimeQuest Timing Analyzer Summary ;
++--------------------+-------------------------------------------------------------------+
+
+-----------------------------------------+
+; Clocks ;
++------------+------+--------+-----------+
+
+
++-----------------------------------------------------------------------------+
+; Multicorner Timing Analysis Summary ;
++------------------+-------+-------+----------+---------+---------------------+
+
+```
+
+Application Note
+================
+
+The following test environment on a DE1 prototype board uses a system clock frequency of 50 MHz.
+A prescaler is parameterised to generate an output signal with a period of 1 ms.
+
+![Test Environment on DE1 Prototype Board](images/de1_heartbeat_gen_schematic.pdf){width=70%}
+
+
+
+Appendix
+========
+
+References
+----------
+
+* [Wiki: Electrocardiography](https://en.wikipedia.org/wiki/Electrocardiography)
+
+Project Hierarchy
+-----------------
+
+### Module Hierarchy for Verification
+
+```pure
+t_heartbeat_gen(tbench)
+ heartbeat_gen(rtl)
+```
+
+### Prototype Environment
+
+```pure
+de1_heartbeat_gen(structure)
+ heartbeat_gen(rtl)
+ cntdnmodm(rtl)
+```
+
+VHDL Sources
+------------
+
+```vhdl
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY heartbeat_gen IS
+ PORT (clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector;
+ heartbeat_o : OUT std_ulogic
+ );
+END heartbeat_gen;
+```
+
+```vhdl
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+
+ARCHITECTURE rtl OF heartbeat_gen IS
+
+ CONSTANT n : natural := 10;
+ CONSTANT zero : unsigned(n-1 DOWNTO 0) := (OTHERS => '0');
+
+ CONSTANT heartbeat_period : unsigned(n-1 DOWNTO 0) := to_unsigned(833, n);
+ CONSTANT qrs_width : unsigned(n-1 DOWNTO 0) := to_unsigned(100, n);
+ CONSTANT st_width
+ CONSTANT t_width
+ CONSTANT qt_width
+
+ SIGNAL next_state, current_state : unsigned(n-1 DOWNTO 0);
+
+ SIGNAL tc_qrs : std_ulogic; -- qrs interval
+ SIGNAL tc_t : std_ulogic; -- T wave
+
+BEGIN
+
+ next_state_logic :
+
+
+
+ state_register :
+
+
+ -- output_logic
+ t_wave : tc_t <=
+
+
+
+ qrs_complex : tc_qrs <=
+
+
+ output_value : heartbeat_o <=
+
+
+END rtl;
+```
+
+Revision History
+----------------
+
+| **Date** | **Version** | **Change Summary** |
+|:----------|:-------------|:--------------------|
+| May 2020 | 0.1 | Initial Release |
+| April 2021 | 0.2 | Added parameterisation |
+
diff --git a/doc/pulse_width_modulator_presentation.md b/doc/pulse_width_modulator_presentation.md
new file mode 100644
index 0000000..d742c03
--- /dev/null
+++ b/doc/pulse_width_modulator_presentation.md
@@ -0,0 +1,106 @@
+---
+title: Heartbeat Generator
+subtitle: VLSI-Design Module - Presentation
+author: J Färber
+date: SS2021
+---
+
+Overview
+========
+
+* Features
+* Interface Signals
+* Block Diagram
+* Functional Description
+* Simulation Result
+* Device Utilization and Performance
+* Demonstration
+* Questions
+
+Features
+========
+
+ * Models QRS-Complex and T-Wave
+ * Average time values based on 72 bpm
+ * Enable input for external prescaler
+
+Interface Signals
+=================
+
+![Heartbeat Generator - Schematic Symbol](images/heartbeat_gen_symbol.pdf){width=40%}
+
+
+Functional Description
+======================
+
+Simplification to Digital Pulses
+---------
+
+![Electrocardiogram](images/ECG-SinusRhythmLabel.png){width=20%}
+
+
+![QRS Complex and T Wave Pulses](images/qrs-complex-t-wave-pulses.pdf){width=80%}
+
+
+Functional Description
+======================
+
+Conceptional RTL Diagram
+---------------
+
+![Heartbeat Generator - Conceptional RTL](images/heartbeat_gen_conceptional_rtl.pdf){width=60%}
+
+Simulation Result - Top Level
+=============================
+
+![Two Periods - Simulation Result](images/heartbeat_gen_two_periods_simwave.png){width=80%}
+
+Device Utilization and Performance
+==================================
+
+```pure
++------------------------------------------------------------------------------+
+; Fitter Summary ;
++------------------------------------+-----------------------------------------+
+; Fitter Status ; Successful - Wed Mar 31 11:50:15 2021 ;
+; Quartus II 32-bit Version ; 13.0.1 Build 232 06/12/2013 SP 1 SJ Web ;
+; Revision Name ; de1_heartbeat_gen ;
+; Top-level Entity Name ; de1_heartbeat_gen ;
+; Family ; Cyclone II ;
+; Device ; EP2C20F484C7 ;
+; Timing Models ; Final ;
+; Total logic elements ; 50 / 18,752 ( < 1 % ) ;
+; Total combinational functions ; 50 / 18,752 ( < 1 % ) ;
+; Dedicated logic registers ; 26 / 18,752 ( < 1 % ) ;
+; Total registers ; 26 ;
+; Total pins ; 15 / 315 ( 5 % ) ;
+; Total virtual pins ; 0 ;
+; Total memory bits ; 0 / 239,616 ( 0 % ) ;
+; Embedded Multiplier 9-bit elements ; 0 / 52 ( 0 % ) ;
+; Total PLLs ; 0 / 4 ( 0 % ) ;
++------------------------------------+-----------------------------------------+
+```
+
+Demonstration
+=============
+
+Prototype Setup
+---------------
+
+![Test Environment on DE1 Prototype Board](images/de1_heartbeat_gen_schematic.pdf){width=70%}
+
+Demonstration
+=============
+
+Test Environment
+----------------
+
+
+
+
+
+Questions
+=========
+
+Thank you for your attention !
+
diff --git a/doc/pulse_width_modulator_report.md b/doc/pulse_width_modulator_report.md
new file mode 100644
index 0000000..67cb4c2
--- /dev/null
+++ b/doc/pulse_width_modulator_report.md
@@ -0,0 +1,235 @@
+Introduction
+============
+
+A heartbeat generator can be used in a digital system to display activity of a system.
+Based on population studies, a heartrate between 60 and 100 beats per minute (bpm)
+is considered as normal for a human adult.
+
+Features
+========
+
+Normal rhythm produces four entities – a P wave, a QRS complex, a T wave, and a U wave – that each
+have a fairly unique pattern. [[1]](https://en.wikipedia.org/wiki/Electrocardiography)
+
+For simplicity the existing heartbeat modules generates the QRS complex and T wave only.
+
+ * Models QRS-Complex and T-Wave
+ * Average time values based on 72 bpm
+ * Enable input for external prescaler
+
+
+General Description
+===================
+
+![Heartbeat Generator - Schematic Symbol](images/heartbeat_gen_symbol.pdf){width=40%}
+
+| **Name** | **Type** | **Direction** | **Polarity** | **Description** |
+|-------------|-------------------|:-------------:|:------------:|-----------------|
+| clk_i | std_ulogic | IN | HIGH | clock |
+| rst_ni | std_ulogic | IN | LOW | reset |
+| en_pi | std_ulogic | IN | HIGH | enable |
+| count_o | std_ulogic_vector | OUT | HIGH | count value |
+| heartbeat_o | std_ulogic | OUT | HIGH | hearbeat pulse output |
+
+: Heartbeat Generator - Description of I/O Signals
+
+
+Functional Description
+======================
+
+The shape of an [electrogardiogramm](https://en.wikipedia.org/wiki/Electrocardiography) as a voltage graph over time
+
+
+
+![Electrocardiogram](images/ECG-SinusRhythmLabel.png){width=20%}
+
+The important QRS complex and T wave are modelled as digital pulses.
+
+![QRS Complex and T Wave Pulses](images/qrs-complex-t-wave-pulses.pdf){width=80%}
+
+
+Design Description
+==================
+
+A conceptional RTL diagram is shown below.
+
+![Heartbeat Generator - Conceptional RTL](images/heartbeat_gen_conceptional_rtl.pdf){width=60%}
+
+The simulation result shows two full periods based on a clock period of 1 ms
+
+![Two Periods - Simulation Result](images/heartbeat_gen_two_periods_simwave.png){width=80%}
+
+In more detail using cursors to display correct parameters of the QRS complex and T wave.
+
+![QRS-Complex and T-Wave - Simulation Result](images/qrs-complex-t-wave_simwave.png){width=80%}
+
+
+
+Device Utilization and Performance
+==================================
+
+The following table shows the utilisation of both modules heartbeat_gen and cntdnmodm.
+
+```pure
++--------------------------------------------------------------------------------------+
+; Fitter Summary ;
++------------------------------------+-------------------------------------------------+
+; Fitter Status ; Successful - Wed Mar 31 11:50:15 2021 ;
+; Quartus II 32-bit Version ; 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition ;
+; Revision Name ; de1_heartbeat_gen ;
+; Top-level Entity Name ; de1_heartbeat_gen ;
+; Family ; Cyclone II ;
+; Device ; EP2C20F484C7 ;
+; Timing Models ; Final ;
+; Total logic elements ; 50 / 18,752 ( < 1 % ) ;
+; Total combinational functions ; 50 / 18,752 ( < 1 % ) ;
+; Dedicated logic registers ; 26 / 18,752 ( < 1 % ) ;
+; Total registers ; 26 ;
+; Total pins ; 15 / 315 ( 5 % ) ;
+; Total virtual pins ; 0 ;
+; Total memory bits ; 0 / 239,616 ( 0 % ) ;
+; Embedded Multiplier 9-bit elements ; 0 / 52 ( 0 % ) ;
+; Total PLLs ; 0 / 4 ( 0 % ) ;
++------------------------------------+-------------------------------------------------+
+```
+
+```pure
+
++----------------------------------------------------------------------------------------+
+; TimeQuest Timing Analyzer Summary ;
++--------------------+-------------------------------------------------------------------+
+; Quartus II Version ; Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Web Edition ;
+; Revision Name ; de1_heartbeat_gen ;
+; Device Family ; Cyclone II ;
+; Device Name ; EP2C20F484C7 ;
+; Timing Models ; Final ;
+; Delay Model ; Combined ;
+; Rise/Fall Delays ; Unavailable ;
++--------------------+-------------------------------------------------------------------+
+
+-----------------------------------------+
+; Clocks ;
++------------+------+--------+-----------+
+; Clock Name ; Type ; Period ; Frequency ;
++------------+------+--------+-----------+
+; CLOCK_50 ; Base ; 20.000 ; 50.0 MHz ;
++------------+------+--------+-----------+
+
+
++-----------------------------------------------------------------------------+
+; Multicorner Timing Analysis Summary ;
++------------------+-------+-------+----------+---------+---------------------+
+; Clock ; Setup ; Hold ; Recovery ; Removal ; Minimum Pulse Width ;
++------------------+-------+-------+----------+---------+---------------------+
+; Worst-case Slack ; 3.390 ; 0.241 ; 13.381 ; 3.796 ; 8.889 ;
+; CLOCK_50 ; 3.390 ; 0.241 ; 13.381 ; 3.796 ; 8.889 ;
+; Design-wide TNS ; 0.0 ; 0.0 ; 0.0 ; 0.0 ; 0.0 ;
+; CLOCK_50 ; 0.000 ; 0.000 ; 0.000 ; 0.000 ; 0.000 ;
++------------------+-------+-------+----------+---------+---------------------+
+```
+
+Application Note
+================
+
+The following test environment on a DE1 prototype board uses a system clock frequency of 50 MHz.
+A prescaler is parameterised to generate an output signal with a period of 1 ms.
+
+![Test Environment on DE1 Prototype Board](images/de1_heartbeat_gen_schematic.pdf){width=70%}
+
+
+
+Appendix
+========
+
+References
+----------
+
+* [Wiki: Electrocardiography](https://en.wikipedia.org/wiki/Electrocardiography)
+
+Project Hierarchy
+-----------------
+
+### Module Hierarchy for Verification
+
+```pure
+t_heartbeat_gen(tbench)
+ heartbeat_gen(rtl)
+```
+
+### Prototype Environment
+
+```pure
+de1_heartbeat_gen(structure)
+ heartbeat_gen(rtl)
+ cntdnmodm(rtl)
+```
+
+VHDL Sources
+------------
+
+```vhdl
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY heartbeat_gen IS
+ PORT (clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector;
+ heartbeat_o : OUT std_ulogic
+ );
+END heartbeat_gen;
+```
+
+```vhdl
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+
+ARCHITECTURE rtl OF heartbeat_gen IS
+
+ CONSTANT n : natural := 10;
+ CONSTANT zero : unsigned(n-1 DOWNTO 0) := (OTHERS => '0');
+
+ CONSTANT heartbeat_period : unsigned(n-1 DOWNTO 0) := to_unsigned(833, n);
+ CONSTANT qrs_width : unsigned(n-1 DOWNTO 0) := to_unsigned(100, n);
+ CONSTANT st_width
+ CONSTANT t_width
+ CONSTANT qt_width
+
+ SIGNAL next_state, current_state : unsigned(n-1 DOWNTO 0);
+
+ SIGNAL tc_qrs : std_ulogic; -- qrs interval
+ SIGNAL tc_t : std_ulogic; -- T wave
+
+BEGIN
+
+ next_state_logic :
+
+
+
+ state_register :
+
+
+ -- output_logic
+ t_wave : tc_t <=
+
+
+
+ qrs_complex : tc_qrs <=
+
+
+ output_value : heartbeat_o <=
+
+
+END rtl;
+```
+
+Revision History
+----------------
+
+| **Date** | **Version** | **Change Summary** |
+|:----------|:-------------|:--------------------|
+| May 2020 | 0.1 | Initial Release |
+| April 2021 | 0.2 | Added parameterisation |
+
diff --git a/doc/report.yaml b/doc/report.yaml
new file mode 100644
index 0000000..1989e0a
--- /dev/null
+++ b/doc/report.yaml
@@ -0,0 +1,27 @@
+---
+title: Pulse Width Modulator
+subtitle: VLSI-Design Module - Report
+author: J Färber
+date: SS2022
+lang: en-UK
+geometry: a4paper, left=25mm, right=20mm, top=20mm, bottom=25mm
+fontsize: 12pt
+code-block-font-size: \scriptsize
+titlepage: true
+logo: images/uasa-logo.pdf
+toc: true
+lof: true
+lot: true
+toc-own-page: true
+colorlinks: true
+secnumdepth: 4
+header-includes:
+# 4th level header rendering
+# see https://stackoverflow.com/questions/21198025/pandoc-generation-of-pdf-from-markdown-4th-header-is-rendered-differently/21204829#21204829
+ - |
+ ``` {=latex}
+ \let\originAlParaGraph\paragraph
+ \renewcommand{\paragraph}[1]{\originAlParaGraph{#1} \hfill}
+ ```
+---
+
diff --git a/doc/uasa_meng_vlsi_template.tex b/doc/uasa_meng_vlsi_template.tex
new file mode 100644
index 0000000..7aac2a7
--- /dev/null
+++ b/doc/uasa_meng_vlsi_template.tex
@@ -0,0 +1,1038 @@
+%%
+% Copyright (c) 2017 - 2020, Pascal Wagler;
+% Copyright (c) 2014 - 2020, John MacFarlane
+%
+% All rights reserved.
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions
+% are met:
+%
+% - Redistributions of source code must retain the above copyright
+% notice, this list of conditions and the following disclaimer.
+%
+% - Redistributions in binary form must reproduce the above copyright
+% notice, this list of conditions and the following disclaimer in the
+% documentation and/or other materials provided with the distribution.
+%
+% - Neither the name of John MacFarlane nor the names of other
+% contributors may be used to endorse or promote products derived
+% from this software without specific prior written permission.
+%
+% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+% COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+% INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+% ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+% POSSIBILITY OF SUCH DAMAGE.
+%%
+
+%%
+% This is the Eisvogel pandoc LaTeX template.
+%
+% For usage information and examples visit the official GitHub page:
+% https://github.com/Wandmalfarbe/pandoc-latex-template
+%%
+
+% Options for packages loaded elsewhere
+\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref}
+\PassOptionsToPackage{hyphens}{url}
+\PassOptionsToPackage{dvipsnames,svgnames*,x11names*,table}{xcolor}
+$if(dir)$
+$if(latex-dir-rtl)$
+\PassOptionsToPackage{RTLdocument}{bidi}
+$endif$
+$endif$
+%
+\documentclass[
+$if(fontsize)$
+ $fontsize$,
+$endif$
+$if(lang)$
+ $babel-lang$,
+$endif$
+$if(papersize)$
+ $papersize$paper,
+$else$
+ a4paper,
+$endif$
+$if(beamer)$
+ ignorenonframetext,
+$if(handout)$
+ handout,
+$endif$
+$if(aspectratio)$
+ aspectratio=$aspectratio$,
+$endif$
+$endif$
+$for(classoption)$
+ $classoption$$sep$,
+$endfor$
+,tablecaptionabove
+]{$if(beamer)$$documentclass$$else$$if(book)$scrbook$else$scrartcl$endif$$endif$}
+$if(beamer)$
+$if(background-image)$
+\usebackgroundtemplate{%
+ \includegraphics[width=\paperwidth]{$background-image$}%
+}
+$endif$
+\usepackage{pgfpages}
+\setbeamertemplate{caption}[numbered]
+\setbeamertemplate{caption label separator}{: }
+\setbeamercolor{caption name}{fg=normal text.fg}
+\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$
+$for(beameroption)$
+\setbeameroption{$beameroption$}
+$endfor$
+% Prevent slide breaks in the middle of a paragraph
+\widowpenalties 1 10000
+\raggedbottom
+$if(section-titles)$
+\setbeamertemplate{part page}{
+ \centering
+ \begin{beamercolorbox}[sep=16pt,center]{part title}
+ \usebeamerfont{part title}\insertpart\par
+ \end{beamercolorbox}
+}
+\setbeamertemplate{section page}{
+ \centering
+ \begin{beamercolorbox}[sep=12pt,center]{part title}
+ \usebeamerfont{section title}\insertsection\par
+ \end{beamercolorbox}
+}
+\setbeamertemplate{subsection page}{
+ \centering
+ \begin{beamercolorbox}[sep=8pt,center]{part title}
+ \usebeamerfont{subsection title}\insertsubsection\par
+ \end{beamercolorbox}
+}
+\AtBeginPart{
+ \frame{\partpage}
+}
+\AtBeginSection{
+ \ifbibliography
+ \else
+ \frame{\sectionpage}
+ \fi
+}
+\AtBeginSubsection{
+ \frame{\subsectionpage}
+}
+$endif$
+$endif$
+$if(beamerarticle)$
+\usepackage{beamerarticle} % needs to be loaded first
+$endif$
+$if(fontfamily)$
+\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$}
+$else$
+\usepackage{lmodern}
+$endif$
+$if(linestretch)$
+\usepackage{setspace}
+\setstretch{$linestretch$}
+$else$
+\usepackage{setspace}
+\setstretch{1.2}
+$endif$
+\usepackage{amssymb,amsmath}
+\usepackage{ifxetex,ifluatex}
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
+ \usepackage[utf8]{inputenc}
+ \usepackage{textcomp} % provide euro and other symbols
+\else % if luatex or xetex
+$if(mathspec)$
+ \ifxetex
+ \usepackage{mathspec}
+ \else
+ \usepackage{unicode-math}
+ \fi
+$else$
+ \usepackage{unicode-math}
+$endif$
+ \defaultfontfeatures{Scale=MatchLowercase}
+ \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
+$if(mainfont)$
+ \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$}
+$endif$
+$if(sansfont)$
+ \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$}
+$endif$
+$if(monofont)$
+ \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$}
+$endif$
+$for(fontfamilies)$
+ \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$}
+$endfor$
+$if(mathfont)$
+$if(mathspec)$
+ \ifxetex
+ \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
+ \else
+ \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
+ \fi
+$else$
+ \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
+$endif$
+$endif$
+$if(CJKmainfont)$
+ \ifxetex
+ \usepackage{xeCJK}
+ \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
+ \fi
+$endif$
+$if(luatexjapresetoptions)$
+ \ifluatex
+ \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset}
+ \fi
+$endif$
+$if(CJKmainfont)$
+ \ifluatex
+ \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec}
+ \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
+ \fi
+$endif$
+\fi
+$if(beamer)$
+$if(theme)$
+\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$}
+$endif$
+$if(colortheme)$
+\usecolortheme{$colortheme$}
+$endif$
+$if(fonttheme)$
+\usefonttheme{$fonttheme$}
+$endif$
+$if(mainfont)$
+\usefonttheme{serif} % use mainfont rather than sansfont for slide text
+$endif$
+$if(innertheme)$
+\useinnertheme{$innertheme$}
+$endif$
+$if(outertheme)$
+\useoutertheme{$outertheme$}
+$endif$
+$endif$
+% Use upquote if available, for straight quotes in verbatim environments
+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
+\IfFileExists{microtype.sty}{% use microtype if available
+ \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype}
+ \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
+}{}
+$if(indent)$
+$else$
+\makeatletter
+\@ifundefined{KOMAClassName}{% if non-KOMA class
+ \IfFileExists{parskip.sty}{%
+ \usepackage{parskip}
+ }{% else
+ \setlength{\parindent}{0pt}
+ \setlength{\parskip}{6pt plus 2pt minus 1pt}}
+}{% if KOMA class
+ \KOMAoptions{parskip=half}}
+\makeatother
+$endif$
+$if(verbatim-in-note)$
+\usepackage{fancyvrb}
+$endif$
+\usepackage{xcolor}
+\definecolor{default-linkcolor}{HTML}{A50000}
+\definecolor{default-filecolor}{HTML}{A50000}
+\definecolor{default-citecolor}{HTML}{4077C0}
+\definecolor{default-urlcolor}{HTML}{4077C0}
+\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
+$if(footnotes-pretty)$
+% load footmisc in order to customize footnotes (footmisc has to be loaded before hyperref, cf. https://tex.stackexchange.com/a/169124/144087)
+\usepackage[hang,flushmargin,bottom,multiple]{footmisc}
+\setlength{\footnotemargin}{0.8em} % set space between footnote nr and text
+\setlength{\footnotesep}{\baselineskip} % set space between multiple footnotes
+\setlength{\skip\footins}{0.3cm} % set space between page content and footnote
+\setlength{\footskip}{0.9cm} % set space between footnote and page bottom
+$endif$
+\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
+\hypersetup{
+$if(title-meta)$
+ pdftitle={$title-meta$},
+$endif$
+$if(author-meta)$
+ pdfauthor={$author-meta$},
+$endif$
+$if(lang)$
+ pdflang={$lang$},
+$endif$
+$if(subject)$
+ pdfsubject={$subject$},
+$endif$
+$if(keywords)$
+ pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$},
+$endif$
+$if(colorlinks)$
+ colorlinks=true,
+ linkcolor=$if(linkcolor)$$linkcolor$$else$default-linkcolor$endif$,
+ filecolor=$if(filecolor)$$filecolor$$else$default-filecolor$endif$,
+ citecolor=$if(citecolor)$$citecolor$$else$default-citecolor$endif$,
+ urlcolor=$if(urlcolor)$$urlcolor$$else$default-urlcolor$endif$,
+$else$
+ hidelinks,
+$endif$
+ breaklinks=true,
+ pdfcreator={LaTeX via pandoc with the Eisvogel template}}
+\urlstyle{same} % disable monospaced font for URLs
+$if(verbatim-in-note)$
+\VerbatimFootnotes % allow verbatim text in footnotes
+$endif$
+$if(geometry)$
+$if(beamer)$
+\geometry{$for(geometry)$$geometry$$sep$,$endfor$}
+$else$
+\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
+$endif$
+$else$
+$if(beamer)$
+$else$
+\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering,$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
+$endif$
+$endif$
+$if(logo)$
+\usepackage[export]{adjustbox}
+\usepackage{graphicx}
+$endif$
+$if(beamer)$
+\newif\ifbibliography
+$endif$
+$if(listings)$
+\usepackage{listings}
+\newcommand{\passthrough}[1]{#1}
+\lstset{defaultdialect=[5.3]Lua}
+\lstset{defaultdialect=[x86masm]Assembler}
+$endif$
+$if(listings-no-page-break)$
+\usepackage{etoolbox}
+\BeforeBeginEnvironment{lstlisting}{\par\noindent\begin{minipage}{\linewidth}}
+\AfterEndEnvironment{lstlisting}{\end{minipage}\par\addvspace{\topskip}}
+$endif$
+$if(lhs)$
+\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
+$endif$
+$if(highlighting-macros)$
+$highlighting-macros$
+
+% Workaround/bugfix from jannick0.
+% See https://github.com/jgm/pandoc/issues/4302#issuecomment-360669013)
+% or https://github.com/Wandmalfarbe/pandoc-latex-template/issues/2
+%
+% Redefine the verbatim environment 'Highlighting' to break long lines (with
+% the help of fvextra). Redefinition is necessary because it is unlikely that
+% pandoc includes fvextra in the default template.
+\usepackage{fvextra}
+\DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,fontsize=$if(code-block-font-size)$$code-block-font-size$$else$\small$endif$,commandchars=\\\{\}}
+
+$endif$
+$if(tables)$
+\usepackage{longtable,booktabs}
+$if(beamer)$
+\usepackage{caption}
+% Make caption package work with longtable
+\makeatletter
+\def\fnum@table{\tablename~\thetable}
+\makeatother
+$else$
+% Correct order of tables after \paragraph or \subparagraph
+\usepackage{etoolbox}
+\makeatletter
+\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
+\makeatother
+% Allow footnotes in longtable head/foot
+\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
+\makesavenoteenv{longtable}
+$endif$
+$endif$
+% add backlinks to footnote references, cf. https://tex.stackexchange.com/questions/302266/make-footnote-clickable-both-ways
+$if(footnotes-disable-backlinks)$
+$else$
+\usepackage{footnotebackref}
+$endif$
+$if(graphics)$
+\usepackage{graphicx,grffile}
+\makeatletter
+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
+\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
+\makeatother
+% Scale images if necessary, so that they will not overflow the page
+% margins by default, and it is still possible to overwrite the defaults
+% using explicit options in \includegraphics[width, height, ...]{}
+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
+$endif$
+$if(links-as-notes)$
+% Make links footnotes instead of hotlinks:
+\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}}
+$endif$
+$if(strikeout)$
+\usepackage[normalem]{ulem}
+% Avoid problems with \sout in headers with hyperref
+\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
+$endif$
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+$if(numbersections)$
+\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$3$endif$}
+$else$
+\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
+$endif$
+$if(beamer)$
+$else$
+$if(block-headings)$
+% Make \paragraph and \subparagraph free-standing
+\ifx\paragraph\undefined\else
+ \let\oldparagraph\paragraph
+ \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
+\fi
+\ifx\subparagraph\undefined\else
+ \let\oldsubparagraph\subparagraph
+ \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
+\fi
+$endif$
+$endif$
+$if(pagestyle)$
+\pagestyle{$pagestyle$}
+$endif$
+
+% Make use of float-package and set default placement for figures to H.
+% The option H means 'PUT IT HERE' (as opposed to the standard h option which means 'You may put it here if you like').
+\usepackage{float}
+\floatplacement{figure}{$if(float-placement-figure)$$float-placement-figure$$else$H$endif$}
+
+$for(header-includes)$
+$header-includes$
+$endfor$
+$if(lang)$
+\ifxetex
+ $if(mainfont)$
+ $else$
+ % See issue https://github.com/reutenauer/polyglossia/issues/127
+ \renewcommand*\familydefault{\sfdefault}
+ $endif$
+ % Load polyglossia as late as possible: uses bidi with RTL langages (e.g. Hebrew, Arabic)
+ \usepackage{polyglossia}
+ \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$}
+$for(polyglossia-otherlangs)$
+ \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
+$endfor$
+\else
+ \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel}
+$if(babel-newcommands)$
+ $babel-newcommands$
+$endif$
+\fi
+$endif$
+$if(dir)$
+\ifxetex
+ % Load bidi as late as possible as it modifies e.g. graphicx
+ \usepackage{bidi}
+\fi
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \TeXXeTstate=1
+ \newcommand{\RL}[1]{\beginR #1\endR}
+ \newcommand{\LR}[1]{\beginL #1\endL}
+ \newenvironment{RTL}{\beginR}{\endR}
+ \newenvironment{LTR}{\beginL}{\endL}
+\fi
+$endif$
+$if(natbib)$
+\usepackage[$natbiboptions$]{natbib}
+\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
+$endif$
+$if(biblatex)$
+\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex}
+$for(bibliography)$
+\addbibresource{$bibliography$}
+$endfor$
+$endif$
+$if(csl-refs)$
+\newlength{\cslhangindent}
+\setlength{\cslhangindent}{1.5em}
+\newenvironment{cslreferences}%
+ {$if(csl-hanging-indent)$\setlength{\parindent}{0pt}%
+ \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces$endif$}%
+ {\par}
+$endif$
+
+$if(title)$
+\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
+$endif$
+$if(subtitle)$
+$if(beamer)$
+$else$
+\usepackage{etoolbox}
+\makeatletter
+\providecommand{\subtitle}[1]{% add subtitle to \maketitle
+ \apptocmd{\@title}{\par {\large #1 \par}}{}{}
+}
+\makeatother
+$endif$
+\subtitle{$subtitle$}
+$endif$
+$if(author)$
+\author{$for(author)$$author$$sep$ \and $endfor$}
+$endif$
+\date{$date$}
+$if(beamer)$
+$if(institute)$
+\institute{$for(institute)$$institute$$sep$ \and $endfor$}
+$endif$
+$if(titlegraphic)$
+\titlegraphic{\includegraphics{$titlegraphic$}}
+$endif$
+$if(logo)$
+\logo{\includegraphics{$logo$}}
+$endif$
+$endif$
+
+
+
+%%
+%% added
+%%
+
+%
+% language specification
+%
+% If no language is specified, use English as the default main document language.
+%
+$if(lang)$$else$
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=english]{babel}
+$if(babel-newcommands)$
+ $babel-newcommands$
+$endif$
+\else
+ $if(mainfont)$
+ $else$
+ % Workaround for bug in Polyglossia that breaks `\familydefault` when `\setmainlanguage` is used.
+ % See https://github.com/Wandmalfarbe/pandoc-latex-template/issues/8
+ % See https://github.com/reutenauer/polyglossia/issues/186
+ % See https://github.com/reutenauer/polyglossia/issues/127
+ \renewcommand*\familydefault{\sfdefault}
+ $endif$
+ % load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic)
+ \usepackage{polyglossia}
+ \setmainlanguage[]{english}
+$for(polyglossia-otherlangs)$
+ \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
+$endfor$
+\fi
+$endif$
+
+$if(page-background)$
+\usepackage[pages=all]{background}
+$endif$
+
+%
+% for the background color of the title page
+%
+$if(titlepage)$
+\usepackage{pagecolor}
+\usepackage{afterpage}
+$if(titlepage-background)$
+\usepackage{tikz}
+$endif$
+$if(geometry)$
+$else$
+\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering]{geometry}
+$endif$
+$endif$
+
+%
+% break urls
+%
+\PassOptionsToPackage{hyphens}{url}
+
+%
+% When using babel or polyglossia with biblatex, loading csquotes is recommended
+% to ensure that quoted texts are typeset according to the rules of your main language.
+%
+\usepackage{csquotes}
+
+%
+% captions
+%
+\definecolor{caption-color}{HTML}{777777}
+$if(beamer)$
+$else$
+\usepackage[font={stretch=1.2}, textfont={color=caption-color}, position=top, skip=4mm, labelfont=bf, singlelinecheck=false, justification=$if(caption-justification)$$caption-justification$$else$raggedright$endif$]{caption}
+\setcapindent{0em}
+$endif$
+
+%
+% blockquote
+%
+\definecolor{blockquote-border}{RGB}{221,221,221}
+\definecolor{blockquote-text}{RGB}{119,119,119}
+\usepackage{mdframed}
+\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=blockquote-border,skipabove=\parskip]{customblockquote}
+\renewenvironment{quote}{\begin{customblockquote}\list{}{\rightmargin=0em\leftmargin=0em}%
+\item\relax\color{blockquote-text}\ignorespaces}{\unskip\unskip\endlist\end{customblockquote}}
+
+%
+% Source Sans Pro as the de­fault font fam­ily
+% Source Code Pro for monospace text
+%
+% 'default' option sets the default
+% font family to Source Sans Pro, not \sfdefault.
+%
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ $if(fontfamily)$
+ $else$
+ \usepackage[default]{sourcesanspro}
+ \usepackage{sourcecodepro}
+ $endif$
+\else % if not pdftex
+ $if(mainfont)$
+ $else$
+ \usepackage[default]{sourcesanspro}
+ \usepackage{sourcecodepro}
+
+ % XeLaTeX specific adjustments for straight quotes: https://tex.stackexchange.com/a/354887
+ % This issue is already fixed (see https://github.com/silkeh/latex-sourcecodepro/pull/5) but the
+ % fix is still unreleased.
+ % TODO: Remove this workaround when the new version of sourcecodepro is released on CTAN.
+ \ifxetex
+ \makeatletter
+ \defaultfontfeatures[\ttfamily]
+ { Numbers = \sourcecodepro@figurestyle,
+ Scale = \SourceCodePro@scale,
+ Extension = .otf }
+ \setmonofont
+ [ UprightFont = *-\sourcecodepro@regstyle,
+ ItalicFont = *-\sourcecodepro@regstyle It,
+ BoldFont = *-\sourcecodepro@boldstyle,
+ BoldItalicFont = *-\sourcecodepro@boldstyle It ]
+ {SourceCodePro}
+ \makeatother
+ \fi
+ $endif$
+\fi
+
+%
+% heading color
+%
+\definecolor{heading-color}{RGB}{40,40,40}
+$if(beamer)$
+$else$
+\addtokomafont{section}{\color{heading-color}}
+$endif$
+% When using the classes report, scrreprt, book,
+% scrbook or memoir, uncomment the following line.
+%\addtokomafont{chapter}{\color{heading-color}}
+
+%
+% variables for title and author
+%
+$if(beamer)$
+$else$
+\usepackage{titling}
+\title{$title$}
+\author{$for(author)$$author$$sep$, $endfor$}
+$endif$
+
+%
+% tables
+%
+$if(tables)$
+
+\definecolor{table-row-color}{HTML}{F5F5F5}
+\definecolor{table-rule-color}{HTML}{999999}
+
+%\arrayrulecolor{black!40}
+\arrayrulecolor{table-rule-color} % color of \toprule, \midrule, \bottomrule
+\setlength\heavyrulewidth{0.3ex} % thickness of \toprule, \bottomrule
+\renewcommand{\arraystretch}{1.3} % spacing (padding)
+
+$if(table-use-row-colors)$
+% TODO: This doesn't work anymore. I don't know why.
+% Reset rownum counter so that each table
+% starts with the same row colors.
+% https://tex.stackexchange.com/questions/170637/restarting-rowcolors
+%
+% Unfortunately the colored cells extend beyond the edge of the
+% table because pandoc uses @-expressions (@{}) like so:
+%
+% \begin{longtable}[]{@{}ll@{}}
+% \end{longtable}
+%
+% https://en.wikibooks.org/wiki/LaTeX/Tables#.40-expressions
+\let\oldlongtable\longtable
+\let\endoldlongtable\endlongtable
+\renewenvironment{longtable}{
+\rowcolors{3}{}{table-row-color!100} % row color
+\oldlongtable} {
+\endoldlongtable
+\global\rownum=0\relax}
+$endif$
+$endif$
+
+%
+% remove paragraph indention
+%
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{6pt plus 2pt minus 1pt}
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+
+%
+%
+% Listings
+%
+%
+
+$if(listings)$
+
+%
+% general listing colors
+%
+\definecolor{listing-background}{HTML}{F7F7F7}
+\definecolor{listing-rule}{HTML}{B3B2B3}
+\definecolor{listing-numbers}{HTML}{B3B2B3}
+\definecolor{listing-text-color}{HTML}{000000}
+\definecolor{listing-keyword}{HTML}{435489}
+\definecolor{listing-keyword-2}{HTML}{1284CA} % additional keywords
+\definecolor{listing-keyword-3}{HTML}{9137CB} % additional keywords
+\definecolor{listing-identifier}{HTML}{435489}
+\definecolor{listing-string}{HTML}{00999A}
+\definecolor{listing-comment}{HTML}{8E8E8E}
+
+\lstdefinestyle{eisvogel_listing_style}{
+ language = java,
+$if(listings-disable-line-numbers)$
+ xleftmargin = 0.6em,
+ framexleftmargin = 0.4em,
+$else$
+ numbers = left,
+ xleftmargin = 2.7em,
+ framexleftmargin = 2.5em,
+$endif$
+ backgroundcolor = \color{listing-background},
+ basicstyle = \color{listing-text-color}\linespread{1.0}$if(code-block-font-size)$$code-block-font-size$$else$\small$endif$\ttfamily{},
+ breaklines = true,
+ frame = single,
+ framesep = 0.19em,
+ rulecolor = \color{listing-rule},
+ frameround = ffff,
+ tabsize = 4,
+ numberstyle = \color{listing-numbers},
+ aboveskip = 1.0em,
+ belowskip = 0.1em,
+ abovecaptionskip = 0em,
+ belowcaptionskip = 1.0em,
+ keywordstyle = {\color{listing-keyword}\bfseries},
+ keywordstyle = {[2]\color{listing-keyword-2}\bfseries},
+ keywordstyle = {[3]\color{listing-keyword-3}\bfseries\itshape},
+ sensitive = true,
+ identifierstyle = \color{listing-identifier},
+ commentstyle = \color{listing-comment},
+ stringstyle = \color{listing-string},
+ showstringspaces = false,
+ escapeinside = {/*@}{@*/}, % Allow LaTeX inside these special comments
+ literate =
+ {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
+ {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
+ {à}{{\`a}}1 {è}{{\'e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
+ {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
+ {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
+ {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
+ {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
+ {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
+ {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
+ {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
+ {€}{{\EUR}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1
+ {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
+ {…}{{\ldots}}1 {≥}{{>=}}1 {≤}{{<=}}1 {„}{{\glqq}}1 {“}{{\grqq}}1
+ {”}{{''}}1
+}
+\lstset{style=eisvogel_listing_style}
+
+%
+% Java (Java SE 12, 2019-06-22)
+%
+\lstdefinelanguage{Java}{
+ morekeywords={
+ % normal keywords (without data types)
+ abstract,assert,break,case,catch,class,continue,default,
+ do,else,enum,exports,extends,final,finally,for,if,implements,
+ import,instanceof,interface,module,native,new,package,private,
+ protected,public,requires,return,static,strictfp,super,switch,
+ synchronized,this,throw,throws,transient,try,volatile,while,
+ % var is an identifier
+ var
+ },
+ morekeywords={[2] % data types
+ % primitive data types
+ boolean,byte,char,double,float,int,long,short,
+ % String
+ String,
+ % primitive wrapper types
+ Boolean,Byte,Character,Double,Float,Integer,Long,Short
+ % number types
+ Number,AtomicInteger,AtomicLong,BigDecimal,BigInteger,DoubleAccumulator,DoubleAdder,LongAccumulator,LongAdder,Short,
+ % other
+ Object,Void,void
+ },
+ morekeywords={[3] % literals
+ % reserved words for literal values
+ null,true,false,
+ },
+ sensitive,
+ morecomment = [l]//,
+ morecomment = [s]{/*}{*/},
+ morecomment = [s]{/**}{*/},
+ morestring = [b]",
+ morestring = [b]',
+}
+
+\lstdefinelanguage{XML}{
+ morestring = [b]",
+ moredelim = [s][\bfseries\color{listing-keyword}]{<}{\ },
+ moredelim = [s][\bfseries\color{listing-keyword}]{</}{>},
+ moredelim = [l][\bfseries\color{listing-keyword}]{/>},
+ moredelim = [l][\bfseries\color{listing-keyword}]{>},
+ morecomment = [s]{<?}{?>},
+ morecomment = [s]{<!--}{-->},
+ commentstyle = \color{listing-comment},
+ stringstyle = \color{listing-string},
+ identifierstyle = \color{listing-identifier}
+}
+$endif$
+
+%
+% header and footer
+%
+$if(beamer)$
+$else$
+$if(disable-header-and-footer)$
+$else$
+\usepackage{fancyhdr}
+
+\fancypagestyle{eisvogel-header-footer}{
+ \fancyhead{}
+ \fancyfoot{}
+ \lhead[$if(header-right)$$header-right$$else$$date$$endif$]{$if(header-left)$$header-left$$else$$title$$endif$}
+ \chead[$if(header-center)$$header-center$$else$$endif$]{$if(header-center)$$header-center$$else$$endif$}
+ \rhead[$if(header-left)$$header-left$$else$$title$$endif$]{$if(header-right)$$header-right$$else$$date$$endif$}
+ \lfoot[$if(footer-right)$$footer-right$$else$\thepage$endif$]{$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$}
+ \cfoot[$if(footer-center)$$footer-center$$else$$endif$]{$if(footer-center)$$footer-center$$else$$endif$}
+ \rfoot[$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$]{$if(footer-right)$$footer-right$$else$\thepage$endif$}
+ \renewcommand{\headrulewidth}{0.4pt}
+ \renewcommand{\footrulewidth}{0.4pt}
+}
+\pagestyle{eisvogel-header-footer}
+$if(page-background)$
+\backgroundsetup{
+scale=1,
+color=black,
+opacity=$if(page-background-opacity)$$page-background-opacity$$else$0.2$endif$,
+angle=0,
+contents={%
+ \includegraphics[width=\paperwidth,height=\paperheight]{$page-background$}
+ }%
+}
+$endif$
+$endif$
+$endif$
+
+%%
+%% end added
+%%
+
+\begin{document}
+
+%%
+%% begin titlepage
+%%
+$if(beamer)$
+$else$
+$if(titlepage)$
+\begin{titlepage}
+$if(titlepage-background)$
+\newgeometry{top=2cm, right=4cm, bottom=3cm, left=4cm}
+$else$
+\newgeometry{left=6cm}
+$endif$
+$if(titlepage-color)$
+\definecolor{titlepage-color}{HTML}{$titlepage-color$}
+\newpagecolor{titlepage-color}\afterpage{\restorepagecolor}
+$endif$
+$if(titlepage-background)$
+\tikz[remember picture,overlay] \node[inner sep=0pt] at (current page.center){\includegraphics[width=\paperwidth,height=\paperheight]{$titlepage-background$}};
+$endif$
+\newcommand{\colorRule}[3][black]{\textcolor[HTML]{#1}{\rule{#2}{#3}}}
+\begin{flushleft}
+\noindent
+\\[-1em]
+\color[HTML]{$if(titlepage-text-color)$$titlepage-text-color$$else$5F5F5F$endif$}
+\makebox[0pt][l]{\colorRule[$if(titlepage-rule-color)$$titlepage-rule-color$$else$435488$endif$]{1.3\textwidth}{$if(titlepage-rule-height)$$titlepage-rule-height$$else$4$endif$pt}}
+\par
+\noindent
+
+$if(logo)$
+\noindent
+\includegraphics[width=$if(logo-width)$$logo-width$$else$100$endif$pt, right]{$logo$}
+$endif$
+
+
+$if(titlepage-background)$
+% The titlepage with a background image has other text spacing and text size
+{
+ \setstretch{2}
+ \vfill
+ \vskip -8em
+ \noindent {\huge \textbf{\textsf{$title$}}}
+ $if(subtitle)$
+ \vskip 1em
+ {\Large \textsf{$subtitle$}}
+ $endif$
+ \vskip 2em
+ \noindent {\Large \textsf{$for(author)$$author$$sep$, $endfor$} \vskip 0.6em \textsf{$date$}}
+ \vfill
+}
+$else$
+{
+ \setstretch{1.4}
+ \vfill
+ \noindent {\huge \textbf{\textsf{$title$}}}
+ $if(subtitle)$
+ \vskip 1em
+ {\Large \textsf{$subtitle$}}
+ $endif$
+ \vskip 2em
+ \noindent {\Large \textsf{$for(author)$$author$$sep$, $endfor$}}
+ \vfill
+}
+$endif$
+
+
+$if(titlepage-background)$
+$else$
+\textsf{$date$}
+$endif$
+\end{flushleft}
+\end{titlepage}
+\restoregeometry
+$endif$
+$endif$
+
+%%
+%% end titlepage
+%%
+
+$if(has-frontmatter)$
+\frontmatter
+$endif$
+$if(title)$
+$if(beamer)$
+\frame{\titlepage}
+$endif$
+$if(abstract)$
+\begin{abstract}
+$abstract$
+\end{abstract}
+$endif$
+$endif$
+
+$if(first-chapter)$
+\setcounter{chapter}{$first-chapter$}
+\addtocounter{chapter}{-1}
+$endif$
+
+$for(include-before)$
+$include-before$
+
+$endfor$
+$if(toc)$
+$if(toc-title)$
+\renewcommand*\contentsname{$toc-title$}
+$endif$
+$if(beamer)$
+\begin{frame}
+$if(toc-title)$
+ \frametitle{$toc-title$}
+$endif$
+ \tableofcontents[hideallsubsections]
+\end{frame}
+$if(toc-own-page)$
+\newpage
+$endif$
+$else$
+{
+$if(colorlinks)$
+\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$}
+$endif$
+\setcounter{tocdepth}{$if(toc-depth)$$toc-depth$$else$3$endif$}
+\tableofcontents
+$if(toc-own-page)$
+\newpage
+$endif$
+}
+$endif$
+$endif$
+$if(lot)$
+\listoftables
+\newpage
+$endif$
+$if(lof)$
+\listoffigures
+\newpage
+$endif$
+$if(linestretch)$
+\setstretch{$linestretch$}
+$endif$
+$if(has-frontmatter)$
+\mainmatter
+$endif$
+$body$
+
+$if(has-frontmatter)$
+\backmatter
+$endif$
+$if(natbib)$
+$if(bibliography)$
+$if(biblio-title)$
+$if(has-chapters)$
+\renewcommand\bibname{$biblio-title$}
+$else$
+\renewcommand\refname{$biblio-title$}
+$endif$
+$endif$
+$if(beamer)$
+\begin{frame}[allowframebreaks]{$biblio-title$}
+ \bibliographytrue
+$endif$
+ \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
+$if(beamer)$
+\end{frame}
+$endif$
+
+$endif$
+$endif$
+$if(biblatex)$
+$if(beamer)$
+\begin{frame}[allowframebreaks]{$biblio-title$}
+ \bibliographytrue
+ \printbibliography[heading=none]
+\end{frame}
+$else$
+\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
+$endif$
+
+$endif$
+$for(include-after)$
+$include-after$
+
+$endfor$
+\end{document}
diff --git a/doc/vec.conf b/doc/vec.conf
new file mode 100644
index 0000000..856e7eb
--- /dev/null
+++ b/doc/vec.conf
@@ -0,0 +1,243 @@
+
+
+#############################################################################
+# Parser keywords
+#############################################################################
+# Polarity
+HIGHActiveSuffix=_pi
+LOWActiveSuffix=_ni
+
+# Special ports
+#resetName=rst_n
+#clockName=clk
+resetName=rst_ni
+clockName=clk_i
+#resetName=rst_pi
+#clockName=clk_i
+#resetName=rst_i
+#clockName=clk_i
+#clockName=CLOCK_50
+#resetName=KEY
+#resetName=reset
+#clockName=clock
+
+# Default label to print above entity box. Leave empty if no label is desired
+default_label=
+
+
+#############################################################################
+# Font settings
+#############################################################################
+# Label
+label.fontFamily=Arial
+label.fontSize=10pt
+label.fontWeight=normal
+
+# Entity
+entity.fontFamily=Arial
+entity.fontSize=12pt
+entity.fontWeight=bold
+
+#Port
+port.fontFamily=Arial
+port.fontSize=12pt
+port.fontWeight=normal
+
+# Generic signal
+genericSignal.fontFamily=Arial
+genericSignal.fontSize=10pt
+genericSignal.fontWeight=normal
+
+# Vector
+vector.fontFamily=Arial
+vector.fontSize=10pt
+vector.fontWeight=normal
+
+
+#############################################################################
+# Shape settings
+#############################################################################
+# Margin
+vertical_Margin=0.5
+horizontal_Margin=0.5
+fixed_Width=0
+
+# Label
+label.stroke=none
+label.strokeWidth=0.00cm
+label.strokeColor=#000000
+label.fill=none
+label.fillColor=#FFFFFF
+
+# Entity
+entity.stroke=solid
+entity.strokeWidth=0.05cm
+entity.strokeColor=#000000
+entity.fill=solid
+entity.fillColor=#FFFFFF
+
+# Port
+port.stroke=none
+port.strokeWidth=0.00cm
+port.strokeColor=#FFF
+port.fill=none
+port.fillColor=#FFFFFF
+
+# Connector
+connector.stroke=solid
+connector.strokeWidth=0.025cm
+connector.strokeColor=#000000
+connector.fill=solid
+connector.fillColor=#FFFFFF
+
+# Generics
+generics.stroke=solid
+generics.strokeWidth=0.02cm
+generics.strokeColor=#BFBFBF
+generics.fill=solid
+generics.fillColor=#F2F2F2
+
+# Generic signal
+genericSignal.stroke=none
+genericSignal.strokeWidth=0.00cm
+genericSignal.strokeColor=#C2C2C2
+genericSignal.fill=none
+genericSignal.fillColor=#FFFFFF
+
+
+#############################################################################
+# Doku Wiki markup settings
+#############################################################################
+DokuWiki.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located.
+# Both absolute and relative path are working
+DokuWiki.outputPath=dokuwiki
+
+
+#############################################################################
+# Markdown settings
+#############################################################################
+Markdown.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located.
+# Both absolute and relative path are working
+Markdown.outputPath=markdown
+
+
+#############################################################################
+# LaTeX settings
+#############################################################################
+LaTeX.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located.
+# Both absolute and relative path are working
+LaTeX.outputPath=latex
+
+# VEC can add a 'table' environment to label and place the actual tabular element.
+# VEC will use the entity name as caption and label
+LaTeX.addTable=1
+LaTeX.centering=1
+LaTeX.caption=1
+LaTeX.label=1
+
+
+#############################################################################
+# Table export settings
+#############################################################################
+# Set the entity information the table should contain
+Table.exportType=1
+Table.exportDirection=1
+Table.exportPolarity=1
+Table.exportDescription=1
+Table.exportBlank1=0
+Table.exportBlank2=0
+
+# Export generics. Generate a seperate table for generic signals
+Table.exportGenerics=1
+
+# Heading formatting
+Table.boldHeadings=1
+
+# Column alignments
+Table.centeredName=0
+Table.centeredType=0
+Table.centeredDirection=1
+Table.centeredPolarity=1
+Table.centeredDescription=0
+Table.centeredBlank=0
+Table.centeredGenericName=0
+Table.centeredGenericType=0
+Table.centeredGenericDefaultValue=0
+
+# Column headings
+Table.Name_heading=Name
+Table.Type_heading=Type
+Table.Direction_heading=Direction
+Table.Polarity_heading=Polarity
+Table.Description_heading=Description
+Table.Blank1_heading=Blank1
+Table.Blank2_heading=Blank2
+Table.GenericName=Name
+Table.GenericType=Type
+Table.GenericDefaultValue=Default value
+
+# Captions for the port directions
+Table.caption_IN=IN
+Table.caption_OUT=OUT
+Table.caption_INOUT=INOUT
+Table.caption_BUFFER=BUFFER
+Table.caption_LINKAGE=LINKAGE
+
+# Polarity labels
+Table.caption_HIGHactive=HIGH
+Table.caption_LOWactive=LOW
+
+# Vector settings
+Table.combineNameAndType=0
+Table.showArrayLength=1
+Table.arrayNotation=1
+
+
+#############################################################################
+# PATH settings
+#############################################################################
+# Path to LibreOffice executable.
+# e.g. for WINDOWS
+# C:\Program Files (x86)\LibreOffice 4.0\program\soffice.exe
+# e.g. for UNIX platforms
+# /usr/bin/soffice
+
+#PATH.soffice=C:\Program Files (x86)\LibreOffice 3.6\program\soffice.exe
+PATH.soffice=/usr/bin/soffice
+
+
+#############################################################################
+# FODG Export
+#############################################################################
+FODG.enableExport=1
+
+# If left empty the output files will be placed in the same directory where the executable is located
+#FODG.outputPath=fodg
+FODG.outputPath=.
+
+
+#############################################################################
+# PNG Export
+#############################################################################
+PNG.enableExport=1
+
+# If left empty the output files will be placed in the same directory where the executable is located
+#PNG.outputPath=png
+PNG.outputPath=.
+
+
+#############################################################################
+# SVG Export
+#############################################################################
+SVG.enableExport=0
+
+# If left empty the output files will be placed in the same directory where the executable is located
+#SVG.outputPath=svg
+SVG.outputPath=.
+
diff --git a/matlab/audio/audio_first.slx b/matlab/audio/audio_first.slx
new file mode 100644
index 0000000..848e1be
--- /dev/null
+++ b/matlab/audio/audio_first.slx
Binary files differ
diff --git a/matlab/audio/audio_tone.slx b/matlab/audio/audio_tone.slx
new file mode 100644
index 0000000..5b8586b
--- /dev/null
+++ b/matlab/audio/audio_tone.slx
Binary files differ
diff --git a/matlab/audio/makefile b/matlab/audio/makefile
new file mode 100644
index 0000000..37ef569
--- /dev/null
+++ b/matlab/audio/makefile
@@ -0,0 +1,4 @@
+PROJECT=audio_first
+TOPLEVEL=$(PROJECT)/ml_audio
+
+include ../makefile
diff --git a/matlab/makefile b/matlab/makefile
new file mode 100644
index 0000000..2832597
--- /dev/null
+++ b/matlab/makefile
@@ -0,0 +1,15 @@
+###################################################################
+# Main Targets
+###################################################################
+
+help:
+ @echo '"make" does intentionally nothing. Type:'
+ @echo ' "make hdl" - create vhdl files from matlab simulink model'
+ @echo ' "make clean" - to remove all generated files'
+
+hdl: $(PROJECT).slx
+ # create hdl from matlab
+ matlab -nodisplay -nosplash -nodesktop -r "$(PROJECT); makehdl('$(TOPLEVEL)') ;exit;"
+
+clean:
+ rm -rf hdl_prj slprj *~
diff --git a/pnr/de1_and2gate/de1_and2gate_pins.tcl b/pnr/de1_and2gate/de1_and2gate_pins.tcl
new file mode 100644
index 0000000..9c70aec
--- /dev/null
+++ b/pnr/de1_and2gate/de1_and2gate_pins.tcl
@@ -0,0 +1,10 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L22 -to SW[0]
+set_location_assignment PIN_L21 -to SW[1]
+set_location_assignment PIN_R20 -to LEDR[0]
+set_location_assignment PIN_R19 -to LEDR[1]
+set_location_assignment PIN_U19 -to LEDR[2]
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_and2gate/makefile b/pnr/de1_and2gate/makefile
new file mode 100644
index 0000000..103b8c1
--- /dev/null
+++ b/pnr/de1_and2gate/makefile
@@ -0,0 +1,53 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = and2gate
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+
diff --git a/pnr/de1_audio/de1_audio_pins.tcl b/pnr/de1_audio/de1_audio_pins.tcl
new file mode 100644
index 0000000..28fe709
--- /dev/null
+++ b/pnr/de1_audio/de1_audio_pins.tcl
@@ -0,0 +1,23 @@
+# Pin Configuration
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_R22 -to KEY0
+set_location_assignment PIN_A3 -to I2C_SCLK
+set_location_assignment PIN_B3 -to I2C_SDAT
+set_location_assignment PIN_A6 -to AUD_ADCLRCK
+set_location_assignment PIN_B6 -to AUD_ADCDAT
+set_location_assignment PIN_A5 -to AUD_DACLRCK
+set_location_assignment PIN_B5 -to AUD_DACDAT
+set_location_assignment PIN_B4 -to AUD_XCK
+set_location_assignment PIN_A4 -to AUD_BCLK
+set_location_assignment PIN_R20 -to LEDR[0]
+set_location_assignment PIN_R19 -to LEDR[1]
+set_location_assignment PIN_U19 -to LEDR[2]
+set_location_assignment PIN_Y19 -to LEDR[3]
+set_location_assignment PIN_T18 -to LEDR[4]
+set_location_assignment PIN_V19 -to LEDR[5]
+set_location_assignment PIN_Y18 -to LEDR[6]
+set_location_assignment PIN_U18 -to LEDR[7]
+set_location_assignment PIN_R18 -to LEDR[8]
+set_location_assignment PIN_R17 -to LEDR[9]
+
+
diff --git a/pnr/de1_audio/makefile b/pnr/de1_audio/makefile
new file mode 100644
index 0000000..0a8636c
--- /dev/null
+++ b/pnr/de1_audio/makefile
@@ -0,0 +1,16 @@
+SIM_PROJECT_NAME = de1_audio
+PROJECT = $(SIM_PROJECT_NAME)
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES)
+
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+
+include ../makefile
+
+
diff --git a/pnr/de1_binto7segment/de1_binto7segment_pins.tcl b/pnr/de1_binto7segment/de1_binto7segment_pins.tcl
new file mode 100644
index 0000000..ad20fb6
--- /dev/null
+++ b/pnr/de1_binto7segment/de1_binto7segment_pins.tcl
@@ -0,0 +1,20 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L22 -to SW[0]
+set_location_assignment PIN_L21 -to SW[1]
+set_location_assignment PIN_M22 -to SW[2]
+set_location_assignment PIN_V12 -to SW[3]
+set_location_assignment PIN_R20 -to LEDR[0]
+set_location_assignment PIN_R19 -to LEDR[1]
+set_location_assignment PIN_U19 -to LEDR[2]
+set_location_assignment PIN_Y19 -to LEDR[3]
+set_location_assignment PIN_J2 -to HEX0[0]
+set_location_assignment PIN_J1 -to HEX0[1]
+set_location_assignment PIN_H2 -to HEX0[2]
+set_location_assignment PIN_H1 -to HEX0[3]
+set_location_assignment PIN_F2 -to HEX0[4]
+set_location_assignment PIN_F1 -to HEX0[5]
+set_location_assignment PIN_E2 -to HEX0[6]
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_binto7segment/makefile b/pnr/de1_binto7segment/makefile
new file mode 100644
index 0000000..60faed4
--- /dev/null
+++ b/pnr/de1_binto7segment/makefile
@@ -0,0 +1,53 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = binto7segment
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+
diff --git a/pnr/de1_cntdn/de1_cntdn_pins.tcl b/pnr/de1_cntdn/de1_cntdn_pins.tcl
new file mode 100644
index 0000000..cb02476
--- /dev/null
+++ b/pnr/de1_cntdn/de1_cntdn_pins.tcl
@@ -0,0 +1,14 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_R22 -to KEY[0]
+set_location_assignment PIN_R21 -to KEY[1]
+set_location_assignment PIN_H12 -to GPO_1[0]
+set_location_assignment PIN_H13 -to GPO_1[1]
+set_location_assignment PIN_H14 -to GPO_1[2]
+set_location_assignment PIN_G15 -to GPO_1[3]
+set_location_assignment PIN_E14 -to GPO_1[4]
+set_location_assignment PIN_E15 -to GPO_1[5]
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_cntdn/makefile b/pnr/de1_cntdn/makefile
new file mode 100644
index 0000000..fc13333
--- /dev/null
+++ b/pnr/de1_cntdn/makefile
@@ -0,0 +1,53 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = cntdn
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+
diff --git a/pnr/de1_cntdnmodm/de1_cntdnmodm_pins.tcl b/pnr/de1_cntdnmodm/de1_cntdnmodm_pins.tcl
new file mode 100644
index 0000000..81d32b6
--- /dev/null
+++ b/pnr/de1_cntdnmodm/de1_cntdnmodm_pins.tcl
@@ -0,0 +1,16 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_R22 -to KEY[0]
+set_location_assignment PIN_R21 -to KEY[1]
+set_location_assignment PIN_H12 -to GPO_1[0]
+set_location_assignment PIN_H13 -to GPO_1[1]
+set_location_assignment PIN_H14 -to GPO_1[2]
+set_location_assignment PIN_G15 -to GPO_1[3]
+set_location_assignment PIN_E14 -to GPO_1[4]
+set_location_assignment PIN_E15 -to GPO_1[5]
+set_location_assignment PIN_F15 -to GPO_1[6]
+set_location_assignment PIN_G16 -to GPO_1[7]
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_cntdnmodm/makefile b/pnr/de1_cntdnmodm/makefile
new file mode 100644
index 0000000..72e14e0
--- /dev/null
+++ b/pnr/de1_cntdnmodm/makefile
@@ -0,0 +1,53 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = cntdnmodm
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+
diff --git a/pnr/de1_incrementer/de1_incrementer_pins.tcl b/pnr/de1_incrementer/de1_incrementer_pins.tcl
new file mode 100644
index 0000000..7f21d8a
--- /dev/null
+++ b/pnr/de1_incrementer/de1_incrementer_pins.tcl
@@ -0,0 +1,25 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_R22 -to KEY
+set_location_assignment PIN_H12 -to GPI_1[0]
+set_location_assignment PIN_H13 -to GPI_1[1]
+set_location_assignment PIN_U22 -to LEDG[0]
+set_location_assignment PIN_U21 -to LEDG[1]
+set_location_assignment PIN_J2 -to HEX0[0]
+set_location_assignment PIN_J1 -to HEX0[1]
+set_location_assignment PIN_H2 -to HEX0[2]
+set_location_assignment PIN_H1 -to HEX0[3]
+set_location_assignment PIN_F2 -to HEX0[4]
+set_location_assignment PIN_F1 -to HEX0[5]
+set_location_assignment PIN_E2 -to HEX0[6]
+set_location_assignment PIN_E1 -to HEX1[0]
+set_location_assignment PIN_H6 -to HEX1[1]
+set_location_assignment PIN_H5 -to HEX1[2]
+set_location_assignment PIN_H4 -to HEX1[3]
+set_location_assignment PIN_G3 -to HEX1[4]
+set_location_assignment PIN_D2 -to HEX1[5]
+set_location_assignment PIN_D1 -to HEX1[6]
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_incrementer/makefile b/pnr/de1_incrementer/makefile
new file mode 100644
index 0000000..2202ce2
--- /dev/null
+++ b/pnr/de1_incrementer/makefile
@@ -0,0 +1,55 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = incrementer
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/binto7segment_truthtable.vhd \
+../../src/synchroniser_rtl.vhd \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+
diff --git a/pnr/de1_mux2to1/de1_mux2to1_pins.tcl b/pnr/de1_mux2to1/de1_mux2to1_pins.tcl
new file mode 100644
index 0000000..d6984a3
--- /dev/null
+++ b/pnr/de1_mux2to1/de1_mux2to1_pins.tcl
@@ -0,0 +1,9 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L22 -to SW[0]
+set_location_assignment PIN_L21 -to SW[1]
+set_location_assignment PIN_M22 -to SW[2]
+set_location_assignment PIN_R20 -to LEDR
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_mux2to1/makefile b/pnr/de1_mux2to1/makefile
new file mode 100644
index 0000000..b4c830b
--- /dev/null
+++ b/pnr/de1_mux2to1/makefile
@@ -0,0 +1,87 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = mux2to1
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
diff --git a/pnr/de1_pwm/de1_pwm_pins.tcl b/pnr/de1_pwm/de1_pwm_pins.tcl
new file mode 100644
index 0000000..1d79959
--- /dev/null
+++ b/pnr/de1_pwm/de1_pwm_pins.tcl
@@ -0,0 +1,27 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_R22 -to KEY[0]
+set_location_assignment PIN_R21 -to KEY[1]
+set_location_assignment PIN_L22 -to SW[0]
+set_location_assignment PIN_L21 -to SW[1]
+set_location_assignment PIN_M22 -to SW[2]
+set_location_assignment PIN_V12 -to SW[3]
+set_location_assignment PIN_W12 -to SW[4]
+set_location_assignment PIN_U12 -to SW[5]
+set_location_assignment PIN_U11 -to SW[6]
+set_location_assignment PIN_M2 -to SW[7]
+set_location_assignment PIN_R20 -to LEDR[0]
+set_location_assignment PIN_R19 -to LEDR[1]
+set_location_assignment PIN_U19 -to LEDR[2]
+set_location_assignment PIN_Y19 -to LEDR[3]
+set_location_assignment PIN_T18 -to LEDR[4]
+set_location_assignment PIN_V19 -to LEDR[5]
+set_location_assignment PIN_Y18 -to LEDR[6]
+set_location_assignment PIN_U18 -to LEDR[7]
+set_location_assignment PIN_H12 -to GPO_1[0]
+set_location_assignment PIN_H13 -to GPO_1[1]
+set_location_assignment PIN_H14 -to GPO_1[2]
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_pwm/makefile b/pnr/de1_pwm/makefile
new file mode 100644
index 0000000..5ed5024
--- /dev/null
+++ b/pnr/de1_pwm/makefile
@@ -0,0 +1,87 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = pwm
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
diff --git a/pnr/de1_pwm_incrementer/de1_pwm_incrementer_pins.tcl b/pnr/de1_pwm_incrementer/de1_pwm_incrementer_pins.tcl
new file mode 100644
index 0000000..8eba56a
--- /dev/null
+++ b/pnr/de1_pwm_incrementer/de1_pwm_incrementer_pins.tcl
@@ -0,0 +1,36 @@
+# assign pin locations to a quartus project
+
+#----------------------------------------------------------------------
+# Pin Assignments
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_R22 -to KEY
+set_location_assignment PIN_H12 -to GPI_1[0]
+set_location_assignment PIN_H13 -to GPI_1[1]
+set_location_assignment PIN_U22 -to LEDG[0]
+set_location_assignment PIN_U21 -to LEDG[1]
+set_location_assignment PIN_J2 -to HEX0[0]
+set_location_assignment PIN_J1 -to HEX0[1]
+set_location_assignment PIN_H2 -to HEX0[2]
+set_location_assignment PIN_H1 -to HEX0[3]
+set_location_assignment PIN_F2 -to HEX0[4]
+set_location_assignment PIN_F1 -to HEX0[5]
+set_location_assignment PIN_E2 -to HEX0[6]
+set_location_assignment PIN_E1 -to HEX1[0]
+set_location_assignment PIN_H6 -to HEX1[1]
+set_location_assignment PIN_H5 -to HEX1[2]
+set_location_assignment PIN_H4 -to HEX1[3]
+set_location_assignment PIN_G3 -to HEX1[4]
+set_location_assignment PIN_D2 -to HEX1[5]
+set_location_assignment PIN_D1 -to HEX1[6]
+set_location_assignment PIN_R20 -to LEDR[0]
+set_location_assignment PIN_R19 -to LEDR[1]
+set_location_assignment PIN_U19 -to LEDR[2]
+set_location_assignment PIN_Y19 -to LEDR[3]
+set_location_assignment PIN_T18 -to LEDR[4]
+set_location_assignment PIN_V19 -to LEDR[5]
+set_location_assignment PIN_Y18 -to LEDR[6]
+set_location_assignment PIN_U18 -to LEDR[7]
+set_location_assignment PIN_H14 -to GPO_1[2]
+set_location_assignment PIN_G15 -to GPO_1[3]
+set_location_assignment PIN_E14 -to GPO_1[4]
+# ----------------------------------------------------------------------------
diff --git a/pnr/de1_pwm_incrementer/makefile b/pnr/de1_pwm_incrementer/makefile
new file mode 100644
index 0000000..c894956
--- /dev/null
+++ b/pnr/de1_pwm_incrementer/makefile
@@ -0,0 +1,55 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# - assign variable SIM_PROJECT_NAME with the top level project name
+# - add additional VHDL sources to SOURCE_FILES, if necessary
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of top level entity de1_$(PROJECT)_structure.vhd
+###################################################################
+
+SIM_PROJECT_NAME = pwm_incrementer
+PROJECT = de1_$(SIM_PROJECT_NAME)
+
+# Prototype Board FPGA family and device settings
+# DE1
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+# DEMMK
+# FAMILY = "MAX II"
+# DEVICE = EPM2210F324C3
+# PROGFILEEXT = pof
+# DE2
+#FAMILY = "Cyclone II"
+#DEVICE = EP2C35F484C7
+#PROGFILEEXT = sof
+# DE0
+#FAMILY = "Cyclone IV E"
+#DEVICE = EP4CE22F17C6
+#PROGFILEEXT = sof
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/binto7segment_truthtable.vhd \
+../../src/synchroniser_rtl.vhd \
+../../src/$(PROJECT)_structure.vhd
+
+include ../makefile
+
+
diff --git a/pnr/de1_tone/de1_tone_pins.tcl b/pnr/de1_tone/de1_tone_pins.tcl
new file mode 100644
index 0000000..e9c32ae
--- /dev/null
+++ b/pnr/de1_tone/de1_tone_pins.tcl
@@ -0,0 +1,33 @@
+# Pin Configuration
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_R22 -to KEY0
+set_location_assignment PIN_A3 -to I2C_SCLK
+set_location_assignment PIN_B3 -to I2C_SDAT
+set_location_assignment PIN_A6 -to AUD_ADCLRCK
+set_location_assignment PIN_B6 -to AUD_ADCDAT
+set_location_assignment PIN_A5 -to AUD_DACLRCK
+set_location_assignment PIN_B5 -to AUD_DACDAT
+set_location_assignment PIN_B4 -to AUD_XCK
+set_location_assignment PIN_A4 -to AUD_BCLK
+set_location_assignment PIN_R20 -to LEDR[0]
+set_location_assignment PIN_R19 -to LEDR[1]
+set_location_assignment PIN_U19 -to LEDR[2]
+set_location_assignment PIN_Y19 -to LEDR[3]
+set_location_assignment PIN_T18 -to LEDR[4]
+set_location_assignment PIN_V19 -to LEDR[5]
+set_location_assignment PIN_Y18 -to LEDR[6]
+set_location_assignment PIN_U18 -to LEDR[7]
+set_location_assignment PIN_R18 -to LEDR[8]
+set_location_assignment PIN_R17 -to LEDR[9]
+set_location_assignment PIN_L22 -to SW[0]
+set_location_assignment PIN_L21 -to SW[1]
+set_location_assignment PIN_M22 -to SW[2]
+set_location_assignment PIN_V12 -to SW[3]
+set_location_assignment PIN_W12 -to SW[4]
+set_location_assignment PIN_U12 -to SW[5]
+set_location_assignment PIN_U11 -to SW[6]
+set_location_assignment PIN_M2 -to SW[7]
+set_location_assignment PIN_M1 -to SW[8]
+set_location_assignment PIN_L2 -to SW[9]
+
+
diff --git a/pnr/de1_tone/makefile b/pnr/de1_tone/makefile
new file mode 100644
index 0000000..e9cf6e6
--- /dev/null
+++ b/pnr/de1_tone/makefile
@@ -0,0 +1,14 @@
+SIM_PROJECT_NAME = de1_tone
+PROJECT = $(SIM_PROJECT_NAME)
+
+# Here the VHDL files for synthesis are defined.
+include ../../sim/$(SIM_PROJECT_NAME)/makefile.sources
+
+# Add the toplevel fpga vhdl file
+SOURCE_FILES = $(SYN_SOURCE_FILES)
+
+FAMILY = "Cyclone II"
+DEVICE = EP2C20F484C7
+PROGFILEEXT = sof
+
+include ../makefile
diff --git a/pnr/makefile b/pnr/makefile
new file mode 100644
index 0000000..ffc1cf0
--- /dev/null
+++ b/pnr/makefile
@@ -0,0 +1,92 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with Quartus,
+## it is based on a design directory structure shown at
+## the end of this file.
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Main Targets
+#
+###################################################################
+
+help:
+ @echo '"make" does intentionally nothing. Type:'
+ @echo ' "make qproject" to create quartus project only'
+ @echo ' "make compile" to synthesize the design'
+ @echo ' "make prog" to configure programmable device'
+ @echo ' "make quartus" to start quartus graphical user interface'
+ @echo ' "make clean" to remove all generated files'
+
+qproject: $(PROJECT).qpf
+
+$(PROJECT).sdc:
+ # create a default timing constraint file assuming CLOCK_50
+ echo "create_clock -period 20.000 -name CLOCK_50 [get_ports CLOCK_50]" > $(PROJECT).sdc
+ echo "set_input_delay -clock CLOCK_50 2 [all_inputs]" >> $(PROJECT).sdc
+ echo "set_output_delay -clock CLOCK_50 2 [all_outputs]" >> $(PROJECT).sdc
+
+$(PROJECT).qpf: $(SOURCE_FILES) ../../scripts/create_quartus_project_settings.tcl $(PROJECT)_pins.tcl $(PROJECT).sdc
+ # assign VHDL design files
+ rm -rf quartus_vhdl_source_files.tcl
+ for source_file in $(SOURCE_FILES); do \
+ echo set_global_assignment -name VHDL_FILE $$source_file >> quartus_vhdl_source_files.tcl; \
+ done
+ # just create a quartus project
+ quartus_sh -t ../../scripts/create_quartus_project_settings.tcl -projectname $(PROJECT) -family $(FAMILY) -device $(DEVICE)
+
+compile: $(PROJECT).qpf flowsummary.log
+
+flowsummary.log: $(SOURCE_FILES)
+ quartus_sh -t ../../scripts/quartus_project_flow.tcl -projectname $(PROJECT) -process compile
+
+prog: $(PROJECT).qpf flowsummary.log
+ quartus_pgm -c USB-Blaster --mode jtag --operation="p;$(PROJECT).$(PROGFILEEXT)"
+
+quartus: $(PROJECT).qpf
+ # start quartus gui
+ quartus $(PROJECT).qpf &
+
+clean:
+ rm -rf *.rpt *.chg *.log quartus_vhdl_source_files.tcl *.htm *.eqn *.pin *.sof *.pof db incremental_db *.qpf *.qsf *.summary $(PROJECT).* *~
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/scripts/create_quartus_project_settings.tcl b/scripts/create_quartus_project_settings.tcl
new file mode 100644
index 0000000..ab55593
--- /dev/null
+++ b/scripts/create_quartus_project_settings.tcl
@@ -0,0 +1,84 @@
+## ----------------------------------------------------------------------------
+## Script : create_quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, F. Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: create a quartus project with default settings for device,
+## unused pins, ...
+## expects project name as command line parameter
+## e.g.
+## quartus_sh -t create_quartus_project_settings.tcl -projectname de1_mux2to1
+## -family "Cyclone II" -device EP2C20F484C7
+## ----------------------------------------------------------------------------
+## Revisions : see end of file
+## ----------------------------------------------------------------------------
+
+package require cmdline
+# Load Quartus II Tcl Project package
+package require ::quartus::project
+
+# ----------------------------------------------------------------------------
+# Declare command line parameters
+# ----------------------------------------------------------------------------
+set parameters {
+ {projectname.arg "" "Project Name"}
+ {family.arg "" "FPGA Family"}
+ {device.arg "" "FPGA Device"}
+}
+array set arg [::cmdline::getoptions argv $parameters]
+
+# ----------------------------------------------------------------------------
+# Verify required paramters
+# ----------------------------------------------------------------------------
+set requiredParameters {projectname family device}
+foreach parameter $requiredParameters {
+ if {$arg($parameter) == ""} {
+ puts stderr "Missing required parameter: -$parameter"
+ exit 1
+ }
+}
+
+
+ # ----------------------------------------------------------------------------
+ # Create project
+ # ----------------------------------------------------------------------------
+ project_new $arg(projectname) -overwrite
+
+ # ----------------------------------------------------------------------------
+ # Assign family, device, and top-level file
+ # ----------------------------------------------------------------------------
+ set_global_assignment -name FAMILY $arg(family)
+ set_global_assignment -name DEVICE $arg(device)
+
+ # ----------------------------------------------------------------------------
+ # Default settings
+ # ----------------------------------------------------------------------------
+ set_global_assignment -name USE_CONFIGURATION_DEVICE ON
+ set_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"
+ set_global_assignment -name VHDL_INPUT_VERSION VHDL_2008
+
+ # ----------------------------------------------------------------------------
+ # Design files
+ # ----------------------------------------------------------------------------
+ #set_global_assignment -name VHDL_FILE ../src/e_cntdnmodm.vhd
+ #set_global_assignment -name VHDL_FILE ../src/a_cntdnmodm_rtl.vhd
+ source quartus_vhdl_source_files.tcl
+
+ # ----------------------------------------------------------------------------
+ # Pin Assignments
+ # ----------------------------------------------------------------------------
+ # set_location_assignment PIN_L1 -to CLOCK_50
+ source $arg(projectname)_pins.tcl
+
+ # ----------------------------------------------------------------------------
+ # Close project
+ # ----------------------------------------------------------------------------
+ project_close
+
+
+## ----------------------------------------------------------------------------
+## Revisions:
+## ----------
+## $Id:$
+## ----------------------------------------------------------------------------
diff --git a/scripts/de1_pin_assignments_minimumio.tcl b/scripts/de1_pin_assignments_minimumio.tcl
new file mode 100644
index 0000000..d9d3470
--- /dev/null
+++ b/scripts/de1_pin_assignments_minimumio.tcl
@@ -0,0 +1,282 @@
+set_location_assignment PIN_D12 -to CLOCK_27[0]
+set_location_assignment PIN_E12 -to CLOCK_27[1]
+set_location_assignment PIN_B12 -to CLOCK_24[0]
+set_location_assignment PIN_A12 -to CLOCK_24[1]
+set_location_assignment PIN_L1 -to CLOCK_50
+set_location_assignment PIN_M21 -to EXT_CLOCK
+set_location_assignment PIN_R22 -to KEY[0]
+set_location_assignment PIN_R21 -to KEY[1]
+set_location_assignment PIN_T22 -to KEY[2]
+set_location_assignment PIN_T21 -to KEY[3]
+set_location_assignment PIN_L22 -to SW[0]
+set_location_assignment PIN_L21 -to SW[1]
+set_location_assignment PIN_M22 -to SW[2]
+set_location_assignment PIN_V12 -to SW[3]
+set_location_assignment PIN_W12 -to SW[4]
+set_location_assignment PIN_U12 -to SW[5]
+set_location_assignment PIN_U11 -to SW[6]
+set_location_assignment PIN_M2 -to SW[7]
+set_location_assignment PIN_M1 -to SW[8]
+set_location_assignment PIN_L2 -to SW[9]
+set_location_assignment PIN_R20 -to LEDR[0]
+set_location_assignment PIN_R19 -to LEDR[1]
+set_location_assignment PIN_U19 -to LEDR[2]
+set_location_assignment PIN_Y19 -to LEDR[3]
+set_location_assignment PIN_T18 -to LEDR[4]
+set_location_assignment PIN_V19 -to LEDR[5]
+set_location_assignment PIN_Y18 -to LEDR[6]
+set_location_assignment PIN_U18 -to LEDR[7]
+set_location_assignment PIN_R18 -to LEDR[8]
+set_location_assignment PIN_R17 -to LEDR[9]
+set_location_assignment PIN_U22 -to LEDG[0]
+set_location_assignment PIN_U21 -to LEDG[1]
+set_location_assignment PIN_V22 -to LEDG[2]
+set_location_assignment PIN_V21 -to LEDG[3]
+set_location_assignment PIN_W22 -to LEDG[4]
+set_location_assignment PIN_W21 -to LEDG[5]
+set_location_assignment PIN_Y22 -to LEDG[6]
+set_location_assignment PIN_Y21 -to LEDG[7]
+set_location_assignment PIN_J2 -to HEX0[0]
+set_location_assignment PIN_J1 -to HEX0[1]
+set_location_assignment PIN_H2 -to HEX0[2]
+set_location_assignment PIN_H1 -to HEX0[3]
+set_location_assignment PIN_F2 -to HEX0[4]
+set_location_assignment PIN_F1 -to HEX0[5]
+set_location_assignment PIN_E2 -to HEX0[6]
+set_location_assignment PIN_E1 -to HEX1[0]
+set_location_assignment PIN_H6 -to HEX1[1]
+set_location_assignment PIN_H5 -to HEX1[2]
+set_location_assignment PIN_H4 -to HEX1[3]
+set_location_assignment PIN_G3 -to HEX1[4]
+set_location_assignment PIN_D2 -to HEX1[5]
+set_location_assignment PIN_D1 -to HEX1[6]
+set_location_assignment PIN_G5 -to HEX2[0]
+set_location_assignment PIN_G6 -to HEX2[1]
+set_location_assignment PIN_C2 -to HEX2[2]
+set_location_assignment PIN_C1 -to HEX2[3]
+set_location_assignment PIN_E3 -to HEX2[4]
+set_location_assignment PIN_E4 -to HEX2[5]
+set_location_assignment PIN_D3 -to HEX2[6]
+set_location_assignment PIN_F4 -to HEX3[0]
+set_location_assignment PIN_D5 -to HEX3[1]
+set_location_assignment PIN_D6 -to HEX3[2]
+set_location_assignment PIN_J4 -to HEX3[3]
+set_location_assignment PIN_L8 -to HEX3[4]
+set_location_assignment PIN_F3 -to HEX3[5]
+set_location_assignment PIN_D4 -to HEX3[6]
+set_location_assignment PIN_A13 -to GPI_0[0]
+set_location_assignment PIN_B13 -to GPI_0[1]
+set_location_assignment PIN_A14 -to GPI_0[2]
+set_location_assignment PIN_B14 -to GPI_0[3]
+set_location_assignment PIN_A15 -to GPI_0[4]
+set_location_assignment PIN_B15 -to GPI_0[5]
+set_location_assignment PIN_A16 -to GPI_0[6]
+set_location_assignment PIN_B16 -to GPI_0[7]
+set_location_assignment PIN_A17 -to GPI_0[8]
+set_location_assignment PIN_B17 -to GPI_0[9]
+set_location_assignment PIN_A18 -to GPI_0[10]
+set_location_assignment PIN_B18 -to GPI_0[11]
+set_location_assignment PIN_A19 -to GPI_0[12]
+set_location_assignment PIN_B19 -to GPI_0[13]
+set_location_assignment PIN_A20 -to GPI_0[14]
+set_location_assignment PIN_B20 -to GPI_0[15]
+set_location_assignment PIN_C21 -to GPI_0[16]
+set_location_assignment PIN_C22 -to GPI_0[17]
+set_location_assignment PIN_D21 -to GPI_0[18]
+set_location_assignment PIN_D22 -to GPI_0[19]
+set_location_assignment PIN_E21 -to GPI_0[20]
+set_location_assignment PIN_E22 -to GPI_0[21]
+set_location_assignment PIN_F21 -to GPI_0[22]
+set_location_assignment PIN_F22 -to GPI_0[23]
+set_location_assignment PIN_G21 -to GPI_0[24]
+set_location_assignment PIN_G22 -to GPI_0[25]
+set_location_assignment PIN_J21 -to GPI_0[26]
+set_location_assignment PIN_J22 -to GPI_0[27]
+set_location_assignment PIN_K21 -to GPI_0[28]
+set_location_assignment PIN_K22 -to GPI_0[29]
+set_location_assignment PIN_J19 -to GPI_0[30]
+set_location_assignment PIN_J20 -to GPI_0[31]
+set_location_assignment PIN_J18 -to GPI_0[32]
+set_location_assignment PIN_K20 -to GPI_0[33]
+set_location_assignment PIN_L19 -to GPI_0[34]
+set_location_assignment PIN_L18 -to GPI_0[35]
+set_location_assignment PIN_H12 -to GPI_1[0]
+set_location_assignment PIN_H13 -to GPI_1[1]
+set_location_assignment PIN_H14 -to GPI_1[2]
+set_location_assignment PIN_G15 -to GPI_1[3]
+set_location_assignment PIN_E14 -to GPI_1[4]
+set_location_assignment PIN_E15 -to GPI_1[5]
+set_location_assignment PIN_F15 -to GPI_1[6]
+set_location_assignment PIN_G16 -to GPI_1[7]
+set_location_assignment PIN_F12 -to GPI_1[8]
+set_location_assignment PIN_F13 -to GPI_1[9]
+set_location_assignment PIN_C14 -to GPI_1[10]
+set_location_assignment PIN_D14 -to GPI_1[11]
+set_location_assignment PIN_D15 -to GPI_1[12]
+set_location_assignment PIN_D16 -to GPI_1[13]
+set_location_assignment PIN_C17 -to GPI_1[14]
+set_location_assignment PIN_C18 -to GPI_1[15]
+set_location_assignment PIN_C19 -to GPI_1[16]
+set_location_assignment PIN_C20 -to GPI_1[17]
+set_location_assignment PIN_D19 -to GPI_1[18]
+set_location_assignment PIN_D20 -to GPI_1[19]
+set_location_assignment PIN_E20 -to GPI_1[20]
+set_location_assignment PIN_F20 -to GPI_1[21]
+set_location_assignment PIN_E19 -to GPI_1[22]
+set_location_assignment PIN_E18 -to GPI_1[23]
+set_location_assignment PIN_G20 -to GPI_1[24]
+set_location_assignment PIN_G18 -to GPI_1[25]
+set_location_assignment PIN_G17 -to GPI_1[26]
+set_location_assignment PIN_H17 -to GPI_1[27]
+set_location_assignment PIN_J15 -to GPI_1[28]
+set_location_assignment PIN_H18 -to GPI_1[29]
+set_location_assignment PIN_N22 -to GPI_1[30]
+set_location_assignment PIN_N21 -to GPI_1[31]
+set_location_assignment PIN_P15 -to GPI_1[32]
+set_location_assignment PIN_N15 -to GPI_1[33]
+set_location_assignment PIN_P17 -to GPI_1[34]
+set_location_assignment PIN_P18 -to GPI_1[35]
+set_location_assignment PIN_A13 -to GPO_0[0]
+set_location_assignment PIN_B13 -to GPO_0[1]
+set_location_assignment PIN_A14 -to GPO_0[2]
+set_location_assignment PIN_B14 -to GPO_0[3]
+set_location_assignment PIN_A15 -to GPO_0[4]
+set_location_assignment PIN_B15 -to GPO_0[5]
+set_location_assignment PIN_A16 -to GPO_0[6]
+set_location_assignment PIN_B16 -to GPO_0[7]
+set_location_assignment PIN_A17 -to GPO_0[8]
+set_location_assignment PIN_B17 -to GPO_0[9]
+set_location_assignment PIN_A18 -to GPO_0[10]
+set_location_assignment PIN_B18 -to GPO_0[11]
+set_location_assignment PIN_A19 -to GPO_0[12]
+set_location_assignment PIN_B19 -to GPO_0[13]
+set_location_assignment PIN_A20 -to GPO_0[14]
+set_location_assignment PIN_B20 -to GPO_0[15]
+set_location_assignment PIN_C21 -to GPO_0[16]
+set_location_assignment PIN_C22 -to GPO_0[17]
+set_location_assignment PIN_D21 -to GPO_0[18]
+set_location_assignment PIN_D22 -to GPO_0[19]
+set_location_assignment PIN_E21 -to GPO_0[20]
+set_location_assignment PIN_E22 -to GPO_0[21]
+set_location_assignment PIN_F21 -to GPO_0[22]
+set_location_assignment PIN_F22 -to GPO_0[23]
+set_location_assignment PIN_G21 -to GPO_0[24]
+set_location_assignment PIN_G22 -to GPO_0[25]
+set_location_assignment PIN_J21 -to GPO_0[26]
+set_location_assignment PIN_J22 -to GPO_0[27]
+set_location_assignment PIN_K21 -to GPO_0[28]
+set_location_assignment PIN_K22 -to GPO_0[29]
+set_location_assignment PIN_J19 -to GPO_0[30]
+set_location_assignment PIN_J20 -to GPO_0[31]
+set_location_assignment PIN_J18 -to GPO_0[32]
+set_location_assignment PIN_K20 -to GPO_0[33]
+set_location_assignment PIN_L19 -to GPO_0[34]
+set_location_assignment PIN_L18 -to GPO_0[35]
+set_location_assignment PIN_H12 -to GPO_1[0]
+set_location_assignment PIN_H13 -to GPO_1[1]
+set_location_assignment PIN_H14 -to GPO_1[2]
+set_location_assignment PIN_G15 -to GPO_1[3]
+set_location_assignment PIN_E14 -to GPO_1[4]
+set_location_assignment PIN_E15 -to GPO_1[5]
+set_location_assignment PIN_F15 -to GPO_1[6]
+set_location_assignment PIN_G16 -to GPO_1[7]
+set_location_assignment PIN_F12 -to GPO_1[8]
+set_location_assignment PIN_F13 -to GPO_1[9]
+set_location_assignment PIN_C14 -to GPO_1[10]
+set_location_assignment PIN_D14 -to GPO_1[11]
+set_location_assignment PIN_D15 -to GPO_1[12]
+set_location_assignment PIN_D16 -to GPO_1[13]
+set_location_assignment PIN_C17 -to GPO_1[14]
+set_location_assignment PIN_C18 -to GPO_1[15]
+set_location_assignment PIN_C19 -to GPO_1[16]
+set_location_assignment PIN_C20 -to GPO_1[17]
+set_location_assignment PIN_D19 -to GPO_1[18]
+set_location_assignment PIN_D20 -to GPO_1[19]
+set_location_assignment PIN_E20 -to GPO_1[20]
+set_location_assignment PIN_F20 -to GPO_1[21]
+set_location_assignment PIN_E19 -to GPO_1[22]
+set_location_assignment PIN_E18 -to GPO_1[23]
+set_location_assignment PIN_G20 -to GPO_1[24]
+set_location_assignment PIN_G18 -to GPO_1[25]
+set_location_assignment PIN_G17 -to GPO_1[26]
+set_location_assignment PIN_H17 -to GPO_1[27]
+set_location_assignment PIN_J15 -to GPO_1[28]
+set_location_assignment PIN_H18 -to GPO_1[29]
+set_location_assignment PIN_N22 -to GPO_1[30]
+set_location_assignment PIN_N21 -to GPO_1[31]
+set_location_assignment PIN_P15 -to GPO_1[32]
+set_location_assignment PIN_N15 -to GPO_1[33]
+set_location_assignment PIN_P17 -to GPO_1[34]
+set_location_assignment PIN_P18 -to GPO_1[35]
+set_location_assignment PIN_A13 -to GPIO_0[0]
+set_location_assignment PIN_B13 -to GPIO_0[1]
+set_location_assignment PIN_A14 -to GPIO_0[2]
+set_location_assignment PIN_B14 -to GPIO_0[3]
+set_location_assignment PIN_A15 -to GPIO_0[4]
+set_location_assignment PIN_B15 -to GPIO_0[5]
+set_location_assignment PIN_A16 -to GPIO_0[6]
+set_location_assignment PIN_B16 -to GPIO_0[7]
+set_location_assignment PIN_A17 -to GPIO_0[8]
+set_location_assignment PIN_B17 -to GPIO_0[9]
+set_location_assignment PIN_A18 -to GPIO_0[10]
+set_location_assignment PIN_B18 -to GPIO_0[11]
+set_location_assignment PIN_A19 -to GPIO_0[12]
+set_location_assignment PIN_B19 -to GPIO_0[13]
+set_location_assignment PIN_A20 -to GPIO_0[14]
+set_location_assignment PIN_B20 -to GPIO_0[15]
+set_location_assignment PIN_C21 -to GPIO_0[16]
+set_location_assignment PIN_C22 -to GPIO_0[17]
+set_location_assignment PIN_D21 -to GPIO_0[18]
+set_location_assignment PIN_D22 -to GPIO_0[19]
+set_location_assignment PIN_E21 -to GPIO_0[20]
+set_location_assignment PIN_E22 -to GPIO_0[21]
+set_location_assignment PIN_F21 -to GPIO_0[22]
+set_location_assignment PIN_F22 -to GPIO_0[23]
+set_location_assignment PIN_G21 -to GPIO_0[24]
+set_location_assignment PIN_G22 -to GPIO_0[25]
+set_location_assignment PIN_J21 -to GPIO_0[26]
+set_location_assignment PIN_J22 -to GPIO_0[27]
+set_location_assignment PIN_K21 -to GPIO_0[28]
+set_location_assignment PIN_K22 -to GPIO_0[29]
+set_location_assignment PIN_J19 -to GPIO_0[30]
+set_location_assignment PIN_J20 -to GPIO_0[31]
+set_location_assignment PIN_J18 -to GPIO_0[32]
+set_location_assignment PIN_K20 -to GPIO_0[33]
+set_location_assignment PIN_L19 -to GPIO_0[34]
+set_location_assignment PIN_L18 -to GPIO_0[35]
+set_location_assignment PIN_H12 -to GPIO_1[0]
+set_location_assignment PIN_H13 -to GPIO_1[1]
+set_location_assignment PIN_H14 -to GPIO_1[2]
+set_location_assignment PIN_G15 -to GPIO_1[3]
+set_location_assignment PIN_E14 -to GPIO_1[4]
+set_location_assignment PIN_E15 -to GPIO_1[5]
+set_location_assignment PIN_F15 -to GPIO_1[6]
+set_location_assignment PIN_G16 -to GPIO_1[7]
+set_location_assignment PIN_F12 -to GPIO_1[8]
+set_location_assignment PIN_F13 -to GPIO_1[9]
+set_location_assignment PIN_C14 -to GPIO_1[10]
+set_location_assignment PIN_D14 -to GPIO_1[11]
+set_location_assignment PIN_D15 -to GPIO_1[12]
+set_location_assignment PIN_D16 -to GPIO_1[13]
+set_location_assignment PIN_C17 -to GPIO_1[14]
+set_location_assignment PIN_C18 -to GPIO_1[15]
+set_location_assignment PIN_C19 -to GPIO_1[16]
+set_location_assignment PIN_C20 -to GPIO_1[17]
+set_location_assignment PIN_D19 -to GPIO_1[18]
+set_location_assignment PIN_D20 -to GPIO_1[19]
+set_location_assignment PIN_E20 -to GPIO_1[20]
+set_location_assignment PIN_F20 -to GPIO_1[21]
+set_location_assignment PIN_E19 -to GPIO_1[22]
+set_location_assignment PIN_E18 -to GPIO_1[23]
+set_location_assignment PIN_G20 -to GPIO_1[24]
+set_location_assignment PIN_G18 -to GPIO_1[25]
+set_location_assignment PIN_G17 -to GPIO_1[26]
+set_location_assignment PIN_H17 -to GPIO_1[27]
+set_location_assignment PIN_J15 -to GPIO_1[28]
+set_location_assignment PIN_H18 -to GPIO_1[29]
+set_location_assignment PIN_N22 -to GPIO_1[30]
+set_location_assignment PIN_N21 -to GPIO_1[31]
+set_location_assignment PIN_P15 -to GPIO_1[32]
+set_location_assignment PIN_N15 -to GPIO_1[33]
+set_location_assignment PIN_P17 -to GPIO_1[34]
+set_location_assignment PIN_P18 -to GPIO_1[35] \ No newline at end of file
diff --git a/scripts/modelsim.ini b/scripts/modelsim.ini
new file mode 100644
index 0000000..d3412fe
--- /dev/null
+++ b/scripts/modelsim.ini
@@ -0,0 +1,351 @@
+;; ----------------------------------------------------------------------------
+;; Script : modelsim.ini
+;; ----------------------------------------------------------------------------
+;; Author : Johann Faerber
+;; Company : University of Applied Sciences Augsburg
+;; ----------------------------------------------------------------------------
+;; Description: original version modified
+;; - deleted all VHDL and Verilog device libraries
+;; - modified compiler standard to VHDL93 = 2008
+;; ----------------------------------------------------------------------------
+;; Revisions : see end of file
+;; ----------------------------------------------------------------------------
+
+; Copyright 1991-2009 Mentor Graphics Corporation
+;
+; All Rights Reserved.
+;
+; THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS THE PROPERTY OF
+; MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS SUBJECT TO LICENSE TERMS.
+;
+
+[Library]
+std = $MODEL_TECH/../std
+ieee = $MODEL_TECH/../ieee
+verilog = $MODEL_TECH/../verilog
+vital2000 = $MODEL_TECH/../vital2000
+std_developerskit = $MODEL_TECH/../std_developerskit
+synopsys = $MODEL_TECH/../synopsys
+modelsim_lib = $MODEL_TECH/../modelsim_lib
+sv_std = $MODEL_TECH/../sv_std
+
+; Altera Primitive libraries
+;
+; VHDL Section
+;
+altera_mf = $MODEL_TECH/../altera/vhdl/altera_mf
+altera = $MODEL_TECH/../altera/vhdl/altera
+altera_lnsim = $MODEL_TECH/../altera/vhdl/altera_lnsim
+lpm = $MODEL_TECH/../altera/vhdl/220model
+220model = $MODEL_TECH/../altera/vhdl/220model
+
+[vcom]
+; VHDL93 variable selects language version as the default.
+; Default is VHDL-2002.
+; Value of 0 or 1987 for VHDL-1987.
+; Value of 1 or 1993 for VHDL-1993.
+; Default or value of 2 or 2002 for VHDL-2002.
+; Default or value of 3 or 2008 for VHDL-2008.
+VHDL93 = 2008
+
+; Show source line containing error. Default is off.
+; Show_source = 1
+
+; Turn off unbound-component warnings. Default is on.
+; Show_Warning1 = 0
+
+; Turn off process-without-a-wait-statement warnings. Default is on.
+; Show_Warning2 = 0
+
+; Turn off null-range warnings. Default is on.
+; Show_Warning3 = 0
+
+; Turn off no-space-in-time-literal warnings. Default is on.
+; Show_Warning4 = 0
+
+; Turn off multiple-drivers-on-unresolved-signal warnings. Default is on.
+; Show_Warning5 = 0
+
+; Turn off optimization for IEEE std_logic_1164 package. Default is on.
+; Optimize_1164 = 0
+
+; Turn on resolving of ambiguous function overloading in favor of the
+; "explicit" function declaration (not the one automatically created by
+; the compiler for each type declaration). Default is off.
+; The .ini file has Explicit enabled so that std_logic_signed/unsigned
+; will match the behavior of synthesis tools.
+Explicit = 1
+
+; Turn off acceleration of the VITAL packages. Default is to accelerate.
+; NoVital = 1
+
+; Turn off VITAL compliance checking. Default is checking on.
+; NoVitalCheck = 1
+
+; Ignore VITAL compliance checking errors. Default is to not ignore.
+; IgnoreVitalErrors = 1
+
+; Turn off VITAL compliance checking warnings. Default is to show warnings.
+; Show_VitalChecksWarnings = 0
+
+; Keep silent about case statement static warnings.
+; Default is to give a warning.
+; NoCaseStaticError = 1
+
+; Keep silent about warnings caused by aggregates that are not locally static.
+; Default is to give a warning.
+; NoOthersStaticError = 1
+
+; Turn off inclusion of debugging info within design units.
+; Default is to include debugging info.
+; NoDebug = 1
+
+; Turn off "Loading..." messages. Default is messages on.
+; Quiet = 1
+
+; Turn on some limited synthesis rule compliance checking. Checks only:
+; -- signals used (read) by a process must be in the sensitivity list
+; CheckSynthesis = 1
+
+; Activate optimizations on expressions that do not involve signals,
+; waits, or function/procedure/task invocations. Default is off.
+; ScalarOpts = 1
+
+; Require the user to specify a configuration for all bindings,
+; and do not generate a compile time default binding for the
+; component. This will result in an elaboration error of
+; 'component not bound' if the user fails to do so. Avoids the rare
+; issue of a false dependency upon the unused default binding.
+; RequireConfigForAllDefaultBinding = 1
+
+; Inhibit range checking on subscripts of arrays. Range checking on
+; scalars defined with subtypes is inhibited by default.
+; NoIndexCheck = 1
+
+; Inhibit range checks on all (implicit and explicit) assignments to
+; scalar objects defined with subtypes.
+; NoRangeCheck = 1
+
+[vlog]
+
+; Turn off inclusion of debugging info within design units.
+; Default is to include debugging info.
+; NoDebug = 1
+
+; Turn off "loading..." messages. Default is messages on.
+; Quiet = 1
+
+; Turn on Verilog hazard checking (order-dependent accessing of global vars).
+; Default is off.
+; Hazard = 1
+
+; Turn on converting regular Verilog identifiers to uppercase. Allows case
+; insensitivity for module names. Default is no conversion.
+; UpCase = 1
+
+; Turn on incremental compilation of modules. Default is off.
+; Incremental = 1
+
+; Turns on lint-style checking.
+; Show_Lint = 1
+
+[vsim]
+; Simulator resolution
+; Set to fs, ps, ns, us, ms, or sec with optional prefix of 1, 10, or 100.
+Resolution = ns
+
+; User time unit for run commands
+; Set to default, fs, ps, ns, us, ms, or sec. The default is to use the
+; unit specified for Resolution. For example, if Resolution is 100ps,
+; then UserTimeUnit defaults to ps.
+; Should generally be set to default.
+UserTimeUnit = default
+
+; Default run length
+RunLength = 100
+
+; Maximum iterations that can be run without advancing simulation time
+IterationLimit = 5000
+
+; Directive to license manager:
+; vhdl Immediately reserve a VHDL license
+; vlog Immediately reserve a Verilog license
+; plus Immediately reserve a VHDL and Verilog license
+; nomgc Do not look for Mentor Graphics Licenses
+; nomti Do not look for Model Technology Licenses
+; noqueue Do not wait in the license queue when a license isn't available
+; viewsim Try for viewer license but accept simulator license(s) instead
+; of queuing for viewer license
+; License = plus
+
+; Stop the simulator after a VHDL/Verilog assertion message
+; 0 = Note 1 = Warning 2 = Error 3 = Failure 4 = Fatal
+BreakOnAssertion = 3
+
+; Assertion Message Format
+; %S - Severity Level
+; %R - Report Message
+; %T - Time of assertion
+; %D - Delta
+; %I - Instance or Region pathname (if available)
+; %% - print '%' character
+; AssertionFormat = "** %S: %R\n Time: %T Iteration: %D%I\n"
+
+; Assertion File - alternate file for storing VHDL/Verilog assertion messages
+; AssertFile = assert.log
+
+; Default radix for all windows and commands...
+; Set to symbolic, ascii, binary, octal, decimal, hex, unsigned
+DefaultRadix = symbolic
+
+; VSIM Startup command
+; Startup = do startup.do
+
+; File for saving command transcript
+TranscriptFile = transcript
+
+; File for saving command history
+; CommandHistory = cmdhist.log
+
+; Specify whether paths in simulator commands should be described
+; in VHDL or Verilog format.
+; For VHDL, PathSeparator = /
+; For Verilog, PathSeparator = .
+; Must not be the same character as DatasetSeparator.
+PathSeparator = /
+
+; Specify the dataset separator for fully rooted contexts.
+; The default is ':'. For example, sim:/top
+; Must not be the same character as PathSeparator.
+DatasetSeparator = :
+
+; Disable VHDL assertion messages
+; IgnoreNote = 1
+; IgnoreWarning = 1
+; IgnoreError = 1
+; IgnoreFailure = 1
+
+; Default force kind. May be freeze, drive, deposit, or default
+; or in other terms, fixed, wired, or charged.
+; A value of "default" will use the signal kind to determine the
+; force kind, drive for resolved signals, freeze for unresolved signals
+; DefaultForceKind = freeze
+
+; If zero, open files when elaborated; otherwise, open files on
+; first read or write. Default is 0.
+; DelayFileOpen = 1
+
+; Control VHDL files opened for write.
+; 0 = Buffered, 1 = Unbuffered
+UnbufferedOutput = 0
+
+; Control the number of VHDL files open concurrently.
+; This number should always be less than the current ulimit
+; setting for max file descriptors.
+; 0 = unlimited
+ConcurrentFileLimit = 40
+
+; Control the number of hierarchical regions displayed as
+; part of a signal name shown in the Wave window.
+; A value of zero tells VSIM to display the full name.
+; The default is 0.
+; WaveSignalNameWidth = 0
+
+; Turn off warnings from the std_logic_arith, std_logic_unsigned
+; and std_logic_signed packages.
+; StdArithNoWarnings = 1
+
+; Turn off warnings from the IEEE numeric_std and numeric_bit packages.
+; NumericStdNoWarnings = 1
+
+; Control the format of the (VHDL) FOR generate statement label
+; for each iteration. Do not quote it.
+; The format string here must contain the conversion codes %s and %d,
+; in that order, and no other conversion codes. The %s represents
+; the generate_label; the %d represents the generate parameter value
+; at a particular generate iteration (this is the position number if
+; the generate parameter is of an enumeration type). Embedded whitespace
+; is allowed (but discouraged); leading and trailing whitespace is ignored.
+; Application of the format must result in a unique scope name over all
+; such names in the design so that name lookup can function properly.
+; GenerateFormat = %s__%d
+
+; Specify whether checkpoint files should be compressed.
+; The default is 1 (compressed).
+; CheckpointCompressMode = 0
+
+; List of dynamically loaded objects for Verilog PLI applications
+; Veriuser = veriuser.sl
+
+; Specify default options for the restart command. Options can be one
+; or more of: -force -nobreakpoint -nolist -nolog -nowave
+; DefaultRestartOptions = -force
+
+; HP-UX 10.20 ONLY - Enable memory locking to speed up large designs
+; (> 500 megabyte memory footprint). Default is disabled.
+; Specify number of megabytes to lock.
+; LockedMemory = 1000
+
+; Turn on (1) or off (0) WLF file compression.
+; The default is 1 (compress WLF file).
+; WLFCompress = 0
+
+; Specify whether to save all design hierarchy (1) in the WLF file
+; or only regions containing logged signals (0).
+; The default is 0 (save only regions with logged signals).
+; WLFSaveAllRegions = 1
+
+; WLF file time limit. Limit WLF file by time, as closely as possible,
+; to the specified amount of simulation time. When the limit is exceeded
+; the earliest times get truncated from the file.
+; If both time and size limits are specified the most restrictive is used.
+; UserTimeUnits are used if time units are not specified.
+; The default is 0 (no limit). Example: WLFTimeLimit = {100 ms}
+; WLFTimeLimit = 0
+
+; WLF file size limit. Limit WLF file size, as closely as possible,
+; to the specified number of megabytes. If both time and size limits
+; are specified then the most restrictive is used.
+; The default is 0 (no limit).
+; WLFSizeLimit = 1000
+
+; Specify whether or not a WLF file should be deleted when the
+; simulation ends. A value of 1 will cause the WLF file to be deleted.
+; The default is 0 (do not delete WLF file when simulation ends).
+; WLFDeleteOnQuit = 1
+
+; Automatic SDF compilation
+; Disables automatic compilation of SDF files in flows that support it.
+; Default is on, uncomment to turn off.
+; NoAutoSDFCompile = 1
+
+[lmc]
+
+[msg_system]
+; Change a message severity or suppress a message.
+; The format is: <msg directive> = <msg number>[,<msg number>...]
+; Examples:
+; note = 3009
+; warning = 3033
+; error = 3010,3016
+; fatal = 3016,3033
+; suppress = 3009,3016,3043
+; The command verror <msg number> can be used to get the complete
+; description of a message.
+
+; Control transcripting of elaboration/runtime messages.
+; The default is to have messages appear in the transcript and
+; recorded in the wlf file (messages that are recorded in the
+; wlf file can be viewed in the MsgViewer). The other settings
+; are to send messages only to the transcript or only to the
+; wlf file. The valid values are
+; both {default}
+; tran {transcript only}
+; wlf {wlf file only}
+; msgmode = both
+
+;; ----------------------------------------------------------------------------
+;; Revisions:
+;; ----------
+;; $Id:$
+;; ----------------------------------------------------------------------------
diff --git a/scripts/quartus_project_flow.tcl b/scripts/quartus_project_flow.tcl
new file mode 100644
index 0000000..2894685
--- /dev/null
+++ b/scripts/quartus_project_flow.tcl
@@ -0,0 +1,84 @@
+## ----------------------------------------------------------------------------
+## Script : quartus_project_flow.tcl
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, F. Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: executes process steps in a quartus project
+## depending on the parameter process
+## expects project name as command line parameter
+## e.g.
+## quartus_sh -t quartus_project_flow.tcl -projectname de1_mux2to1
+## -process compile
+## ----------------------------------------------------------------------------
+## Revisions : see end of file
+## ----------------------------------------------------------------------------
+
+package require cmdline
+# Load Quartus II Tcl Project package
+package require ::quartus::project
+
+# ----------------------------------------------------------------------------
+# Declare command line parameters
+# ----------------------------------------------------------------------------
+set parameters {
+ {projectname.arg "" "Project Name"}
+ {process.arg "" "Process Step"}
+}
+array set arg [::cmdline::getoptions argv $parameters]
+
+# ----------------------------------------------------------------------------
+# Verify required paramters
+# ----------------------------------------------------------------------------
+set requiredParameters {projectname process}
+foreach parameter $requiredParameters {
+ if {$arg($parameter) == ""} {
+ puts stderr "Missing required parameter: -$parameter"
+ exit 1
+ }
+}
+
+# ----------------------------------------------------------------------------
+# Check, if project exists
+# ----------------------------------------------------------------------------
+if { ![project_exists $arg(projectname)] } {
+ post_message -type error "Project $arg(projectname) does not exist"
+ exit
+}
+ # ----------------------------------------------------------------------------
+ # Open project
+ # ----------------------------------------------------------------------------
+ project_open $arg(projectname)
+
+ # ----------------------------------------------------------------------------
+ # Run specified design flow by parameter -process
+ # ----------------------------------------------------------------------------
+ load_package flow
+
+ if { $arg(process) == "compile" } {
+ execute_flow -compile
+ } elseif { $arg(process) == "analysis_and_elaboration" } {
+ execute_flow -analysis_and_elaboration
+ } else {
+ post_message -type error "Process step $arg(process) not allowed !"
+ exit
+ }
+
+ # ----------------------------------------------------------------------------
+ # Write Reports
+ # ----------------------------------------------------------------------------
+ load_package report
+ load_report $arg(projectname)
+ write_report_panel -file flowsummary.log "Flow Summary"
+
+ # ----------------------------------------------------------------------------
+ # Close project
+ # ----------------------------------------------------------------------------
+ project_close
+
+
+## ----------------------------------------------------------------------------
+## Revisions:
+## ----------
+## $Id:$
+## ----------------------------------------------------------------------------
diff --git a/sim/and2gate/makefile b/sim/and2gate/makefile
new file mode 100644
index 0000000..e523dc3
--- /dev/null
+++ b/sim/and2gate/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = and2gate
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/and2gate/makefile.sources b/sim/and2gate/makefile.sources
new file mode 100644
index 0000000..cac390c
--- /dev/null
+++ b/sim/and2gate/makefile.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/and2gate_equation.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/cntdn/makefile b/sim/cntdn/makefile
new file mode 100644
index 0000000..1be2176
--- /dev/null
+++ b/sim/cntdn/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = cntdn
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/cntdn/makefile.sources b/sim/cntdn/makefile.sources
new file mode 100644
index 0000000..af4874d
--- /dev/null
+++ b/sim/cntdn/makefile.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/cntdn_rtl.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/cntdnmodm/makefile b/sim/cntdnmodm/makefile
new file mode 100644
index 0000000..060a0ad
--- /dev/null
+++ b/sim/cntdnmodm/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = cntdnmodm
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/cntdnmodm/makefile.sources b/sim/cntdnmodm/makefile.sources
new file mode 100644
index 0000000..4752d19
--- /dev/null
+++ b/sim/cntdnmodm/makefile.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/cntdnmodm_rtl.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/de1_audio/makefile b/sim/de1_audio/makefile
new file mode 100644
index 0000000..99b022e
--- /dev/null
+++ b/sim/de1_audio/makefile
@@ -0,0 +1,10 @@
+PROJECT = de1_audio
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
diff --git a/sim/de1_audio/makefile.sources b/sim/de1_audio/makefile.sources
new file mode 100644
index 0000000..ee901cc
--- /dev/null
+++ b/sim/de1_audio/makefile.sources
@@ -0,0 +1,14 @@
+SYN_SOURCE_FILES = \
+../../src/adcintf.vhd \
+../../src/bclk.vhd \
+../../src/dacintf.vhd \
+../../src/fsgen.vhd \
+../../src/i2c_sub.vhd \
+../../src/i2c.vhd \
+../../src/i2c_write.vhd \
+../../src/mclk.vhd \
+../../src/memory.vhd \
+../../src/ringbuf.vhd \
+../../src/audio.vhd \
+../../src/de1_audio.vhd
+
diff --git a/sim/de1_tone/makefile b/sim/de1_tone/makefile
new file mode 100644
index 0000000..7eb97d3
--- /dev/null
+++ b/sim/de1_tone/makefile
@@ -0,0 +1,9 @@
+PROJECT = de1_tone
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
diff --git a/sim/de1_tone/makefile.sources b/sim/de1_tone/makefile.sources
new file mode 100644
index 0000000..46993a5
--- /dev/null
+++ b/sim/de1_tone/makefile.sources
@@ -0,0 +1,13 @@
+SYN_SOURCE_FILES = \
+../../src/adcintf.vhd \
+../../src/bclk.vhd \
+../../src/dacintf.vhd \
+../../src/fsgen.vhd \
+../../src/i2c_sub.vhd \
+../../src/i2c.vhd \
+../../src/i2c_write.vhd \
+../../src/mclk.vhd \
+../../src/audio.vhd \
+../../src/tone_rtl.vhd \
+../../src/de1_tone.vhd
+
diff --git a/sim/falling_edge_detector/makefile b/sim/falling_edge_detector/makefile
new file mode 100644
index 0000000..48792e4
--- /dev/null
+++ b/sim/falling_edge_detector/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = falling_edge_detector
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/falling_edge_detector/makefile.sources b/sim/falling_edge_detector/makefile.sources
new file mode 100644
index 0000000..03b2cd7
--- /dev/null
+++ b/sim/falling_edge_detector/makefile.sources
@@ -0,0 +1,18 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/e_falling_edge_detector.vhd \
+../../src/a_falling_edge_detector_rtl.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/falling_edge_detector/makefile_qfsm.sources b/sim/falling_edge_detector/makefile_qfsm.sources
new file mode 100644
index 0000000..5b3eeec
--- /dev/null
+++ b/sim/falling_edge_detector/makefile_qfsm.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/falling_edge_detector_qfsm.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/falling_edge_detector/makefile_rtl.sources b/sim/falling_edge_detector/makefile_rtl.sources
new file mode 100644
index 0000000..03b2cd7
--- /dev/null
+++ b/sim/falling_edge_detector/makefile_rtl.sources
@@ -0,0 +1,18 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/e_falling_edge_detector.vhd \
+../../src/a_falling_edge_detector_rtl.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/falling_edge_detector/makefile_structure.sources b/sim/falling_edge_detector/makefile_structure.sources
new file mode 100644
index 0000000..f644c26
--- /dev/null
+++ b/sim/falling_edge_detector/makefile_structure.sources
@@ -0,0 +1,19 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/d_ff_rtl.vhd \
+../../src/e_falling_edge_detector.vhd \
+../../src/a_falling_edge_detector_structure.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/incrementer/makefile b/sim/incrementer/makefile
new file mode 100644
index 0000000..54e7a63
--- /dev/null
+++ b/sim/incrementer/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = incrementer
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/incrementer/makefile.sources b/sim/incrementer/makefile.sources
new file mode 100644
index 0000000..8766f99
--- /dev/null
+++ b/sim/incrementer/makefile.sources
@@ -0,0 +1,23 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/rising_edge_detector_qfsm.vhd \
+../../src/falling_edge_detector_qfsm.vhd \
+../../src/resolver_master_qfsm.vhd \
+../../src/resolver_structure.vhd \
+../../src/synchroniser_rtl.vhd \
+../../src/cntupdn_rtl.vhd \
+../../src/incrementer_structure.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/makefile b/sim/makefile
new file mode 100644
index 0000000..6e7bd40
--- /dev/null
+++ b/sim/makefile
@@ -0,0 +1,87 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author(s) : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure shown at
+## the end of this file.
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Main Targets
+#
+###################################################################
+
+help:
+ @echo '"make" does intentionally nothing. Type:'
+ @echo ' "make mproject" to create a new modelsim project only'
+ @echo ' "make compile" to compile all VHDL sources in batch mode'
+ @echo ' "make modelsim" to start modelsim with graphical user interface'
+ @echo ' "make sim" to start modelsim gui with the top testbench of the project'
+ @echo ' "make clean" to remove all generated files'
+
+mproject : mproject_created
+
+mproject_created : $(SOURCE_FILES)
+ # create modelsim project
+ rm -rf ./modelsim_sources.tcl
+ for source_file in $(SOURCE_FILES); do \
+ echo project addfile $$source_file >> modelsim_sources.tcl; \
+ done
+ vsim -modelsimini ../../scripts/modelsim.ini -c -do "project new [pwd] $(PROJECT); source ./modelsim_sources.tcl; quit -f"
+ touch mproject_created
+
+compile: ./work/_vmake
+
+./work/_vmake: mproject_created
+ vsim -c -do "project open $(PROJECT); project calculateorder; quit -f"
+ grep Error transcript; if [ $$? -eq 0 ] ; then rm -rf work/_vmake; exit 1; fi
+
+
+modelsim: mproject_created
+ vsim -i -do "project open $(PROJECT)" &
+
+sim: ./work/_vmake
+ vsim -i -do "project open $(PROJECT); vsim work.t_$(PROJECT)(tbench); add wave *; run -a;" &
+
+clean:
+ rm -rf *.mpf *.mti *.ini *.wlf wlf* transcript work modelsim_sources.tcl mproject_created
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/mux2to1/makefile b/sim/mux2to1/makefile
new file mode 100644
index 0000000..c655d61
--- /dev/null
+++ b/sim/mux2to1/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = mux2to1
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/mux2to1/makefile.sources b/sim/mux2to1/makefile.sources
new file mode 100644
index 0000000..880fac4
--- /dev/null
+++ b/sim/mux2to1/makefile.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/mux2to1_equation.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/mux2to1/makefile_equation.sources b/sim/mux2to1/makefile_equation.sources
new file mode 100644
index 0000000..880fac4
--- /dev/null
+++ b/sim/mux2to1/makefile_equation.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/mux2to1_equation.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/mux2to1/makefile_rtl.sources b/sim/mux2to1/makefile_rtl.sources
new file mode 100644
index 0000000..7dd9c7d
--- /dev/null
+++ b/sim/mux2to1/makefile_rtl.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/mux2to1_rtl.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/mux2to1/makefile_structure.sources b/sim/mux2to1/makefile_structure.sources
new file mode 100644
index 0000000..f797190
--- /dev/null
+++ b/sim/mux2to1/makefile_structure.sources
@@ -0,0 +1,20 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/and2gate_equation.vhd \
+../../src/or2gate_equation.vhd \
+../../src/invgate_equation.vhd \
+../../src/mux2to1_structure.vhd \
+
+# do not delete this line
+# ----------------------------------------------------------------------------- \ No newline at end of file
diff --git a/sim/mux2to1/makefile_structure_errors.sources b/sim/mux2to1/makefile_structure_errors.sources
new file mode 100644
index 0000000..c412baf
--- /dev/null
+++ b/sim/mux2to1/makefile_structure_errors.sources
@@ -0,0 +1,20 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/and2gate_equation.vhd \
+../../src/or2gate_equation.vhd \
+../../src/invgate_equation.vhd \
+../../src/mux2to1_structure_errors.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/mux2to1/makefile_truthtable.sources b/sim/mux2to1/makefile_truthtable.sources
new file mode 100644
index 0000000..e815b55
--- /dev/null
+++ b/sim/mux2to1/makefile_truthtable.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/mux2to1_truthtable.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/pwm/makefile b/sim/pwm/makefile
new file mode 100644
index 0000000..962c45a
--- /dev/null
+++ b/sim/pwm/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = pwm
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/pwm/makefile.sources b/sim/pwm/makefile.sources
new file mode 100644
index 0000000..5db2028
--- /dev/null
+++ b/sim/pwm/makefile.sources
@@ -0,0 +1,17 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/pwm_rtl.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/pwm_incrementer/makefile b/sim/pwm_incrementer/makefile
new file mode 100644
index 0000000..54e7a63
--- /dev/null
+++ b/sim/pwm_incrementer/makefile
@@ -0,0 +1,67 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = incrementer
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/pwm_incrementer/makefile.sources b/sim/pwm_incrementer/makefile.sources
new file mode 100644
index 0000000..687a731
--- /dev/null
+++ b/sim/pwm_incrementer/makefile.sources
@@ -0,0 +1,24 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/rising_edge_detector_qfsm.vhd \
+../../src/falling_edge_detector_qfsm.vhd \
+../../src/resolver_master_qfsm.vhd \
+../../src/resolver_structure.vhd \
+../../src/synchroniser_rtl.vhd \
+../../src/cntupdn_rtl.vhd \
+../../src/incrementer_structure.vhd \
+../../src/pwm_rtl.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/sim/resolver/makefile b/sim/resolver/makefile
new file mode 100644
index 0000000..ac0a168
--- /dev/null
+++ b/sim/resolver/makefile
@@ -0,0 +1,68 @@
+## ----------------------------------------------------------------------------
+## Script : makefile
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber, Friedrich Beckmann
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: This makefile allows automating design flow with ModelSim,
+## it is based on a design directory structure described in
+## ../makefile
+## ----------------------------------------------------------------------------
+
+###################################################################
+# Project Configuration:
+#
+# assign variable PROJECT with the top level project name
+#
+# Prerequisite:
+# - mandatory design directory structure (see end of file)
+# - assumes file name of testbench t_$(PROJECT).vhd
+###################################################################
+
+PROJECT = resolver
+
+include ./makefile.sources
+
+# Add here the testbench file
+SOURCE_FILES = $(SYN_SOURCE_FILES) \
+../../src/cntupdn_rtl.vhd \
+../../src/t_$(PROJECT).vhd
+
+include ../makefile
+
+## ----------------------------------------------------------------------------
+## Description:
+## ------------
+## assumes the following design directory structure as prerequisite
+##
+## DigitaltechnikPraktikum
+## |
+## +---src
+## | and2gate_equation.vhd
+## | invgate_equation.vhd
+## | mux2to1_structure.vhd
+## | or2gate_equation.vhd
+## | t_mux2to1.vhd
+## | de1_mux2to1_structure.vhd
+## |
+## +---sim
+## | | makefile
+## | |
+## | \---mux2to1
+## | makefile
+## | makefile.sources
+## |
+## +---pnr
+## | | makefile
+## | |
+## | \---de1_mux2to1
+## | de1_mux2to1_pins.tcl
+## | makefile
+## |
+## \---scripts
+## de1_pin_assignments_minimumio.csv
+## de1_pin_assignments_minimumio.tcl
+## modelsim.ini
+## quartus_project_settings.tcl
+## ----------------------------------------------------------------------------
+
diff --git a/sim/resolver/makefile.sources b/sim/resolver/makefile.sources
new file mode 100644
index 0000000..272943f
--- /dev/null
+++ b/sim/resolver/makefile.sources
@@ -0,0 +1,21 @@
+## ----------------------------------------------------------------------------
+## Script : makefile.sources
+## ----------------------------------------------------------------------------
+## Author : Johann Faerber
+## Company : University of Applied Sciences Augsburg
+## ----------------------------------------------------------------------------
+## Description: provide all the VHDL source files in the variable SYN_SOURCE_FILES
+## Attention !!!
+## -------------
+## Do not forget a new line after the final source file !
+## ----------------------------------------------------------------------------
+
+SYN_SOURCE_FILES = \
+../../src/rising_edge_detector_qfsm.vhd \
+../../src/falling_edge_detector_qfsm.vhd \
+../../src/resolver_master_qfsm.vhd \
+../../src/synchroniser_rtl.vhd \
+../../src/resolver_structure.vhd \
+
+# do not delete this line
+# -----------------------------------------------------------------------------
diff --git a/src/a_falling_edge_detector_rtl.vhd b/src/a_falling_edge_detector_rtl.vhd
new file mode 100644
index 0000000..117c3f1
--- /dev/null
+++ b/src/a_falling_edge_detector_rtl.vhd
@@ -0,0 +1,42 @@
+-------------------------------------------------------------------------------
+-- Module : rtl
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: detects a falling edge of input signal x_i
+-- and produces a high-active signal for one clock period at
+-- output fall_o
+-- clk_i __|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|
+-- x_i -----|___________________________________|-----------
+-- fall_o ________|-----|______________________________________
+--
+-- rtl model based on two flip flops with output logic
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ARCHITECTURE rtl OF falling_edge_detector IS
+
+ SIGNAL q0, q1 : std_ulogic; -- D-Type Flip-Flop outputs
+
+BEGIN
+
+ dflipflop_0 : q0 <= '0' WHEN (rst_ni = '0') ELSE
+ x_i WHEN rising_edge(clk_i);
+
+ dflipflop_1 : q1 <= '0' WHEN (rst_ni = '0') ELSE
+ q0 WHEN rising_edge(clk_i);
+
+ output_logic : fall_o <= ; -- fill in the correct equation here
+
+END rtl;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/adcintf.vhd b/src/adcintf.vhd
new file mode 100644
index 0000000..c5ae405
--- /dev/null
+++ b/src/adcintf.vhd
@@ -0,0 +1,98 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- ADC (Analog to Digital Converter) Interface
+-- Shifts in 16 bits and provides the data in parallel
+-- When all 16 bits are shifted in, the valid_o output is set to "1" for one clock cycle
+
+entity adcintf is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ en_i : in std_ulogic;
+ valid_o : out std_ulogic;
+ data_o : out std_ulogic_vector(15 downto 0);
+ start_i : in std_ulogic;
+ ser_dat_i : in std_ulogic);
+end;
+
+architecture rtl of adcintf is
+ type state_t is (idle_s, shift_s, done_s);
+ signal state, new_state : state_t;
+ signal idx : integer range 0 to 15;
+ signal data : unsigned(15 downto 0);
+ signal idx_inc : std_ulogic;
+ signal idx_reset : std_ulogic;
+ signal data_shift : std_ulogic;
+begin
+
+ seq_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ idx <= 0;
+ data <= (others => '0');
+ state <= idle_s;
+ elsif rising_edge(clk_i) then
+ if data_shift = '1' then
+ data <= shift_left(data,1);
+ data(0) <= ser_dat_i;
+ end if;
+ if idx_reset = '1' then
+ idx <= 0;
+ elsif idx_inc = '1' and idx < 15 then
+ idx <= idx + 1;
+ end if;
+ state <= new_state;
+ end if;
+ end process seq_p;
+
+ statem_comb_p : process(state, idx, start_i, en_i)
+ begin
+ idx_inc <= '0';
+ idx_reset <= '0';
+ new_state <= state;
+ data_shift <= '0';
+ valid_o <= '0';
+ case state is
+ when idle_s =>
+ if start_i = '1' and en_i = '1' then
+ new_state <= shift_s;
+ idx_reset <= '1';
+ end if;
+ when shift_s =>
+ if en_i = '1' then
+ idx_inc <= '1';
+ data_shift <= '1';
+ if idx = 15 then
+ new_state <= done_s;
+ end if;
+ end if;
+ when done_s =>
+ valid_o <= '1';
+ new_state <= idle_s;
+ when others =>
+ new_state <= idle_s;
+ end case;
+ end process statem_comb_p;
+
+ data_o <= std_ulogic_vector(data);
+
+end; -- architecture
+
+
diff --git a/src/and2gate_equation.vhd b/src/and2gate_equation.vhd
new file mode 100644
index 0000000..9c7f0f2
--- /dev/null
+++ b/src/and2gate_equation.vhd
@@ -0,0 +1,35 @@
+-------------------------------------------------------------------------------
+-- Module : and2gate
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: 2-input AND Gate
+-- function modelled by logic equation
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY and2gate IS
+ PORT (a_i : IN std_ulogic; -- data input a
+ b_i : IN std_ulogic; -- data input b
+ y_o : OUT std_ulogic -- data output y
+ );
+END and2gate;
+
+ARCHITECTURE equation OF and2gate IS
+
+BEGIN
+
+ y_o <= a_i AND b_i;
+
+END equation;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/audio.vhd b/src/audio.vhd
new file mode 100644
index 0000000..9a6ad17
--- /dev/null
+++ b/src/audio.vhd
@@ -0,0 +1,156 @@
+--Copyright 2021 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity audio is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ i2c_sclk_o : out std_ulogic;
+ i2c_dat_i : in std_ulogic;
+ i2c_dat_o : out std_ulogic;
+ aud_adclrck_o : out std_ulogic;
+ aud_adcdat_i : in std_ulogic;
+ aud_daclrck_o : out std_ulogic;
+ aud_dacdat_o : out std_ulogic;
+ aud_xck_o : out std_ulogic;
+ aud_bclk_o : out std_ulogic;
+ adc_data_o : out std_ulogic_vector(15 downto 0);
+ adc_valid_o : out std_ulogic;
+ dac_data_i : in std_ulogic_vector(15 downto 0);
+ dac_strobe_o : out std_ulogic);
+end;
+
+architecture struct of audio is
+
+ component i2c_sub is
+ port (
+ clk_i: in std_ulogic;
+ reset_ni: in std_ulogic;
+ i2c_clk_o: out std_ulogic;
+ i2c_dat_o: out std_ulogic;
+ i2c_dat_i: in std_ulogic
+ );
+ end component;
+
+ component adcintf is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ en_i : in std_ulogic;
+ valid_o : out std_ulogic;
+ data_o : out std_ulogic_vector(15 downto 0);
+ start_i : in std_ulogic;
+ ser_dat_i : in std_ulogic);
+ end component;
+
+ component dacintf is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ load_i : in std_ulogic;
+ data_i : in std_ulogic_vector(15 downto 0);
+ en_i : in std_ulogic;
+ ser_dat_o : out std_ulogic);
+ end component;
+
+ component bclk is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ bclk_o : out std_ulogic;
+ bclk_falling_edge_en_o : out std_ulogic);
+ end component;
+
+ component fsgen is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ bclk_falling_edge_en_i : in std_ulogic;
+ fs_o : out std_ulogic);
+ end component;
+
+ component mclk is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ mclk_o : out std_ulogic);
+ end component;
+
+ signal framesync : std_ulogic;
+ signal bclk_falling_edge_en : std_ulogic;
+
+ signal adc_valid : std_ulogic;
+ signal dac_data, adc_data : std_ulogic_vector(15 downto 0);
+
+begin
+
+ i2c_sub_i0 : i2c_sub
+ port map (
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ i2c_clk_o => i2c_sclk_o,
+ i2c_dat_o => i2c_dat_o,
+ i2c_dat_i => i2c_dat_i);
+
+ mclk_i0 : mclk
+ port map(
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ mclk_o => aud_xck_o);
+
+ bclk_i0 : bclk
+ port map (
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ bclk_o => aud_bclk_o,
+ bclk_falling_edge_en_o => bclk_falling_edge_en);
+
+ fsgen_i0 : fsgen
+ port map (
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ bclk_falling_edge_en_i => bclk_falling_edge_en,
+ fs_o => framesync);
+
+ dacintf_i0 : dacintf
+ port map (
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ load_i => framesync,
+ data_i => dac_data_i,
+ en_i => bclk_falling_edge_en,
+ ser_dat_o => aud_dacdat_o);
+
+ adcintf_i0 : adcintf
+ port map (
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ valid_o => adc_valid_o,
+ data_o => adc_data_o,
+ start_i => framesync,
+ en_i => bclk_falling_edge_en,
+ ser_dat_i => aud_adcdat_i);
+
+ aud_daclrck_o <= framesync;
+ aud_adclrck_o <= framesync;
+
+ dac_strobe_o <= framesync and bclk_falling_edge_en;
+
+end; -- architecture
+
+
diff --git a/src/bclk.vhd b/src/bclk.vhd
new file mode 100644
index 0000000..4d72539
--- /dev/null
+++ b/src/bclk.vhd
@@ -0,0 +1,79 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- Bitclock generator
+
+entity bclk is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ bclk_o : out std_ulogic;
+ bclk_falling_edge_en_o : out std_ulogic);
+end;
+
+architecture rtl of bclk is
+ constant max_count : integer := 7;
+ signal clk_counter : integer range 0 to max_count;
+ signal bclk_rising_edge_en : std_ulogic;
+ signal bclk_falling_edge_en : std_ulogic;
+begin
+
+ bclk_cnt_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ clk_counter <= 0;
+ elsif rising_edge(clk_i) then
+ if clk_counter = max_count then
+ clk_counter <= 0;
+ else
+ clk_counter <= clk_counter + 1;
+ end if;
+ end if;
+ end process bclk_cnt_p;
+
+ edge_comb_p : process(clk_counter)
+ begin
+ bclk_rising_edge_en <= '0';
+ bclk_falling_edge_en <= '0';
+ if clk_counter = max_count then
+ bclk_rising_edge_en <= '1';
+ end if;
+ if clk_counter = max_count / 2 then
+ bclk_falling_edge_en <= '1';
+ end if;
+ end process edge_comb_p;
+
+ bclk_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ bclk_o <= '0';
+ elsif rising_edge(clk_i) then
+ if bclk_rising_edge_en = '1' then
+ bclk_o <= '1';
+ elsif bclk_falling_edge_en = '1' then
+ bclk_o <= '0';
+ end if;
+ end if;
+ end process bclk_p;
+
+ bclk_falling_edge_en_o <= bclk_falling_edge_en;
+
+end; -- architecture
+
+
diff --git a/src/binto7segment_truthtable.vhd b/src/binto7segment_truthtable.vhd
new file mode 100644
index 0000000..e0be505
--- /dev/null
+++ b/src/binto7segment_truthtable.vhd
@@ -0,0 +1,63 @@
+-------------------------------------------------------------------------------
+-- Module : binto7segment
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: binary-to-7-segment decoder
+-- function modelled as a truth table
+-- using a selected signal assignment
+-- segments get illuminated by a low-active signal
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY binto7segment IS
+ PORT (bin_i : IN std_ulogic_vector(3 DOWNTO 0);
+ segments_o : OUT std_ulogic_vector(6 DOWNTO 0)
+ );
+END binto7segment;
+
+ARCHITECTURE truthtable OF binto7segment IS
+
+ -- seven-segment positions
+ --
+ -- segment positions input vector index segment name
+ -- a 0 => a
+ -- --- 1 => b
+ -- f | | b 2 => c
+ -- --- <- g 3 => d
+ -- e | | c 4 => e
+ -- --- 5 => f
+ -- d 6 => g
+
+BEGIN
+
+ decoder : WITH bin_i SELECT
+ segments_o <=
+ -- outputs: | inputs:
+ --------------------------------------------
+ -- index | number displayed
+ -- 6543210 |
+ --------------------------------------------
+ "1000000" WHEN "0000", -- 0
+ "1111001" WHEN "0001", -- 1
+ "0100100" WHEN "0010", -- 2
+ "0110000" WHEN "0011", -- 3
+ "0001001" WHEN "0100", -- 4
+ "0010010" WHEN "0101", -- 5
+ "0000010" WHEN "0110", -- 6
+ "0111000" WHEN "0111", -- 7
+ "0000000" WHEN "1000", -- 8
+ "0010000" WHEN "1001", -- 9
+ "0000110" WHEN OTHERS; -- displays Symbol 'E' for ERROR
+
+END truthtable;
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/cntdn_rtl.vhd b/src/cntdn_rtl.vhd
new file mode 100644
index 0000000..7ce14ea
--- /dev/null
+++ b/src/cntdn_rtl.vhd
@@ -0,0 +1,47 @@
+-------------------------------------------------------------------------------
+-- Module : cntdn
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: Down-Counter
+-- including a low-active asynchronous reset input rst_ni
+-- a high-active enable input en_pi
+-- and a terminal count output: tc = 1 when count = 0
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+
+ENTITY cntdn IS
+ PORT (clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector(3 DOWNTO 0);
+ tc_o : OUT std_ulogic
+ );
+END cntdn;
+
+ARCHITECTURE rtl OF cntdn IS
+
+
+BEGIN
+
+ incrementer :
+
+ state_register :
+
+ counter_output :
+
+ terminal_output :
+
+END rtl;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/cntdnmodm_rtl.vhd b/src/cntdnmodm_rtl.vhd
new file mode 100644
index 0000000..51809a4
--- /dev/null
+++ b/src/cntdnmodm_rtl.vhd
@@ -0,0 +1,54 @@
+-------------------------------------------------------------------------------
+-- Module : cntdnmodm
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: Modulo-m n-Bit Down-Counter
+-- including a low-active asynchronous reset input rst_ni
+-- and a high-active enable input en_pi
+-- additionally, a high_active output signal tc_o is produced,
+-- when the counter reaches it's minimum value
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+
+ENTITY cntdnmodm IS
+ GENERIC (
+ n : natural := 4; -- counter width
+ m : natural := 10); -- modulo value
+ PORT (clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector(n-1 DOWNTO 0);
+ tc_o : OUT std_ulogic
+ );
+END cntdnmodm;
+
+ARCHITECTURE rtl OF cntdnmodm IS
+
+ SIGNAL next_state, current_state : unsigned(n-1 DOWNTO 0);
+
+BEGIN
+
+ -- includes decrementer and modulo logic
+ next_state_logic : next_state <= to_unsigned(m-1, n) WHEN current_state = 0 ELSE
+ current_state - 1;
+
+ state_register :
+
+ counter_output :
+
+ terminal_count :
+
+END rtl;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/cntupdn_rtl.vhd b/src/cntupdn_rtl.vhd
new file mode 100644
index 0000000..5f022e3
--- /dev/null
+++ b/src/cntupdn_rtl.vhd
@@ -0,0 +1,47 @@
+-------------------------------------------------------------------------------
+-- Module : cntupdn
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: Up/Down-Counter
+-- including a low-active asynchronous reset input rst_ni
+-- a high-active enable input en_pi
+-- mode_i = 0 -> count down
+-- mode_i = 1 -> count up
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+
+ENTITY cntupdn IS
+ PORT (clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ mode_i : IN std_ulogic; -- mode_i = 0 -> count down
+ -- mode_i = 1 -> count up
+ count_o : OUT std_ulogic_vector(3 DOWNTO 0)
+ );
+END cntupdn;
+
+ARCHITECTURE rtl OF cntupdn IS
+
+
+BEGIN
+
+ de_incrementer :
+
+ state_register :
+
+ counter_output :
+
+END rtl;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/cntupen_rtl.vhd b/src/cntupen_rtl.vhd
new file mode 100644
index 0000000..2c68a73
--- /dev/null
+++ b/src/cntupen_rtl.vhd
@@ -0,0 +1,52 @@
+-------------------------------------------------------------------------------
+-- Module : cntupen
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: Up-Counter
+-- including a low-active asynchronous reset input rst_ni
+-- and a high-active enable input en_pi
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+USE IEEE.numeric_std.ALL;
+
+ENTITY cntupen IS
+ PORT (clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector(3 DOWNTO 0)
+ );
+END cntupen;
+
+ARCHITECTURE rtl OF cntupen IS
+
+ -- datatype unsigned is defined in package numeric_std
+ SIGNAL next_state, current_state : unsigned(3 DOWNTO 0);
+
+BEGIN
+
+ -- package numeric_std overloads operator '+'
+ -- for arguments of different types, here: unsigned and integer
+ incrementer : next_state <= current_state + 1;
+
+
+ -- synthesisable construct of a d-type register with synchronrous enable
+ state_register : current_state <= "0000" WHEN rst_ni = '0' ELSE
+ next_state WHEN rising_edge(clk_i) AND (en_pi = '1');
+
+
+ -- type conversion from unsignd to std_ulogic_vector necessary
+ counter_output : count_o <= std_ulogic_vector(current_state);
+
+END rtl;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/d_ff_rtl.vhd b/src/d_ff_rtl.vhd
new file mode 100644
index 0000000..af06a3e
--- /dev/null
+++ b/src/d_ff_rtl.vhd
@@ -0,0 +1,39 @@
+-------------------------------------------------------------------------------
+-- Module : d_ff
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: D-Type Flip-Flop
+-- including a low-active asynchronous reset input rst_ni
+-- and a high-active enable input en_pi
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY d_ff IS
+ PORT (
+ clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ d_i : IN std_ulogic;
+ q_o : OUT std_ulogic
+ );
+END d_ff;
+
+ARCHITECTURE rtl OF d_ff IS
+
+BEGIN
+
+ dflipflop_p : q_o <= '0' WHEN (rst_ni = '0') ELSE
+ d_i WHEN rising_edge(clk_i);
+
+END rtl;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/dacintf.vhd b/src/dacintf.vhd
new file mode 100644
index 0000000..87c48fa
--- /dev/null
+++ b/src/dacintf.vhd
@@ -0,0 +1,60 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- DAC (Digital to Analog Converter) Interface
+-- Loads a word in parallel and shifts it out as serial bit stream
+-- The data needs to be shifted out twice. This is required as
+-- the audio interface needs stereo data.
+
+entity dacintf is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ load_i : in std_ulogic;
+ data_i : in std_ulogic_vector(15 downto 0);
+ en_i : in std_ulogic;
+ ser_dat_o : out std_ulogic);
+end;
+
+architecture rtl of dacintf is
+ signal idx : integer range 0 to 31;
+ signal data : unsigned(15 downto 0);
+begin
+
+ load_and_shift_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ idx <= 0;
+ data <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if load_i = '1' and en_i = '1' then
+ data <= unsigned(data_i);
+ idx <= 0;
+ elsif en_i = '1' and idx < 31 then
+ data <= rotate_left(data,1);
+ idx <= idx + 1;
+ end if;
+ end if;
+ end process load_and_shift_p;
+
+ ser_dat_o <= data(15);
+
+end; -- architecture
+
+
diff --git a/src/de1_adc_rtl.vhd b/src/de1_adc_rtl.vhd
new file mode 100644
index 0000000..d82c892
--- /dev/null
+++ b/src/de1_adc_rtl.vhd
@@ -0,0 +1,111 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- PLL for 100 MHz speed
+library altera_mf;
+use altera_mf.all;
+
+entity de1_adc is
+ port ( CLOCK_50 : in std_ulogic;
+ SW : in std_ulogic_vector(9 downto 0);
+ KEY0 : in std_ulogic;
+ DAC_MODE : out std_ulogic; --1=dual port, 0=interleaved
+ DAC_WRT_A : out std_ulogic;
+ DAC_WRT_B : out std_ulogic;
+ DAC_CLK_A : out std_ulogic; -- PLL_OUT_DAC0 in User Manual
+ DAC_CLK_B : out std_ulogic; -- PLL_OUT_DAC1 in User Manual
+ DAC_DA : out std_ulogic_vector(13 downto 0);
+ DAC_DB : out std_ulogic_vector(13 downto 0);
+ ADC_CLK_A : out std_ulogic;
+ ADC_CLK_B : out std_ulogic;
+ POWER_ON : out std_ulogic;
+ ADC_OEB_A : out std_ulogic;
+ ADC_OEB_B : out std_ulogic;
+ ADC_DA : in std_ulogic_vector(13 downto 0);
+ ADC_DB : in std_ulogic_vector(13 downto 0);
+ ADC_OTR_A : in std_ulogic;
+ ADC_OTR_B : in std_ulogic;
+ LEDR : out std_ulogic_vector(9 downto 0)); -- red LEDs
+end entity;
+
+architecture rtl of de1_adc is
+
+ -- Altera PLL
+ component altpll
+ generic (
+ clk0_divide_by : natural;
+ clk0_duty_cycle : natural;
+ clk0_multiply_by : natural;
+-- clk0_phase_shift : STRING;
+-- compensate_clock : STRING;
+ inclk0_input_frequency : natural;
+-- intended_device_family : STRING;
+-- lpm_hint : STRING;
+-- lpm_type : STRING;
+ operation_mode : string;
+ port_inclk0 : string;
+ port_clk0 : string
+ );
+ port (
+ clk : out std_logic_vector (5 downto 0);
+ inclk : in std_logic_vector (1 downto 0)
+ );
+ end component;
+
+ signal pll_inclk : std_logic_vector(1 downto 0);
+ signal pll_outclk : std_logic_vector(5 downto 0);
+
+ signal clk,rst_n : std_ulogic;
+ signal dac_a_dat, dac_b_dat, adc_a_dat, adc_b_dat : std_ulogic_vector(13 downto 0);
+
+begin
+
+ pll_i0 : altpll
+ generic map (
+ clk0_divide_by => 10,
+ clk0_duty_cycle => 50,
+ clk0_multiply_by => 13,
+-- clk0_phase_shift => "0",
+-- compensate_clock => "CLK0",
+ inclk0_input_frequency => 20000,
+ operation_mode => "NORMAL",
+ port_inclk0 => "PORT_USED",
+ port_clk0 => "PORT_USED"
+ )
+ port map (
+ inclk => pll_inclk,
+ clk => pll_outclk
+ );
+
+ pll_inclk(0) <= CLOCK_50;
+ pll_inclk(1) <= '0';
+ clk <= pll_outclk(0);
+ --clk <= CLOCK_50;
+
+ rst_n <= KEY0;
+ LEDR <= "00000000" & ADC_OTR_A & ADC_OTR_B when rising_edge(clk);
+
+ DAC_MODE <= '1'; --dual port
+ DAC_CLK_A <= clk;
+ DAC_CLK_B <= clk;
+ DAC_WRT_A <= clk;
+ DAC_WRT_B <= clk;
+
+ dac_a_dat <= (others => '0') when rst_n = '0' else adc_a_dat when falling_edge(clk);
+ dac_b_dat <= (others => '0') when rst_n = '0' else adc_b_dat when falling_edge(clk);
+
+ DAC_DA <= dac_a_dat;
+ DAC_DB <= dac_b_dat;
+
+ -- ADC Section
+ ADC_CLK_A <= clk;
+ ADC_CLK_B <= clk;
+ ADC_OEB_A <= '0';
+ ADC_OEB_B <= '0';
+ POWER_ON <= '1';
+
+ adc_a_dat <= (others => '0') when rst_n = '0' else ADC_DA when rising_edge(clk);
+ adc_b_dat <= (others => '0') when rst_n = '0' else ADC_DB when rising_edge(clk);
+
+end architecture rtl;
diff --git a/src/de1_add1_structure.vhd b/src/de1_add1_structure.vhd
new file mode 100644
index 0000000..5c12d59
--- /dev/null
+++ b/src/de1_add1_structure.vhd
@@ -0,0 +1,51 @@
+-------------------------------------------------------------------------------
+-- Module : de1_add1
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: test the module add1 on a DE1 prototype board
+-- connecting device under test (DUT) add1
+-- to input/output signals of the DE1 prototype board
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY de1_add1 IS
+ PORT (
+ SW : IN std_ulogic_vector(2 DOWNTO 0); -- Toggle Switch[2:0]
+ LEDR : OUT std_ulogic_vector(1 DOWNTO 0) -- LED Red[1:0]
+ );
+END de1_add1;
+
+ARCHITECTURE structure OF de1_add1 IS
+
+ COMPONENT add1
+ PORT (
+ a_i : IN std_ulogic;
+ b_i : IN std_ulogic;
+ ci_i : IN std_ulogic;
+ sum_o : OUT std_ulogic;
+ co_o : OUT std_ulogic);
+ END COMPONENT;
+
+BEGIN
+
+ -- connecting device under test with peripheral elements
+ DUT : add1
+ PORT MAP (
+ a_i => SW(0),
+ b_i => SW(1),
+ ci_i => SW(2),
+ sum_o => LEDR(0),
+ co_o => LEDR(1)
+ );
+
+END structure;
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/de1_add4_structure.vhd b/src/de1_add4_structure.vhd
new file mode 100644
index 0000000..bbd75ab
--- /dev/null
+++ b/src/de1_add4_structure.vhd
@@ -0,0 +1,103 @@
+-------------------------------------------------------------------------------
+-- Module : de1_add4
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: test the module add4 on a DE1 prototype board
+-- connecting device under test (DUT) add4
+-- to input/output signals of the DE1 prototype board
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY de1_add4 IS
+ PORT (
+ SW : IN std_ulogic_vector(8 DOWNTO 0); -- Toggle Switch[8:0]
+ LEDR : OUT std_ulogic_vector(8 DOWNTO 0); -- LED Red[8:0]
+ LEDG : OUT std_ulogic_vector(4 DOWNTO 0); -- LED Green[3:0]
+ HEX0 : OUT std_ulogic_vector(6 DOWNTO 0); -- Seven Segment Digit 0
+ HEX1 : OUT std_ulogic_vector(6 DOWNTO 0); -- Seven Segment Digit 1
+ HEX2 : OUT std_ulogic_vector(6 DOWNTO 0); -- Seven Segment Digit 2
+
+ -- Ports for measurement of longest path through module
+ CLOCK_50 : IN std_ulogic; -- 50 MHz Clock
+ GPO_1 : OUT std_ulogic_vector(1 DOWNTO 0) -- Output Connector GPIO_1
+ -- GPO_1[0] = CLOCK_50
+ -- GPO_1[1] = co_o
+
+ );
+END de1_add4;
+
+ARCHITECTURE structure OF de1_add4 IS
+
+ COMPONENT binto7segment
+ PORT (
+ bin_i : IN std_ulogic_vector(3 DOWNTO 0);
+ segments_o : OUT std_ulogic_vector(6 DOWNTO 0));
+ END COMPONENT;
+
+ COMPONENT add4
+ PORT (
+ a_i : IN std_ulogic_vector(3 DOWNTO 0);
+ b_i : IN std_ulogic_vector(3 DOWNTO 0);
+ ci_i : IN std_ulogic;
+ sum_o : OUT std_ulogic_vector(3 DOWNTO 0);
+ co_o : OUT std_ulogic);
+ END COMPONENT;
+
+ SIGNAL a : std_ulogic_vector(3 DOWNTO 0);
+ SIGNAL b : std_ulogic_vector(3 DOWNTO 0);
+ SIGNAL ci : std_ulogic;
+ SIGNAL sum : std_ulogic_vector(3 DOWNTO 0);
+ SIGNAL co : std_ulogic;
+
+BEGIN
+
+ -- Modifications for measurement of longest path through module
+ GPO_1(0) <= CLOCK_50;
+ GPO_1(1) <= co;
+ -- use the following line for Tpd measurement
+ -- ci <= CLOCK_50; -- tpd of add4 module only
+
+ -- connecting switches to operands
+ ci <= SW(0); -- use this line, if connected by SW(0)
+ a <= SW(4 DOWNTO 1);
+ b <= SW(8 DOWNTO 5);
+
+ -- connecting operands to LEDs
+ LEDR(0) <= SW(0);
+ LEDR(4 DOWNTO 1) <= SW(4 DOWNTO 1);
+ LEDR(8 DOWNTO 5) <= SW(8 DOWNTO 5);
+
+ -- connecting device under test with peripheral elements
+ DUT : add4
+ PORT MAP (
+ a_i => a,
+ b_i => b,
+ ci_i => ci,
+ sum_o => sum,
+ co_o => co);
+
+ -- connecting results to LEDs and HEX displays
+ LEDG(3 DOWNTO 0) <= sum;
+ LEDG(4) <= co;
+
+ operand_a : binto7segment
+ PORT MAP (
+ bin_i => a,
+ segments_o => HEX0);
+
+ operand_b : binto7segment
+ PORT MAP ( -- fill in the missing components here ...
+
+
+
+END structure;
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/de1_audio.vhd b/src/de1_audio.vhd
new file mode 100644
index 0000000..f01a9a7
--- /dev/null
+++ b/src/de1_audio.vhd
@@ -0,0 +1,118 @@
+--Copyright 2013,2021 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library altera;
+use altera.altera_primitives_components.all;
+
+entity de1_audio is
+ port (
+ CLOCK_50: in std_ulogic;
+ KEY0: in std_ulogic;
+ I2C_SCLK: out std_ulogic;
+ I2C_SDAT: inout std_logic;
+ AUD_ADCLRCK: out std_ulogic;
+ AUD_ADCDAT: in std_ulogic;
+ AUD_DACLRCK: out std_ulogic;
+ AUD_DACDAT: out std_ulogic;
+ AUD_XCK: out std_ulogic;
+ AUD_BCLK: out std_ulogic;
+ LEDR: out std_ulogic_vector(9 downto 0));
+end;
+
+architecture struct of de1_audio is
+
+ component audio is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ i2c_sclk_o : out std_ulogic;
+ i2c_dat_i : in std_ulogic;
+ i2c_dat_o : out std_ulogic;
+ aud_adclrck_o : out std_ulogic;
+ aud_adcdat_i : in std_ulogic;
+ aud_daclrck_o : out std_ulogic;
+ aud_dacdat_o : out std_ulogic;
+ aud_xck_o : out std_ulogic;
+ aud_bclk_o : out std_ulogic;
+ adc_data_o : out std_ulogic_vector(15 downto 0);
+ adc_valid_o : out std_ulogic;
+ dac_data_i : in std_ulogic_vector(15 downto 0);
+ dac_strobe_o : out std_ulogic);
+ end component;
+
+ component ringbuf is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ en_i : in std_ulogic;
+ data_i : in std_ulogic_vector(15 downto 0);
+ data_o : out std_ulogic_vector(15 downto 0));
+ end component;
+
+ signal clk, reset_n : std_ulogic;
+
+ signal i2c_dat_o : std_ulogic;
+ signal i2c_dat_i : std_ulogic;
+
+
+ signal adc_valid : std_ulogic;
+ signal dac_strobe : std_ulogic;
+ signal dac_data, adc_data : std_ulogic_vector(15 downto 0);
+
+begin
+
+ reset_n <= KEY0;
+ clk <= CLOCK_50;
+
+ audio_i0 : audio
+ port map (
+ clk_i => clk,
+ reset_ni => reset_n,
+ i2c_sclk_o => I2C_SCLK,
+ i2c_dat_i => i2c_dat_i,
+ i2c_dat_o => i2c_dat_o,
+ aud_adclrck_o => AUD_ADCLRCK,
+ aud_adcdat_i => AUD_ADCDAT,
+ aud_daclrck_o => AUD_DACLRCK,
+ aud_dacdat_o => AUD_DACDAT,
+ aud_xck_o => AUD_XCK,
+ aud_bclk_o => AUD_BCLK,
+ adc_data_o => adc_data,
+ adc_valid_o => adc_valid,
+ dac_data_i => dac_data,
+ dac_strobe_o => dac_strobe);
+
+ ringbuf_i0 : ringbuf
+ port map (
+ clk_i => clk,
+ reset_ni => reset_n,
+ en_i => adc_valid,
+ data_i => adc_data,
+ data_o => dac_data);
+
+ LEDR(9 downto 0) <= std_ulogic_vector(abs(signed(dac_data(15 downto 6))));
+
+ -- i2c has an open-drain ouput
+ i2c_dat_i <= I2C_SDAT;
+ i2c_data_buffer_i : OPNDRN
+ port map (a_in => i2c_dat_o, a_out => I2C_SDAT);
+
+end; -- architecture
+
+
diff --git a/src/de1_binto7segment_structure.vhd b/src/de1_binto7segment_structure.vhd
new file mode 100644
index 0000000..b4fbd79
--- /dev/null
+++ b/src/de1_binto7segment_structure.vhd
@@ -0,0 +1,48 @@
+-------------------------------------------------------------------------------
+-- Module : de1_binto7segment
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: test the module binto7segment on a DE1 prototype board
+-- connecting device under test (DUT) binto7segment
+-- to input/output signals of the DE1 prototype board
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY de1_binto7segment IS
+ PORT (
+ SW : IN std_ulogic_vector(3 DOWNTO 0); -- Toggle Switch[3:0]
+ LEDR : OUT std_ulogic_vector(3 DOWNTO 0); -- LED Red[3:0]
+ HEX0 : OUT std_ulogic_vector(6 DOWNTO 0) -- Seven Segment Digit 0
+ );
+END de1_binto7segment;
+
+ARCHITECTURE structure OF de1_binto7segment IS
+
+ COMPONENT binto7segment
+ PORT (
+ bin_i : IN std_ulogic_vector(3 DOWNTO 0);
+ segments_o : OUT std_ulogic_vector(6 DOWNTO 0));
+ END COMPONENT;
+
+BEGIN
+
+ -- connecting device under test with peripheral elements
+ DUT : binto7segment
+ PORT MAP (
+ bin_i => SW,
+ segments_o => HEX0);
+
+ -- connect switches to red LEDs
+ LEDR <= SW;
+
+END structure;
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/de1_cntdn_structure.vhd b/src/de1_cntdn_structure.vhd
new file mode 100644
index 0000000..d420996
--- /dev/null
+++ b/src/de1_cntdn_structure.vhd
@@ -0,0 +1,78 @@
+-------------------------------------------------------------------------------
+-- Module : de1_cntdn
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: test the module cntdn on a DE1 prototype board
+-- connecting device under test (DUT) cntdn
+-- to input/output signals of the DE1 prototype board
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY de1_cntdn IS
+ PORT (
+ CLOCK_50 : IN std_ulogic; -- 50 MHz Clock
+ KEY : IN std_ulogic_vector(1 DOWNTO 0); -- KEY[1:0]
+ -- KEY[0] = rst_ni
+ -- KEY[1] = en_pi
+ GPO_1 : OUT std_ulogic_vector(5 DOWNTO 0) -- Output Connector GPIO_1
+ -- GPO_1[3:0] = count_o
+ -- GPO_1[4] = tc_o
+ -- GPO_1[5] = clk_i
+ );
+END de1_cntdn;
+
+ARCHITECTURE structure OF de1_cntdn IS
+
+ COMPONENT cntdn
+ PORT (
+ clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector(3 DOWNTO 0);
+ tc_o : OUT std_ulogic);
+ END COMPONENT;
+
+ SIGNAL clk_i : std_ulogic;
+ SIGNAL rst_ni : std_ulogic;
+ SIGNAL en_pi : std_ulogic;
+ SIGNAL count_o : std_ulogic_vector(3 DOWNTO 0);
+ SIGNAL tc_o : std_ulogic;
+
+BEGIN
+
+ -- connecting clock generator master clock of synchronous system
+ clk_i <= CLOCK_50;
+ GPO_1(5) <= clk_i; -- to measure clk signal
+
+ -- connecting asynchronous system reset to digital system
+ rst_ni <= KEY(0);
+
+ -- count enable input is high-active, KEY(1) ist low-aktive, therefore ...
+ -- ... if KEY1 is released, high signal is produced
+ en_pi <= KEY(1);
+
+
+ -- connecting device under test with peripheral elements
+ DUT : ENTITY work.cntdn(rtl)
+ PORT MAP (
+ clk_i => clk_i,
+ rst_ni => rst_ni,
+ en_pi => en_pi,
+ count_o => count_o,
+ tc_o => tc_o);
+
+ -- connecting count value to GPIO1
+ GPO_1(3 DOWNTO 0) <= count_o;
+ GPO_1(4) <= tc_o;
+
+END structure;
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/de1_cntdnmodm_structure.vhd b/src/de1_cntdnmodm_structure.vhd
new file mode 100644
index 0000000..d76c5f3
--- /dev/null
+++ b/src/de1_cntdnmodm_structure.vhd
@@ -0,0 +1,111 @@
+-------------------------------------------------------------------------------
+-- Module : de1_cntdnmodm
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: test the module cntdnmodm on a DE1 prototype board
+-- connecting device under test (DUT) cntdnmodm
+-- to input/output signals of the DE1 prototype board
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY de1_cntdnmodm IS
+ PORT (
+ CLOCK_50 : IN std_ulogic; -- 50 MHz Clock
+ KEY : IN std_ulogic_vector(1 DOWNTO 0); -- KEY[1:0]
+ -- KEY[0] = rst_ni
+ -- KEY[1] = en_pi
+ GPO_1 : OUT std_ulogic_vector(7 DOWNTO 0) -- Output Connector GPIO_1
+ -- GPO_1[3:0] = count_o
+ -- GPO_1[4] = tc_o
+ -- GPO_1[5] = clk_i
+ -- GPO_1[6] = tc_mod6_o
+ -- GPO_1[7] = tc_100hz_o
+ );
+END de1_cntdnmodm;
+
+ARCHITECTURE structure OF de1_cntdnmodm IS
+
+ COMPONENT cntdn
+ PORT (
+ clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector(3 DOWNTO 0);
+ tc_o : OUT std_ulogic);
+ END COMPONENT;
+
+ SIGNAL clk_i : std_ulogic;
+ SIGNAL rst_ni : std_ulogic;
+ SIGNAL en_pi : std_ulogic;
+ SIGNAL count_o : std_ulogic_vector(3 DOWNTO 0);
+ SIGNAL tc_o : std_ulogic;
+
+ SIGNAL tc_mod6_o : std_ulogic;
+ SIGNAL tc_100hz_o : std_ulogic;
+
+BEGIN
+
+ -- connecting clock generator master clock of synchronous system
+ clk_i <= CLOCK_50;
+ GPO_1(5) <= clk_i; -- to measure clk signal
+
+ -- connecting asynchronous system reset to digital system
+ rst_ni <= KEY(0);
+
+ -- count enable input is high-active, KEY(1) ist low-aktive, therefore ...
+ -- ... if KEY1 is released, high signal is produced
+ en_pi <= KEY(1);
+
+
+ -- connecting device under test with peripheral elements
+ DUT : ENTITY work.cntdnmodm
+ GENERIC MAP (
+ n => 4,
+ m => 10)
+ PORT MAP (
+ clk_i => clk_i,
+ rst_ni => rst_ni,
+ en_pi => en_pi,
+ count_o => count_o,
+ tc_o => tc_o);
+
+ -- 3-bit modulo-6 down counter
+ mod6_count : ENTITY work.cntdnmodm
+ GENERIC MAP (
+ n => 3,
+ m => 6)
+ PORT MAP (
+ clk_i => clk_i,
+ rst_ni => rst_ni,
+ en_pi => en_pi,
+ count_o => OPEN,
+ tc_o => tc_mod6_o);
+
+ -- instantiate and parameterise the generics to
+ -- create a frequency of 100 Hz at its output signal tc_100hz_o
+ -- declare the necessary signals count_modxxx_o and tc_100hz_o
+ -----------------------------------------------------------------------------
+-- prescaler : cntdnmodm
+-- GENERIC MAP (
+-- n =>
+-- m => )
+-- PORT MAP (
+ -----------------------------------------------------------------------------
+
+ -- connecting count value to GPIO1
+ GPO_1(3 DOWNTO 0) <= count_o;
+ GPO_1(4) <= tc_o;
+ GPO_1(6) <= tc_mod6_o;
+ GPO_1(7) <= tc_100hz_o;
+
+END structure;
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/de1_dac_rtl.vhd b/src/de1_dac_rtl.vhd
new file mode 100644
index 0000000..c1c90bf
--- /dev/null
+++ b/src/de1_dac_rtl.vhd
@@ -0,0 +1,109 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- PLL for 100 MHz speed
+library altera_mf;
+use altera_mf.all;
+
+entity de1_dac is
+ port ( CLOCK_50 : in std_ulogic;
+ SW : in std_ulogic_vector(9 downto 0);
+ KEY0 : in std_ulogic;
+ DAC_MODE : out std_ulogic; --1=dual port, 0=interleaved
+ DAC_WRT_A : out std_ulogic;
+ DAC_WRT_B : out std_ulogic;
+ DAC_CLK_A : out std_ulogic; -- PLL_OUT_DAC0 in User Manual
+ DAC_CLK_B : out std_ulogic; -- PLL_OUT_DAC1 in User Manual
+ DAC_DA : out std_ulogic_vector(13 downto 0);
+ DAC_DB : out std_ulogic_vector(13 downto 0);
+ ADC_CLK_A : out std_ulogic;
+ ADC_CLK_B : out std_ulogic;
+ POWER_ON : out std_ulogic;
+ ADC_OEB_A : out std_ulogic;
+ ADC_OEB_B : out std_ulogic;
+ LEDR : out std_ulogic_vector(9 downto 0)); -- red LEDs
+end entity;
+
+architecture rtl of de1_dac is
+
+ -- Altera PLL
+ component altpll
+ generic (
+ clk0_divide_by : natural;
+ clk0_duty_cycle : natural;
+ clk0_multiply_by : natural;
+-- clk0_phase_shift : STRING;
+-- compensate_clock : STRING;
+ inclk0_input_frequency : natural;
+-- intended_device_family : STRING;
+-- lpm_hint : STRING;
+-- lpm_type : STRING;
+ operation_mode : string;
+ port_inclk0 : string;
+ port_clk0 : string
+ );
+ port (
+ clk : out std_logic_vector (5 downto 0);
+ inclk : in std_logic_vector (1 downto 0)
+ );
+ end component;
+
+ signal pll_inclk : std_logic_vector(1 downto 0);
+ signal pll_outclk : std_logic_vector(5 downto 0);
+
+ signal clk,rst_n : std_ulogic;
+ signal cnt : unsigned(13 downto 0);
+ signal phase_inc : unsigned(9 downto 0);
+ signal dac_a_reg, dac_a_next, dac_b_reg : unsigned(13 downto 0);
+
+begin
+
+ pll_i0 : altpll
+ generic map (
+ clk0_divide_by => 1,
+ clk0_duty_cycle => 50,
+ clk0_multiply_by => 2,
+-- clk0_phase_shift => "0",
+-- compensate_clock => "CLK0",
+ inclk0_input_frequency => 20000,
+ operation_mode => "NORMAL",
+ port_inclk0 => "PORT_USED",
+ port_clk0 => "PORT_USED"
+ )
+ port map (
+ inclk => pll_inclk,
+ clk => pll_outclk
+ );
+
+ pll_inclk(0) <= CLOCK_50;
+ pll_inclk(1) <= '0';
+
+ clk <= pll_outclk(0);
+ rst_n <= '0' when KEY0 = '0' else '1' when rising_edge (clk);
+ LEDR <= SW;
+
+ DAC_MODE <= '1'; --dual port
+ DAC_CLK_A <= clk;
+ DAC_CLK_B <= clk;
+ DAC_WRT_A <= clk;
+ DAC_WRT_B <= clk;
+
+ phase_inc <= unsigned(SW(9 downto 1) & '0');
+
+ cnt <= (others => '0') when rst_n = '0' else cnt+phase_inc when rising_edge(clk);
+
+ dac_a_next <= (others => '1') when cnt = 0 else (others => '0');
+ dac_a_reg <= (others => '0') when rst_n = '0' else dac_a_next when falling_edge(clk);
+ dac_b_reg <= (others => '0') when rst_n = '0' else cnt when falling_edge(clk);
+ DAC_DA <= std_ulogic_vector(dac_a_reg);
+ DAC_DB <= std_ulogic_vector(dac_b_reg);
+
+ -- ADC Section - switch off everything
+ ADC_CLK_A <= '0';
+ ADC_CLK_B <= '0';
+ ADC_OEB_A <= '1';
+ ADC_OEB_B <= '1';
+ POWER_ON <= '1';
+
+end architecture rtl;
diff --git a/src/de1_matlab_audio.vhd b/src/de1_matlab_audio.vhd
new file mode 100644
index 0000000..4d7e613
--- /dev/null
+++ b/src/de1_matlab_audio.vhd
@@ -0,0 +1,126 @@
+--Copyright 2013,2021 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library altera;
+use altera.altera_primitives_components.all;
+
+entity de1_matlab_audio is
+ port (
+ CLOCK_50: in std_ulogic;
+ KEY0: in std_ulogic;
+ SW: in std_ulogic_vector(9 downto 0);
+ I2C_SCLK: out std_ulogic;
+ I2C_SDAT: inout std_logic;
+ AUD_ADCLRCK: out std_ulogic;
+ AUD_ADCDAT: in std_ulogic;
+ AUD_DACLRCK: out std_ulogic;
+ AUD_DACDAT: out std_ulogic;
+ AUD_XCK: out std_ulogic;
+ AUD_BCLK: out std_ulogic;
+ LEDR: out std_ulogic_vector(9 downto 0));
+end;
+
+architecture struct of de1_matlab_audio is
+
+ -- Matlab generated toplevel
+ component ml_audio is
+ port (clk : in std_logic;
+ rst_n : in std_logic;
+ clk_enable : in std_logic;
+ ce_out : out std_logic;
+ switches_i : in std_logic_vector(9 downto 0);
+ audio_i : in std_logic_vector(15 downto 0);
+ audio_o : out std_logic_vector(15 downto 0));
+ end component;
+
+ -- Wolfson AudioCodec Interface block
+ component audio is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ i2c_sclk_o : out std_ulogic;
+ i2c_dat_i : in std_ulogic;
+ i2c_dat_o : out std_ulogic;
+ aud_adclrck_o : out std_ulogic;
+ aud_adcdat_i : in std_ulogic;
+ aud_daclrck_o : out std_ulogic;
+ aud_dacdat_o : out std_ulogic;
+ aud_xck_o : out std_ulogic;
+ aud_bclk_o : out std_ulogic;
+ adc_data_o : out std_ulogic_vector(15 downto 0);
+ adc_valid_o : out std_ulogic;
+ dac_data_i : in std_ulogic_vector(15 downto 0);
+ dac_strobe_o : out std_ulogic);
+ end component;
+
+ signal clk, reset_n : std_ulogic;
+
+ signal i2c_dat_o : std_ulogic;
+ signal i2c_dat_i : std_ulogic;
+
+ signal adc_valid : std_ulogic;
+ signal dac_strobe : std_ulogic;
+ signal dac_data : std_logic_vector(15 downto 0);
+ signal adc_data, dac_data_reg : std_ulogic_vector(15 downto 0);
+ signal ml_audio_out_valid : std_ulogic;
+
+begin
+
+ reset_n <= KEY0;
+ clk <= CLOCK_50;
+
+ ml_audio_i0 : ml_audio
+ port map (
+ clk => clk,
+ rst_n => reset_n,
+ clk_enable => adc_valid,
+ ce_out => ml_audio_out_valid,
+ switches_i => std_logic_vector(SW),
+ audio_i => std_logic_vector(adc_data),
+ audio_o => dac_data);
+
+ dac_data_reg <= std_ulogic_vector(dac_data) when rising_edge(clk) and ml_audio_out_valid = '1';
+
+ -- Wolfson Audio Codec
+ audio_i0 : audio
+ port map (
+ clk_i => clk,
+ reset_ni => reset_n,
+ i2c_sclk_o => I2C_SCLK,
+ i2c_dat_i => i2c_dat_i,
+ i2c_dat_o => i2c_dat_o,
+ aud_adclrck_o => AUD_ADCLRCK,
+ aud_adcdat_i => AUD_ADCDAT,
+ aud_daclrck_o => AUD_DACLRCK,
+ aud_dacdat_o => AUD_DACDAT,
+ aud_xck_o => AUD_XCK,
+ aud_bclk_o => AUD_BCLK,
+ adc_data_o => adc_data,
+ adc_valid_o => adc_valid,
+ dac_data_i => dac_data_reg,
+ dac_strobe_o => dac_strobe);
+
+ LEDR <= SW;
+
+ -- i2c has an open-drain ouput
+ i2c_dat_i <= I2C_SDAT;
+ i2c_data_buffer_i : OPNDRN
+ port map (a_in => i2c_dat_o, a_out => I2C_SDAT);
+
+end; -- architecture
diff --git a/src/de1_mux2to1_structure.vhd b/src/de1_mux2to1_structure.vhd
new file mode 100644
index 0000000..33c1257
--- /dev/null
+++ b/src/de1_mux2to1_structure.vhd
@@ -0,0 +1,48 @@
+-------------------------------------------------------------------------------
+-- Module : de1_mux2to1
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: test the module add1 on a DE1 prototype board
+-- connecting device under test (DUT) add1
+-- to input/output signals of the DE1 prototype board
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY de1_mux2to1 IS
+ PORT (
+ SW : IN std_ulogic_vector(2 DOWNTO 0); -- Toggle Switch[2:0]
+ LEDR : OUT std_ulogic -- LED Red[0]
+ );
+END de1_mux2to1;
+
+ARCHITECTURE structure OF de1_mux2to1 IS
+
+ COMPONENT mux2to1
+ PORT (
+ a_i : IN std_ulogic;
+ b_i : IN std_ulogic;
+ sel_i : IN std_ulogic;
+ y_o : OUT std_ulogic);
+ END COMPONENT;
+
+BEGIN
+
+ -- connecting device under test with peripheral elements
+ DUT : mux2to1
+ PORT MAP (
+ a_i => SW(0),
+ b_i => SW(1),
+ sel_i => SW(2),
+ y_o => LEDR);
+
+END structure;
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/de1_sta.vhd b/src/de1_sta.vhd
new file mode 100644
index 0000000..91a93aa
--- /dev/null
+++ b/src/de1_sta.vhd
@@ -0,0 +1,32 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity de1_sta is
+ port (
+ CLOCK_50 : in std_ulogic;
+ x_i : in unsigned(7 downto 0);
+ y_o : out unsigned(x_i'range)
+ );
+end de1_sta;
+
+architecture rtl of de1_sta is
+
+signal a,b,c,d : unsigned(x_i'range);
+signal sum : unsigned(x_i'range);
+signal clk : std_ulogic;
+
+begin
+
+clk <= CLOCK_50;
+
+sum <= a + b + c + d;
+
+y_o <= sum when rising_edge(clk);
+
+a <= x_i when rising_edge(clk);
+b <= a when rising_edge(clk);
+c <= b when rising_edge(clk);
+d <= c when rising_edge(clk);
+
+end architecture;
diff --git a/src/de1_tone.vhd b/src/de1_tone.vhd
new file mode 100644
index 0000000..eff30f9
--- /dev/null
+++ b/src/de1_tone.vhd
@@ -0,0 +1,119 @@
+--Copyright 2013,2021 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library altera;
+use altera.altera_primitives_components.all;
+
+entity de1_tone is
+ port (
+ CLOCK_50 : in std_ulogic;
+ KEY0 : in std_ulogic;
+ I2C_SCLK : out std_ulogic;
+ I2C_SDAT : inout std_logic;
+ AUD_ADCLRCK : out std_ulogic;
+ AUD_ADCDAT : in std_ulogic;
+ AUD_DACLRCK : out std_ulogic;
+ AUD_DACDAT : out std_ulogic;
+ AUD_XCK : out std_ulogic;
+ AUD_BCLK : out std_ulogic;
+ SW : in std_ulogic_vector(9 downto 0);
+ LEDR : out std_ulogic_vector(9 downto 0));
+end;
+
+architecture struct of de1_tone is
+
+ component audio is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ i2c_sclk_o : out std_ulogic;
+ i2c_dat_i : in std_ulogic;
+ i2c_dat_o : out std_ulogic;
+ aud_adclrck_o : out std_ulogic;
+ aud_adcdat_i : in std_ulogic;
+ aud_daclrck_o : out std_ulogic;
+ aud_dacdat_o : out std_ulogic;
+ aud_xck_o : out std_ulogic;
+ aud_bclk_o : out std_ulogic;
+ adc_data_o : out std_ulogic_vector(15 downto 0);
+ adc_valid_o : out std_ulogic;
+ dac_data_i : in std_ulogic_vector(15 downto 0);
+ dac_strobe_o : out std_ulogic);
+ end component;
+
+ component tone is
+ port (clk : in std_ulogic;
+ rst_n : in std_ulogic;
+ switches_i : in std_ulogic_vector(9 downto 0);
+ dv_i : in std_ulogic;
+ audio_i : in std_ulogic_vector(15 downto 0);
+ audio_o : out std_ulogic_vector(15 downto 0));
+ end component;
+
+ signal clk, reset_n : std_ulogic;
+
+ signal i2c_dat_o : std_ulogic;
+ signal i2c_dat_i : std_ulogic;
+
+ signal adc_valid : std_ulogic;
+ signal dac_strobe : std_ulogic;
+ signal dac_data, adc_data : std_ulogic_vector(15 downto 0);
+
+begin
+
+ reset_n <= KEY0;
+ clk <= CLOCK_50;
+
+ audio_i0 : audio
+ port map (
+ clk_i => clk,
+ reset_ni => reset_n,
+ i2c_sclk_o => I2C_SCLK,
+ i2c_dat_i => i2c_dat_i,
+ i2c_dat_o => i2c_dat_o,
+ aud_adclrck_o => AUD_ADCLRCK,
+ aud_adcdat_i => AUD_ADCDAT,
+ aud_daclrck_o => AUD_DACLRCK,
+ aud_dacdat_o => AUD_DACDAT,
+ aud_xck_o => AUD_XCK,
+ aud_bclk_o => AUD_BCLK,
+ adc_data_o => adc_data,
+ adc_valid_o => adc_valid,
+ dac_data_i => dac_data,
+ dac_strobe_o => dac_strobe);
+
+ tone_i0 : tone
+ port map (
+ clk => clk,
+ rst_n => reset_n,
+ dv_i => adc_valid,
+ audio_i => adc_data,
+ audio_o => dac_data,
+ switches_i => SW);
+
+ LEDR(9 downto 0) <= SW;
+
+ -- i2c has an open-drain ouput
+ i2c_dat_i <= I2C_SDAT;
+ i2c_data_buffer_i : OPNDRN
+ port map (a_in => i2c_dat_o, a_out => I2C_SDAT);
+
+end; -- architecture
+
+
diff --git a/src/e_falling_edge_detector.vhd b/src/e_falling_edge_detector.vhd
new file mode 100644
index 0000000..db0cb16
--- /dev/null
+++ b/src/e_falling_edge_detector.vhd
@@ -0,0 +1,34 @@
+-------------------------------------------------------------------------------
+-- Module : falling_edge_detector
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: detects a falling edge of input signal x_i
+-- and produces a high-active signal for one clock period at
+-- output fall_o
+-- clk_i __|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|__|--|
+-- x_i -----|___________________________________|-----------
+-- fall_o ________|-----|______________________________________
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY falling_edge_detector IS
+ PORT (
+ clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ x_i : IN std_ulogic;
+ fall_o : OUT std_ulogic
+ );
+END falling_edge_detector;
+
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/fsgen.vhd b/src/fsgen.vhd
new file mode 100644
index 0000000..e15deca
--- /dev/null
+++ b/src/fsgen.vhd
@@ -0,0 +1,56 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- Frame Sync Generator
+-- The framesync is active for one bitclock cycle
+
+entity fsgen is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ bclk_falling_edge_en_i : in std_ulogic;
+ fs_o : out std_ulogic);
+end;
+
+architecture rtl of fsgen is
+ constant max_count : integer := 127;
+ signal counter : integer range 0 to max_count;
+begin
+
+ fs_cnt_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ counter <= 0;
+ fs_o <= '0';
+ elsif rising_edge(clk_i) then
+ if bclk_falling_edge_en_i = '1' then
+ fs_o <= '0';
+ if counter = max_count then
+ counter <= 0;
+ fs_o <= '1';
+ else
+ counter <= counter + 1;
+ end if;
+ end if;
+ end if;
+ end process fs_cnt_p;
+
+end; -- architecture
+
+
diff --git a/src/i2c.vhd b/src/i2c.vhd
new file mode 100644
index 0000000..f60cdbe
--- /dev/null
+++ b/src/i2c.vhd
@@ -0,0 +1,245 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- I2C or 2-Wire Bus
+-- To start a transaction, pull the data line to 'L' while the clock is still 'H'
+-- 7 Bits Address
+-- 1 Bit R/W (0 = Write, 1 = Read)
+-- 1 Bit ACK (from Slave 0 if o.k.)
+-- 8 Bits Data 15..8
+-- 1 Bit Ack from slave (0 if o.k.)
+-- 8 Bits Data 7..0
+-- 1 Bit Ack from slave (0 if o.k.)
+
+
+entity i2c is
+ port (
+ clk_i: in std_ulogic;
+ reset_ni: in std_ulogic;
+ load_i: in std_ulogic;
+ data_i: in std_ulogic_vector(23 downto 0);
+ i2c_clk_o: out std_ulogic;
+ i2c_dat_o: out std_ulogic;
+ i2c_dat_i: in std_ulogic;
+ busy_o: out std_ulogic
+ );
+end;
+
+architecture rtl of i2c is
+
+ -- Clock divider section
+ constant fd_c : integer := 50000000/20000/2; -- 50 MHz system clock, 20 kHz I2C clock
+ signal clk_cnt : integer range 0 to fd_c;
+ signal clk_cnt_reset, clk_cnt_done : std_ulogic;
+
+ -- i2c data register index
+ signal idx : integer range 0 to 27;
+ signal idx_inc : std_ulogic;
+ signal idx_reset : std_ulogic;
+
+ -- i2c registers with and without data for the acknowledgment section
+ -- In cycle 8, 17 and 26 there is an i2c acknowledgement cycle where the master
+ -- drives Z and the slave will drive "0" when everything is o.k.
+ -- The input data from the interface is without these acknowledgement bits
+ signal load_i2c_reg_without_ack : std_ulogic;
+ signal i2c_reg_without_ack : std_ulogic_vector(23 downto 0);
+ signal i2c_reg_with_ack : std_ulogic_vector(0 to 27);
+
+ -- Statemachine
+ type state_t is (idle_s, start_s, data_hold_s, data_s, clock_high_s, stop_s);
+ signal state, next_state : state_t;
+
+ -- Selection for the i2c output data
+ type i2c_dat_sel_t is (sel_old, sel_reg, sel_one, sel_zero);
+ signal i2c_dat_sel : i2c_dat_sel_t;
+
+ type i2c_clk_sel_t is (sel_old, sel_one, sel_zero);
+ signal i2c_clk_sel : i2c_clk_sel_t;
+
+ signal i2c_clk : std_ulogic;
+ signal i2c_clk_new : std_ulogic;
+ signal i2c_dat : std_ulogic;
+ signal i2c_dat_new : std_ulogic;
+
+begin
+
+ -- i2c register with ack build from i2c without ack
+ -- i2c data is transmitted msb first, so bus direction is changed also
+ i2c_reg_with_ack(0 to 7) <= i2c_reg_without_ack(23 downto 16);
+ i2c_reg_with_ack(8) <= '1';
+ i2c_reg_with_ack(9 to 16) <= i2c_reg_without_ack(15 downto 8);
+ i2c_reg_with_ack(17) <= '1';
+ i2c_reg_with_ack(18 to 25) <= i2c_reg_without_ack(7 downto 0);
+ i2c_reg_with_ack(26) <= '1';
+ i2c_reg_with_ack(27) <= '0';
+
+ -- This process counts the clocks for reducing the clock speed
+ -- of the i2c clock
+ clk_cnt_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ clk_cnt <= 0;
+ elsif rising_edge(clk_i) then
+ if clk_cnt < fd_c then
+ clk_cnt <= clk_cnt + 1;
+ end if;
+ if clk_cnt_reset = '1' then
+ clk_cnt <= 0;
+ end if;
+ end if;
+ end process clk_cnt_p;
+
+ clk_cnt_done <= '1' when clk_cnt = fd_c else '0';
+
+ -- This is the index for the i2c register.
+ i2c_idx_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ idx <= 0;
+ elsif rising_edge(clk_i) then
+ if idx_inc = '1' and idx < 27 then
+ idx <= idx + 1;
+ end if;
+ if idx_reset = '1' then
+ idx <= 0;
+ end if;
+ end if;
+ end process i2c_idx_p;
+
+ -- This are the registered outputs for the i2c clock and data
+ i2c_out_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ i2c_clk <= '1';
+ i2c_dat <= '1';
+ elsif rising_edge(clk_i) then
+ i2c_dat <= i2c_dat_new;
+ i2c_clk <= i2c_clk_new;
+ end if;
+ end process i2c_out_p;
+
+ -- The i2c register without ack data
+ i2c_data_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ i2c_reg_without_ack <= (others => '0');
+ elsif rising_edge(clk_i) then
+ if load_i2c_reg_without_ack = '1' then
+ i2c_reg_without_ack <= data_i;
+ end if;
+ end if;
+ end process i2c_data_p;
+
+ -- i2c data selection process
+ i2c_dat_sel_p : process(i2c_dat_sel, i2c_reg_with_ack, i2c_dat, idx)
+ begin
+ case i2c_dat_sel is
+ when sel_old => i2c_dat_new <= i2c_dat;
+ when sel_reg => i2c_dat_new <= i2c_reg_with_ack(idx);
+ when sel_one => i2c_dat_new <= '1';
+ when sel_zero => i2c_dat_new <= '0';
+ when others => i2c_dat_new <= '0';
+ end case;
+ end process i2c_dat_sel_p;
+
+ -- i2c clock selection process
+ i2c_clk_sel_p : process(i2c_clk, i2c_clk_sel)
+ begin
+ case i2c_clk_sel is
+ when sel_old => i2c_clk_new <= i2c_clk;
+ when sel_one => i2c_clk_new <= '1';
+ when sel_zero => i2c_clk_new <= '0';
+ when others => i2c_clk_new <= '0';
+ end case;
+ end process i2c_clk_sel_p;
+
+ -- Sequential process for the statemachine
+ statem_seq_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ state <= idle_s;
+ elsif rising_edge(clk_i) then
+ state <= next_state;
+ end if;
+ end process statem_seq_p;
+
+ statem_comb_p: process(state, load_i, idx, clk_cnt_done)
+ begin
+ load_i2c_reg_without_ack<= '0';
+ idx_inc <= '0';
+ idx_reset <= '0';
+ clk_cnt_reset <= '0';
+ busy_o <= '1';
+ i2c_dat_sel <= sel_old;
+ i2c_clk_sel <= sel_old;
+ next_state <= state;
+ case state is
+ when idle_s =>
+ busy_o <= '0';
+ i2c_clk_sel <= sel_one;
+ i2c_dat_sel <= sel_one;
+ if load_i = '1' then
+ load_i2c_reg_without_ack <= '1';
+ clk_cnt_reset <= '1';
+ idx_reset <= '1';
+ next_state <= start_s;
+ i2c_dat_sel <= sel_zero;
+ end if;
+ when start_s =>
+ if clk_cnt_done = '1' then
+ next_state <= data_hold_s;
+ clk_cnt_reset <= '1';
+ i2c_clk_sel <= sel_zero;
+ end if;
+ when data_hold_s =>
+ next_state <= data_s;
+ i2c_dat_sel <= sel_reg;
+ when data_s =>
+ if clk_cnt_done = '1' then
+ next_state <= clock_high_s;
+ i2c_clk_sel <= sel_one;
+ clk_cnt_reset <= '1';
+ end if;
+ when clock_high_s =>
+ if clk_cnt_done = '1' then
+ if idx = 27 then -- last bit transmitted
+ i2c_dat_sel <= sel_one;
+ next_state <= stop_s;
+ else
+ idx_inc <= '1';
+ i2c_clk_sel <= sel_zero;
+ next_state <= data_hold_s;
+ end if;
+ clk_cnt_reset <= '1';
+ end if;
+ when stop_s =>
+ if clk_cnt_done = '1' then
+ next_state <= idle_s;
+ end if;
+ when others =>
+ next_state <= idle_s;
+ end case;
+ end process statem_comb_p;
+
+ i2c_clk_o <= i2c_clk;
+ i2c_dat_o <= i2c_dat;
+
+end; -- architecture
+
+
diff --git a/src/i2c_sub.vhd b/src/i2c_sub.vhd
new file mode 100644
index 0000000..e71ff39
--- /dev/null
+++ b/src/i2c_sub.vhd
@@ -0,0 +1,79 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity i2c_sub is
+ port (
+ clk_i: in std_ulogic;
+ reset_ni: in std_ulogic;
+ i2c_dat_o: out std_ulogic;
+ i2c_dat_i: in std_ulogic;
+ i2c_clk_o: out std_ulogic);
+end;
+
+architecture struct of i2c_sub is
+
+component i2c is
+ port (
+ clk_i: in std_ulogic;
+ reset_ni: in std_ulogic;
+ load_i: in std_ulogic;
+ data_i: in std_ulogic_vector(23 downto 0);
+ i2c_clk_o: out std_ulogic;
+ i2c_dat_o: out std_ulogic;
+ i2c_dat_i: in std_ulogic;
+ busy_o: out std_ulogic
+ );
+end component;
+
+component i2c_write is
+ port (
+ clk_i: in std_ulogic;
+ reset_ni: in std_ulogic;
+ load_o: out std_ulogic;
+ data_o: out std_ulogic_vector(23 downto 0);
+ busy_i: in std_ulogic);
+end component;
+
+ signal load, busy : std_ulogic;
+ signal data : std_ulogic_vector(23 downto 0);
+
+begin
+
+ i2c_i0 : i2c
+ port map (
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ load_i => load,
+ data_i => data,
+ i2c_clk_o => i2c_clk_o,
+ i2c_dat_o => i2c_dat_o,
+ i2c_dat_i => i2c_dat_i,
+ busy_o => busy);
+
+ i2_write_i0 : i2c_write
+ port map (
+ clk_i => clk_i,
+ reset_ni => reset_ni,
+ load_o => load,
+ data_o => data,
+ busy_i => busy);
+
+end; -- architecture
+
+
diff --git a/src/i2c_write.vhd b/src/i2c_write.vhd
new file mode 100644
index 0000000..338a3a7
--- /dev/null
+++ b/src/i2c_write.vhd
@@ -0,0 +1,98 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity i2c_write is
+ port (
+ clk_i: in std_ulogic;
+ reset_ni: in std_ulogic;
+ load_o: out std_ulogic;
+ data_o: out std_ulogic_vector(23 downto 0);
+ busy_i: in std_ulogic);
+end;
+
+architecture rtl of i2c_write is
+ constant num_regs_c : integer := 12;
+ type state_t is (start_s, wait_s, done_s);
+ signal state, next_state : state_t;
+ signal counter : integer range 0 to num_regs_c-1;
+ signal counter_enable : std_ulogic;
+ type data_array_t is array(0 to num_regs_c-1) of std_ulogic_vector(23 downto 0);
+
+ constant data_array : data_array_t := (
+ X"341200", -- Set Inactive
+ X"341E00", -- Reset the Device
+ X"34001A", -- Left Line In / Mute off / Volume
+ X"34021A", -- Right Line In
+ X"34046F", -- Headphone Left
+ X"34066F", -- Headphone Right
+ X"340815", -- Analog path control (MIC to ADC, DAC to output, MIC Boost)
+ X"340A00", -- Digital path control
+ X"340C61", -- Power Down Control (Everything switched on)
+ X"340E13", -- Digital Audio Interface Format (Slave Mode, DSP Mode, 16 Bit)
+ X"341000", -- Sampling Control (48 kHz Sampling frequency, Normal Mode)
+ X"341201"); -- Active Control (Activate)
+
+begin
+
+ seq_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ state <= start_s;
+ counter <= 0;
+ elsif rising_edge(clk_i) then
+ state <= next_state;
+ if counter_enable = '1' then
+ if counter < num_regs_c - 1 then
+ counter <= counter + 1;
+ else
+ counter <= 0;
+ end if;
+ end if;
+ end if;
+ end process seq_p;
+
+ data_o <= data_array(counter);
+
+ process(state, counter, busy_i)
+ begin
+ load_o <= '0';
+ counter_enable <= '0';
+ next_state <= state;
+ case state is
+ when start_s =>
+ load_o <= '1';
+ next_state <= wait_s;
+ when wait_s =>
+ if busy_i = '0' then
+ if counter = num_regs_c-1 then
+ next_state <= done_s;
+ --counter_enable <= '1';
+ else
+ next_state <= start_s;
+ counter_enable <= '1';
+ end if;
+ end if;
+ when others =>
+ next_state <= state;
+ end case;
+ end process;
+
+end; -- architecture
+
+
diff --git a/src/invgate_equation.vhd b/src/invgate_equation.vhd
new file mode 100644
index 0000000..69e920e
--- /dev/null
+++ b/src/invgate_equation.vhd
@@ -0,0 +1,34 @@
+-------------------------------------------------------------------------------
+-- Module : invgate
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: Inverter Gate
+-- function modelled by logic equation
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY invgate IS
+ PORT (a_i : IN std_ulogic; -- data input a
+ y_o : OUT std_ulogic -- data output y
+ );
+END invgate;
+
+ARCHITECTURE equation OF invgate IS
+
+BEGIN
+
+ y_o <= NOT a_i;
+
+END equation;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/mclk.vhd b/src/mclk.vhd
new file mode 100644
index 0000000..5da923d
--- /dev/null
+++ b/src/mclk.vhd
@@ -0,0 +1,48 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- Master Clock Generator
+-- Generate 12.5 MHz from 50 MHz by dividing by 4
+-- Audio Codec expects 12.288 MHz, so we are slightly higher
+
+entity mclk is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ mclk_o : out std_ulogic);
+end;
+
+architecture rtl of mclk is
+ signal mclk : unsigned(1 downto 0);
+begin
+
+ mclk_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ mclk <= to_unsigned(0, mclk'length);
+ elsif rising_edge(clk_i) then
+ mclk <= mclk + 1;
+ end if;
+ end process mclk_p;
+
+ mclk_o <= mclk(1);
+
+end; -- architecture
+
+
diff --git a/src/memory.vhd b/src/memory.vhd
new file mode 100644
index 0000000..e50d687
--- /dev/null
+++ b/src/memory.vhd
@@ -0,0 +1,54 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- This VHDL memory description will result in FPGA memory usage.
+-- The EPC2C20 series provides a total of 52 M4K memory blocks
+-- Each M4K memory block contains 4608 Bits. The following configurations are supported:
+-- 4K 1, 2K 2, 1K 4, 512 8, 512 9, 256 16, 256 18
+-- The maximum is therefore 52 x 256 = 13312 samples.
+
+entity memory is
+ port (
+ clk_i : in std_ulogic;
+ we_i : in std_ulogic;
+ waddr_i : in unsigned(12 downto 0);
+ raddr_i : in unsigned(12 downto 0);
+ wdata_i : in std_ulogic_vector(15 downto 0);
+ rdata_o : out std_ulogic_vector(15 downto 0)
+ );
+end;
+
+architecture rtl of memory is
+ type ram_t is array(0 to 2 ** 13 - 1) of std_ulogic_vector(15 downto 0);
+ signal ram : ram_t;
+begin
+
+ mem_p : process(clk_i)
+ begin
+ if rising_edge(clk_i) then
+ if we_i = '1' then
+ ram(to_integer(waddr_i)) <= wdata_i;
+ end if;
+ rdata_o <= ram(to_integer(raddr_i));
+ end if;
+ end process mem_p;
+
+end; -- architecture
+
+
diff --git a/src/mux2to1_equation.vhd b/src/mux2to1_equation.vhd
new file mode 100644
index 0000000..0fddb6a
--- /dev/null
+++ b/src/mux2to1_equation.vhd
@@ -0,0 +1,40 @@
+-------------------------------------------------------------------------------
+-- Module : mux2to1
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: 2-to-1 multiplexer
+-- function modelled by boolean equation
+-- sel = '1': a -> y
+-- sel = '0': b -> y
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY mux2to1 IS
+ PORT (a_i : IN std_ulogic; -- data input a
+ b_i : IN std_ulogic; -- data input b
+ sel_i : IN std_ulogic; -- select which input is connected to y
+ -- sel = '1': a -> y
+ -- sel = '0': b -> y
+ y_o : OUT std_ulogic -- data output y
+ );
+END mux2to1;
+
+ARCHITECTURE equation OF mux2to1 IS
+
+BEGIN
+
+ y_o <= (sel_i AND a_i) OR (NOT sel_i AND b_i);
+
+END equation;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/mux2to1_rtl.vhd b/src/mux2to1_rtl.vhd
new file mode 100644
index 0000000..c6447dd
--- /dev/null
+++ b/src/mux2to1_rtl.vhd
@@ -0,0 +1,42 @@
+-------------------------------------------------------------------------------
+-- Module : mux2to1
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: 2-to-1 multiplexer
+-- function modelled by a conditional signal assignment
+-- sel = '1': a -> y
+-- sel = '0': b -> y
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY mux2to1 IS
+ PORT (a_i : IN std_ulogic; -- data input a
+ b_i : IN std_ulogic; -- data input b
+ sel_i : IN std_ulogic; -- select which input is connected to y
+ -- sel = '1': a -> y
+ -- sel = '0': b -> y
+ y_o : OUT std_ulogic -- data output y
+ );
+END mux2to1;
+
+ARCHITECTURE rtl OF mux2to1 IS
+
+BEGIN
+
+ y_o <= a_i WHEN sel_i = '1' ELSE
+ b_i WHEN sel_i = '0' ELSE
+ 'X';
+
+END rtl;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/mux2to1_structure.vhd b/src/mux2to1_structure.vhd
new file mode 100644
index 0000000..3ff0c97
--- /dev/null
+++ b/src/mux2to1_structure.vhd
@@ -0,0 +1,90 @@
+-------------------------------------------------------------------------------
+-- Module : mux2to1
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: 2-to-1 multiplexer
+-- function modelled as structure of basic logic gates
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY mux2to1 IS
+ PORT (a_i : IN std_ulogic; -- data input a
+ b_i : IN std_ulogic; -- data input b
+ sel_i : IN std_ulogic; -- select which input is connected to y
+ -- sel = '1': a -> y
+ -- sel = '0': b -> y
+ y_o : OUT std_ulogic -- data output y
+ );
+END mux2to1;
+
+ARCHITECTURE structure OF mux2to1 IS
+
+ COMPONENT invgate
+ PORT (
+ a_i : IN std_ulogic;
+ y_o : OUT std_ulogic);
+ END COMPONENT;
+
+ COMPONENT and2gate
+ PORT (
+ a_i : IN std_ulogic;
+ b_i : IN std_ulogic;
+ y_o : OUT std_ulogic);
+ END COMPONENT;
+
+ COMPONENT or2gate
+ PORT (
+ a_i : IN std_ulogic;
+ b_i : IN std_ulogic;
+ y_o : OUT std_ulogic);
+ END COMPONENT;
+
+ SIGNAL p0, p1 : std_ulogic;
+ SIGNAL p2 : std_ulogic;
+
+BEGIN
+
+ inv_gate_1 : invgate
+ PORT MAP (
+ a_i => sel_i,
+ y_o => p2);
+
+ and2_gate_1 : and2gate
+ PORT MAP (
+ a_i => a_i,
+ b_i => sel_i,
+ y_o => p0);
+
+ and2_gate_2 : and2gate
+ PORT MAP (
+ a_i => b_i,
+ b_i => p2,
+ y_o => p1);
+
+ or2_gate_1 : or2gate
+ PORT MAP (
+ a_i => p0,
+ b_i => p1,
+ y_o => y_o);
+
+-- inv_gate_1 : invgate PORT MAP (sel_i, p2);
+
+-- and2_gate_1 : and2gate PORT MAP (a_i, sel_i, p0);
+
+-- and2_gate_2 : and2gate PORT MAP (b_i, p2, p1);
+
+-- or2_gate_1 : or2gate PORT MAP (p0, p1, y_o);
+
+END structure;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/mux2to1_structure_errors.vhd b/src/mux2to1_structure_errors.vhd
new file mode 100644
index 0000000..0b33968
--- /dev/null
+++ b/src/mux2to1_structure_errors.vhd
@@ -0,0 +1,79 @@
+-------------------------------------------------------------------------------
+-- Module : mux2to1
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: 2-to-1 multiplexer
+-- function modelled as structure of basic logic gates
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY mux2to1 IS
+ PORT (a_i : IN std_ulogic;
+ b_i : IN std_ulogic;
+ sel_i : IN std_ulogic;
+-- y_o : OUT std_ulogic; -- kein ; nach letztem Signal
+ y_o : OUT std_ulogic
+ );
+END mux21;
+
+
+ARCHITECTURE structure OF mux2to1 IS
+
+ COMPONENT invgate
+ PORT (
+ a_i : IN std_ulogic;
+ y_o : OUT std_ulogic);
+ END COMPONENT;
+
+ COMPONENT or2gate
+ PORT (
+ a_i : IN std_ulogic;
+ b_i : IN std_ulogic;
+ y_o : std_ulogic);
+ END COMPONENT;
+
+ SIGNAL p1 : std_ulogic;
+ SIGNAL p2 : std_ulogic;
+ SIGNAL p3 : std_ulogic;
+
+BEGIN
+
+ inv_gate_1 : invgate
+ PORT MAP (
+ a_i => sel_i,
+ y_o <= p2);
+
+
+ and2_gate_1 : and2gate
+ PORT MAP (
+ a_i => a_i,
+ b_i => p2
+ y_o => p0);
+
+ and2_gate_2 : and2gate
+ PORT MAP (
+ a_i => b_i,
+ b_i => sel_i,
+ y_o => p1);
+
+ or2_gate_1 : or2gate
+ PORT MAP (
+ a_i => p0,
+ b_i => p1,
+ y_o => p3);
+
+
+END struct
+
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/mux2to1_truthtable.vhd b/src/mux2to1_truthtable.vhd
new file mode 100644
index 0000000..ff84c61
--- /dev/null
+++ b/src/mux2to1_truthtable.vhd
@@ -0,0 +1,54 @@
+-------------------------------------------------------------------------------
+-- Module : mux2to1
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: 2-to-1 multiplexer
+-- function modelled by a truth table
+-- sel = '1': a -> y
+-- sel = '0': b -> y
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+LIBRARY IEEE;
+USE IEEE.std_logic_1164.ALL;
+
+ENTITY mux2to1 IS
+ PORT (a_i : IN std_ulogic; -- data input a
+ b_i : IN std_ulogic; -- data input b
+ sel_i : IN std_ulogic; -- select which input is connected to y
+ -- sel = '1': a -> y
+ -- sel = '0': b -> y
+ y_o : OUT std_ulogic -- data output y
+ );
+END mux2to1;
+
+ARCHITECTURE truthtable OF mux2to1 IS
+
+ SIGNAL inputs_s : std_ulogic_vector(2 DOWNTO 0); -- temp input vector
+
+BEGIN
+
+ inputs_s <= (sel_i, b_i, a_i); -- concatenate single signals to a vector
+
+ tt : WITH inputs_s SELECT -- truthtable
+ y_o <=
+ '0' WHEN "000",
+ '0' WHEN "001",
+ '1' WHEN "010",
+ '1' WHEN "011",
+ '0' WHEN "100",
+ '1' WHEN "101",
+ '0' WHEN "110",
+ '1' WHEN "111",
+ 'X' WHEN OTHERS;
+
+END truthtable;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
+
diff --git a/src/or2gate_equation.vhd b/src/or2gate_equation.vhd
new file mode 100644
index 0000000..13795fb
--- /dev/null
+++ b/src/or2gate_equation.vhd
@@ -0,0 +1,18 @@
+-------------------------------------------------------------------------------
+-- Module : or2gate
+-------------------------------------------------------------------------------
+-- Author : Johann Faerber
+-- Company : University of Applied Sciences Augsburg
+-------------------------------------------------------------------------------
+-- Description: 2-input OR Gate
+-- function modelled by logic equation
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/play_rtl.vhd b/src/play_rtl.vhd
new file mode 100644
index 0000000..8452236
--- /dev/null
+++ b/src/play_rtl.vhd
@@ -0,0 +1,101 @@
+------------------------------------------------------------------
+-- module : play
+------------------------------------------------------------------
+-- author : Friedrich Beckmann
+-- company : university of applied sciences augsburg
+------------------------------------------------------------------
+-- description: Statemachine for LED game
+--
+------------------------------------------------------------------
+-- revisions : 0.1 -
+------------------------------------------------------------------
+
+-- 5 LED outputs
+-- One one-second enable input
+-- KEY input with preceding rising_edge detector
+
+-- step LED4 LED3 LED2 LED1 LED0
+-- 1 x - - - -
+-- 2 - x - - -
+-- 3 - - x - -
+-- 4 - - - x -
+-- 5 - - - - x
+-- 6 x - - - -
+-- ... this pattern continues
+-- If LED2 is on and KEY is pressed then the pattern continues as follows
+-- 1 x - - - -
+-- 2 - - - - x
+-- ... this pattern continues until
+-- KEY is pressed again. Then the previous pattern restarts from LED 2
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity play is
+ port (clk : in std_ulogic;
+ rst_n : in std_ulogic;
+ onesec_i : in std_ulogic;
+ key_i : in std_ulogic;
+ led_o : out std_ulogic_vector(4 downto 0));
+end play;
+
+architecture rtl of play is
+
+ type state_t is (start_s,one_s,chance_s,four_s,last_s,hit0_s,hit1_s);
+ signal current_state,next_state : state_t;
+
+begin
+
+ current_state <= start_s when rst_n = '0' else next_state when rising_edge(clk);
+
+ next_p : process(current_state, onesec_i, key_i)
+ begin
+ next_state <= current_state;
+ led_o <= "00000";
+ case current_state is
+ when start_s =>
+ led_o <= "10000";
+ if onesec_i = '1' then
+ next_state <= one_s;
+ end if;
+ when one_s =>
+ led_o <= "01000";
+ if onesec_i = '1' then
+ next_state <= chance_s;
+ end if;
+ when chance_s =>
+ led_o <= "00100";
+ if key_i = '1' then
+ next_state <= hit0_s;
+ elsif onesec_i = '1' then
+ next_state <= four_s;
+ end if;
+ when four_s =>
+ led_o <= "00010";
+ if onesec_i = '1' then
+ next_state <= last_s;
+ end if;
+ when last_s =>
+ led_o <= "00001";
+ if onesec_i = '1' then
+ next_state <= start_s;
+ end if;
+ when hit0_s =>
+ led_o <= "10000";
+ if key_i = '1' then
+ next_state <= chance_s;
+ elsif onesec_i = '1' then
+ next_state <= hit1_s;
+ end if;
+ when hit1_s =>
+ led_o <= "00001";
+ if key_i = '1' then
+ next_state <= chance_s;
+ elsif onesec_i = '1' then
+ next_state <= hit0_s;
+ end if;
+ when others => null;
+ end case;
+ end process;
+
+end architecture rtl;
diff --git a/src/ringbuf.vhd b/src/ringbuf.vhd
new file mode 100644
index 0000000..7c45815
--- /dev/null
+++ b/src/ringbuf.vhd
@@ -0,0 +1,74 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+-- Ring Buffer stores samples in a circular buffer
+-- The read buffer pointer is one buffer entry ahead
+-- of the write buffer pointer.
+
+entity ringbuf is
+ port (
+ clk_i : in std_ulogic;
+ reset_ni : in std_ulogic;
+ en_i : in std_ulogic;
+ data_i : in std_ulogic_vector(15 downto 0);
+ data_o : out std_ulogic_vector(15 downto 0));
+end;
+
+architecture rtl of ringbuf is
+
+component memory is
+ port (
+ clk_i : in std_ulogic;
+ we_i : in std_ulogic;
+ waddr_i : in unsigned(12 downto 0);
+ raddr_i : in unsigned(12 downto 0);
+ wdata_i : in std_ulogic_vector(15 downto 0);
+ rdata_o : out std_ulogic_vector(15 downto 0)
+ );
+end component;
+
+ signal raddr, waddr : unsigned(12 downto 0);
+
+begin
+
+ mem_i0 : memory
+ port map (
+ clk_i => clk_i,
+ we_i => en_i,
+ raddr_i => raddr,
+ waddr_i => waddr,
+ rdata_o => data_o,
+ wdata_i => data_i);
+
+ buffer_pointer_p : process(clk_i, reset_ni)
+ begin
+ if reset_ni = '0' then
+ waddr <= to_unsigned(0, 13);
+ raddr <= to_unsigned(1, 13);
+ elsif rising_edge(clk_i) then
+ if en_i = '1' then
+ raddr <= raddr + 1;
+ waddr <= waddr + 1;
+ end if;
+ end if;
+ end process buffer_pointer_p;
+
+end; -- architecture
+
+
diff --git a/src/t_cntdn.vhd b/src/t_cntdn.vhd
new file mode 100644
index 0000000..42888c6
--- /dev/null
+++ b/src/t_cntdn.vhd
@@ -0,0 +1,123 @@
+-------------------------------------------------------------------------------
+-- Module : t_cntdn
+-------------------------------------------------------------------------------
+-- Author : <haf@fh-augsburg.de>
+-- Company : University of Applied Sciences Augsburg
+-- Copyright (c) 2011 <haf@fh-augsburg.de>
+-------------------------------------------------------------------------------
+-- Description: Testbench for design "cntdn"
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+
+ENTITY t_cntdn IS
+END t_cntdn;
+
+ARCHITECTURE tbench OF t_cntdn IS
+
+ COMPONENT cntdn
+ PORT (
+ clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector(3 DOWNTO 0);
+ tc_o : OUT std_ulogic);
+ END COMPONENT;
+
+ -- definition of a clock period
+ CONSTANT period : time := 10 ns;
+ -- switch for clock generator
+ SIGNAL clken_p : boolean := true;
+
+ -- component ports
+ SIGNAL clk_i : std_ulogic;
+ SIGNAL rst_ni : std_ulogic;
+ SIGNAL en_pi : std_ulogic;
+ SIGNAL count_o : std_ulogic_vector(3 DOWNTO 0);
+ SIGNAL tc_o : std_ulogic;
+
+BEGIN -- tbench
+
+ -- component instantiation
+ DUT : cntdn
+ PORT MAP (
+ clk_i => clk_i,
+ rst_ni => rst_ni,
+ en_pi => en_pi,
+ count_o => count_o,
+ tc_o => tc_o);
+
+ -- clock generation
+ clock_proc : PROCESS
+ BEGIN
+ WHILE clken_p LOOP
+ clk_i <= '0'; WAIT FOR period/2;
+ clk_i <= '1'; WAIT FOR period/2;
+ END LOOP;
+ WAIT;
+ END PROCESS;
+
+ -- initial reset, always necessary at the beginning of a simulation
+ -- initial reset, always necessary at the beginning of a simulation
+ -----------------------------------------------------------------------------
+ -- Following a verification plan:
+ -- ------------------------------
+ -- 1. t = 0 ns: activate asynchronous reset
+ -- 2. t = 10 ns: deactivate asynchronous reset
+ -----------------------------------------------------------------------------
+ reset : rst_ni <= '0', '1' AFTER period;
+
+ stimuli_p : PROCESS
+
+ BEGIN
+
+ ---------------------------------------------------------------------------
+ -- ... continuing with the verification plan:
+ ---------------------------------------------------------------------------
+ WAIT UNTIL rising_edge(rst_ni); -- wait for reset
+ -- ... is deactivated
+ ---------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------
+ -- 2. activate enable
+ -- 3. Wait for a full counting cycle
+ ---------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------
+
+
+ ---------------------------------------------------------------------------
+ -- 4. After another five periods: Deactivate Enable
+ ---------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------
+ -- 5. After another three periods: Activate Enable
+ -- 6. Simulate another complete counting cycle
+ ---------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------
+ -- 7. Simulate until tc_o = 1 again
+ ---------------------------------------------------------------------------
+
+ ---------------------------------------------------------------------------
+
+
+ clken_p <= false; -- switch clock generator off
+
+ WAIT; -- suspend proces
+ END PROCESS;
+
+END tbench;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/t_cntdnmodm.vhd b/src/t_cntdnmodm.vhd
new file mode 100644
index 0000000..5b3b9e3
--- /dev/null
+++ b/src/t_cntdnmodm.vhd
@@ -0,0 +1,157 @@
+-------------------------------------------------------------------------------
+-- Module : t_cntdnmodm
+-------------------------------------------------------------------------------
+-- Author : <johann.faerber@hs-augsburg.de>
+-- Company : University of Applied Sciences Augsburg
+-- Copyright (c) 2013 <johann.faerber@hs-augsburg.de>
+-------------------------------------------------------------------------------
+-- Description: Testbench for design "cntdnmodm"
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+
+ENTITY t_cntdnmodm IS
+END t_cntdnmodm;
+
+ARCHITECTURE tbench OF t_cntdnmodm IS
+
+ COMPONENT cntdnmodm
+ GENERIC (
+ n : natural;
+ m : natural);
+ PORT (
+ clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ en_pi : IN std_ulogic;
+ count_o : OUT std_ulogic_vector(n-1 DOWNTO 0);
+ tc_o : OUT std_ulogic);
+ END COMPONENT;
+
+ -- component generics
+ CONSTANT n : natural := 4;
+ CONSTANT m : natural := 10;
+
+ -- component ports
+ SIGNAL clk_i : std_ulogic;
+ SIGNAL rst_ni : std_ulogic;
+ SIGNAL en_pi : std_ulogic;
+ SIGNAL count_o : std_ulogic_vector(n-1 DOWNTO 0);
+ SIGNAL tc_o : std_ulogic;
+
+ SIGNAL count_mod6_o : std_ulogic_vector(2 DOWNTO 0);
+ SIGNAL tc_mod6_o : std_ulogic;
+
+ SIGNAL count_mod500e3_o : std_ulogic_vector(18 DOWNTO 0);
+ SIGNAL tc_100hz_o : std_ulogic;
+
+
+ -- definition of a clock period
+ CONSTANT period : time := 20 ns;
+ -- switch for clock generator
+ SIGNAL clken_p : boolean := true;
+
+BEGIN -- tbench
+
+ -- component instantiation
+ MUV : cntdnmodm
+ GENERIC MAP (
+ n => n,
+ m => m)
+ PORT MAP (
+ clk_i => clk_i,
+ rst_ni => rst_ni,
+ en_pi => en_pi,
+ count_o => count_o,
+ tc_o => tc_o);
+
+ mod6_count : cntdnmodm
+ GENERIC MAP (
+ n => 3,
+ m => 6)
+ PORT MAP (
+ clk_i => clk_i,
+ rst_ni => rst_ni,
+ en_pi => en_pi,
+ count_o => count_mod6_o,
+ tc_o => tc_mod6_o);
+
+ -- instantiate and parameterise the generics to
+ -- create a frequency of 100 Hz at its output signal tc_100hz_o
+ -- declare the necessary signals count_modxxx_o and tc_100hz_o
+ -----------------------------------------------------------------------------
+-- prescaler : cntdnmodm
+-- GENERIC MAP (
+-- n =>
+-- m => )
+-- PORT MAP (
+ -----------------------------------------------------------------------------
+
+
+ -- clock generation
+ clock_p : PROCESS
+ BEGIN
+ WHILE clken_p LOOP
+ clk_i <= '0'; WAIT FOR period/2;
+ clk_i <= '1'; WAIT FOR period/2;
+ END LOOP;
+ WAIT;
+ END PROCESS;
+
+ -- initial reset
+ reset : rst_ni <= '1', '0' AFTER period,
+ '1' AFTER 2 * period;
+
+ -- process for stimuli generation
+ stimuli_p : PROCESS
+
+ BEGIN
+
+ WAIT UNTIL rising_edge(rst_ni); -- wait for reset
+
+ en_pi <= '1'; -- activate counter
+
+
+ -- wait for a period of tc_o ----------------------------------------------
+ WAIT UNTIL rising_edge(tc_o);
+ WAIT UNTIL falling_edge(tc_o);
+
+ WAIT UNTIL count_o = X"5";
+
+ en_pi <= '0'; -- stop counter ...
+ WAIT FOR 3* period; -- ... for 3 periods
+
+ en_pi <= '1'; -- activate counter
+
+ -- wait for a period of tc_mod6_o -----------------------------------------
+ WAIT UNTIL rising_edge(tc_mod6_o);
+ WAIT UNTIL falling_edge(tc_mod6_o);
+ ---------------------------------------------------------------------------
+
+
+ -- wait for a period of tc_100hz_o ----------------------------------------
+
+ ---------------------------------------------------------------------------
+
+
+ -- wait for a period of tc_100hz_o ----------------------------------------
+
+ ---------------------------------------------------------------------------
+
+
+ clken_p <= false; -- switch clock generator off
+
+ WAIT;
+ END PROCESS;
+
+
+
+END tbench;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/t_de1_audio.vhd b/src/t_de1_audio.vhd
new file mode 100644
index 0000000..bfa0f1f
--- /dev/null
+++ b/src/t_de1_audio.vhd
@@ -0,0 +1,88 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity t_de1_audio is
+end;
+
+architecture tbench of t_de1_audio is
+
+component de1_audio is
+ port (
+ CLOCK_50: in std_ulogic;
+ KEY0: in std_ulogic;
+ I2C_SCLK: out std_ulogic;
+ I2C_SDAT: inout std_ulogic;
+ AUD_ADCLRCK: out std_ulogic;
+ AUD_ADCDAT: in std_ulogic;
+ AUD_DACLRCK: out std_ulogic;
+ AUD_DACDAT: out std_ulogic;
+ AUD_XCK: out std_ulogic;
+ AUD_BCLK: out std_ulogic;
+ LEDR: out std_ulogic_vector(9 downto 0)
+ );
+end component;
+
+ signal clk, reset_n : std_ulogic;
+ signal ledr : std_ulogic_vector(9 downto 0);
+ signal i2c_clk, i2c_dat : std_ulogic;
+ signal key0 : std_ulogic;
+
+ signal aud_adclrck, aud_adcdat, aud_daclrck, aud_dacdat, aud_xck, aud_bclk : std_ulogic;
+
+ signal simrun : boolean := true;
+
+begin
+
+ de1_audio_i0 : de1_audio
+ port map (
+ CLOCK_50 => clk,
+ KEY0 => reset_n,
+ I2C_SCLK => i2c_clk,
+ I2C_SDAT => i2c_dat,
+ AUD_ADCLRCK => aud_adclrck,
+ AUD_ADCDAT => aud_adcdat,
+ AUD_DACLRCK => aud_daclrck,
+ AUD_DACDAT => aud_dacdat,
+ AUD_XCK => aud_xck,
+ AUD_BCLK => aud_bclk,
+ LEDR => ledr);
+
+ clock_p : process
+ begin
+ clk <= '0';
+ wait for 10 ns;
+ clk <= '1';
+ wait for 10 ns;
+ if not simrun then
+ wait;
+ end if;
+ end process clock_p;
+
+ simrun <= false after 1 ms;
+
+ reset_p : process
+ begin
+ reset_n <= '0';
+ wait for 15 us;
+ reset_n <= '1';
+ wait;
+ end process reset_p;
+
+ aud_adcdat <= '1';
+
+end; -- architecture
diff --git a/src/t_de1_play.vhd b/src/t_de1_play.vhd
new file mode 100644
index 0000000..8a2b739
--- /dev/null
+++ b/src/t_de1_play.vhd
@@ -0,0 +1,100 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use ieee.math_real.all;
+
+entity t_de1_play is
+end t_de1_play;
+
+architecture tbench of t_de1_play is
+
+component de1_play is
+ port (
+ CLOCK_50 : in std_ulogic; -- 50 mhz clock
+ KEY : in std_ulogic_vector(1 downto 0); -- key(1..0)
+ I2C_SCLK : out std_ulogic;
+ I2C_SDAT : inout std_logic;
+ AUD_ADCLRCK : out std_ulogic;
+ AUD_ADCDAT : in std_ulogic;
+ AUD_DACLRCK : out std_ulogic;
+ AUD_DACDAT : out std_ulogic;
+ AUD_XCK : out std_ulogic;
+ AUD_BCLK : out std_ulogic;
+ LEDR : out std_ulogic_vector(4 downto 0); -- red LED(4..0)
+ LEDG : out std_ulogic_vector(1 downto 0) -- green LED(1..0)
+ );
+end component;
+
+ -- definition of a clock period
+ constant period : time := 10 ns;
+ -- switch for clock generator
+ signal clken_p : boolean := true;
+
+
+ signal clk_i : std_ulogic;
+ signal rst_ni : std_ulogic;
+ signal key : std_ulogic;
+ signal ledr : std_ulogic_vector(4 downto 0);
+
+ signal i2c_clk, i2c_dat : std_ulogic;
+ signal aud_adclrck, aud_adcdat, aud_daclrck, aud_dacdat, aud_xck, aud_bclk : std_ulogic;
+ signal phase : real := 0.0;
+ signal test_tone : real;
+ signal test_tone_quantized : signed(15 downto 0);
+ signal bit_count : integer range 0 to 31;
+
+begin
+
+ -- clock generation
+ clock_proc : process
+ begin
+ while clken_p loop
+ clk_i <= '0'; wait for period/2;
+ clk_i <= '1'; wait for period/2;
+ end loop;
+ wait;
+ end process;
+
+ -- initial reset, always necessary at the beginning of a simulation
+ reset : rst_ni <= '0', '1' AFTER period;
+
+ stimuli_p : process
+ begin
+ key <= '1';
+ wait until rst_ni = '1';
+ wait for 20*period;
+ key <= '0';
+ wait for 10*period;
+ key <= '1';
+ wait for 30*period;
+ clken_p <= false;
+ wait;
+ end process stimuli_p;
+
+
+ de1_play_i0 : de1_play
+ port map (
+ CLOCK_50 => clk_i,
+ KEY(0) => rst_ni,
+ KEY(1) => key,
+ I2C_SCLK => i2c_clk,
+ I2C_SDAT => i2c_dat,
+ AUD_ADCLRCK => aud_adclrck,
+ AUD_ADCDAT => aud_adcdat,
+ AUD_DACLRCK => aud_daclrck,
+ AUD_DACDAT => aud_dacdat,
+ AUD_XCK => aud_xck,
+ AUD_BCLK => aud_bclk,
+ LEDR => ledr);
+
+ aud_adcdat <= test_tone_quantized(bit_count mod 16);
+
+ -- Test tone generator for simulating the ADC from the audio codec
+ phase <= phase + 1.0/48.0 when rising_edge(aud_daclrck);
+ test_tone <= sin(2*3.14*phase);
+ test_tone_quantized <= to_signed(integer(test_tone * real(2**15-1)), 16);
+ bit_count <= 31 when falling_edge(aud_daclrck) else
+ 0 when bit_count = 0 else
+ bit_count - 1 when falling_edge(aud_bclk);
+
+end tbench;
diff --git a/src/t_de1_tone.vhd b/src/t_de1_tone.vhd
new file mode 100644
index 0000000..37d9e6b
--- /dev/null
+++ b/src/t_de1_tone.vhd
@@ -0,0 +1,108 @@
+--Copyright 2013 Friedrich Beckmann, Hochschule Augsburg
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+use ieee.math_real.all;
+
+entity t_de1_tone is
+end;
+
+architecture tbench of t_de1_tone is
+
+ component de1_tone is
+ port (
+ CLOCK_50 : in std_ulogic;
+ KEY0 : in std_ulogic;
+ I2C_SCLK : out std_ulogic;
+ I2C_SDAT : inout std_ulogic;
+ AUD_ADCLRCK : out std_ulogic;
+ AUD_ADCDAT : in std_ulogic;
+ AUD_DACLRCK : out std_ulogic;
+ AUD_DACDAT : out std_ulogic;
+ AUD_XCK : out std_ulogic;
+ AUD_BCLK : out std_ulogic;
+ SW : in std_ulogic_vector(9 downto 0);
+ LEDR : out std_ulogic_vector(9 downto 0)
+ );
+ end component;
+
+ signal clk, reset_n : std_ulogic;
+ signal ledr : std_ulogic_vector(9 downto 0);
+ signal i2c_clk, i2c_dat : std_ulogic;
+ signal key0 : std_ulogic;
+
+ signal aud_adclrck, aud_adcdat, aud_daclrck, aud_dacdat, aud_xck, aud_bclk : std_ulogic;
+
+ signal simrun : boolean := true;
+
+ signal phase : real := 0.0;
+ signal test_tone : real;
+ signal test_tone_quantized : signed(15 downto 0);
+ signal bit_count : integer range 0 to 31;
+ signal switches : std_ulogic_vector(9 downto 0);
+
+begin
+
+ de1_tone_i0 : de1_tone
+ port map (
+ CLOCK_50 => clk,
+ KEY0 => reset_n,
+ I2C_SCLK => i2c_clk,
+ I2C_SDAT => i2c_dat,
+ AUD_ADCLRCK => aud_adclrck,
+ AUD_ADCDAT => aud_adcdat,
+ AUD_DACLRCK => aud_daclrck,
+ AUD_DACDAT => aud_dacdat,
+ AUD_XCK => aud_xck,
+ AUD_BCLK => aud_bclk,
+ SW => switches,
+ LEDR => ledr);
+
+ clock_p : process
+ begin
+ clk <= '0';
+ wait for 10 ns;
+ clk <= '1';
+ wait for 10 ns;
+ if not simrun then
+ wait;
+ end if;
+ end process clock_p;
+
+ simrun <= false after 5 ms;
+
+ reset_p : process
+ begin
+ reset_n <= '0';
+ wait for 15 us;
+ reset_n <= '1';
+ wait;
+ end process reset_p;
+
+ aud_adcdat <= test_tone_quantized(bit_count mod 16);
+
+ -- Test tone generator for simulating the ADC from the audio codec
+ phase <= phase + 1.0/48.0 when rising_edge(aud_daclrck);
+ test_tone <= sin(2*3.14*phase);
+ test_tone_quantized <= to_signed(integer(test_tone * real(2**15-1)), 16);
+ bit_count <= 31 when falling_edge(aud_daclrck) else
+ 0 when bit_count = 0 else
+ bit_count - 1 when falling_edge(aud_bclk);
+
+
+
+end; -- architecture
diff --git a/src/t_falling_edge_detector.vhd b/src/t_falling_edge_detector.vhd
new file mode 100644
index 0000000..9fda089
--- /dev/null
+++ b/src/t_falling_edge_detector.vhd
@@ -0,0 +1,116 @@
+-------------------------------------------------------------------------------
+-- Module : t_falling_edge_detector
+-------------------------------------------------------------------------------
+-- Author : <haf@fh-augsburg.de>
+-- Company : University of Applied Sciences Augsburg
+-- Copyright (c) 2011 <haf@fh-augsburg.de>
+-------------------------------------------------------------------------------
+-- Description: Testbench for design "falling_edge_detector"
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+
+-------------------------------------------------------------------------------
+
+ENTITY t_falling_edge_detector IS
+END t_falling_edge_detector;
+
+-------------------------------------------------------------------------------
+
+ARCHITECTURE tbench OF t_falling_edge_detector IS
+
+ COMPONENT falling_edge_detector
+ PORT (
+ clk_i : IN std_ulogic;
+ rst_ni : IN std_ulogic;
+ x_i : IN std_ulogic;
+ fall_o : OUT std_ulogic);
+ END COMPONENT;
+
+ -- definition of a clock period
+ CONSTANT period : time := 10 ns;
+ -- switch for clock generator
+ SIGNAL clken_p : boolean := true;
+
+ -- component ports
+ SIGNAL clk_i : std_ulogic;
+ SIGNAL rst_ni : std_ulogic;
+ SIGNAL x_i : std_ulogic;
+ SIGNAL fall_o : std_ulogic;
+
+BEGIN -- tbench
+
+ -- component instantiation
+ MUV : falling_edge_detector
+ PORT MAP (
+ clk_i => clk_i,
+ rst_ni => rst_ni,
+ x_i => x_i,
+ fall_o => fall_o);
+
+ -- clock generation
+ clock_p : PROCESS
+ BEGIN
+ WHILE clken_p LOOP
+ clk_i <= '0'; WAIT FOR period/2;
+ clk_i <= '1'; WAIT FOR period/2;
+ END LOOP;
+ WAIT;
+ END PROCESS;
+
+ -- initial reset, always necessary at the beginning of a simulation
+ reset : rst_ni <= '0', '1' AFTER period;
+
+
+ stimuli_p : PROCESS
+ BEGIN
+
+ WAIT UNTIL rst_ni = '1'; -- wait until asynchronous reset ...
+ -- ... is deactivated
+ ---------------------------------------------------------------------------
+
+ -- create a low-active pulse over a no. of clock periods
+ ---------------------------------------------------------------------------
+ x_i <= '1'; -- assign a '1' to x_i
+ WAIT FOR period;
+
+ x_i <= '0'; -- set input to '0' ...
+ WAIT UNTIL rising_edge(clk_i);
+ WAIT UNTIL falling_edge(clk_i);
+ -- Observer: check, if fall_o is assigned to '1' for one clock period
+ ASSERT fall_o = '1' REPORT "Error: Expected fall_o = '1' !" SEVERITY failure;
+ WAIT UNTIL falling_edge(clk_i);
+ ASSERT fall_o = '0' REPORT "Error: Expected fall_o = '0' !" SEVERITY failure;
+ WAIT FOR 6 * period; -- ... for a no. of periods
+
+ x_i <= '1'; -- assign a '1' to form a
+ WAIT FOR 3 * period; -- low active input pulse
+ ---------------------------------------------------------------------------
+
+
+ -- add another low-active input pulse here ...
+
+
+
+
+
+
+
+
+
+ clken_p <= false; -- switch clock generator off
+
+ WAIT; -- suspend proces
+ END PROCESS;
+
+
+END tbench;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/t_mux2to1.vhd b/src/t_mux2to1.vhd
new file mode 100644
index 0000000..4d4d118
--- /dev/null
+++ b/src/t_mux2to1.vhd
@@ -0,0 +1,81 @@
+-------------------------------------------------------------------------------
+-- Module : t_mux2to1
+-------------------------------------------------------------------------------
+-- Author : <haf@fh-augsburg.de>
+-- Company : University of Applied Sciences Augsburg
+-- Copyright (c) 2011 <haf@fh-augsburg.de>
+-------------------------------------------------------------------------------
+-- Description: Testbench for design "mux2to1"
+-------------------------------------------------------------------------------
+-- Revisions : see end of file
+-------------------------------------------------------------------------------
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+
+-------------------------------------------------------------------------------
+
+ENTITY t_mux2to1 IS
+END t_mux2to1;
+
+-------------------------------------------------------------------------------
+
+ARCHITECTURE tbench OF t_mux2to1 IS
+
+ COMPONENT mux2to1
+ PORT (
+ a_i : IN std_ulogic;
+ b_i : IN std_ulogic;
+ sel_i : IN std_ulogic;
+ y_o : OUT std_ulogic);
+ END COMPONENT;
+
+ -- definition of a clock period
+ CONSTANT period : time := 10 ns;
+
+ -- component ports
+ SIGNAL a_i : std_ulogic;
+ SIGNAL b_i : std_ulogic;
+ SIGNAL sel_i : std_ulogic;
+ SIGNAL y_o : std_ulogic;
+
+BEGIN -- tbench
+
+ -- component instantiation
+ MUV : mux2to1
+ PORT MAP (
+ a_i => a_i,
+ b_i => b_i,
+ sel_i => sel_i,
+ y_o => y_o);
+
+ stimuli_p : PROCESS
+
+ BEGIN
+ a_i <= '0'; -- set a value to input a_i
+ b_i <= '0'; -- set a value to input b_i
+ sel_i <= '0'; -- set a value to input ci_i
+ WAIT FOR period; -- values are assigned here
+
+ a_i <= '1'; -- change value of a_i
+ WAIT FOR period;
+
+ a_i <= '0'; -- change value of a_i
+ b_i <= '1'; -- change value of b_i
+ WAIT FOR period;
+
+
+ -- add the missing stimuli here ...
+
+
+
+ WAIT;
+ END PROCESS;
+
+END tbench;
+
+-------------------------------------------------------------------------------
+-- Revisions:
+-- ----------
+-- $Id:$
+-------------------------------------------------------------------------------
diff --git a/src/tone_rtl.vhd b/src/tone_rtl.vhd
new file mode 100644
index 0000000..815ebb8
--- /dev/null
+++ b/src/tone_rtl.vhd
@@ -0,0 +1,19 @@
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity tone is
+ port (clk : in std_ulogic;
+ rst_n : in std_ulogic;
+ switches_i : in std_ulogic_vector(9 downto 0);
+ dv_i : in std_ulogic;
+ audio_i : in std_ulogic_vector(15 downto 0);
+ audio_o : out std_ulogic_vector(15 downto 0));
+end entity;
+
+architecture rtl of tone is
+
+begin
+
+audio_o <= audio_i when rising_edge(clk) and dv_i = '1';
+
+end architecture rtl;