From e2e7173be153d9f683c0935192b1ca72b01cdee9 Mon Sep 17 00:00:00 2001 From: Jacob Nelson Date: Wed, 17 Apr 2013 01:36:51 -0700 Subject: [PATCH] some cleanup --- assignment1/basic_block.rb | 64 +++--- assignment1/function.rb | 395 ++++++++++++++++++------------------- assignment1/instruction.rb | 70 +++---- assignment1/main.rb | 7 +- assignment1/program.rb | 395 ++++++++++++++++++------------------- assignment1/writeup.pdf | Bin 137164 -> 137706 bytes assignment1/writeup.tex | 20 +- 7 files changed, 457 insertions(+), 494 deletions(-) diff --git a/assignment1/basic_block.rb b/assignment1/basic_block.rb index 784ca22..343eefe 100644 --- a/assignment1/basic_block.rb +++ b/assignment1/basic_block.rb @@ -1,37 +1,33 @@ class BasicBlock - attr_accessor :sucs, :preds, :instructions, :id, :visited, :topo_id, :postorder_id, :dom_processed, :idom - - def initialize(insts, first, last) - @sucs = [] - @preds = [] - @instructions = [] - for i in first..last - @instructions.push insts[i] - end - @visited = :unvisited - @dom_processed = false - @idom = self - end - - - def id - if @instructions.empty? - return -1 - else - return instructions[0].id - end - end - - def ignore - if @instructions.empty? - return false - else - return instructions[0].nop - end - end - - - - + attr_accessor :sucs, :preds, :instructions, :id, :visited, :topo_id, :postorder_id, :dom_processed, :idom + + def initialize(insts, first, last) + @sucs = [] + @preds = [] + @instructions = [] + for i in first..last + @instructions.push insts[i] + end + @visited = :unvisited + @dom_processed = false + @idom = self + end + + + def id + if @instructions.empty? + return -1 + else + return instructions[0].id + end + end + + def ignore + if @instructions.empty? + return false + else + return instructions[0].nop + end + end end diff --git a/assignment1/function.rb b/assignment1/function.rb index f8b54ed..ce7cc4a 100644 --- a/assignment1/function.rb +++ b/assignment1/function.rb @@ -1,219 +1,206 @@ class Function - attr_accessor :bbs, :name - def initialize(name) - @name = name - @bbs = [] - @topo = [] - @doms = [] - end - - public - def n_nodes - @bbs.length - end - - public - def n_edges - n = 0 - @bbs.each do |bb| - n += bb.sucs.length - end - n - end - - public - def build_cfg - #This assures that building CFG is low complexity - bb_index = {} - @bbs.each do |bb| - inst_n = (bb.instructions.first.inst_str)[1].scan(/[\d]+/) - inst_n = Integer(inst_n[0]) - bb_index[inst_n] = bb - end - @bbs.each do |bb| - last_inst = bb.instructions.last - case last_inst.opcode - when "br" - target = last_inst.operands[0] - target_bb = bb_index[target] - bb.sucs.push target_bb - target_bb.preds.push bb - when "blbc", "blbs" - target = last_inst.operands[1] - target_bb = bb_index[target] - if !bb.sucs.empty? && (target_bb != bb.sucs[0]) - bb.sucs.push target_bb - target_bb.preds.push bb - end - end - end - end - - private - def find_topo_order - - # reset visited status - @bbs.each do |bb| - bb.visited = :unvisited - end - - # helper for topological order - def visit( bb ) - # ignore if we've been here before - if bb.visited == :unvisited - # note that we're visiting here - bb.visited = :visiting - - # recurse - bb.sucs.reverse.each do |suc| - visit suc - end - - # now finish this node - bb.visited = :visited - @topo.push bb - end - end - - # compute topological order - @bbs.each do |bb| - # recurse down all unvisited blocks that are connected to something - if bb.visited == :unvisited && bb.ignore == false - visit bb - end - end - - # we did that backwards, so reverse. - @topo.reverse! - - # record topological ids in bbs - index = 0 - max = @topo.length - 1 - @topo.each do |bb| - bb.topo_id = index - bb.postorder_id = max - index - index += 1 - end - - # @topo.each do |bb| - # puts "Topo: " + bb.id.to_s - # end - + attr_accessor :bbs, :name + def initialize(name) + @name = name + @bbs = [] + @topo = [] + @doms = [] + end + + public + def n_nodes + @bbs.length + end + + public + def n_edges + n = 0 + @bbs.each do |bb| + n += bb.sucs.length + end + n + end + + public + def build_cfg + #This assures that building CFG is low complexity + bb_index = {} + @bbs.each do |bb| + inst_n = (bb.instructions.first.inst_str)[1].scan(/[\d]+/) + inst_n = Integer(inst_n[0]) + bb_index[inst_n] = bb + end + @bbs.each do |bb| + last_inst = bb.instructions.last + case last_inst.opcode + when "br" + target = last_inst.operands[0] + target_bb = bb_index[target] + bb.sucs.push target_bb + target_bb.preds.push bb + when "blbc", "blbs" + target = last_inst.operands[1] + target_bb = bb_index[target] + if !bb.sucs.empty? && (target_bb != bb.sucs[0]) + bb.sucs.push target_bb + target_bb.preds.push bb end - - public - def print_doms - puts "Dominators" - @doms.each_index do |i| - if @doms[i].nil? - puts @topo[i].id.to_s + ": idom nil" - else - puts @topo[i].id.to_s + ": idom " + @doms[i].id.to_s - end - end + end + end + end + + private + def find_topo_order + + # reset visited status + @bbs.each do |bb| + bb.visited = :unvisited + end + + # helper for topological order + def visit( bb ) + # ignore if we've been here before + if bb.visited == :unvisited + # note that we're visiting here + bb.visited = :visiting + + # recurse + bb.sucs.reverse.each do |suc| + visit suc end - - public - def find_doms - - # compute order - find_topo_order - - # helper for dominator constructor - def intersect( b1, b2 ) - finger1 = b1 - finger2 = b2 - - while finger1 != finger2 - while finger1.postorder_id < finger2.postorder_id - finger1 = @doms[ finger1.topo_id ] - end - while finger2.postorder_id < finger1.postorder_id - finger2 = @doms[ finger2.topo_id ] - end + # now finish this node + bb.visited = :visited + @topo.push bb + end + end + + # compute topological order + @bbs.each do |bb| + # recurse down all unvisited blocks that are connected to something + if bb.visited == :unvisited && bb.ignore == false + visit bb + end + end + + # we did that backwards, so reverse. + @topo.reverse! + + # record topological ids in bbs + index = 0 + max = @topo.length - 1 + @topo.each do |bb| + bb.topo_id = index + bb.postorder_id = max - index + index += 1 + end + + end + + public + def print_doms + puts "Dominators" + @doms.each_index do |i| + if @doms[i].nil? + puts @topo[i].id.to_s + ": idom nil" + else + puts @topo[i].id.to_s + ": idom " + @doms[i].id.to_s + end + end + end + + + public + def find_doms + + # compute order + find_topo_order + + # helper for dominator constructor + def intersect( b1, b2 ) + finger1 = b1 + finger2 = b2 + + while finger1 != finger2 + while finger1.postorder_id < finger2.postorder_id + finger1 = @doms[ finger1.topo_id ] + end + while finger2.postorder_id < finger1.postorder_id + finger2 = @doms[ finger2.topo_id ] + end + end + + return finger1 + end + + # initialize dominator array + @topo.each do |bb| + @doms.push nil + end + + # start with first node + start = @topo[0] + @doms[0] = start + start.dom_processed = true + + # loop while something changed + changed = true + while changed + + changed = false + # postorder iteration + @topo.each do |bb| + # skip first node + if bb != start + + initial_new_idom = nil + + # find an already-processed predecessor + bb.preds.each do |pred| + if pred.dom_processed + initial_new_idom = pred + break end - - return finger1 - end - - # initialize dominator array - @topo.each do |bb| - @doms.push nil end - # start with first node - start = @topo[0] - @doms[0] = start - start.dom_processed = true -# puts "Starting doms from " + start.id.to_s - - # puts "Topo order" - # @topo.each do |t| - # puts t.id.to_s + ": postorder id " + t.postorder_id.to_s - # end - - # loop while something changed - changed = true - while changed - - changed = false - # postorder iteration - @topo.each do |bb| - # skip first node - if bb != start -# puts "Trying " + bb.id.to_s - - initial_new_idom = nil - - # find an already-processed predecessor - bb.preds.each do |pred| - if pred.dom_processed - initial_new_idom = pred - break - end - end - - # if necessary, refine based on other predecessors - new_idom = initial_new_idom - bb.preds.each do |pred| - if pred != initial_new_idom - # if we already have a dominator for this predecessor, - if !@doms[ pred.topo_id ].nil? - # see if it gets us a better dominator - # puts "Need to find better new_idom for " + bb.id.to_s - new_idom = intersect pred, new_idom - end - end - end - - # if domintor changed, update it - if @doms[bb.topo_id] != new_idom - @doms[bb.topo_id] = new_idom - changed = true - end - -# puts "Done with " + bb.id.to_s - # mark as processed - bb.dom_processed = true - end # if bb != start + # if necessary, refine based on other predecessors + new_idom = initial_new_idom + bb.preds.each do |pred| + if pred != initial_new_idom + # if we already have a dominator for this predecessor, + if !@doms[ pred.topo_id ].nil? + # see if it gets us a better dominator + new_idom = intersect pred, new_idom + end end - end - # initialize idom fields - @bbs.each do |bb| - # clean up leftover nop nodes, etc. - topo_id = bb.topo_id - if topo_id.nil? - bb.idom = bb - else - bb.idom = @doms[bb.topo_id] - end + # if domintor changed, update it + if @doms[bb.topo_id] != new_idom + @doms[bb.topo_id] = new_idom + changed = true end - - end + # mark as processed + bb.dom_processed = true + end # if bb != start + end + + end + + # initialize idom fields + @bbs.each do |bb| + # clean up leftover nop nodes, etc. + topo_id = bb.topo_id + if topo_id.nil? + bb.idom = bb + else + bb.idom = @doms[bb.topo_id] + end + end + + + end diff --git a/assignment1/instruction.rb b/assignment1/instruction.rb index dff0507..2c39164 100644 --- a/assignment1/instruction.rb +++ b/assignment1/instruction.rb @@ -1,40 +1,40 @@ class Instruction - attr_accessor :id, :opcode, :operands - attr_reader :inst_str, :nop + attr_accessor :id, :opcode, :operands + attr_reader :inst_str, :nop - def initialize(inst) - if inst[0] == "instr" - @opcode = inst[2] - @id = Integer( inst[1].chomp(':') ) - if @opcode.eql? "nop" - @nop = true - else - @nop = false - end - else - @opcode = inst[0] - @id = -1 - end - @operands = [] - case @opcode - when "method" - info = inst[1].scan(/[^@:]+/) - @operands.push info[0] - @operands.push Integer(info[1]) - when "call", "br" - info = inst[3].scan(/[\d]+/) - @operands.push Integer(info[0]) - when "blbc", "blbs" - info = inst[3].scan(/[\d]+/) - @operands.push Integer(info[0]) - info = inst[4].scan(/[\d]+/) - @operands.push Integer(info[0]) - when "ret", "enter" - @operands.push Integer(inst[3]) - else - end - @inst_str = inst - end + def initialize(inst) + if inst[0] == "instr" + @opcode = inst[2] + @id = Integer( inst[1].chomp(':') ) + if @opcode.eql? "nop" + @nop = true + else + @nop = false + end + else + @opcode = inst[0] + @id = -1 + end + @operands = [] + case @opcode + when "method" + info = inst[1].scan(/[^@:]+/) + @operands.push info[0] + @operands.push Integer(info[1]) + when "call", "br" + info = inst[3].scan(/[\d]+/) + @operands.push Integer(info[0]) + when "blbc", "blbs" + info = inst[3].scan(/[\d]+/) + @operands.push Integer(info[0]) + info = inst[4].scan(/[\d]+/) + @operands.push Integer(info[0]) + when "ret", "enter" + @operands.push Integer(inst[3]) + else + end + @inst_str = inst + end end diff --git a/assignment1/main.rb b/assignment1/main.rb index 2f694fc..b8878a7 100644 --- a/assignment1/main.rb +++ b/assignment1/main.rb @@ -2,19 +2,14 @@ p = Program.new p.read_program(ARGV[0]) -#p.build_cfgs + p.build_bbs p.build_cfgs -#start_time = Time.now.to_f p.build_doms -#elapsed_time = Time.now.to_f - start_time -#puts "Dominator construction took " + elapsed_time.to_s + " seconds" p.dump_cfgs ARGV[0] p.dump_info ARGV[0] -#p.dump_nodes_edges - diff --git a/assignment1/program.rb b/assignment1/program.rb index b5383db..93233e3 100644 --- a/assignment1/program.rb +++ b/assignment1/program.rb @@ -3,214 +3,199 @@ require_relative 'basic_block' class Program - def initialize - @instructions = [nil] - @header = [] - - # maps name of function to index of first instruction - @functions_info = {} - - # maps name of function to function object - @functions = {} - - @doms = [] - - end - - public - def dump_info(filename) - @functions.each do |name, f| - this_filename = filename + "-" + f.name + "-info.txt" - file = File.new(this_filename, "w") - file.print("Function " + f.name + "\nEntry index: " + @functions_info[f.name].to_s + "\n\n\n") - f.bbs.each do |bb| - bb.instructions.each do |i| - text = "" - i.inst_str.each {|str| text << str << " "} - file.puts text - end - file.print("Predecessors: ") - if bb.preds.empty? - file.print "none" - else - bb.preds.each_index do |index| - if index != 0 - file.print ", " - end - file.print bb.preds[index].id.to_s - end - end - file.print("\nSuccessors: ") - if bb.sucs.empty? - file.print "none" - else - bb.sucs.each_index do |index| - if index != 0 - file.print ", " - end - file.print bb.sucs[index].id.to_s - end - end - file.print("\nImmediate dominator: " + bb.idom.id.to_s + "\n\n\n") - end - file.close - end - end - - public - def dump_cfgs(filename) - index = 0 - @functions.each do |name, f| - this_filename = filename + "-" + f.name + "-cfg.dot" - file = File.new( this_filename, "w") - index += 1 - file.puts "digraph cfg {" - file.puts "node [shape=record];" - file.puts "splines=true;" - file.puts "entry [label=\"Entry\"];" - for i in 0...f.bbs.length - file.print("n" + i.to_s + " [label=\"{BB " + f.bbs[i].id.to_s + " (idom " + f.bbs[i].idom.id.to_s + ")|") - for inst in 0...f.bbs[i].instructions.length - text = "" - f.bbs[i].instructions[inst].inst_str.each {|str| text << " " << str} - file.print(" " + text) - if inst == (f.bbs[i].instructions.length - 1) - file.print("}\"];\n") - else - file.print("|") - end - end - end - - file.puts("entry -> n0;") if !(f.bbs.empty?) - - for i in 0...f.bbs.length - file.print("n" + i.to_s ) - file.print(" -> n" + f.bbs.find_index(f.bbs[i].idom).to_s + " [color=red,style=dashed];\n") - f.bbs[i].sucs.each do |s| - file.print("n" + i.to_s ) - file.print(" -> n" + (f.bbs.find_index(s)).to_s + ";\n") - end - end - file.print "}\n\n" - file.close - end - end - - private - def read_instruction(line) - inst = line.scan(/[^\s]+/) - #if line is empty, return - i = Instruction.new(inst) - if inst[0] == "instr" - @instructions.push(i) - else - @header.push(i) - end - end - - public - def read_program(filename) - file = File.new(filename, "r") - # if file doesn't exist, print & exit - file.each_line { |line| read_instruction(line) } - file.close - set_functions_info - end - - private - def set_functions_info - for i in @header - if i.opcode == "method" - @functions_info[i.operands[0]] = i.operands[1] - f = Function.new(i.operands[0]) - @functions.merge!((i.operands[0]) => f) - end - end - end - - private - def build_bbs_function(name, f_start, f_end) - starts = [f_start, (f_end + 1)] - for i in f_start..f_end - case @instructions[i].opcode - when "br" - starts.push (i + 1) if i != f_end - starts.push @instructions[i].operands[0] - if (@instructions[i].operands[0] >= f_start) && (@instructions[i].operands[0] <= f_end) - starts.push @instructions[i].operands[0] - end - when "blbc", "blbs" - starts.push (i + 1) if i != f_end - if (@instructions[i].operands[1] >= f_start) && (@instructions[i].operands[1] <= f_end) - starts.push @instructions[i].operands[1] - end - when "ret" - starts.push (i + 1) if i != f_end - when "call" - if (@instructions[i].operands[0] >= f_start) && (@instructions[i].operands[0] <= f_end) - starts.push @instructions[i].operands[0] - end - when "nop" - starts.push i - starts.push (i + 1) if i != f_end - end - end - starts.uniq! - starts.sort! - first = starts.shift - while !starts.empty? - last = starts.shift - last -= 1 if last >= 1 - bb = BasicBlock.new(@instructions, first, last) - if (!(@functions[name].bbs.empty?)) && (@functions[name].bbs.last.instructions.last.opcode != "ret") && (@functions[name].bbs.last.instructions.last.opcode != "br") - bb.preds.push @functions[name].bbs.last - @functions[name].bbs.last.sucs.push bb - end - @functions[name].bbs.push bb - first = last + 1 - end - end - - public - def build_bbs - sorted_funcs = @functions_info.sort_by {|func, start| start} - start = sorted_funcs.shift - while !sorted_funcs.empty? - last = sorted_funcs.shift - build_bbs_function(start[0], start[1], last[1] - 1) - start = last - end - build_bbs_function(start[0], start[1], @instructions.length - 1) - end - - public - def build_cfgs - @functions.each do |name, f| - f.build_cfg - end - end - - - - - def build_doms - @functions.each do |name, f| - #start_time = Time.now.to_f - f.find_doms - #elapsed_time = Time.now.to_f - start_time - #puts "Function: " + f.name - #puts "Dominator construction took " + elapsed_time.to_s + " secs" - #puts "Nodes: " + f.n_nodes.to_s - #puts "Edges: " + f.n_edges.to_s - #puts "\n\n" - end + def initialize + @instructions = [nil] + @header = [] + + # maps name of function to index of first instruction + @functions_info = {} + + # maps name of function to function object + @functions = {} + + @doms = [] + + end + + public + def dump_info(filename) + @functions.each do |name, f| + this_filename = filename + "-" + f.name + "-info.txt" + file = File.new(this_filename, "w") + file.print("Function " + f.name + "\nEntry index: " + @functions_info[f.name].to_s + "\n\n\n") + f.bbs.each do |bb| + bb.instructions.each do |i| + text = "" + i.inst_str.each {|str| text << str << " "} + file.puts text end + file.print("Predecessors: ") + if bb.preds.empty? + file.print "none" + else + bb.preds.each_index do |index| + if index != 0 + file.print ", " + end + file.print bb.preds[index].id.to_s + end + end + file.print("\nSuccessors: ") + if bb.sucs.empty? + file.print "none" + else + bb.sucs.each_index do |index| + if index != 0 + file.print ", " + end + file.print bb.sucs[index].id.to_s + end + end + file.print("\nImmediate dominator: " + bb.idom.id.to_s + "\n\n\n") + end + file.close + end + end + + public + def dump_cfgs(filename) + index = 0 + @functions.each do |name, f| + this_filename = filename + "-" + f.name + "-cfg.dot" + file = File.new( this_filename, "w") + index += 1 + file.puts "digraph cfg {" + file.puts "node [shape=record];" + file.puts "splines=true;" + file.puts "entry [label=\"Entry\"];" + for i in 0...f.bbs.length + file.print("n" + i.to_s + " [label=\"{BB " + f.bbs[i].id.to_s + " (idom " + f.bbs[i].idom.id.to_s + ")|") + for inst in 0...f.bbs[i].instructions.length + text = "" + f.bbs[i].instructions[inst].inst_str.each {|str| text << " " << str} + file.print(" " + text) + if inst == (f.bbs[i].instructions.length - 1) + file.print("}\"];\n") + else + file.print("|") + end + end + end + file.puts("entry -> n0;") if !(f.bbs.empty?) - - - + for i in 0...f.bbs.length + file.print("n" + i.to_s ) + file.print(" -> n" + f.bbs.find_index(f.bbs[i].idom).to_s + " [color=red,style=dashed];\n") + f.bbs[i].sucs.each do |s| + file.print("n" + i.to_s ) + file.print(" -> n" + (f.bbs.find_index(s)).to_s + ";\n") + end + end + file.print "}\n\n" + file.close + end + end + + private + def read_instruction(line) + inst = line.scan(/[^\s]+/) + #if line is empty, return + i = Instruction.new(inst) + if inst[0] == "instr" + @instructions.push(i) + else + @header.push(i) + end + end + + public + def read_program(filename) + file = File.new(filename, "r") + # if file doesn't exist, print & exit + file.each_line { |line| read_instruction(line) } + file.close + set_functions_info + end + + private + def set_functions_info + for i in @header + if i.opcode == "method" + @functions_info[i.operands[0]] = i.operands[1] + f = Function.new(i.operands[0]) + @functions.merge!((i.operands[0]) => f) + end + end + end + + private + def build_bbs_function(name, f_start, f_end) + starts = [f_start, (f_end + 1)] + for i in f_start..f_end + case @instructions[i].opcode + when "br" + starts.push (i + 1) if i != f_end + starts.push @instructions[i].operands[0] + if (@instructions[i].operands[0] >= f_start) && (@instructions[i].operands[0] <= f_end) + starts.push @instructions[i].operands[0] + end + when "blbc", "blbs" + starts.push (i + 1) if i != f_end + if (@instructions[i].operands[1] >= f_start) && (@instructions[i].operands[1] <= f_end) + starts.push @instructions[i].operands[1] + end + when "ret" + starts.push (i + 1) if i != f_end + when "call" + if (@instructions[i].operands[0] >= f_start) && (@instructions[i].operands[0] <= f_end) + starts.push @instructions[i].operands[0] + end + when "nop" + starts.push i + starts.push (i + 1) if i != f_end + end + end + starts.uniq! + starts.sort! + first = starts.shift + while !starts.empty? + last = starts.shift + last -= 1 if last >= 1 + bb = BasicBlock.new(@instructions, first, last) + if (!(@functions[name].bbs.empty?)) && (@functions[name].bbs.last.instructions.last.opcode != "ret") && (@functions[name].bbs.last.instructions.last.opcode != "br") + bb.preds.push @functions[name].bbs.last + @functions[name].bbs.last.sucs.push bb + end + @functions[name].bbs.push bb + first = last + 1 + end + end + + public + def build_bbs + sorted_funcs = @functions_info.sort_by {|func, start| start} + start = sorted_funcs.shift + while !sorted_funcs.empty? + last = sorted_funcs.shift + build_bbs_function(start[0], start[1], last[1] - 1) + start = last + end + build_bbs_function(start[0], start[1], @instructions.length - 1) + end + + public + def build_cfgs + @functions.each do |name, f| + f.build_cfg + end + end + + def build_doms + @functions.each do |name, f| + f.find_doms + end + end end diff --git a/assignment1/writeup.pdf b/assignment1/writeup.pdf index c52deb67e0c15216b8e09b227058673f2d23d8f3..ac1d719d1b891141587ec48dfd3792c3769c7a9d 100644 GIT binary patch delta 37645 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

n@+coB|`H@ncD z#wle6ax;%seIcE~v|cC|Lvv~D2fFkxB!8l}4Tj*e^*_kDe3@Nz>HSqFc*&T!bMX};b#xmpPnWzU7|$8)1lvr5+xI8Hk~I(Hi{FkbVlSbSPQ^SrOk6l+0RrU zCa6Sb?lli+kQ84fe>Cdx?ezQNk)qt66zBP`URbwdWiMNtU}sH>7hK_S+?{FYHh);k z=^NjRH`*H{10XS;tG^)`3z4X!>Ysjpt;mE_j?T}pKoWFwd$*XGU+Hc@MJoy5gUaG9NPkWpG_e;xpBOow6-s!Zz)r5X!}c4BlQG4iGmxdx znc=^cKNgS*`;?D<nM-v2p4MI?$*>l-;$ooX!FPij@D1Y`k^F_*I zqfF~YoAT(BbHwxXqByjNEz2gFW`Q4gABR{q&yf}^Q*P9jAuc5uMFlJ$Fc{qf|~d z#BN`d648u@yYKNu!xU`StAAJExnt5o;1c#B2F2Yt6vR!?84)`+N%rez=n`YqTmABW z9%dB|$w<}pD)}sW{o=Ua+2GVD$mdn5=}7LSRnd{`fe{qAl%XQH0QGXe=5avn7SW{Q zI6bqYgGoR8EybQws@=X-ZS%<;1LC;b?H-@)!%7P@;Fod1)ZbQ2cYiUl8Z3lzfHOi1 z1`)gY+Sp8^p1SsW5ntNXG{qNe(4YB75pLCXp;eE#3xeuf22CnMw=T8WmveIXD+N z6OlH=;#Z)t_OQDMaermj61Rn-!=NXrZx=yH6Fg$8cR+Z&!I4#eY~UDMVJD0C8Y~@G zWz$TJVTc;9|7xS2(MUlGfgA3y8j}wai-DgNj{X$pCk1Y6HL`qlcra@EV<*4$W%Z5x zeznpwfpGsw)NQ#cLJnc)(R3aeay|dSjoxlf8ynKIMSOHae}8}?F4%Tk&`Ar7A+_Hv zbte)nBnj-`t=M%am*21TPn@E<4lsAXRfP2@Q7~Af6?reK(9`4jxL4d%q%2~1vkOZO zW&@t{Tcpz+R9I^(mXrOn*2$0!>JfQtE{1T$dd*|q-ggBVZ*HMm1~U;}q)}uf#w@T% zlQ`P|465KHAAi%$H`?zUy$la!>`T)MO5?;nL!` z`4_s?5n}03KxyR6H~Q8)nJ^w3VZi<{67QLp&xSb~kblYN8GKB_x$?c!HAxxW#^sbk zPNLP~{@~Nmm_DQ%`I_SN&Atu2orq40VRzJo%=QR+$IyJ|p@k4=O$eP;MI4#DJ*bs9 ze?Rb(xB%+LXDdOzV(*N$!N5TK9fmXHjh?O%avqpyQ!TyfpO`2bt4;|0xm8aA#n*H# z8Mkie^M9)NPVSr0q#~1i$b12i1C<_O5=*3}elJx;>jzS6tlzf-k~5ODFdqUd+g3T! zff)^)@uCHer#T|6(v5@wW}}AMjt|DnRNkwjYft?JjGrJNEzt_zGP>>ioJu9MNOl;q zSFzr<%0TA8eRwS@@JD74xcQ*~Wz$+>=(5=iWPejZ*w49>Wz+%@}NC4r`i&V6Nk((a0R<_Mzg*RV&0} zkr=S6w82$7JudF8C4m~(92%_$%_VVOv-Phov8LM2j7w%DrO-Ox0ic|KJaHoNF&Q_(Yn<)b^5hq^EiRE268I7LN|jSuhh;* z=+Ul9>|XTR^j-9wW-|DtGhcE#_nT7DS*w4ZP7Wm@`mL{w2au6PyR+M+ZTqSOc|a?I zf?``O_7cPz&inrf&fW%>q`q(;bu2sIn}5|yGb*a}_*Jh8Xs9?K0BdSQLahA_eh`)F zsEnxHP!h4)r}J`A(BQ9m94ey!J*fmAN36R%u#7tbJVEM#lNXomi*S>HP6%}{(hSxm zSEKg2p7=)tU9ewQU2Q^X?ANBTqt|>-nvJAUSBxex&d8SDSUEOFgxVf+hU`8F9)C8X zlO{g?yXVdA^~3F_44`fQj%KfqQ_}xtecC?XUY$nwV;wZuV=ZApOsvoHhTwL= zz5U|8KV+`PSjtijER#a4K!8Zv&VQ~|jz&3Lw`_LEL5%2FQ}uh2zb;rPAKq)S4)Ivn zYnq1)cC}Vtt>}*WOpj*f3pc>9zC0@4Vl(^)gtC#pBjFpJJmrQ_%?H@X>ae(x1QZz(=RD6_^c zKVB>aM6mv~m#CcM9d_(wnt#Ck9c?U5XbhLR;@2w>93nDAuRe_~6kxvOWSWhaJ-7>< z1q(CH2_~Ur-QCKkSW=?+U}3*O4#rPJd~>nH!Y5QZpH1u}Hv|di)KwHLNaX=e|P9q&OBr*mNDPU;GoRHEukoz#4n0%yx}Ry~_0b?eIu=&fW#f2}B#4`U)oC zmpfIgj!4+kxE`JXUVr=$%aRNYQdb>EJeL}F@e~vxI?s5B4#4|qEsZyO2P}e-rfia* zwaqtG>d_hr#Vg2H;o;}$L6ZD$S}?MiJaLZuKsUqEV0b}re*Nr*+6=3&Z`V@bAk&=6}(3I~+T3xH?;SSAW2UViX7L$gu;yLP6^R6vg0duGu(gO0#kdylXnGH~BfWw<^WxE(gDV=^uiAlk#Uz7g{ zl5i&yTpW0o0MZY|8wI6%K23B;#iFkmPah+t7oZJkhH;K_dGti=ak^Q8I_rZr<PfHj0I2yHw-goIw z+>r!T%f9?Dqr0iXmOl$opws~^?R$!eMoTWdSLg1fG=&%&tT#5)p|op>UM7gT{w`(< zYdnl;zR?hN z)uhjJ>3=m7>&BEWRqa4-<0OyRPB#g_soj+|ARbQ21fvt%76)A|*=l1snogZhPK8;O1$iODXfP z;Q3P*Rg`)MnwI~*H%9&(#H}9mvMk_8OS)EE{C|%YiF7-Y4kIZ5__80#gkC`>eXR%t z?^CG`)+zBO-^)@%$#~!IRj)R;7?U?HyinnxV6iAuN#a7CGSNC4ux)0ryiBwn_=SE~ zif+SXtwSw`lqHL+v9C~b0n)tBey43!H$b8YAtO3Zaa9mF*Vp-xItg#ibedwF+(NKp z>3@vIw*dDntX_m-Sd+@4LcDQU?RHSPnMYeEkO+S=iDvG#?He(xq+bATT)qDGb!HIr zabQ;{mrlj42}7t}*V3Rod_pq=w^)bH?_J#`AS-Z`PX&G6WQ#{>+6zfBh+b0hEPaq( z#T>1krz59(<2bBk*<;$_zK;KspFHhVRDbCGBsNdIhxEbmm--dB%OU8TTu_R8TVI4= z@2<#}N%kGI>vVdGvgfro{%sHj)EZT-m0;7Gm2($-245Uq9Z`-zF~ZHCh}lYR<`y}c zTVL8FPbI--{~yn%@4$EXTwZCw`6R7GpNz82vaXej(6G=d?6q^3xW61dAmwc!qJO(R z4$Hg4pSQ5CGq_LN;*HoxE-=mSMJq>HZfJ(yu3Nk2x1n)BJj%1bCRj%Um=Xe<9 zHf`Au)s359&_@sS{O< z4L<}>oTOb}3SF{$Fsjtqi;b;_6f}2ZKd}7IU-D!aHMY*g6LSzj&i4wWI5{51lrBsA z*7kNz=6dFcURr;=_uEJxj(?erni_SDhjaWHyvN8BR~Zcy4%NprqSXiO^7QjgenGOl zPCuqeLy2ptmaEZ)c~_AsLkg+(z$8P9THJxiS)`1=tyVDNqmsAEg*l{^FS3}V0avoM zj>U&vmVXTVsD##FatMwu=RE`eAw>VK^b*z`&Mt#ony z#G#52ciZ1sv=?VQ_zX(O>*wxJkobeT4KVpuEitgf8KSAVT4T#f6?D_4MB#r53BjWF zM2A;x%-nT+G0jQ&E&%k0Oz71$yXz6rL&70g&>u8uNHl7})%pE3q2Ghm4Lv(1e|IQv z|JM&-#a=S}H>s&|bbslD@iI0(5i+5T(I{n}Hwid6&rsDUkDj7YojQ;I_ha=gB60vidfua;5P+KxqU) z#m2f$C6Hl-m47&%+s+WdV}M2bPCK(x$o|27N1DP^w>E}xd?%=&@(r$>Uk;NcFSsj_ zlMjpqAS(ew?lhy}CiuhU)&Qb_mVdGTzJH)@J2XTfmtdM*;UPA~Zvp4p z>r^C@F2pqAaZ^#lhXv`Dp5h|L` zk@Ug9keebO*7p~I3Mq3GQKP<^n@>$T`n}#^HY{v=p-4;MJ-=#AF8t#yi*Pv_f*0u} z{j7K)>wiSS<+Ggn$dp?0D=iW|zvfX=al^fBuHMPn>IdK3>{DxzQ_SP1=gafY6QkFywMC{p744PQYH?84&^{{Wx9MqEe4KlO_0 zw^$4#E|#dgU+YBjdf}*F{%eKbUnjNNV&-6|t zJ%2auS;vuhM{29HEAXvX#<%)h7*J>J-<0{5MglA?LUWD|Z<*;rm$7~h2pTNR-MIHP zH{Vn|!rDk?W3)P1f-E<^5R8pCiOmNJj~+Yrj>1vsNtdK~Od2cQpuE;g41}Hj<6}4i zo97qMk)Es7dEy0(ISoQ}y$1fuh^rbOEq@0C?vWu#Cl$}!^ChITSpD`etN8PGHc@#c zEJG$m@MY2;?aic}x`*&91Q@NlGbEBSkQ{~PFTf106!-JL;PhFdY?ANtXL!QK)lb>n zV`%nl+u6MC6$ZIT}Y``vGQs9JQ8BIMGZ%NB2<(wVyLc=ci~CFHM}@q6@lidjG?47fNoz)iuuFft-ha+;XD?(b zm6xDyjrFVXz95Aj-yBWgGu5@NrII8fa@!wJ$7(t~BOXU2wj>VuDRr~yt{FNZ>m ztA^+l9^_O;OA^`uSRz37t;KrGb4P(hKWQw=a;9aYBQ#WhDq)`IRaZ!~hLjB_mR82A z{~QB(T3W^heXJ1b-p1viTz@CpVcgrpR=|9Lub`}yFl@uQ!6+7^aDmtTN#<+{tPHRF ztuX-$&BU>}fa)@$V)vMy%QJQ}#y}}_zd3twV*JG<;}Zxh0(s4^M@Ne&(G4d@q%2kP zzUJi5W+JT9MKK|7yw?Fv#4YtkqiVf~od0PDj%Vru5<&?ABqhJMdw()zau<((5yL05zf`o|i}CyS_P|5rrFiAUk%V;g z=%&Z)FZw6`J18Yi@qeXGY+eYGcIiZNlSxbXky?6E8*sKwTa0@H0vRPWTpPk5ZFLXa z3U0e3NP%dA?g~8l$&{LEW({4M()OyB`ebf`n4LoYBa9q{b5q->r*tT%4CgVM1@KS! znmV$c=6ccwu!A-xSdrwYdr9{BSVaQhA%1dWp?xb3iS_rA5P$x&YcY|gjEVFO-DXLs zDA@$(t!P0uO6`P|JyQHfwed2kH0X!!kV_h_aAV%X)?MEnm*cX`-$Y3aw>`_c4b0}S zhP#%LototzmSB99YNVlRdDcTQk@ZKct~pKXs$_}U+&46^5LsM$^O7&~@RU=sIfIlW zHq@#r#FSB3`+tY3lhbFHI#K;CDg~Q_fFKcA9s_}QTl_qIB56R=m&0I%9+4S%!YH>t z6EaA_xKD#W!hmnsy+Xl*QePQ{SFBSb?pi$fnxopji|j9Jh_L>!MRpi{FDzT&hANYq z#73>ejxQSX7b99t7^3wA~_^1yTfR)-2j%D%(N;?po1)t4Cv}g>mo8t%rc806&pU7M zQRfRD?_oJ5H|c<+9H6JMUkZy4awJcUfCm1G@_o*W`i;aj%jkX>cnT8nj10FZde?L4 z9Uv3j>-1oV4_V=HYTQ@j%}kN~ROdgpgNumnKYz`A1Ewyk!71A;a-j>iD@ZDRqZjSw zwuUfa-b!jvZOGVo5BZ=?i%a9fEEJmbKm^sy^DgqFyh%UuEwATFB`4W^6J+bhSY|Gk zLBSgQOA6mD&F;p={kpZR8AEndfBqJKrjKE|NX6Pmso`{gwtPh{<+#hDS^3=}ezWeP ztbbKU{i7^-7vuJ7>)diaXbw7`AFPLAB7r4#JFirPg&8bP#( zA_0UFd+n|-LH4o@3L#fvoFPJ}ROYJeC?qojHj95LDFNr2H7!R;MM5oS&8i$*N9w2B zcEir?<=AS@rpx{(vf0WDl{_YW9VqUG`f)FbigA2Ui1+pxyhU9D1)&pWALX{k$C?au6|l3Am%J2YCty(#8=b0;ThbGEyve-eb~N6T{J zQeJ-pc03_3gCb(Z4auqVD8%_eK>AMY@|bh?J2}KhW81UK>HWaKY<1N!lES{?l}Or`68){WhNd;HPH&}fp=2FT+gV&;p|y-;i<4K?Q5HAa1XvCjVNtLO>K5c{G)Th0v5&ls&nsKcP!ERSxS5t;d9mnB!#m2d%p@NwsYO_Mm3ql*+$n5eXCs6 zD1(4&n{l3>-;Tf^020BSS;|&7U7r}IbP=OliPaZ+aM)GlR30$?Ydf01r!L1bT!cJ! zVpYyfEHH__CYui$#ast$P$YjTLE)ZTC%9t0LM*ywGNcnOx*zLX#xKPmL8n4`?Gu=J zEF^gjX(F@d7#NyLudk5wl8vO z<>b@N)Kav*Ji4;H+>lwNhu{!VVp`!#YhHGVdOb8sUFph}{O2 zFwSpyxlMqLjS6WV4}S~9ktN^_Y$mOg7a0z(P@II&8jsG5&%1XnB-$9Fek@}3Far8a z)DUf;&1c6%)|RfsiNk;S98FP@tB^9Qghk%d+-YoAlp}nf!OX~5nwG}$CLQO0m=V%GZU=&8o z<99$-3Dm;?8i7B=^(kaWV-Ckv zd>nY~IL)%?%(5>WD)@ypXNE?g@@1Y9YW#`k>8Z#bl+L{)GO)Ym_iztY1y59Sw9~jv z?Z3&0bEyMeY-E4?=--#IM@XuzxqHnKY3>KwkPL`eEvNzCnIsjPLHq9H{Z$a#$v!YV z7AVoT7zcYAMlD~EcK=-{dJPR5r4SVq0aAz@^0-#-6ghdPJYrSihmg^5K3#VmRiuDB z-}cLUZx&ki86RTewPil~X~ZTXPGH&`t&gOzKe z&E`--226jlE8BEWHbO6#gjWRWc*kzvI33V^rn)(~K=@#zK}zr(y#OHwwF0f!b{H#cKG_}Ho8A_ zN}k`~iJbN*A@Yx)JWf`fSPTA4f+_re0W|{3{i=WCMh3l>*QAB7q1wJ#f+Apw^eH1C znV$~0_6L8QjM5mEQZEi#C;E~#WKRrZWXn1?!|Pv_i8uRT4Z-$9h(P{auad6_j9vf`Qyw!kP?fquDGBQ>+i{3>6m+sJCHI*oVvEv;Os?8l zBY97rubWSd@CVr^uIZ`*=(zBtwDRC_4HJK)x?vghv+G1nLUrw2JNr^*c6UZ<1Whvp z;xwXb$Kn`8lL8SuON8paQ0`}7@F}gX>^E?Lg(zPXN3(EvQs#Ztp|4jHk*sQn^|U~;DJjK0$3=OkS#p3Ad9gn*+TeCu@A0<)f5@7Z5xp*xZ<=hlE4r!MgLXxeH*PJ?QG|PgP9lGc)4m zGULL>Wg!wmWT`4+mpFt8Y4Sie%yCK1E@2biRS=`MRrCSX7X&jlGccDf3<4hnGd43Y zmr)D?&;mCym#hW>D1Yr*S##UA7Jlciz+0W^$RJ2;>|{FQC3fA|PGURDoiq=$gh*^9 z(Iu%g>96m1KvE**-N{VT+>D0;h~=Dv@2o^(SjaR>LMAj5CSf9BkyR`TnG8b~31)?4 zkz^u_@v5lBi=`GTu_sJS5E&*S5n(6D;3pPXA|;C>YB7j?R+q{R0y%%9K+@1ShOA5i z1(6c)Q3;diFb$F#^6Hpc%@kN`@KN**J{l~HjhO}uYZTKKEWku3Xl)pnkST#f7=bM~ zoT04{j#$VrVg{`WHN#eg^DqMz)}l2`3llTotPQ}if|*d*0IWmI%Iwc&WWuy z1|JbJz-U>*tOiB`D-C~5OJ)yne>305+y$#6>NYW&F7hrpVeMFy@{rt11ya#IR@ngpK09QgY=xQ%q z-3J0=}J=&I8L|{<5?C;7I{LOq&<@ zTCI*IjGWUHr$$zr;ddI z-ztY>wML;&GSJH)qPLy&;un{VCzam`>#5xA6+`s#yjMUeqI7(k{o}K^hhV{(B3|X#DatAZG-RI=ESgq%{IDSBm zi}imc$31=e;_%IvzYqcz0aKUO5CTGfP%`;Bc~D)-gX$r9Q2oE;LG?WkKG2c%H<}0a z7te!N-uA3+b-Fh{mqUYM>T}|O)|c+92YHFWZ96H(`llVIl(L?N zDA?Bl-!@ckdzNXBuJ79i<4Ih9CoK(QptkL6A&_XSe~1&Ur9RCikj$^8_jVmg3ES$@ z5n&kih>`$wBrk{+OToO5^zRT-F5B+-a!=E@O~0LA?jcw@a}9I^QL{=kQjpj!)m0u= zKGf1&D*>&!=^jeh&{rAMm*Gl@B%$fhU!DdW+V#|S6@Po}Q5y!)XdjY)Gl|4XZ4LZ% z20Cwxep?~5bGGTXYHRm<6$-JOTdKO**VUlZ$x?$}bB!^#?effB*_*z(;@qn$W;NF} zexfM}Z|b8}{sXwxM7zQpU6*7%fOF9cox7_;Pm^R-^#)q}?oRd5>yy*{moI)i&SvL} z@+hAl4o=*7(bhwkg5k!4DEo66;ui}wU3Tex7tz4bV?y1&83>Du7o6NqBqSR z8EKF}wM;>IgP-w~pYtIfamU~DF&|S_as{98$)}5noAZqS!KZx2=RD{6-0=&3;fgFD z@q(AUoTlZ3SA4-g@W1%SN2@Z68GE1V@z;}=PhY)i&_R|u&XdD`0TnRU0HiG&#L%Z# zR-(fWL`kn8^slRGF-)$3NXW2*krrKycK8#1z)yhGkWk7#;0Lu9(8|`J`Ex;8JD&rZ zidU1uIbQvh1D+l<_Fjec>A{Pq+lOn=++aHdO=MeWBH4k)*d8=WbfFRY8fdKQAmhvJ zB{Exl8|dr;pFO^R4~%~0NBo#S(^$oq7y?^iMQwbj+ZzHd? zDT|XX)>kP7{2R?TDs7Zh2NpuxYn0SbE5w_Cw+B*Ft+3i)yaBX&Y&431xr}J7Z^G{T zcFRmmri&bZ(^@ao+BIO7h_3yj2I`qGOUzmjo%Ad-r@-JXt?Jqm6G}8z{_f^W5nq^h zYWZtZN&n`chyjOA-@bZPz!6byE!QOJ>C-$&%|N(_cWcn?mTC zWbwLWz56AKn5|&u3kY^wKv)w_tqX@3-xZHScq^VXx`TLhl~B@M!UDp;HlAi9c&|Sg z{TC-{;`*{u)s6O4*UWVX-|N$S9Mt4G_X__2Xabimm$?-JY*IN!GBz+oG&n{yIYvc7 zK}9e`GdMRlH!wLuGcraqG(|ojJUK=(HZVjqI7T!%MnytFMKDA&I5#&pFgZdqGDb5r zMLt~$FHB`_XLM*FGBz_Hm#hW>D1RN#yDmgg6vpxO9gN$|nQzg@ z5`{)ZRJ;L|s8yao;srz_QEEh~k>CM{LfHS+{Id4?zP*!eX7(qGuT8d@2^?GC?#ZOW zjYVcTLD*T|k87|B>#(9I{`Fu3Vu)nfAKx`W9n?dEtoRn5O0GQ3KqE9m3xBlAw$f0k zeS0MfIp~AD>}cPEA{3wv+GQ87;o9ZBrybAyFIBJfK(Dm(5x%-x_T3ot zOPSPBDwNvOgyOv4P!!ko1C;CJVx^FyB& zq}xZI7NxHfpOzq1l>0PA$uPV91OC}1R0?HoWOH{5K;VR|hx=?|{63y6d!+P1dhyt+ko~4xv4*$D>vMmirF{F8R^HW`BUT}EuvK&I zugv^v(b;j``X_c*b!LTqPD=-=+FZ+3oBeqH)%(>=>`%!N&`Xz7qSAx=Z}RkB`93k7 z=Ue8>&fUDK6@F)r>w$m7e5i!O`a?0l*J_%6&-KT98`p>Vt_NREDVuE$xo6(=!RFZ% zeV|4Bt(O6Z+KJZ`huK%Y-|k({ghu5O&rbO?%n$O*_@gk^x3=5>F2>vS6XYWSOXP{AxDw#3aOE{HLni1#v zis0!HKzg&4iMXa<(4Hl$N2Ash3Ub%)`8R)7P@G4zbKE#STqR%S`{%f22HF z(@>Loi+{q%UIBG4Akd1(XCyOqLgtgxH=zJivgX|_EH;{@S++e90QZ-xLj92#6P2L~ z@KOXx0X2{l&Kognp_m1*Ckl-BV%$%+7$JKQ0X4JqYGn9$ukEg-{0klqp?9TlwTIa4 zO7FdSEEQad`bhNJ=%~6yLLkmU!02}6m)2pnvS!5{hMBN>6z_4xt&`S^H%+)ohaR(A zI4~ASy8o0Gup)CvcYMs^NEP%JEv+SJi^k}C2 z{uALcXTYD7ze+m*6f=!8NS2Uk2p5m?&oCM;vg@EUs4}F`@#w*hYDF68CrHdCFreVg z?XNOkvfu2^8LM)Tzy!H{LP2;UuOS<*Mc=tu%aYdPB_u@6U;j08E-u_Oy2{Ax&CHgY zwEap8S?D-*y(60WkmAu`KvaaCM&Ob<0?4PZZ31yx1jDBwG*rxK{jg0gr3U{Ph@Vit z>q!*IdeA=&4JJBWugAV%nmnULpw0RBC_y3UE~&#hv6u&k>s5q6Ab81Eznv%6UmjS* z2+&q=x1h4VgX)?(A{D< zm(=G){uRgs0w`Z8_XwI<;M!Vx!$6ILH@72q+-&5w#Az8cH{r2sgD4M+m5Ly!C`BEt z7{#k$`yV(XG`E!!Be(%qDua&+$IUIpWO|S&MIAadGgW|o)1~4`*>SPJh?e}iAg$uN{h4JaVJYkV4Q4x4QL^ZzJ$~w)}0Jv_M+hS;KU&O2n#*2>{bjJ_IVZQYQRK4 zu|ZPEt@M%O%)y?S3`hwE9D(ReYZaBS+^_eUEC2)eEhL+^W7iYod()d=U?VMbN!h=X zC{F6OTE%2V&Rj~YybGWPVoa&A_ZA_Bvf*5$pAVkrsI(sxkl-4Ay$qZtw6JH*G$qg`S>g5mexhxz!yE5ed!1G9azq0DbO; z@$}o`BH$iFh0&>Eoyb&%+8EqV**a5nsCyx-z9FuX8JD4;;}E&j}>4%SnQXcWv7 zmBTA>&L}1n7!1x-j3+o~-)p8R!VG0gG%|9Mgo9>X0ax#<-x^XpETmeGLNZx&phnXMjpcXgu=J_8}x>1eQgySXew1h0on(+eZnv9AU;=m=8g47 zFhc5ykJYOsElp!%4lJyz4lt0^`-Fb~g-X?{Q=c(AE18rz294vqwy!S&5aodF^XM){ zY=5rfxuwwFX+6Tqe! zN?^idV9kT>C*Hs~)+9y^qJmrf(@7uSg#NX(KZ=RFO+)VPW!tbsJ)ON>Kt0w;f?SvShH@TT(awHYHGRg&eYvB@qt155mc%M-GzBI8>*CZCm z_w^9qta2=sYnFof#ET+>P7jz^Qg)!1Ads`-nl}0Y?c!W+<7|SPc?B0nvUv7i-4gLl z=xBwC7z=QxfqPwmknZ*;bcnin?0`f_5fB?X9m+ahL?{)}^1i8svo{&-exD%+>QPVk zA>EN1^w76Le2(p05<`YsWEWHC);J3fI8*trVz-7u}L^}G4?;Kz85(lgergN$sy zA!rK(pwL~o^Axuzvf29_Ii0PGR#aa&j4ZL!C- z2@#r>;d0NVr?@JLB;NRLwaK}=i!ZY*h>12edy|J`EOBeR>8=O|{7e7q7*1d`ef6~X zWF>(>m2j8v)0c1BvdLzBe20z`{ck0HlIMFXEb&|{eC7E#5_3A8Z^QjTmZgHfHKms` zZ`QW*X4-o8lAissUDeuLtB5fe)_pGM9$;J9w+I%Wm51l*m^WbimQGRvFYGSdb8a!? zAC~*b-?c+ATj5e6I0pW&>$|8QP_jxrk;D@?BVgUbTnY(6<}SoJyi?h-eWm8|9K!Gn zghm9|S6X$$QkP3)&1>_&C)fbh zb)dF4OST(81Viph*gBajw=O3@&xbD`Z{J+g=h z&=-dn#Ov2TA3}+_;omU$`%V~4P>o|;-cpO91rjwy2&Wx_f;(Ox%odbq5|CXr%Z1>s zFYn;4OGbb$pCaG(7!wL|G#J&>!yg<%+@t`~r{(wfCW7)?VNdnTm0NJR)u!8qScE`h z09GQh(;8TJR6A$GwUb;D1}h;Wp@XqCAulfsgRGgog{vhY69*GhA~HNBFhoPfWrH25 z`$OYaa!Qj?-}eZ;#f?0BEI(oce;uC^rJj=r8jbYoea8a>_7sfCq2;we(!P}~^r2saOWH*j$&wN*QzgaF=4ADcJ>IJ?p?maZ?{AEY{OMLtGY2(e z<;Y&sN&iN}tt>Q{Weg1chZmL+wlrs!l~&Tbb9i{S00XVzi-MO8p3-Z#lUAoQp)c9k`%Q)?Y#D=u2XxkM>&vsACaF&3W_-;S`mv?w^`^;icOHygIB;$4IOTj`=x#dJ3cq9{Q|-6$ zN<9u#!gJOny5MDofL@E!e1O{Od(n%@gVl}4)(di7t>UiqF4Yp5S>E)yR&Vx2n?7!k z>1ECX2YA#Ln%1{j0Pn|iu$ZZ2@^!YK^Al3@BgQQPcMHXdRzb3HI{jEql*;d!1t%=_ zVY$_@&u4vTr8G&=9iPBnhIyS+>G)-%&!I=ZG%WVJFiS=QV9{{3C^(k;6g!osI=Df+ zm~!!lcg|lNCyv$OOfc-TsamG&-fF2f4w8>5YZ{sWPe<%YYf~Lk|_<#T6IH8 zc>2V)^I>4LTWK5s8%k zVNS>ah{AZpz=g>L@Z~X9H8fg=C9GvW>>GS%LLzuvFgjC;Fjjhyptxu{S+!oLEEmaM zt23*cn_?CVVYCQku8I3-gbx=rLYkn5!?S9g`Pa<6S`K@gEyY+lM^-WU5_cz3*EDC) z!M2#W__Q*OUO=5mTX?=BgvZh^TsW;eZlgh(bp9$Zpy1$~;#GXvLBu-}=>a#dyD;e? z7ZE^Qk1zDiWRLI&X<1FDu#u(3U_t9?e_yR3~v7d=Z+z_9GMqn>p;@426#qRX(0kr*L7Zs;}< z(@a(ku%0)*w~Cj%-(@9ZxhDjTF#~8EIC}}@%UA=5BvB%#gk-s~mARjgcASA;CF&eN zfGPJuoCIIP9sv3=YC_c4B2(G)p z4$qqYrR+++KxYik_B2e-5}{Z-yF1G^Enm_G9QR;eksaMt<7o~zK21Gbs=9qE7MUbp zENkp5R9eNf?%NZ(lcpQO`jKszeF(93ee>`|mm4QVRUGn6JhwW}5tl`Cf*h%}dP#XP zBx8VG9eRLuA}IjvzuM^#{8!v9+E}4UE-Vf_<5d`yCGbQqy7j+!%&SWQqpZrZFhs)y zYJw(p6A$)B_AQ1FT+OTW)D3jI(~QN=AnLyC-=l=1%wE%-lb6ZcLl-jus&@zCi_9X$ z@+dIC7?;rVGiVQduA}≪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 z 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 kv +The optimizer may be run by executing the \texttt{assignment1/run.sh} +script while inside the \texttt{assignment1} directory. We have +included precompiled intermediate languages files for all examples in +the distribution. Running the script will create separate output files +in the \texttt{examples} directory for each method of each example; +dump information has the extension \texttt{.txt}, and CFG output has +the extension \texttt{.dot}. For example, the results for the GCD +method in \texttt{gdc.dart} can be found in +\texttt{examples/gcd.dart.il-main-info.txt}. The GraphViz files can be +turned into PDF with a command like \texttt{dot -Tpdf file.dot > file.pdf}. Our optimizer is implemented in Ruby, so no separate build step is