From 597466f52544f11944d85cf1b3b4f85f9e0845a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bertrand=20N=C3=A9ron?= <bneron@pasteur.fr> Date: Sun, 23 Nov 2014 22:50:48 +0100 Subject: [PATCH] add pseudocode for most of exercises adapt solutions to use functions as they are view earlier externalize code to be dowloadable for student --- source/Collection_Data_Types.rst | 483 +++++++++++------- source/Control_Flow_Statements.rst | 224 +++++--- source/Data_Types.rst | 2 +- ..._Functions.rst => Dive_into_Functions.rst} | 10 +- source/Modules_and_Packages.rst | 19 +- source/_static/code/codons.py | 10 + source/_static/code/codons_itertools.py | 6 + source/_static/code/enzyme_1.py | 12 + source/_static/code/kmer.py | 16 +- source/_static/code/kmer_2.py | 17 + source/_static/code/restriction.py | 50 ++ source/_static/code/rev_comp.py | 15 + source/_static/code/rev_comp2.py | 17 + source/_static/code/similarity.py | 35 +- source/_static/code/translate.py | 18 +- source/_static/code/uniqify.py | 6 + source/_static/data/similarity_matrix | 5 + .../figs/augmented_assignment_int2.png | Bin 0 -> 29487 bytes .../figs/augmented_assignment_list2.png | Bin 0 -> 35453 bytes source/index.rst | 2 +- 20 files changed, 648 insertions(+), 299 deletions(-) rename source/{Creating_and_Calling_Functions.rst => Dive_into_Functions.rst} (97%) create mode 100644 source/_static/code/codons.py create mode 100644 source/_static/code/codons_itertools.py create mode 100644 source/_static/code/enzyme_1.py create mode 100644 source/_static/code/kmer_2.py create mode 100644 source/_static/code/restriction.py create mode 100644 source/_static/code/rev_comp.py create mode 100644 source/_static/code/rev_comp2.py create mode 100644 source/_static/code/uniqify.py create mode 100644 source/_static/data/similarity_matrix create mode 100644 source/_static/figs/augmented_assignment_int2.png create mode 100644 source/_static/figs/augmented_assignment_list2.png diff --git a/source/Collection_Data_Types.rst b/source/Collection_Data_Types.rst index e9f011a..1ba09e1 100644 --- a/source/Collection_Data_Types.rst +++ b/source/Collection_Data_Types.rst @@ -61,6 +61,38 @@ We can observe this using *id()* which give the memory adress of an object. This in ``a operator= b`` python looks up ``a`` ’s value only once, so it is potentially faster than the ``a = a operator b``. + +compare :: + + x = 3 + y = x + y += 3 + x = ? + y = ? + + +.. figure:: _static/figs/augmented_assignment_int2.png + :width: 400px + :alt: augmented_assignment + :figclass: align-center + + +and :: + + x = [1,2] + y = x + y += [3,4] + x = ? + y = ? + + +.. figure:: _static/figs/augmented_assignment_list2.png + :width: 400px + :alt: list extend + :figclass: align-center + + + Exercise -------- @@ -142,15 +174,51 @@ from the list l = [1, 2, 3, 4, 5, 6, 7, 8, 9] generate 2 lists l1 containing all Exercise -------- -generate a list containing all codons. :: +generate a list containing all codons. + +pseudocode: +""""""""""" + +| *function all_codons()* +| *all_codons <- empty list* +| *let varying the first base* +| *for each first base let varying the second base* +| *for each combination first base, second base let varying the third base* +| *add the concatenation base 1 base 2 base 3 to all_codons* +| *return all_codons* + +first implementation: +""""""""""""""""""""" +.. literalinclude:: _static/code/codons.py + :linenos: + :language: python + +:: + + python -i codons.py + >>> codons = all_codons() + +:download:`codons.py <_static/code/codons.py>` . + +second implementation: +"""""""""""""""""""""" + +Mathematically speaking the generation of all codons can be the cartesiens product +between 3 vectors 'acgt'. +In python there is a function to do that in ``itertools module``: `https://docs.python.org/2/library/itertools.html#itertools.product <product>`_ + + +.. literalinclude:: _static/code/codons_itertools.py + :linenos: + :language: python + +:: + + python -i codons.py + >>> codons = all_codons() - bases = 'acgt' - codons = [] - for a in bases: - for b in bases: - for c in bases: - codon = a + b + c - codons.append(codon) +:download:`codons_itertools.py <_static/code/codons_itertools.py>` . + Exercise -------- @@ -162,175 +230,213 @@ For example: :: >>> uniqify(l) >>> [1,2,3,5] #is one of the solutions -solution :: - >>> list(set(l)) +pseudocode: +""""""""""" +| *function uniqify(l)* +| *uniq <- empty list* +| *for each element of l* +| *add element if is not in uniq* +| *return uniq* -Exercise --------- +implementation: +""""""""""""""" -let the following enzymes collection: :: - - import collections - RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end") +.. literalinclude:: _static/code/uniqify.py + :linenos: + :language: python - ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky") - ecor5 = RestrictEnzyme("EcoRV", "Ecoli restriction enzime V", "gatatc", 3, "blunt") - bamh1 = RestrictEnzyme("BamHI", "type II restriction endonuclease from Bacillus amyloliquefaciens ", "ggatcc", 1, "sticky") - hind3 = RestrictEnzyme("HindIII", "type II site-specific nuclease from Haemophilus influenzae", "aagctt", 1 , "sticky") - taq1 = RestrictEnzyme("TaqI", "Thermus aquaticus", "tcga", 1 , "sticky") - not1 = RestrictEnzyme("NotI", "Nocardia otitidis", "gcggccgc", 2 , "sticky") - sau3a1 = RestrictEnzyme("Sau3aI", "Staphylococcus aureus", "gatc", 0 , "sticky") - hae3 = RestrictEnzyme("HaeIII", "Haemophilus aegyptius", "ggcc", 2 , "blunt") - sma1 = RestrictEnzyme("SmaI", "Serratia marcescens", "cccggg", 3 , "blunt") +:: -and the 2 dna fragments: :: + >>> l=[1,2,3,2,3,4,5,1,2,3,3,2,7,8,9] + >>> uniqify(l) + [1, 2, 3, 4, 5, 7, 8, 9] - dna_1 = """tcgcgcaacgtcgcctacatctcaagattcagcgccgagatccccgggggttgagcgatccccgtcagttggcgtgaattcag - cagcagcgcaccccgggcgtagaattccagttgcagataatagctgatttagttaacttggatcacagaagcttccaga - ccaccgtatggatcccaacgcactgttacggatccaattcgtacgtttggggtgatttgattcccgctgcctgccagg""" +:download:`codons_itertools.py <_static/code/codons_itertools.py>` . - dna_2 = """gagcatgagcggaattctgcatagcgcaagaatgcggccgcttagagcgatgctgccctaaactctatgcagcgggcgtgagg - attcagtggcttcagaattcctcccgggagaagctgaatagtgaaacgattgaggtgttgtggtgaaccgagtaag - agcagcttaaatcggagagaattccatttactggccagggtaagagttttggtaaatatatagtgatatctggcttg""" +second implementation: +"""""""""""""""""""""" -| which enzymes cut the dna_1 ? -| the dna_2 ? -| the dna_1 but not the dna_2? +The problem with the first implementation come from the line 4. +Remember that the membership operator uses a linear search for list, which can be slow for very large collections. +If we plan to use ``uniqify`` with large list we should find a better algorithm. +In the specification we can read that uniqify can work *regardless the order of the resulting list*. +So we can use the specifycity of set :: -:: + + >>> list(set(l)) - dna_1 = dna_1.replace('\n', '') - dans_2 = dna_2.replace('\n', '') -algorithm 1 :: +Exercise +-------- - enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1] - digest_1 = [] - for enz in enzymes: - if enz.sequence in dna_1: - digest_1.append(enz) +We need to compute the occurence of all kmers of a given lenght present in a sequence. -algorithm 2 we can determine the position of the site :: - - enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1] - digest_1 = [] - for enz in enzymes: - pos = dna_1.find(enz.sequence) - if pos != -1: - digest_1.append(enz) +Below we propose 2 algorithms. +pseudo code 1 +""""""""""""" -with these algorithms we find if an enzyme cut the dna but we cannot find all cuts in the dna for an enzyme. :: +| *function get_kmer_occurences(seq, kmer_len)* +| *all_kmers <- generate all possible kmer of kmer_len* +| *occurences <- 0* +| *for each kmer in all_kmers* +| *count occurence of kmer* +| *store occurence* + +pseudo code 2 +""""""""""""" + +| *function get_kmer_occurences(seq, kmer_len)* +| *all_kmers <- empty* +| *from i = 0 to sequence length - kmer_len* +| *kmer <- kmer startin at pos i im sequence* +| *increase by of occurence of kmer* + - enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1] - digest_1 = [] - for enz in enzymes: - print enz.name, dna_1.count(enz.sequence) +.. note:: -the latter algorithm display the number of occurence of each enzyme, But we cannot determine the position of every sites. -We will see howt to do this later. + Computer scientists typically measure an algorithm’s efficiency in terms of its worst-case running time, + which is the largest amount of time an algorithm can take given the most difficult input of a fixed size. + The advantage to considering the worst case running time is that we are guaranteed that our algorithm + will never behave worse than our worst-case estimate. + + Big-O notation compactly describes the running time of an algorithm. + For example, if your algorithm for sorting an array of n numbers takes roughly n2 operations for the most difficult dataset, + then we say that the running time of your algorithm is O(n2). In reality, depending on your implementation, it may be use any number of operations, + such as 1.5n2, n2 + n + 2, or 0.5n2 + 1; all these algorithms are O(n2) because big-O notation only cares about the term that grows the fastest with + respect to the size of the input. This is because as n grows very large, the difference in behavior between two O(n2) functions, + like 999 · n2 and n2 + 3n + 9999999, is negligible when compared to the behavior of functions from different classes, + say O(n2) and O(n6). Of course, we would prefer an algorithm requiring 1/2 · n2 steps to an algorithm requiring 1000 · n2 steps. + + When we write that the running time of an algorithm is O(n2), we technically mean that it does not grow faster than a function with a + leading term of c · n2, for some constant c. Formally, a function f(n) is Big-O of function g(n), or O(g(n)), when f(n) ≤ c · g(n) for some + constant c and sufficiently large n. + + For more on Big-O notation, see A `http://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/Beginner's <Guide to Big-O Notation>`_. + +Compare the pseudocode of each of them and implement the fastest one. :: + """gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag + gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg + aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg + atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc + agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg + gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa + ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc + tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac + acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca""" -Exercise --------- -From a list return a new list without any duplicate, but keeping the order of items. -For example: :: - >>> l = [5,2,3,2,2,3,5,1] - >>> uniqify_with_order(l) - >>> [5,2,3,1] +In the first alogrithm. -solution :: +| we first compute all kmers we generate 4\ :sup:`kmer length` +| then we count the occurence of each kmer in the sequence +| so for each kmer we read all the sequence so the algorith is in O( 4\ :sup:`kmer length` * ``sequence length``) - >>> uniq = [] - >>> for item in l: - >>> if item not in uniq: - >>> uniq.append(item) +| In the secon algorithm we read the sequence only once +| So the algorithm is in O(sequence length) -Exercise --------- +Compute the 6 mers occurences of the sequence above, and print each 6mer and it's occurence one per line. -list and count occurences of every 3mers in the following sequence :: +.. literalinclude:: _static/code/kmer.py + :linenos: + :language: python - s = """gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag - gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg - aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg - atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc - agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg - gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa - ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc - tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac - acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca""" +:: -and finally print the results one 3mer and it's occurence per line. + >>> s = """"gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag + ... gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg + ... aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg + ... atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc + ... agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg + ... gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa + ... ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc + ... tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac + ... acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca""" + >>> s = s.replace('\n', '') + >>> kmers = get_kmer_occurences(s, 6) + >>> for kmer in kmers: + >>> print kmer[0], '..', kmer[1] + gcagag .. 2 + aacttc .. 1 + gcaact .. 1 + aaatat .. 2 + + +:download:`kmer.py <_static/code/kmer.py>` . -write first the pseudocode, then implement it. bonus: -print the kmer by incresing occurences. +"""""" -solution :: +Print the kmers by ordered by occurences. - s = s.replace('\n', '') - kmers = {} - # range exclude the last value range(3) -> 0, 1 ,2 - # so we nned to go to len(s) minus trimer + 1 to include the - # last base - for i in range(len(s) - 3 +1): - kmer = s[i:i+3] - kmers[kmer] = kmers.get(kmer, 0) + 1 +| see `https://docs.python.org/2/library/stdtypes.html#mutable-sequence-types <sort>`_ +| see `https://docs.python.org/2/library/operator.html#operator.itemgetter <operator.itemgetter>`_ - for kmer, occurence in kmers.items(): - print kmer, " = ", occurence -we can use also a defaultdict: :: +.. literalinclude:: _static/code/kmer_2.py + :linenos: + :language: python - import collections - - s = s.replace('\n', '') - kmers = collection.defaultdict(int) - for i in range(len(s) - 2): - kmer = s[i:i+3] - kmers[kmer] += 1 - -solution bonus :: +:: - list_of_kmers = kmers.items() - from operator import itemgetter - list_of_kmers.sort(key=itemgetter(1)) - for kmer, occurence in list_of_kmers: - print kmer, " = ", occurence + >>> s = """"gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag + ... gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg + ... aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg + ... atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc + ... agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg + ... gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa + ... ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc + ... tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac + ... acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca""" + >>> s = s.replace('\n', '') + >>> kmers = get_kmer_occurences(s, 6) + >>> for kmer, occ in kmers: + >>> print kmer, '..', occ + cacagg .. 4 + aggaaa .. 4 + ttctga .. 3 + ccagtg .. 3 + + +:download:`kmer_2.py <_static/code/kmer_2.py>` . - solution bonus :: - list_of_kmers = kmers.items() - list_of_kmers.sort(key = lambda kmer: kmer[1]) - for kmer, occurence in list_of_kmers: - print kmer, " = ", occurence - - Exercise -------- -compute the reversed complement of the following sequence: :: +| Write a function which take a sequence as parameter and return it's reversed complement. +| Write the pseudocode before to propose an implementation. + +pseudocode: +""""""""""" - seq = 'acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca' +| *function reverse_comp(sequence)* +| *complement <- establish a correpondance and each base and its complement* +| *rev_seq <- revert the sequence* +| *rev_comp <- empty* +| *for each nt of rev_seq* +| *concatenate nt complement to rev_comp* +| *return rev_comp - base_comp = { 'a' : 't', - 'c' : 'g', - 'g' : 'c', - 't' : 'a'} - complement = '' - for base in seq: - complement += base_comp[base] +.. literalinclude:: _static/code/rev_comp2.py + :linenos: + :language: python - reverse_comp = complement[::-1] - print reverse_comp +:: + >>> from rev_comp import rev_comp + >>> + >>> seq = 'acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca' + >>> print rev_comp(seq) tgtgttgcgctcacgaaccagaccaagagcatccactggactttctcctctcagagcccactggccagccatgttgccgt + +:download:`rev_comp.py <_static/code/rev_comp.py>` . + other solution """""""""""""" @@ -346,18 +452,86 @@ the characters to change and their new values is made in funtion of thier positi the first character of the first string will be replaced by the first character of the second string, the second character of the first string will be replaced by the second character of the second string, on so on. So we can write the reverse complement without loop. + +.. literalinclude:: _static/code/rev_comp2.py + :linenos: + :language: python :: + >>> from rev_comp2 import rev_comp + >>> + >>> seq = 'acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca' + >>> print rev_comp(seq) + tgtgttgcgctcacgaaccagaccaagagcatccactggactttctcctctcagagcccactggccagccatgttgccgt + +:download:`rev_comp2.py <_static/code/rev_comp2.py>` . - from string import maketrans +Exercise +-------- + +let the following enzymes collection: :: + + import collections + RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end") + + ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky") + ecor5 = RestrictEnzyme("EcoRV", "Ecoli restriction enzime V", "gatatc", 3, "blunt") + bamh1 = RestrictEnzyme("BamHI", "type II restriction endonuclease from Bacillus amyloliquefaciens ", "ggatcc", 1, "sticky") + hind3 = RestrictEnzyme("HindIII", "type II site-specific nuclease from Haemophilus influenzae", "aagctt", 1 , "sticky") + taq1 = RestrictEnzyme("TaqI", "Thermus aquaticus", "tcga", 1 , "sticky") + not1 = RestrictEnzyme("NotI", "Nocardia otitidis", "gcggccgc", 2 , "sticky") + sau3a1 = RestrictEnzyme("Sau3aI", "Staphylococcus aureus", "gatc", 0 , "sticky") + hae3 = RestrictEnzyme("HaeIII", "Haemophilus aegyptius", "ggcc", 2 , "blunt") + sma1 = RestrictEnzyme("SmaI", "Serratia marcescens", "cccggg", 3 , "blunt") + +and the 2 dna fragments: :: + + dna_1 = """tcgcgcaacgtcgcctacatctcaagattcagcgccgagatccccgggggttgagcgatccccgtcagttggcgtgaattcag + cagcagcgcaccccgggcgtagaattccagttgcagataatagctgatttagttaacttggatcacagaagcttccaga + ccaccgtatggatcccaacgcactgttacggatccaattcgtacgtttggggtgatttgattcccgctgcctgccagg""" + + dna_2 = """gagcatgagcggaattctgcatagcgcaagaatgcggccgcttagagcgatgctgccctaaactctatgcagcgggcgtgagg + attcagtggcttcagaattcctcccgggagaagctgaatagtgaaacgattgaggtgttgtggtgaaccgagtaag + agcagcttaaatcggagagaattccatttactggccagggtaagagttttggtaaatatatagtgatatctggcttg""" + +| which enzymes cut the dna_1 ? +| the dna_2 ? +| the dna_1 but not the dna_2? + + +#. Write a function *seq_one_line* which take a multi lines sequence and return a sequence in one line. +#. Write a function *enz_filter* which take a sequence and a list of enzymes and return a new list containing + the enzymes which are a binding site in the sequence +#. use the functions above to compute the enzymes which cut the dna_1 + apply the same functions to compute the enzymes which cut the dna_2 + compute the difference between the enzymes which cut the dna_1 and enzymes which cut the dna_2 + +.. literalinclude:: _static/code/enzymes_1.py + :linenos: + :language: python + +:: + from enzyme_1 import * + + enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1] + dna_1 = one_line(dna_1) + dans_2 = one_line(dna_2) + enz_1 = enz_filter(enzymes, dna_1) + enz_2 = enz_filter(enzymes, dna_2) + enz1_only = set(enz_1) - set(enz_2) + +:download:`enzymes_1.py <_static/code/enzymes_1.py>` . + +with this algorithm we find if an enzyme cut the dna but we cannot find all cuts in the dna for an enzyme. :: + + enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1] + digest_1 = [] + for enz in enzymes: + print enz.name, dna_1.count(enz.sequence) + +the latter algorithm display the number of occurence of each enzyme, But we cannot determine the position of every sites. +We will see how to do this later. - #first we reverse the sequence - rev_comp = seq[::-1] - #then we complement it - nucleotide = 'ATCG' - complement = 'TAGC' - rosetta_stone = maketrans(nucleotide, complement) - rev_comp = rev_comp.translate(rosetta_stone) Exercise @@ -387,36 +561,3 @@ solution :: inverted_d = {v : k for k, v in d.items()} -Exercise --------- - -We assume that we have a phylogenic tree of mammals represented as nested lists. :: - - mammals = ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ] - -We want to work on the subtree of apes (Gibbon, Orang Utan, Gorilla, Chimp, Human) - -* extract the this subtree in a new tree -* then insert 'Bonobo' at the same level of Chimp we want to obtanin something like this :[chimp, bonobo], Human] - -what's append on mammals? explain the result. :: - - import copy - - mammals = ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ] - apes = copy.copy(mammals[1]) - apes [1][1][1] = [['Chimp', 'Bonobo'], 'Human'] - print mammals - ['Bovine', ['Gibbon', ['Orang Utan', ['Gorilla', ['Chimp', 'Human']]]], 'Mouse' ] - -what we should do to work with apes without modify mammals? - -when we extract apes form mammals we did a shallow copy of mammals. tha mean we create a new list but each item in mammals -are not copy. when we modify apes we mutate an element of apes which was also referenced in mammals so mammals is modified to. -This is what we call a side effect. To avoid that we should use deepcopy from module copy. -to create apes we should write: :: - - apes = copy.deepcopy(mammals[1]) - -deepcopy not only copy the list but make also a copy of each items of list recursively. - diff --git a/source/Control_Flow_Statements.rst b/source/Control_Flow_Statements.rst index 026d9e5..1ec4c1f 100644 --- a/source/Control_Flow_Statements.rst +++ b/source/Control_Flow_Statements.rst @@ -11,7 +11,6 @@ Exercises Exercise -------- -Calculates the 10 first number of the Fibonacci sequence . The Fibonacci sequence are the numbers in the following integer sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... @@ -24,35 +23,162 @@ The fibonacci suite can be defined as following: | | F\ :sub:`n` = F\ :sub:`n-1` + F\ :sub:`n-2` +Write a function which take an integer ``n`` as parameter +and returns a list containing the ``n`` first number of the Fibonacci sequence. + + .. literalinclude:: _static/code/fibonacci_iteration.py :linenos: :language: python - +:download:`fibonacci_iteration.py <_static/code/fibonacci_iteration.py>` . We will see another way more elegant to implement the fibonacci suite in :ref:`Advance Programming Techniques` section. + + Exercise -------- -display the largest element in list (containing float or integer only)?:: +Reimplement your own function max (my_max). +This function will take a list or tuple of float or integer and +returns the largest element? - l = [1,2,3,4,58,9] - higest = l[0] - for i in l: - if i > highest: - highest = i - print highest - +Write the pseudocode before to propose an implementation. + +pseudocode +^^^^^^^^^^ + +| *function my_max(l)* +| *max <- first elt of l* +| *for each elts of l* +| *if elt is > max* +| *max <- elt* +| *return max* + +implementation +^^^^^^^^^^^^^^ + +:: + + def my_max(seq): + """ + return the maximum value in a sequence + work only with integer or float + """ + higest = seq[0] + for i in seq: + if i > highest: + highest = i + return highest + + l = [1,2,3,4,58,9] + print my_max(l) + 58 + + Exercise -------- -let the following enzymes collection: :: +| We want to establish a restriction map of a sequence. +| But we will do this step by step. +| and reuse the enzymes used in previous chapter: + +* create a function that take a sequence and an enzyme as parameter and return + the position of first binding sites. + (write the pseudocode) + +**pseudocode** + +| *function one_enz_binding_site(dna, enzyme)* +| *if enzyme binding site is substring of dna* +| *return of first position of substring in dna* + +**implementation** + +.. literalinclude:: _static/code/restriction.py + :linenos: + :lines: 1-8 + :language: python + +* improve the previous function to return all positions of binding sites + +**pseudocode of first algorithm** + +| *function one_enz_binding_sites(dna, enzyme)* +| *positions <- empty* +| *if enzyme binding site is substring of dna* +| *add the position of the first substring in dna in positions* +| *positions <- find binding_sites in rest of dna sequence* +| *return positions* + +**implementation** + +.. literalinclude:: _static/code/restriction.py + :linenos: + :lines: 9-16 + :language: python + +**pseudocode of second algorithm** + +| *function one_enz_binding_sites(dna, enzyme)* +| *positions <- empty* +| *find first position of binding site in dna* +| *while we find binding site in dna* +| *add position of binding site to positions* +| *find first position of binding site in dna in rest of dna* +| *return positions* + +**implementation** + +.. literalinclude:: _static/code/restriction.py + :linenos: + :lines: 19-25 + :language: python + + +search all positions of Ecor1 binding sites in dna_1 + +:: import collections RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end") ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky") + + dna_1 = """tcgcgcaacgtcgcctacatctcaagattcagcgccgagatccccgggggttgagcgatccccgtcagttggcgtgaattcag + cagcagcgcaccccgggcgtagaattccagttgcagataatagctgatttagttaacttggatcacagaagcttccaga + ccaccgtatggatcccaacgcactgttacggatccaattcgtacgtttggggtgatttgattcccgctgcctgccagg""" + + +* generalize the binding sites function to take a list of enzymes and return a list of tuple (enzyme name, position) + +**pseudocode** + +| *function binding_sites(dna, set of enzymes)* +| *positions <- empty* +| *for each enzyme in enzymes* +| *pos <- one_enz_binding_sites(dna, enzyme)* +| *pos <- for each position create a tuple enzyme name, position* +| *positions <- pos* +| *return positions* + +**implementation** + +in bonus we can try to sort the list in the order of the position of the binding sites like this: +[('Sau3aI', 38), ('SmaI', 42), ('Sau3aI', 56), ('EcoRI', 75), ... + +.. literalinclude:: _static/code/restriction.py + :linenos: + :lines: 27- + :language: python + +:: + + import collections + RestrictEnzyme = collections.namedtuple("RestrictEnzyme", "name comment sequence cut end") + + ecor1 = RestrictEnzyme("EcoRI", "Ecoli restriction enzime I", "gaattc", 1, "sticky") ecor5 = RestrictEnzyme("EcoRV", "Ecoli restriction enzime V", "gatatc", 3, "blunt") bamh1 = RestrictEnzyme("BamHI", "type II restriction endonuclease from Bacillus amyloliquefaciens ", "ggatcc", 1, "sticky") hind3 = RestrictEnzyme("HindIII", "type II site-specific nuclease from Haemophilus influenzae", "aagctt", 1 , "sticky") @@ -72,77 +198,17 @@ and the 2 dna fragments: :: attcagtggcttcagaattcctcccgggagaagctgaatagtgaaacgattgaggtgttgtggtgaaccgagtaag agcagcttaaatcggagagaattccatttactggccagggtaagagttttggtaaatatatagtgatatctggcttg""" -| which enzymes cut the dna_1 get the name of the enzymes and all their positions of binding site? -| the dna_2 ? -| the dna_1 but not the dna_2? - - -:: + enzymes= (ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1) + binding_sites(dna_1, enzymes) + [('Sau3aI', 38), ('SmaI', 42), ('Sau3aI', 56), ('EcoRI', 75), ('SmaI', 95), ('EcoRI', 105), + ('Sau3aI', 144), ('HindIII', 152), ('BamHI', 173), ('Sau3aI', 174), ('BamHI', 193), ('Sau3aI', 194)] - dna_1 = dna_1.replace('\n', '') - dans_2 = dna_2.replace('\n', '') + binding_sites(dna_2, enzymes) + [('EcoRI', 11), ('NotI', 33), ('HaeIII', 35), ('EcoRI', 98), ('SmaI', 106), + ('EcoRI', 179), ('HaeIII', 193), ('EcoRV', 225)] - enzymes = [ecor1, ecor5, bamh1, hind3, taq1, not1, sau3a1, hae3, sma1] - digest_1 = [] - for enz in enzymes: - pos = dna_1.find(enz.sequence) - if pos != -1: - digest_1.append(enz) - -with this first algorithm we find if an enzyme cut the dna but we cannot find all cuts in the dna for an enzyme. -If we find a cutting site, we must search again starting at the first nucleotid after the begining of the match -until the end of the the dna, for this we use the start parameter of the find function, and so on. -As we don't know how many loop we need to scan the dna until the end we use a ``while`` loop testing for the presence of a cutting site.:: - - digest_1 = [] - for enz in enzymes: - pos = dna_1.find(enz.sequence) - while pos != -1: - digest_1.append(enz) - pos = dna_1.find(enz.sequence, pos + 1) - - digest_2 = [] - for enz in enzymes: - pos = dna_2.find(enz.sequence) - while pos != -1: - digest_2.append(enz) - pos = dna_2.find(enz.sequence, pos + 1) - - cut_dna_1 = set(digest_1) - cut_dna_2 = set(digest_2) - cut_dna_1_not_dna_2 = cut_dna_1 - cut_dna_2 - - -but we want also the position, for instance to compute the fragments of dna. :: - - digest_1 = [] - for enz in enzymes: - pos = dna_1.find(enz.sequence) - while pos != -1: - digest_1.append((enz, pos)) - pos = dna_1.find(enz.sequence, pos + 1) - - #if we want to sort the list in function of their positions in the sequence - from operator import itemgetter - digest_1.sort(key=itemgetter(1)) - print [(e.name, pos) for e, pos in digest_1] +:download:`restriction.py <_static/code/restriction.py>` . - - digest_2 = [] - for enz in enzymes: - pos = dna_2.find(enz.sequence) - while pos != -1: - digest_2.append((enz, pos)) - pos = dna_2.find(enz.sequence, pos + 1) - - print "list of all enzymes cutting dna 1 and theirs position in dna1 :", [(e.name, pos) for e, pos in digest_1] - print "list of all enzymes cutting dna 2 and theirs position in dna2 :", [(e.name, pos) for e, pos in digest_2] - - cut_dna_1 = set([e.name for e, pos in digest_1]) - cut_dna_2 = set([e.name for e, pos in digest_2]) - - cut_dna_1_not_dna_2 = cut_dna_1 - cut_dna_2 - Exercise -------- diff --git a/source/Data_Types.rst b/source/Data_Types.rst index 9fd039c..65de161 100644 --- a/source/Data_Types.rst +++ b/source/Data_Types.rst @@ -195,7 +195,7 @@ without header or any non sequence characters pseudocode: -| *fasta_to_one_line(seq)* +| *function fasta_to_one_line(seq)* | *header_end_at <- find the first return line character* | *raw_seq <- remove header from sequence* | *raw_seq <- remove non sequence chars* diff --git a/source/Creating_and_Calling_Functions.rst b/source/Dive_into_Functions.rst similarity index 97% rename from source/Creating_and_Calling_Functions.rst rename to source/Dive_into_Functions.rst index 2d1d744..34a4446 100644 --- a/source/Creating_and_Calling_Functions.rst +++ b/source/Dive_into_Functions.rst @@ -1,8 +1,8 @@ -.. _Creating_and_Calling_Functions: +.. _Dive_into_Functions: -****************************** -Creating and Calling Functions -****************************** +******************* +Dive into Functions +******************* Exercises ========= @@ -105,7 +105,7 @@ As soon as you make an assignment to a variable in a scope, that variable becomes local to that scope and shadows any similarly named variable in the outer scope. even if the assignment appear later in code. Here *x = y* make *x* as local variable whatever you are in func. -so at line *y = x + 2* we try to use the loca variable *x* but we have to asign it a value (it is done later) so +so at line *y = x + 2* we try to use the local variable *x* but we have to asign it a value (it is done later) so Python raise an UnboundLocalError (`see python faq for details <https://docs.python.org/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value>`_) .. container:: clearer diff --git a/source/Modules_and_Packages.rst b/source/Modules_and_Packages.rst index b3e1718..53734b9 100644 --- a/source/Modules_and_Packages.rst +++ b/source/Modules_and_Packages.rst @@ -27,22 +27,13 @@ Exercise Write a program that calculates the similarity of 2 RNA sequences. -* To compute the simalirity you need to parse a file containing the similarity matrix. +* To compute the simalirity you need to parse a file containing the :download:`similarity matrix <_static/data/similarity_matrix>`. + **Hint**: use the module containing the functions that handle a matrix from previous chapter. + put this matrix.py file in a directory named "my_python_lib" in your home or Desktop + and import it in your current program (the similarity script must be placed elsewhere). * The similarity of the 2 sequences is the sum of base similarities. - so you have to compare the first base of to sequence and use the matrix to get the similarity + so you have to compare the first base of two sequences and use the matrix to get the similarity from the similarity table, on so on for all bases then sum these similarities. - -.. note:: - as we don't yet see how to read a file, we provide a list of strings that represents the file - as we can get them if we read that file. - -:: - - lines = iter([' A G C U\n' - 'A 1.0 0.5 0.0 0.0\n', - 'G 0.5 1.0 0.0 0.0\n', - 'C 0.0 0.0 1.0 0.5\n', - 'U 0.0 0.0 0.5 1.0\n']) .. literalinclude:: _static/code/similarity.py :linenos: diff --git a/source/_static/code/codons.py b/source/_static/code/codons.py new file mode 100644 index 0000000..8973486 --- /dev/null +++ b/source/_static/code/codons.py @@ -0,0 +1,10 @@ + +def all_codons(): + all_codons = [] + alphabet = 'acgt' + for base_1 in alphabet: + for base_2 in alphabet: + for base_3 in alphabet: + codon = base_1 + base_2 + base_3 + all_codons.append(codon) + return all_codons \ No newline at end of file diff --git a/source/_static/code/codons_itertools.py b/source/_static/code/codons_itertools.py new file mode 100644 index 0000000..317d383 --- /dev/null +++ b/source/_static/code/codons_itertools.py @@ -0,0 +1,6 @@ +from itertools import product + +def all_codons(): + alphabet = 'acgt' + all_codons = [ ''.join(codon) for codon in product(alphabet, repeat = 3)] + return all_codons \ No newline at end of file diff --git a/source/_static/code/enzyme_1.py b/source/_static/code/enzyme_1.py new file mode 100644 index 0000000..09667e3 --- /dev/null +++ b/source/_static/code/enzyme_1.py @@ -0,0 +1,12 @@ + + +def one_line(seq): + return seq.replace('\n', '') + +def enz_filter(enzymes, dna): + cuting_enz = [] + for enz in enzymes: + if enz.sequence in dna: + cuting_enz.append(enz) + return cuting_enz + diff --git a/source/_static/code/kmer.py b/source/_static/code/kmer.py index d1e11b6..02dc134 100644 --- a/source/_static/code/kmer.py +++ b/source/_static/code/kmer.py @@ -1,8 +1,12 @@ -import collections -def kmer(sequence, k): - kmers = collection.defaultdict(int) - for i in range(len(sequence) - k): - kmer = sequence[i:i + k] +def get_kmer_occurences(seq, kmer_len): + """ + return a list of tuple + each tuple contains a kmers present in seq and its occurence + """ + kmers = {} + stop = len(seq) - kmer_len + for i in range(stop + 1): + kmer = s[i : i + kmer_len] kmers[kmer] = kmers.get(kmer, 0) + 1 - return kmers \ No newline at end of file + return kmers.items() \ No newline at end of file diff --git a/source/_static/code/kmer_2.py b/source/_static/code/kmer_2.py new file mode 100644 index 0000000..2f98d53 --- /dev/null +++ b/source/_static/code/kmer_2.py @@ -0,0 +1,17 @@ +import collections +from operator import itemgetter + +def get_kmer_occurences(seq, kmer_len): + """ + return a list of tuple + each tuple contains a kmers present in seq and its occurence + """ + kmers = collections.defaultdict(int) + stop = len(seq) - kmer_len + for i in range(stop + 1): + kmer = s[i : i + kmer_len] + kmers[kmer] += 1 + kmers = kmers.items() + kmers.sort(key = itemgetter(1), reverse =True) + return kmers + \ No newline at end of file diff --git a/source/_static/code/restriction.py b/source/_static/code/restriction.py new file mode 100644 index 0000000..26e228f --- /dev/null +++ b/source/_static/code/restriction.py @@ -0,0 +1,50 @@ +from operator import itemgetter + + +def one_enz_binding_site(dna, enzyme): + """ + return the first position of enzyme binding site in dna + or None if there is not + """ + pos = dna.find(enzyme.sequence) + if pos != -1: + return pos + + +def one_enz_binding_sites1(dna, enzyme): + """ + return all positions of enzyme binding sites in dna + """ + positions = [] + pos = dna.find(enzyme.sequence) + if pos != -1: + positions.append(pos) + positions.extend(one_enz_binding_site1(dna[pos+1:], enzyme)) + return positions + + +def one_enz_binding_sites(dna, enzyme): + """ + return all positions of enzyme binding sites in dna + """ + positions = [] + pos = dna.find(enzyme.sequence) + while pos != -1: + positions.append(pos) + pos = dna.find(enzyme.sequence, pos + 1) + return positions + + +def binding_sites(dna, enzymes): + """ + return all positions of all enzymes binding sites present in dna + sort by the incresing position + """ + positions = [] + for enzyme in enzymes: + pos = one_enz_binding_sites(dna, enzyme) + pos = [(enzyme.name, pos) for pos in pos] + positions.extend(pos) + positions.sort(key = itemgetter(1)) + return positions + diff --git a/source/_static/code/rev_comp.py b/source/_static/code/rev_comp.py new file mode 100644 index 0000000..dd0337e --- /dev/null +++ b/source/_static/code/rev_comp.py @@ -0,0 +1,15 @@ + +def rev_comp(seq): + """ + return the reverse complement of seq + the sequence must be in lower case + """ + complement = {'a' : 't', + 'c' : 'g', + 'g' : 'c', + 't' : 'a'} + rev_seq = seq[::-1] + rev_comp = '' + for nt in rev_seq: + rev_comp += complement[nt] + return rev_comp \ No newline at end of file diff --git a/source/_static/code/rev_comp2.py b/source/_static/code/rev_comp2.py new file mode 100644 index 0000000..59ea1a1 --- /dev/null +++ b/source/_static/code/rev_comp2.py @@ -0,0 +1,17 @@ +import string + +def rev_comp(seq): + """ + return the reverse complement of seq + the case is respect but if the sequence mix upper and lower case the function will failed + """ + upper = seq.isupper() + reverse = seq[::-1] + direct = 'acgt' + comp = 'tgca' + if upper: + table = string.maketrans(direct.upper(), comp.upper()) + else: + table = string.maketrans(direct, comp) + rev_comp = reverse.translate(table) + return rev_comp \ No newline at end of file diff --git a/source/_static/code/similarity.py b/source/_static/code/similarity.py index b46d1a0..286742a 100644 --- a/source/_static/code/similarity.py +++ b/source/_static/code/similarity.py @@ -1,26 +1,27 @@ +import sys +import os.path + +sys.path.insert(0, os.path.join(expanduser('~'), "my_python_lib")) + import matrix -lines = iter( [' A G C U\n', - 'A 1.0 0.5 0.0 0.0\n', - 'G 0.5 1.0 0.0 0.0\n', - 'C 0.0 0.0 1.0 0.5\n', - 'U 0.0 0.0 0.5 1.0\n'] - ) -def parse_similarity_file(): +def parse_similarity_file(path): """ parse file containing RNA similarity matrix and return a matrix """ sim_matrix = matrix.create(4, 4) - #skip first line - lines.next() - for row_no, line in enumerate(lines): - line = line.strip() - fields = line.split() - values = [float(val) for val in fields[1:]] - matrix.replace_row(sim_matrix, row_no, values) + with open(path, 'r') as sim_file: + #skip first line + sim_file.next() + for row_no, line in enumerate(sim_file): + line = line.strip() + fields = line.split() + values = [float(val) for val in fields[1:]] + matrix.replace_row(sim_matrix, row_no, values) return sim_matrix + def get_similarity(b1, b2, sim_matrix): """ :param b1: the first base must be in ('A', 'G', 'C', 'U') @@ -40,6 +41,7 @@ def get_similarity(b1, b2, sim_matrix): if not b2 in bases: raise KeyError("unknown base b2: " + str(b2)) return matrix.get_cell(sim_matrix, bases[b1], bases[b2]) + def compute_similarity(seq1, seq2, sim_matrix): """ @@ -58,12 +60,13 @@ def compute_similarity(seq1, seq2, sim_matrix): sim = get_similarity(b1, b2, sim_matrix) similarities.append(sim) return sum(similarities) + if __name__ == '__main__': seq1 = 'AGCAUCUA' seq2 = 'ACCGUUCU' - sim_matrix = parse_similarity_file() + sim_matrix = parse_similarity_file("similarity_matrix") print matrix.to_str(sim_matrix) similarity = compute_similarity(seq1, seq2, sim_matrix) print similarity - \ No newline at end of file + diff --git a/source/_static/code/translate.py b/source/_static/code/translate.py index d423890..288a065 100644 --- a/source/_static/code/translate.py +++ b/source/_static/code/translate.py @@ -19,17 +19,21 @@ genetic_code = { 'ttt': 'F', 'tct': 'S', 'tat': 'Y', 'tgt': 'C', def translate(nuc_seq, code): prot_seq = '' - start = 0 - while (start + 2) < len(nuc_seq): + n = 0 + # to avoid to compute len(seq)/3 at each loop + # I compute it once and use a reference + # it could be expensive if the sequence is very long. + cycle = len(nuc_seq)/3 + while n < cycle: + start = n * 3 end = start + 3 - print start, end codon = nuc_seq[start:end] codon = codon.lower() if codon in code: prot_seq += code[codon] else: raise RuntimeError("unknow codon: " + codon) - start += 3 + n += 1 return prot_seq def translate2(nuc_seq, code, phase = 1): @@ -39,7 +43,9 @@ def translate2(nuc_seq, code, phase = 1): elif -4 < phase < 0: start = -phase - 1 nuc_seq = nuc_seq[::-1] - while(start + 2) < len(nuc_seq): + # an other way to determine the end of looping + stop_iteration = len(nuc_seq) + while (start + 2) < stop_iteration: end = start + 3 codon = nuc_seq[start:end].lower() if codon in code: @@ -47,4 +53,4 @@ def translate2(nuc_seq, code, phase = 1): else: raise RuntimeError("unknow codon") start += 3 - return prot_seq \ No newline at end of file + return prot_seq diff --git a/source/_static/code/uniqify.py b/source/_static/code/uniqify.py new file mode 100644 index 0000000..299d4c3 --- /dev/null +++ b/source/_static/code/uniqify.py @@ -0,0 +1,6 @@ +def uniqify(l): + uniq = [] + for item in l: + if item not in uniq: + uniq.append(item) + return (uniq) \ No newline at end of file diff --git a/source/_static/data/similarity_matrix b/source/_static/data/similarity_matrix new file mode 100644 index 0000000..aa60f6e --- /dev/null +++ b/source/_static/data/similarity_matrix @@ -0,0 +1,5 @@ + A G C U +A 1.0 0.5 0.0 0.0 +G 0.5 1.0 0.0 0.0 +C 0.0 0.0 1.0 0.5 +U 0.0 0.0 0.5 1.0 diff --git a/source/_static/figs/augmented_assignment_int2.png b/source/_static/figs/augmented_assignment_int2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a7d3d457ca9c70aa814c1cca7bfa870a8d37101 GIT binary patch literal 29487 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�lO7>e+|ho%iBd^DOjtWK+B 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%0DPM$t5c{<4)bxzRURmV5-&@{>ugtLjCy2u;Rm-ls ztE*41(dAs<mCtaz(sI7?Pt(GC0P+giqpz>4)9naAwCi^~-w<>Ccv1O%5IAovcAstu z@HcKd#_32@`OTJUhXZE}vTBkfqycy}J9}h!SeDq8PO7x8?~Cg-b%mk9^}+OZIVu8z zi&?-ea0}k{OqoKS9MQdw?J5UAOXw*7#qC!r$`XQr|1p97J6C?Z=)aKK()MxpebBOv zb!{sO{@4JTN~T1To}PY@s-b9?#_Ottwg{kPor{Z_UO%4x+G%!f_+F&2TPi&tDD|~J zTk@PQ|4!*+qV`o4U=?we4}6NN9=bCJa~R@Mmad?OI}M*XlGvB~1Ni{a-!&c{9$TjT zWSly+H|H_r61oNk<fFCN@~~$4*~VeH8GHdGV)+Ykogoz1y0@ZsW|~~2ChBT16@_nb z7i?&2tH96L*wsDb?up2H^n}-oK}KfNiQgOz&W}IAVpCzD5GtO<TKmBLc<H(FBSNw$ z$~7VU%<pDMwF@T*dk09k%1*EVsvm-cFirtnZ$}@T3l36zdMx~zlti8Q{CL|rIEXAK zCkNuH53c%Cn|c%bD@e089v!-s-xJ!%u{c=1mtCaD+m8G2#IcxwFp7o%T}Uy9z2$xe zLwraLfc+GONa2`6DL|`^L<SXt0daBGw;5Fqx=*8SxIvKw8{zWBnU7nw^vB~)RwBGe z4_Li7Bwaz1PJ0`}lRUsC2>B)>0$IDGIu;TkVdnt#v$9zC+@j3R3Fq^ccnQvx!@L#% zz+j9Q{lun3J<wnK6?u1mOAcD(!^n^+j6h-^aFA`pjNJA|U;B!$yEH^HJZN(M;|&tr zo1QO3t`)Lm&hf?^DdzSSfG_Ll(8ROb!=F>n(mHIo%Z=ottLJ5V8^Q{i4z@V;?4N|M zE_81~|G(0YNCLN*)oa?Hprlpd3IX8dveF3ltqUX^Xl*RIr$T;on76n5CrkM+fB65( zGr}EWc?_tEq~WN(dZow5cjrimiU#^cs|`P)&){Kkygu4GIk9Kw<fvl-131MmmY<lK z3dqX(KrG-jME(V68)m{A7BM)hi+yx-<Z=aMMZaRdjrD)0MX}$%!t<-9LC7VNvj8_> OLP(0qiIxiM`uz{%SHxTZ literal 0 HcmV?d00001 diff --git a/source/_static/figs/augmented_assignment_list2.png b/source/_static/figs/augmented_assignment_list2.png new file mode 100644 index 0000000000000000000000000000000000000000..14e73407319b7d0d73fd8cfb4d3400448d5db6d9 GIT binary patch literal 35453 zcmce;1#DbFvo07jGcz;un3*AFW@ct)W@d~XJ9f-$$IKivGcz;n<iA&YccoqF>1nki zO{veEKHXKPyQ{teO_ZX7Bmyih?6+^<5TvEVl)rrg4g2;Dq#PO&NG0!UxPUic9Hq2e zzI{U+`1b`#qeH~|_AQ!8T1;5gbM-tALK9sFZ}_XD))j^pbGFDB#T^u~oZ8)a!6qh7 zzk{Xvw<pHKop)UaOP!8fEeaT~u&VLOhJ!f@Ii_a1-g4N}6CW5`gT>TD=TY8QuFGL) zdnAZhmm(Efc_PZv`tzU7KdeOFt9%vlG4GBH(?|6*dX>jGEPp_>n%9qv0vlY131c*~ zJjmKH%231wnM-~VmWfAh@9qX)Wb_;6h4cfQ0If77KjO7~uwq^{#veTp(LBuC6k44i zwWs8_mngx5p#BWJ9X3J_4VZMv+yh)(Sw8X+%UCLnjEtNGS1QE{gAZ%aTtd0S`Q1)c zo4e)L&eEFommyQ10WsJPsp&did|JOiv<{ytlT4P&<a5m5)`H{LuAjQ9t=9Z6d!gYU z)CkEAA*@^^t3FGY2K^Pzo$xE-2~Hokt`J%bBx2yEY6HrTyLWHgr=Cf7Mi@4gN+fzW zHwi-^5sH0_tLU}rLs{2m>u=|Ytj?-F>(<W6^85wI!|eoGyUGY~Sg79DpI9aCM;n;{ zldbzvtjd`V=4tH4=1f0eBl!|ZDpUGDi|kFs(n4dUB*@8<QSM~I>s{ngT6Ga|l+?lM zt2zdg+LhB|Gr>|g`Nf33M-*F$Ng_g_Wc_L_eh$Q7`l8Bdqd`^iS&dwJXq=C!rjn2< zCrgb0(K^47pIxMKZ7dq*X8NH%=I+EmvibOHWHJ9N8O4lc-yu34gr?xXri5WFKE?fO zat`Bqxe8xIRb%pIP;DxvH8xcRqP5PiJGkb>z$@7)5Y~`@ewQTBq3sfeeY270GULe# zF+?yO-NLPF5gE#5%2W4NjvUH(L#vpObwn6@1N&T_HW;~pDZYD|xh2lp?1o8CC4!C- z*aXtRZ1yp~6(r8(!Y^EZ?U9l+4ca5dVAh?G5u=JlEg&fRTsdRg4{rMvE^vXM$QZF( zQSgSSN?ktOW+k5jzjm^=Cb#ZHI_^Lw89y*vD%&6^-0s~U)zk(JD{F;tsM8&)ik0c@ z|L8OoFRceZi$kZfSGEs0B)!k_%NxwsB$m)UO#hgykY3J60a01`^FYnxYLjIyM9^f4 zeS8gjh+__)IpzuBSHPHvHC`9SaObBzd~3f;!S#-udxZsYfJWi?@#@yv-kyxo;Bz81 zCsD8dTN|g(%G#Qgh6d*L)US9}BGojML^RxV1q%%=#fX=MrOwmG_^`~C-qxjkQ|~Ey ziOxf)dGb=3ZE@v7!<x)J-vxq@;q-@Hx8EJi+-mBCMlMtV%*+t0jel>=mLGU^CA}KH zhXho~tFght^}s!(DUD7wdFVvR$ic|dnu`%fphhc-i9hVDbEbwMv|@+r*z5bp-^`in z;)xrX+rCa*MM8a`*zB_}ehn3nrriEKx|C!xv(>4Gt`|QRxxJ3a;4TK8y|pSyQ;-;H zznA?UDiB&zn7sb5W0z>*q*Km%0lgdOzsvs6rqhO`=NuGZEvCh(GonMQmmuU0cy^H> zE4w5%y%xij3SqB%#;$WP1f0(Q&L-KSW*Fm19NHUBFtV`FV3x4uyQTKNAA9y9X4=YA zvnP%lmJZB=tgY7ZtMX5#CWP7*XJr=42<eaNE=^H!LlN6C`N1Rn3#6dNwP!tm=%-)R zSd?0&dhgsE8YU(tY5>s=VXRp<E#C5J+^}Gf43Eq$V2xKkg4&qp)$UKE{|Y{_U7D{s zeRz0D{ff>>zlDiVI>fkbng*H{n0XtHzC=msZ>mi&_R4+l;7Pm$=FQ{LsvG7$op$Y< z-Vi9+^#W~!@*PbsyRA_7wHXUpjRXHW(=#_^?8Jj}<?pUpeuS6#2r7tsu-B6E92HE= zEg)>m!W^JFSRp~|&EM@a?PVDZoU*dANJvRR!^6W<zo(`hA6t&ujt8Fw`dJy=%?ci# zYjn&DbCC0Ynu<v?rMpuhx7Ofz8T*e+1%7^_XtvHI#by%0&IQt%45ao3|M<$5lu#8O zi8K{sCB<Q3@{Hw;n$qJNI2#=Wg|GN6Au*8xGRz8jetPp3dTPz;21&apA;+;TgoS7x z_bYss{}TOTxJ~*RFZYHagQUk7i}5qLn3IPqxKHevoEkFQvytbGpNv>E@Ew=AN!fi) zlj&X;S@}M$T#aAolFE?IOwz$Kw>MB+8VT<FqO-Myz|096$VbvYwUs&*Sy>HJSXM@v z-zmJA7Z}}%vf}V%;~-)yl<vmGy<GP~t-xrX_0yC5VK@cqwwz$vP^>v`GDUpBknI&w zLVertq|!Am)4DqJcyR_Es)HzU&_EvHudd)5T2&geoY)Z|!+~)ilN`&eru-;hk{#<U zJ@-cZK*zSFTE=oJxm#dNcbD{9D-8}B*p*Sd!2_Qju}}W~zG+4O*CjaAvl}3yXCn@F zF%oRehs5%`%nkhl+#Ec1Q=Z!=JfsCTA=O94t#uFl(R5gxN6O#I?DplriZckK9(v&W zD;&s);-_*7P)KmL=H|ZZ>Aa=o{TYy|RU)m;#Oh$-g)L9W^espz@iDl>cbBQ%{UX|K zty!8NpJO`+3~Kx0LS917Z%4HzU&(~ab~$kKkB<dRhQ5Xt*x2f7%LtBAG72jmbBE)( z0AT`@K!L$~Y^DktuQYD9S9gk+4Sc~g+Hl>y=2PPqoa;P~meTy1mUeOaRq(=fJkBG( zRu^7#KW}+BRdp95c*gjo@q94r{wHDYb#}I!E2<Yxtx#;{W?&Ih^0s}oQlb8`d&90I z6%DgIAFmJ^uRW^-e9Fh~%q2?q<VOPouqY?$CX}~DWaAGzM%)@{u|3rUKF?^cTsR{M zMzseqHxB#o;)0(m9`Kp^uJD?L33pdmQH0UB_g;aq<zf=HyL#HX{lZeyU+KD2mIG{1 z0*Pw3dr|C(kiu6O5Pt(+7}oy~#VJ!D)OvW6UC+0r&dP|rvPebel6|_U5!)+I?`n6K zc^bWN>4Dw2tKU%TiRe@xsi~%bTG>EJq0IfYc$Rwa@Pz^3R}Zv5-{K?Qk6Rh-^%poU z9DNIZVpe7f!R9`IT^8~Bg?2d5MQwNN8znYv9$nzZvNME(-(H*$FIrm3vC(wP^XuM; zVcy9qbrEHy8Y_<x&LuC{<#jhzi@CGD!p3hBfdA$ue;!J2T~?bshp-;~I`qylQeSYv zhDKhr$r^8wyZBDgoy+4!JG?c=ThwYL+vg)R&MpfG0#wlvzW?AW7Q0>bqxhiKRKpS{ z<=fa7v62}L0KYyza0lb~4ezMex33_)qMDzfmXLCGbolm@Qwl?&YN<Py+0TcLxO;DH zrji@M1*YzYM<4vVb6<|LD`fL8kC#C)ODn5G?COk?Z>!md5XPDeN0d0tb4Z5;D>upk zbk#Knq-vTt`d=+*mppgyywhSu*-bE%55I~OFOtfTld>@k2^br2kM8lfi=*f2qDnoL zFvYrWM^-p~C3~E)I}aEuJZX`5qUMp`aQzg}8H`)eRK|5Aw(B?~%9&kkz_-vq75+pR zL4i3j%42q^lpg&7C}uZWsTh|+iSpe$>dK&rl)94h->4yRl>KdNLFFt4!CJ}n)*jbi z<^Pk}EKi3K5f5I44J^|d{ku*Q8EqmB-VcXR9qc>yWHL;pdK>Y4f?3rMcsDXha%g9< zVEiQF5tM`8F9iv*{aKgg?6jUvf%w$1{YZ%6b20;^cGsxXI8<}XzqDqv$M=8cIy4SN zzvoC+D8!dzYg)*<^x-c%7eK`&B>e3tB`EFu1=wAiyrf<uL*JGZ>1jY|(UH!JN-=vo zVAgEdC4CJV_SLg>+cne{>kVj4cuC4V;Cx2<=ylPI3}U2&h8+ipyCoY9+IF9nQ9bxD zD~-gD@D$NRfJFot?ATtV`k`8|9UMnn@DB15$kB!3G0#qV!&RY8jhBTzE|p8}oBrC5 zyjhYoI?qD7cF?6=l2SI0&C|E!>g9};-|~t!>jbBAoqYq(AY7nXP#Z;Q(#z;E2(u^u zs1os)W!hO7E_i-r0O2)n?VkrU9qCKUIMG(2;|GzQDUBtQp@MUh3dc(!???V?B$Acg z9P5!zbxn1Jd{kdhIlf<+!*<6<F8y?TOtMDE`~eTfM>Bx3;@=KKic<9exXyLQwi))8 zhNcL93vvJ~EJ6==MLFlaQ&Lf$`+~_<I&+7gESG8}<@k0iQycfm2Uv15nBtFvlPZmI zt%W1t?e2uZIa<zqJDM)Y@HLDRs$Ko@1=i~5ij+8tGX1J1w%3zEb2$R2x}VdOrffi~ zwjby%bRnH^-7&N-W1@F??CKFCa%mHAwMtMY<Q@H4FflppM+Exan-#@e^<mJ)z)0*1 zR%@snfWZ*BQq5mWus~y1Q1GM$epy2nZ<6oBJXEPDn2Ar2<krWNB|$Q>_(Fai1l7vB zBr97x@2Q-ps8p)}m=TxVZ8>~<$_H_F6?3oWeVMQx^emMc!G;C6?m%gC&0t&+OahEf z%V$rX3IwlF=4QEzGEu`PZg8b&qrC>`SmDExc;fbt$d%%)QBLisKMM+$SmE9fUJjpP z3$B9uQ0qhIjsgbDM&<Xdd)@&?uP@g_P#h4gGzFw8c?{w-0Z5yv{$E7)S}Baz-KkFg z%Y+qsYE>GBNz_%X%Ne0?cY>ExL}w1rg}+PEcAok>5=_2w535Y6-?j0_JEAf=70cvs zI(?oLb{+ho({(cq73xe!QDbpAqGcw>!n+WW$Z*Z=g7|yd+Gh3dh7*Vy-1^oH^J-Oo zDlE6TSTq~y|M3ok#h^_jL)AK2Z);fgT0WPlP%d?5fR@i>25~u>O2ZD%BVyyo{c-;N z7aAfCE4XAles6=t^ax56x+Ybp)1Jho*M))TqS;X>eG1igOx|DZ-c!;q(}G`-d&-L> z*CQwxkw3WA2E$;>h@H62aTvdFgL5Xq4$(P3CLk(a1}7SDOcALV2eMiu^v)EloPJ_@ z*XO_#G1E22q>|l+^|Ve-D^}E-L8^KAA0ZxoYL#54InJ0{ek@?v(Yr8NeK(dF*QT_- z-k1S9Y(uc3mkBL+BH2Ddsu-S;Ho&D4PesEb9NhVQO64iMSIEqsuCG!OeOIG+Ulgr6 zK2o$?TCs9N!uO@z&~*WcO{twSW}IwY#g_*sJP)Li^R)6z0l(L%CqxtPLs7|N=K8hh zD%9{-($ToiqDZfj-8%ErEeFe78mB84vVs1QLNb*~#A%54tdj;zZyp6bJ=d&T$L|gF zj{w^qZ5ZaFVn?H#QwrJGw+yd`p}~*PF8?8qOmZr8jWE|*+FF}&*_MS)cc+JH76qe! z-9|Dgd0HR0$?U%-x)d09XVvJ5)N`V5_amcA)k~E}oc66OoJD||kXVu&sC7luC4FD- zX|%!=sgqY7&7H(-Y;5Y$m9C?yX)ha4P*VlTBiX5J=iAAr2wuf7Nu*%zWCzZ`WA*(} z>gu+3w6-AUeAJ3m)mfL*chb|-#iwDG^8AsCf@m7b!s7Eb<{ld+{~!_p5<b{)$3AkC zh^jG`KUPv1+u2evVW@H&DNqj|IafY6$2v$TFT5fGAI<i?H|<llq`0vf@N;M4auq8^ zM?vQLGBbp~Ah2rPZT}WL{8{EMVvGnm8Q$7C@Pxy*kL*4Fl?BBs0~#^jNh!`^Mc^V4 zj}KF$C40Bwm0x;tY;wF<5~gaTw*fl^^0A6PcpJjdn?_m73}TXV(GzUULtx*mkhz*O z?sdt(o|%~3=HcWd{l-sEPjBaE%QiHcJ!s<WSsa?lPK@e5m=kdJ<3g+5)v9Z_LAtb5 zWAUaI>PbIXP1t_hMm>V>D9PAPxl)}$_m4NnQ_lhY9KPZ;BkGa^MTxa6)M1f4mc&3r z!LYiMtPPrSU)2wH6*+^9yv>_iu|5^s-~ON`=#F3%GNx&BYBt#>$F+BwII4QZWCsy8 zOVv?(%p4qHSx?p#@mcG8sE73*vag|J*IU0%7{j6bkXLwi?wSaZhxCM<{kK+vJv^tH zhOnsy*L#k>*D=#rW!|W1PNUfGe(r{l3+UD-dyODjnU@(?ypPYxbf}RhjK`p9-wS3P z$(d;TCw@V1f1F+wsY7C(bm?g5p+{Y_a5{Gc$sXAk%D=_#4TFc%9LoNv>i4@}%}8F# zSsh0nezO(13-BrX;B3h}1Ut~@Y0kn88p%2-%Q!IG+KF@%dUP8?Y^Fg%glsj-RAQ&n zUpK8sn_`48SsAIE&>0Yj37X?I#C^x^B&ABtBdUiNraIz8Tl5V1IpTG%@wr9~e(yoU z+<#c1Lp3c`!BbuN0~M3=a_YeFX@@sn>`eOIZ@Rez&|X-&KAkf=9!D8XPW2w9WyKFq zjQ|}+D!1i`#<Ue6so`PMSfvI6maBug>Q+~>&uKj`wTmZ2jb6raPd~+Q8m$Wk$(Rw6 z<(FnL;O0JYeO{9W7rcswiTzurW$KaZCAL6bL2Cb-PVdF(DeVo{V_NPOtgEvKX&gRX z%~IEtVqsEqu?|M~GclDa=?|;L(i$^TMkU!T@Yvi$;t?1%OeNCLn}VJN8YXc=kWH$} zURAxogo!WZ)BVs;zHLj9S6J*tkRYrtf}j_o-_kHqeMUJB%<YgWCF&ya(8WZ?Q$HL7 z$NN(e+Rzz81+OD*0=51;_1aZ)on{;)qoKY?PELTR1efB^<W<I4;YD9@SvrdZ=hjju zWx&{`8ew_>uZXG0M_^!rf$UHLkr43iKfYj`MId?~weT7^@f`$wMYqxyEiZM$m9uhd z4I|%2B#+_ToB|M_e*QA-UKNlWllra0MKE|m!9deA3WG5m<>Ta;UYKzH3g>pVf?C2Q z(7&snp1Qjq8Xe@;v+h`K8^!XaJ6KG@4oA&hlzZ~|<i_sgkw#nPXXh*goY&AOtpX`x z8z*^zevpf^_RSdF4oAMC>X*U@jUasS5?!V*CKhRuV(0f+$KK>{3`Rw&#tC*@ti3?d zGcS_kb=D|EsSiK35g0Idu&i!6$Cn7^n7vZT+1fsc(aK|_azk~V{w^Z~CPQli-icIZ zO-k+zSni#HH`4RZaa@AKBR+`V>){ybNs((v^?;(icZXK5JKj=zr4cmu^#zFHm$pts zGi-Iu{PV0$z_`?JFg*Zta$#_U2hs4iqr=ow+7zn&a<-af)3jEY3#RWV4(~qI=F*7e zRIfoFE+ZgnV=!uiAX?rW4MR;(L{4uOG*R8%ajkJy0rQ3P>Vr#lv`UrAG_?)g;$5HN zn=Vs*QU+*hzhw+BziISj;V0(SeygK#2!x|sQyc@XFE}@eumTW`h5l<KqM-sCz-wUR zzi$lA!;}b6m>j0Rm1}fod-9Type#*A7|lJurp^MF<EKdv2D^h6)g*{kV<Y?DaxFin zk|lo*@m(uRjL9*Tfb!IhG2E4+KXc^HeebjGL*k9rc@3+-I|h5dSs)Jz!|W+EMhM^i z@pSTKnaKGbEOoD93}8cq`U``yZOMIDnW8FEPpttZH|X%72afnlqN18rA@dzR>NI`E zRGpgxQ`Gg%<7u?kvqzlwO-k!0&l6A7iy$n1P6e{~)WoyT1P;B!M3tqw@Z|fi?ftpq znNj&)wF|mw!yu9!P$o|0yXKDGJ$!FzuBsa_I8gJmkHN=l^;?J|0pa2HU6B~yO3y#V zj>9)s2sg_+!&~VrgTd2W^wm&R_Fcj9f1jGIJZ;4R-gl}J&J02wIn>Y3r7F<Op}@fn zcL$<ahmr^Aaj#vrVtNz{ws@}ZG0Whghu7t%yv+@nv%z0>w{m>%opwKDa%#TSfTIn& zQ^qrjAG!IqK0qwnEbl1&BD<k?`h0(3r;rmg@jBEvy^WCWekDI+``Vj*6wEikX`vJl z^5NvEK?WS&K{hsVG@N&^&wOKu&<Lt@5DUV&U8vMxCCYJq;$i=_APH8|8XILY*+tdY z5Nbide6m6|1ac8@Ws2_zSyJ7QP_g;$$<0%=H07}D$7u7lF|XmI;MF$NVjiSo1%gHy z<n^N@vCtlZ!MuCJ;ECiFZh0*ftN@t_aL~}>&2~<bt4C+HjOBVl3CWoiS_mqI<mLLh zRIaYWSG^mSiR!rOjN!h~5TA7i*!aB4U=pga4}tH76BOuWmtYxYjc+BMZ#f1ORguxf z;&WrlX0ReI+bz~K`~Vnw`%W?6z;2S!7I4k<4odMM8Vz;OMyO?o)Q2(@O<7Qg(xe3W zVS<USF;Agq?PSbr)XB4@H2R$oIBqPE-&g(yv8U0wY5v7+Sgk-E19r-_7E(I-1HQ^U zI@6a{+9jhNx^p5TT!QClH(MsxrZtUU(h9zyP4SkW6U93`JC<!l3ckRrn^+5)!>xK5 zWUj&X-YHgdUDphj0=A-<2LAo@wm!Bm@u11?5EK%?r8stGz_myJDsPkf)8tY=T4GY- zQ0uV)5zscyII+2zlv`V9L|42aNg$k&pO2Hq%?+t%jT5XRgh)L;5GA@{3Q$5EhW~gb zs;a6&#=sC)(3}B=q*H5`q$+B>PUkB!xn0WShT{qOabvKU(x36p0x#BDhV%J-Mqr}w z^(#EC#?AwGea$!#GhxpHD>Z6{3WY;}N_bSYGX0AQ;C4FSn?|Qm|B>g`bA9co`dd3K zH}M%k=V5T~CNVWN)uwgbnx<O+PqvL3?pdH<z-MT6wS5tSxr{=2==IAxC_m9z;Ezx- z85;kdK-~of3<d^<_vah3Vdjc{4kAH+{K*^(!Oz`4K2M6JGHD_Nt68~<(#v%w5%UVj zL_|z#08Rlet`_{fTIYkYT}NP8m5PF1LCV^Up!TO-_y=C|OC*#_MwxhXS2~RE83X3D z&`ihKCVaPBrfoV!{5;S2{o7==Y*+RC8PLE)Q;3hj=*SC%Gz-YHo_F|P2rMF2SD`N* z0Ympf6}Z^YJ4baPUelD)82$jXny5P5&*d2~OyyKTv8^qmK|K@rnxDc7)Zfz$<i>Ub z>8qP)W4h^bd;{VU;}~Eca4V(k>=;46yNjRyMLxOw$S8@=e}#>)P#@uVe+Sc^sZ-2v zq(fDB_OQf{jdjj9y=lmY2$dVk9p5P*lBXCXnP|sZFNOcSIPlTzz~0BThb_r&!2YS{ zPZO1^sGkd+V1%#Oe${^$@82u-9qpi-#)wbA<zdI3PVf5UtlQYzK!xwPf#}*k$7ESc zW_eTbAkT69#B%;OQyyA6y<RIKKy$V1N!KoOzsP3dzKdeu3%K`X{9^0(p<+VO7ArEE zGREYv5M8}`GRH}gRe96_ph3u|r`9-+@&b*7Asy#*_cm;7)uc<ct9)Q#gYpWQNFv{L zCE=!daM-ri=tz#`czxv{WiWOLyqB;ud@?y^BjhP+(#E{n5S>MEGzG_C)`-m4v6x8* zY1nuT*T<!LR>C&}euUl*Dr$hW*b9hE-upQ=7{wxS6LS{@Yc6aNmT(G)mX4*bgr8Vu zjJz-WK&PTo#h3Ng+TD*^YJC)@6IGjNj*D=zwxR>t?Y`jN{x&{7)(gDt^=Kea_-_>P zKkz~kgR1IM6AM8nD^VOe3=JQfas@_Xf;V!h#(<23B&bS^8ofv{^W&`5_vO}<B=|N| zjKx(Xi8Ve^6dAk--eG^!AK~WxfUF)-7+E|R80#CM3|E>a+FmdEZYms191Wg8B#4O= zZ)szb!^J`lOH>4X+_a7BdjGI}u1vF*)xTnO$)pD_nKBlRJ-?a`FNwSomDldQ=@Krs z^Veq-LDl6KJU_o3yL(NVjVA+xd}~`r<kCvgNIqY@#8I}kqZ@VU{S&R#_IEYO^r$pw z3KUt^AZJG|9>TY)Pq9A|Q!mlOi&O9|{@*GyHu}CK=E?g}!J~>!d*a)%aU8zQv93DD zG`NRkXV$afHt=L61;L1@4Jc;x_xg1~A5JWsTaNVZWnDS7mC{&;Qy980tVgJ{vi*hS zKtu>WwjWDW-BGbsw444Gd1*#aJQl^h)agLVzNC>aCWZ5%@`*N^rIl55GSUzD)3_}O z0r0-3#>dAuG%_Mt@<g-G4f@Kihla1$SZ<njL6TSt>7wPx;Z~9|e!hEzKjv(O^bh6o zZ2l4+=q7K0JM|SPT`|!o+&XnBCeFUI5k-%{Z7A5aJ=aW=3S9Oqnim;~ms=wx$H7|t zRWj5p)|zu9fbMuV6d&enFrCjI^3!6`tHNgCR~S&gjq8zXEw&hm*%mO#&42qWIm`5$ z!ex8Kv%u58K4Ab*j2okp`8SCA6-jst8E0y^TFZ&Tp+IG)lPurTYSo)OTE{jeX<0BY z`(CnEdERy>?YBVn(jCRg8h|60EAl!MASkT9N41d<lB~px(wupl#J0Jb6uT7RHv?Uw z!NuP?e;ch-!t(Y;zxNzx6yHqH?cSAg2_YJn4?&X%k1&S6Q#-O(p-`a<CwTdbLZyZr zmW)dA@sf+ycHvDI*T7@Vmt}+HGvkgi9%*X~GTJeQUv|eBJ>qI=$At_|I&2?^{DdC{ zU)V96`R!cW(jr;V-c5-;R}~xK@o4H3Ti>Iyx4oW~W4X?LbjAw|eGgaWiYsE@-J<vn z3Q=YN-lD0OP&yI{{zP>9(!;)YK_U^->%%4o62!5rpCPv+)b%Y=7-@RWW{iFg_SU@U z(;GSaXKnR5p(wRJq$0VOEx^4I376<X%)2d6s1dWIKAtp<F&EXmWphcT?m-ZAzA>+D z>2A;(A5Byhvm~N~1$psFWN9uBgLDv4iHefF?OS$IqQt3i0VuGQCisW3zFuiWGB692 z#M&qiq2XDuYL*;6&PqoXKxH(7fAmFmm0;j<gT}3{rl2B^-GCfKqz<mW${Or*Urr3K ztM-w)YM~L_|IUi7@G<C{sxH>uh3EA{v3Wnk;*MBwwh!(pJP(*=Jz$E6==ojUHk9+( zdLsjnBvz6eNc`s7IA2$*BW?@l7cD7>pwz4@owe)rMT{TN+&C0SN(}_G#+tFmr}lZx zT{|Ntxm|BC9H%_O8XB_3p1m#80GCJ3_YQU06SrMmHM2_&GtO>z=eRkfUe*WDqz6Fo zKqB=wZ=cnuj9ix9?Xt_kP4$!Rp@y@~&CTWRfPnl26%`dxXJ=M!q9_vKa>@)wJ&`}& z53|jsC?c5d<tB_7InDASQpQrqwDKG6Zi5JI1%d(bH3r>>G?Lur6WH|HjnH%&)#Red z*r=hW{g2*O3%@X8V`Fb!*ZacY{sqq9aae&VcHjVGVO9M;UU4*0X+J+lYQGzdgLge( z{<O3B%rkq5%13=V8Up6-y9K~e$iu;fk%2@BaBUzsOugk|+l3TVB;XwLbQk54$$7;s zqsrd5l)<9tQXXVRSDDl+4G$y2y_41=v@J~dzN(vI(@8mrOOmLijNCizM<zh2G2Vm( z5C*a!o_rQ?H5h<(UrRcVh0h8F6d9e%etI>WVYKP`37)7mp3El^C<tw#ihlJ&7(GXs zt2jbEJ+K=xIFL}|m=CG#qb6`p3z6KQ0y!*lL|;i<=?H(P1^ct4sGWq33N8$M{(pgl z4ZX5m)m=z|pDxsdJ0HkO!{6<`=;*fL$3ukZZkw9ONsvLK_7@9Zw;{ED+*0AwYJGbx zJ6>L4AHF`sG#ixFq(^oS(W>6)PenXrru!{9L=KHAx<JN)gN=$FwCaYBLz2o*n4zua zNRA8m^9kD=Un3e$@vqB{N$$6^ns;QlqE5@zDnv^AfFN$YiP0Y5CM(Ci&kq2x^TQqI z*N4M%X^n&LttizuH4P?aQT1Qv({({;Xh(rsmF?O=vhcfk1X^mo1h{SMiOCy4&7p#+ zVX$H>_E1niOAl5NGzFk1B}`4}ZWrHoYfa)X=Gn^!(iKk^Ot24+Z|#eC*ML?(s<1lU zCR6z68T+_T^sJJU+`(N;<Z7)AmL#Su9M_9mm|6n<fyA=|!g~D_nc^aFLlZ=-xJsn8 zOT(lpPHwC|;I3`FcGqnEr-})#b|he?5xzHFV|0)ag;B2+?#aBmjZ$r<GzVK#2X4mE zWU*2f<7vgkgJq&Wk1vlHT}kdR{Uki%4z%a5V~+-91a;JZbRK)sO-ZI_70U2H$?!h= z|LDXY%jA81U1?6&S;SBH#opY9-%-`|V3RJJC?W?BY2-)7VMLUSp?A0daorIrEF#zk z9)#lg7%2_!4CR+Lo5XdQ6v0|ndiOK(ef4uJ)GCYQ5iN-{!F{31gEY_ApnBS>;2E-L zdZ?kh1Bo_)M5HKM-{Y}QtqrYh(ByRS!j&K6XBHNc83>K&lT8GQBYq;_q!FVthKKfL z&TUcH`JMl=nPF!Y7Uw-X-;$LZV&Xg{d5((0-U|6G$^PDi{7-*~X)?E_yMpB5k7xof zrT+c)zd<6SUTAt2s90LR_%M00bphJg#p!V*o~OF3h`@c1DgP`|xRPmNxlkqmkDziS zXb$Di5o8~hdV_fNVVKU_oe<^!La2m9XmU3YZYuO|TiNCN9h$7{SgKYVhh6gP?4M{h zM3?QFO(JaHM-{VKI1iku0N#!Toe?3F7e^2;@+gzAlj*3T?0y;;ItL>Rh-4ZpbEg3F zv#<ByT@1FPt>8+k1I(9VKG?A?5yy*)zTB&Dl=(+D^4IvU>*VvZGXpKsD4u}d(W*{) zgvO9pYBh>B0q`P!R3L@jb{(0oa-b(4;Eq0D>HpARig=|c&SFwIbcRQ`c-`K+#=0Xx z@~UZ#>ThOlu1Rq)W)p#Rr$Y@?iXy!hCnJ`Y%tjjd_#wh0`S*9rE2ICwC8I{$gqfLC zbq@O+fyKY~B@K>wtRaZ<=>40_+@EtG7Fi5h&tKy-9w(LOB!r9=XW?t8D``Vhtr;4P z&nU7h4&5~^T!=~`;&tcD4Ta3t-?OT&i9;zPTZ@!aX)?AWh}>xA8XrN}_99&|nAk6! zRbsZ<Xq748=N**iap+`#Et?rYcXGfccM(7sB|(|l+=dbB>?HzDWMCq;q(~3<5SEQD z&}y;{lG}j-*Rj~d;+yK%Ok(1&*<a<vm1wI9`uWu)0ij0*&U%zN49#6+YTQZ{KMi0- zntLWCXK)u=e_mUGEfQm|G|PmR!JNPU?c^Z|m0G!gV-kQrvI$`_9c;r#dExs#l^R6f zUq)y!+RV94Nfz85H>BvH6M0}NHsc*!CB0Kbarszxucf|85k@kX#U$KwbfWEA55gS? z`W)pp)FAKTU!q$we85YlVGNFsn17~gSKKCc3H1seb*~k(H9VU4>)XcHN+3y&CKMK_ zV9@i8rn@Ka9CgK@^eF(VuXN<pBd9+q0elQX<8fLw`oviHZH<_=l71pp#ITUMBxQ2T z2nq)jG=i{#JJX*jwXXrfQi2?8!?i48!OW#{fzcFA*IA=9nW+<Ao2dEyBJehrfmu1E zNuBeEAR47UNxuG1guj@n#<qJy>Wl|r%PY(#4C;s!uZw!>D`E>GXAkx?Uy|>}9oC%Q z(d@&$Km?9SHs}ga);yi+^h54tv<4I9^HRNhUvAo__d4!@MKf~^I9>?FNfkP}RWayB zdaLHre5;Lkd=l_3eMhm-0y3%4l86Rk(}JDO2uFY~Jj6Cf!#YYtiiICByeyYF%DjbA zQRZ5zmD`ake~MX(#F>+2(ud&7s3)fm{Mrqe6_%{yvcO{5LIb*7p)d*MkZTeQqid|2 z*6VETUu^rCO#Aq-YW|ow`z#gxEyp=@^9&!2u)BUTC}oR2{L4(Q?MMV_r+2Tnl^3db zGMH#H253;+!K&D@MG|ZI0p~+<qmsYZtu=zQ-*%vXo$H7zK#*gOXAZ1r$rbbix3BCf zj7iB?y}4X<1|P=qO3siaHeGN_t<b?BoWl8OdXUB<8isqo?Aj%{+EsSuOG0BtFTo12 z8PdDk-g$3|wOIh;adm2=T9Ma<*h2s5o~meUc@k_k(brz4*u!Vi2Y#-N5kH;kDnlC{ z`tBUzl2bhW4p)9g@>1zM4MB2DW2Vb<3JL@i6eJVjgINP~{NoZt!;yoN81DA!&=yZC z38P=lY0dkH9Bz!}&xE~=hD5ITr!p{7#+vspPc`Tyx$oV0%#DrTm)^v9*!MPj19QF= zNMH)Nb&wjN0n5~m*+g%|{YV5s1O)_wj2MV)m(w%ILb9&CDqSmP`k>JKe)dn<w9gM` z`jqM}UBm?xN-(`}i8yqJ=L@2WQkXs#Om!0}m*qAd_K4!QKBHocVfQsQlIYm?bs%ja ze|+M-daf45=va$hu!_$TE-f{xSiS>s*FYkP=xp}OKE#x^R!t4T>*Gbt!`af&MJ-3& zZoq#BO^%I7Sm*^Dv!GlR*JO6X5(U-O)gz;$X;WPqL`IrxQs;kAb7_*iKVIO0f`T#! zeEP~rp^644=1IiiVq_zi^}+76yPeGdAs-)+jiDhiW*;7x{q}eUljUL+4h1a`7VS@L zba*KJ@pkJB_#*W7_HOmOA)U(OrBczYRR4{NRXG<u)*Zc6&x!VWH!Zkxb(J6<gE@+x z(BLA|G?q*uJJV#Nk;<T>-Z?qc=C~sw;|rYq8G$a8zO1aw>WxviHSqP}?1-DOIp{eO zg{<f3ZtiiEHne_T#eBG2sbt`bgPnc0nt_G}2FMc?6fp}q^!8v37Ebd|xvbzUHj6_# z1$9&9FnYC6(;y5b_Z{Z|53`S#J1SS#TLIMmr>m{Ow!VAP$;Z<Q?IzmSr>pPrLdH_) z9>6Tuz!w@SYGFkMO^auX!&W?_Uc2GV?%+#w1csVAvKGqx!opyu*PSV<P4hDm7FI^{ zAGb4g*Q-qeFi7~om>4+g#VYBke`9g*D6EBHIh48>WPJJze&NCMlHNRJyANsZZAo=* z`l&<bi&05?Vc<Gmw%}ERJ(}T>`ZeSz%suVC;3-rud0)S9;g6CiNIS_kN4T&4LDC#N zj5m;S(@=1yK-u3aTz)~1A}PuiH#qFQ+HkAU-Idw0%*GJ$8mz1tRQP+XQ>#gms<Ezc z_#1A3kUTt88O8aHZt*;(r{jrbW^PHsx>bxq$7Ytg-slDKlNEyaee#;5i%|^4Ier zEP*z@f?rmqr!sCoDnGu{^s`e=OVH;P^6+J~zp7Ecu6b(`rT2N}CtLnU6Bvg2lMtRP zN87;LYk&{)Q#}FbQfX|}_2Jf^OqWf}pfiFyf~Sj{oZ1FmIB<BThcjKDEEjI(qhte< zx6#X9OJ#`GttPtgr4lDcDfqNZBb%!d83ZWobT*UpPNJ>W3buGLumXqSViU8T=3t|` z#*(@E)F5p2QSQy#fM&_<f^JSR--!+Mh$JY215}SVFMg$vm#^>Bd97cZga@a*#$mak ziuZd2;Y|o=3DqtZ>~X2`#^w9$gkI?U-c6~px|EdRfDb}!BJ}8uhV{`_XR+rOjBpQu zFqSuOBXPu%t&y=r`EH5E&lgPp%QYO3v*em*fh)mSt1q;o`by5vEad3rh@N2ti@MJ? zwpVwqGH?nORmSy??<4Zib92RcyupuxJw3*YHC}Gre$SckzJ}=|QBY1gXqN2bcyW`h zFVRoI2F%U;e}gKrKsXWB3hGlVLTPMr_P>f#_O_RdnF@c$u)a!rJ_RLI<9YA%YNs^+ zM$WWvWahN+Y&J2uFEwV3Dq@}OG`n=c7c@8td|84rUI<qb+9iOmGC&J5>Vu!dlOnxU zajt7PDs+p+IVck@WI|uu7Sj_PC$5Vw1eUm}{sh+bD&n-=z2nKGGLLZN4$eeqrnw>k z6FiC@`eB94Clc5#^|To#ya2DlW0Gd*;DK6f#f`pi5rqEY70MLOFryI${E~8Q)O`z# z`1HKnVJMpzE^%L4`{SfE>NHQ}1#h^gWtpBBUXu`JNT{O4LSCM4ATk`48M4%bD)b6C z@P&N>Cr}WU`<5b*l>fXH!@Xy3OP*Wk_J`!FTndMN2V)@zDpqD7*!+d~GsAoL^R5PP zEru{O1o;wuHXI{)eb)>zofVo$ECsKYIEG1)3GqxgE&21rVx~GJVt#L<0tU6#ZjB~a z^Be-OmcjxPJfQgSckXa!<ULlj)c`tRcpu;7`q&Jf-P5|Z(l8RYnX=p}N1LiVOwh(F z>E@rjmUD&HI5#5y@dy9kiC9tePMc`Kz!xyMEQd)79qb(L?(PnZ=>Zvo`EL@Pf*p-L z0uL^%Se-}=9Smd|NSMLoJ7rVMpo6JVRh=9M$GVY@^q{BlpM@65po^tu%H5=CanZn) zI#FQ5cBe?&+uNxPy7*v<Xi1Sl$C3E^+jMGfc1-A7bs6X90nBtZp@P|3eI;cyI8nqu zhy?`lokM>OjlMZSKW~|_Tb;(%A295U(q}~(i_Hd{$*#A$BT0VQBg*IF;=~i128JrG z)ZdWy^nU?Xn;e4eH*$_}H-VuI&n%B~wl0By=u-bC)m?!-RDr#ZmY?FZ7qqG6;0*Z! z+$=C8Nkm=m=*4eU4ac-$-^|Nwwa{*MSq_24sMZztPp_PhEDGy7dOv0z`Z<Yo4d&wU zflD^>U7_~vyuos-&Z=woWc?2X-!Q>&Qg=>@5=?NYVv{B7EwuNm_ZS6Z0pldgK>!!? z*>?+8df`OmUyvj_PRFyqvvl|5<~d1#QAe1f(^|)Vv#e7Hm%gD*&_74HgW*weKp(g0 zTm;*rm>-_Uzb{gtsm}5Ql$?JBgrI|Qf=L}Y>c`u!XIm32&6mr-tPrwdB8fl^8_MKr zg;C_g{k}SY;}@>FEnE2Uk$$OkAdzpO*EkPsluk>iQj*K^-^*Ud+lo+Dx5~bLE!k=( z!Br<P4+G!6l{s8!cq^GxArZ|UO}F0JQc;k<7RU2iaQ?Q?p5gwpn4p8C&&*2TK5?mb zh>~#MpH&RU-w4L~13<F7bO)h#oJwT^Uw8?Nf<yj@?7F*FM_=9e9$VeP3S@LRlDvO> zV4$`v8ERnD6^{P!v#?n9_Z)!U!Bd7r?aOTw_zU9p9YO3iO-bmTz|qy3RG(Zd+=K0l zM)%Zx)VZqcf>?KbmFaDSn=%$N|63QqXg`J(>0V+q4HCbkIO?|bbLD!N;yoCc-UIVp zJ#^W`1;Ob=FTpgl+^Gu1aR2;#E5P}Hn}?%`_WBK%*S*Sf#}V-ScGZnR8GWL)LW?b- zXVbs^BC5OK-fR1H%N-uza?X1Ac?Vy%p>5)<0j3OwDstkKcZZyYbF}&H4OrA#=t+)< z8c`P7(ITU#uTr!>UUjwTSx4gJTL6Y#mx<b-c8`q*(@(Gu7hx-#efG9v+M&n9!BxDT zS(_EF68xkwBB?)pW1ujs$!f9Ql<S7o%AhBop2QXGue(I#>9fam=k!oPQAKcC@rXd; zn|auCs`^e+Z_AZy+Y%7GFPnmy&BMmX1B;6CRd?9W%ZmO$V1@h<MRpW_6(0Q3;XzdK zDM%e}%I3n4#X8bB&_ORLE@t+XL26rNIeCFgwO2gxV9_9YPKM7s+}`1+v?MtZi26oS zf=n6EI)vGo=$XRMhd72CNEFr{SI^TPE+3G)v8+MD1uPB<VZb;NL1)u1MJ1*@?3gzq z;zx^$d7tirR;+JyO*0LM*9wH;w;4Im)`L3lzjOJL!bqR|Fq10yFOQ?FHQ#w7Vap&r z;F2xJEm$!S`L@Vm6RRa4y0(HAiea&Ppsovp4I}Qi<IC*<Xh+nBUTobTYi8r8d*wE8 zYCYxlu8M*u?`{1yE6qQ>Xd$>bJ>2I|t;+Zsqn+1X_!gLg;>AW*Q3){yV1M8T*N}Dt z3FiT^imAxe*2NLdpBYMec;%n_Z~$Esz6*-rCj8U=WWwJ<P0e&5AUZV<h`>*5#M<u8 zMu;3IJ1l-a$8OfHS~!n%udM6(4F=~Uh}?5v<A#Yy-`{TI#(k4i=$dwn(ve_EBV!@z zbOS*c&JvEXVdQ?u_mDK3@O@A01TQOTjBZfsYwq4gd8NBMmiLw*xR8;znTuT*b^q^A za6>d1i<ulF0NKx*zR%(9?vLo!W9r<wMTw8*N7}ojIBHW8U}+jk$lRD9#s29v?qmP; z^-isA^*pQ#-Ay8eLy<a5gw4nyHifYxoy`Q_JC51d{tQ}Z+f!lf*3&Wb34*!|ipRhM z?~J264d>MRk^Yt{T<_76_T0jSqgM^N*IuFUS}GFVi4HuhG@2B28m<yP<vVutO|(E6 zGQe$@r~N7UE0U#nf8Y3OTS=H|=8plC_bdzsa^IT2T+%cWjNFt0TL&|~U!*?$s7~ie ze3t!qZ>&@^bg6GY`9<y~cuqfBVF_6`==;-ALhW*mLXzuh#bk(5eFj(A)6}2OIqUL! zQtVy4*u<rY=rSA{Fc_oWVxW5lTg+qiiiT1~XGNOII@>o&MzyoiE6R9t0}#Qs#GJe; zixKt1z--Z|W$KgyvK`g8H-nGVn!p{-xS_MpTfGN0ZFt7c#Y+26+Y%PVX!rQtE4iMK z==c?-w?j)l=24;m!;c~uSp9<xJ9v(m%^dhf+7hoU5NP^>5C)0mtfZC}+8Ukc6ydXP z5uu5RM7=4vWCBXx3PvTB=0*wA-P2L~ok;r5pq{SzUfDkLg!T}DO56xVR7V9t66*(g zQh!Mo@%<1UUwr)Fa3*+W+G3cWIGHCGyQG!Hu(3ns#Kwyzr`>8OA;0tGv~IO7cc<SQ zXTJav5>hU}DHuO7G*OZBmo`oemIy1EL~KvJ**NR@xIDO)`}uMZu%_00xy5W8la(3< z7yu`fO{X6v4$aQaRwh^irl9HHWYTEGAt^}6p%<8NYxFwQPfh4l%L6rP^rMzGHa12x z$wR@5+GGDKuZ>yrbPB9O7vuG~6x(R0F{t5k*pv$=|MzfM9$6TM2tr&Z0=n+csVn<P zpm$>`g(?!P__2GF&0%xvTNM@tLC?T28u@R;*H}C*#DMo3$@~P9Zo-_bzd~^Tem1S0 z1KrPSM@?|4r;8%~N@W_*vmhLp(*T7T?n*!5sj0D&j1m`-LXIx-So-4}W7E%B(CDTP zet^-^ChaCe4V;b`xKRHWLQU?DxEkB=9o(|68fsN@%*LCMgtE;+gkBP?YzVaTi@s+$ zq>Fip#3uzAH8k1DMU43#%1t7z+kJ#%bLnd>LQ|Fsyjm9L@6lwp56dtUXwaEeDA7Nu zSaZ`$Cv@s%rf$-|8u&rK-v9j8QAgW$9^D4Yp(KZL!{XIT70V|z$DM?XD&|B^gXo{{ zv(wOyXIt(MTrlEjyuRrg=FU5s*p(%?^jCaVXyEdob790{#cao#bTJoEg#de{W-WX? z?wGJ%2WgQ~5f0eN7yhMpVCNj)iim^j_h9`ViuiewQQgft4Xv`sNmBAp2xk_{JYz^6 zOXTAiNK^g)+spXRyHSLlh^?gdTQ9wzq$!euh7ob{T*9X6Zk?4k5h0U719A^cPW*pP ze)X2L+$=jW;!bb+_Ge@kP@5FT$Q*_r?<t``w&R)-2NRRfXZwB!<x$`byTy>((XK?5 zvpdhEFv*lh0oCnt#p`<p*yb-M#!3L06OYJ;t1imb(rUaqPIuX@s4Oxn!QFi@`jRM4 zuKOkm%wd822UA(G@BYJ7hcB(a7Ho-8qh{=#sUIiZsYL&sz8lnDRRBI>r|<fp_^BS- z`bZ(Tut>SKD{N~n6N=pT22S}p-zR?fE5$H)S>T+%dUG5^0O~C%I=;43*Mmq5|AoyE zH_8Yl6Z9DlaDVz?*gP}*3GGRG7y)J*M9SX*9qP(bow{~@tc*a#LMzD26c88^(k8N7 zeXa_z<xj3uVgnRg)&8*{AYS6K)CJyUC?f=|$$`w!^1;9dm^LU5($Wy4&J%@oZqv0z zi0cz_fMR9;Hx!e@=I}mlnbWqgt(yx}xId}`TyX{%Ujn{3b6NzG@yG}`i2(_^NJvTe zouF9x@05BAB@RS)B%dhRk4b;1J;5;94Mwf_#YTeA7@aq>We>k%u+x0p$bGt!z-Qj= z<9V@8smR^i$&_iVecW)98Qh`g*c^i}N7`QT@@~OX`h+yv&$Xn29Uj91-RdTL3>9x< z;HfLC4MX#jEnXoad2XJQ)fKx#f)aRQ8^?~dh^wt-t}u4}hlaTEZT<Q2&#J5qNBhOl ze})rH{FV*-de+Va7;^*%znMI#5YH?K{o13=!rLkM`!G5OBa$z^H&i)ArZ9&BN-p~B zNu%fv9n1aF5!rDAtU;?3Z5XA^ZD!KPcsm%!mcf|%(XV8f&w^Saz;@aU%15);!p26< zL<Q{yN5YQ3T}0ATFD39Su*ZC)S{!<-kABK|n)INU^9ksvb4dRfC8}l#SV;7|gT4z; ztdj{$uRchkR$HtC&(46Le8`LrA_1+~J!EAnUwoiV&Oi%Y4@)$<8ug!f%0gP#5Umdh z#mAq9&0sP}XXO;QpM2YW{Eot@c2GF@ngLjBdFJa3@XRzh{X{BPEOM<j@>{GPx>-ya zd<dOIzT-pXRN&k{055_jnYVdHLM{RcQ6P~MU<|1Gf5IUgHP7UIFKk?Ye_LGg%i1$t zM;tsmR_yV6@WXyyNCS^FiO7iQi{aq=23qcyFeqe!^uV_3prAW-#qQ9dbX@J35-G44 zkm57{-53Eg0XO6))41USDO|<wyv%#>Mg!kSKQP@R;%O7bTRe6z>2|urgf*5n-&^!D z{I|}=Wi-lE;M?9K{D?|!kwxE*P7MoA1~EEGXgWTkKaZQ}?HY$EKew~5uuEgME3Vxd z*QAH;TQiaP$QHwBId~B@iLW|*Of|&dXI9)_qam$EYdRl=%aMFE@?dZ!WN{M_;i#e^ zj2I)AuM*3piY!kBRI9&7<c3>8G0S)}vGCIWj(=fhXDvm3*C%B6fyVY`u>d^0TLVI6 z5^@NG52MNWeAzK)-XSdsG-@AdsGAoUepbQljp<$;)w0_oPM5E2sFxPl&HIp<eB<BA z4O{|TonjBa@2uFsbA@T=-BgRg1Wa!t|I2ay|4cBE?7N?XB9H1kzbFXP&D@lR7m*L- z8b_Id%0#m<tBxPlqDH((xE~i---<gk7uH319rbcC<FY+^WBD(!>a<Z=BA<6_%KT54 z@>FrZU>0%d_iprK=-JuUBUsp2Q0i~8p6RD3m>e);X{P_B0{iDlTF=?PLU=Zo_eUD8 zbP_Ce(KK&;Ku*FvG5<12BQ-%<0(k@0dg(jEL)07PAXNkHuZR>i)Z`be`0&&vE0Ke( z@i(KWu}lnKJQZJ?MB)FaUF_yV!c`B~aSuLSMkpTh=GM<^GF<|hB%^<KIi5$M*dOi( zNhy);5nOM+kAS_)0u8#jB(xhh{=4a?&UYBeeRw>0do`@egmnq6Ve?kU3+$@KQmn+x zIZ?$vI}R~YlCm{tX0qg!iVei#f-nuF1^-i;wtdJsm6kfV^sBCj9fDtp8E9fkqbLGL zF^1KQBGQOh`go+ouob~AMJkF45i#IN(Al$Mq|ruVju;Keq`7kik<14NwB@|`O!Gbs zF3cKIokmG@`#V`uz`qOl+|!R<$_Rh`H35eFe_~Hi(QIWA+7RSw*8@YPhPB9Sm5(Jt z0RTP%pEPQ3IMq(zGqa;Dm+-x{)n~POYA6HLV~JNzs;+|8lh(x6if1x3K&B{EbW+yP zegIF-Q8k~_Bf{P{yriTFXdaY)Qih5otw*olQVIwVuC9j7P_LJ9f`*){oeDp|K8lYc zB`|kB;VCniq4bdqBlb-X5M<ubh(nTPfZ-A*i!<X<YB@0<X)S(upo*2J=aoCL<DlFt ztnu*-!)-65$$*<o!4LjQb|J1Rj)Rd&{idTJQ5+Q^9d9)C?Ce<lXa^4e@v)2ZKi22; z#LDFA#o~BoS(zr!p+6h}o7EJWR--yLkJlsm3yaf-icsiy0UPk(B)OH}*3FC*w-Ucr zou9eBK)h5dNW?c3yQ6_zV-uM4)fARy<jzD*!WqAuP>JH?c&>;P626?MOjCmF9II18 zDq!*?Ny3x5Yg~~a=uI%H4Zk+CM)2j64Gx{TrQa>yAI>%K7V<q$QYaM~gjL^lwxn&w zH50l#ZJ>{gt8_$qs90<+0C^g{2uE7=7r5ugqfNCDE)?N_I@jSK8~ec^S){o>-+x)j zxBr8<w+x7*iJ}FAySoQ>7~CN^K>`F1Zo%E%-4h&w2M8{~-Q9w_1$Q5On|yEg?b|=Q z`)7B406oKWSKq3xy7!)QPfZx(14}P0kkS_}QT;fy130`SEpBI_b#*QQ`UClV%biEd z7y(W*4t_7F#L<WT-0GH#q1mVHI6-*YTend36nMRcD^;}cf(IjDN-|&4Wpw-{1*6Fz zA)egBNWFcvz@YHO<tqAaNFkDgmcl;><RgoImR&Womf;mQ1C8*7soTjnF$-Sebe=_w zgxMk;sw{Zrh9VFY7#WpVIndH1>e25X6Gz*@duE2c*b&>gKl37b+00Rlcl(^KO3^=2 zH^SfCN&ndSGy5tO8LRxutIcT-)!O%_&|<m}MXAs(;D?vAIp#}x>ZOb->1ViCdEW@` zk(vnwMYCY0gBP3w3XN$qiK^L3=pA;y#zk10+MzqQiZvOM^h4s$45m0@QKHgm>@{q@ zE3e4Bm4mf|gQ}ddEs?OyyPMrVXINV;%_}CbS?&D7;-p=5N5Gmxb1?#6nJ}GriF?`k zBv!>f`3DD6{p!Ats|<;tRHvkC6mb=Sfz(AQ;2+o2SIM29xP6K@tAqx)Io7MqI0_lu z3Q-+7;aFa(hs)|j;L9)MdkB^t1Z@qsqkK^JTP#x7Z74_M3T(roF^RHTA?TTy_*STz zvzd{)mCzo-I)!=F?N}_jYhi0$7z-Om;f;?O)j=0)v@t3Y=hrLbygML>TJO<6B)!It zae2<mY|-$9Q5h5ABo*;kIf)U@K0ylnAl598ewk<^J;5aP4@-xda88sz-MUA&G&J#_ zF5%Q&B@je9>FLdu*(8np;>z)TtMC{O|7MP;a8&kV|0vzuyNOC|lt*%sQp!-;!4?Z` z+EX_UxHoYSGK@8E`EWffiJCGJq=X)18>7>CPl-u=a=1M#?YktME}*Spn7`*QFIK!V zQ)0w$6IJA)MMJx4%m5oI!@BPBGo}N5f3BPeAdi&^&QE_q3Ol`+YDYwCz}1s#VbjIG zknP=-Y?z$wKrI+fF(uLqzKDh&7d(j4;Y5!T44k^JVjWE#ZH;I3f3GYd`*T#R(XCO$ z@)b+3N@J9(cMeIhO08S5M{I6WJ<)~*1OMj^Y*N5ST}H#jd-n^xwUu+N7Qz8-McjET zS@Gl2z2e0=F^eA)gECEyrE~fG+nc||&s)x6T%Nz=NyGGy2U6(>U*i9$h1X_(T4{Lt z;)mQ(*V(P4Z;n76hUXK}?Y8^MEA{uYVUMB{T0hfnhg5Tw@h9iLk{1E{GcCwbBDKC& zi=Q8VB`U*Xk(CE{Ww14Z3y`575qCv1ggvPk8q)l$$7&`vi`BqbuWIqa<KK}6wmP4! zM$;W~sr?C4f~IrlrwVQIb$ZtHHqb^c{&cv<W;MlC%Q6KI%ajt7Pceu?9`wlSs)(rt z^Q$=DB*o`^>v4)MPdnG@2<B;+9Vg_Gh6<W@DeP5pC7=0C=8qHyhrJ;Af=*v(zOmWy zj&$^O=Lm@h1GcV4^waF+5bK=5MKPQELk+Sz>$gt}ze6q-_@;jd>R{Ss8O{%%nTyQu zjWjIxf=wKL)FhAFc@X-P$z|nD&<hfE6yBZ<jQhA05pOrUgAooJYWng?c<k?Bmc3<z z{wOX+_6KJ=lGlxNIf>DE^ULD0xLiTtH_+O#X01N5<Y;{0V7I0Dotg3e+~Brj;(RrV zPe6eF_^I~sbfB!9qyY8o&~PaH)&)R!5$jpyi>ebt0hcKisy5wdzxmPLVa)F=GHPJl zh%CY&i?8L39MaYK^FE&^cphtycX3zyPfqTy*kqxSt)~EK^L-n|2noRX*!<<hwziBs zq9~D9lYgvRLaN^u`u-KxM2P^5kpUkYxXdEJo6;AUOOD_2NAA%0I{LSP?kqNjhF(|o zCm0|s@6L-+<MVl1)rI?E_9H-JnZ^U_GfS1rGzPK$U#$Y`Eo=SHf{Cqp2<zPFYAvvA zd!L_#9At?=dqZB&HY*wSnH|5-Y>bhb^y1igswv2s3eC@Fs_edEJ=LB;WO-xeeICmk zz?xBlvdwIPocOX6l?h){Mw$;^VO}n;)cF7nWH^eYMouQHjiry5>KG>m%C%}?_4HVZ zl>!_A+w}R9pD_IVtD4tt@RBUBfy7H^X6gUA{{eixL!{RcC23JOc&!n4xG&U-O29-G zjn4*YHl9g8=>&+gs1<I*BIEmCY!4V;{vDc}p3d*3BxfR3tz+*m9O6VT%G+OQaterg zKl0mR8e};`2Wa|GO$>}@@Sq6`3vUtsOeee%ry-{b_deeqKtm?xt(qJMkXG8OYOlLf z$shbK_B+Ek09q{;7*E2;$Ox=e?UUmjwyXS1dad~R(s9WL?&{Et>Sf_T%<<Xi8<1yM z)2g$?0mL9Q_U9dr7ueE5;zMwNti0TIPZ(NaF%Z@#aERri>ztmUx&VN8a<g)6UP%0p z!W<RaMIy&qib3Ct7oco_niI%Hn4mo>=K}3mX!WRdC-g5;%pN9Ap@INFU|h?YVsaJl z<1j2&kMoUy#^Uka^Gig=!20@n_shQ#?vGb{6CgIW++bSZ)}pN!Yb0BBnw{zOFWlYT zH~tQNC%7G=2-NTJ4QXrh3C#p7wAX8cY#M;m1>o>T+x;;{$|fD*cI)jwFtdOZh(Az* zY_?FLQAtWnLV`icvaFfDTyG;j^o@GDo|)M+gW7(&P(drQ_N`)E3tnrXkgE*7=6InR zNS^@T{+uf0<(ljhhD!2{uYFYVlWRJJ7CyIiswTYISb9?Z89?G>*T-9~06FPWdYxHs zTLCx~-ENg+pX$Pc5Fo#ChDLpi>;;Eb7`>;~;%bw&od(o-fRApL>a6;ff$UczU&V5R zo!KIf=`c2?7|>H-lw}bfe*P~k4%KA3$jHb_?cVp^1AVt-Uqx(>7i($P`Se{cZf`$f zStQ5Dqq}=}BtQXyMqknl>~wp3JNT^Q^)GH^yYKLE&@n(F>HK6lF}_6`cj^m=N{k-o zVQyv?HaIBr+j5p+T0RyUfn2%Fz)2<yjZ9r8HvE}kxmcO9sn6}<+G3_mO9g0xq~9&0 zqr5!wa1tY}t^3%m7&(yr%=<R-h#NBZ;`S4fQKlq_@$nnTM*kM8uP8f5m=$Xn>4tw7 ze{HD3BvjP#XN2~uOS<ajpMmE~CtiN}!FFAfq%7^phf2!HnH1ZVuIt<PK=zNCn)^k_ z(`}V;0N+mpd>PGi<zEvS`8a)t=NP3et}75E1SFaOSnz-RFr|Z~2}iHGfvAvf6*CgU zjF#Qs9@*2xCphdbN}z`I)JjMIpu#Hi%d<ta1>a-Rbe>9-49ldxD5|d^-d#h+8r5E3 zRT4R8D0<lb2ZMGrT^Le)hv#B?4{Hx(v*wgoY#v<6YMisH1T~_r{#|ZGagMaR#ztSM ze;EEOGmG<2uba&VSqxdnFnNgBj`K}}0eu6h}!3EvpU9|%zOa(u#8!uEN%xTMhZ z6`$OWXj!uOLxeb1BO4$jBk;Md5t7NA2hO?Y|KeAFU<y=;z3)~PGF_hV;Q;8k;`BF9 z`W%dbQTPFWde0g~5G->FGNrcSI(%^O<ngCo+*3%|F~xRvS9u^{nVO@s+C8#kKI!Yj zF)ugg9u(*EwiTFOa8XEO1w5uhi0F^-8P&=2(N}m^@`<m|$7H+wbwO0d?2q*brq0!6 z8~y=|bESxnnD3zQ^rfuMo)q*K%gy9CNeBX`<$lQ}QFvUe8`21z#=ou@JP7W!45SKf z@NfAR=bv?~=28|p7`r(y!=AYabs9US1L5H3?f&o-JG=XEjRrkE{KkFAKtzL28(V`n z9d}zDNS>MwImzBvnWo1evpDK*?yP|aVF6|4-`eeDlVAZ2hw&;JNaopINn0S$vslEs zRnwuRQ<N{aevcj5x#Kw4>1YC!wsy-3ke~bK8_C`t3O3$4^sEYXEqL+}w3Y1aVc-}Z z?@L!zs*%3R!<*KJY_%PGzBZl8qb2}(G788BJ?Z(=u^mFQkVw->4^KMRF=tw+k%;Bm z`prU9D5gyEJsP=>`Wt&5@N!~4)4d1xiaCZ6PwJSC?6X2N09BeObd)+9I1@YOw}50l z7XVxgF>Nw3Qxv@xA5FWAA9^}p3?%=0vo_$~1W{NvvN!L%iB=}?J^1riw=`ZqKYRO( zqnHQND|$`B{{2N6r2Lg2<^B@rHAx?sYsQ==f)rA8%<iqOz|}ZIOXH&WMw?Rpjnx$Q zM7B8=?psw3r_Mwa)XTWk($dLWH<v;eDUuLv>7XU_Z|DrPdv>i711kW3<Nv@T<rfc> z%ur9=r3^l2Gw|U>^Acw^-N5RumJdz7B^O(JdtU~H(53Mh>*WVP4eFY8t3+`6Gm=Uy z6sg1c`<m?RZ+SwV=H@>xQPWi!p|`j?$hWAXoj3>5MD6%5!ivVnJ4wxI^7I%8m|_%u zPfuy@T^6J#Bn*gp1Rwpp?jYuS7yTig5IBy7uosD7uq7lN(0WB3)Q@a+U1o)jNL^I> z+P>7)$Es^fm**p*>Vy-)U_j$Bz%x*I{T=D6EU&kPgm!=FShtWjIvsml)6McaTWcAB z0df0uRBMb`elf7th;vjkOSkl_;w<~Zl&!0it(}=&PRX6TY*tG5%Sl{@y7JqvHLo^S z7c&l>QbC+j9#{hdC|&pL5%)?_Jr;G(or>`i{KlceEp$zvvL|6Hn<4M|d@Yhii52u@ zEum+Ugv$z^odM&mV|1n%UgS-dM9QTDL-W@p&1%<4?bnQEDm-Q@?V4{9jpVA<Cr4Tv zM?cUEO-)~t)oXgvonEhzn&q40aLz6kH70ZezKo@pnNZlm<LEC;A??qpyx@IQ!o{g^ z1is8fbUS7h@N?jgfeBN`OY1=OJjm?>vpNd~Pq1lFvL;LdM#>c32jROxoT$r99jz!F zxn2~*#hRTXSaWtGk!EK!x<7mHco}>Td-P>w>;6fyZy#ed^S)D%J{>4p6}B}lrcnr_ zMa$lmiVr91u3<J&e%D_f;V-jJ?23BkcR2EFm0({z+1p%wqZRRX?><+s;13iK&0~U) zSWZ}t9%@OtA2vl|Xotj2z|`iyqClmrir>k%LaQ<{>b<lJTN|TRzh4sv>omqKv{=Y^ zeuI(2vf<S}=;~0%DW1DFG{tZb*L)$^FU~g>*H(uHZc75V3MTNbj6^RAImZ9PH~L!1 zt+CA!BP0U5#nxbA!iTvhN_@#0$OW5e3GVOj!{g%2m@$?6R=L!bl>=&O*sa3DhhY>H z#sG34;_=CemY0O81J?iLYN~A9!I+!Dq7=YuYmE&9c(Gw)zWoy4e6*PC#~-*Wtm+R3 zUfAKS?1Wy35pRFz#uqoji#KNNVZRsYK!5mBf*zqsD<MJU*Nq}&yV6MRRaR0G85ju3 z%gYPG#!N~)Z*+bleR-EsA<{ctbWl}n#E{|a%$fU(9?)Ln?=|8&5J)m*v{qL~W#_0d z^(!hY+#Ej%lacd6b))6@U7>~$BPgF+o;w^#O_BGxOG)NBYwMd+wSgCBh17abSP|5U z5V66|7FEWY<j0Q)U%n95d^9k%i6zt<_v`T0=P&0?i#_MqI~P152z4uqOs-?f={=RC zpfIANV({U+@4U|5wr8h69ZP@gY>6$hW<Z4nkRO5#MlWv-iY|XOWtsL@^pUXHfS<o` ziNrtIQvK*Z-!K=H<uWm)tFm-WUjVhkFb2Mv#MxA?XCq~Vm4aD_Na3epRYsI}#JD~c zW>=A`+ChHFg8M03EHQs9PLI!~W%)#Z0u(v=?P<+-oZL=sTdM)t_iqi-J&L8;E?UJy zpK0G*5A%}y4rtT?1H3b`r`r8;gT0;X2(CJvohULq93L?vQak{9zvVCF3>Vi_xwKpe zW45%5G<M@M<^GYlCTJ4w)K&25ql5%<h=ijW9ZK-(Zb;9}3jS<Cmz**^BO`gS3R1MT z7yfrI_s)hA0;0ILbM8<-D|w|hEJTc^WYuO9M_6%`h(1@+I-VK6MxTPMZ`lMxNN98; zx|!TuJfyJ-bk`#9Yc&j(v&}HF)!+Mkg8Hg<l;<*$0QS^;XWe&(ACvBcGF_t9bKRJd zH4We0Rq(?+x2N9sdsit-&*Z{~T&PX`#6*cd1`EU-zP#Z{l!x8*m_+Kzrr9Eq5yofl z?|$w@dqHm<tvy7xU5t4}`sg2bwfClEsWkL%ki=}347pMp(UrlMunv@mcU8T#s5@f3 z8v8+CKS1zMJ(zPoIq}kw^fYxFEx-;iOG2eo+82I6Af<FAzcwV&9Dy_-B_&OZP<+zv zu_ab=am8klcMe&~5SD3UDD0C3DLhndj5B~W(Yht;kF`T|6vXAd*_)kh^a_V{8$?k? z*BuE;rS7XSaDIr}jA|Yr_tZEt6qg8pu{n%T@2;?PMBa5n84#+czz{c_k~tUjCT=}s z`oOfpb~UW!eZt~<bHic0vDt!-aNZd$X9ikS5f3P#CHnYF7|e3-HN%r^JC=PSeUub+ zK5W~e^LJ})77`ps7~#*~!<PGl`lTtjnqib^qBD1O&+v~WSp~CpY*dd%4)@*M&hDc~ zMZT@j9R=$VpT>Zp`WcK&GRsl6wLp|QY9-4NUxG0xe?qK4CgrA+*=%y@m-$Gu7PZPs z8%ErDvB``pM>)Dp9pD-x6LRkN?OT(PIUmj-kO;U2$HXW!JytZiVV(~h$^>WoMeg1I zVGgLqSXow=eq_O&Oqot@*-)mqoe&CuN^vw;V}-|R-VYQ{1qM}A1pHFn-nNt!p8Ul{ zzX_U8a9LBV__Iv`$GGIEm`Gzx>^tvWN(O6Wopl#Z?ma}BCQqYJ-CpBst`scN6QKjr zWIMAVXXjnilgO4;D1-qPqIM51;a%w;A5FAojQ?t!8@*2?GPECB?Nyz*C{_Mzs@t~Y zJt{Z_<K^jT?1twfq1YOWablB0Wz$rU{RHCDY%XgV8~A<JpYtu<d)V&lSO2K$UpO?_ zFC^8}n3+Oe>fA8|9J|@-ba;l!%{G}=M9CrHQ;rHmqd%@*$9_}6DPOs5TluMhE0H9$ zTjJvE?s-^^)L)M#Pd<~adVbmd`;%w|A6*%NM0oDHJK8F3pR<KU5O$&aZzsF_P`ZBt zoTIXz785F(L#NlXREd{?Yb$guqwEp3aNmI)<kayI$fV@a@MR|m|0EY-ZClLO=*&z^ zO>O73A^$s6H6EnjQ1IPDb1K^aZvH1$@uN(H1z!fdSYu<h*4iK)4Spy}3vesOMCg-$ z)k2PqTHl&-6H$=9m}4$LHu%EZ`ulhI%qDj+Y9=a4Ul+C8B;5ioKUou-Qgvm31v#s0 zuw%ZvL29@xJNB@7r_X2Tts8Gc9%ni!S+iApA4stW)y>UFKeMg@!&Dq>|6hg#{<?P7 zv5#2Ui&0u^eIMk?f`PTEiS-CKTiT$$o|R^dEb`=!>8gb+q!hGzz_-l3f@rbg5;}U5 z)raf#knlRupWJ>N92~#x)?Xyitta0N53|;Dc9SUhQ}v;QC}xrCJ~U*7Joq)lSQ3I} zzx##_SjbGkIlGryQ!sqb1-){&+wDZQht(+gxbmu-+={hLFz0p{W97Nt`R_a?7WAT# zrP$+p6NVz(5E}SmEB#zn44*iK)plVi=o|VY!{p3L&d3NyNa$E{9JtKOH;R+dU2DKc zN32`xW%z<Dhm5uud=TZ?`61RzG)`rD!}^y-?((_9W@XuD?wO#9>oYUA8fAZtiHq+h zX7A}y(6tW4Q+l8yikU*YTZ6gI-AKYI`NmV-PX)hvA>BE|h^4=3*xOBFsq+(6(;U8g zSZ+6NXec8VW|8ko@K8Bd(ScxSxF=N6BjCN{#}r&!Cy6bu->5#=<4tWwWkyblG!(w( zS36NS-|$5|K4y;0f;+41`W6d?@%<>;pKOA1@TRY(z4wk${%js=`^Zk>js#ArqsIFS z!+{~g(!A?0kPRTu${ZXTnjCe0*RQ162cx?zVR*3yI<~<HcU4o<&jjR;L!#ERq{@2V zok(ekYP)~_7DS}YO1{+&?dh_Du~F1V$tqD$oD0Hp7|H0i*+=-Rg(kj`WB@*RalwoR z__rw(<katcbhHiqf8hGUw?|Uy^NA{mGSEK$;cc8rjaz>8peC&q>SYa4v5IbUC%Gzl zeMPt1<j`4bMm(bYS&8o#@$n4Ns)<dLON<acWMJrM)9&{Rvz=@2wUq{2pTbGco_Hl! zeJzpaC?BkL%W#d;gs`iY;>%C^!ZDG6K-nJ9S8WjS?-#APKCWb=PcrYgU9Cg1A?xft zXVjvP4^<0rKpgZK{DchW&Y%*I&Cbb*E;;weEhWFP!+Z<aX;xHT@JiFQSaWp+TaP5e z=+s%o{IzaEGc~Gr5<m0PJ7kw18?Sn~AhL!)zn+E;vyMyahh|-{<?3sYMR{TBT?~x- zA4ClCT;g9{hBEk$VXgNhvQiLWa;-oz>?+6J*}ctVlQrp?5|Yr<M^u61fv)zt?G~Og zOO{k;-N281LS&xIL>vmg%gutE%<?x?mQV6iT&BkjH5c#4&d?7&y7{AioRmg2ozr0L zt<2RppPr9d^xsJ=X`=q3nDWWa>w66<p|1)aUQ2e^N0QaM6?)ZxvGZ|F;Y=5K32H*b zkyLOtn~e$6b)u@_lqaVYH_zj~INPvVduK!@Yh>HtYnq}cCMxR-uGiU4?)jpmz0Tny z!SW)`_MC2aQ@HuewS(GzO=QyL#dE(nJn114md`0-BElV3mE9~yxTNf4r3#KhYo8;L zbAibgFvXGl)n4ni?mcb{9h44<HxZU%(2ft!t;(CUcp+k^+W9*|myx@;4`Y7&>c^rx zaqFXh^`JJ8ccRSe@I>)MIHNSko?g6XwDZuj0LmpVNj0yY!p>Z1!N3jietISQ<BXLY zcFk0M`647j&6X+P)pP$k;YQd~PX)M8B?eNijy+?&X8SD$BI$M4ArTSnVu^Aep;wx{ z5vsNLz)psY;qKM4|2cqqx46x`n8f}HaNFlcr*h_#1-Q=6vU}X@!(w2$wxHGA`D)KZ zG6te6S8fT3UL_gTJkJM#L7L6AZmbRg*vj+@d*^!k1P`K;9rC~S(7$Jr*tU`Eyr)(o zQ7CBZ`?)p_><Nh)>KLJZuBvwLtQ3H5J{OfB;HguDic$1YtZ488kq9C+=CP0q5u>YA z{<kKGm9|n*X$|4M8;cUi39_}GwMnb0(t;?AAEmk5;mu`FMmZ%+{cgr1{lzv@{E7Rz zhO(Z%{~AU^A0Yu>X2zTWO|W>+i<1^!H5kV0#7qF|Nmx}63JguA=}k8(whGUsne%UM zMnrUUjQ^1qky&Q_*VK%hQV0vr=$lD?*pWJixXXlW@vbrql(wp&q{au4*C!6&=bQQY z_PM63(s@2imK7nB!FY<XvzO;bpqB8#N}mX1&{-;i$-tmlV-j&}_vTsW%}-*M<}}5H zSbOqpemmwb<Md?S#P!LSiV-t1+Vay|ZufaykDHyHy;yZy$MNt5gj+&2nfie=>+97L zkQmgzzXJ$w`0x>cn;TwCMMqCR<cakB^tATS?s7B-6t-)yT<NsBSC_e6x`<x00_d0I z>&x@vhc{<eLiO|EY-!kLPZ%XHFSxF<!Dbm(2vB>de$TL??KzUnY>oeBe+mYRC|u@l zyN>5jfQ#39*=oN49w75$N`B98)C;dwx!J+2-%bor@T{@_$G=k~z;`@dA^}P@SHoA` z9zH-FQy=?82ol~fDrE<;1W@x74G0U@h`#ye;l;maDs;8E_a)%10s-P-4gii)<4T0| z^lLZRnu?>pMOn%g+EoSt$DkSzd;u>iQ3p%-oA%AR?_;^OL`_;60Z{-DR)mMkF6+0s zB_t$F&a<XH+98Q@Qd7eK0{2Ex|4uTs3<j3cHC@-_73A^&oLuSkdv20yjAR?@^QD#q zZ<#c!TlC%eQj_-d1lq#Ns%;Y0f6e<B#l6LHZ*BeWpm=L|LSm*6WWA6X%(UP6+VbId zotpY&w`{x%2Sgapz{XP(c7cgZ!34edKtJ~Em&ROE0VMoi)gS+L(!LN5#m=NfS*9D- z5GEI|tG#~&9fBKGr1n-|uQ~Kx><6)2cw7=9<AqoTkgC^(ZkBFyAlJ4S$c0(yAW9MR z!XZRgoABS6eqbOSOhiwe%r{rfV?m@vXx0fJ4r;8RKVBz8SNvGn*xil9_5H#cB22xn zUKyLqp~7Y>MnQVq8rwo**(3F%TpoB(B_z&r5SLNMO^aJ)K_z>k>NjiWjxQXUU}0rK z7l^3XiYk-$Z_@=u9-_pzC_rmTvtF2>siYA8%RI8eiRyc!vH!XVW-#zzh!=DZdI=we zV_3|;iyKp}WuKt<@4Jy0u-UZ6cU4fl-b9mjhhYbB#|8z%p5*_XnDWXRzfeKuLt#4< z?Ac{VDJmK!*1vvF_}lkmU=(8h94t~<ux+qD#tXjdsGGD_Ko2CAy`Qx9CG1w0g~~k# zTM(;5_qFYeHJi5yqeINeTATkHik?JjaCW2c7cAl($e!ox3s^7K{Qo}qH>thF@^9n& zzk|H_OIPmxew!2Q8tZnov0;U@h__KClUq)@Gr*38Ar52&{%6qt|G~kOz+b#~xylys zO<?o{HnjNU<bYw^exP_gu&@x8lXE8L*G~v8H5?POJqo}(OG{g<p+7lr67)_*v_gX7 ztWZX<u}sUaNuXg&`Zsv7b#tK?d}&}Z&?G2nY0<c>n!1*jh;P+y3cfof2zx2ELi60N zcmG6UE4DNXpCZvUw5b@ArTu3iNr&qPr_nEdu*qtpO3Mv|OVD#EkAgrzYVS~&pb)r@ zb!o4|uP9y(z3!`pwM1BA4gcSwfpQcl+>6%2lKZhXegDa#7V}3#dOAb;{d|H@R`nwb z1*?SNSg~gnyYU%dPN2h+!i(XW@SFGXTU&J|%cVy?v&IGG|FlkT7s5QepQ!fMB+;6n zcuTpEE3;|&zQ=(3w3c{-94Qfr(`xzHOv%H8#ymjU3$W}AG_=A{r2a+pm)t&HkQKdD z<e=h!?qp@&vXu%aByYf^xM&qHJVa33#Q!cmG!hBrhCz^l{OZq-sIP8nO05MV?%;-w zD(IT*5=%h=o)cikl)TyZAg_OMfFTj!VdgN!9j7nToyWT3*6#;WVvFJbt$eCT_0sw2 zVNjf0eWoQVG)eOIBAd9Vl2mz3aWF*R{!2(~d5SSu&i+#GRiu|#df80{@nOTzh=Y9h z*cV;|jCTh%mE5F{!?C(-|JX!Zm?8Y67_X}dq3_QBP5{h8GF{?^zL4tRCBs3!PS<W~ ziHVEg2fww%utrI)P2NMqjVAPJ49ZO<qxplR4G%D{`>d9~W~1?LQZ0B%_v!G+tiQ9z zjU00$fFNbupr!~mCEby#16{`V8e6LWLGp=;dLQPv`y5_?X{DC9O9kqDY(;$%`?)rg z*3O0&CD`9He-$57_4)(d<lKDE{XR4|6$S>qJDqBEUrta5Wp6XHtM4>6ls1)tc)kW} zega+t_DRTx;yGk(R8&8&_oGdL9|6A3ReMK3J(dHXC%53t`ZX-ZZ>x!cm}r*Nt?ig0 z(g%1gCz7y-Wf?{qJT|1~4Q_tO^R&3)DmHtyJxG;P8AS4gR{U0FXMX#1^w1m`jblWF z-Vz@-P@apa7MQUSD_Tvi0<u2{<gKo4K6GHolWv4#viq0OWLBySW$RKBa09@fkJ+t* zm<Ob~7QM*1VZ9@{-EQ-OhF<;ruZ%EOY&j_m!$}|gBsFT?o<ODlMV>plG77AtjmZ(8 zYLB{&{h8%anR*h-5b!<T<K3k6ZJndT6+39rXEXY9A`=oFzUSgXk&^P1eEpz?_gkk8 zhRsG;{CehHuxF-tt?UJ_peNI54~}RlUeBl4B9=lSUqlT?pMQq*rNa(y+ud3i1}&g2 z#l@CuP;Sn=Unu^&*}vtA?}bxEKo(i2Ap2NDNNAsp9pEmczkos#neeB?qEQ%v+^6J2 z+Q`SIT_a<E=^@3xScoAc<oOj~M^ieQn@7}T>4_l2HWV<k9zm=MTGzT%dkfydueeQH zyFn>ney;)Q;1(B<1^q?D%BMUB44_#o0;VCfr(9RKI=u+Q%sjW+_!a;9g2B}H4HrI) z8rMRJA&0d+)fBaOhd#Cl&m<Y>buDmAd{jj%gv&!PB!$79LyL&Ava*i%@;8KxY+v^+ z<h8g7tZZf7qSH@$a=3Aoz8N>EU9sDfKR^`TU7Aq>E4>y%$Y%<u-wzk~{SxkmUHg_* z8L2@g4)0u#$)K0-m?hargvaGHq5S3pc)x8&N9>Io*Eb|zFVYp<`@!773K{;a#jwgl z&FLs-NJ(`Z9Q_cD8bgBa`#|V@)HK3a(=~aAh0od&iXDZ3&q2BIQ<T<G)8XgA<!D3{ z{`}bYx2N2c2^+DO>wN5Dme*DYeY2?_{ItOOnyIhJ;E2)CO1~1C^&#s96s(H?5VZ6= zRw(x8^do~4-(5S{gh04{0h5CnV!d~IuaHJ^F;0H48Qs9>G@?VXvhL;iXl`<>tj?ic z;e}Al7n4cZX2mc#>X-*pUq4lI)Qn7mn=)!I!o!P^L%X}Fj)}PmH~(bUEiqD76$ZG{ z`}uJ3A|r^O#`AQD57E67p^`g?N=b6GyZFF5y6A{gq$t_la2j@pzbhHjIg`~T6T<GS z!=Hb$WWssHo^V8N%w@XqHy6uXW1X=4P_t$VxXf{IcV=oGKDQxWg)U0Z(8AsyGhz_a zUnX20Hh;{cZ0ynAiIPouRd$*(0sneYl-%;?m-(NnF51z2d$@Soi>e%?n<;I3)nA=` zG}A4stAR6GhlsiCy=Y!(`^|AC5xA_#JD51g$*<aDn33(~h+>fy7bmXaI~&guTQ535 zu4XJ7uRkSQzX#mQ3?L_5mcCXLdVKa4UIaN?F3iB~?n+U!+fie@|JW4uBdpTUk(Kp0 zbt(}>?B7KE^H)(vkhN!gdIXNZ1kg-GK`Y+wsXlevlq!s3N;EekV1K9=?xnf9ZakaJ zsY;j$BC3BYS;*%h8LZlexu?hV`7^=3imGM!mP;jE)E_5fhPH-?I4I1;7Ur!l@lK+o zGl(?_DQU482p=2Wg%G5gEzLKy5SWjaJ4csMz@srq3jZ2n8WNQx-0y}}IIqtLq7)#D z%lb;rQ>o+{XJjnI)@#{a#}e|f5zgII9ay*CRyemWf8H0HR`f&yH~v3;kN?FH`TzZ( zB**bGVA^5A;b~Z0C-$S5tR;V9Qc});C<JF6XHH2;^zpHdiRsRJMh>F1KOeO|Lc=kN z&)k8e{Tt|`ooBVu{#yyv1>M#Ce|FGrs7er*m5nNm^*{ia0jR+(UV)53h2JJF0nqx8 zZnQt;mk9B|U+Y3quuQG30o?4|c$oyjp>GCHp{3y+NzwfZZH7l%?=$`axCJy464oMB zI3x6}U0YPG83kK)3+<B+(*iu=;puiMn1L73jjW`ay;%Ork-a~C%C`(2Ftg{6+6w~w zjx8!;VrJ#qdVyA}l$BPJA55mxF_}7L87_#pp0eQEkuOSW%0@kO@xRMVwB8@Dn$j`` z4VTG2d;))UQB#Koy6<^;nhD{788Iw5mZsTzE>CqNuc9Ip7s4eWB_%G0UV5rF4Mo_- zXh7;;ALeacKZek1*4zj}1`&Q>QqL3*EGc0C7l>o^t|*F57W9BUz8DvmGSqhciz{T- z=7NQLW1;3J52g#zBP0;Dq^^eh&#iW&=C)sY?P}9SHB^#Nq~C^JB-Q^wALLgb_E$%c zJY`F&%!LRkGfK94d%v1<pHW<f@Em^WnU#XOAF2-bNxjO$Xr-lOGT}em9})?d$s+AC zxTDc@Q3R*JE4Ye?%H)tL#RvC9b@Z)ydC+;gVq|a=OQ%brqtcv6ApMA(_towuHPRS# z(R#1y+}!-de7PNANr69DX#KZ;a%w5t+t6-j*dxUKeG+~HCKm7|3o7~PaKO`|$YwKT zpozrA__5CpB588dfQ12tKZ1zyQ0#FQa(kGH$9+5vVf`Vr(Zi7U`0pGArl1fz{;7ic zrf)fYsu>s5_NTV%ni_)i7(M^5f5Kqg)Hj1UvGvMw7`tk%5!BBb=>$x4)Zynpl<jN> z!f3M^e<8E89omnnnIP-yt#*qqwTR?@kwTA3%+W7mNOzCwGL&;vPmM_>nMc1bM*lWC z!0YuMLF+IXzcrsthf7Nc@Cz=N0^u?;dYZlHE*a3e(iTjMpU;x0SW%JMNZ9y4L$B90 zV9ZTmk~z<*8scK+S8VfRCa8f!@BXg#x(Rt1xmb^T`4lv7f3RMf!Mi1MO8jIJd<*AT zaB-|~8UMnmeJeAvh5>uYFDZYCEgj~bb202y%tnh@ja6dcmrtOxv~Dn7Z_X>AJ>t1B zjHzuV@YF<$jc2T)+%px9avuPYz(O`Q47?u>iuPxIVXdsLj@;o@SVyVr^Y_FT<>8Y3 zm*dd_^U20`DOk|84tyaG?Vhh-E}pT$Lk(HVoqE_YUt@gN;Aa5?H6;Q;@A^@|;(a1) zLC)&J@*Nb^=Hur&>Gg8jsRnEY0ain1VGC}QJry!aJ_Y!nQueO}Wc88?VrCjPgWDU` zR3~(yjXeFsUR)sBOIR9JEV*o-Vd`gQ3ghp}mA*F=XV(QMcCiTG#gz@%p|{;wg37`A zc0+MJxu>xU7_@<_1<Ux;<28dqTr8h(;p1e#(ml!W*sgSrrg4}~j|BVEK}(W@`1$zM z2Ak>K@xx~IGsS*?WAheR?pf0el-@J42b&W*L#7*b(;=Dr981Z43w!j->gkuPc7LxP z@Yh3l^by8T3{SVo`mUBm+F)(ayuh3w-!&e^T0v5#1v9LNTruA4D8PZSq~|gymg?jA zaqmZO4ldFI8eDU169l9aZ^35tsGfm8@61@`bv~o)3ihSoBZ>s05>_Dg98XuI{-#7f z@of!?&q^{S3TP$jGUwT4P_jTrwX+3E<!r1SD-6Ds((Y2Vp7v3nPw8A%+9pLb5(^QL z{&eSIQ(JynaH|zTbec{e_QN30z%%GBYuc~zf|;unj1$u5-`b9%6<w;%JvaXi>1H`9 z`Zorlm}VF9Wt=Qd2jTPQ?5;u0%0U4kPly(fU^gn#9h3C=%sX$61{_ZPrGt-aOP>hg zA#MQ1F4f>?matP~<QohUqKVMNyI3)k0_${k(_zL5FAtCB)mlK@RNI&F{S}1oKH%4@ zSsFjcn&Ceu%|Pl*);K{Iq9Jy9w{e4;v&n^N;BX2G-~W<Di5A(9dMf5f<-ZOkp0>t4 zU7MF!-DFm-j5!eLs*7Pv=X}C4F4F0mkp96otiS#2)_aw;tzN@I81o3N@MZt`>c?_p zuEU_Oe5w<Kwj#fgJEco_;{&?*CY+KJAbrBjYxGQjdWYEgt$7dhho3ZRDW;FB(dg5@ z(Tqp76YGo+NI)-evGS=qyT@Ld%!29(5u>`R_}4{qk^t$E$XSq!L(`dtPMGgP)r-@@ zkOP|1M+LZD7L-YwLT5svz;WEMDjy{h<YG@aA|mfm@=@=VFUoNB;^R=BT$7`M$i~ZI zZP%VGn3Q_Z1LyQ4Q<imv&d*<sdL&rQRnKuYhOTtXEhBa~mo(u%VRfTpA4KYs2WZxv zp-TO(U_$bPaSN=rjBqX*a7PcFuzb7_VtUOhXYS9|-V?o^J!M~p<$65nZE`some9h& z!g4s8V_q~dHC3~nk6O`gz{o&IeMl33)z@_^nNzo)i;x2Uk`O#KhOdnS<0x}i1QYi6 zsk)n@@WQC}bv(LVok|$rM2Dd_%}B%*5|ZJrsk&@TtwE92Os0ih5AY3oKM=chS8UCX z#pTTZhIp7UdruYG9fu^jt6P0#Pj^h@9j1J;+toY^8y)vqDhMSEH1{*L5~av8Y{E}4 zbV6<`>Z^XY`#fQ)8&XxaGlGVh$JY7}H!ZeDj4T#G_MoV=C25}gu??qqWZ&r{#p>Dw zh$S+t+}mi91-#+`>ep8WqLTcooOfDUd^KG}lKSmBla4pIy}$2~r&OTO4;@g)82Yx) z_p2LOR}T=rwBfrt9(VcNQlaR=ed<b_ZW*>F0upsF5fY!bu5iZbi8;+Dt@HuxOZ@Tn z#8fB{g^<&~#<5QjL-BHMZ$u25q4#?gd|4(&5FGBO{YMqIXb}AuvNkFnBs8P!Ee|PN zQjxH-dC;>fB58rPxPEqZJn$S>gyp};5@&l6vTW1lZ>xQ1m=-=hHC6t7^^wz(0-Oci z75TYk>oAqb35z9rRx*2WHkaJl%2K;~cKk#7G$y(a?Q`EF@)zUT0}}lGr_XLCzJh^m z$7~dsRm3i&Jnc7-aj<x3rLqq)A3YG|<T#qVvj&S9+jR&cKR&nj+)iB?Xxc&fMrnj@ z&xoHlB%FPks2xyLo{c1bHD-Hi%Stb2UU9a4|D;Jl>NXoRB-er6<Zuz5Y}+g^pxLdd zT&Yh!)U%o`US+;Ynflu<njFqjyb@kP8_Y?t7gzXxeh#%gtJ%J!^l>X>ciepH3K!Rn zHx}nR3dro2kaHSRMDBThv#P=BCDuYrN2q%X0&hG0yB$YbxiQo>H$jOrG+P1zWD!4- z#jMi>onOVY`bYVz$_P|CYx<>jR??%Zj%v2KN;!JQ)cwdpG4vxe#$yTxFQT<R_%r=t z6)EqOSqA%u<lNZmq~8%;P<r3*q|`*{H3Zp&+OG3R*sdF=lH#LfkE7aySR^jfj^O#8 ziFdPM4V>ND@RolDIujFAVRg{R+}R1#btMLz@lPlPUY8;?dUF8W0t!S@LD6LNR*G#0 zvF$!X-PvI^r4i|)ZDA2wn2y_}FiQG|b0Q_Aq*)Go54+LQqoSYGmYx=Q8;A7r&kU%T zetx6)R-rs6HS`Aro#&hMOnR=U9hzEshEc<yY5Lw;utesP51FE>{FGrC3KTgTw(pAV zJco|XA5>pT@dS%Cv|PNeJ>ORiUYBeOxBsT%rpB}3o3%T?gR8^I4xI&bAZobt@-R1c zX)3#*N<i1o(ETG7<b6hv{iE>i7LyU)I)Xk3#v)h2k?fV+(w9XhCNZq8x865H+_vC} z#q42z^HzR%kLTNs%!EU)V{mwm${4EetbeuWGRRK@kCPN!-<FN`<n3bYyfBAFvSv0= z^2G-EBq8w3Np;;9q*H+S7$B<olI_?`VSt~4V?_5vr-ebeq0WfkQ1IwisP}{I*_>U9 zlT);b-@wTN-dZ(mkaS5gwzrO8R@hdeS_bYW&`$ib&Oo<Qh2fVv%T&^Vqz_dl@jOeP zkOS)LVFBMgs&(4QO<Q18A3IVf-xt5hgS%w#UUjkHXx_l4BqF)4r0SwL(aqory<->s z)<nSAIcFTsW`bkdDeC5Gy{SalCs?yu;KA?fAc-BI@EAfU9F_21ONWK=bJ4xsAf4QR z*=(uNmon(-M%31QHYLo>IJ@-C>9m3PY>jsUUQuW-(XGW8sY@LAzy4%1lcbEBw{R1T zwaWkX9Mr_8@;TaqS&)G;?5I~;w7-7Y>Sp^X*?64m5ck1*Rr|Hg_noh{4{F+k<D`#u z8xK=rNfprw#0VUoN>kMNy;Tu$fQpL~r{&qh(tOhO*i@AqhL~wC^id&ch^9D>5G`0V z@fG{AeIdvvLTBZTy(EtXInSy>Xtacu;sD;z<+M?L3}R8sKdi@h8pm1x6c<WGBw{BL zTCFQI)j6GsB6TKtyb2#BCd_iqL|j9L5}2vn65^Bgboy+@+5bn`PfT39T(dpso3oi? z=V<@n@L*qSfY;`MS%`XuXC4lo0FWVPAS=AN>;;H(*QrkUwplFp_P?2CFU@7<|5$DA z<uZNSxU+jA-x@kr9nC5<F*@~c!^c>`{F>Zs`p|-`y#RUD@dRb0pr&QcnCzk|hq68Y zyKB1uS^o5r5%O`?Ur|MXMdl5#BgNk@Ha_DSyEu2im0}V>RI?!gKd7-z$t8y)u~*so z@d_TJux(!vDyeMxV@l?i+rEFkB49!pnaF(#-=5O!*r($r%|uqK+j@<li)hwvo<#{- z@<U>DqII9CVeLPIw0^3^wUt=wDu^Xwds!y6zxw<nu#Rtev0?(;q9?7BIEwX;KQg!O zXTJpC*IZHR>ywn~nvpoUc0^3{=(pL%vtqihMs>VbYhgV<*>p=O8F2S=p;y;SHQfsv z_eYC5I+A1B2{GjI#flr;R8zAT`4dqZ*xAJab%S|d$I|-*Y7aa2Nk=Y@Dm#ombfO1` zgmiUviB`M8&N=$fgo@?e%@tN8Sz`+NCI@AU=U-?qFz+9jcaHZX(<F`MS{1+Q?U7sl z!roZSmu_?tKuF*r9rmONI@G4D%Hn$9J~uX1iC|!23a+eVg+(O}he5(k962j4EDQy9 zOI=u891=^ft#zuNs1*-Gt+6;=X<Dc;MG_MeGcYphhKU7`rC}^_T^DbHzYH0Ax7Qvl zqy=9oxR{B4{n-G^Jh+Mal5_Slfd1f&yktkT<Ky;!nT$ul#h_7Cr%OtIygLKHLc%wd zb{$>aksG(!xw&K*aavkhpbi2dIhoq2{TzI;&1Sp8dwn#IhJb(oNL6<*6=1$)Ba9!G zENcKF#zKP~StuG=EKpt`&QyW#h7Mw9?*^d8jnmUu0Ilm>SZI{kWh52_pSGOEXJkbA z`@dUQS~3DetjU~1p#CK?z6s>+$?j8Q2P#V%8yW_1n2is5N`+(z<ib@KzzYR;8~&A! zBh3XSm;I^yurk_&{}8)G`xgU1B73sIPJc9mr?Pu4$R7S4ND9<AA%z%d{t0smaY6!w zLP8rGc~whP5dc9E(Y^5>P5zi~XbesV92#kk=glFn<6rodl@$hWAE3rzvnbp5+s%S* zhcAh&EVbVvt)XhoBuj2?ZjJaNAOZqsIbSgrlJth=?QbKr`2)o<K-mWOmwM~_VXN+q zP{W?kq~ZIZ?(kh8D4%b?JzJ}`U2Wd{t|&}jUBhL&qNy&t$<Bqxq7y&6dAiziF~+mL z0idXZqoYg-j+_>Mpy}!9!50H$Q$Pifmc7RH$O8IXTj`4da}Ec_fZ|0B%+2YL1iL+g z?oL<5t*xzpB?4P?=%s=TArTP~U#^yJPnKVOkN5Y(^?mPuN{rA13zO5W1BEMfLBhcx zM(7iugxHu)9*g!<FHn4AnldppJ^j5cIW;wWcPwK>N(t$NDVmV>AF%eC%4Idj`0D!v zW@`s;AuSr`x=r@=!59z3GGAQn$tx&Sd)`<sQfsYAH74tSL?7S2y1nfOHqTqTUjz2# zNHM2-8p-5y0y*u<zezE=ovkG$@zK*CoXrE0{M26KOH1iU!oV=Xm=Xyd$!H}ed|?(4 zAOd#T>jzX}Ox%{vuNW7j3Xq_*eIHMF77dT*F-{9VAG;CWivTh~U%sSU=Zv*Ty=3t^ zKmsF}A&DDDivIQG@oaE#5IkW85Or&u$U{g!K|w)Py!!`Kvcm6Sv?~B^;6)FbNaFsE z#*4x}0w)iT^ruhbj1$^gT1mq)=9@Kw-JFhpWq`6Ja7=Dh0kD&;!kjp`x#xt{>*a~B zM7=x`3<e`Q{rLFLL=EV$wD5a<&l$kJzueXfIiM8&srmVVyLCTSBth2YW*4hpdc7V~ zd6G3wtU!ShGf~VFyWx2lh+T{KTJLkS^8rOhu=0>fp?p_=43Vi&P$gxnG%q#_a^z-6 zRRjPZ76(4wH3fJ3M2CpiiB)FiVMyU2nF71$fGC=QVf9mw#njYPs}WbsN=a#wF{~+M zt@|5th#y9UK3yj6dwIxB^<c4y-NjlneGh$A)kN#-8jw-i+oMw)h$(f1m>(6Q#Nl?T z14!n4*&J!Ln5J0_$#-#fUUOfl{|z5xAH4kfv#4l9>LD~NY(y;A{*#G?)l6|hnIPn* zt4FuF)8=o8TpktpXt9m8Ru2vh#5a?ag!{hSn`tQ~*pJlLh{?&x;Ub4XVE%OI+P@=* zR^L>2?>^aoA?zwQ-&AX~s{<hfL(l@-H74Cqss9z2eH-fu-7N{ugsU{Pxo#;x9G_Qc zg6c3H3@V%-z!M9N<s=kyu+MuQ*)J`B_0~ELpwOs3sP6Zpp;;SIGA%D`)S0rxIzFQD zbVg3<Nxl%X9&zJyE8f)YwA*{J!j6u!er^I_`WJ7yl$sY3VKvUG+oEK<GOM?C|DV&Q zc@5uW{4*in-*}LI%Qm58?LdcJDgp5*g~e*7;Yj>T-0nzLa9*DXXGDuoVmeR?BN$Z^ z0&b3>av$^(fBNJMwz#CE+QX+=yjRi2j5!|*&CwyruU}C=t4!PP-HNZYWFQ+uDF7MI zfg%)U<vxk1Bssg}?1*9o!-Xn71g*({SGNFjtI}ctLQIoY`OeKTHeNp#7<z&~ZPaxC z3n_r!s2b_~uNX4wY52e_W84KNQH|r#VtSsX6VGq>8vp9%Emj7tlx{XJRpcyLGJ&z< zKtq?=#uvcO39XrtKCyir5)?NM{FV=m-D|ms-iK+jMR%{rE-qY)CI&fBa0jn`i*`JY z4!$EeR4c7fw<sqdx=94fl4Gp`u>xZLn4~LP3avcY0aR2F2K8pFgoB(;Jbui^8iouV zc2}OUG4ir9OsFMm`$(;vM%7mx_`(Vp2A>Ore!oIENv&ZH%1;IlV0V)bNOk>Oee+J& z<hX5gZc8DIngZm|(*--+M>ydKLN_>9aH`*;h~(}J4zlEnop#89jO_i#iDZMVLOPum z2eOx!x~bNmcGY8Y`!;2Jd*m6=+x4s6J4jQh(-TAhj<AT2qYm*Wn;?I=(#5cnR)OyS zEz<$xPgKFX`_R~Zp%KE8SX_IM@BL>!*~zPt*sky2K(3yc-%wY@9On;<%SsG9&hN#o z&mL)Gi|{GVALl^Y%_K)GPAI?{mq+1|1$C|OsQz$O7%UajwsERk*E_Ot_?0r_6P2mK z<wFqu`Yee;8)K~l1F_nIt38YOj#{9y5YKN<6*SL(lnRV)T_0xt=I+nR&9xH4lXX1b zKUGFFr5!Z3A2D(JWK%uQa*9sMyM-VHYo+wCnVBGG@z2Dc4$6)cB_r*M0;8NE&%^6< zOGy(MGU!m8iRD?JNmrNI`S37K{31dVJd(Ze<RXs0f8L3n#P&^x${L}s=4NP6jZ1Q} z`K!5Q5u{|Bwq4h%%;<p+#z#LhU6<5Z`wv$YS?1>XWlA@MEyr$5i$4Mw^r4N0%^s9? z{z$z+-rx1%owLbMp(uTvPyfho4x5>oL1-@z?{mD;g?euVf8}CcFfRaWfrJR)Xvq4> z67D}xdtJX&^I58^KRKBuF|V@m^*-;|1^zZ3V6!@|T==C2^IXpzP^3pcZzF|Se<u{a z9T$xb_Cf!$a8CT@3o_J*AxxT%TWD&g=UQ?JgfJJ$P>Gf1^lLV-A~*fPUM`8HCW^!6 zKo(Z)KQ)B22Xp7F&!A1CEp*8wv{bRHRJ|@oh5HsjR<fZ?4IZvHtYe8*CS&Pv*=>vM zif6W@!6{b$c@hh8zkVbjR>UPOGMd24sNO?4Yi08w3WXPKP*)j!?1waB$pY4#>#yST z65T7^5&!{zB)z^Q4yA)EBq@!%WRb86;$!vY>>@}$Bi>)$2M&2{2T6k@VGHleG&)!5 zuHpJHT=-cnlG^~6Xwj};jBxV%M^{MS=Z9cUblL4(ClqMUMAvS$K#LT`s@9PVy@|e^ zgk=*b1^17HfCW4i2P#E+ZW_bDzpbv=)ojoBvr^j*DC*z*UZ#P|t#RXBe=GN=Y>ht- zRcBv`0Wj-}c|8rhDC$pdcs3CfL&l#0O72gbsEmPIYnNYjf9sKjzq6u-DYl?abv6$% zJ#k8Kr$Y2Q6%M3Fnogi6+9^jqVUV&f)5psfsSAtA3P+-Oa}K4g?j(8|vb-=vBm*-` zw?U<MkW@V+{}JT3H1y+$g9v<ZDPTz9R~%u>e{e=}N{eGb?H^ffgLlHrH!Q|OnTk|N zTG=RjTacei_PhLy0kmNj5${)5-ba_~giod!go1cCy^a-PZ-&lN{sc+2@-aYhHSgtJ zc#fWp@Yk&UKp~;F>Xs<sJX*bh@LO&rF_v$>mpwBZ@SQfog+4s6Nq?QG24+;r5_rfs z-imPmUWl^9>WF_$4JIe&U*`zC|9cj=VS%%=D)IkL%jnjWhVk&YZ08DwWfG3-w6@Wg zPZz;n{#lwfod_KbUk2%s%}32J7*^P5UD=Oe71a11^B=0m!r|i*KC70Hm4!e;qHynR z-er?Xyc?;osZ~Xc9b2*32J#D~4h^&JzLpd+ct7Cq?$<91`}!GU@nnckU)#@Jg#%)i zm*{mCy-U;EZawVGj6;~tmWRs*ch<nkj$T>~^iCsiZ(SnbvckB%wo295yof7=wx%CM zO#(+jGfw~^k|iBq`i6ruT|6UBKi>3$ABd)W1|ViqriE%q1!W||_$#b?*^O@KM3Pf> zSlo8rLLNtBBMlztXd!rMTE^mHZ)+YsmT!I*krr2qIXQp+w;A-@6ysrEyI(I_v1!M# zpfjAD2affv{SdrB%&&h}*TmSlU0ayaRPQ!7_DR{u_S}H2eF3f-mbkM|>f78dm%nWC z)?AUi%jO>5u<7&c`-+#i9p*a=eVOPy^XpZv4ewJ-uJz|1V1vxdR=&J-L(0>CQ-R78 z87cF%D=(x1x3F!<dz`pN`Z2q+Y^j+XWR=e458w1|6e#fRe{bD7ZS5<q6v^JH#v32C zFaGiJwcCo6B`4jKLG!AM9$i?zl=;?`l}+z9^DkPqUVY74(Z`D}WSu(jbaHy)lEqyU zj;_5C0GXt`<MZXH#f}5=>g#NdoSFa6<?gSz6(Kiwl!OJSat1w4D){xuc8%m)b!}<L z!XwU4pAC*5{P}Fh>^Y5zr=1c~vU+Bf-dVV0NywYe*Ie1k{>kx`TQm3kJ|moLwR3|b zcxG>fN#v}o#OG(0Z94uuIcUR&=N>7~81HSplMohZCti9rSo^@**M$}pMtuM5LNDy= zHQwcuedrW)>6OYI&BW7Fj%_;LD#W?&eqGZBZBL6*Q%?RM<HYEr0#Q*(8D8qZ3&ubT zRu#h><NQEd!zN6f*vs?szW*ho2?hTp_sr=D+&)Y4&zmy|uio_(&Ycr^65{h|8l5f$ zn++%UGBZ_HOh;bf2y``Kxg&)f0Syg}gtx%J6AaxFP*IbA>VE&{&z}Y5<<H*&#+8y* z>g(q7Q*tzFWH&~fnFgE{R|*n1b?VfKQ>V0c2CP`LhzZz}y=DW{9cX#5Q4QF311;hO hQJ@8^XdIQ#_P4IZPn}t`{1XEZc)I$ztaD0e0syWf^+W&w literal 0 HcmV?d00001 diff --git a/source/index.rst b/source/index.rst index df46468..e100204 100644 --- a/source/index.rst +++ b/source/index.rst @@ -18,7 +18,7 @@ Contents: Collection_Data_Types Logical_Operations Control_Flow_Statements - Creating_and_Calling_Functions + Dive_into_Functions Modules_and_Packages Input_Output -- GitLab