diff --git a/apps/ringworld-character-sheets/build.py b/apps/ringworld-character-sheets/build.py index 799315e..324436d 100644 --- a/apps/ringworld-character-sheets/build.py +++ b/apps/ringworld-character-sheets/build.py @@ -444,6 +444,157 @@ def draw_front(c, char, page_num, total_pages): PW-PAD, 2.5*mm, 'Mono', 6, HexColor('#666688'), align='right') # ─── Back page ──────────────────────────────────────────────────────────────── + +def draw_puppeteer_hloc(c, char): + """Pierson's Puppeteer hit location diagram — two heads, two forelegs, rear leg, body.""" + A = char['acc'] + AD = char['acc_dark'] + hp = char['hp'] + con = int(char['CON']) + + hloc_y_top = PH - 10*mm + hloc_h = 130*mm + hloc_y_bot = hloc_y_top - hloc_h + + filled_rect(c, 0, hloc_y_bot, PW, hloc_h, HexColor('#0a0a18')) + hline(c, 0, PW, hloc_y_bot, A, lw=1.5) + + bar_h = 11 + bar_y = hloc_y_top - bar_h - 3 + filled_rect(c, 0, bar_y, PW, bar_h, A) + text(c, "HIT LOCATIONS & DAMAGE — PIERSON'S PUPPETEER", PAD, bar_y+3, 'OrbB', 8, INK) + + body_hp = math.ceil(hp * 0.40) + neck_hp = math.ceil(hp * 0.20) + head_hp = math.ceil(hp * 0.25) + foreleg_hp = math.ceil(hp * 0.20) + rearleg_hp = math.ceil(hp * 0.25) + unc = math.ceil(hp * 0.25) + + content_top = bar_y + dia_w = 70*mm + bx = PAD + dia_w / 2 + body_cy = content_top - 65*mm + + # Barrel body + c.saveState(); c.setStrokeColor(A); c.setLineWidth(2); c.setFillColor(Color(0,0,0,0)) + c.ellipse(bx-20*mm, body_cy-16*mm, bx+20*mm, body_cy+14*mm, fill=0, stroke=1) + c.restoreState() + text(c, 'BODY', bx, body_cy+4*mm, 'OrbB', 10, A, align='centre') + text(c, f'{body_hp} HP', bx, body_cy-2*mm, 'OrbB', 11, white, align='centre') + text(c, '01-07', bx, body_cy-8*mm, 'Mono', 9, MID, align='centre') + + # Forelegs + fl_top = body_cy - 16*mm + fl_bh = 32*mm; fl_bw = 12*mm + for side, lbl, rng in [(-1,'R FORE','08-10'),(+1,'L FORE','11-12')]: + fx = bx + side*28*mm + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1.8); c.setFillColor(Color(0,0,0,0)) + c.rect(fx-fl_bw/2, fl_top-fl_bh, fl_bw, fl_bh, fill=0, stroke=1) + c.restoreState() + text(c, lbl, fx, fl_top-13*mm, 'OrbB', 9, A, align='centre') + text(c, f'{foreleg_hp} HP',fx, fl_top-19*mm, 'OrbB', 10, white, align='centre') + text(c, rng, fx, fl_top-25*mm, 'Mono', 8, MID, align='centre') + + # Rear leg + rl_bh = 32*mm; rl_bw = 12*mm + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1.8); c.setFillColor(Color(0,0,0,0)) + c.rect(bx-rl_bw/2, fl_top-rl_bh, rl_bw, rl_bh, fill=0, stroke=1) + c.restoreState() + text(c, 'REAR LEG', bx, fl_top-13*mm, 'OrbB', 9, A, align='centre') + text(c, f'{rearleg_hp} HP',bx, fl_top-19*mm, 'OrbB', 10, white, align='centre') + text(c, '13-14', bx, fl_top-25*mm, 'Mono', 8, MID, align='centre') + + # Necks (curved bezier) + neck_base = body_cy + 14*mm + neck_tip_l = (bx-22*mm, neck_base+32*mm) + neck_tip_r = (bx+22*mm, neck_base+32*mm) + c.saveState(); c.setStrokeColor(A); c.setLineWidth(9); c.setStrokeAlpha(0.15) + c.bezier(bx-6*mm, neck_base, bx-14*mm, neck_base+16*mm, + neck_tip_l[0]+4*mm, neck_tip_l[1]-6*mm, neck_tip_l[0], neck_tip_l[1]) + c.bezier(bx+6*mm, neck_base, bx+14*mm, neck_base+16*mm, + neck_tip_r[0]-4*mm, neck_tip_r[1]-6*mm, neck_tip_r[0], neck_tip_r[1]) + c.restoreState() + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1.5) + c.bezier(bx-6*mm, neck_base, bx-14*mm, neck_base+16*mm, + neck_tip_l[0]+4*mm, neck_tip_l[1]-6*mm, neck_tip_l[0], neck_tip_l[1]) + c.bezier(bx+6*mm, neck_base, bx+14*mm, neck_base+16*mm, + neck_tip_r[0]-4*mm, neck_tip_r[1]-6*mm, neck_tip_r[0], neck_tip_r[1]) + c.restoreState() + # neck labels at midpoint + for side, lbl, rng, tx, ty in [ + (-1,'L NECK','15-16', bx-26*mm, neck_base+15*mm), + (+1,'R NECK','17-18', bx+26*mm, neck_base+15*mm), + ]: + text(c, lbl, tx, ty, 'OrbB', 7.5, A, align='centre') + text(c, f'{neck_hp}HP', tx, ty-5*mm, 'Mono', 7, white, align='centre') + text(c, rng, tx, ty-9*mm, 'Mono', 7, MID, align='centre') + + # Heads + for hx, hy, lbl, rng in [ + (neck_tip_l[0], neck_tip_l[1], 'L HEAD', '20'), + (neck_tip_r[0], neck_tip_r[1], 'R HEAD', '19'), + ]: + c.saveState(); c.setStrokeColor(A); c.setLineWidth(2); c.setFillColor(Color(0,0,0,0)) + c.ellipse(hx-9*mm, hy, hx+9*mm, hy+14*mm, fill=0, stroke=1) + c.restoreState() + text(c, lbl, hx, hy+9*mm, 'OrbB', 9, A, align='centre') + text(c, f'{head_hp} HP',hx, hy+4*mm, 'OrbB', 10, white, align='centre') + text(c, rng, hx, hy+0.5*mm,'Mono', 8, MID, align='centre') + + # Location table (right side) — reuse same column structure + tbl_x = PAD + dia_w + 5*mm + tbl_w = PW - tbl_x - PAD + tbl_y = content_top - 5 + c1=tbl_x; c2=tbl_x+28*mm; c3=tbl_x+46*mm; c4=tbl_x+64*mm; c5=tbl_x+82*mm; c6=tbl_x+100*mm + for lbl,cx in [('LOCATION',c1),('MELEE',c2),('RANGED',c3),('MAX HP',c4),('CURR HP',c5),('ARMOUR',c6)]: + text(c, lbl, cx, tbl_y, 'OrbB', 7.5, A) + hline(c, tbl_x, PW-PAD, tbl_y-3, A, lw=1.2) + + pup_locs = [ + ('Body', '01-07','01-07', body_hp), + ('Right Fore', '08-10','08-10', foreleg_hp), + ('Left Fore', '11-12','11-12', foreleg_hp), + ('Rear Leg', '13-14','13-14', rearleg_hp), + ('Right Neck', '15-16','15-16', neck_hp), + ('Left Neck', '17-18','17-18', neck_hp), + ('Right Head', '19', '19', head_hp), + ('Left Head', '20', '20', head_hp), + ] + row_h = 12*mm; ry = tbl_y - 3 + for i,(loc,m_rng,r_rng,loc_hp) in enumerate(pup_locs): + ry -= row_h + bg = HexColor('#0e0e22') if i%2==0 else HexColor('#09090f') + filled_rect(c, tbl_x-1, ry, tbl_w+1, row_h-1, bg) + mid_y = ry + row_h*0.42 + text(c, loc, c1+2, mid_y, 'Bar', 11, white) + text(c, m_rng, c2+9*mm, mid_y, 'Mono', 9.5, MID, align='centre') + text(c, r_rng, c3+9*mm, mid_y, 'Mono', 9.5, MID, align='centre') + text(c, str(loc_hp), c4+8*mm, mid_y, 'OrbB', 14, A, align='centre') + bh = row_h-4*mm + outline_rect(c, c5, ry+2*mm, 16*mm, bh, A, lw=1.2) + outline_rect(c, c6, ry+2*mm, 16*mm, bh, A, lw=1.2) + hline(c, tbl_x-1, PW-PAD, ry, HexColor('#181830'), lw=0.5) + + unc_y = ry - 5*mm + filled_rect(c, tbl_x-1, unc_y, tbl_w+1, 14, HexColor('#1a0808')) + outline_rect(c, tbl_x-1, unc_y, tbl_w+1, 14, A, lw=1.3) + text(c, f'UNCONSCIOUS: HP ≤ {unc} · DYING: HP = 0 · DEAD: HP = −{con}', + tbl_x+4, unc_y+4.5, 'Mono', 7.5, A) + + tally_y = unc_y - 4*mm - 12*mm + text(c, 'HP TALLY', tbl_x, tally_y+9, 'OrbB', 7.5, A) + tb = 11*mm; tbx = tbl_x + 26*mm + for i in range(min(hp+3, 18)): + bx_t = tbx + i*(tb+1.5) + if bx_t+tb > PW-PAD: break + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1) + c.setFillColor(HexColor('#080812')) + c.rect(bx_t, tally_y, tb, tb, fill=1, stroke=1) + c.setFont('OrbB',7); c.setFillColor(HexColor('#3a5070')) + c.drawCentredString(bx_t+tb/2, tally_y+2.5, str(i+1)) + c.restoreState() + def draw_back(c, char, page_num, total_pages): A = char['acc'] AD = char['acc_dark'] @@ -459,171 +610,173 @@ def draw_back(c, char, page_num, total_pages): # ── HIT LOCATION SECTION ────────────────────────────────────────────────── hloc_y_top = PH - mast_h - hloc_h = 100*mm + hloc_h = 130*mm hloc_y_bot = hloc_y_top - hloc_h - filled_rect(c, 0, hloc_y_bot, PW, hloc_h, HexColor('#0a0a18')) - hline(c, 0, PW, hloc_y_bot, A, lw=1.5) + if char.get('species','').startswith("Pierson"): + draw_puppeteer_hloc(c, char) + else: + filled_rect(c, 0, hloc_y_bot, PW, hloc_h, HexColor('#0a0a18')) + hline(c, 0, PW, hloc_y_bot, A, lw=1.5) - # Section header - section_label(c, 0, hloc_y_top - 9, PW, 'HIT LOCATIONS & DAMAGE', A, size=7) + # Section header — 3mm gap below masthead bottom, text clear of bar + bar_h = 11 + bar_y = hloc_y_top - bar_h - 3 + filled_rect(c, 0, bar_y, PW, bar_h, A) + text(c, 'HIT LOCATIONS & DAMAGE', PAD, bar_y + 3, 'OrbB', 8, INK) - # Calculate location HPs - arm_hp = math.ceil(hp * 0.25) - leg_hp = math.ceil(hp * 0.30) - head_hp = math.ceil(hp * 0.30) - abd_hp = math.ceil(hp * 0.30) - chest_hp= math.ceil(hp * 0.35) - unc = math.ceil(hp * 0.25) + arm_hp = math.ceil(hp * 0.25) + leg_hp = math.ceil(hp * 0.30) + head_hp = math.ceil(hp * 0.30) + abd_hp = math.ceil(hp * 0.30) + chest_hp = math.ceil(hp * 0.35) + unc = math.ceil(hp * 0.25) - # ── Body diagram (left side) ────────────────────────────────────────────── - dia_x = PAD - dia_w = 58*mm - dia_y_top = hloc_y_top - 10 # below section header + content_top = bar_y # drawing starts below the header bar - # Draw body outline - bx = dia_x + dia_w/2 # centre x - by_head_centre = dia_y_top - 14*mm - scale = 2.8 # drawing scale + # ── Body diagram (left, 70mm wide) ──────────────────────────────── + dia_w = 70*mm + bx = PAD + dia_w / 2 - # Head - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1.5); c.setFillColor(Color(0,0,0,0)) - c.ellipse(bx-8*mm, by_head_centre-6*mm, bx+8*mm, by_head_centre+8*mm, fill=0, stroke=1) - c.restoreState() - text(c, 'HEAD', bx, by_head_centre, 'OrbB', 6, A, align='centre') - text(c, f'{head_hp}HP', bx, by_head_centre-4*mm, 'Mono', 6, white, align='centre') - text(c, '19-20', bx, by_head_centre-7*mm, 'Mono', 5, MID, align='centre') - - # Neck - neck_top = by_head_centre - 6*mm - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1); c.setFillColor(Color(0,0,0,0)) - c.rect(bx-3*mm, neck_top-5*mm, 6*mm, 5*mm, fill=0, stroke=1) - c.restoreState() - - # Chest - chest_top = neck_top - 5*mm - chest_body_h = 22*mm - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1.5); c.setFillColor(Color(0,0,0,0)) - c.rect(bx-13*mm, chest_top-chest_body_h, 26*mm, chest_body_h, fill=0, stroke=1) - c.restoreState() - text(c, 'CHEST', bx, chest_top-10*mm, 'OrbB', 6, A, align='centre') - text(c, f'{chest_hp}HP · 11-15', bx, chest_top-15*mm, 'Mono', 5, white, align='centre') - - # Abdomen - abd_top = chest_top - chest_body_h - abd_h = 15*mm - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1.4); c.setFillColor(Color(0,0,0,0)) - c.rect(bx-11*mm, abd_top-abd_h, 22*mm, abd_h, fill=0, stroke=1) - c.restoreState() - text(c, 'ABD', bx, abd_top-7.5*mm, 'OrbB', 5.5, A, align='centre') - text(c, f'{abd_hp}HP · 07-10', bx, abd_top-11*mm, 'Mono', 5, white, align='centre') - - # Arms - arm_top = chest_top - arm_h = 28*mm - arm_w = 9*mm - # Right arm (viewer's left) - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1.3); c.setFillColor(Color(0,0,0,0)) - c.rect(bx-25*mm, arm_top-arm_h, arm_w, arm_h, fill=0, stroke=1) - c.restoreState() - text(c, 'R ARM', bx-20.5*mm, arm_top-12*mm, 'OrbB', 5, A, align='centre') - text(c, f'{arm_hp}HP', bx-20.5*mm, arm_top-17*mm, 'Mono', 5, white, align='centre') - text(c, '16-17', bx-20.5*mm, arm_top-21*mm, 'Mono', 5, MID, align='centre') - # Left arm (viewer's right) - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1.3); c.setFillColor(Color(0,0,0,0)) - c.rect(bx+16*mm, arm_top-arm_h, arm_w, arm_h, fill=0, stroke=1) - c.restoreState() - text(c, 'L ARM', bx+20.5*mm, arm_top-12*mm, 'OrbB', 5, A, align='centre') - text(c, f'{arm_hp}HP', bx+20.5*mm, arm_top-17*mm, 'Mono', 5, white, align='centre') - text(c, '18-19', bx+20.5*mm, arm_top-21*mm, 'Mono', 5, MID, align='centre') - - # Legs - leg_top = abd_top - abd_h - leg_h = 28*mm - leg_w = 10*mm - # Right leg - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1.3); c.setFillColor(Color(0,0,0,0)) - c.rect(bx-14*mm, leg_top-leg_h, leg_w, leg_h, fill=0, stroke=1) - c.restoreState() - text(c, 'R LEG', bx-9*mm, leg_top-14*mm, 'OrbB', 5, A, align='centre') - text(c, f'{leg_hp}HP', bx-9*mm, leg_top-19*mm, 'Mono', 5, white, align='centre') - text(c, '01-03', bx-9*mm, leg_top-23*mm, 'Mono', 5, MID, align='centre') - # Left leg - c.saveState() - c.setStrokeColor(A); c.setLineWidth(1.3); c.setFillColor(Color(0,0,0,0)) - c.rect(bx+4*mm, leg_top-leg_h, leg_w, leg_h, fill=0, stroke=1) - c.restoreState() - text(c, 'L LEG', bx+9*mm, leg_top-14*mm, 'OrbB', 5, A, align='centre') - text(c, f'{leg_hp}HP', bx+9*mm, leg_top-19*mm, 'Mono', 5, white, align='centre') - text(c, '04-06', bx+9*mm, leg_top-23*mm, 'Mono', 5, MID, align='centre') - - # ── Location table (right side) ─────────────────────────────────────────── - tbl_x = dia_x + dia_w + 3*mm - tbl_w = PW - tbl_x - PAD - tbl_y = hloc_y_top - 12 - - # Column headers - c1, c2, c3, c4, c5 = tbl_x, tbl_x+28*mm, tbl_x+42*mm, tbl_x+56*mm, tbl_x+67*mm - hdrs = [('LOCATION', c1), ('MELEE D20', c2), ('RANGED D20', c3), - ('HP', c4), ('AP', c5)] - for lbl, cx in hdrs: - text(c, lbl, cx, tbl_y, 'OrbB', 6, A) - hline(c, tbl_x, PW-PAD, tbl_y - 2, A, lw=0.8) - - locs = [ - ('Head', '19-20', '20', head_hp), - ('Right Arm','13-15', '16-17', arm_hp), - ('Left Arm', '16-18', '18-19', arm_hp), - ('Chest', '12', '11-15', chest_hp), - ('Abdomen', '09-11', '07-10', abd_hp), - ('Right Leg','01-04', '01-03', leg_hp), - ('Left Leg', '05-08', '04-06', leg_hp), - ] - ry = tbl_y - 6 - for i, (loc, m_rng, r_rng, loc_hp) in enumerate(locs): - ry -= 9 - if i % 2 == 0: - filled_rect(c, tbl_x-1, ry-2, tbl_w+1, 9, HexColor('#0e0e22')) - text(c, loc, c1, ry, 'Bar', 8, white) - text(c, m_rng, c2+5*mm, ry, 'Mono', 7, MID, align='centre') - text(c, r_rng, c3+5*mm, ry, 'Mono', 7, MID, align='centre') - # HP value + box - text(c, str(loc_hp), c4, ry, 'OrbB', 8, A) - outline_rect(c, c4+8*mm, ry-1, 12*mm, 8, A, lw=0.8) - # AP box - outline_rect(c, c5, ry-1, 12*mm, 8, A, lw=0.8) - - # Unconscious / dying note - note_y = ry - 12 - filled_rect(c, tbl_x-1, note_y, tbl_w+1, 10, HexColor('#1a0a0a')) - outline_rect(c, tbl_x-1, note_y, tbl_w+1, 10, A, lw=1) - text(c, f'UNCONSCIOUS: HP ≤ {unc} · DYING: HP = 0 · DEAD: HP = −{con}', - tbl_x+2, note_y+2.5, 'Mono', 6, A) - - # HP tally strip - tally_y = note_y - 16 - filled_rect(c, tbl_x-1, tally_y, tbl_w+1, 14, HexColor('#080810')) - text(c, 'HP TALLY:', tbl_x+1, tally_y+5, 'OrbB', 6, A) - tally_x = tbl_x + 20*mm - tally_box = 7.5 - for i in range(min(hp+5, 30)): - bx_t = tally_x + i*(tally_box+1.5) - if bx_t + tally_box > PW - PAD: break + # HEAD + by_head_c = content_top - 18*mm c.saveState() - c.setStrokeColor(A); c.setLineWidth(0.6) - c.setFillColor(Color(0,0,0,0)) - c.rect(bx_t, tally_y+2, tally_box, tally_box, fill=0, stroke=1) - c.setFont('Mono', 4.5); c.setFillColor(HexColor('#556688')) - c.drawCentredString(bx_t+tally_box/2, tally_y+3, str(i+1)) + c.setStrokeColor(A); c.setLineWidth(2); c.setFillColor(Color(0,0,0,0)) + c.ellipse(bx-12*mm, by_head_c-9*mm, bx+12*mm, by_head_c+11*mm, fill=0, stroke=1) + c.restoreState() + text(c, 'HEAD', bx, by_head_c+2*mm, 'OrbB', 10, A, align='centre') + text(c, f'{head_hp} HP',bx, by_head_c-3.5*mm,'OrbB', 11, white, align='centre') + text(c, '19-20', bx, by_head_c-8.5*mm,'Mono', 9, MID, align='centre') + + # Neck + neck_top = by_head_c - 9*mm + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1.3); c.setFillColor(Color(0,0,0,0)) + c.rect(bx-4.5*mm, neck_top-7*mm, 9*mm, 7*mm, fill=0, stroke=1) c.restoreState() + # CHEST + chest_top = neck_top - 7*mm + chest_w = 36*mm + chest_bh = 30*mm + c.saveState(); c.setStrokeColor(A); c.setLineWidth(2); c.setFillColor(Color(0,0,0,0)) + c.rect(bx-chest_w/2, chest_top-chest_bh, chest_w, chest_bh, fill=0, stroke=1) + c.restoreState() + text(c, 'CHEST', bx, chest_top-11*mm, 'OrbB', 10, A, align='centre') + text(c, f'{chest_hp} HP',bx, chest_top-17*mm, 'OrbB', 11, white, align='centre') + text(c, '11-15', bx, chest_top-23*mm, 'Mono', 9, MID, align='centre') + + # ABDOMEN + abd_top = chest_top - chest_bh + abd_bh = 20*mm + abd_w = 28*mm + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1.8); c.setFillColor(Color(0,0,0,0)) + c.rect(bx-abd_w/2, abd_top-abd_bh, abd_w, abd_bh, fill=0, stroke=1) + c.restoreState() + text(c, 'ABDOMEN', bx, abd_top-7*mm, 'OrbB', 10, A, align='centre') + text(c, f'{abd_hp} HP', bx, abd_top-13*mm, 'OrbB', 11, white, align='centre') + text(c, '07-10', bx, abd_top-18*mm, 'Mono', 9, MID, align='centre') + + # ARMS + arm_bh = 36*mm + arm_bw = 13*mm + gap = 3*mm + for side, lbl, rng in [(-1,'R ARM','16-17'),(+1,'L ARM','18-19')]: + ax = bx + side*(chest_w/2 + gap + arm_bw/2) + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1.8); c.setFillColor(Color(0,0,0,0)) + c.rect(ax-arm_bw/2, chest_top-arm_bh, arm_bw, arm_bh, fill=0, stroke=1) + c.restoreState() + text(c, lbl, ax, chest_top-14*mm, 'OrbB', 9, A, align='centre') + text(c, f'{arm_hp} HP',ax, chest_top-20*mm, 'OrbB', 10, white, align='centre') + text(c, rng, ax, chest_top-26*mm, 'Mono', 8, MID, align='centre') + + # LEGS + leg_top = abd_top - abd_bh + leg_bh = 38*mm + leg_bw = 14*mm + sep = 3*mm + for side, lbl, rng in [(-1,'R LEG','01-03'),(+1,'L LEG','04-06')]: + lx = bx + side*(leg_bw/2 + sep/2) + c.saveState(); c.setStrokeColor(A); c.setLineWidth(1.8); c.setFillColor(Color(0,0,0,0)) + c.rect(lx-leg_bw/2, leg_top-leg_bh, leg_bw, leg_bh, fill=0, stroke=1) + c.restoreState() + text(c, lbl, lx, leg_top-15*mm, 'OrbB', 9, A, align='centre') + text(c, f'{leg_hp} HP',lx, leg_top-21*mm, 'OrbB', 10, white, align='centre') + text(c, rng, lx, leg_top-27*mm, 'Mono', 8, MID, align='centre') + + # ── Location table (right side) ─────────────────────────────────── + tbl_x = PAD + dia_w + 5*mm + tbl_w = PW - tbl_x - PAD + tbl_y = content_top - 5 + + # Col positions + c1 = tbl_x + c2 = tbl_x + 28*mm + c3 = tbl_x + 46*mm + c4 = tbl_x + 64*mm + c5 = tbl_x + 82*mm + c6 = tbl_x + 100*mm + + # Column headers + for lbl, cx in [('LOCATION',c1),('MELEE',c2),('RANGED',c3), + ('MAX HP',c4),('CURR HP',c5),('ARMOUR',c6)]: + text(c, lbl, cx, tbl_y, 'OrbB', 7.5, A) + hline(c, tbl_x, PW-PAD, tbl_y - 3, A, lw=1.2) + + locs = [ + ('Head', '19-20','20', head_hp), + ('Right Arm','13-15','16-17', arm_hp), + ('Left Arm', '16-18','18-19', arm_hp), + ('Chest', '12', '11-15', chest_hp), + ('Abdomen', '09-11','07-10', abd_hp), + ('Right Leg','01-04','01-03', leg_hp), + ('Left Leg', '05-08','04-06', leg_hp), + ] + + row_h = 14*mm + ry = tbl_y - 3 + for i,(loc,m_rng,r_rng,loc_hp) in enumerate(locs): + ry -= row_h + bg = HexColor('#0e0e22') if i%2==0 else HexColor('#09090f') + filled_rect(c, tbl_x-1, ry, tbl_w+1, row_h-1, bg) + mid_y = ry + row_h * 0.42 + text(c, loc, c1+2, mid_y, 'Bar', 11, white) + text(c, m_rng, c2+9*mm, mid_y, 'Mono', 9.5, MID, align='centre') + text(c, r_rng, c3+9*mm, mid_y, 'Mono', 9.5, MID, align='centre') + text(c, str(loc_hp), c4+8*mm, mid_y, 'OrbB', 14, A, align='centre') + bh = row_h - 4*mm + outline_rect(c, c5, ry+2*mm, 16*mm, bh, A, lw=1.3) + outline_rect(c, c6, ry+2*mm, 16*mm, bh, A, lw=1.3) + hline(c, tbl_x-1, PW-PAD, ry, HexColor('#181830'), lw=0.5) + + # Unconscious / dying banner — clear gap above + unc_y = ry - 5*mm + filled_rect(c, tbl_x-1, unc_y, tbl_w+1, 14, HexColor('#1a0808')) + outline_rect(c, tbl_x-1, unc_y, tbl_w+1, 14, A, lw=1.3) + text(c, f'UNCONSCIOUS: HP ≤ {unc} · DYING: HP = 0 · DEAD: HP = −{con}', + tbl_x+4, unc_y+4.5, 'Mono', 7.5, A) + + # HP tally — large numbered boxes + tally_y = unc_y - 4*mm - 12*mm + text(c, 'HP TALLY', tbl_x, tally_y+9, 'OrbB', 7.5, A) + tb = 11*mm + tbx = tbl_x + 26*mm + for i in range(min(hp+3, 18)): + bx_t = tbx + i*(tb + 1.5) + if bx_t + tb > PW - PAD: break + c.saveState() + c.setStrokeColor(A); c.setLineWidth(1) + c.setFillColor(HexColor('#080812')) + c.rect(bx_t, tally_y, tb, tb, fill=1, stroke=1) + c.setFont('OrbB', 7); c.setFillColor(HexColor('#3a5070')) + c.drawCentredString(bx_t+tb/2, tally_y+2.5, str(i+1)) + c.restoreState() + + # Under-diagram label (bottom of diagram area) + unc_lbl_y = hloc_y_bot + 2*mm + filled_rect(c, PAD, unc_lbl_y, dia_w - 2*mm, 11, HexColor('#100608')) + outline_rect(c, PAD, unc_lbl_y, dia_w - 2*mm, 11, A, lw=0.9) + text(c, f'UNCONSIOUS ≤ {unc} HP', PAD + (dia_w-2*mm)/2, + unc_lbl_y+3, 'OrbB', 7.5, A, align='centre') # ── COMBAT QUICK REFERENCE ──────────────────────────────────────────────── cref_h = 34*mm cref_y = hloc_y_bot - cref_h diff --git a/apps/ringworld-character-sheets/character-sheets.pdf b/apps/ringworld-character-sheets/character-sheets.pdf index abd66ba..1470b28 100644 --- a/apps/ringworld-character-sheets/character-sheets.pdf +++ b/apps/ringworld-character-sheets/character-sheets.pdf @@ -44,8 +44,6 @@ endobj /ExtGState << /gRLs0 << /ca 0 ->> /gRLs1 << -/ca 1 >> >> /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -88,8 +86,6 @@ endobj /ExtGState << /gRLs0 << /ca 0 ->> /gRLs1 << -/ca 1 >> >> /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -132,8 +128,6 @@ endobj /ExtGState << /gRLs0 << /ca 0 ->> /gRLs1 << -/ca 1 >> >> /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -177,7 +171,7 @@ endobj /gRLs0 << /ca 0 >> /gRLs1 << -/ca 1 +/CA .15 >> >> /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -220,8 +214,6 @@ endobj /ExtGState << /gRLs0 << /ca 0 ->> /gRLs1 << -/ca 1 >> >> /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -264,8 +256,6 @@ endobj /ExtGState << /gRLs0 << /ca 0 ->> /gRLs1 << -/ca 1 >> >> /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> /Rotate 0 /Trans << @@ -562,7 +552,7 @@ endobj endobj 38 0 obj << -/Author (anonymous) /CreationDate (D:20260518150341+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260518150341+00'00') /Producer (ReportLab PDF Library - \(opensource\)) +/Author (anonymous) /CreationDate (D:20260518152239+00'00') /Creator (anonymous) /Keywords () /ModDate (D:20260518152239+00'00') /Producer (ReportLab PDF Library - \(opensource\)) /Subject (unspecified) /Title (untitled) /Trapped /False >> endobj @@ -581,10 +571,10 @@ Gau0ID0)1;npd9-0m-K?[> stream -Gau0HCNJ4L)ZK/3Z!VgG?;S"1m:N5:L1%u4K#%WG2Db0'J;i$/j9eGL'OgDKfpTi+ldgBSq_gaZAHa5p#r><6HJ.X,Ar.m&5(`N.1421RSb-D?87%s7qRBd-VB3."fIMDp7`73e*;T'"%-9k'C^7]C)n_3k'#,-T(fANITLpC4+2*b8<_GX(7787U$Mp.UlK]CujN3VJ@i0bfuq^?)J.>qRXdY5dXHmPSa4C*"d=.02e.m%a7X)s>BOMV8qOdN?u[km#e$^7VjVqkOVpC>9ODK8aeA!n@!b+]hT.DX*M5)9Yd2_f=\,gCVJBKm461p&_b(5/]OM1[>t]=gEXc4g:'-[oKiNHk^l#r7WnA(;cH"[e=>""DuFCahUN-'iKmOS?$@VeR%^JTfTgF1+ZO?&F*;+@PP*8)a]@A@h%SW_V;9Xi/q?1L\J6nCW.J?Ne?-EQDT/7VEJSu_[pj5Z4@(WCX))3eZ)lK+jY-W/W=OeKWRE3VM8Sg\42As&!BM3;s?rb:cG5oRqD?e@o$*+-]fYA+j+JT'c<^F1;+<_A*jO&UrI_Qk9CD/[p/KAI:kc`FBh/'>8,55.ec1!*O1GFo>""1S<#1Yjf'-+!/Bd;.r\*SIZ(`4U-@;=O]h"on",e=XZpSCRE"OR'G;q.PmXJm%Q'rk0K.1A7j,^HSt)S9:Bp8A'RO\2`3hsT-oI0YKImAA(b[e),)/)Pgncq="](sJRPW#[P:,f,$GP6BD%W9]Us_K_uY,uh6Pa*;QRC@ImjrmftY,;.,k1:RPa7#7&u$-Y=SI-UNgQ_;fYOM]8.B@a.upE9/q7Wf..Q-\&ZfOTU+W2$XU:Qod^],X;N\`A<$S"?8YpNOm!g70ucpf-$\>H#c*r,MmDa[D,D1KccnS:(CeOHYof!`ojY,>XHF$PbW'#?^XV^?'J&pE9/WY\@P>tq6Ml&E$3-T-(&rK5&JGpC'eH?i"uu,IQ4kt&+%L1TEMD`*Zue*5f7Y3rhl-!o[h/VSBK1ij^OS/a]a4+mO2diCQ0hP&\NrFhcF\pHhprMePd8_/@neD6kR^>?$/!]@"sXAObIoI>C9]Z=6!reU_Z;X5l;ffOk7/!PBOK?!:bn'elU[Y^cW$qsd=AcdRm_[Q1CaoBI(=EKa-+B0o+cS,Y*ec=BRL9cN$dRa0OPAO'!poZ,0=]s$'V(?_)op!][aRtf5lr)!CHr3\mWmU%?Z4=R4Z7oM7;mn/C*`lC*9.;B:9k>hM1/!jc4EVfY's"L/.NrAGMF,9RH&9!%;C.9"VlmHUf.b?"fN^`WA6r,K@jA]Sm9=7]MooH:qg^[RkJ=K9L-1akTi*"14q#6gN,qS=@MSJl>N#WK%iHpeHhIbh&]l8Bun_9"n_;5"^)#aH\ms7Ad;&8ZTrE50pHS$'h/YiH"N^]V$g8'[#uE8qZ*(PcnK"b#g>6Q2J_]NUM:@$[`i")E;'k''^_L.m<\'X)X9BfVuKKA`tdn&X):)n7?+N!pm3e%(KFm>>%J.Grn315(pd4B;G>rL6$ItImY@r,*9Bm+)jU/!GuW!RdUN"dIiejQWqBrkKjW5?*=G:4D"7>!]KiH-5ijQL&#,]KK!e$]3,9/"l\FC@B=SB3oA@4R.RHqIaqRn2]#1U]=>tP`iY@?aE9$<$9QXUq>6Id>6#OZ-DH;5e^!X1%7<;p;UQP>NV2)i@`qil\Xp&-!EJ-khdf\Ip=1I'$[1S0S-h8/IJAr>Je^2nalZIJ*EN,Qn9n1>dd%:5>NIf[AA>?XSl$^2_*@8FQ#'&@hQr1aif[Ip7dPrWXnL!r:WNJ4qeC/7lDr"T$Wij#UddpVu6pKj0L76C6nIMdWg[luoA/R7G@k;[brk'h?$MLlS3GUj:mY5P?N,2"F;c&2\mbC$)N6GK2#g3b]:K5^b=3aF[9b$:7VRibp,[A-=OLD(^(J*jr?o(f3Na)!P9SLj.$p"3n&2W75lrcB!qA/aB8ZVV7lgZ.iYNTqP$_H\R:(0(aX85+^tAoC'aeSM@d8i;-0$-);/)R8gMGD(:(OjWsT7IC*<:NuTkV?BFYQRA2`*s:,dJgJca5#:/>IHl:qR9\ZAt^Qlq)Q+E=?KE.EsM[$l`X/rpIVrqTJ7jn,7LAp81$PS"rR73Ci`q,p:<"Ha/c(dJf%\(+ePY\.e847F@>#g.#!Ad*Y$%NTPYY;3h]t]`uK3]gao99,pcq>[`CEf$UGqrLnRf#E`l9['e`\h,P4Ro1?p:KWl7kn6d[g5a%6Q0YTl-q>;RR+d_LS#o7SOCaPd)M_!o(cSR,Dh`OF!9%UDU7DkKh.Jaqi.S@XIDhp?9VE[XS-#Eo*.FtI'q>[OKB3hO`Q&;W=IL,lI'J7#;1GfEbkc>mk68\#<#(i>JXuFfpe0%j@>!Vg=dE`i)JnHnN_QRV@0!@PlGN$Ru8G=d!EBUQ(9TcC\TgnACS,\)3c&&L66V)8k6%_ue\"lU1,.ENdd7DS-rP@-6poo$_ZLrl7b@HI(.JPfrA3N\s>M=RmYR6"2"(Sf>+%)J6Z71N<@Q7(:KS^k@@W3!52oT/O#&B)^9ao_iK:!LO.0_[bE)R1/Vkbb;Z,or"Pc*0p.;m:,D"89!jXE*5MOX/NRlnYaH&>=fiheiW-;SV[Smmn]\1(4Ya]$uZVqC&ZDT^F]PPR49A3fj([8CH8MJS72'VIFF;+(GBBT0e9:j?IaG^ff5;_hJAgpRH_m_`<8)NTZ7OGetc.RC2_UN"'B0:]#kKtP[<[cm#VY6u3T~>endstream +Gau0HD0+FN(B3`/Z!VhSb%=`PWm#SQ&56me(gOjn16X?obI/<#Y(5TE^]'giKI$1B^houi(@/X#F.PO-G6p\@rh[I2(Ft0qc-VsS'N#7_*Y@G#UY-4OB,CSQ?t(j!fdM+QDA*ERNu%qI^[OL=V@3jX(_X9mQ4ag5)Da"V7)"9pI_#4Uj:I!0k)=?-RXUSP/=Fr.],Y%,g2QrD[2lPZC=Z(+*:;r@@BUq@u2iJM.F9`g<;M-Q(YJ-=,-5mZ2fdZbOoS(ZV3ONtloZ.>jad.jF>=0$]:K+KLEO/r>9ZVQ^PPII*$7mfqh2phDLRU!JBg2!fE>dBkjrO(MuT*(6"iTDcm=T/DBXgS,<,:G@[kFP&Phk#7k)NCf*5%$cK_Ecj[aaNWD><7pqT9/Nc>0P0",abE&.3\0,d3,QS@V8^o\9d":(K0W`RAnX0lF_??sBSueA0"X'uX),:$DH^Er$1rbn2ij0]L7lT3Km,fd_%r4M;M&?^>1"fW-B1STGf(X6"Q62BN>3TTr0,d=Le'uN(Uh2NEK^/MD.+pp74]l*g$;jI,\*K:g,;P+=j4h&:9!!//1qR1inoV&Ns+RX>?hk;A83#j.[:cS_)iW8D5WPP"N_=Sc8Aug'6@n80fu@f@SRaWc2`a1k,#W0dIlm(.7acc6j9grNj;&&"mnPWM)(1H*K*nW"JSkI'G/0$5[OkITMf`>#qR2&_#bQ,1Pu5(q=%G#%nV>'f!I]*C.p3E)Mr,q#FWV3Z-:FV8RMXF$V^fk3:RfEPBZ)*j:$#oXpjnL13P#R0HhM^p6=>LuWid?;]CLlM0iuJJHca7Mc,WL",eC*B&j/eZc>]m.I)G21n;.p!M;1C*1b4Q:Y^#c3;)m=<0+-%.T$QM$c`kKGS=A;UPbI!?/Erj5o2>p9,Bf=(s4>0EP\:D'I+.k@el9emXkA^bs.N35-ZNKQ[V_*kW6p_/WY'.HId6X>[Z-L=(^/(8Xb$u00)KlsNW&/BCQk:>knhl#;qSRb^R@THi8Y*XgGBDB](6R\kU"qF4KWMSfq_:k$V6F-l$@DP!hN:!+BI@Cs9.5UuLNLL)'Gpj0V""c>sN.V0/UBmgVV<*+m*O(nc%F'!sNlq>EK.G,%4l-Z#'KR7pHtJqm#jr.q.^&-p&Kc;VRR*SQH6WU%<4-r#VjeK9e\1^C?FWPkl^$4V[fTpltga.b)$!gI,icr5O7[iAVfn:VZr>%':dKd)nQ?1@.%GN_/\#2hj3L"N+?P/T^[!&mhS[E=g9pe^H1!Ee"5k5:VJgd#Zp!:LMd#4R*.#lXu`c)14)pgjSLW/R_ahp^P2TV`9'U-h[,HlFJJ[8E=,pH\3u_3[KF!r^HUiS-V6)u)mI9;=EaMSVpl[3[]s9,T/75P*gpk-Dl*H7?&/?r?3+Xi/pL1WCX=JtkN$@_dUJ`k,)d4IYsJj1FP[FF@rmR6]5Xp(pKNjeorY.er(KOIH[Q]9gnnN3HQXd9s/H9,?Ag.,Oh(fsC*cpo+IQ&A[Y>"=K["\GkJ27Mo`*!V?O+eH&I]dRrOI"S:G&(\!jP!p8.VYQP%($LZ>Q&sJbi0AB$]=$EREO0mT.X>]6<&nKTr?.Yh&=j;f6s$HL+XQGaWVLd-1XKLU8>,rN"j5Na5F"ip2!i57i7BOtcW3PEON)k+(ACO^e[6-@Q)CRSTDK?So"bj?iEE6^ph6hboWs,lG!UlZ$C<,>eNM#&YHYkQWZB0RseNQX9e_hD%!?g@3=>>bd``$nk0QP!p`l^Bk+8%A)Y82&Q$,*Ke''(36`(,:sjCi&ls5H1FaYJf-:B82TpDo4joX`.:nFh^6m$1bZkINUo).dkr2]:bY,q(h](Icld!j!GD"`W2!MdD:\phmo7Q"4mOT+,(9.NJ$&g4-b$L_@+c8W-Ff6VT`WTkZ]V4kkhK[Gij^MHS8WE7C@ZB^7p_d,g8[?OQ#:,I,@A4o&.;F-VS!sd\FWmtN\aA./H[N*U#GS?5kTJWrrS4)OPIUe3%=lJ[1`+qjZZi@GB_HK!DIgJI%EqlWVsQ(\5L<>>I^\TYB"i#Ap(mW"7,q9Qg0:-1%25NMk2qW1L(o7j1[&Fu3I!dP:Sq82A8$#]e>6mi8;h+0rc[[TgWl/Ih"usmRp<0kbZ:?cc77=5#I]QQ_pW^Q(V,'Ndk62nDAKk15AdjsEr#T[[p>aVGFM[b_E1ZWh=PFKDim9Y*hD?haY@kjT@)A"c'N,8'q@QS*:LcG6fi^*EUMZ=l3&L*gmXWFEO#t-oTXE*\Fpu)GG'Ir1ChLT*B51?S-,NDR_('P>]9Uh>](6PmJ4FlQ+;?,?Tt.Y@dC0[1E0\\:IhsYVqm)`WjkG&,\)tUs7l=(:Du746GDN,?]j?1LI>e"\p_%D>"`D.P.T\4/:gQ^CQfH8ir`]LVD!7&\n/GQ42qnd4E*(AtjX-<\bnX:n_/4BOq%WZ$h3gJ08-3^Z4+lge'V=/UDC:&c\@l-cS-+R:RQ&9fY0OZ;WpWfAdTIB?AEn:XI9cD^#^C>X&)OH>epJ]qH^d!1,U'EQabb)WS)NdhoQDqfWPYq<5GZG4Z5;8t"Atde-u$A1ZHHNo.6[3mFI0j&Yqi=Z,(9ZTjm%BU=@Bkq;V"rFsV!No-T\FGG(XmUS#pDBnVrTAjMJ2\)69=,IIFfj0,(l^a*N\EhFP1&!fN8"6FLpC5h?3U#A.kPVhUc=4Il5Iq5)pqNreHSjWqn'(anjbrqSI_9*Tq6!l"@GfZumiJ6tlTOZ@.%_8_'EE9^S8TFPi+96;7]6&YR%-2O*T],gq#HjUM>fU'9eGg@UjlQ*[d8u'$;]Q;5kI'Yl&(0@$D1dP(PGntWiCH[t8)',3P1HmogG:X3q1q"kJGB"4D3itS-O:Ehnq,FL:m0prOps%&bM*E]D84Sd1h`LI.D;jn]f=ZAt(/=gb4]JU$o_-h80ib""g>/A"XhJ*0:d'GFfsoJ%^2V1/VhXa,)P$*0]H'/lfO@k:jTp-Mlc)j)9,4HO%b(-o/9b;?)t6=QZ!eSEV;e7BQ&peu$]1N)RgK:`()s5p:B%\W.RlC:6"W`LF<7phRfgmFoAQ$MZ^Ld4h;Iu2Z9*8A,F\?);\sA_5g>A?am:>&"1">O'KXDNuqXXB)>H+CE-.Jub!&OG*JroTMc@%Uop5*OlCnUL8lR_MPB"iSGM?0`K/J'5([7P>DmsUo:WX6golP7oI$aU<4j?B?8l[:p=L8ep>Y5ZT6++a5pJ:-PS9"29e3s/)>>gfQij&9e;QUX2+GI1f6LDFMGc\Fi>p)SFQD+_^W7FjWJJ?d@MC=Q1>"dfX;Kut+X?[,./]B3$@^VM"J6gkI](HcigSJ7S!@>`p7a^B5`f6B'`7$H@U6_YP)He7*DFDuHQK>ljcQ9"C:pIL$5o=~>endstream endobj 42 0 obj << @@ -595,10 +585,10 @@ Gau0ICNnOCdJiQ@J^\\oh)90hi_&/$oRgU%Yto1-Q/t`KB>;eKA#lYg9?E\"hnK9MD^%K'8Tl<`&M_(R endobj 43 0 obj << -/Filter [ /ASCII85Decode /FlateDecode ] /Length 4450 +/Filter [ /ASCII85Decode /FlateDecode ] /Length 4614 >> stream -Gau0HflGh:(4Fe9gm:\m'1T0=\10@);m=1Q[03:qEKslR$Bc6G;+PA"R]i@M1G4*dDP6>_":#\CX1P!drq"TOCTeLcm_CZ7m!I1B'InhPa1-o2:Y(F8DL#q?O%"jE^pJmS^,$bgb=kG(4G>l4N(0_u_X^M1kJ\E0AP*(=\IMEA7c;pmX:QD.,X)FJ5e&mCf8WE@kcJ']9[rGOCRGPf;D/,4#:"GU7Of'eZ=ea&gDH4>8jX61#,ZpHZl.?T]s;(\O9]dB+``O>4qRp"FipC7)SPQJB&US&-j48iBHKQe2P+o^A$^n0X*U^1eB"8,Gl[H1f@+IftDi??ao6^)Fl'i3[ja4\PYrD1`k(USNs3ra91,igcM#g/,a^hU&je.)+g2l>&S$EFlWTNLR4O:mn0b1L'?Q]L^9Rki=kSZOT-S2=TG1-E6/po91Z3c3I]]sg8(FlS[-SG)l`>`5_l7)B;=kC'mQkrL3;ObSUobp^.CdBq2N>*tT#*p`RJ`;*-&XE#bQ2KfD9Ca/T2j-5]]3,q%0cK@V+/&8PEa&Whh)7?8m)7upd=PF+a1/6_9AY+IK(6au7FDQjIN%@=&[c?fT+UscqN+3GNLu;Yr0kNL-Om/E`_bl-7-t5d84,J]dlU7W=0JM6j6V)ugK(S'5Ah0rNBWe.kjg]p0biLQ,es3h^D@A:1P^qgIp'j;#]>_@%,->?d]:Z-#Eb@=Pd@\W7ZeKXaUjtWEbHlQI^SG6Q`esgcKs;7(E%oBfoW#iML=n.-dkOb!1uWeY-bB0$oe.g4Nh+T60q,u9X;&pdS2X,1(2(3J7p6Sob3WAt*TAnq-G^*,'"QHCR=ldq?(;T9SN3Y49S."ULT2HV9Hn:G`9;p#<#ssVEMd\,Z#8C]'2A^*\6@:JP$?'D=Ls/`(*PT\@HP?eX5H\9@V=2E:nY?Ob:_gLHN\LTG7BRT8%=FhU>)JRZUVkY(b1(mDe!,e,-aCR?L5j$7:-[BA%0m"5JWTg>G)pf(]';=Cmj\6'H@T%32//JouMGCb\h.L0s:p275@`L*:qStGTNC;9a7TVAh15mnhO%VHZeJA<^u2?6<&PO"=kE#l)'PmASBm>1o*/"5kM_'$]BW^B8hMm^8!6:;c'd.SbBO>\_S!i.fN&[ItG%6_l:m5JE\5@9*&qP-6U](O4-1[38118:%"nMT8172,=5=!%usnl"L.N1,AW%8fG=kJ.c!u/2(#3[>WN8\##\cZF&u;7Pj)1h=i;Vg-.>$u.G%B)5UmP"lk/^aal4!DjDRkGuGpk?8#Co;%q,)]eA6XU<6E3m;Uhj9jE8+5TTL&A"#(I,9A4BW@ae'1Pq'08gIguH_k)XW-(gJr$(jaYrc^aFZrF-PfO";+Q15t/FDMO<`ku0,Vs(OqTII&%G+7?R+T44UjY]E]+Bahl!,6NE<`=*,l5LZI;%USX0onbbBY@RaF@lshE&&d_Psoa-*X!*eRr,AltK#g"8KE@$2./%#fbcnp5MDn&Es2j?WD4[O22p0P3%cHLOZEdQ?K^)H_Af=/XnE.4RSE)Y]L-f(]XqH%>"qB(O)?1b_+Rl+GYk'dTfR):&W8gLO[EflpLrZb"W?IHFYp?(uYPBoUuU[DOZm8H3JAF=Mb/hQ-772_TN#0rh1J$IHS[]UJRA;OUfL]N;9f[!T76A2rh.D>'-lW4g142j));i%mS`*'.0T'9CdP+IiGV'k[4Wp,rOkdE`PLUEs+mWPYq=g5T^f2L)*oMhQZSd!(n?V`4>/a;NjML+E,Ud@54D7?;gZWT^[oA=g.l05XQ-_V:J9[=98oH^Fg4XmA/BDu\M!^3O3R\&0[(p?j#oA:N(.*C7Y8;oQ/'lDB](iQH"iAaY6d3^H%M7-S#_^8Vcd3_#5agQL.__,1kd3_SE3GgW"(;HcKUhGsp`)KrHM.%L/W+_s7jL3X*oPU=jU5f#4gK%\@fSM+.g8$HC]<0)kYn^>>1u4Sl@8FT&hH`'Eb.Z8dLhF]i"Ep[f?"l%6EQ*u!N@D*V*hNA4E#M[5c;NkqZ;5!(XtN"`8+>\Y^NT^mpVla;X'X(cbg[DHH`Bj!P[Y_*3.,Z#dmjDRmp9;X2Dsl5SdJu)!$'T'!?"CG:VHc.knqb*[QN757H,u@4IrAiNn`ec.AdtHUm%sEnf2.>Wk@O4%tX!pIjcU9q/g>OVE>26/hIIip(2HfOA0p&WM-WYB%A:G:e["DkOikkQA>bugaZBBn93N=i9N`*h:Dgq0okFG!ht)V;mH%O+h,WQo3N,h)GamA,3\h^Rh]&;QdE7=LYD];p<_VbUn&R5.+%FN/J41t6)r;I8PSh=(&!BW6'=%A'!9Y'q+n0`I*7B?1E@T*W.-l>0-(L3IQQe,SA/t7:E=GV+]id[0f-P3VF`&;s\erF^YQ/(++mae9"it0rS+f"?6,Z/dW@7ikR`KX2Q+2-a"YAncqQ+f$2%;5O45l0'Eajp:R?&\hC_!t(=0((7'@D)QNrW5IBrnS'qqU:PG1qsp^[TAou!7(7o!c^e:/)[Sn[^TW^cGS0>B#/PuK(m574A;'A8@)^CM<9Qsh\NC[,@+>Y">A_S1(0jrBb7Y_Eji8e^2e-fi>e,5`B8fMo-AXNbb%t8RK`XMFN4uPSsEg[!TO.NlXDl0`UY'-K"">DFMA7@K'A'1g?HXB"g3cT65VAn2b`!qXH[lLV@s`-`S3kC%sWe.'YNJs'(d3FnKaWc_g`c%'e/]V]G%mGYaQl3NN"e`.6cVdV72iJ"VFEL[.5lKr%#AHjlq1N)$eX'cX*^%J\(^,A=*Hj0$3cQIP,J4"3cr3g>4qJQ_qd]L@T[I1B0%bG?XIsnj`#P>\8XnP)JV9/D!)R%q1!B%S#V&FK^FKH%,.R-_cO*(paj7#k$X[dp_q!\Hq+G7)jqb,O,.NN+:2;]/fuJ4`t(5KiG#!0,9a^TOk!^Qi_8c)JFENN%"^KuT7Z;a`)1c5>Fueg:R9s!R_F9%47"q1h\dbbo^aP5I5.A._dbC4RiJ,+8KOYuQLOY.:1qHiJk,2Vh#ahkl2u$iphtA[mgrp<>It:[hBqi(1ocq\#>(CWkV$qDmS<2Xic0os.qq,0/c@^3)Lpn93(YmmIRs%HEZL$]_Y0Eu&,(N3R?[f;e]O)'hKACZ>-Qo+#s%A5qe9;CG%O=b\7hu!]`.N2IrgIWD4E]B"F>Dp=cZAl0fXLJ`+2!.M8T=()Q]O-RX#qO.9tkK`,rVN0OIoDcE!N@'`D796.`l)Go5CJ8U,WR_sdG;0(+@'A@20$Z>g"#Q+cETch#820lbeZVa$AI-LUKbrZ-UP9NQc4%7OVoMre[cQ^sn"m>ss6c;sEq2\WZt0Nis1I^k9$_.4V+"b`?U95DZa(!-#-^l\[KBfNe]=a9so[%Y,6MnBr$2k721YmUcgmW(8Fl%s"R;_ggpC,I:dnKg&(Lq@Fck$MDTbh`3n+iMA6qTU+C'huJ&Q"9@4MVFu`LD@udW,#dWQ`=OD'1:u1GeO1d^-/E93@O-;Hri)M)\jc]-`%Y+6ZIfJ^"YA8W,$NA9fek*i#Z$5'<*qjM*HT5ou?=3r6`mKN5+.s3DkV&_\eV/KH*H-Ilrr]l%#.s~>endstream +Gau0H>BALh(4Q"]ka0u5"f5FOO=TK)N]Q%kr0-*K&@jMV[3l"cq9M6nVX^fW(CP\D&'8^MbmqO>7;01fOP2,%l'0B9To^@c-*o+AR&g@h^`rXYItVCg9TL'3DOLtFp,PF,Q7C!+@EK+ROJ3*mOTU2`)TK8$hF_IE._Jfl1nGO6/,Wm%:%l%,&P%6[L`8.tjm5&qQ2nW's\>CQ*93>F'Mn$>"/n.XK@R3$Y))m_s=kiVTkpRT7Rp[&i'DJr::62=r;f0PlJWnUr@Y5g'^i"#!/c1nG3Ro?hY86iTL9rTjGOhFWQD-Kp6f&KpN%UHRIBoXI!Sc3VIF8VN!H-O'a*BUp%T=rRhXTjU"f\k-TR&n;*B$,\SS:IZ+4Q8BFi3;"_3)J6d;(b$?Ub?LJ_@j"6C(.s+-:uDg6-#PrQ3(oKn58>[i!>V_@SE6Y%jaT-,iJtP3(##O3(+Yj[m2Ao'0&0kaYtKT!I7=X,`"43$.QghW_c!3;-AFmc&mNQLDQ&6_uQ^`MFe^k%VPAcZNR]SQ4uQ(Q6:r%JalaH7!aOZmk.?W':68eX^gsW)g@9BbtO7Oet']P65qc*6EF\i8rFjpIFj4'0PW"B2,n1"MJA2mKU<6-5['Gb3faNPEnXI?*JiC+-P8kAHACI"8"$hLB_EcCe@?D453^_AR=jR*AQ@a`0d+JP;aAAc5Y,nR1FdRKjh>P]%79^!;f%s'0#H?-kA4j&(QP^>6R9)qaq6")oc\T1`**J"sZ+-j-K0I^&]6J[0;4WFt_.cMG@^eIpSIr[7p(4@K:d"UZj?SlNLs1:6^jbP*QM@GBg44u2/3NTouE*>ttO?KMNq-G`q3bHb9Uh6$JE6pU2pm\LH,\-_sC#A^(:I=`(8Ln@=;]NY?eZQEVLb]Ma#X_E[L[g`!i(DQk8g4DonX0uK=g@V/FIi;]!enM&%]bYYPn6n9T`]iMXKqJ9.0ETsWh?>.PYkH8kM(&k^Fbtn$^(`&i'`fhl>"\g:*H;[#7eRJ!a.>C\S,T=,Mss"+=8XVJ[jS;Ln@'aBXG1'W3J#(.a?E?=MdtlV)+>u3<6??Q4hXhH>Pm:V#[?6^KX-*HhmHtU],Fb,ZcdB9$'\`*CrgH:k8lu<#["2Kk$^Y\oG`8bS%q$ittF";!+C3Yq6O!0Qp6s1h68ih=IXs\RH]JE5i5r"iXanA&n#T#md"8;oL&**+<%WWNOAo#b/dq3FP?Q>K[Zm[LH[N_T!!W&N1]rSmm6Y#./[:#f=H:9\-#l_3;M&%qM^E0%8Wi7RehhbTj+@/>7@tWM16N@\14N&27$[%s9A%[Qs1GeNLCi<8EUXc`PusdAFq"<5l[3[&Tp:s6b?BG.f,!CIUo6Q*Ad`j@I!C$`W!NX5[n!oAk;Lqk$d.'CrO?@L'We"AA8B*p]D$3N(hrn\KV7&fX5W2:kp5A,#LQ`b+=sP)8gMIUVWbfQKS2G*=BmS&IKQA%<=lI\2Y*/J,NJG#,A"A+sIOj@S3W6k&Xaggc$*1Rc:haSf=P`cdV3+co@2V^L[`he0m:7oAbQaj,mHbLt][<'!9Z556#d1^QXTYYf;4%*HG(tXX"^*7.3KG)GM&(X1-Y`m>LHY'W0ZiFH^ebKpgB0&$edcHs>#f@0%R*78K_`51:*oh4S`3EDD_7%-sr:R%6]T7[QIVjQ?`$C\n!!KdkL2r'UlJd$$:AU*diJ?r>UtLOWs1LY:80EiYV]!BRhW"c3c@o`6[K`Io$]#2(p%S+2(;e/<3Xa=W=*RR2))bf`je3=LED=`6=%L2m*3&YEl4ok1XLYPGI">(JLO4/@pJtMq/R-$JU.LLCDfTQVu8TV`o:W1#GeL'#!#auti[(=k%R#!!!k/hjl]S5CS9-nS)PWk1u/<_h>Dj\*(+lH9sZDN`n<<*hHd]@j6`m;mS@b%LR`Z69S[f1OE_oR-:B1pgn@m7!sjr)Aqj10KLre+q7#l1r$)Q/b$&n!ZbDG1ZTfYBb[kb:p$'WA'SP?FMN.]4mH/S`r$!q_($\\Q\sj]_WT>[.K9n3`q1'XID@i[Q`D+hP5Fb4bZk*[V)o!Y+6<]4bGKQVo*Am,dW(3fC&V.Fa\oT`KZm^'RmCqf`Y;/@D)+O%l^.,WTFU#`uC,^9a(VG)rrR%R^es\E`d.BAD,F9+_tTddTJ^UBAkL&St:pSD::eJ'JjW"7[;l9K*>=*d[1WAb1"'F%m-],6q2T^Rb\AWU])+TD?kgQD"\0P2df+Zi>#Gt5KQ6+d6W"o4uo7,?OT.B8AI8bd[r^r`Fe<%!+EEeH!TeEdF2E@I1EdOg\/+tei23+!Ib1&IQ2oBL?P2ag,J_=#%k%s4#b(&8Fl1fdIeY!>QXkW*aZ\JZs6^t*8brUc\Dn2&!6,A=--),+!V.:Y?_$El$YmGrK6$tg0<,?`iWdO,E0[+N\G5;p'i0E][:p2XlsPQKM]?RV/!bU885H-*5?)C[#mq&`m!r&WmZ%bFZ>d6k^\:kj$#;c_cb@d9u!>=oRF@1^ActrTq%1D[f*Q'bApQ(mDK@9_DTn'BBsm3DMQfgZb&TnRof6dh!TPa")m3Q(G;*Oiqc;B&-I@8]`&=efss:mEOX-!latmQ6ea,(l>KEt.eiYtHCtDpGV4"o;>d>gpUgUY$oINOJ)R0ue(/Y+T\u#@2d6f0[eHF,H<^5ApKQh*=a`8742U8fk.9W&<0]^52bDfW=N]+"\SAnh6[6/%G$/l$^$G330(&p7qac]=r9pK([MRH9eq;o@@nD[!6Ul.i7L0*V;R3FMHVB$\.jK!StStU\.n[JGVS"!nB6dl5`#Klau75]%+hV3,a`Sg"bhJ=Sh5Y4%c]/O:1^bNFhUg]@V8f6codB"p8d:mg+p,`c3>EF$]aN8Cd\#]iI7_A*>9J)mbN2^,P`!]KZ0_!fWN*(NWO4d^GqXDkd3:1aaP6;.PplQ*'5KJ56(EJ;SH1;-`/toQ2@&r*HotHd.!Y1EYA$hMuKV+he=#';EV*5?6BC8g4LTn3g$nN_M5%?WPJ?Br1(GK:gpN<(U&m]06AbY1SAL<<9R*Tl49_cZS\"0g*0rk]ctGWdACE(Dcq/_P%ld(*5&)cee5d:jmPO8"^!'QM5ZGs,NW:>%`HdN=#%H2r!.883b/+Rjc\0iq3epHGp0X-r%//QgO5=Xg@Zt+I01jhJ$&bD&Ds!JI2LBWk5i4C\Ri(BN%>=.Lk"6ej7jZ%P+7U94)73?H?_&=5e8I/oeUDbUt\b\96apREg^"I^h$C3C=knZ9ZqCI@jG92fmu`phEPK$8+W\>u?DX7#AteJUfATZGD,U'*o,7c>XA]JBmF6"-<]BF,%5N+/*GR%7)H\4\l(Q]uHUFQRI3;f8F/ij%&_WWYb57ZeuFZ87@d5nTYbGR4`GN5A1`=D&=OJjKhnbuHDlQ(%T][CUERE\f]*!fD#7_F^ZA5Vpsqss3*MdFT~>endstream endobj 44 0 obj << @@ -609,10 +599,10 @@ GauHQCNJ7OZ2Lh40pSaaS+m3-]J5]*%l?^J/5%6U;7:K+G%??HZt\8)GBc4 endobj 45 0 obj << -/Filter [ /ASCII85Decode /FlateDecode ] /Length 4524 +/Filter [ /ASCII85Decode /FlateDecode ] /Length 4625 >> stream -GauHP>BAdn(4Q"]ka1X2/nia9F\c"PMnt?H)1r$9ZElXi+Cj(O"3:LJY0!m)dfN*3/Yj0!aX!"t%c=hhGA^:dN*Q.1UOQ&U#^r59pRa.V"AKpKAe%1l53bngr]G7,69.mk]lKuTJl[qF/p]Zb!eA5=iJ^[Q'mGJS"X;Bg9JD#u!IFP*lo2_raMCjUQ!F%qW94HOaV9:dKOZ<-'`oeDGICo*EEu@d8.splbQD&b?krJTIYf;]W'dptmma(%NnWm:O(e(hRf&uKeG,%/p+_XA?R>;KY&[DWFnIEY;CG'J%bG/P7n-B;_scm>uBcgfMaFSt@^%"kQ?N(&VeXNf/F@e3ijgOAL$jQf#j-c1XH\+GH=4n>uKjHb)[/pe8]+*QA%hJb/7PTU.G+)p.6n@hNpn18POnq@&]6*K*'`NB;Bd;N*%D4[_K-`T@I#?JF$5fdU'*KcFWRVO\9ed>Pe,_&Xm958`tOBEPLpK$\H9t[hss+sHC$R1k/+W^\Qr1?K?fR?iP5bOG`J[]9q9!CrbP5XSMu'N:;+KQW>Pa^184ZoL<592W7(69Tf5C)%G,B(44ZFaO>i?F.6)HX6STdX461gK4:"lYM7!!^KrcF'eb^f3'[67jP$0P+mEr=q4.o'T4@57Y+@o'2rP=PRCDs#YN=O?dR1dJi/R$eBk[FsgK+$Vf.9qfLcrWNr;X38UV2I'A6p)[N`l4=W%Zet0>qB2^20:QS%c;FBi#Y?I8U4V!`I^*JEQF/F8dAjm*+3d$HXYlBTqFI4>g'qiMAFg)@uD""?F9rl,fZ*[L$1.,\[3fB1$g3AIf0s%``PJ9Ause*I7k)\i^1W6BQ)g;$tWO0i2%K,/QYnt3/7oZ&2`)T>#W*$B8^P>gm6NE-U9egWo:.nrGEFB>I6&or96gmN*oZ\U\@W\2np#\eG!/B")a@J#ZN&7=u"h`BVM*mNK?lP?7)F/-f_;uV4U("Cuc=-;-S>4-K_piGYh1pnrfeDMuA/MrIWYWTKq,K&`l<_e&I^sr$\&6]7n>dP9N#)n(G<>c]YotnY;TsQAfpaj07^[p7l2D5M=FLC!,A+H(_2K#R)OZAl7qWl8._D86"Nq'*\"C.bVVP"$KHkAPU]ekK^E(-=IKP1eJNDH&8mmm5Cg'(XOsaB"H"EQ07$X^:GMj0q@HcQh;<+Y/m@Z6TN'"`3mJ$dp][762#ib@VM"<:5_*ta1/"jn?h=gY^%2LA;Dm=cf69U4SWrTJ0$mATHlHBnA\h-<1<_Ls.U1^j02^DtVc"DpHTRMa/Os*3,rq75P$=r&2u"Fp))Bp&<*%4@A\75M:hAq'-W6ADe5Bki=gCG,FXiY2YuEa@h:,FBb>YB6YbfKCcSJ3n-JljDL0@3;9e!>.8Pl-;4]V6da;3losQl6'TFFcb\MTK\I@Dlb8:h+aSCHmlAtG:Y+J;VXeM.srA9h)$4dIm"ApSlabNUqm\Xl@H&*Yaf0@k=8KDo11Je%2%GbAZUFVA.FL>C?B(02QC$:gFH&,5NaWA@*a>n!aIDqB70+=`7pDq60e@-:CY9N@E**\nmroX;aBXWsr8.bK&NXHO=fd^-.*f[IE?mr=+]O59+T/-JKCr>R1#0QUM!$bab6Y'].Vu9Wg-Ek_I@%"pUHo2J7P"JH<:)J3f"hfg6?rks$7+)[-QBoN$dr=MOLk&'1A\B&QYV`]%b`;5T`&f90!r&"=;RUr8P?ES%FTDYr8DR5't(Sum0ShkKXXVpcZI5G2!^(.F9Y,NI]0cY,\IKib(9oATL6pB-"PXHP"0i>4<[f:+W?bSJMXoZLE'7n-A,9K-tdE4:m(Op;h4jpR0=Q%=1A[SWlNe='eNY[55N;&fLall<-t^3s2E]\Z])jCo>3+-;OAn:SL'r]jD3\I:F\5p+nbh8%2EWu'.6O+M;YNh!OqU)>S)>;SEIFWo4nVr4/*>9]e1hO6ab')bmE37)r<,B,0CH*';Pk^BmV:_9J\r.R[4K1g"sXFb53E+kY/T*6;N`J$23JidVk!2o4Jkpm\SeGh'ssI/;pMk5f\O0JG'iUnUo"KYN.H,!F=P\:f)-NU?nNo8??K:LF=pFW/biU-tu:i]7[gc8j7s8AkH3\G&I[:c0kOi/ut,'YnOnO\;TZlEm8Ai;A*e@+]pf`n8p4.=;<<-"G#,FPVF90q&@_X)%385#2a**:q$55.1S&RK+m(_BMDQY/@NK^P-p#<#'\lFrOJS%(X;fFs7b6f7>;9@4RI6.+0+ksb9qOP)F-7do=70^RO[M;a/`1LJZ^HO4jc)k/C;R\B"fQj;^f)]He24Zli-)54,32%n*A!J/1gR>Z1=NZ@@-/`V+s=PTV8P>Q=fijq7k-;SVeSmmn]\1UR^a\uH2VqC&ZY00a[neB^;.5lI/lgbaZ4N2GgMG9]%\idqY:N9[37\%uc*4,s6XBD=>!YecV`@F4DC86Rd'N#g'(SL9O.'*E&eOH59.+CM]*erI`YEb'e)6:@iHZR]2!2FX\.;G4-.atTP.X6L,;"PfgH@q.5LSOi/)VnX`p65t$4.#?n\9E;UJL9IO$M#r,:/"d'S&Y]a?PQV@Mg1jU21a'P%gWG5?i~>endstream +GauHP>B:]C(4Q"]d*(k&%7P$f;`1sOCrW?(_#lYQg!)^fESG)\M[+3t1;A:!\spDmXTj.4<8%rH3u<>.kT!0]+p)+.r-,S;kee+Jqh66ZU$2ZR*-3qWT\f>-cSJ6W-9Qq/Vr3;SB_-IT=!,0NZi/Agf"SS(AaO?MraX,XDki%<'?NGp+9UYjC4L5;e@EFa/&NKIe2:=<)JDrDoKdocPdL'^7_h9PEAI2C_5Ji=8[#8A=g@a9Hr/Yj,48^-os,3a==?A)u?GBD6GmTpZ7=)"rFlB4s^8:L:m*c)./gn(XnW$'`&dR-W'bWn'iB#^WHb^`CrHpW@F8f=]9d9rfhSju101-79!F2gf6VmM5mO!.OkEm;<:WtEi\=9_]%Pbf8^0p89WQTn.sNG^<1?Q@OYE<"@(PWG01u5Q?\Je5"<4($I0LBCRb($,6ru<;KdJ)c',>g!170FETkQh",`YQ53Z`;"%!\k.2#tX8R,Sg-6`&_^'3IMMJfY-gZf3,6lf!2jl^$,6_+Mh1-2/anf^N-Vktg#WVHDh)*Oi'lML!l[5fWBnoP/,__%a'[dk2@H7b%!TY-`mVFJ[iRZ\tDsV0bC7O,YE&"rl("](1;'RoWEpMIKNIV-89]L9`-E9ERUScVu8SCZQ;&CiX@NDUR$-AaomD4_f!Ul*_@Srec/oWDZhhh'Ho*22?E7fKfWV$nGEf&-I1H2$[Vj1udk:84]>8#1=#-ImY*W-hX-Vl/6:[WrU8FOPmQ\U&?ZFpgkpm.N1sTb0&eNAe\iWg8\4gW"ZBQTU2NUZ^kY%[n%_1dd4S!(f2&/g6,,KfZr*,@tL'5UT;2F5:Yq8PSp^lH$K^)Gng&eGf"7N$:bu<*&7uJIA74+^88V%cPFp(!$*C4*[8ceb;H2V_[TI8B`TK32%4MIfPn.OG0kepkQ#kMBF"&*:.b#P>'j))K8=d,UWg>$NV?p3NU=^h8*NqP+KqLooeIF&#IVRp!;6EYJQYOjm:@#]V>9bDb#,']CPjmFWC>:n"DgDg<9o4+Of6oU^\<9(0gSB4_I6a[+SLPa:$2.RZFr#Jn;.0KLkaNbnPK7QUlqC+*g6SVM\f7SBBY($]WQm/l-rd0Tt4N)%CH-YX\2L)-)H^h@s;7`i(@#!%M=Sq/1"H0_IO!_51"B2p^J%1(O"HTHX3\RCoD6u\*Bp$(Z]u;aOD2DkO"S)aZW:[iok;^au,rNf11DQeEJpe5u)Fd$!u)fZnE!Z?o5%?E;j-=c2H4E$#[&pJRLkuDgA'Ij:*=d/8k]*D'A$Y[5ke`(^nk8Y7;ad[B*ePJY;prjJp_W%'?NoYe"7Go,"4K,cCaksM-F94An=%!s7h:>nHYa0Gl4I!:ri4sa6+a,?bGgrQ@eo5b^2caF*rYUsj],4dn2eg"8&5=11q5\1DFfuMeKK#t]'01Bmu8\`6Y*!;o$k'VEbUIK;ub*g^=m_t(B3S0oYj_NZ^tBMq7\7R>8c'mRH/&qh=.R2bSXO[XWf^k\nMrONVen)m4hjq9/=3,K`$Y0Ic!l'Cr]6AAV`fH9C&7MH!e65b;jY/kqT>(p8uc?WuHlr9**LUE\[2^(op@XC(d]#NX3SoC^8O`ZNd/UJ**a?UmRC?E&Us=_l`Y*92WnHopQ"cA\`]_q?O=p`,aXStGa(PP8as#)g?8]?iP4:6it`(;^TZQAa/0Aa_d6>\oTNqqFn[[bgG\J1t=o^FZgi5]RZg3$$dra5bLNX^;21)5n0OqpR'OD@#=FmJ(;KT7GUQoesl'23tm7pci,n1nDRK[*dn+#D##]l&5p`m^ZMTk81`Xq;I5(sg<69\c*WhZ=P@*$/`OL@KL.]uoW3m6%8/.VgLo75A$h3646Hp%C$8.;8re8G>O0GehP]4LMP/'$GJq,?V=l6E#+MgaBG+?&8Wq\9BWT$IGCuo3d@Q>-A"3l>aPo"e.+7[m5upXT/:U2H\3*[!k8aoCZSk31nm(@/d\,_gK;I\+Rr,Gl9c%0u$ojSi=Kp%O_>)JaS.r0\`;s%c%:!CRBYJC:i65/;)JjMpZVK6q0D8mT4lOXFfgT?:J5qH&@YaNq,Q_lUM#R:R`JOO*n(k)!mkd9^`RLshdD.3&.Ym77G1'@:3g_(5Oo[Y#IQLKCeUS1E#!eFRlc!1(:\drDka&^31Oq7qfk`X>L;fp!JLoWA.&tigT=T.*=)c/thW/^PiZqT,mVDX'Ua;6Ja_d5h3mn_:1;C.c?"%&-"reO+9tNBtKmoJonABg"[P.G+(WY<\r[]t^mhCT-CPM-muX@sbo%K;:>RfK8Rd=Sf)q;R+XIq^=RRJmaXWdSQ]FoU5Q/pPHOubJ*-!^kJ%b7,>XQl)mWl_Xm[q(*cR+nZ4k)+p=i!nKOG4g2U)&=((@;7>rUNh^t$g\0-rVTOU7QQ,u#).n1L?eJuNK:;)mgA>-;CT-'5LhO#B3d"L/ZIlNm_S,R*U,'K88HK:d".Jc4YA8WS;A'%`H7MJaO6JA/1;as?ugei.sMJeEJ.Ss)['Nou2>GHu]'[[hQ=.o'6.'*K([79[9:qY@-(#5Xf\P"H_93ZHrU8]hLP[quU79?/GegRO"7C>UI'e$@FMPrcPX\j88[m!j7Af":~>endstream endobj 46 0 obj << @@ -623,10 +613,10 @@ Gau0I=``?=&Ur?8QqC@Ra"ZWYVG_]4-/)g2+rQPI4/om.'I5HW6OQfX.).r/\1\> stream -Gau0H>BALh(4Q"]ka0tn)iFLKmAd-;"tMSHN#BDeS(d4]Jn:D\QOK%tli$L'>(@mJ\cPH?JV&RjfU1`[]WHL^0PitBLk7d6$km1QdO\o?'_`ZWD3'HrL[,j;uG9?9ou6QFiI*F`j\rf3PmjGKW0h\;cH0XN3f;"k>RGM*_i8'gW*!qe3;!K.rj=]OH)Ngk%R*Xbk`b=A1qFcg]W((RdJ!Uff_aJD:V=>,0%C(4PTE+BXKkU^e9,4RA-,#eM?&U=0/0>m]6]lOT:B,Y8S.[%Q4#j!1GZ3A;;QG7&OalKPf-04O/X_s^;&o.dGV1ZSbDN,'D+5*e\1?V>@&ba`f3E;\9Ca/60P&@n7$Nk$$MQ]$:uB\Tn1)(bW-"%j5kj&55K<@Whd%'1u,nSs.nR9nC_KHZ?BMoGm$:Kb9On1#XPKB#O(4bUueap?,>epHZ00Z\u\VAKmeS6as&sM7LdI6#;t$c'THRH^42K;*6]<1o!#X%OA4$A3q&kh2IB:1eiMAZ!WmY@\/.3dnI^<=EfR*_iPL[+RM5<<<=FBiWojiS.l\dKG`!4_e@f(Q*`o13)gH@KQJ5l+j^qA\5F\=.)a=58idgS.$B['Pe+.G:q[fd12RROKg?E_;LlmI8RCUQIP]^0,E+^OfB"#'Fb#($"bmC/*N;%n$th:j[KXCj!t]lQ#tBM\BKR94*oPd.$`&j6mf(pnX,.([#1$1QkQ-uq^m,pFa")q2Gp)@'Jl;okLCjQhTlsok+U*E,Weh67;uo:`M49*HKiuD%WRbS/*T&bo!VBT_a(Ph6]MbQP#P?)RV/\4DkeMDdZm\[NdD>Be[pl9=>QB7KF":if:^rUYV-=06h24K7,)Q.SDT1CRG`5tnfB(KWP@F\q+(>L9>9k-3qFG/[#)n[MJ(oH4(4ZM/1';d9YOIl1&<'&315Aok@aO=?n`TXP0_-L0hj;Khc:-^4B??Zqh]p=*g-S>Z'J1*%$Uq0`4fc*V"=0/FJ2gZ*?#;!J1nh%t*[P4:b^t%N2fLkULP(@!0QNmdSrBC'W","fhj]%U_:BOAQ$AlQEf>OH9dQoU*T?M3in#2MQk?67Rc+I$L9rG)P0KR2hnX_ln1.^d.`JSD((aeBG-jE279XNDpQIZ6tA]0MEA%oPT,f$2fRRkY@qA9:6Z*ZUhV4K.Lo9m@f"=aF?0t2(i4==SSBG"N0Imq3^EWZF;"/GFK0qnV?,:K2!@(-@<kN]Eb*tkCM3JU\eKgDE-nRn*VQik[n@CbnEM>\*1"Zp4q8iq-O,EJ(!XhmEWNSCg*Qa3i&1fLi#2(D[.dW6iF]6,o@lRHGUZAP/F=iD=0>IS[<.gpLb9Zh,$:t_jdOs\T6N?>[u:SD0%%H"8:,;Abdi4quE5=fUlF#7:MD(;timqoalEU,&5r$.-pKH]Sn1o>T]*s!:jDkBUSGCM_g8&+c.L#tEP^3YrKZ\d8UAatdD0?9OieJ6cK&#)G&PJ?'(qY)tqU)WIptYK,`o6)d#^'r!J8Du@R!nn6?t]e\"1@Ve*J'YE_?A5pBT(el!HE,Ab5NMPV3J_.I[VD>1;e7@Y5qV;1@h"Q-OA9*MbCTo+6ck)ZMJ!4Gj=2"*lU2kC#FmWHYW5>E:ddMWSZZR+=J1t>ZI9D5($8iW)>mNpUnbD.if%7_;$7(J1rV7G-X&F7`59>g]'/4d<%YFk@mNdQ8Lp"t6pf60Do_8JgBB;HmntX9uI5tVQFdCh>r=3l4o%hSX-nZV@2d]i7^3k^lJd,Jg1aX_cAnara/b6(_m+4Zu[N@m]HM<7hN2]/Z=7mZ`A;"g9PA=qU5UQZ'q=K`YZtu3(IeSRq"P[tpjK8lkV`0I!_n5YV!mBR$TKDR;5?bDmDNNTp8Z;bFoqr/8'lp@*Nl?KQ^S(BiY_qS(D^]oA+SSoF[!;[]5R.\UO-bR8R7D2ZF7?[DU]&`tH53*g"Roh?K[0+V\]Q)WRe>5sP:5(VT?q+,%otJRR*kM031knsIR(4K:c423%c>,O=@+>tKkS1eh-#E.YNt3`UKUa0XM5G=]EnZ3#6&sP4Tq6.nlH>>FoEF#L#t2\>@agkT)I3bH)G>1X'?EY7NXakBo2FjkY?+FrO!''^r!-0X*mf6uK`(N[0JCHB5ul\CYE7/ZH4Hl#+2o[>Y%`W/C#RUgd^u:W*t&fSR.HBWtgZ#6*ONriXX6:4I2:3I?3iVZ6`>f.(b:ZA@Y6a%c%N$joXhm;Fo^gPLMj9!8slM1VpCU9ClQ]J=[n22Ek*f;e>!8fj+kEFRB]gRG4po[hC,-n8&`NX:R?LHs$SlcX?J6b*HL^"*XWY\2NsA?Y1:;BtiEG_LGW?ebS/L8cF=MhCSKO!aV#f'A/VqYWf^hg=uGscGIj[k$]?i'huMg.A-EPi;Q\Rhs)nO[P7EQRU[`b6aamp2MQ%++`%S7(5(?Y]Ia>o0j%WgC1GW!(rXE:D)&8SJ_OYd4=+iiMJ\sE[QMMe:N9U1@[j:*/PiXr;r!\:f]FW#b>W6K'Y!0Q[X!bbneBh@`GKmXD4]aq4N03SEEf$SS2=S,OTA&!2+CFH.&o.^/3o?";+(GBBT9k::j?aiendstream +Gb!;h>BALh(4PFJoZQT3/gu/:@J$t:"oqAb,rfC*fYX@T849l)\E"9>IJ!#=moP,dbqBf'/`+[8-(33W^"f?6f[AW+0.9I+rJ@g6r\$,.d9%@0;ICdu.(a5sYcpc@3G"MRW[sKf>\OKh=BR\J3ulS;d:ddlN%Z/-(_9(XB63\O@tLS%e#>-I*#HTo8$;HQj3F1#6C?Gj8JE-jn5Ie(u`,,R(u2Mp.td^E]Ib+%?0N@#Hoq/A*\Ttd;E_Lmq91@bF[M^!!O<\U]RLdpj$+79n4'%%i-7kY>$DKpkJq:I1E6D:FKB^gY'T7?LdF7SFNT%Z))alUR+c\\(InpFq`Bu.S\(oEVeO'.$OVFQ=f_;)oM\AkD3,eO\[FsI)9d>:F:X2?b;n>#YE6,Wut<)CMu%9&r<@N_!C-'4*qgrt#t"7Y3?F\g_^AY-osoR^hJW;!27X8iATd07Y9EB[olq44_6`"!$D=%bq%[gUVr\65JlN_8lFS5o,)0Ha8-t`GJ$^rB"c[?_WB'3L6l2?NSWXC_4tO?UFUB*pm=MVM*)*h5bCNK:8g.^fVN8:?G*aJ?\),"E$:TN73_$4$YI77;;&CTmPE!M5&`!2i;-;h-(o#-jOND\1Df\E!PZYs!+WrWJFD?CajBRS!bZB9Oko!*:[F/4Hhe^W6pF\7C/[8WHmEQoaP6CTI>R3ZZSOr.[SHUX)/"j'@pPD%Sj'.Tht'8H<\2D93L]B`);OgYI+=N='D"7WEKE[mOZqb\YW!d"\-CSs:#q[kh3nQ[s93V]@]g@iG,AB1JHp>XA?]AUP(Q%[Lmgjsf6\SKh9+;TroU&kQjN4D7VifHL3P)j1$,g#IDG(hCOIc^GQee5lf^`eGr-i_emC;_?Jd;Y5P)-&\Nr96ri;:.LG!ZmR/hQb$6M@aD.SJO+$ligs*oY6eH&4EnW,8#E#"o`p7nCBGU&m1Y=V4Zk2][Xt$/>_Cf`fU&6u0qu&Wme"*RA-;/7iS$I1.1m%qd'TNgr.JeSYA0,k,e?=qGo`piQinD.+#*pmDHD$FW*K1WC.8S;hYe_,:PP,qqEP^f$UB1p--1;R#V,dE$f"NPE)7C8k4B^XeCZ7g`tmmk4)[nQ/&8"Z/1tJ(qb^i,;5t,(J(H,8)^",MEbjT"dr!437El2_H8nro3O+%,MRq9anH4nh2tW+XQi`BNmp3Y64<)HTY;%]WJF=XS=-s*?oq1Dj][eXku^D\Jr/aQJ@^EMG^?Kc/f*sjmu4jIkJ.ru[a3f"`5]j[0Z==uF?'OJJ,EL*0#&?49ZFDsiT+nM%c'h'@69>`8l+9:bE'R2FnEd/J=@'2K?Id>7TbH5K5Al)95SB[lTP.?J3>!57ca_bAJ]q#bL7(E%F`]2au*Xq=UZge9\Zg38.s>,m]8aE7;7ZCThN']bRcD7k&pb:#R)mjM*?X]L>9$g,cZ-Oe1Kcb?:N/[X#nC@s''?';#@'r?h[el5f=U"\#NRpINbdJ[k]"`r3@f#_27t/'`igE$"mk0aS4Q!6@/L&Vk;#/!fC2:@c!d^SU'h$;hJB]Dr]m8da\s`[c)s/eV0$;`5SSuG@TQ1P$l;oghG/@OXM!auf[s2Lgn9$@[BrgQdq7_/RR]+R[GMQpVgTk^Vfcm#NU,^XAB\KdW!SZ5j)aaqt)3@Qd=!mGVA"[4Y=ROYR]7C6e9MR2VSd[^%GmsiH@;0.[dh\cZld%H-[o6%*"t/NjiFE[oI7Sp$\5#WtUGjB'@[=Lm(Qcbu,8i7[s)2nHRL=f9-1*F9?\!<5jCX#'nCW+n"(]Ea3G1UtYEETao*=NVE@$]LB?cXNbR/2DuRe8i?!ZA5kE&8dE!/0J!bKFs'$).'E%jutn^i_jg[XRn_00k]Ag7Q\6\fl`>GOEs$cG8f0:#PJ:1m&at0D]YC70f1:TnaGg\gS@q-8,e@l4_G9Je(AnmGp3fb>rNp$R*'.q!W8%%Z/_?Jnl.[I8+5&EYb+`Cb0EAZh?%h(SMO>X!O&iKFeg[gp:B$SV[KYQ4ZKH1n\in/M5QJ(T;!hYPu=m3CN4i;LY+XQ)15bTcpA]@[*Z6@XoB6F4YZ?S;gtVGH*$jWaKl"'TMlX$NP%n1=qE'nk"FJMF7f#D_h"kA$Wl*'cm=);/^A+U0:S;`Hec?sIgd2?ur3Z*gn'N?_gt%*oHD5@1>6l=d`5=>OT[1gN7!YdAfk03d)M)gZQY/Nd4a;,DZE)b='`5pqA'32KS*DgSHebG$s#f(I=7VD'eLKC]5aJJjZbR"GB2cL)-hD)f*q(s3Xtf*BGbf)7T#Q6<4A.Su-+cV\>_@X?U(FqoP)Zk>d5<>`1Q&1u;4UQp%>sM2,&0qBB,"[)_E4Ns)ALa?L";pDc6tR*-(VS>C:HntF#TtqY_sp_=DJUVK;(H&W#?B#)+E,LaNc3.#"K9]bRZZskneuG^lF4hTNj#4]1IU['g*BNOG]>O,b_C>N(U.#sI5%MDEUTk4.EiC77U>Z@dN`JUq]FBendstream endobj 48 0 obj << @@ -637,10 +627,10 @@ Gau0I>BAQ1&UsJX^iZGT:Dr.a@QJp6,fNeo9<'NjBrp6rqB^f/s7DELe5mK*/> stream -Gau0H>BALh(4Q"]ka0uE>YrrEmSlnt0j(][@.40ACo['#@+f,o_CHa8n#tWt![OHT\c>K?,#?ticDA9sP8[rl_I";_4..>ck8:o4L_1tIr.$JB(`N.12no(5L#WfgM+6`p1[Peh4^PY^jWXg-KrMs-V2/pT&BP)"b+VK_JYE--r-IlLi*bV:CAu!XfmB]?"I1IMQT9_//bJ"K6!:kN+%sXsV34@]ij_[6rc>;sr!)&sYq=HK`g1i/_+f905'sud?dST*B`+ncc[\(ib[O&[p8XL%\]tLjKK>"3]H@Q5KYrcpl)7]\kITu-6sfnng\8?(qWbX/NP*Q0J(Yll6+>\,@#R"EB]sm!TJr*#7-5Z0::l=gc9l@*j"\Mj>i[,K+)Wr5s&X4Ioi@+,+`9eV?H`Aqo\;Iq0fZ=rV$p8CO2"Ge&pKfLdJ)>H286k#)uMmsK13PZ0$>t;IuJ-8Ia+X*)6/-;4M_^[O&[[gSo4!]VL"X-E-f:a$>RXuAXlJrn%YhoY,X`NHXurpcSSN.#Y-Cn442SL*JB?_@?Kb"1ICmZm(q23&ME?".!=CRt(bUVdUujKgSAdVDAFq>^_!Y,n0G7&HV;XE,!8jST+FU>7qp.<.9ftZuGa@V]&$XOcY&*&H?9.Y>#ElA?3-AX+0I!/IjDKo%KHSW-eaWZo/0G3UqkcW,bVDpa[2u(9n>:pJTYS-$7T3.8Pp2!2E)a3m3#NQTi&bOS'Si`&@RTD3ZOA-TCpM-n/=#"]gdM]DNn1'1`WFPEqYHjHE9"^V1KU)e1?OEn[hXm;VQ#P>5ecmHd0VYV!DnM\)U!(k2,F8^B"`=mQ$@1:l?[8!_T\253<'\bZaEAFH6imc[AhZdL90ui%_ng.4Ps_4Z9%S6m`GUE(Y'>SdbS_6g^O]>D95EE"%Bm+\CN@XN#,oVEHCP-W4Mtk1^p2[-tf7KACVegm4NHE+SnW"'WhG&#YIa/(BUA-^%k5MG4.eGLUb,5[h=SeIj?8X$]#%6[]=`89%ZOPef5u-UJfD:LLmciDVCS3!Z#JKG8=43g!/P&h7)-6Zh$LI1&(BGuctk_j/W"lS9B#Sq?(h8.GWS1*"r1@.+XeOT6-c(!cji&RZ.",!a+GKfT@plDt+:K56QEQo[:#QkAd@OkS^\(\8b30qI[QYkHf$/WJ]'FPErDBIS\/Ti]f=0ni4@*fXM#Qs<[so-rrrK(17B_-M?%W<FFsXgip\52_uSEiA-3am(1u8Cj_%8qH/$2[?/a2REdfWPTjt.$Cq`3&.BCdk/1*6>c$(B)Q,W#naq@rXfo!7a--?jG2J&Qp;HB\D<4jY5d?^B)KMa5bC3t%3U[25C%/Pglg)aP<-pLcFUJSRAeM.Em];E$W(G^EI6>#A=HJ0EIan3+n)1qus;d4%9FuMd1Enub/RIcktkJV!CP4P,G3)iMphtj,sLSD8-7^^6-;%Ad52`DJD'^ZO-T(HZH:+mn.6Au)i3Y1nm_R]mZiAIcA'Pd]@CuOGB$J!;=`.:K"[F`+$7Ik[I-LS;iKc?umV%g28&-3\T+Y+d_+_Kp`AV4^o),Ye4G+*D<1^QM2E"K_?V6IOq,C6fGnntIW#8ZSrGbs/ZM%V)ZE8rE/L-$1rQm!e;I_bo7nYu*NlWe4dSOqu6=ptNbE>d_;jr9ufEC!skTq;Gh&N'.?43GVE?&^C7l>(-]dcqh^:Ya=)q)fC9)l$@f1&U&oSD$iM`KY8pJRF#/kO!bcPVq7F>iX?%L1'@@\jA4rn\=rqM>\k+Mg@JMl8n7hRT04a(M5(cf9T.YkFElF/)X#%<7X:RDh0PW0]8&k"SW5WII6c0]Cl)MW`+HhedV:^U$a3)NQ\3I3mfS.mCsjX.l$"se/6>J0R*M>UZ_\C'o`^[0K%p!*0,qi%*>oIqW_;c'i@1?7Mj[*PL="AdkrHQ0?;0"Jf%!(V1rRO;+/t`,%%6kt!IudmI!$<1!PE@XW1a["Er1Sr&\4Fa(@oGd657i],Ff=<"qD4q+YRPhtDrp)qJr[UJh#7e(FWpkVBn*8^AB_s[;Xea%,m\_WMj;ujN/<.R"rDA:I&pb.PJKY6eo)?rJaKq^Gqc_::5X'kXY*bPE3'!7`,1jYaF_=s)l@XdHbnIe7R_2lsPi,oW8a.2HGk:26,J:c!A&EJZ[R98?M;&/C21Ij-*5M!fna5%?m5tXQ*CCdiMUVFM$5F\r%'jVmBA"_`jIm%"Q6e;GrRP*Xus!)LV3!,4,>K11XP/>O5lS+"b`_9*L.hD3sM^\LKBaV)$fhhc$ma5h\\3eBHeY4mcbA-MS3i)Z;E`,*Zk?FZ+b7lcHos.7p%P"d.#UXaO3:mGcqanWd.EC!Ik/AR''huNR\L$jHb2#tdTunhnU+M>[;LJsbA#Q7Ad`.AC0nbN0RUU4TK/^bW2?mrS6#@%a'SG$TUaZMV0lU&"S#<&2:U//Cgm"_hjsb2j;f)%>2ruKsH&A*^'\bah9mMV5T&QV0`AUM3;k@HfVmn0OZ-?5&Pc*0r.;m;WR$6Z6F(@P![G!%/!(Ab7OTd/=0o@AE&WKY4!=Eb(_?s+A@h`*s67nGeH-4D0VR>5J<:SH`1PF!\mQN?)'X^/EQ0X%XpUQJ&ki2W*JkkV~>endstream +Gau0H=``=e&q8H9R$VWZKCIYPE)gY2VI56lMH!-hM6$OU;inpT%gSosp&=gT!C5Ef8L5fQ)%g3to6!k'bg6K$pm2,50%LNirqp00/`g'$*sbI$jg-?\alN31I.DSD?PkN3]\SB.d?9BiNd)PY3WVN!*C9*VQ3*mW/H1?d&>POT([$XNIEqH%rdjijNn-k>B'Z$R2:o)u^*_%_E.Dg9U0,MVG'<7J@CV>_u_$eME)V\40s458HY:cQo)%qZB_M_1i`)^6(57a%oc7Akn2<"BtDI%$IWn/HQdrqN"JT\((4SM8-ffBP;Wp%d^$E'0JM.RRY_@VpYT:PDOb^5\.G*^)=utL69t)B?L]K]A(;f`EDbu[R/@Rj$Gq?c@#nH5@PYE30a3%4!M>Vii_8AHLU5]0;1Eo@_S_HDPcY?:QPM!c/*?23s&-qd1(Z_<0JgZHc)au7p4tcd]h2CalP$s)Pd5tlc/'JKoIeN.Q8nSYhBeUVTX&1ul5m3kcO\NY1OsP_/-T/s0`VFXE\Kk7,;%[YBne*O6W/IlDA1$jaZFOG>.@XJ9+#)-@G5QLWY3V)mY.a[W"Hg&[l!1@$MS#X_sDX=;B1k[2"qW=AZ8e,G=O6u$O\P27D,"/#uFY6dHFfk_m7:k\T@qH&k`EZ(seJf.dT%Zcjf+[WeN)@5#pBE.G[`7;ZG.#g.#%dp4C0":s`E*.SV-="X$PIkO-Ls_mE8o]B7R*_p#Y+W!/-"D^BmEfIa:D-"6N>mS34G8@\5RYgJiugT"NhBPdj##RPQ7T>#6jT[=U_2($Z&6*ch#!jUM*YPMM\aQ0#`>"rMnf[+=l-WP!K.iEcqHC@W9k\tHNU/(_)]jbam]:/7TkWkh3'&5'gO3MJKW8CD'$me[?S*F26[C.>JMob(65iJp$N=Xg?\Z<.kWje^2h0StG2R:4\.jGQZ0ho8W*qtB8P\1s]Z=)I!ZjIL]D[lQ[D?FOj3>XnjV9q@\]ka*2R2hsKrc"C2Zm=%gr>>Y(clKq$acdoRr6&[MjO?ho_pa3tOF>)R3d1S`59!;OA6aK$%4VF019.K,ms9/kGE/*fIlfUpm,N11_c.??t)c4\LGJU$%g.'$#1Gd#pqgtS,T#uSO/]PEm?o";_L6K7&)g$LDm[6nidG_qK])4N-?Nn4?")sH4VgfSD_?_B/FK*onk)tGm('!N+1_QU`Vef=9)DP3_8SMak77Mp\Fj"8FXW[iQf58g-[32]^/'aTjDRpV1UpY^g36;![d@,,Y&g_JE\kqj'C#DqAqf5>BI'\kAF)(c)+?"r=8D)UBJiWES]D>Dn"(:/?]t"rW)%-tP%7'^j's='=iA=1M7V,*,33;Q-B2hEtY"&],fduIZogi:j9IX2YoYjMLAF<&<_$r7[9Y\-YSs2hX2+;?9;no&Q>QTiCrW8ji>]OB1PpcN(ea)).F8P.3o[\3o3#TG?_;4ognu*/iGhM9oIXiZ3'n2ghnop9Zn3?X-1s*DUXr;;`9("ZEKhqW^YQ=o%T#DX/<,!]t+[sV`ZL9gmkW-,fS]a%(_j3%c7_dkq$b)$rr=[\l)3KC%6S.^YLM$qqgM$]D7%B))>(LZh:5'ncH4]@G,5`6+%`i74q0LBp/OfS&OgEX5/68>5dDDn$hLp\M",+]E'>C2.qG%h1/1N.Mskr,'URU`8.q1O,K!\<-s'E<,J^D];l1t0)!KU`luF=A(+;P'[pqm7b(`fKLK!Yd[1fFP&u"/E]WC%6q2TrRb^#W@=NrBGCtH&S%V,e(2O;cdK6c5-WMQR3XDo`.[Q@B/*@@n/8W`\qrr=3f^AGp5Zk2(5-K-`&8El.4qZTDVpg]hXku;9/!)$\p@gA!D@#4Sh=PkOS:T@omEWmO1m5L5??CVN"]o!eTSI0a3\;.K-?m4K(LN1=>TY7NP7Je&X^=R66?7AO^ZFSe''n-P(Dl#PVD2sK;b^aaQ8FRuqfc]iTbNO$WbFt1^a+T$XY/H-SP@+u^$GH!]:m\I.Q1&>=0'JHkCYR^,A1WSnf*A.S1DPcnGFoSa6g3oSB^)7j*CV:2kToWrU0LF_=c2gn&KTM\Gb,f3GQ9HCZ$f(LGCpr!d+KhPqm"n&lgVs.s1HuKqbTH3]6b>GpBVaf^H4_=/F-OWF@kpAaD^=b%DSB:n&4-?\'*pX*8ch.6,Sfd1+\hJJ&;?&9nLd0n%qfPYGnJ<)*Rl1Wrc4n9m`L>RFFBt2JVN(;kLDa'?PCXs\I01(Dk<6Q#t4f.(D%L@$D6j\2]EV&bgo1kqEY(bof#,(bURGg'n(<)9ot87*?_MW4gR=(gstD0"XsIC\bDl<$PLndp3ZO!8lVjPECc0U_c$:JVLS7`n;U!mmcNC($jl**O.Ndqd-o*65!M6)mn]V72_ZEaHg$j4N"`Q[3mmM>I9Ij*:_>`$rnho':tA%n?s1N-HRnRPt]4:!l0,"J"F8KOh!THCI5l=NmU(1/Y.7):/t\17okM^\*tHPBb;U-#-K&erk67@'Ufc7#Ci7endstream endobj 50 0 obj << @@ -651,10 +641,10 @@ Gau0I>BAOYZ@:-'5],'>c>755i_&3=*u%qa?*P]X,Yp1"H!t7'ej^H/,q$b5r\Sj%D^%JD8S00%&\ET) endobj 51 0 obj << -/Filter [ /ASCII85Decode /FlateDecode ] /Length 4424 +/Filter [ /ASCII85Decode /FlateDecode ] /Length 4641 >> stream -Gau0H>BALh(4Q"]ka1,M>YrrEDHBPL0j(][@.40AXK28n?l?F3%gnpBTug`dk3qEnV)nX0'3/,0Qf@M'QMA<,.Ts,3Ksgsclta$5@=`i88L2X`Vq3^jPI?XI2;1@t$=$F%3&7>'TE\L\D1m-[E`-6ua?_1s.*k!RnU8E2D3in9*Vp(2@mXlckDlOM9+d8feHH(FV$^--?X"6=kMpH)"aNL(IQ$V[e"PZC<^iC\"!mdZo!)h+(edfMaUc1aZn;s.7O4d8:PQp\*\l-=D4-:()lE50g`bSmlr14^%D,S2`cA;Y6.X+d!(QI8+*L1B.!1=M@0ZV.[#dVCo8k()'nd\Q?&)mF2$H"CeD"p&K4\R=*=V$C8Ot^2?$RPnXW)14X:Qq:*FZT0^h@[6ch/X"\_E>pN#S.N-6G>5!X4hs9G^)X;KKE,SL%NDeb)f^!!Obs(^[(5j)CObJ?Oh^:d7giq0NjnDLFc-pm12M+0a6"Y&*#oE]NcR&%;F4E9][k0d<8K<,mjB,U-&OYu>$1Aijm$p$SSes0dLmT[UJ75uZ.hPp3bFTLU>GdN0'D+?a=?jCbT.@!TCp0iS9.J3t\F(,K?tL8grpZ(6c4`LmX%7/[tC@dZ9>5qd>]C1)J&A%?dXC(LBk0Z$E(iED6VbYafr_;e-J(q\i/@lrOi"igrZ*S-HN%]4$1h[#801=/2W$61N0f8A[a]=?hJ'*sL>GT>l2'E*fnJ?m="Z!TR-rJHF>?-f2B!5DuVV)eW1oIF^eU<'MU:`*SJ*2YD^immsph\8"ZA9DDa,U9l?q:=kV*kEhm3AMo.b@pk][QKe'!E>/+C8!0B61TE3m&O#d6]t&`W#S!fNWO8p,aKF"h?)88c)jM2WpH:c;c(@alIc%q1]ak@IU)?83,'/n.._&hN&fB`K!mcsTY$*@,YL#>3pt2?s_3?k:iJ5hUTR'b52*?4I\.eYjrk*F2[h_XB1FRU;\]=YN(FW9hX1_X6Um`hsHL=@1\9b<\J*5C-dIqRhJ2_CHr7_rVP)-Q&IHKfpl.TO8q5okIb^PY3E@#)B.mZE'8^;o(UQ'ajGFe/%"df^quf/GD<-@_14CbQuA*59r[!PenI2m8p+@AXK3G3-hHLGF65,p'6AkNC8/k-o*ZB&d5c>J\U]/Z^q3Bj8/R3ioHZkL(,Hgsrb`/X;+!d6;sGgH0-sEiCk>\d*X%]WY8d1%]VbCL@e-n8:0]^s,MT7sK^Q#8`Pr%k`l9\dENV$rqg:Gg\cVhDUUULL149\'f\hgnlQYhK`U6@gPIQ501?Zc6RK;3-P8D%$YY\&B;'GH9roHQ079SW67c>V\h&m=?A$.GbMoi:mkdG]crm^Z:a"@n"ObB2ni&cq)@qZfL1\IArf/f"ffKdSS&QiS'Qu>]LohP&tk^7I?:do_s-ePs##h`,`HSKQ*&doCmK3r8[O<$_OlmAA*h;dcF`dlUW(HLU?+/"e&8*Zs(E(SZO<;aVETd>EEOh31CX6pQ.*V?'J,5-%;&i&H'9-qMVP?hilY]-\'qN`ci[BLRlf*4CmGE-SpV"]hQ-(L-<9lKUd,;Xgncj_>["uMbj9-[3$bheTaAH)b8QE=d?!VfD#g0BNQh2B7U/A:VQ[fXm?='O&.u1,40!5>$c$o\$DCO\L&ki*R'h"U:6m/`S;NL%C%8(Woj-\sBK]]AV?9D&,h47C$*?nTD-\m"B=FkdNA;St9KEeYK]^I]SmGW[TnZR_Yc'98J!+u71JYYi>'[V^3i?U[<]nSh3rf6+A$CAh(0>ZX.(r^/.7'e"BKHo^Wrmt^8*sKbX,FV-m,_R3toAe4D=J@KmNn;TW%QUWJ6hIrTbr:+ab_,!i/RK^#%5B7OI1I)ls5h5`nJk!fb5s$&-2JNB7h?SgrbfpdJ8!!(7^Xjh?$hU#i2,CC&Hmq_bP,Qfbl5"<:Z:kUlG'+X)8.!fTD[>#Xr[=r3#XIJQUs.t74hd*Z"/^`fn7_=\o%-"Y5^X)qanq_O&ke2(Qe4-KusA)K=NstUM2Q65P4Zg.OBm/n"2leUff!E2p/F@IG-k\;eZ=gZZ"rC"B@dml9Tl6Dsc3!n?jEN),;o-"QS#g>c`>.*hX"-68Z@F:pW7Ye*I%G/e_.1`OS-V?$m0t6h3EikX1f9s<6XM-n]W?SWf_+Afmj<4/$Z[aNKZmgEbk+-fgNU,gmFK`oCCY0`.W5\A'a*Lm<_Ue&:VmB)L>X)+o4>RZSHYnb4aorA\o2ju%.uG"i8miGm\3-d;@l`9eV7GoU&@f44h38PQWkLp"o_tc?G\#\WY5Q)[hh[@7e:SPQLV#to2Fc0Ed?Lm=H$\BH:Q:[aC6uT9p1su]:Lm6M[I,.%SZn0FTd3f!oa*$E`@;f2RTF@m&ORB(kN,p-LM::6Pr[L8a`+mBNB[eWT0>/?lE7c/f>k];Nin(<%Bh?;^a(P"'DLk_ipM]lmF;&=l>(q_I*ZS>Qf$u0;!\erB*+E]ECNIgD)fK:I&H&?I1ijq7k2G\qd_Ph:cA7mVTbPCq,APh57"BUlfYaCr%5"D9,W8I#Ls4Q^^Y#,/d)JZ-YE3j]9lj_\C[k/F[mQX&r-J"@pQ/6mC5?#HoBN;,A-6G%);kT'K"0'Eu!<~>endstream +Gau0H>BALh(4Q"]ka0uI>Yt:RX]/#3&PR!jfQ[C/-<5=gY\^WHj8h9tbcfpQP0j.7GVU!o%JnAH^N97A+LGOlqc8GZq$*sbI$jg-?d$+fPS)I-VYOUg6N.0Gr_=gnRU"=O!`I7oIk=C^Zo1e*L8XKJu1L="@D!09ZK5R*d21c1Es%lRA<@[!`R2Y>,TB9dE)T6(jH)arKOT>Ks:gaV*ugKaiNJc2H!+CSD(#Z)Zf:8glj\QDMJk/PA*@uG(K.U:bYIm1C]??Z\cTh1V2?S=AAU`ca5_;]r9J?bU1@%_0kVc25i"7-jb>L[6Bq41&GW`WPiF&K6.>._TRCBH"8im9U#fo/f)?F)a91,kcE%iV%b`3f"`?@I+F>/9%QARQrGMLW]Yi^OE`2gG8!,VlONS`b[/F0sT#]AK?=Y=*/>s,DhJe"K=>1iN+u$#e)F!Ct73!$ErT/YNq7oto\#"Xn6amjdP9EZ8X#+PeO6Oq6Uh;oo.Bu[h7%fR-#h+h&=LL%_781c,E!W%MKR6(+89a$f!?ShNKS:iVcmQgach,3!_U9_c#5)J[2PD_diH?";K.=WFD2XNl!B$1tDR?'[@o;&qqVCJd?L>$Fdk=5iJ)O.14+*h:"'^_h.TF*'n#COfOp-4Etslrdk!T_.BJOcH%E1(-Rhnbn?JR[u07sVM*#7Q]S\%c`@:q@Fh0UmBkqkJ_PmkHa]cm]-$@1Itc.A9pUFRMh>kg>tNoPf/mp+dmn&l.n:'_S/.?9^/apS+bco'[7&hnlO(WE$9I[M?%j+pW[h-u)#;KY+#5PYD9V>L=DWp-iDLpPr_%GeW"HJ4GrXqn@8PBU@$j?%&7K.=K/g,\$L;Bo#;YBJM%Z(c_mH-c_Kfai03%!2]3\1c_F>S@>1Gdbt^0`/3Mui^*sEIoDX"4\VZ:'_u/!e:I'&A?=ng,Aer8k!^Q6O*i'0GA4_.PJ%ksE$pITp^cWPE.M--qi:'Gn5)Ir#ZONA1<*"@@]A=A"8#smfAXc`e1hq)K*hoS[[;4s1Q.ciR8Xl8AD=ai$!d94MNGX$+g)QRa1ROe(D,.U[2!"?7[2TcrUY:ZrEH*213G;&(3RZPl2JOh'*%Fa[[Bd]%UI";$V6ZB?OGeb_3@@[.&6S-2B2*,"*[,2p>C4F/ru%*fpbG.1AEPRmO5&m-NuR]`".%I=e0oZ#LA@[\]7$/:<+f&B^?>E"OsCW*'Qa.QdNX_eLj=7TDnB=CmShbn;*?X0e_BPd89o+6hi[k)PWArAH#o:N8U7pLgm%3)I7?nup4]D^ql2lpL-7qfY@M/FAB>CP!)4WI&CgC*3o&MBI]Q%#FF1:W=`@OI%l+oFTYTtRo>e4STt2_!.,SkCZZ=280OFmi;dZp/UQ[Ve6#O??"FgFSVl_CSgH#O;#Vi[Ftp0;t![Bi33DdX"Ml#7Rsl)e@2Q$]uf?6[Z7tWY&S#]$U`T_+XC?Xm60@m=+DLGQ$tN\m+Too"?g)XH0-?],k.sRHI/@-(H/ld")`LS1]=tcF*e%)%S.IhQZ>Ir%iZJt:1)t!8X(WGkPJg@XYq?nEh$e%R;+M&Ui>p[9MXniSVC2r\_F=>MQ_C$A1Gji6Lut$keA%UR3Lp)H.iT,Kp$k1lhL8g\LB.>EAd\/-ib_b@?[anD1lP^Vh&##8@_;8b-kGX2QUc70ejT9;E-LV2m5gFg;6N0rs"pH6H.rdS=FPH]V>M.5pLqG+A\#AC?@F[b"JN/*4Kf_H;Udkj)c56k4>,IYcIZ(j#Z%h.O74:fUr$a2HikCK3^up>IjTJn%j9Rb)g?X^,&Li$@QsAa*\Jf:pj\&O+A(rAHQSfqA(]&MginVdm@!DZMOfKsP^9k+hm9gX47\7"!rq7DsiWj_![oT@^5K"M_SU$G::gRgiY'^b&Nqn[?.<6jSln6%7ZAMhbZO$&7`YL$d&Ff@d=SdrG]:eo;+qXl1G/7Y99@__fHCF]XS4#;7^L0Xp`i\"6%tlXIimX^E#DB7(&`<@'s6h2,nmP#mN^p]LJqJ<%Pcg,KKADa>WZ_I(t#M=+4Sp)[_I%dO?Ung*N;7KkO.@1[*Xhhf(`H(\\9RNK2(-k"-g/<)(a6W?ubt-m":B(H%rF&es+9L"JhYGcX&c/j[mU;,djZlAQo[:h42Q;1]uQU[Sm1hAM$4TWl]iZil)+7Od:Kl-*F2_HkTX]-0n&SOSIV>,19o'\sWqQ(Y)$.'`tEG"*&i.&&L)01"Qf;-4,3/"e^8`]-tRmRu<3VDhLMY=ic:.V$Yf0Y$DDG:@fB@nH;.9h3eOInlm$F#:S@0PQchi8Cn*R>l*f#-_@fIPeH5iIQ6S"2MdDTFGR7Y7%%BF&0d&g&D)18>mU~>endstream endobj xref 0 52 @@ -664,56 +654,56 @@ xref 0000000251 00000 n 0000216100 00000 n 0000216445 00000 n -0000216705 00000 n -0000398149 00000 n -0000398494 00000 n -0000398754 00000 n -0000638045 00000 n -0000638391 00000 n -0000638652 00000 n -0000801661 00000 n -0000802008 00000 n -0000802269 00000 n -0000989788 00000 n -0000990135 00000 n -0000990396 00000 n -0001145107 00000 n -0001145454 00000 n -0001145715 00000 n -0001146473 00000 n -0001151318 00000 n -0001151549 00000 n -0001152281 00000 n -0001153067 00000 n -0001162458 00000 n -0001162688 00000 n -0001163376 00000 n -0001164149 00000 n -0001177581 00000 n -0001177819 00000 n -0001178498 00000 n -0001179248 00000 n -0001184340 00000 n -0001184570 00000 n -0001185301 00000 n -0001185371 00000 n -0001185633 00000 n -0001185771 00000 n -0001191794 00000 n -0001196338 00000 n -0001202424 00000 n -0001206966 00000 n -0001213102 00000 n -0001217718 00000 n -0001223894 00000 n -0001228401 00000 n -0001234334 00000 n -0001238857 00000 n -0001244840 00000 n +0000216686 00000 n +0000398130 00000 n +0000398475 00000 n +0000398716 00000 n +0000638007 00000 n +0000638353 00000 n +0000638595 00000 n +0000801604 00000 n +0000801951 00000 n +0000802214 00000 n +0000989733 00000 n +0000990080 00000 n +0000990322 00000 n +0001145033 00000 n +0001145380 00000 n +0001145622 00000 n +0001146380 00000 n +0001151225 00000 n +0001151456 00000 n +0001152188 00000 n +0001152974 00000 n +0001162365 00000 n +0001162595 00000 n +0001163283 00000 n +0001164056 00000 n +0001177488 00000 n +0001177726 00000 n +0001178405 00000 n +0001179155 00000 n +0001184247 00000 n +0001184477 00000 n +0001185208 00000 n +0001185278 00000 n +0001185540 00000 n +0001185678 00000 n +0001191701 00000 n +0001196465 00000 n +0001202551 00000 n +0001207257 00000 n +0001213393 00000 n +0001218110 00000 n +0001224286 00000 n +0001229238 00000 n +0001235171 00000 n +0001239885 00000 n +0001245868 00000 n trailer << /ID -[<5ccc38b1114d76ff699dbc9d3872070e><5ccc38b1114d76ff699dbc9d3872070e>] +[<936681139c00a7d15f7d86039cc3c108><936681139c00a7d15f7d86039cc3c108>] % ReportLab generated PDF document -- digest (opensource) /Info 38 0 R @@ -721,5 +711,5 @@ trailer /Size 52 >> startxref -1249356 +1250601 %%EOF