diff --git a/projects/messe_demo/asm/make b/projects/messe_demo/asm/make new file mode 100644 index 0000000..5e1cebc --- /dev/null +++ b/projects/messe_demo/asm/make @@ -0,0 +1,51 @@ +#!/bin/sh + +# ---------------------------------------------------------------------- +# Project: JCPU, a portable 8-bit RISC CPU written in VHDL +# This file: rom-file generation for cpu_core + +# Copyright (C) 2007 J. Ahrensfeld + +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. + +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. + +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# For questions and ideas, please contact the author at jens@jayfield.org + +# --------------------------------------------------------------------- + +TARGET=$2 +DSTDIR=$1 + +JASM_HOME=/cygdrive/w/vhdl/lib/CPUs/JCpu/tools + +$JASM_HOME/jasm.rb $TARGET.jsm + +irom_tcl_snippet="$TARGET.irom.tcl.snip" +irom_vhdl_snippet="$TARGET.irom.vhdl.snip" +irom_ld_vhdl_snippet="$TARGET.irom_ld.vhdl.snip" +xrom_tcl_snippet="$TARGET.xrom.tcl.snip" +xrom_vhdl_snippet="$TARGET.xrom.vhdl.snip" +xrom_ld_vhdl_snippet="$TARGET.xrom_ld.vhdl.snip" + +$JASM_HOME/insrom.rb $irom_vhdl_snippet $JASM_HOME/irom.vhd.tpl >$DSTDIR/$TARGET\_irom.vhdl +$JASM_HOME/insrom.rb $irom_ld_vhdl_snippet $JASM_HOME/irom_ld.vhd.tpl >$DSTDIR/$TARGET\_irom_ld.vhdl + +$JASM_HOME/insrom.rb $xrom_vhdl_snippet $JASM_HOME/xrom.vhd.tpl >$DSTDIR/$TARGET\_xrom.vhdl +$JASM_HOME/insrom.rb $xrom_ld_vhdl_snippet $JASM_HOME/xrom_ld.vhd.tpl >$DSTDIR/$TARGET\_xrom_ld.vhdl + +cat $irom_tcl_snippet > $TARGET.tcl.snip.snip +cat $xrom_tcl_snippet >> $TARGET.tcl.snip.snip +$JASM_HOME/insrom.rb $TARGET.tcl.snip.snip $JASM_HOME/rom.tcl.tpl >$TARGET.tcl + +rm -f *.snip diff --git a/projects/messe_demo/asm/test.jsm b/projects/messe_demo/asm/test.jsm new file mode 100644 index 0000000..9b3ea88 --- /dev/null +++ b/projects/messe_demo/asm/test.jsm @@ -0,0 +1,534 @@ +; ------------------------------------------------- +; Constants +; ------------------------------------------------- + +include "../../../lib/jasm/cregs.inc.jsm" + +; XIO registers +reg_led: equ 0x00 ; R/W +reg_pcmmode: equ 0x01 ; R/W +reg_encrypt_src: equ 0x02 ; R/W +reg_cmd_addr: equ 0x04 ; WO +reg_cmd_data: equ 0x06 ; WO +lcd_port: equ 0x08 ; R/W +reg_pcmin_dc_adj_left: equ 0x0D ; R/W +reg_pcmin_dc_adj_right: equ 0x0F ; R/W +reg_encrypt_const0: equ 0x11 ; R/W +reg_encrypt_const1: equ 0x12 ; R/W +reg_encrypt_const2: equ 0x13 ; R/W +reg_encrypt_const3: equ 0x14 ; R/W +reg_stat_addr: equ 0x04 ; RO +reg_stat_data: equ 0x06 ; RO +reg_btn: equ 0x80 ; RO +reg_dip: equ 0x81 ; RO +reg_pcm_left: equ 0x82 ; RO +reg_pcm_right: equ 0x84 ; RO +reg_stat_hw: equ 0xA0 ; RO +reg_beef: equ 0x8E + +; reg_stat_hw +; Bits +omsk_ac_rdy: equ 0x01 +omsk_cmd_rdy: equ 0x02 +omsk_stat_rdy: equ 0x04 + +; Flag masks +omsk_led0: equ 0x01 +omsk_led1: equ 0x02 +omsk_led2: equ 0x04 +omsk_led3: equ 0x08 + +amsk_led0: equ 0xFE +amsk_led1: equ 0xFD +amsk_led2: equ 0xFB +amsk_led3: equ 0xF7 + +omsk_btn_W: equ 0x01 +omsk_btn_N: equ 0x02 +omsk_btn_E: equ 0x04 +omsk_btn_S: equ 0x08 +omsk_btn_C: equ 0x10 + +DC_CORR_PCM: equ 0xFF40 +COUNT_RELOAD: equ 0x0200 +BTN_BOUNCE_RELOAD: equ 0x0400 + +; ------------------------------------------------- +; On-Chip memory +; ------------------------------------------------- + cmem 0 +stat_addr: db 2 +stat_data: db 2 +count: db 2 +btn_bounce_cnt: db 2 +btn_state: db 1 +btn_last: db 1 +audio_vol: db 1 +cipher_vol: db 1 +vol_was_set: db 1 + + xmem +msg_dsi: dc "DSI GmbH Bremen ", 0 +msg_dsi2: dc "October 2007 ", 0 +msg_byp1: dc " Encryption ", 0 +msg_byp2: dc " Bypass ", 0 +msg_ecb: dc "ECB-128 encrypt.", 0 +msg_cbc: dc "CBC-128 encrypt.", 0 +msg_audio: dc " Audio data ", 0 +msg_incdata: dc " Increm. blocks ", 0 +msg_setvol: dc "Volume : ", 0 +msg_blank16: dc " ", 0 +ac97_cfg_addr: dc 0x00, 0x2A ; W: Extended Audio CTRL/STATUS + dc 0x00, 0x1A ; W: Record select + dc 0x00, 0x1C ; W: Record gain + dc 0x00, 0x2C ; W: PCM DAC rate + dc 0x00, 0x32 ; W: PCM ADC rate + dc 0x00, 0x20 ; W: General purpose + dc 0x00, 0x02 ; W: Master volume + dc 0x00, 0x04 ; W: Headphone volume + dc 0x00, 0x18 ; W: PCM volume + +ac97_cfg_data: dc 0x01, 0x00 ; W: VRA=1 + dc 0x04, 0x04 ; W: Record source = LINE_IN + dc 0x00, 0x00 ; W: Record gain = 0dB + dc 0x80, 0xBB ; W: DAC rate 8000Hz + dc 0x80, 0xBB ; W: ADC rate 8000Hz +; dc 0x80, 0xBB ; W: DAC rate 48000Hz +; dc 0x80, 0xBB ; W: ADC rate 48000Hz + dc 0x00, 0x80 ; W: POP=1 + dc 0x00, 0x00 ; W: Master volume = 0dB + dc 0x00, 0x80 ; W: Headphone volume = 0dB, muted + dc 0x0A, 0x0A ; W: PCM volume = -3dB + +; ------------------------------------------------- +; Program +; ------------------------------------------------- + code + org 0x000 +reset: jmp init + + org 0x001 + jmp frame_isr + +; ------------------------------------------------- +; Main +; ------------------------------------------------- +init: mov R0, COUNT_RELOAD'low + mov R1, COUNT_RELOAD'high + movc (count+0), R0 + movc (count+1), R1 + mov R0, 0x00 + xout (reg_led), R0 + + mov R0, 0xFF + xout (reg_encrypt_const0), R0 + mov R0, 0x3b + xout (reg_encrypt_const1), R0 + mov R0, 0x9c + xout (reg_encrypt_const2), R0 + mov R0, 0x01 + xout (reg_encrypt_const3), R0 + + mov R0, 0x00 + movc (btn_state), R0 + movc (btn_last), R0 + + mov R0, BTN_BOUNCE_RELOAD'low + movc (btn_bounce_cnt+0), R0 + mov R0, BTN_BOUNCE_RELOAD'high + movc (btn_bounce_cnt+1), R0 + + mov R0, 0x0A + movc (audio_vol), R0 + mov R0, 0x0C + movc (cipher_vol), R0 + + call LCD_init + + ; Print Hello world + mov R0, LCD_CMD_CLEAR + call LCD_writecmd + mov R1, msg_dsi + call LCD_putsx + mov R0, LCD_CMD_Z2 + call LCD_writecmd + mov R1, msg_dsi2 + call LCD_putsx + + call delay1s + +wait_ac_rdy: xin R0, (reg_stat_hw) + and R0, omsk_ac_rdy + jz wait_ac_rdy + + ; Send AC97 Status register read-request (CODEC_ID) + mov R0, 0x00 ; Addr(LSW) + mov R1, 0x80 ; Addr(MSW) + mov R2, 0x00 ; Data(LSW) + mov R3, 0x00 ; Data(MSW) + call AC_status_io + movc (stat_addr+0), R0 + movc (stat_addr+1), R1 + movc (stat_data+0), R2 + movc (stat_data+1), R3 + + ; Initialize AC97 + ; check status +ac97_rdy_lp: mov R0, 0x00 + mov R1, 0xA6 + mov R2, 0x00 + mov R3, 0x00 + call AC_status_io + and R2, 0x0F + cmp R2, 0x0F + jne ac97_rdy_lp + + mov R15, 9 + mov R7, ac97_cfg_addr + mov R8, ac97_cfg_data +ac97_init_lp: movx R0, (R7) + inc R7 + movx R1, (R7) + inc R7 + movx R2, (R8) + inc R8 + movx R3, (R8) + inc R8 + call AC_status_io + dec R15 + jnz ac97_init_lp + + ; Set PCM mode + call set_pcm_byp + + ; PCM-IN: Set DC correction LEFT + mov R0, DC_CORR_PCM'high + xout (reg_pcmin_dc_adj_left+1), R0 + mov R0, DC_CORR_PCM'low + xout (reg_pcmin_dc_adj_left+0), R0 + + ; PCM-IN: Set DC correction RIGHT + mov R0, DC_CORR_PCM'high + xout (reg_pcmin_dc_adj_right+1), R0 + mov R0, DC_CORR_PCM'low + xout (reg_pcmin_dc_adj_right+0), R0 + + ; Enable Interrupt + mov R0, 0x07 + cout (cpu_int_ctrl), R0 + +; ----------------------------------------------------- +; Check buttons +; ----------------------------------------------------- +main: movc R0, (btn_state) + tst R0 + jnz chk_vol + mov R1, 0 + movc (vol_was_set), R1 +chk_vol: and R0, 0x10 + jz chk_ecb + movc R0, (btn_state) + cmp R0, 0x14 + jeq incvol + cmp R0, 0x11 + jeq decvol + movc R1, (vol_was_set) + tst R1 + jnz main + call set_pcm_byp + jmp main + +incvol: movc R0, (audio_vol) + cmp R0, 0x00 + jeq main + dec R0 + movc (audio_vol), R0 + call set_audio_vol + mov R0, LCD_CMD_Z1 + call LCD_writecmd + mov R1, msg_blank16 + call LCD_putsx + mov R0, LCD_CMD_Z1 + call LCD_writecmd + mov R1, msg_setvol + call LCD_putsx + mov R0, 0x1F + movc R1, (audio_vol) + sub R0, R1 + call PutHexByte + call delay100ms + call delay100ms + mov R0, 1 + movc (vol_was_set), R0 + jmp main + +decvol: movc R0, (audio_vol) + cmp R0, 0x1F + jeq main + inc R0 + movc (audio_vol), R0 + call set_pcm_byp + mov R0, LCD_CMD_Z1 + call LCD_writecmd + mov R1, msg_blank16 + call LCD_putsx + mov R0, LCD_CMD_Z1 + call LCD_writecmd + mov R1, msg_setvol + call LCD_putsx + mov R0, 0x1F + movc R1, (audio_vol) + sub R0, R1 + call PutHexByte + call delay100ms + call delay100ms + mov R0, 1 + movc (vol_was_set), R0 + jmp main + +chk_ecb: movc R0, (btn_state) + and R0, 0x09 + jz chk_cbc + mov R1, 0x01 + and R0, 0x01 + jne ecb_set_now + mov R1, 0x00 + +ecb_set_now: xout (reg_encrypt_src), R1 + call set_pcm_ecb + jmp main + +chk_cbc: movc R0, (btn_state) + and R0, 0x06 + jz ex_chk + mov R1, 0x01 + and R0, 0x04 + jne cbc_set_now + mov R1, 0x00 + +cbc_set_now: xout (reg_encrypt_src), R1 + call set_pcm_cbc +ex_chk: jmp main + +; ----------------------------------------------------- +set_pcm_byp: ; Set PCM mode + mov R0, 0x00 + xout (reg_pcmmode), R0 + + ; Switch on LED + mov R0, 0x06 + xout (reg_led), R0 + + call set_audio_vol + + ; Set LCD text + mov R0, LCD_CMD_Z1 + call LCD_writecmd + mov R1, msg_byp1 + call LCD_putsx + mov R0, LCD_CMD_Z2 + call LCD_writecmd + mov R1, msg_byp2 + call LCD_putsx + ret + +set_pcm_ecb: ; Set PCM mode + mov R0, 0x01 + xout (reg_pcmmode), R0 + + ; Switch on LED + mov R0, 0x08 + xout (reg_led), R0 + + call set_cipher_vol + + ; Set LCD text + mov R0, LCD_CMD_Z1 + call LCD_writecmd + mov R1, msg_ecb + call LCD_putsx + + mov R1, msg_audio + xin R0, (reg_encrypt_src) + and R0, 0x01 + jnz ecb_print + mov R1, msg_incdata +ecb_print: mov R0, LCD_CMD_Z2 + call LCD_writecmd + call LCD_putsx + ret + +set_pcm_cbc: ; Set PCM mode + mov R0, 0x02 + xout (reg_pcmmode), R0 + + ; Switch on LED + mov R0, 0x01 + xout (reg_led), R0 + + call set_cipher_vol + + ; Set LCD text + mov R0, LCD_CMD_Z1 + call LCD_writecmd + mov R1, msg_cbc + call LCD_putsx + + xin R0, (reg_encrypt_src) + and R0, 0x01 + jnz cbc_print + mov R1, msg_incdata +cbc_print: mov R0, LCD_CMD_Z2 + call LCD_writecmd + call LCD_putsx + ret + +; ------------------------------------------------- +set_audio_vol: + ; Set PCM volume + mov R0, 0x00 ; Addr(LSW) + mov R1, 0x18 ; Addr(MSW) + movc R2, (audio_vol) ; Data(LSW) + movc R3, (audio_vol) ; Data(MSW) + call AC_status_io + movc (stat_addr+0), R0 + movc (stat_addr+1), R1 + movc (stat_data+0), R2 + movc (stat_data+1), R3 + ret + +; ------------------------------------------------- +set_cipher_vol: + ; Set PCM volume + mov R0, 0x00 ; Addr(LSW) + mov R1, 0x18 ; Addr(MSW) + movc R2, (cipher_vol) ; Data(LSW) + movc R3, (cipher_vol) ; Data(MSW) + call AC_status_io + movc (stat_addr+0), R0 + movc (stat_addr+1), R1 + movc (stat_data+0), R2 + movc (stat_data+1), R3 + ret + +; ------------------------------------------------- +frame_isr: push R0 + push R1 + push R2 + push R3 + movc R0, (count+0) + movc R1, (count+1) + dec R0 + subc R1, 0 + movc (count+0), R0 + movc (count+1), R1 + tst R1 + jnz ex_fisr + tst R0 + jnz ex_fisr + mov R0, COUNT_RELOAD'low + mov R1, COUNT_RELOAD'high + movc (count+0), R0 + movc (count+1), R1 + + xin R0, (reg_encrypt_const0) + xin R1, (reg_encrypt_const1) + xin R2, (reg_encrypt_const2) + xin R3, (reg_encrypt_const3) + + inc R0 + addc R1, 0 + addc R2, 0 + addc R3, 0 + + xout (reg_encrypt_const0), R0 + xout (reg_encrypt_const1), R1 + xout (reg_encrypt_const2), R2 + xout (reg_encrypt_const3), R3 + + ;Sample switches and buttons +ex_fisr: xin R0, (reg_btn) + movc R1, (btn_bounce_cnt+1) + movc R2, (btn_bounce_cnt+0) + tst R1 + jnz dec_bounce + tst R2 + jz btn_is_valid +dec_bounce: dec R2 + subc R1, 0 + movc (btn_bounce_cnt+1), R1 + movc (btn_bounce_cnt+0), R2 + movc R1, (btn_last) + xin R0, (reg_btn) + movc (btn_last), R0 + cmp R0, R1 + jeq exit_isr + jmp bounce_wait +btn_is_valid: movc (btn_state), R0 +bounce_wait: mov R1, BTN_BOUNCE_RELOAD'high + movc (btn_bounce_cnt+1), R1 + mov R1, BTN_BOUNCE_RELOAD'low + movc (btn_bounce_cnt+0), R1 +exit_isr: pop R3 + pop R2 + pop R1 + pop R0 + reti + +; ------------------------------------------------- +; AC Read/Write register +; R0 : IN/OUT AC register address 7..0. Written, if cmd was READ (i.e. address[15] = 1) +; R1 : IN/OUT AC register address 15..8. Written, if cmd was READ (i.e. address[15] = 1) +; R2 : IN/OUT AC register data 7..0. Written, if cmd was READ (i.e. address[15] = 1) +; R3 : IN/OUT AC register data 15..8. Written, if cmd was READ (i.e. address[15] = 1) +AC_status_io: call wait_cmd_rdy + xout (reg_cmd_addr+1), R1 + xout (reg_cmd_addr+0), R0 + xout (reg_cmd_data+1), R3 + xout (reg_cmd_data+0), R2 + + ; Check if command was read + and R1, 0x80 + jnz wait_read + ret + + ; Wait for READ command being processed +wait_read: call wait_stat_rdy + + ; Read AC97 Status register address + xin R1, (reg_stat_addr+1) + xin R0, (reg_stat_addr+0) + + ; Read AC97 Status register data + xin R3, (reg_stat_data+1) + xin R2, (reg_stat_data+0) + ret + +; ------------------------------------------------- +wait_cmd_rdy: push R0 +wcr_loop: xin R0, (reg_stat_hw) + and R0, omsk_cmd_rdy + jz wcr_loop + pop R0 + ret + +; ------------------------------------------------- +wait_stat_rdy: push R0 +wsr_loop: xin R0, (reg_stat_hw) + and R0, omsk_stat_rdy + jz wsr_loop + pop R0 + ret + +; ------------------------------------------------- +; PutHexByte +; R0 : Byte value +PutHexByte: call bin2hex + call LCD_writechar + mov R0, R1 + call LCD_writechar + ret + +include "../../../lib/jasm/delays.inc.jsm" +include "../../../lib/jasm/lcd.inc.jsm" +include "../../../lib/jasm/utils.inc.jsm" diff --git a/projects/messe_demo/asm/test.tcl b/projects/messe_demo/asm/test.tcl new file mode 100644 index 0000000..1b63af3 --- /dev/null +++ b/projects/messe_demo/asm/test.tcl @@ -0,0 +1,1775 @@ +# ---------------------------------------------------------------------- +# Project: JCPU, a portable 8-bit RISC CPU written in VHDL +# This file: The ROM file for upload to target over JTAG +# +# Copyright (C) 2007 J. Ahrensfeld +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# For questions and ideas, please contact the author at jens@jayfield.org +# +# --------------------------------------------------------------------- + +# --------------------------------------------------------------------- +# For Chipscope 9.1 +# --------------------------------------------------------------------- +# Source JTAG/TCL frame work +cd $env(CHIPSCOPE)\\bin\\nt +source csejtag.tcl + +namespace import ::chipscope::* + +# Platform USB Cable +set PLATFORM_USB_CABLE_ARGS [list "port=USB2" "frequency=6000000"] +# frequency="24000000 | 12000000 | 6000000 | 3000000 | 1500000 | 750000" + +# Create session +set handle [::chipscope::csejtag_session create 0] + +# Open JTAG and lock +set open_result [::chipscope::csejtag_target open $handle $CSEJTAG_TARGET_PLATFORMUSB 0 $PLATFORM_USB_CABLE_ARGS] +set lock_result [::chipscope::csejtag_target lock $handle 1000] + +set devlist [::chipscope::csejtag_tap autodetect_chain $handle $CSEJTAG_SCAN_DEFAULT] + +# Get Device ID +set devtype "Virtex-4SX" +set devid 2 +set irlength [::chipscope::csejtag_tap get_irlength $handle $devid] +set idcode [::chipscope::csejtag_tap get_device_idcode $handle $devid] + +set CSE_OP $CSEJTAG_SHIFT_READWRITE +set CSE_ES $CSEJTAG_RUN_TEST_IDLE + +# Write Program +# JASM_ROM_INSERT_HERE +# Assembled from test.jsm +# --------------------------------------------------------------- +# Shift the USER2 Instruction (b1111000010) into the Instruction Register of FPGA +# User 1 +set result [::chipscope::csejtag_tap shift_device_ir $handle $devid $CSE_OP $CSE_ES 0 $irlength "3C2"] + +# 0x000: JMP 0x002 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00030002" + +# 0x001: JMP 0x0EA +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "001300EA" + +# 0x002: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00203000" + +# 0x003: MOV R01, 0x02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00303021" + +# 0x004: MOVC (0x04), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0040D040" + +# 0x005: MOVC (0x05), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0050D051" + +# 0x006: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00603000" + +# 0x007: XOUT (0x00), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00724000" + +# 0x008: MOV R00, 0xFF +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00803FF0" + +# 0x009: XOUT (0x11), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00924110" + +# 0x00A: MOV R00, 0x3B +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00A033B0" + +# 0x00B: XOUT (0x12), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00B24120" + +# 0x00C: MOV R00, 0x9C +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00C039C0" + +# 0x00D: XOUT (0x13), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00D24130" + +# 0x00E: MOV R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00E03010" + +# 0x00F: XOUT (0x14), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "00F24140" + +# 0x010: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01003000" + +# 0x011: MOVC (0x08), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0110D080" + +# 0x012: MOVC (0x09), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0120D090" + +# 0x013: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01303000" + +# 0x014: MOVC (0x06), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0140D060" + +# 0x015: MOV R00, 0x04 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01503040" + +# 0x016: MOVC (0x07), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0160D070" + +# 0x017: MOV R00, 0x0A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "017030A0" + +# 0x018: MOVC (0x0A), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0180D0A0" + +# 0x019: MOV R00, 0x0C +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "019030C0" + +# 0x01A: MOVC (0x0B), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01A0D0B0" + +# 0x01B: CALL 0x177 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01B3B177" + +# 0x01C: MOV R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01C03010" + +# 0x01D: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01D3B194" + +# 0x01E: MOV R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01E03001" + +# 0x01F: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "01F3B199" + +# 0x020: MOV R00, 0xC0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02003C00" + +# 0x021: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0213B194" + +# 0x022: MOV R01, 0x11 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02203111" + +# 0x023: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0233B199" + +# 0x024: CALL 0x142 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0243B142" + +# 0x025: XIN R00, (0xA0) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02528A00" + +# 0x026: AND R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02619010" + +# 0x027: JZ 0x025 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02731025" + +# 0x028: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02803000" + +# 0x029: MOV R01, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02903801" + +# 0x02A: MOV R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02A03002" + +# 0x02B: MOV R03, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02B03003" + +# 0x02C: CALL 0x123 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02C3B123" + +# 0x02D: MOVC (0x00), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02D0D000" + +# 0x02E: MOVC (0x01), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02E0D011" + +# 0x02F: MOVC (0x02), R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "02F0D022" + +# 0x030: MOVC (0x03), R03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0300D033" + +# 0x031: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03103000" + +# 0x032: MOV R01, 0xA6 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03203A61" + +# 0x033: MOV R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03303002" + +# 0x034: MOV R03, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03403003" + +# 0x035: CALL 0x123 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0353B123" + +# 0x036: AND R02, 0x0F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "036190F2" + +# 0x037: CMP R02, 0x0F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0370F0F2" + +# 0x038: JNE 0x031 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0383A031" + +# 0x039: MOV R15, 0x09 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0390309F" + +# 0x03A: MOV R07, 0xA3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03A03A37" + +# 0x03B: MOV R08, 0xB5 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03B03B58" + +# 0x03C: MOVX R00, (R07) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03C04070" + +# 0x03D: INC R07 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03D11017" + +# 0x03E: MOVX R01, (R07) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03E04071" + +# 0x03F: INC R07 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "03F11017" + +# 0x040: MOVX R02, (R08) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04004082" + +# 0x041: INC R08 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04111018" + +# 0x042: MOVX R03, (R08) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04204083" + +# 0x043: INC R08 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04311018" + +# 0x044: CALL 0x123 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0443B123" + +# 0x045: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0451501F" + +# 0x046: JNZ 0x03C +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0463203C" + +# 0x047: CALL 0x0A5 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0473B0A5" + +# 0x048: MOV R00, 0xFF +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04803FF0" + +# 0x049: XOUT (0x0E), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "049240E0" + +# 0x04A: MOV R00, 0x40 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04A03400" + +# 0x04B: XOUT (0x0D), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04B240D0" + +# 0x04C: MOV R00, 0xFF +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04C03FF0" + +# 0x04D: XOUT (0x10), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04D24100" + +# 0x04E: MOV R00, 0x40 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04E03400" + +# 0x04F: XOUT (0x0F), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "04F240F0" + +# 0x050: MOV R00, 0x07 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05003070" + +# 0x051: COUT (0x03), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05126030" + +# 0x052: MOVC R00, (0x08) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0520A080" + +# 0x053: TST R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0530F000" + +# 0x054: JNZ 0x057 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05432057" + +# 0x055: MOV R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05503001" + +# 0x056: MOVC (0x0C), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0560D0C1" + +# 0x057: AND R00, 0x10 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05719100" + +# 0x058: JZ 0x091 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05831091" + +# 0x059: MOVC R00, (0x08) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0590A080" + +# 0x05A: CMP R00, 0x14 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05A0F140" + +# 0x05B: JEQ 0x063 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05B39063" + +# 0x05C: CMP R00, 0x11 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05C0F110" + +# 0x05D: JEQ 0x07A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05D3907A" + +# 0x05E: MOVC R01, (0x0C) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05E0A0C1" + +# 0x05F: TST R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "05F0F001" + +# 0x060: JNZ 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06032052" + +# 0x061: CALL 0x0A5 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0613B0A5" + +# 0x062: JMP 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06230052" + +# 0x063: MOVC R00, (0x0A) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0630A0A0" + +# 0x064: CMP R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0640F000" + +# 0x065: JEQ 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06539052" + +# 0x066: DEC R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06615010" + +# 0x067: MOVC (0x0A), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0670D0A0" + +# 0x068: CALL 0x0D6 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0683B0D6" + +# 0x069: MOV R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06903800" + +# 0x06A: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06A3B194" + +# 0x06B: MOV R01, 0x92 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06B03921" + +# 0x06C: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06C3B199" + +# 0x06D: MOV R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06D03800" + +# 0x06E: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06E3B194" + +# 0x06F: MOV R01, 0x88 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "06F03881" + +# 0x070: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0703B199" + +# 0x071: MOV R00, 0x1F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "071031F0" + +# 0x072: MOVC R01, (0x0A) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0720A0A1" + +# 0x073: SUB R00, R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07314010" + +# 0x074: CALL 0x13D +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0743B13D" + +# 0x075: CALL 0x149 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0753B149" + +# 0x076: CALL 0x149 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0763B149" + +# 0x077: MOV R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07703010" + +# 0x078: MOVC (0x0C), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0780D0C0" + +# 0x079: JMP 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07930052" + +# 0x07A: MOVC R00, (0x0A) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07A0A0A0" + +# 0x07B: CMP R00, 0x1F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07B0F1F0" + +# 0x07C: JEQ 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07C39052" + +# 0x07D: INC R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07D11010" + +# 0x07E: MOVC (0x0A), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07E0D0A0" + +# 0x07F: CALL 0x0A5 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "07F3B0A5" + +# 0x080: MOV R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08003800" + +# 0x081: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0813B194" + +# 0x082: MOV R01, 0x92 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08203921" + +# 0x083: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0833B199" + +# 0x084: MOV R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08403800" + +# 0x085: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0853B194" + +# 0x086: MOV R01, 0x88 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08603881" + +# 0x087: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0873B199" + +# 0x088: MOV R00, 0x1F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "088031F0" + +# 0x089: MOVC R01, (0x0A) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0890A0A1" + +# 0x08A: SUB R00, R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08A14010" + +# 0x08B: CALL 0x13D +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08B3B13D" + +# 0x08C: CALL 0x149 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08C3B149" + +# 0x08D: CALL 0x149 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08D3B149" + +# 0x08E: MOV R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08E03010" + +# 0x08F: MOVC (0x0C), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "08F0D0C0" + +# 0x090: JMP 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09030052" + +# 0x091: MOVC R00, (0x08) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0910A080" + +# 0x092: AND R00, 0x09 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09219090" + +# 0x093: JZ 0x09B +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0933109B" + +# 0x094: MOV R01, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09403011" + +# 0x095: AND R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09519010" + +# 0x096: JNE 0x098 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0963A098" + +# 0x097: MOV R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09703001" + +# 0x098: XOUT (0x02), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09824021" + +# 0x099: CALL 0x0B3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0993B0B3" + +# 0x09A: JMP 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09A30052" + +# 0x09B: MOVC R00, (0x08) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09B0A080" + +# 0x09C: AND R00, 0x06 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09C19060" + +# 0x09D: JZ 0x0A4 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09D310A4" + +# 0x09E: MOV R01, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09E03011" + +# 0x09F: AND R00, 0x04 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "09F19040" + +# 0x0A0: JNE 0x0A2 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A03A0A2" + +# 0x0A1: MOV R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A103001" + +# 0x0A2: XOUT (0x02), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A224021" + +# 0x0A3: CALL 0x0C5 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A33B0C5" + +# 0x0A4: JMP 0x052 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A430052" + +# 0x0A5: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A503000" + +# 0x0A6: XOUT (0x01), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A624010" + +# 0x0A7: MOV R00, 0x06 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A703060" + +# 0x0A8: XOUT (0x00), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A824000" + +# 0x0A9: CALL 0x0D6 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0A93B0D6" + +# 0x0AA: MOV R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0AA03800" + +# 0x0AB: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0AB3B194" + +# 0x0AC: MOV R01, 0x22 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0AC03221" + +# 0x0AD: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0AD3B199" + +# 0x0AE: MOV R00, 0xC0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0AE03C00" + +# 0x0AF: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0AF3B194" + +# 0x0B0: MOV R01, 0x33 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B003331" + +# 0x0B1: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B13B199" + +# 0x0B2: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B23E000" + +# 0x0B3: MOV R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B303010" + +# 0x0B4: XOUT (0x01), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B424010" + +# 0x0B5: MOV R00, 0x08 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B503080" + +# 0x0B6: XOUT (0x00), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B624000" + +# 0x0B7: CALL 0x0E0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B73B0E0" + +# 0x0B8: MOV R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B803800" + +# 0x0B9: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0B93B194" + +# 0x0BA: MOV R01, 0x44 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0BA03441" + +# 0x0BB: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0BB3B199" + +# 0x0BC: MOV R01, 0x66 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0BC03661" + +# 0x0BD: XIN R00, (0x02) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0BD28020" + +# 0x0BE: AND R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0BE19010" + +# 0x0BF: JNZ 0x0C1 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0BF320C1" + +# 0x0C0: MOV R01, 0x77 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C003771" + +# 0x0C1: MOV R00, 0xC0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C103C00" + +# 0x0C2: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C23B194" + +# 0x0C3: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C33B199" + +# 0x0C4: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C43E000" + +# 0x0C5: MOV R00, 0x02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C503020" + +# 0x0C6: XOUT (0x01), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C624010" + +# 0x0C7: MOV R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C703010" + +# 0x0C8: XOUT (0x00), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C824000" + +# 0x0C9: CALL 0x0E0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0C93B0E0" + +# 0x0CA: MOV R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0CA03800" + +# 0x0CB: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0CB3B194" + +# 0x0CC: MOV R01, 0x55 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0CC03551" + +# 0x0CD: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0CD3B199" + +# 0x0CE: XIN R00, (0x02) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0CE28020" + +# 0x0CF: AND R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0CF19010" + +# 0x0D0: JNZ 0x0D2 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D0320D2" + +# 0x0D1: MOV R01, 0x77 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D103771" + +# 0x0D2: MOV R00, 0xC0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D203C00" + +# 0x0D3: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D33B194" + +# 0x0D4: CALL 0x199 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D43B199" + +# 0x0D5: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D53E000" + +# 0x0D6: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D603000" + +# 0x0D7: MOV R01, 0x18 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D703181" + +# 0x0D8: MOVC R02, (0x0A) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D80A0A2" + +# 0x0D9: MOVC R03, (0x0A) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0D90A0A3" + +# 0x0DA: CALL 0x123 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0DA3B123" + +# 0x0DB: MOVC (0x00), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0DB0D000" + +# 0x0DC: MOVC (0x01), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0DC0D011" + +# 0x0DD: MOVC (0x02), R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0DD0D022" + +# 0x0DE: MOVC (0x03), R03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0DE0D033" + +# 0x0DF: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0DF3E000" + +# 0x0E0: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E003000" + +# 0x0E1: MOV R01, 0x18 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E103181" + +# 0x0E2: MOVC R02, (0x0B) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E20A0B2" + +# 0x0E3: MOVC R03, (0x0B) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E30A0B3" + +# 0x0E4: CALL 0x123 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E43B123" + +# 0x0E5: MOVC (0x00), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E50D000" + +# 0x0E6: MOVC (0x01), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E60D011" + +# 0x0E7: MOVC (0x02), R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E70D022" + +# 0x0E8: MOVC (0x03), R03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E80D033" + +# 0x0E9: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0E93E000" + +# 0x0EA: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0EA3C000" + +# 0x0EB: PUSH R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0EB3C001" + +# 0x0EC: PUSH R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0EC3C002" + +# 0x0ED: PUSH R03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0ED3C003" + +# 0x0EE: MOVC R00, (0x04) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0EE0A040" + +# 0x0EF: MOVC R01, (0x05) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0EF0A051" + +# 0x0F0: DEC R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F015010" + +# 0x0F1: SUBC R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F117001" + +# 0x0F2: MOVC (0x04), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F20D040" + +# 0x0F3: MOVC (0x05), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F30D051" + +# 0x0F4: TST R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F40F001" + +# 0x0F5: JNZ 0x108 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F532108" + +# 0x0F6: TST R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F60F000" + +# 0x0F7: JNZ 0x108 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F732108" + +# 0x0F8: MOV R00, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F803000" + +# 0x0F9: MOV R01, 0x02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0F903021" + +# 0x0FA: MOVC (0x04), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0FA0D040" + +# 0x0FB: MOVC (0x05), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0FB0D051" + +# 0x0FC: XIN R00, (0x11) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0FC28110" + +# 0x0FD: XIN R01, (0x12) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0FD28121" + +# 0x0FE: XIN R02, (0x13) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0FE28132" + +# 0x0FF: XIN R03, (0x14) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "0FF28143" + +# 0x100: INC R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10011010" + +# 0x101: ADDC R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10113001" + +# 0x102: ADDC R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10213002" + +# 0x103: ADDC R03, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10313003" + +# 0x104: XOUT (0x11), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10424110" + +# 0x105: XOUT (0x12), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10524121" + +# 0x106: XOUT (0x13), R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10624132" + +# 0x107: XOUT (0x14), R03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10724143" + +# 0x108: XIN R00, (0x80) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10828800" + +# 0x109: MOVC R01, (0x07) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1090A071" + +# 0x10A: MOVC R02, (0x06) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10A0A062" + +# 0x10B: TST R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10B0F001" + +# 0x10C: JNZ 0x10F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10C3210F" + +# 0x10D: TST R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10D0F002" + +# 0x10E: JZ 0x119 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10E31119" + +# 0x10F: DEC R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "10F15012" + +# 0x110: SUBC R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11017001" + +# 0x111: MOVC (0x07), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1110D071" + +# 0x112: MOVC (0x06), R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1120D062" + +# 0x113: MOVC R01, (0x09) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1130A091" + +# 0x114: XIN R00, (0x80) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11428800" + +# 0x115: MOVC (0x09), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1150D090" + +# 0x116: CMP R00, R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1160E010" + +# 0x117: JEQ 0x11E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1173911E" + +# 0x118: JMP 0x11A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1183011A" + +# 0x119: MOVC (0x08), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1190D080" + +# 0x11A: MOV R01, 0x04 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11A03041" + +# 0x11B: MOVC (0x07), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11B0D071" + +# 0x11C: MOV R01, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11C03001" + +# 0x11D: MOVC (0x06), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11D0D061" + +# 0x11E: POP R03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11E3D003" + +# 0x11F: POP R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "11F3D002" + +# 0x120: POP R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1203D001" + +# 0x121: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1213D000" + +# 0x122: RETI +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1223F000" + +# 0x123: CALL 0x131 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1233B131" + +# 0x124: XOUT (0x05), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12424051" + +# 0x125: XOUT (0x04), R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12524040" + +# 0x126: XOUT (0x07), R03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12624073" + +# 0x127: XOUT (0x06), R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12724062" + +# 0x128: AND R01, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12819801" + +# 0x129: JNZ 0x12B +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1293212B" + +# 0x12A: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12A3E000" + +# 0x12B: CALL 0x137 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12B3B137" + +# 0x12C: XIN R01, (0x05) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12C28051" + +# 0x12D: XIN R00, (0x04) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12D28040" + +# 0x12E: XIN R03, (0x07) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12E28073" + +# 0x12F: XIN R02, (0x06) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "12F28062" + +# 0x130: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1303E000" + +# 0x131: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1313C000" + +# 0x132: XIN R00, (0xA0) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13228A00" + +# 0x133: AND R00, 0x02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13319020" + +# 0x134: JZ 0x132 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13431132" + +# 0x135: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1353D000" + +# 0x136: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1363E000" + +# 0x137: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1373C000" + +# 0x138: XIN R00, (0xA0) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13828A00" + +# 0x139: AND R00, 0x04 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13919040" + +# 0x13A: JZ 0x138 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13A31138" + +# 0x13B: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13B3D000" + +# 0x13C: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13C3E000" + +# 0x13D: CALL 0x1EE +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13D3B1EE" + +# 0x13E: CALL 0x1AB +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13E3B1AB" + +# 0x13F: MOV R00, R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "13F02010" + +# 0x140: CALL 0x1AB +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1403B1AB" + +# 0x141: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1413E000" + +# 0x142: PUSH R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1423C00F" + +# 0x143: MOV R15, 0x0A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "143030AF" + +# 0x144: CALL 0x149 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1443B149" + +# 0x145: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1451501F" + +# 0x146: JNZ 0x144 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "14632144" + +# 0x147: POP R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1473D00F" + +# 0x148: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1483E000" + +# 0x149: PUSH R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1493C00F" + +# 0x14A: MOV R15, 0x0A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "14A030AF" + +# 0x14B: CALL 0x150 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "14B3B150" + +# 0x14C: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "14C1501F" + +# 0x14D: JNZ 0x14B +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "14D3214B" + +# 0x14E: POP R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "14E3D00F" + +# 0x14F: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "14F3E000" + +# 0x150: PUSH R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1503C00F" + +# 0x151: MOV R15, 0x0A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "151030AF" + +# 0x152: CALL 0x157 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1523B157" + +# 0x153: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1531501F" + +# 0x154: JNZ 0x152 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "15432152" + +# 0x155: POP R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1553D00F" + +# 0x156: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1563E000" + +# 0x157: PUSH R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1573C00F" + +# 0x158: MOV R15, 0x0A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "158030AF" + +# 0x159: CALL 0x15E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1593B15E" + +# 0x15A: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "15A1501F" + +# 0x15B: JNZ 0x159 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "15B32159" + +# 0x15C: POP R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "15C3D00F" + +# 0x15D: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "15D3E000" + +# 0x15E: PUSH R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "15E3C00F" + +# 0x15F: MOV R15, 0x0A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "15F030AF" + +# 0x160: CALL 0x165 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1603B165" + +# 0x161: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1611501F" + +# 0x162: JNZ 0x160 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16232160" + +# 0x163: POP R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1633D00F" + +# 0x164: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1643E000" + +# 0x165: PUSH R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1653C00F" + +# 0x166: MOV R15, 0x63 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1660363F" + +# 0x167: NOP +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16700000" + +# 0x168: NOP +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16800000" + +# 0x169: NOP +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16900000" + +# 0x16A: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16A1501F" + +# 0x16B: JNZ 0x167 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16B32167" + +# 0x16C: POP R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16C3D00F" + +# 0x16D: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16D3E000" + +# 0x16E: PUSH R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16E3C00F" + +# 0x16F: MOV R15, 0x09 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "16F0309F" + +# 0x170: NOP +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17000000" + +# 0x171: NOP +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17100000" + +# 0x172: NOP +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17200000" + +# 0x173: DEC R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1731501F" + +# 0x174: JNZ 0x170 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17432170" + +# 0x175: POP R15 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1753D00F" + +# 0x176: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1763E000" + +# 0x177: MOV R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17703002" + +# 0x178: MOV R00, 0x03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17803030" + +# 0x179: CALL 0x1C3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1793B1C3" + +# 0x17A: CALL 0x150 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17A3B150" + +# 0x17B: MOV R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17B03002" + +# 0x17C: MOV R00, 0x03 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17C03030" + +# 0x17D: CALL 0x1C3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17D3B1C3" + +# 0x17E: CALL 0x150 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17E3B150" + +# 0x17F: MOV R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "17F03002" + +# 0x180: MOV R00, 0x02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18003020" + +# 0x181: CALL 0x1C3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1813B1C3" + +# 0x182: CALL 0x157 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1823B157" + +# 0x183: MOV R00, 0x28 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18303280" + +# 0x184: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1843B194" + +# 0x185: MOV R00, 0x0C +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "185030C0" + +# 0x186: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1863B194" + +# 0x187: MOV R00, 0x06 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18703060" + +# 0x188: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1883B194" + +# 0x189: MOV R00, 0x01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18903010" + +# 0x18A: CALL 0x194 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18A3B194" + +# 0x18B: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18B3E000" + +# 0x18C: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18C3C000" + +# 0x18D: CALL 0x1B7 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18D3B1B7" + +# 0x18E: AND R00, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18E19800" + +# 0x18F: JZ 0x192 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "18F31192" + +# 0x190: CALL 0x16E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1903B16E" + +# 0x191: JMP 0x18D +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1913018D" + +# 0x192: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1923D000" + +# 0x193: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1933E000" + +# 0x194: PUSH R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1943C002" + +# 0x195: MOV R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "19503002" + +# 0x196: CALL 0x1B0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1963B1B0" + +# 0x197: POP R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1973D002" + +# 0x198: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1983E000" + +# 0x199: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1993C000" + +# 0x19A: MOVX R00, (R01) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "19A04010" + +# 0x19B: INC R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "19B11011" + +# 0x19C: TST R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "19C0F000" + +# 0x19D: JZ 0x1A0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "19D311A0" + +# 0x19E: CALL 0x1AB +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "19E3B1AB" + +# 0x19F: JMP 0x19A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "19F3019A" + +# 0x1A0: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A03D000" + +# 0x1A1: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A13E000" + +# 0x1A2: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A23C000" + +# 0x1A3: MOVC R00, (R01) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A309010" + +# 0x1A4: INC R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A411011" + +# 0x1A5: TST R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A50F000" + +# 0x1A6: JZ 0x1A9 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A6311A9" + +# 0x1A7: CALL 0x1AB +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A73B1AB" + +# 0x1A8: JMP 0x1A3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A8301A3" + +# 0x1A9: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1A93D000" + +# 0x1AA: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1AA3E000" + +# 0x1AB: PUSH R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1AB3C002" + +# 0x1AC: MOV R02, 0x40 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1AC03402" + +# 0x1AD: CALL 0x1B0 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1AD3B1B0" + +# 0x1AE: POP R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1AE3D002" + +# 0x1AF: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1AF3E000" + +# 0x1B0: CALL 0x18C +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B03B18C" + +# 0x1B1: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B13C000" + +# 0x1B2: SWAP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B22A000" + +# 0x1B3: CALL 0x1C3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B33B1C3" + +# 0x1B4: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B43D000" + +# 0x1B5: CALL 0x1C3 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B53B1C3" + +# 0x1B6: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B63E000" + +# 0x1B7: PUSH R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B73C002" + +# 0x1B8: MOV R02, 0x00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B803002" + +# 0x1B9: CALL 0x1BC +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1B93B1BC" + +# 0x1BA: POP R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1BA3D002" + +# 0x1BB: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1BB3E000" + +# 0x1BC: CALL 0x1D6 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1BC3B1D6" + +# 0x1BD: SWAP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1BD2A000" + +# 0x1BE: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1BE3C000" + +# 0x1BF: CALL 0x1D6 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1BF3B1D6" + +# 0x1C0: POP R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C03D002" + +# 0x1C1: OR R00, R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C11A020" + +# 0x1C2: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C23E000" + +# 0x1C3: PUSH R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C33C001" + +# 0x1C4: AND R00, 0x0F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C4190F0" + +# 0x1C5: MOV R01, R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C502001" + +# 0x1C6: OR R01, R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C61A021" + +# 0x1C7: XOUT (0x08), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C724081" + +# 0x1C8: CALL 0x16E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C83B16E" + +# 0x1C9: MOV R01, R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1C902001" + +# 0x1CA: OR R01, R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1CA1A021" + +# 0x1CB: OR R01, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1CB1B801" + +# 0x1CC: XOUT (0x08), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1CC24081" + +# 0x1CD: CALL 0x16E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1CD3B16E" + +# 0x1CE: MOV R01, R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1CE02001" + +# 0x1CF: OR R01, R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1CF1A021" + +# 0x1D0: XOUT (0x08), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D024081" + +# 0x1D1: CALL 0x16E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D13B16E" + +# 0x1D2: OR R01, 0x20 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D21B201" + +# 0x1D3: XOUT (0x08), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D324081" + +# 0x1D4: POP R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D43D001" + +# 0x1D5: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D53E000" + +# 0x1D6: PUSH R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D63C001" + +# 0x1D7: MOV R01, 0x20 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D703201" + +# 0x1D8: OR R01, R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D81A021" + +# 0x1D9: XOUT (0x08), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1D924081" + +# 0x1DA: CALL 0x16E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1DA3B16E" + +# 0x1DB: MOV R01, 0x20 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1DB03201" + +# 0x1DC: OR R01, R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1DC1A021" + +# 0x1DD: OR R01, 0x80 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1DD1B801" + +# 0x1DE: XOUT (0x08), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1DE24081" + +# 0x1DF: CALL 0x16E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1DF3B16E" + +# 0x1E0: XIN R00, (0x08) +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E028080" + +# 0x1E1: AND R00, 0x0F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E1190F0" + +# 0x1E2: MOV R01, 0x20 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E203201" + +# 0x1E3: OR R01, R02 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E31A021" + +# 0x1E4: XOUT (0x08), R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E424081" + +# 0x1E5: CALL 0x16E +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E53B16E" + +# 0x1E6: POP R01 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E63D001" + +# 0x1E7: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E73E000" + +# 0x1E8: AND R00, 0x0F +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E8190F0" + +# 0x1E9: CMP R00, 0x0A +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1E90F0A0" + +# 0x1EA: JLT 0x1EC +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1EA351EC" + +# 0x1EB: ADD R00, 0x07 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1EB11070" + +# 0x1EC: ADD R00, 0x30 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1EC11300" + +# 0x1ED: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1ED3E000" + +# 0x1EE: PUSH R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1EE3C000" + +# 0x1EF: CALL 0x1E8 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1EF3B1E8" + +# 0x1F0: MOV R01, R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1F002001" + +# 0x1F1: POP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1F13D000" + +# 0x1F2: SWAP R00 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1F22A000" + +# 0x1F3: CALL 0x1E8 +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1F33B1E8" + +# 0x1F4: RET +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 32 "1F43E000" + +# Assembled from test.jsm +# --------------------------------------------------------------- +# Shift the USER2 Instruction (b1111000011) into the Instruction Register of FPGA +# User 2 +set result [::chipscope::csejtag_tap shift_device_ir $handle $devid $CSE_OP $CSE_ES 0 $irlength "3C3"] + +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0044" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0153" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0249" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0320" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0447" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "056D" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0662" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0748" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0820" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0942" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0A72" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0B65" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0C6D" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0D65" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0E6E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "0F20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1000" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "114F" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1263" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1374" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "146F" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1562" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1665" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1772" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1820" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1932" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1A30" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1B30" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1C37" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1D20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1E20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "1F20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2020" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2100" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2220" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2320" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2420" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2545" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "266E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2763" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2872" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2979" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2A70" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2B74" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2C69" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2D6F" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2E6E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "2F20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3020" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3120" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3200" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3320" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3420" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3520" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3620" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3720" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3842" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3979" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3A70" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3B61" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3C73" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3D73" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3E20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "3F20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4020" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4120" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4220" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4300" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4445" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4543" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4642" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "472D" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4831" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4932" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4A38" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4B20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4C65" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4D6E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4E63" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "4F72" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5079" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5170" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5274" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "532E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5400" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5543" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5642" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5743" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "582D" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5931" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5A32" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5B38" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5C20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5D65" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5E6E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "5F63" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6072" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6179" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6270" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6374" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "642E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6500" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6620" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6720" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6820" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6941" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6A75" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6B64" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6C69" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6D6F" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6E20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "6F64" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7061" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7174" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7261" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7320" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7420" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7520" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7600" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7720" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7849" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "796E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7A63" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7B72" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7C65" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7D6D" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7E2E" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "7F20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8062" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "816C" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "826F" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8363" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "846B" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8573" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8620" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8700" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8856" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "896F" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8A6C" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8B75" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8C6D" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8D65" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8E20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "8F3A" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9020" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9100" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9220" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9320" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9420" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9520" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9620" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9720" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9820" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9920" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9A20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9B20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9C20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9D20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9E20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "9F20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A020" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A120" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A200" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A300" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A42A" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A500" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A61A" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A700" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A81C" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "A900" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "AA2C" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "AB00" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "AC32" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "AD00" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "AE20" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "AF00" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B002" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B100" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B204" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B300" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B418" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B501" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B600" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B704" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B804" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "B900" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "BA00" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "BB80" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "BCBB" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "BD80" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "BEBB" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "BF00" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "C080" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "C100" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "C200" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "C300" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "C480" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "C50A" +::chipscope::csejtag_tap shift_device_dr $handle $devid $CSE_OP $CSE_ES 0 16 "C60A" + +::chipscope::csejtag_target unlock $handle +::chipscope::csejtag_target close $handle +::chipscope::csejtag_session destroy $handle +exit diff --git a/projects/messe_demo/netlists/cbc_128_encryption_core.ngc b/projects/messe_demo/netlists/cbc_128_encryption_core.ngc new file mode 100644 index 0000000..4645a13 --- /dev/null +++ b/projects/messe_demo/netlists/cbc_128_encryption_core.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$`d`1=789:27=>?0123452739:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?012345678=1;<=:=;107?543>=1;>KH;;17307=70=:0<5OJ7@46AD@3=?4:36>LHW]]0JHI\N<0694;7338?1EC^ZT;CG@WD;9=0;29>417@A11D78O8O54:>6961A3DA8M22M<6LDG0;10EBM02<=H7M95:F@<0>9833J5K>4:3F@77<:=:0>8J>8C4G0008770;877:1<27>552F__\XZ5DN@?74<768h0??4@UURVP?khllUdSiazt=12>5833:98>95<7342=>5=AGZ^X7ejy^k\o`Xam696=0>a:19MKVR\3gdhhQf_jgz[lb;:3:5=6:;;52341=3<=?:=6:5IORVP?BNXH686=0>1:69MKVR\3NB\O2<:1<24>2=AGZ^X7YJA=194;773=0BB][[:VGA86<7688087AZTQWW>AIWI591<3?=;58LQQVR\3ND\O2<:1<7?02AM=1>5;O>;76825G7<2<=J;:468;505=1J1K:?=??3CFBBF77:9L8JNO7F0G1GA67>=?I?O6?54:F0C17IM9IO5M?0@@G<<633?IHO9>46DFE307DM195>>215:E53>>82H??=L7162167C0>;M=H;N526@GC14N:<9:4=IDC51?2>382=O5440510>M88=H;98B@5F414E9><:54;<821@FGCEK1H;J80;I<71::1?=6331:;<9>485;G>==8;JD@@:AA@C=9>3;=8L93@5203CKJ?HM9J;17;;2=>1>=L=J59=169;>LHW]]0xnajPi^fjj91=87;<754FNQWW>vdklVcT|b}37;2=5>?330:;59568EA74>?B9MI:4;L65616246BN?:88589B41F35>F0KHO8O?I75FGA=E1J=K==N89B@ATF48;556OKDSC?578>3HNO^L2>3?`8EABUI5;?6=06;@FGVD:6<720MIJ]A=3=<>GCL[K7>364AEFQE95902KOH_O34?:8EABUI5?546OKDSC?2;>GCL[H7<374AEFQF977601JHI\M<03==>GCL[H7=?06;@FGVG:6;7h0MIJ]B=37>58>3HNO^O2>4?:8EABUJ5;546OKDS@?6;>GCL[H7:364AEFQF91902KOH_L38?:8EABUJ535>6L74:@B55>E7?;K?5NOIA3F7EA@7<>?2JL9KC8:1GD11IKNO?89=7E26;3C@5N0H3>>7J36AEFA1A;1;2IL=;0CD0::O9;O?9401?FC382IM95:L4@1:F@EE>H?INKK<28@0@35E=;K;9L8J1C3B6F>48090OAE;;BNHE1=DDBH27NABMHVWAA1;E63?A4A;OL:5H;0@165D>>N:I><:H?2G;71=34;=N??KLNADDG416L<=DB6E<407?:;29I8;3E5FE2E39>>?5:;IEB304FEC:2NM:6JFA=2=3>BNI5;;2:5KI@>25;169GMD:6=7=0HDO317<4?AOF48=5;6JFA=3;:2=CAH6:5384DHC?5;1=08;EKB8779?2NBM1<=>69GMD:5;7=0HDO325<4?AOF4;?5;6JFA=05:2=CAH69;394DHC?6=803MCJ0?716:FJE949?2NBM1=?>89GMD:493:5;6JFA=12:3=CAH682;5KI@>7:3=CAH6>2;5KI@>5:3=CAH6<2;5KI@>;:3=CAH622;5KIC>3:2=CAK6:<394DH@?54803MCI0<<17:FJF9746>1OEO2>4?58@LD;9<4<7IGM<04=3>BNJ5;<2:5KIC>2<;117:FJF9466>1OEO2=2?58@LD;::4<7IGM<36=3>BNJ58>2:5KIC>12;1:08;EKA87>9?2NBN1<6>79GMG:56>1OEO2<0?;8@LD;;80;2:5KIC>05;0BNXH682:5KIQ@?4;1BHI5;;2:5KO@>25;169GKD:6=7=0HBO317<4?AIF48=5;6J@A=3;:2=CGH6:5384DNC?5;1=08;EMB8779?2NDM1<=>69GKD:5;7=0HBO325<4?AIF4;?5;6J@A=05:2=CGH69;394DNC?6=803MEJ0?716:FLE949?2NDM1=?>89GKD:493:5;6J@A=12:3=CGH682;5KO@>7:3=CGH6>2;5KO@>5:3=CGH6<2;5KO@>;:3=CGH622:5KO@]QAB01OCO2>3?58@JD;9=4<7IAM<07=3>BHJ5;=2:5KOC>23;12NDN1?17:FLF9476>1OCO2=1?58@JD;:;4<7IAM<31=3>BHJ58?2:5KOC>11;1;08;EMA8719?2NDN1<7>69GKG:517<0HBL32?58@JD;;9427IAM<2394;11OC]O31?58@JVF4;427IA_A=194;108;EMSF969?2ND\O2>>69GKUD;:730HB^M<283:2=CGYH7?3?4E39F07=BN=:0IK7LC8;0=C1FM<8OO22O8<61E525D@6<>>0J;>94:D;E=25IDR68BAUB:2LN86HJ0568BC66<2LM@A?O>0JKKI1:E0?BHC92C?7D =739J47=N9;1B>?5F399JJLRWW9:37D@FTQ]35==NF@^[S=<7;HLJPUY7;11BBDZ__16;?LHN\YU;955FNHVS[50?3@DBX]Q?789JJLRT\H^N;6GAIU]342=NF@^T<<94IOKW[5403@DBXR><7:KMMQY7<>1BBDZP0458MKOSW9<<7D@FT^243>OIA]U;4:5FNHV\4<11BBDZP1458MKOSW8<<7D@FT^343>OIA]U:4:5FNHV\5<1C69JJLRX9M=0ECG[_0G4?LHN\V;M;6GAIU]142=NF@^T><94IOKW[7403@DBXR<<7:KMMQY5<>1BBDZP2458MKOSW;<<7D@FT^043>OIA]U94:5FNHV\6<11BBDZP3458MKOSW:<<7D@FT^143>OIA]U84:5FNHV\7<1O8;HLJPZ5E?2CEEYQOIA]UI?6GAV008MKPBZ]UH@FQKO@]QAB753@D]I_ZPCMI\@JDXZLM97AA8;MMDMFGK<2F^X<:4LTV12>JR\;UO:6BZT3]O0>JR\:<0@XZ<_M68HPR3>2F^X9QK6:NVP1YK=2G^TK;=;O21?K733G8?;>5A3918J6?43G>??6@:029M172?>:4N4170>H2;<>0B8=94:L67228<:4N4610>H2<:>0B8:;4:L6002=86@:4668J02?<2D>84:4N4730>H2=8>0B8;=4:L61629::4N47;0>H2=0>0B88?4:L6242:8:4N44:0>H2?8>0B87;4:L6=32H181>0B;??4:L5572H08=>0B:>:4:L4432:<86@80968J26><2D<==:4N6320>H09;>0B:?<4:L4512;>86@81768J270<2D<=5:4N63:0>H0:9>0B:<>4:L46628>86@82668J24><2DH0;<>0B:=84:L47<2>:86@84268J222<2D<8::4N66:0>H0=8>0B:;<4:L4102?<86@85868J206<2D<:>:4N6460>H0>>>0B:864:L4342=886@87468J210<2D<;4:4N6:20>H00:>0B:6:4:L4<222286@89068J2?4<2D<58:4N6;40>H010>0B5>>4:L;46286@70668J=6><2D3=<:4N9300>H?9<>0B5?84:L;5<2::4N90:0>H?;8>0B5=<4:L;71286@73758J@RPG[A?7CAAE09L5>V33YKYXl5_IO]AQVOCPk1[ECQMURLBI@7TFEVOSXH@\INL\Ec=UIDUNTYKASHMM[Gg1X^[OC_C68WVTF<2YX^O:4TXRFg>STM[U]E^GMLD18RFE>3_CN[RZVPD48S@G;87<0[HO31?48S@G;:720[HO33;2=2>QBI595:6YJB=2=2>QBJ5;5:6YJB=0=<>QBJ591<384WD@?7;e<_[C_IRC@DD]Bg>QUA]OTABJJ_Cf8SWOSMV]BHYFPAe9TVLRBW^COXEQM1e9[MIOIP$RON->!1!QWQG&7&8*J_NGF6:ZPPIOE?2RXXRIAD69[WQYQKJ<0TilPIe33?]bjWDkacXjrrklj46Xmgiyu}zfoo]`kwc682iioRc`dd-\j562:8;;7nll_lmga*Yi89?8=<>4cca\ijbb'Vd;<8:>119`ffYjgmo$Sc>?54324>eekVgdhh!Pn12624773jhhS`ake.]m453098:0oomPmnff+Zh78<2:==5lbb]nkac(Wg:;94?>0:aagZkhll%Tb=>90033?fddWdeoi"Qa0142546:;:<6mmc^ol``)Xf9:=84cca\ijbb'Vd;<:>>119`ffYjgmo$Sc>?70324>eekVgdhh!Pn12464773jhhS`ake.]m451498:0oomPmnff+Zh78>>:==5lbb]nkac(Wg:;;8?>0:aagZkhll%Tb=>86033?fddWdeoi"Qa01545466991hnnQboeg,[k67?0;:<6mmc^ol``)Xf9:3<1028ggeXefnn#R`?090255=djjUfcik _o23<67682iioRc`dd-\j56?<8;;7nll_lmga*Yi892>=<>4cca\ijbb'Vd;<58>119`ffYjgmo$Sc>?86324>eekVgdhh!Pn12;<4773jhhS`ake.]m45>>98:0oomPmnff+Zh780::==5lbb]nkac(Wg:;50:aagZkhll%Tb=>62033?fddWdeoi"Qa01;05464cca\ijbb'Vd;==<>119`ffYjgmo$Sc>>02324>eekVgdhh!Pn13304773jhhS`ake.]m446298:0oomPmnff+Zh799<:==5lbb]nkac(Wg::<:?>0:aagZkhll%Tb=??8033?fddWdeoi"Qa002:5468;;7nll_lmga*Yi88;<=<>4cca\ijbb'Vd;=<6>119`ffYjgmo$Sc>>18324>eekVgdhh!Pn13144773jhhS`ake.]m444698:0oomPmnff+Zh79;8:==5lbb]nkac(Wg::>>?>0:aagZkhll%Tb=?=4033?fddWdeoi"Qa0006546;:<6mmc^ol``)Xf9;944cca\ijbb'Vd;=>:>119`ffYjgmo$Sc>>34324>eekVgdhh!Pn13024773jhhS`ake.]m445098:0oomPmnff+Zh79:2:==5lbb]nkac(Wg::?4?>0:aagZkhll%Tb=?;0033?fddWdeoi"Qa00625461032[C723jhhS`ake.]m44?698;:SJh4cca\ijbb'Vd;=4<>3:aagZkhll%Tb=?62^QT4456mmc^ol``)Xf9;2?99>159`ffYjgmo$Sc>>92645Z@6<2iioRc`dd-\j57>;==:SJ??;b``[hicm&Ue<<7<6048ggeXefnn#R`?181\idv281l0oomPmnff+Zh790?:<6mmc^ol``)Xf9;290:aagZkhll%Tb=?660d8ggeXefnn#R`?21624>eekVgdhh!Pn10304723jhhS`ake.ol``YhWkxu8:aagZkhll%ySnll_g`\wmt;87;j7nll_lmga*tXkkiTjoQ|hs>24586i2iioRc`dd-q[fddWohTe|3113=5d=djjUfcik r^aagZ`eWzby0<>=>0c8ggeXefnn#Qlbb]efZuoz5;;?3?n;b``[hicm&xToomPfc]plw:68=4:m6mmc^ol``)uWjhhSklPsip?55399h1hnnQboeg,vZeekVliS~f}<025:4ga:aagZkhll%ySnll_g`\wmt;9935=45lbb]nkac(zViioRhm_rjq84699h1hnnQboeg,vZeekVliS~f}<033:4g1?3b?fddWdeoi"|Pcca\bgYt`{6:=?0>a:aagZkhll%ySnll_g`\wmt;9895=l5lbb]nkac(zViioRhm_rjq847368k0oomPmnff+wYdjjUmnR}gr=321;7f3jhhS`ake.p\ggeXnkUxd2>17<2e>eekVgdhh!}_b``[cdX{ax7=<911`9`ffYjgmo$~Rmmc^da[vnu48;3225;7f3jhhS`ake.p\ggeXnkUxd2>21<2e>eekVgdhh!}_b``[cdX{ax7=??11`9`ffYjgmo$~Rmmc^da[vnu4889226186i2iioRc`dd-q[fddWohTe|3137=5d=djjUfcik r^aagZ`eWzby0<<9>0c8ggeXefnn#Qlbb]efZuoz5;9;3?6;b``[hicm&xToomPfc]plw:6:7;27nll_lmga*tXkkiTjoQ|hs>27;7>3jhhS`ake.p\ggeXnkUxd2>4?3:?fddWdeoi"|Pcca\bgYt`{6:93?6;b``[hicm&xToomPfc]plw:6>7;27nll_lmga*tXkkiTjoQ|hs>23;7>3jhhS`ake.p\ggeXnkUxd2>8?3:?fddWdeoi"|Pcca\bgYt`{6:53?7;b``[hicm&xToomPfc]plw:66830oomPmnff+wYdjjUmnR}gr=03:4?>0;8ggeXefnn#Qlbb]efZuoz5892<74cca\ijbb'{UhnnQib^qkv9446830oomPmnff+wYdjjUmnR}gr=07:4?0;8ggeXefnn#Qlbb]efZuoz58=2<74cca\ijbb'{UhnnQib^qkv9406830oomPmnff+wYdjjUmnR}gr=0;:4?0:8ggeXefnn#Qlbb]efZuoz585=45lbb]nkac(zViioRhm_rjq8669901hnnQboeg,vZeekVliS~f}<23=5<=djjUfcik r^aagZ`eWzby0><1189`ffYjgmo$~Rmmc^da[vnu4:95=45lbb]nkac(zViioRhm_rjq8629901hnnQboeg,vZeekVliS~f}<27=5<=djjUfcik r^aagZ`eWzby0>81189`ffYjgmo$~Rmmc^da[vnu4:=5=45lbb]nkac(zViioRhm_rjq86>9901hnnQboeg,vZeekVliS~f}<2;=5==djjUfcik r^aagZ`eWzby0>0>9:aagZkhll%ySnll_g`\wmt;<94:56mmc^ol``)uWjhhSklPsip?048612iioRc`dd-q[fddWohTe|343<2=>eekVgdhh!}_b``[cdX{ax78>0>9:aagZkhll%ySnll_g`\wmt;<=4:56mmc^ol``)uWjhhSklPsip?008612iioRc`dd-q[fddWohTe|347<2=>eekVgdhh!}_b``[cdX{ax78:0>9:aagZkhll%ySnll_g`\wmt;<14:56mmc^ol``)uWjhhSklPsip?0<8602iioRc`dd-q[fddWohTe|34?3:?fddWdeoi"|Pcca\bgYt`{6><3?6;b``[hicm&xToomPfc]plw:297;27nll_lmga*tXkkiTjoQ|hs>66;7>3jhhS`ake.p\ggeXnkUxd2:3?3:?fddWdeoi"|Pcca\bgYt`{6>83?6;b``[hicm&xToomPfc]plw:2=7;27nll_lmga*tXkkiTjoQ|hs>62;7>3jhhS`ake.p\ggeXnkUxd2:7?3:?fddWdeoi"|Pcca\bgYt`{6>43?6;b``[hicm&xToomPfc]plw:217;37nll_lmga*tXkkiTjoQ|hs>6:4?0;8ggeXefnn#Qlbb]efZuoz5<:2<74cca\ijbb'{UhnnQib^qkv9056830oomPmnff+wYdjjUmnR}gr=40:4?0;8ggeXefnn#Qlbb]efZuoz5<>2<74cca\ijbb'{UhnnQib^qkv9016830oomPmnff+wYdjjUmnR}gr=44:4?0;8ggeXefnn#Qlbb]efZuoz5<22<64cca\ijbb'{UhnnQib^qkv909901hnnQboeg,vZeekVliS~f}<62=5<=djjUfcik r^aagZ`eWzby0:?1189`ffYjgmo$~Rmmc^da[vnu4>85=45lbb]nkac(zViioRhm_rjq8259901hnnQboeg,vZeekVliS~f}<66=5<=djjUfcik r^aagZ`eWzby0:;1189`ffYjgmo$~Rmmc^da[vnu4><5=45lbb]nkac(zViioRhm_rjq8219901hnnQboeg,vZeekVliS~f}<6:=5<=djjUfcik r^aagZ`eWzby0:71199`ffYjgmo$~Rmmc^da[vnu4>4:56mmc^ol``)uWjhhSklPsip?<58612iioRc`dd-q[fddWohTe|380<2=>eekVgdhh!}_b``[cdX{ax74?0>9:aagZkhll%ySnll_g`\wmt;0:4:56mmc^ol``)uWjhhSklPsip?<18612iioRc`dd-q[fddWohTe|384<2=>eekVgdhh!}_b``[cdX{ax74;0>9:aagZkhll%ySnll_g`\wmt;0>4:56mmc^ol``)uWjhhSklPsip?<=8612iioRc`dd-q[fddWohTe|388<2<>eekVgdhh!}_b``[cdX{ax743?6;b``[hicm&xToomPfc]plw:>87;27nll_lmga*tXkkiTjoQ|hs>:5;7>3jhhS`ake.p\ggeXnkUxd262?3:?fddWdeoi"|Pcca\bgYt`{62?3?6;b``[hicm&xToomPfc]plw:><7;27nll_lmga*tXkkiTjoQ|hs>:1;7>3jhhS`ake.p\ggeXnkUxd266?3:?fddWdeoi"|Pcca\bgYt`{62;3?6;b``[hicm&xToomPfc]plw:>07;27nll_lmga*tXkkiTjoQ|hs>:=;7?3jhhS`ake.p\ggeXnkUxd26>058ggeXefnn#Qlbb]efZuozV::m6mmc^ol``)uWjhhSklPsip\4Zts9>1hnnQboeg,vZeekVliS~f}_03;?fddWdeoi"|Pcca\bgYt`{U:<<74cca\ijbb'{UhnnQib^qkvZ778830oomPmnff+wYdjjUmnR}gr^3354?eekVgdhh!}_b``[cdX{axT=3jhhS`ake.p\ggeXnkUxdQ>133:?fddWdeoi"|Pcca\bgYt`{U:=>?6;b``[hicm&xToomPfc]plwY69=;27nll_lmga*tXkkiTjoQ|hs]2507>3jhhS`ake.p\ggeXnkUxdQ>173:?fddWdeoi"|Pcca\bgYt`{U:=:?6;b``[hicm&xToomPfc]plwY691;27nll_lmga*tXkkiTjoQ|hs]25<7e3jhhS`ake.p\ggeXnkUxdQ>1^pw5==djjUfcik r^aagZ`eWzbyS<<>9:aagZkhll%ySnll_g`\wmtX9;::56mmc^ol``)uWjhhSklPsip\577612iioRc`dd-q[fddWohTe|P1302=>eekVgdhh!}_b``[cdX{axT=?=>9:aagZkhll%ySnll_g`\wmtX9;>:56mmc^ol``)uWjhhSklPsip\573612iioRc`dd-q[fddWohTe|P1342=>eekVgdhh!}_b``[cdX{axT=?9>b:aagZkhll%ySnll_g`\wmtX9;Uyx<64cca\ijbb'{UhnnQib^qkvZ749k1hnnQboeg,vZeekVliS~f}_01\vq7?3jhhS`ake.p\ggeXnkUxdQ>40`8ggeXefnn#Qlbb]efZuozV;?Sz>8:aagZkhll%ySnll_g`\wmtX9<;i7nll_lmga*tXkkiTjoQ|hs]21Zts911hnnQboeg,vZeekVliS~f}_042f>eekVgdhh!}_b``[cdX{axT=;Q}t0:8ggeXefnn#Qlbb]efZuozV;<=o5lbb]nkac(zViioRhm_rjq[41Xz};37nll_lmga*tXkkiTjoQ|hs]2<4deekVgdhh!}_b``[cdX{axT=4?m;b``[hicm&xToomPfc]plwY61Vx=l5lbb]nkac(zViioRhm_rjq[4Yu|8=0oomPmnff+wYdjjUmnR}gr^02<>eekVgdhh!}_b``[cdX{axT>=?m;b``[hicm&xToomPfc]plwY58Vx=55lbb]nkac(zViioRhm_rjq[776j2iioRc`dd-q[fddWohTe|P20]qp4>b:aagZkhll%ySnll_g`\wmtX:0Uyx>>b:aagZkhll%ySnll_g`\wmtX;9Uyx<64cca\ijbb'{UhnnQib^qkvZ569k1hnnQboeg,vZeekVliS~f}_23\vq7?3jhhS`ake.p\ggeXnkUxdQ<20:8ggeXefnn#Qlbb]efZuozV98=55lbb]nkac(zViioRhm_rjq[62602iioRc`dd-q[fddWohTe|P343;?fddWdeoi"|Pcca\bgYt`{U8:<64cca\ijbb'{UhnnQib^qkvZ50911hnnQboeg,vZeekVliS~f}_2:2<>eekVgdhh!}_b``[cdX{axT?4?n;b``[hicm&xToomPfc]plwY4W{~:;6mmc^ol``)uWjhhSklPsip\04>?=55lbb]nkac(zViioRhm_rjq[13602iioRc`dd-q[fddWohTe|P473;?fddWdeoi"|Pcca\bgYt`{U?;<64cca\ijbb'{UhnnQib^qkvZ2?911hnnQboeg,vZeekVliS~f}_5;2e>eekVgdhh!}_b``[cdX{axT8R|{169`ffYjgmo$~Rmmc^da[vnuW<;37nll_lmga*tXkkiTjoQ|hs]644>199`ffYjgmo$~Rmmc^da[vnuW<8:46mmc^ol``)uWjhhSklPsip\167?3jhhS`ake.p\ggeXnkUxdQ:40:8ggeXefnn#Qlbb]efZuozV?>=55lbb]nkac(zViioRhm_rjq[00602iioRc`dd-q[fddWohTe|P563;?fddWdeoi"|Pcca\bgYt`{U>4<64cca\ijbb'{UhnnQib^qkvZ3>9h1hnnQboeg,vZeekVliS~f}_4]qp418:aagZkhll%ySnll_g`\wmtX>9;37nll_lmga*tXkkiTjoQ|hs]554>>8:aagZkhll%ySnll_g`\wmtX?8;37nll_lmga*tXkkiTjoQ|hs]464>>:46mmc^ol``)uWjhhSklPsip\307?3jhhS`ake.p\ggeXnkUxdQ860:8ggeXefnn#Qlbb]efZuozV=<=55lbb]nkac(zViioRhm_rjq[2>602iioRc`dd-q[fddWohTe|P783b?fddWdeoi"|Pcca\bgYt`{U7:aagZkhll%ySnll_g`\wmtX0820oomPmnff+wYdjjUmnR}gr^:35==djjUfcik r^aagZ`eWzbyS5?>8:aagZkhll%ySnll_g`\wmtX0;;37nll_lmga*tXkkiTjoQ|hs];74>8820oomPmnff+wYdjjUmnR}gr^;25==djjUfcik r^aagZ`eWzbyS4<>8:aagZkhll%ySnll_g`\wmtX1:;37nll_lmga*tXkkiTjoQ|hs]:04>_RU35==djjUfcik r^awviYa{dUMJi<>e:aagZkhll%ySnz}l^dpiZ@Al;'Bb>7>239`ffYjgmo$~Rm{rm]ewhYANm8&Ec=61^QT44e_G03?fddWdeoi"|Pcupo[cujWOLo? Ga1^QT4419:aagZkhll%ySklPsip\wmoa|V;:96mmc^ol``)uWohTe|Pssa20>eekVgdhh!}_jgz[lb;87;?7nll_lmga*tXclsTei2>>068ggeXefnn#Qdex]j`9499:1hnnQboeg,vZmbqVcoS=?<;b``[hicm&xTghwPie]256=djjUfcik r^if}ZocW;;>7nll_lmga*tXxhxSca30?36?fddWdeoi"|Pp`pw[ki;97;?7nll_lmga*tXxhxScaP0068ggeXefnn#Qasv\jjY69h1hnnQboeg,vlhXkkiTjoQ|hs>3:4e01<2g>eekVgdhh!}io]`ffYajVyc~1??1?3`?fddWdeoi"|fn^aagZ`eWzby0<>=>0a8ggeXefnn#ga_b``[cdX{ax7===11b9`ffYjgmo$~d`Pcca\bgYt`{6:<90>c:aagZkhll%yecQlbb]efZuoz5;;93?l;b``[hicm&xbbRmmc^da[vnu48:=224;Y@9j1hnnQboeg,vlhXkkiTjoQ|hs>25586k2iioRc`dd-qmkYdjjUmnR}gr=325;7d3jhhS`ake.pjjZeekVliS~f}<031:4e15<2g>eekVgdhh!}io]`ffYajVyc~1?>5?3`?fddWdeoi"|fn^aagZ`eWzby00a8ggeXefnn#ga_b``[cdX{ax7=<911b9`ffYjgmo$~d`Pcca\bgYt`{6:=50>c:aagZkhll%yecQlbb]efZuoz5;:53?m;b``[hicm&xbbRmmc^da[vnu48;5=i5lbb]nkac(z`dToomPfc]plw:697UL=n5lbb]nkac(z`dToomPfc]plw:6:94:o6mmc^ol``)uagUhnnQib^qkv97597;h7nll_lmga*tnfViioRhm_rjq844568i0oomPmnff+woiWjhhSklPsip?57599j1hnnQboeg,vlhXkkiTjoQ|hs>26186k2iioRc`dd-qmkYdjjUmnR}gr=311;7d3jhhS`ake.pjjZeekVliS~f}<005:4e2?3g?fddWdeoi"|fn^aagZ`eWzby0<<1_F3a?fddWdeoi"|fn^aagZ`eWzby0<=11e9`ffYjgmo$~d`Pcca\bgYt`{6:?3QH1c9`ffYjgmo$~d`Pcca\bgYt`{6:83?k;b``[hicm&xbbRmmc^da[vnu48>5SJ?m;b``[hicm&xbbRmmc^da[vnu48?5=i5lbb]nkac(z`dToomPfc]plw:6=7UL=o5lbb]nkac(z`dToomPfc]plw:6>7;o7nll_lmga*tnfViioRhm_rjq8409WN;i7nll_lmga*tnfViioRhm_rjq84199m1hnnQboeg,vlhXkkiTjoQ|hs>23;Y@9k1hnnQboeg,vlhXkkiTjoQ|hs>2<;7c3jhhS`ake.pjjZeekVliS~f}<0:=[B7e3jhhS`ake.pjjZeekVliS~f}<0;=5a=djjUfcik rhl\ggeXnkUxd2>9?]D5d=djjUfcik rhl\ggeXnkUxd2>>0a8ggeXefnn#ga_b``[cdX{ax7=3QH1c9`ffYjgmo$~d`Pcca\bgYt`{69<3?k;b``[hicm&xbbRmmc^da[vnu4;:5SJ?m;b``[hicm&xbbRmmc^da[vnu4;;5=i5lbb]nkac(z`dToomPfc]plw:597UL=o5lbb]nkac(z`dToomPfc]plw:5:7;o7nll_lmga*tnfViioRhm_rjq8749WN;i7nll_lmga*tnfViioRhm_rjq87599m1hnnQboeg,vlhXkkiTjoQ|hs>17;Y@9k1hnnQboeg,vlhXkkiTjoQ|hs>10;7c3jhhS`ake.pjjZeekVliS~f}<36=[B7e3jhhS`ake.pjjZeekVliS~f}<37=5a=djjUfcik rhl\ggeXnkUxd2=5?]D5g=djjUfcik rhl\ggeXnkUxd2=6?3g?fddWdeoi"|fn^aagZ`eWzby0?81_F3a?fddWdeoi"|fn^aagZ`eWzby0?911e9`ffYjgmo$~d`Pcca\bgYt`{69;3QH1c9`ffYjgmo$~d`Pcca\bgYt`{6943?k;b``[hicm&xbbRmmc^da[vnu4;25SJ?m;b``[hicm&xbbRmmc^da[vnu4;35=i5lbb]nkac(z`dToomPfc]plw:517UL=l5lbb]nkac(z`dToomPfc]plw:568i0oomPmnff+woiWjhhSklPsip?6;Y@9k1hnnQboeg,vlhXkkiTjoQ|hs>04;7c3jhhS`ake.pjjZeekVliS~f}<22=[B7e3jhhS`ake.pjjZeekVliS~f}<23=5a=djjUfcik rhl\ggeXnkUxd2<1?]D5g=djjUfcik rhl\ggeXnkUxd2<2?3a?fddWdeoi"|fn^aagZ`eWzby0>=11c9`ffYjgmo$~d`Pcca\bgYt`{6883?m;b``[hicm&xbbRmmc^da[vnu4:?5=o5lbb]nkac(z`dToomPfc]plw:4>7;i7nll_lmga*tnfViioRhm_rjq86199k1hnnQboeg,vlhXkkiTjoQ|hs>0<;7e3jhhS`ake.pjjZeekVliS~f}<2;=5d=djjUfcik rhl\ggeXnkUxd2<>0a8ggeXefnn#ga_b``[cdX{ax7?3QH1c9`ffYjgmo$~d`Pcca\bgYt`{6?<3?m;b``[hicm&xbbRmmc^da[vnu4=;5=o5lbb]nkac(z`dToomPfc]plw:3:7;i7nll_lmga*tnfViioRhm_rjq81599k1hnnQboeg,vlhXkkiTjoQ|hs>70;7e3jhhS`ake.pjjZeekVliS~f}<57=5g=djjUfcik rhl\ggeXnkUxd2;6?3a?fddWdeoi"|fn^aagZ`eWzby09911c9`ffYjgmo$~d`Pcca\bgYt`{6?43?m;b``[hicm&xbbRmmc^da[vnu4=35=l5lbb]nkac(z`dToomPfc]plw:368i0oomPmnff+woiWjhhSklPsip?0;Y@9k1hnnQboeg,vlhXkkiTjoQ|hs>64;7e3jhhS`ake.pjjZeekVliS~f}<43=5g=djjUfcik rhl\ggeXnkUxd2:2?3a?fddWdeoi"|fn^aagZ`eWzby08=11c9`ffYjgmo$~d`Pcca\bgYt`{6>83?m;b``[hicm&xbbRmmc^da[vnu47;i7nll_lmga*tnfViioRhm_rjq80199k1hnnQboeg,vlhXkkiTjoQ|hs>6<;7e3jhhS`ake.pjjZeekVliS~f}<4;=5d=djjUfcik rhl\ggeXnkUxd2:>0a8ggeXefnn#ga_b``[cdX{ax793QH1c9`ffYjgmo$~d`Pcca\bgYt`{6=<3?m;b``[hicm&xbbRmmc^da[vnu4?;5=o5lbb]nkac(z`dToomPfc]plw:1:7;i7nll_lmga*tnfViioRhm_rjq83599k1hnnQboeg,vlhXkkiTjoQ|hs>50;7e3jhhS`ake.pjjZeekVliS~f}<77=5g=djjUfcik rhl\ggeXnkUxd296?3a?fddWdeoi"|fn^aagZ`eWzby0;911c9`ffYjgmo$~d`Pcca\bgYt`{6=43?m;b``[hicm&xbbRmmc^da[vnu4?35=l5lbb]nkac(z`dToomPfc]plw:168i0oomPmnff+woiWjhhSklPsip?2;Y@9k1hnnQboeg,vlhXkkiTjoQ|hs>44;7e3jhhS`ake.pjjZeekVliS~f}<63=5g=djjUfcik rhl\ggeXnkUxd282?3a?fddWdeoi"|fn^aagZ`eWzby0:=11c9`ffYjgmo$~d`Pcca\bgYt`{6<83?m;b``[hicm&xbbRmmc^da[vnu4>?5=o5lbb]nkac(z`dToomPfc]plw:0>7;i7nll_lmga*tnfViioRhm_rjq82199k1hnnQboeg,vlhXkkiTjoQ|hs>4<;7e3jhhS`ake.pjjZeekVliS~f}<6;=5d=djjUfcik rhl\ggeXnkUxd28>0a8ggeXefnn#ga_b``[cdX{ax7;3QH1c9`ffYjgmo$~d`Pcca\bgYt`{63<3?m;b``[hicm&xbbRmmc^da[vnu41;5=o5lbb]nkac(z`dToomPfc]plw:?:7;i7nll_lmga*tnfViioRhm_rjq8=599k1hnnQboeg,vlhXkkiTjoQ|hs>;0;7e3jhhS`ake.pjjZeekVliS~f}<97=5g=djjUfcik rhl\ggeXnkUxd276?3a?fddWdeoi"|fn^aagZ`eWzby05911c9`ffYjgmo$~d`Pcca\bgYt`{6343?m;b``[hicm&xbbRmmc^da[vnu4135=l5lbb]nkac(z`dToomPfc]plw:?68i0oomPmnff+woiWjhhSklPsip?<;Y@9k1hnnQboeg,vlhXkkiTjoQ|hs>:4;7e3jhhS`ake.pjjZeekVliS~f}<83=5g=djjUfcik rhl\ggeXnkUxd262?3a?fddWdeoi"|fn^aagZ`eWzby04=11c9`ffYjgmo$~d`Pcca\bgYt`{6283?m;b``[hicm&xbbRmmc^da[vnu40?5=o5lbb]nkac(z`dToomPfc]plw:>>7;i7nll_lmga*tnfViioRhm_rjq8<199k1hnnQboeg,vlhXkkiTjoQ|hs>:<;7e3jhhS`ake.pjjZeekVliS~f}<8;=5d=djjUfcik rhl\ggeXnkUxd26>0a8ggeXefnn#ga_b``[cdX{ax753QH189`ffYjgmo$~d`Pp`pw[ki;878>=45lbb]nkac(z`dT|l|{_om?4;219l1hnnQboeg,vlhXxhxSca30?]neu3498o0oomPmnff+woiWykyxR``<1<\idv2;;;n7nll_lmga*tnfVzj~yQao=2=[hgw=:?:;6mmc^ol``)uagU{mzPnn>2:4?>RH>b:aagZkhll%yecQasv\jj:66<8TK<74cca\ijbb'{ceS}o}t^ll848198o0oomPmnff+woiWykyxR``<0<\idv2=>90oael;dl`[`h`'Boy4<>4eoa\aka(Clx3S^Y?1c9fjfYbfn%Ftb|P_o236?56]Qavsk|8;i7h`l_dld+H~hzVUe<=9;_Sgpqir6:=1nbnQjnf-N|jtXmgiTcRmfpigq[Wct}e~7<3?=5:gmgZcio&GscQjnb]l[fow`lxT^h}zlu>24;75=2oeoRkag.O{kwYbfjUdSnghdp\V`urd}6:=3?=5:gmgZcio&GscQjnb]l[fow`lxT^h}zlu>26;75=2oeoRkag.O{kwYbfjUdSnghdp\V`urd}6:?3?=5:gmgZcio&GscQjnb]l[fow`lxT^h}zlu>20;75=2oeoRkag.O{kwYbfjUdSnghdp\V`urd}6:93?=5:gmgZcio&GscQjnb]l[fow`lxT^h}zlu>22;75=2oeoRkag.O{kwYbfjUdSnghdp\V`urd}6:;3?=5:gmgZcio&GscQjnb]l[fow`lxT^h}zlu>2<;75=2oeoRkag.O{kwYbfjUdSnghdp\V`urd}6:53?=4:gmgZcio&GscQjnb]l[fow`lxT^h}zlu>2:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|58;2<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=02:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|5892<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=00:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|58?2<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=06:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|58=2<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=04:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|5832<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=0::4433ldhSh`h/LzlvZcikVeTod~ges]Qavsk|585=?;4eoa\aka(EqeySh`l_n]`munbzVXnxb{<22=573007?`hdWldl#@v`r^gmgZiXk`zciQ]erwop9099;>0icmPeoe,I}iuWldhSbQliqjfvZTb{|f0:0>259fjfYbfn%Ftb|Peoa\kZenxaoyS_k|umv?<;75<2oeoRkag.O{kwYbfjUdSnghdp\V`urd}622i0icmPeoe,J47>k2oeoRkag.L26=ecikVoek"@>33a8akeXmgm$B<=;c:gmgZcio&D:?;m4eoa\aka(F893o6kac^gmc*H6<9i0icmPeoe,J425k2oeoRkag.L201ecikVoek"@>49a8akeXmgm$B<;?c:gmgZcio&D:9?m4eoa\aka(F8??o6kac^gmc*H6=?i0icmPeoe,J43?k2oeoRkag.L225ecikVoek"@>65a8akeXmgm$B<89c:gmgZcio&D::5m4eoa\aka(F8=;o6kac^gmc*H6?;i0icmPeoe,J413i2oeoRkag.L:a>cikVoek"Qa010:a>cikVoek"Qa011;a>cikVoek"Qa0174a>cikVoek"Qa015757=bfjUnbj!Pn13559699880icmPeoe,[k66>86:2cikVoek"Qa03175c=bfjUnbj!Pn10014`9=k5jnb]fjb)Xf98??9;>f:gmgZcio&Ue=493e?`hdWldl#R`?25;2b>cikVoek"Qa03735c=bfjUnbj!Pn10654`;7>f:gmgZcio&Ue=733e?`hdWldl#R`?2612b>cikVoek"Qa03575c=bfjUnbj!Pn10414`5;>f:gmgZcio&Ue=893f?`hdWldl#R`?32726>cikVoek"Qa021654769=1nbnQjnf-\j554=8;:=RH>4:gmgZcio&Ue<>=:1032[B773ldhSh`h/^l37605<8;0icmPeoe,[k64;?<9=<=4eoa\aka(Wg:8?;8=1^D27>cikVoek"Qa0215277XO8?0icmPeoe,[k64;?Ufm}:64d9fjfYbfn%Tb==<7008akeXmgm$Sc><363254733ldhSh`h/^l3761698;TJ<:4eoa\aka(Wg:8?:?>10]Da>cikVoek"Qa021;55=bfjUnbj!Pn1104:gmgZcio&Ue<>=61032[C733ldhSh`h/^l376?698;TKh5jnb]fjb)Xf99?><>4eoa\aka(Wg:88?QI119fjfYbfn%Tb==;2^Ef?`hdWldl#R`?402e?`hdWldl#R`?402254=bfjUnbj!Pn1626141981nbnQjnf-\j526:=?8=;5jnb]fjb)Xf9>:>9Qbaq75=404=k4eoa\aka(Wg:?>9h4eoa\aka(Wg:?>9?j;dl`[`h`'Vd;8?;i;dl`[`h`'Vd;8?;>e:gmgZcio&Ue<9<9f:gmgZcio&Ue<9<91038akeXmgm$Sc>;95>3:47038akeXmgm$Sc>;95>7:47038akeXmgm$Sc>;97>3:47038akeXmgm$Sc>;97>7:47038akeXmgm$Sc>;99>3:47038akeXmgm$Sc>;99>7:47038akeXmgm$Sc>:01>3:47<=2<>038akeXmgm$Sc>:01>7:47<=28>318akeXmgm$icm}yqvjkkYbfnceiR>>_ym?6;75;2oeoRkag.gmgww|`eeSh`hiog\47Yg585=?=4eoa\aka(mgiyu}zfoo]fjboimV:8Sua32?316>cikVoek"kacs{spliiWldleckP0^zl8786::1nbnQjnf-fjft~x}cdbRkaghlf[47Xpf692<<8;dl`[`h`'ldh~t~{inl\akanflU:=Rv`<3<2[VQ7::1nbnQjnf-fjft~x}cdbRkaghlf[44Xpf692<<8;dl`[`h`'ldh~t~{inl\akanflU:>Rv`<3<2[VQ7::1nbnQjnf-fjft~x}cdbRkaghlf[45Xpf692<<8;dl`[`h`'ldh~t~{inl\akanflU:?Rv`<3<2[VQ7:;1nbnQjnf-fjft~x}cdbRkaghlf[4Yg585=?84eoa\aka(mgiyu}zfoo]fjboimV;Ttb2=>0]PS5443ldhSh`h/dl`v|vsafdTicifnd]15Z~h484:>>5jnb]fjb)bfjxr|yg`n^gmclhbW;;Ttb2=>000?`hdWldl#h`lrxrwmjhXmgmbbhQ=2^zl8486::1nbnQjnf-fjft~x}cdbRkaghlf[74Xpf692<<<;dl`[`h`'ldh~t~{inl\akanflU9?Rv`<0<266=bfjUnbj!jnbpztqohfVoekd`j_31\|j:568897h`l_dld+`hdzpzeb`Peoejj`Y5Wqe7=3?=2:gmgZcio&oeowthmm[`h`agoT>Rv`<3<266=bfjUnbj!jnbpztqohfVoekd`j_23\|j:5688<7h`l_dld+`hdzpzeb`Peoejj`Y49Vrd0?0>_RU366=bfjUnbj!jnbpztqohfVoekd`j_20\|j:5688<7h`l_dld+`hdzpzeb`Peoejj`Y4:Vrd0?0>_RU366=bfjUnbj!jnbpztqohfVoekd`j_21\|j:5688<7h`l_dld+`hdzpzeb`Peoejj`Y4;Vrd0?0>_RU367=bfjUnbj!jnbpztqohfVoekd`j_2]{k9499;<0icmPeoe,akeuqy~bccQjnfkmaZ5Xpf6921nbnQjnf-fjft~x}cdbRkaghlf[17Xpf6921nbnQjnf-fjft~x}cdbRkaghlf[14Xpf6921nbnQjnf-fjft~x}cdbRkaghlf[15Xpf6922oeoRkag.gmgww|`eeSh`hiog\0Z~h4;4:S^Y?229fjfYbfn%nbn|vpukljZcio`dnS8?Pxn>2:4443ldhSh`h/dl`v|vsafdTicifnd]65Z~h4;4:>>5jnb]fjb)bfjxr|yg`n^gmclhbW<8Ttb2>>000?`hdWldl#h`lrxrwmjhXmgmbbhQ:2^zl8786::1nbnQjnf-fjft~x}cdbRkaghlf[05Xpf6:2<<<;dl`[`h`'ldh~t~{inl\akanflU>?Rv`<3<267=bfjUnbj!jnbpztqohfVoekd`j_4]{k9799;80icmPeoe,akeuqy~bccQjnfkmaZ3Xpf692<<<;dl`[`h`'ldh~t~{inl\akanflU==Rv`<0<266=bfjUnbj!jnbpztqohfVoekd`j_73\|j:568887h`l_dld+`hdzpzeb`Peoejj`Y1:Vrd0<0>229fjfYbfn%nbn|vpukljZcio`dnS;1:4443ldhSh`h/dl`v|vsafdTicifnd]57Z~h484:>>5jnb]fjb)bfjxr|yg`n^gmclhbW?9Ttb2=>001?`hdWldl#h`lrxrwmjhXmgmbbhQ9_ym?5;75:2oeoRkag.gmgww|`eeSh`hiog\2Z~h4;4:>>5jnb]fjb)bfjxr|yg`n^gmclhbW>;Ttb2>>000?`hdWldl#h`lrxrwmjhXmgmbbhQ81^zl8786::1nbnQjnf-fjft~x}cdbRkaghlf[24Xpf6:2<<<;dl`[`h`'ldh~t~{inl\akanflU<>Rv`<3<266=bfjUnbj!jnbpztqohfVoekd`j_61\|j:668887h`l_dld+`hdzpzeb`Peoejj`Y0;Vrd0?0>239fjfYbfn%nbn|vpukljZcio`dnS:Qwo=3=574cikVoek"|Pcupo[cujWOLo=>018akeXmgm$~Rejy^kg8786:2oeoRkag.p\o`XamU;=?5jnb]fjb)uWborSdjP1008akeXmgm$~Rejy^kg[7733ldhSh`h/s]sewrXff6;2<:4eoa\aka(zVzj~yQao=3=56=bfjUnbj!}_qcqpZhhW9;87h`l_dld+wYwi{~TbbQ>1c9fjfYbfn%yS}o}t^ll[Zh789;7<3?l;dl`[`h`'{U{mzPnn]\j56795:5=3:gmgZcio&xT~b{adr>2:45008akeXmgm$~R|`uofp[5753ldhSh`h/s]qkphc{V;:>6kac^gmc*tXzfeh~Q=139fjfYbfn%ySazneq\7456kac^gmc*tX{}ki1>1159fjfYbfn%yS~zntd>24586<2oeoRkag.p\wqgsm5;;=3?;;dl`[`h`'{Uxxlzj<021:4205<20>cikVoek"|Psucwa977=7;?7h`l_dld+wYt|h~n0<>9>068akeXmgm$~R}{aug?55199=1nbnQjnf-q[vrf|l6:<50>4:gmgZcio&xTyo{e=33=;743ldhSh`h/s]ppdrb48:5=95jnb]fjb)uWz~jxh2>11<20>cikVoek"|Psucwa97697;?7h`l_dld+wYt|h~n0068akeXmgm$~R}{aug?54599=1nbnQjnf-q[vrf|l6:=90>4:gmgZcio&xTyo{e=321;733ldhSh`h/s]ppdrb48;=2<:4eoa\aka(zVymyk3105=51=bfjUnbj!}_rvbp`:6914:86kac^gmc*tX{}ki1?>9?30?`hdWldl#Q|t`vf84799=1nbnQjnf-q[vrf|l6:>=0>4:gmgZcio&xTyo{e=315;733ldhSh`h/s]ppdrb48892<:4eoa\aka(zVymyk3131=51=bfjUnbj!}_rvbp`:6:=4:86kac^gmc*tX{}ki1?=5?37?`hdWldl#Q|t`vf844168>0icmPeoe,vZusi}o7=?91129fjfYbfn%yS~zntd>26;743ldhSh`h/s]ppdrb4895=>5jnb]fjb)uWz~jxh2>4?30?`hdWldl#Q|t`vf84399:1nbnQjnf-q[vrf|l6::3?<;dl`[`h`'{Uxxlzj<05=56=bfjUnbj!}_rvbp`:607;87h`l_dld+wYt|h~n0<71139fjfYbfn%yS~zntd>2:45>018akeXmgm$~R}{aug?6786;2oeoRkag.p\wqgsm5882<=4eoa\aka(zVymyk325<27>cikVoek"|Psucwa9426890icmPeoe,vZusi}o7>;0>3:gmgZcio&xTyo{e=04:45008akeXmgm$~R}{aug?6;743ldhSh`h/s]ppdrb4::5=>5jnb]fjb)uWz~jxh2<1?30?`hdWldl#Q|t`vf86499:1nbnQjnf-q[vrf|l68?3?<;dl`[`h`'{Uxxlzj<26=56=bfjUnbj!}_rvbp`:4=7;87h`l_dld+wYt|h~n0>81129fjfYbfn%yS~zntd>03;743ldhSh`h/s]ppdrb4:25=>5jnb]fjb)uWz~jxh2<9?31?`hdWldl#Q|t`vf8686;2oeoRkag.p\wqgsm5>;2<=4eoa\aka(zVymyk340<27>cikVoek"|Psucwa9256890icmPeoe,vZusi}o78>0>3:gmgZcio&xTyo{e=67:45018akeXmgm$~R}{aug?0286;2oeoRkag.p\wqgsm5>32<=4eoa\aka(zVymyk348<26>cikVoek"|Psucwa9299:1nbnQjnf-q[vrf|l6><3?<;dl`[`h`'{Uxxlzj<43=56=bfjUnbj!}_rvbp`:2:7;87h`l_dld+wYt|h~n08=1129fjfYbfn%yS~zntd>60;743ldhSh`h/s]ppdrb45jnb]fjb)uWz~jxh2:6?30?`hdWldl#Q|t`vf80199:1nbnQjnf-q[vrf|l6>43?<;dl`[`h`'{Uxxlzj<4;=57=bfjUnbj!}_rvbp`:26890icmPeoe,vZusi}o7:=0>3:gmgZcio&xTyo{e=42:45;4:?6kac^gmc*tX{}ki18<>018akeXmgm$~R}{aug?2186;2oeoRkag.p\wqgsm5<>2<=4eoa\aka(zVymyk367<27>cikVoek"|Psucwa9006890icmPeoe,vZusi}o7:50>3:gmgZcio&xTyo{e=4::447;87h`l_dld+wYt|h~n0:>1129fjfYbfn%yS~zntd>45;743ldhSh`h/s]ppdrb4>85=>5jnb]fjb)uWz~jxh283?30?`hdWldl#Q|t`vf82299:1nbnQjnf-q[vrf|l6<93?<;dl`[`h`'{Uxxlzj<64=56=bfjUnbj!}_rvbp`:0?7;87h`l_dld+wYt|h~n0:61129fjfYbfn%yS~zntd>4=;753ldhSh`h/s]ppdrb4>4:?6kac^gmc*tX{}ki16?>018akeXmgm$~R}{aug?<486;2oeoRkag.p\wqgsm5292<=4eoa\aka(zVymyk382<27>cikVoek"|Psucwa9>36890icmPeoe,vZusi}o7480>3:gmgZcio&xTyo{e=:5:454:?6kac^gmc*tX{}ki167>018akeXmgm$~R}{aug?<<86:2oeoRkag.p\wqgsm525=>5jnb]fjb)uWz~jxh260?30?`hdWldl#Q|t`vf8<799:1nbnQjnf-q[vrf|l62>3?<;dl`[`h`'{Uxxlzj<81=56=bfjUnbj!}_rvbp`:><7;87h`l_dld+wYt|h~n04;1129fjfYbfn%yS~zntd>:2;743ldhSh`h/s]ppdrb40=5=>5jnb]fjb)uWz~jxh268?30?`hdWldl#Q|t`vf8?129fjfYbfn%yS~zntd]244743ldhSh`h/s]ppdrbW8:9=>5jnb]fjb)uWz~jxhQ>0230?`hdWldl#Q|t`vf[4639:1nbnQjnf-q[vrf|lU:<8?<;dl`[`h`'{Uxxlzj_02556=bfjUnbj!}_rvbp`Y68>;87h`l_dld+wYt|h~nS<>7129fjfYbfn%yS~zntd]24<753ldhSh`h/s]ppdrbW8;:?6kac^gmc*tX{}kiR?>0018akeXmgm$~R}{aug\5476;2oeoRkag.p\wqgsmV;:><=4eoa\aka(zVymykP10127>cikVoek"|PsucwaZ76<890icmPeoe,vZusi}oT=<;>3:gmgZcio&xTyo{e^322458018akeXmgm$~R}{aug\54?6:2oeoRkag.p\wqgsmV;9=>5jnb]fjb)uWz~jxhQ>2130?`hdWldl#Q|t`vf[4469:1nbnQjnf-q[vrf|lU:>??<;dl`[`h`'{Uxxlzj_00056=bfjUnbj!}_rvbp`Y6:=;87h`l_dld+wYt|h~nS<<:129fjfYbfn%yS~zntd]263743ldhSh`h/s]ppdrbW88<=?5jnb]fjb)uWz~jxhQ>3008akeXmgm$~R}{aug\51753ldhSh`h/s]ppdrbW8?:>6kac^gmc*tX{}kiR?9139fjfYbfn%yS~zntd]23441:gmgZcio&xTyo{e^026>cikVoek"|PsucwaZ479;1nbnQjnf-q[vrf|lU9=<<4eoa\aka(zVymykP2331?`hdWldl#Q|t`vf[756:2oeoRkag.p\wqgsmV8?=?5jnb]fjb)uWz~jxhQ=5008akeXmgm$~R}{aug\63753ldhSh`h/s]ppdrbW;=:>6kac^gmc*tX{}kiR<7139fjfYbfn%yS~zntd]1=47cikVoek"|PsucwaZ559;1nbnQjnf-q[vrf|lU8?<<4eoa\aka(zVymykP3531?`hdWldl#Q|t`vf[636:2oeoRkag.p\wqgsmV9==?5jnb]fjb)uWz~jxhQ<7008akeXmgm$~R}{aug\7=753ldhSh`h/s]ppdrbW:3:=6kac^gmc*tX{}kiR:>2:gmgZcio&xTyo{e^6357=bfjUnbj!}_rvbp`Y39880icmPeoe,vZusi}oT8??=;dl`[`h`'{Uxxlzj_5126>cikVoek"|PsucwaZ239;1nbnQjnf-q[vrf|lU?9<<4eoa\aka(zVymykP4731?`hdWldl#Q|t`vf[116:2oeoRkag.p\wqgsmV>3=?5jnb]fjb)uWz~jxhQ;9038akeXmgm$~R}{aug\1442:gmgZcio&xTyo{e^7157=bfjUnbj!}_rvbp`Y2;880icmPeoe,vZusi}oT99?=;dl`[`h`'{Uxxlzj_4726>cikVoek"|PsucwaZ319;1nbnQjnf-q[vrf|lU>;<<4eoa\aka(zVymykP5931?`hdWldl#Q|t`vf[0?692oeoRkag.p\wqgsmV<:>6kac^gmc*tX{}kiR8?139fjfYbfn%yS~zntd]5544;;97h`l_dld+wYt|h~nS;=>2:gmgZcio&xTyo{e^4757=bfjUnbj!}_rvbp`Y1=880icmPeoe,vZusi}oT:;?=;dl`[`h`'{Uxxlzj_7526>cikVoek"|PsucwaZ0?9;1nbnQjnf-q[vrf|lU=5;:>6kac^gmc*tX{}kiR9=139fjfYbfn%yS~zntd]47442:gmgZcio&xTyo{e^5557=bfjUnbj!}_rvbp`Y0?880icmPeoe,vZusi}oT;5?=;dl`[`h`'{Uxxlzj_6;25>cikVoek"|PsucwaZ>6:2oeoRkag.p\wqgsmV2;=?5jnb]fjb)uWz~jxhQ71008akeXmgm$~R}{aug\<7753ldhSh`h/s]ppdrbW19:>6kac^gmc*tX{}kiR6;139fjfYbfn%yS~zntd];1442:gmgZcio&xTyo{e^:;57=bfjUnbj!}_rvbp`Y?18;0icmPeoe,vZusi}oT5<<4eoa\aka(zVymykP9131?`hdWldl#Q|t`vf[<76:2oeoRkag.p\wqgsmV39=?5jnb]fjb)uWz~jxhQ63008akeXmgm$~R}{aug\=1753ldhSh`h/s]ppdrbW0?:>6kac^gmc*tX{}kiR79139fjfYbfn%yS~zntd]:3446:gmgZcio&xTxldex]mk9699?1nbnQjnf-q[vseclsTbb2>>048akeXmgm$~R}zbjgz[ki;:7;=7h`l_dld+wYt}kanuR``<2<21>cikVoek"|Pst`ha|YigV::96kac^gmc*tX{|h`itQao^321>cikVoek"|Pst`ha|YigV8:96kac^gmc*tX{|h`itQao^1e?`hdWldl#Qyamkg53=bfjUnbj!}io]pll`sW{e|<94eoa\aka(z`dTegit^plsv46=2oeoRkag.pjjZusi}o7<3?>6:gmgZcio&xbbR}{aug?55699>1nbnQjnf-qmkYt|h~n0<>?>034?`hdWldl#ga_rvbp`:68949=;5jnb]fjb)uagUxxlzj<022:417:gmgZcio&xbbR}{aug?5579:8<0icmPeoe,vlhX{}ki1??2?34?`hdWldl#ga_rvbp`:68;4:=:5jnb]fjb)uagUxxlzj<021:7713ldhSh`h/skm[vrf|l6:<>0>7:gmgZcio&xbbR}{aug?555998=0icmPeoe,vlhX{}ki1??3?022>cikVoek"|fn^qweqc;99>5=:5jnb]fjb)uagUxxlzj<027:4703ldhSh`h/skm[vrf|l6:<90=179fjfYbfn%yecQ|t`vf846268=0icmPeoe,vlhX{}ki1??5?323>cikVoek"|fn^qweqc;99?5><84eoa\aka(z`dTyo{e=332;703ldhSh`h/skm[vrf|l6:<;0>169fjfYbfn%yecQ|t`vf84616;;=7h`l_dld+woiWz~jxh2>06<23>cikVoek"|fn^qweqc;99=5=<94eoa\aka(z`dTyo{e=333;46>2oeoRkag.pjjZusi}o7==61169fjfYbfn%yecQ|t`vf846?68;<7h`l_dld+woiWz~jxh2>09<153=bfjUnbj!}io]ppdrb48:22<94eoa\aka(z`dTyo{e=33=;76?2oeoRkag.pjjZusi}o7==712048akeXmgm$~d`Psucwa97768;=7h`l_dld+woiWz~jxh2>11<23>cikVoek"|fn^qweqc;98:5=<94eoa\aka(z`dTyo{e=324;46>2oeoRkag.pjjZusi}o7=10<153=bfjUnbj!}io]ppdrb48;92<94eoa\aka(z`dTyo{e=326;76?2oeoRkag.pjjZusi}o7=<<12048akeXmgm$~d`Psucwa976;7;<7h`l_dld+woiWz~jxh2>12<252=bfjUnbj!}io]ppdrb48;82??9;dl`[`h`'{ceS~zntd>25186?2oeoRkag.pjjZusi}o7=<:11058akeXmgm$~d`Psucwa976<78::6kac^gmc*tnfVymyk3107=52=bfjUnbj!}io]ppdrb48;>2250859?1nbnQjnf-qmkYt|h~n0058akeXmgm$~d`Psucwa976>7;:;6kac^gmc*tnfVymyk3104=640252869>1nbnQjnf-qmkYt|h~n0335?`hdWldl#ga_rvbp`:6914:;6kac^gmc*tnfVymyk310:=5416:gmgZcio&xbbR}{aug?54?99>1nbnQjnf-qmkYt|h~n0034?`hdWldl#ga_rvbp`:69049=;5jnb]fjb)uagUxxlzj<03=540265869?1nbnQjnf-qmkYt|h~n0<<>>058akeXmgm$~d`Psucwa97597;::6kac^gmc*tnfVymyk3130=52=bfjUnbj!}io]ppdrb4889226686?2oeoRkag.pjjZusi}o7=?=11048akeXmgm$~d`Psucwa975<7;<7h`l_dld+woiWz~jxh2>25<253=bfjUnbj!}io]ppdrb488>2<94eoa\aka(z`dTyo{e=311;76>2oeoRkag.pjjZusi}o7=?81169fjfYbfn%yecQ|t`vf844168;=7h`l_dld+woiWz~jxh2>26<23>cikVoek"|fn^qweqc;9;=5=<84eoa\aka(z`dTyo{e=31:4713ldhSh`h/skm[vrf|l6:?3?>6:gmgZcio&xbbR}{aug?51869?1nbnQjnf-qmkYt|h~n0<;11048akeXmgm$~d`Psucwa97168;=7h`l_dld+woiWz~jxh2>7?322>cikVoek"|fn^qweqc;914:=;5jnb]fjb)uagUxxlzj<0;=5436:gmgZcio&xbbR}{aug?67869?1nbnQjnf-qmkYt|h~n0?=11048akeXmgm$~d`Psucwa94368;=7h`l_dld+woiWz~jxh2=5?322>cikVoek"|fn^qweqc;:?4:=;5jnb]fjb)uagUxxlzj<35=5401=;76=2oeoRkag.pjjZusi}o7>3?>6:gmgZcio&xbbR}{aug?75869?1nbnQjnf-qmkYt|h~n0>?11078akeXmgm$~d`Psucwa95568?0icmPeoe,vlhX{}ki1=<>078akeXmgm$~d`Psucwa95368?0icmPeoe,vlhX{}ki1=:>078akeXmgm$~d`Psucwa95168?0icmPeoe,vlhX{}ki1=8>078akeXmgm$~d`Psucwa95?68?0icmPeoe,vlhX{}ki1=6>078akeXmgm$~d`Psucwa95998?0icmPeoe,vlhX{}ki1:?>078akeXmgm$~d`Psucwa92668?0icmPeoe,vlhX{}ki1:=>078akeXmgm$~d`Psucwa92468?0icmPeoe,vlhX{}ki1:;>078akeXmgm$~d`Psucwa92268?0icmPeoe,vlhX{}ki1:9>078akeXmgm$~d`Psucwa92068?0icmPeoe,vlhX{}ki1:7>078akeXmgm$~d`Psucwa92>68?0icmPeoe,vlhX{}ki1:11078akeXmgm$~d`Psucwa93768?0icmPeoe,vlhX{}ki1;>>078akeXmgm$~d`Psucwa93568?0icmPeoe,vlhX{}ki1;<>078akeXmgm$~d`Psucwa93368?0icmPeoe,vlhX{}ki1;:>078akeXmgm$~d`Psucwa93998?0icmPeoe,vlhX{}ki18;>078akeXmgm$~d`Psucwa90268?0icmPeoe,vlhX{}ki189>078akeXmgm$~d`Psucwa90068?0icmPeoe,vlhX{}ki187>078akeXmgm$~d`Psucwa90>68?0icmPeoe,vlhX{}ki1811078akeXmgm$~d`Psucwa91768?0icmPeoe,vlhX{}ki19>>078akeXmgm$~d`Psucwa91568?0icmPeoe,vlhX{}ki19<>078akeXmgm$~d`Psucwa91368?0icmPeoe,vlhX{}ki19:>078akeXmgm$~d`Psucwa91168?0icmPeoe,vlhX{}ki198>078akeXmgm$~d`Psucwa91?68?0icmPeoe,vlhX{}ki196>078akeXmgm$~d`Psucwa91998?0icmPeoe,vlhX{}ki16?>078akeXmgm$~d`Psucwa9>668?0icmPeoe,vlhX{}ki16=>078akeXmgm$~d`Psucwa9>468?0icmPeoe,vlhX{}ki16;>078akeXmgm$~d`Psucwa9>268?0icmPeoe,vlhX{}ki169>078akeXmgm$~d`Psucwa9>068?0icmPeoe,vlhX{}ki1611078akeXmgm$~d`Psucwa9?168<0icmPeoe,vlhX{}ki179>035?`hdWldl#ga_rvbp`:>>78:96kac^gmc*tnfVymyk396<22>cikVoek"|fn^qweqc;1>4:=;5jnb]fjb)uagUxxlzj<85=6435:gmgZcio&xbbR}{aug?=<86>2oeoRkag.pjjZusi}o7540>179fjfYbfn%yecQ|t`vf8cikVoek"|fn^qvfnc~Wge7=3?>8:gmgZcio&xbbR}zbjgz[ki;:7;27h`l_dld+woiWzighwPnn>1:47?3ldhSh`h/skm[vseclsTbb2<>0a8akeXmgm$~d`Pst`ha|Yig595S^Y?179fjfYbfn%xnbvPo^fjj96998=0icmPeoe,wgiWfUoec2>0?323>cikVoek"}moy]l[aoi48;5=<94eoa\aka({kesSbQkio>26;76?2oeoRkag.qak}YhWmce0<=11058akeXmgm$oaw_n]gmk:6<7;:;6kac^gmc*uegqUdSiga<07=5417:gmgZcio&yicuQ`_ekm841998=0icmPeoe,wgiWfUoec2>8?323>cikVoek"}moy]l[aoi4835=<84eoa\aka({kesSbQkio>2:4703ldhSh`h/r`l|ZiXl`d7>=0>169fjfYbfn%xnbvPo^fjj94668;<7h`l_dld+vdhpVeThd`323<252=bfjUnbj!|bnz\kZbnf58822oeoRkag.qak}YhWmce0>0>179fjfYbfn%xnbvPo^fjj92998<0icmPeoe,wgiWfUoec2:>035?`hdWldl#~l`x^m\`lh;>7;::6kac^gmc*uegqUdSiga<6<253=bfjUnbj!|bnz\kZbnf525=<84eoa\aka({kesSbQkio>::4733ldhSh`h/rin[jYulVoe=?;4eoa\aka(pfUnbn|vpukljZcio`dnS??Pxn>2:732:7285jnb]fjb)gVoeowthmm[`h`agoT985jnb]fjb)gVoeowthmm[`h`agoT9>Qwo=3=61=bfjUnbj!wo^gmgww|`eeSh`hiog\1Z~h484996kac^gmc*~hWldh~t~{inl\akanflU==Rv`<0<11>cikVoek"v`_dl`v|vsafdTicifnd]56Z~h484996kac^gmc*~hWldh~t~{inl\akanflU=?Rv`<0<10>cikVoek"v`_dl`v|vsafdTicifnd]5[}i;978>7h`l_dld+}iXmgiyu}zfoo]fjboimV=:Sua31?06?`hdWldl#uaPeoaq}urnggUnbjgae^51[}i;978>7h`l_dld+}iXmgiyu}zfoo]fjboimV=8Sua31?07?`hdWldl#uaPeoaq}urnggUnbjgae^5\|j:66j1`itQf_jgz858a3borSdQdex>3:Ztsl2anuRgPkd{?558682anuRgPkd{?558Xz}n0ghwPi^if}97668:0ghwPi^if}9766Vxh6ejy^k\o`;9;4:<6ejy^k\o`;9;4T~yj4kd{\mZmbq5;82<>4kd{\mZmbq5;82R|{d:if}ZoXcls7=90>0:if}ZoXcls7=90Pruf8o`XaVanu1?:>028o`XaVanu1?:>^pw`>mbqVcTghw317<24>mbqVcTghw317<\vqb68:0ghwPi^if}97>6Vxo6ejy^k\o`;97l0ghwPi^if}979W{~o7fkv_h]ha|:587;;7fkv_h]ha|:587Uyxi5dex]j[nc~4;;5==5dex]j[nc~4;;5Szk;jgz[lYlmp69>3??;jgz[lYlmp69>3Q}te9ha|YnWbor0?=1119ha|YnWbor0?=1_svg?nc~W`U`it2=4?f8o`XaVanu1<:>e9ha|YnWbor0?81d:if}ZoXcls7>:0k;jgz[lYlmp6943j4kd{\mZmbq5822n5dex]j[nc~4;4m7fkv_h]ha|:56Vxh6ejy^k\o`;;94m7fkv_h]ha|:493:5h6ejy^k\o`;;84h7fkv_h]ha|:46o1`itQf_jgz868Xz}i0ghwPi^if}929n2anuRgPkd{?0;Yu|j1`itQf_jgz808a3borSdQdex>6:Ztsk2anuRgPkd{?2;`4:c=lmpUbSfkv<6<\vqembqVcTghw38?]qpf=lmpUbSfkv<8^pwb>mbqVcTghwPie>3:c=lmpUbSfkv_hf?5;763borSdQdex]j`94=87l0ghwPi^if}Zoc4;4n7fkv_h]okdbXclsj7fkv_n]aqvb3borS~mgee-Haw46:2anuR}lhdf,O`t5WZ];=k5dex]pgmcc'Dyc~hiPr^qh[vjnllU:<=?i;jgz[veomm%Fe|jg^p\wnYtd`nnS<>>1g9ha|Ytkaoo#@}grde\vZulWzfbhhQ>033e?nc~Wzicii!BsipfcZtX{bUx`djj_0205c=lmpUxoekk/Lqkv`aXzVy`S~bfdd]2417a3borS~mgee-NwmtboVxTfQ|lhff[4629o1`itQ|cigg+HuozlmT~R}d_rnj``Y68?;m7fkv_rakaa)J{axnkR|Psj]phlbbW8:<=k5dex]pgmcc'Dyc~hiPr^qh[vjnllU:<5?i;jgz[veomm%Fe|jg^p\wnYtd`nnS<>61g9ha|Ytkaoo#@}grde\vZulWzfbhhQ>113e?nc~Wzicii!BsipfcZtX{bUx`djj_0325c=lmpUxoekk/Lqkv`aXzVy`S~bfdd]2577a3borS~mgee-NwmtboVxTfQ|lhff[4749o1`itQ|cigg+HuozlmT~R}d_rnj``Y69=;m7fkv_rakaa)J{axnkR|Psj]phlbbW8;>=k5dex]pgmcc'Dyc~hiPr^qh[vjnllU:=;?i;jgz[veomm%Fe|jg^p\wnYtd`nnS193e?nc~Wzicii!BsipfcZtX{bUx`djj_03:5c=lmpUxoekk/Lqkv`aXzVy`S~bfdd]2657a3borS~mgee-NwmtboVxTfQ|lhff[4469o1`itQ|cigg+HuozlmT~R}d_rnj``Y6:;;m7fkv_rakaa)J{axnkR|Psj]phlbbW888=k5dex]pgmcc'Dyc~hiPr^qh[vjnllU:>9?i;jgz[veomm%Fe|jg^p\wnYtd`nnS<<:1g9ha|Ytkaoo#@}grde\vZulWzfbhhQ>273e?nc~Wzicii!BsipfcZtX{bUx`djj_0045`=lmpUxoekk/Lqkv`aXzVy`S~bfdd]:24c6m2anuR}lhdf,IvnumnUyS~ePsmkgaZ?>9m1`itQ|cigg+H~hzVUe<=>>_Sgpqir69m1`itQ|cigg+H~hzVUe<=>=_Sgpqir69m1`itQ|cigg+H~hzVUe<=><_Sgpqir6m2anuR}lhdf,J461m2anuR}lhdf,J46?m2anuR}lhdf,J477m2anuR}lhdf,J475m2anuR}lhdf,J473m2anuR}lhdf,J471m2anuR}lhdf,J47?m2anuR}lhdf,J447k2anuR}lhdf,J7b>018o`X{jbnh"\jstnw8786;2anuR}lhdf,V`urd}682<>4kd{\wfnbl&Ue<=>>119ha|Ytkaoo#R`?01024>mbqVyhdhj _o2346773borS~mgee-\j56>>8:0ghwPsbjf`*Yi88::=95dex]pgmcc'Vd;==?PSV224>mbqVyhdhj _o2247753borS~mgee-\j577:VL:>6ejy^q`l`b(Wg::mbqVyhdhj _o22417682anuR}lhdf,[k66?>;:7fkv_rakaa)Xf9;<;mbqVyhdhj kd{\wfnbl|fnS<<7_Sgpqir;;7Usc?>119ha|Ytkaoo#Qmur{2=>mbqVyhdhj r^awviYa{dUMJi?>c:if}Zud`ln$~Rm{rm]ewhYANm;&Ec?6;jgz[veomm%ySnz}l^dpiZ@Al;;h7fkv_rakaa)uWj~y`Rh|m^DE`7+Nf8n0ghwPsbjf`*tXk}xgSk}b_GDg6(Oi98n0ghwPsbjf`*tXk}xgSk}b_GDg6(Oi:8k0ghwPsbjf`*tXk}xgSk}b_Nww44743borS~mgee-q[aoiWzog=55dex]pgmcc'{UnbnQ|k^ll858602anuR}lhdf,vZcikVy`Sca31?3;?nc~Wzicii!}_dl`[vmXff692<64kd{\wfnbl&xTicmPsj]mk9599>1`itQ|cigg+wYbfjUxgR``_134?nc~Wzicii!}_dl`[vmXffU:=:5dex]pgmcc'{UnbnQ|k^ll[7703borS~mgee-q[`hdWzaTbbQ<149ha|Ytkaoo#Qdex]j`9699<1`itQ|cigg+wYlmpUbh1?1149ha|Ytkaoo#Qdex]j`9499=1`itQ|cigg+wYlmpUbhR>>4:if}Zud`ln$~Rejy^kg[4733borS~mgee-q[nc~W`nT><84kd{\wfnbl&xT|l|{_om?4;713borS~mgee-q[ugu|Vdd0<0>5:if}Zud`ln$~R~nru]mkZ66=2anuR}lhdf,vZvfz}UecR?<6:if}Zud`ln$~R~nru]mkZKflmUTb=>?0^O{kwYUmzgx1?1_Sgpqir6:m1`itQ|cigg+wYwi{~TbbQBaef\[k6789UTb=>?30]JJSY79m1`itQ|cigg+wYwi{~TbbQPn12349699m1`itQ|cigg+wYwi{~TbbQPn12349799<1`itQ|cigg+wYukfdxx1>1149ha|Ytkaoo#Q}cnlpp9799<1`itQ|cigg+wYukfdxx1<1149ha|Ytkaoo#Q}cnlpp9599<1`itQ|cigg+wYukfdxx1:1149ha|Ytkaoo#Q}cnlpp9399<1`itQ|cigg+wYukfdxx181149ha|Ytkaoo#Q}cnlpp9199=1`itQ|cigg+wYukfdxxR>>4:if}Zud`ln$~R|looqw[4733borS~mgee-q[wehfz~T><:4kd{\wfnbl&xT~naasu]051=lmpUxoekk/s]qgjht|V>:86ejy^q`l`b(zVxhcc}{_437?nc~Wzicii!}_saljvrX>8>0ghwPsbjf`*tXzjeeyQ8159ha|Ytkaoo#Q|bnz\w`j6?2anuR}lhdf,vZulWzfbhh2?>0;8o`X{jbnh"|Psj]phlbb48:;2<74kd{\wfnbl&xTfQ|lhff84666830ghwPsbjf`*tX{bUx`djj<021:4?<>0;8o`X{jbnh"|Psj]phlbb48:?2<74kd{\wfnbl&xTfQ|lhff84626830ghwPsbjf`*tX{bUx`djj<025:4?8>0;8o`X{jbnh"|Psj]phlbb48:32<74kd{\wfnbl&xTfQ|lhff846>6820ghwPsbjf`*tX{bUx`djj<02=5<=lmpUxoekk/s]poZukamo7=<>1189ha|Ytkaoo#Q|k^qomac;98;5=45dex]pgmcc'{UxgR}cieg?5449901`itQ|cigg+wYtcVygeik3101=5<=lmpUxoekk/s]poZukamo7=<:1189ha|Ytkaoo#Q|k^qomac;98?5=45dex]pgmcc'{UxgR}cieg?5409901`itQ|cigg+wYtcVygeik3105=5<=lmpUxoekk/s]poZukamo7=<61189ha|Ytkaoo#Q|k^qomac;9835=55dex]pgmcc'{UxgR}cieg?548612anuR}lhdf,vZulWzfbhh2>21<2=>mbqVyhdhj r^qh[vjnll6:><0>9:if}Zud`ln$~R}d_rnj``:6:;4:56ejy^q`l`b(zVy`S~bfdd>2668612anuR}lhdf,vZulWzfbhh2>25<2=>mbqVyhdhj r^qh[vjnll6:>80>9:if}Zud`ln$~R}d_rnj``:6:?4:56ejy^q`l`b(zVy`S~bfdd>2628602anuR}lhdf,vZulWzfbhh2>2?3;?nc~Wzicii!}_ri\wiocm5;82<64kd{\wfnbl&xTfQ|lhff8429911`itQ|cigg+wYtcVygeik314<2<>mbqVyhdhj r^qh[vjnll6::3?7;jgz[veomm%yS~ePsmkga9706820ghwPsbjf`*tX{bUx`djj<0:=5==lmpUxoekk/s]poZukamo7=40>7:if}Zud`ln$~R}d_rnj``:66820ghwPsbjf`*tX{bUx`djj<32=5==lmpUxoekk/s]poZukamo7><0>8:if}Zud`ln$~R}d_rnj``:5:7;37fkv_rakaa)uWzaTagke=00:4>12;7?3borS~mgee-q[vmX{ecoi1<8>0:8o`X{jbnh"|Psj]phlbb4;25=55dex]pgmcc'{UxgR}cieg?6<86?2anuR}lhdf,vZulWzfbhh2=>0:8o`X{jbnh"|Psj]phlbb4::5=55dex]pgmcc'{UxgR}cieg?7486?2anuR}lhdf,vZulWzfbhh2<>058o`X{jbnh"|Psj]phlbb4=4:;6ejy^q`l`b(zVy`S~bfdd>6:417:if}Zud`ln$~R}d_rnj``:068=0ghwPsbjf`*tX{bUx`djj<9<2<>mbqVyhdhj r^qh[vjnll62:3?7;jgz[veomm%yS~ePsmkga9?06820ghwPsbjf`*tX{bUx`djj<8:=5==lmpUxoekk/s]poZukamo7540>7:if}Zud`ln$~R}d_rnj``:>68<0ghwPsbjf`*tX{bUx`djj_135?nc~Wzicii!}_ri\wiocmV;:;6ejy^q`l`b(zVy`S~bfdd]244>?199ha|Ytkaoo#Q|k^qomacX99;:46ejy^q`l`b(zVy`S~bfdd]2477?3borS~mgee-q[vmX{ecoiR??30:8o`X{jbnh"|Psj]phlbbW8:?=55dex]pgmcc'{UxgR}cieg\553602anuR}lhdf,vZulWzfbhhQ>073;?nc~Wzicii!}_ri\wiocmV;;;<64kd{\wfnbl&xTfQ|lhff[46?911`itQ|cigg+wYtcVygeikP11;23>mbqVyhdhj r^qh[vjnllU:=<64kd{\wfnbl&xTfQ|lhff[477911`itQ|cigg+wYtcVygeikP1032<>mbqVyhdhj r^qh[vjnllU:=??7;jgz[veomm%yS~ePsmkgaZ76;820ghwPsbjf`*tX{bUx`djj_0375==lmpUxoekk/s]poZukamoT=<;>8:if}Zud`ln$~R}d_rnj``Y69?;37fkv_rakaa)uWzaTagke^3234>273;?nc~Wzicii!}_ri\wiocmV;9;<94kd{\wfnbl&xTfQ|lhff[456?2anuR}lhdf,vZulWzfbhhQ>4058o`X{jbnh"|Psj]phlbbW8?:;6ejy^q`l`b(zVy`S~bfdd]22417:if}Zud`ln$~R}d_rnj``Y608=0ghwPsbjf`*tX{bUx`djj_0;22>mbqVyhdhj r^qh[vjnllU9=:5dex]pgmcc'{UxgR}cieg\65703borS~mgee-q[vmX{ecoiR<>169ha|Ytkaoo#Q|k^qomacX:;;<7fkv_rakaa)uWzaTagke^0052=lmpUxoekk/s]poZukamoT>9?8;jgz[veomm%yS~ePsmkgaZ429>1`itQ|cigg+wYtcVygeikP2734?nc~Wzicii!}_ri\wiocmV8<=:5dex]pgmcc'{UxgR}cieg\6=703borS~mgee-q[vmX{ecoiR<6179ha|Ytkaoo#Q|k^qomacX;8=0ghwPsbjf`*tX{bUx`djj_2223>mbqVyhdhj r^qh[vjnllU8=<84kd{\wfnbl&xTfQ|lhff[1713borS~mgee-q[vmX{ecoiR;>6:if}Zud`ln$~R}d_rnj``Y19?1`itQ|cigg+wYtcVygeikP7048o`X{jbnh"|Psj]phlbbW1;=7fkv_rakaa)uWzaTagke^;23>mbqVyhdhj r^qh[vjnllU2:<94kd{\wfnbl&xTfQ|lhff[<16?2anuR}lhdf,vZulWzfbhhQ68058o`X{jbnh"|Psj]phlbbW03:46ejy^q`l`b(z`dToaw_rgo547>3borS~mgee-qmkYtcVygeik30?3a?nc~Wzicii!}io]poZukamo7<3<>1e9ha|Ytkaoo#ga_ri\wiocm5:5>25;46WN;j7fkv_rakaa)uagUxgR}cieg?5786k2anuR}lhdf,vlhX{bUx`djj<00=647b3borS~mgee-qmkYtcVygeik313<15ZA6i2anuR}lhdf,vlhX{bUx`djj<01=5f=lmpUxoekk/skm[vmX{ecoi1?<>332a>mbqVyhdhj rhl\wnYtd`nn0<=120]D5d=lmpUxoekk/skm[vmX{ecoi1?;>0a8o`X{jbnh"|fn^qh[vjnll6:83<>1d9ha|Ytkaoo#ga_ri\wiocm5;?2??PG0c8o`X{jbnh"|fn^qh[vjnll6:93?l;jgz[veomm%yecQ|k^qomac;9<49=8?025`=lmpUxoekk/skm[vmX{ecoi1?7>33\C4g9?3`?nc~Wzicii!}io]poZukamo7=40=10g8o`X{jbnh"|fn^qh[vjnll6:53<>_F3:?nc~Wzicii!}io]poZukamo7=3?m;jgz[veomm%yecQ|k^qomac;978:=i5dex]pgmcc'{ceS~ePsmkga979:8UL=l5dex]pgmcc'{ceS~ePsmkga94768i0ghwPsbjf`*tnfVy`S~bfdd>14;469l1`itQ|cigg+woiWzaTagke=03:77XO8k0ghwPsbjf`*tnfVy`S~bfdd>15;7d3borS~mgee-qmkYtcVygeik320<154cmbqVyhdhj rhl\wnYtd`nn0?<1203f?nc~Wzicii!}io]poZukamo7>?0=1^E2e>mbqVyhdhj rhl\wnYtd`nn0?=11b9ha|Ytkaoo#ga_ri\wiocm5882??>e:if}Zud`ln$~d`Psj]phlbb4;95>11;7e3borS~mgee-qmkYtcVygeik324<25g=lmpUxoekk/skm[vmX{ecoi1<:>33b?nc~Wzicii!}io]poZukamo7>;0>b:if}Zud`ln$~d`Psj]phlbb4;<5=78:m6ejy^q`l`b(z`dTfQ|lhff87199k1`itQ|cigg+woiWzaTagke=04:47e3borS~mgee-qmkYtcVygeik326<15d=lmpUxoekk/skm[vmX{ecoi1<7>0`8o`X{jbnh"|fn^qh[vjnll6943?>b:if}Zud`ln$~d`Psj]phlbb4;25>3borS~mgee-qmkYtcVygeik32?3a?nc~Wzicii!}io]poZukamo7>3<>1e9ha|Ytkaoo#ga_ri\wiocm585>05;7e3borS~mgee-qmkYtcVygeik330<25g=lmpUxoekk/skm[vmX{ecoi1=>>33:?nc~Wzicii!}io]poZukamo7?3?m;jgz[veomm%yecQ|k^qomac;;78:=i5dex]pgmcc'{ceS~ePsmkga959:8UL=45dex]pgmcc'{ceS~ePsmkga9299k1`itQ|cigg+woiWzaTagke=6=647c3borS~mgee-qmkYtcVygeik34?02[B7>3borS~mgee-qmkYtcVygeik35?3a?nc~Wzicii!}io]poZukamo793<>1e9ha|Ytkaoo#ga_ri\wiocm5?5>mbqVyhdhj scm{[jYcag6:<3?>9:if}Zud`ln$oaw_n]gmk:697;:56ejy^q`l`b({kesSbQkio>26;7612anuR}lhdf,wgiWfUoec2>3?32=>mbqVyhdhj scm{[jYcag6:83?>9:if}Zud`ln$oaw_n]gmk:6=7;:56ejy^q`l`b({kesSbQkio>22;7612anuR}lhdf,wgiWfUoec2>7?32=>mbqVyhdhj scm{[jYcag6:43?>9:if}Zud`ln$oaw_n]gmk:617;:46ejy^q`l`b({kesSbQkio>2:47>3borS~mgee-pfj~XgVnbb103:?nc~Wzicii!|bnz\kZbnf58:23borS~mgee-pfj~XgVnbb1<;>03:?nc~Wzicii!|bnz\kZbnf58>23borS~mgee-pfj~XgVnbb1<7>03:?nc~Wzicii!|bnz\kZbnf5822?110:8o`X{jbnh"}moy]l[aoi4:4:=55dex]pgmcc'zhdtRaPdhl?0;7602anuR}lhdf,wgiWfUoec2:>03;?nc~Wzicii!|bnz\kZbnf5<5=<64kd{\wfnbl&yicuQ`_ekm8286911`itQ|cigg+vdhpVeThd`38?32<>mbqVyhdhj scm{[jYcag6222h5boeg\mZbnf5;=2h5boeg\mZbnf5;<2h5boeg\mZbnf5;32h5boeg\mZbnf5;22i5boeg\mZbnf5;5i6c`dd]j[aoi4;:5i6c`dd]j[aoi4;;5i6c`dd]j[aoi4;85i6c`dd]j[aoi4;95i6c`dd]j[aoi4;>5i6c`dd]j[aoi4;?5i6c`dd]j[aoi4;<5i6c`dd]j[aoi4;=5i6c`dd]j[aoi4;25i6c`dd]j[aoi4;35h6c`dd]j[aoi4;4n7`ake^k\`lh;;94:<6c`dd]j[aoi4:;1<3k4mnff[lYcag68=3j4mnff[lYcag682i5boeg\mZbnf5>5h6c`dd]j[aoi4<4o7`ake^k\`lh;>7n0abjj_h]gmk:06m1fcikPi^fjj9>9l2gdhhQf_ekm8<8682gdhhQf_jgz[lb;87;;7`ake^k\o`Xam6:2<<4mnff[lYlmpUbh1<50?33?hicmVcTghwPie>1:`=jgmoTeRb`ae]jrf=jgmoTeR}{asva?hicmVeTnx}ve:ol``YhWme~x1>1f:ol``YhWme~x1??>g9nkacXgVndyy2>1?d8ijbbWfUocxz313khllUdSiazt=37:c=jgmoTcRj`uu>21;`90i;lmgaZiXlf0?;1f:ol``YhWme~x1<9>g9nkacXgVndyy2=7?d8ijbbWfUocxz329khllUdSiazt=0=b>khllUdSiazt=13:477o0abjj_n]gkpr;?7o0abjj_n]gkpr;07o0abjj_n]gkpr;17i0abjj_n]ueioc;2xxxl5|bmf\mZgd|m1xnajPi^fjj969l2yi`iQf_ekm848c3zhghRgPdhl?6;b<{kfoSdQkio>0:a=tjenTeRjfn=6=`>uedmUbSiga<40?30?vdhpVoeo"}Pdhl?55869;1xnbvPeoa,wZbnf5;:2<=4scm{[`hd'zUoec2>1?326>uegqUnbn!|_ekm84499:1xnbvPeoa,wZbnf5;92uegqUnbn!|_ekm84599880oaw_dl`+vYcag6:83?<;r`l|Zcik&yThd`315<257=tjfrTicm s^fjj9726890oaw_dl`+vYcag6:93?>2:qak}Ybfj%xSiga<04=56=tjfrTicm s^fjj97168;97~l`x^gmg*uXl`d7=:0>3:qak}Ybfj%xSiga<05=544<{kesSh`l/r]gmk:607;87~l`x^gmg*uXl`d7=50>139pfj~Xmgi$Rjfn=3::45<{kesSh`l/r]gmk:617;:=6}moy]fjf)tWmce0<0>2:qak}Ybfj%xSiga<0<257=tjfrTicm s^fjj9476890oaw_dl`+vYcag69<3?>2:qak}Ybfj%xSiga<33=56=tjfrTicm s^fjj94668;97~l`x^gmg*uXl`d7>?0>3:qak}Ybfj%xSiga<30=544<{kesSh`l/r]gmk:5;7;87~l`x^gmg*uXl`d7>>0>139pfj~Xmgi$Rjfn=07:45<{kesSh`l/r]gmk:5<7;:>6}moy]fjf)tWmce0?;1129pfj~Xmgi$Rjfn=06:4753zhdtRkac.q\`lh;:?4:?6}moy]fjf)tWmce0?811008wgiWldh#~Qkio>13;743zhdtRkac.q\`lh;:>4:=?5|bnz\ake({Vnbb1<7>018wgiWldh#~Qkio>1<;76:2yicuQjnb-p[aoi4;35=>5|bnz\ake({Vnbb1<6>032?vdhpVoeo"}Pdhl?6;753zhdtRkac.q\`lh;:7;:>6}moy]fjf)tWmce0>>1129pfj~Xmgi$Rjfn=13:4753zhdtRkac.q\`lh;;84:?6}moy]fjf)tWmce0>?11038wgiWldh#~Qkio>0:44<{kesSh`l/r]gmk:468;:7~l`x^gmg*uXl`d783?=;r`l|Zcik&yThd`34?325>uegqUnbn!|_ekm8086:2yicuQjnb-p[aoi4<4:=<5|bnz\ake({Vnbb181139pfj~Xmgi$Rjfn=4=547<{kesSh`l/r]gmk:06880oaw_dl`+vYcag6<2;r`l|Zcik&yThd`38?31?vdhpVoeo"}Pdhl?<;7692yicuQjnb-p[aoi404:>6}moy]fjf)tWmce040>e:qak}Ybfj%xSzkaf:qak}Ybfj%xSzka10;8wgiWldh#~l`x^0{0?31?vdhpVoeoRgPdhl?5486:2yicuQjnb]j[aoi4885=?5|bnz\akeXaVnbb1?<>008wgiWldhSdQkio>20;753zhdtRkac^k\`lh;9<4:>6}moy]fjfYnWmce0<81139pfj~XmgiTeRjfn=34:44<{kesSh`l_h]gmk:607;97~l`x^gmgZoXl`d7=40>1:qak}YbfjUbSiga<0<26>uegqUnbnQf_ekm87699;1xnbvPeoa\mZbnf58:2<<4scm{[`hdW`Uoec2=2?31?vdhpVoeoRgPdhl?668692yicuQjnb]j[aoi4;4:=6}moy]fjfYnWmce0>0>1:qak}YbfjUbSiga<5<25>uegqUnbnQf_ekm808692yicuQjnb]j[aoi4?4:=6}moy]fjfYnWmce0:0>1:qak}YbfjUbSiga<9<25>uegqUnbnQf_ekm8<86:2yicuQjnb]l[air|5:5=>5|bnz\akeXgVndyy2>0?30?vdhpVoeoRaPdnww84799:1xnbvPeoa\kZbh}}6:>3?<;r`l|ZcikVeThb{{<01=56=tjfrTicmPo^flqq:6<7;87~l`x^gmgZiXlf0<;1129pfj~XmgiTcRj`uu>22;743zhdtRkac^m\`jss48=5=>5|bnz\akeXgVndyy2>8?30?vdhpVoeoRaPdnww84?99;1xnbvPeoa\kZbh}}6:2<=4scm{[`hdWfUocxz321<27>uegqUnbnQ`_emvp9466890oaw_dl`[jYcg|~7>?0>3:qak}YbfjUdSiazt=00:45<{kesSh`l_n]gkpr;:=4:?6}moy]fjfYhWme~x1<:>018wgiWldhSbQkotv?6386;2yicuQjnb]l[air|58<2<=4scm{[`hdWfUocxz329<27>uegqUnbnQ`_emvp94>6880oaw_dl`[jYcg|~7>3?<;r`l|ZcikVeThb{{<22=56=tjfrTicmPo^flqq:497;97~l`x^gmgZiXlf0>0>2:qak}YbfjUdSiazt=6=57=tjfrTicmPo^flqq:26880oaw_dl`[jYcg|~7:3?=;r`l|ZcikVeThb{{<6<26>uegqUnbnQ`_emvp9>99;1xnbvPeoa\kZbh}}622h5|bnz\ov)Xf9:;=k5|bnz\ov)Xf9:;=0:qak}Yl{&yThd`30?32?vdhpVax#~Qkio>3:4763zhdtRe|/r]gmk:687;97~l`x^ip+vYcag6:<3?>1:qak}Yl{&yThd`310<26>uegqU`"}Pdhl?5486981xnbvPkr-p[aoi4885=?5|bnz\ov)tWmce0<<11038wgiWby$Rjfn=30:44<{kesSf} s^fjj97468;:7~l`x^ip+vYcag6:83?=;r`l|Zmt'zUoec2>4?325>uegqU`"}Pdhl?5086:2yicuQds.q\`lh;9<4:=<5|bnz\ov)tWmce0<81139pfj~Xcz%xSiga<04=547<{kesSf} s^fjj9706880oaw_jq,wZbnf5;<2;r`l|Zmt'zUoec2>8?31?vdhpVax#~Qkio>2<;7692yicuQds.q\`lh;904:>6}moy]hw*uXl`d7=40>119pfj~Xcz%xSiga<0<25>uegqU`"}Pdhl?5;7692yicuQds.q\`lh;:94:>6}moy]hw*uXl`d7>=0>109pfj~Xcz%xSiga<33=57=tjfrTg~!|_ekm877998;0oaw_jq,wZbnf5892<<4scm{[nu({Vnbb1<=>032?vdhpVax#~Qkio>17;753zhdtRe|/r]gmk:5;7;:=6}moy]hw*uXl`d7>90>2:qak}Yl{&yThd`325<254=tjfrTg~!|_ekm87399;1xnbvPkr-p[aoi4;?5=008wgiWby$Rjfn=05:4763zhdtRe|/r]gmk:5?7;97~l`x^ip+vYcag69;3?>1:qak}Yl{&yThd`329<26>uegqU`"}Pdhl?6=86981xnbvPkr-p[aoi4;35=?5|bnz\ov)tWmce0?711028wgiWby$Rjfn=0=54=tjfrTg~!|_ekm8786981xnbvPkr-p[aoi4::5=?5|bnz\ov)tWmce0>>11038wgiWby$Rjfn=12:44<{kesSf} s^fjj95668;;7~l`x^ip+vYcag6820:qak}Yl{&yThd`36?32?vdhpVax#~Qkio>5:4773zhdtRe|/r]gmk:068;0oaw_jq,wZbnf5=5=<>4scm{[nu({Vnbb161109pfj~Xcz%xSiga<9<255=tjfrTg~!|_ekm8<8692yicuQds.q\`lh;17;:=6}moy]hw*uXmmUfcik>2:qak}Yl{&yTiiQboeg2b>uegqU`"}Prdcg}4><{kesSf} scm{[7~?W9%xnbvk199pfj~Xcz%xnbvP2y:\5*uegqn:<6}moy]hwZoXl`d7<3?>;r`l|ZmtW`Uoec2>0?32?vdhpVaxSdQkio>25;763zhdtRe|_h]gmk:6:7;:7~l`x^ip[lYcag6:?3?>;r`l|ZmtW`Uoec2>4?32?vdhpVaxSdQkio>21;763zhdtRe|_h]gmk:6>7;:7~l`x^ip[lYcag6:;3?>;r`l|ZmtW`Uoec2>8?32?vdhpVaxSdQkio>2=;773zhdtRe|_h]gmk:668;0oaw_jq\mZbnf58;2>038wgiWbyTeRjfn=01:47<{kesSf}Pi^fjj94468;0oaw_jq\mZbnf58?2038wgiWbyTeRjfn=05:47<{kesSf}Pi^fjj94068;0oaw_jq\mZbnf5832028wgiWbyTeRjfn=0=54=tjfrTg~Qf_ekm8669981xnbvPkr]j[aoi4:;5==5|bnz\ovYnWmce0>0>0:qak}Yl{VcThd`34?33?vdhpVaxSdQkio>6:46<{kesSf}Pi^fjj909991xnbvPkr]j[aoi4>4:<6}moy]hwZoXl`d743??;r`l|ZmtW`Uoec26>038wgiWbyTcRj`uu>3:44<{kesSf}Po^flqq:687;97~l`x^ip[jYcg|~7=<0>2:qak}Yl{VeThb{{<00=57=tjfrTg~Q`_emvp9746880oaw_jq\kZbh}}6:83?=;r`l|ZmtWfUocxz314<26>uegqU`RaPdnww84099;1xnbvPkr]l[air|5;<2<<4scm{[nuXgVndyy2>8?31?vdhpVaxSbQkotv?5<8692yicuQds^m\`jss484:>6}moy]hwZiXlf0?>1139pfj~XczUdSiazt=02:44<{kesSf}Po^flqq:5:7;97~l`x^ip[jYcg|~7>>0>2:qak}Yl{VeThb{{<36=57=tjfrTg~Q`_emvp9426880oaw_jq\kZbh}}69:3?=;r`l|ZmtWfUocxz326<26>uegqU`RaPdnww87>99;1xnbvPkr]l[air|5822008wgiWbyTcRj`uu>04;753zhdtRe|_n]gkpr;;84:=6}moy]hwZiXlf0>0>1:qak}Yl{VeThb{{<5<25>uegqU`RaPdnww808692yicuQds^m\`jss4?4:=6}moy]hwZiXlf0:0>1:qak}Yl{VeThb{{<9<25>uegqU`RaPdnww8<8e3zafSh`l/rin56=tcdUnbnQf_jgz[lb;87;87~eb_dl`[lYlmpUbh1?1129pohYbfjUbSfkv_hf?6;`<{bgTicmPi^pg[`h6;2y`aRkac^m\vjsilz6;2<=4sjo\akeXgVxdycj|<0<27>uleVoeoRaPrnwm`v:56890fcPeoa\kZth}gnx0>0>3:qhiZcikVeTxldex>3:42<{bgTicmPo^qvfnc~48:5=95|kl]fjfYhWzighw310<20>uleVoeoRaPst`ha|:6:7;?7~eb_dl`[jYt}kanu1?<>068wnkXmgiTcR}zbjgz84299=1xg`Qjnb]l[vsecls7=80>4:qhiZcikVeTxldex>22;733zafSh`l_n]pqgmbq5;<2<:4sjo\akeXgVy~nfkv<0:=51=tcdUnbnQ`_rwao`;904:?6}dm^gmgZiX{|h`it2>>068wnkXmgiTcR}zbjgz87699=1xg`Qjnb]l[vsecls7><0>4:qhiZcikVeTxldex>16;733zafSh`l_n]pqgmbq5882<:4sjo\akeXgVy~nfkv<36=51=tcdUnbnQ`_rwao`;:<4:86}dm^gmgZiX{|h`it2=6?37?vmjWldhSbQ|ucif}94068>0fcPeoa\kZurjbor0?61159pohYbfjUdS~{mkd{?6<86;2y`aRkac^m\wpdlmp692<:4sjo\akeXgVy~nfkv<22=51=tcdUnbnQ`_rwao`;;84:?6}dm^gmgZiX{|h`it2<>018wnkXmgiTcR}zbjgz8186;2y`aRkac^m\wpdlmp6>2<=4sjo\akeXgVy~nfkv<7<27>uleVoeoRaPst`ha|:06890fcPeoa\kZurjbor050>3:qhiZcikVeTxldex>::47}u=:-02.bc010tJK|?;<1:BC|7302O09687?4n376>1=#:<91>9h4}R5;>731289j6<==434b>71b911o>8950;395~U0138>:7?htS6;9600=9:k1=><;27c962c6?2.98=4>8d9'671=ioh0n?;8:18;6?20m3?8jvT99;5x7a<5839h6<751`815?7c2t.9?i4=569K66c5<5<l?6=44i8a2>5<5<5<#:;315no4n30;>5=5<#:;315no4n30;>7=54i8a5>5<#:;315no4n30;>1=6=4+23;9=fg5<#:;315no4n30;>3=5<#:;31;k<4n30;>5=l:6=4+23;93c45<#:;31;k<4n30;>7=5<#:;315oh4n30;>4=5<#:;315oh4n30;>6=5<#:;315oh4n30;>0=5<#:;315oh4n30;>2=o:6=4+23;93`65<#:;31;h>4n30;>4=nh6=4+23;93`65<#:;31;h>4n30;>6=nj6=4+23;93`65<#:;31;h>4n30;>0=n36=4+23;93`65<#:;31;h>4n30;>2=n>6=4+23;93`65<#:;31;h>4n30;><=n:6=4+23;93`65<#:;31;h>4n30;>g=ii6=4+23;93`65<#:;31;h>4n30;>a=i<6=4+23;93`65<#:;31;h>4n30;>c=i86=4+23;93`64;h5`5?6=,;826:k?;o0154>2:9j3gb=83.9>448e19m67>=9:10e:lm:18'67?=?l:0b?<7:068?l1e13:1(?<6:6g3?k4503;>76g8ed83>!4513=n<6`=29822>=n?li1<7*=2884a5=i:;21=:54i6gb>5<#:;31;h>4n30;>4><3`=n47>5$30:>2c73g8947?6;:k4a3<72-89579j0:l16=<6i21b;h:50;&16<<0m91e>?651c98m2c5290/>?757d28j74?28i07d9kd;29 74>2>o;7c<=8;3g?>o0km0;6)<=9;5f4>h5:10:i65f7c594?"5:006=4+23;9==25<#:;3155:4n30;>4=5<#:;3155:4n30;>6=5<#:;3155:4n30;>0=5<#:;3155:4n30;>2=5<#:;3155:4n30;><=5<#:;3155:4n30;>g=5<#:;3155:4n30;>a=5<#:;3155:4n30;>c=4;h;45?6=,;82646;;o0154>2:9j=3`=83.9>446859m67>=9:10e48j:18'67?=11>0b?<7:068?l?1l3:1(?<6:8:7?k4503;>76g68b83>!45133386`=29822>=n11h1<7*=288:<1=i:;21=:54i8:b>5<#:;3155:4n30;>4><3`3357>5$30:><>33g8947?6;:k:<=<72-8957774:l16=<6i21b55950;&16<<>0=1e>?651c98m<>1290/>?759968j74?28i07d772;29 74>202?7c<=8;3g?>o>?>0;6)<=9;;;0>h5:10:i65f97a94?"5:002495a23:95c=5<#:;3155h4n30;>4=5<5<5<#:;315lm4n30;>4=5<#:;315lm4n30;>6=5<#:;315lm4n30;>0=6=4+23;9=de5<#:;315lm4n30;>2=5<#:;315lm4n30;><=5<#:;315lm4n30;>g=5<#:;315lm4n30;>a=5<#:;315lm4n30;>c=4;n;:=?6=,;8264ol;o0154>2:9l=<1=83.9>446ab9m67>=9:10c479:18'67?=1hi0b?<7:068?j?>=3:1(?<6:8c`?k4503;>76a6b583>!45133jo6`=29822>=h1k91<7*=288:ef=i:;21=:54o8`1>5<#:;315lm4n30;>4><3f3i=7>5$30:>ij1e>?651c98k?759`a8j74?28i07b7na;29 74>20kh7c<=8;3g?>i>1o0;6)<=9;;bg>h5:10:i65`98694?"5:002mn5a23:95c=:183!44l3;846F=3d9K606N5=91Q:44l{c8`>41=910997<9:3596=<6j3;h6?752`8~ 47a28837)<=e;010>"6<1097)?;9;08 42f2;1/=9l52:&20f<53-;?h7<4$06f>7=#9=l1>6*>5181?!729380(<;=:39'505=:2.:994=;%361?4<,8?=6?5+14596>"6=1097)?:9;08 43f2;1/=8l52:&21f<53-;>h7<4$07f>7=#96*>6181?!719380(<8=:39'535=:2.::94=;%351?4<,8<=6?5+17596>"6>1097)?99;08 40f2;1/=;l52:&22f<53-;=h7<4$04f>7=#9?l1>6*>7181?!709380(<9=:39'525=:2.:;94=;%341?4<,8==6?5+16596>"6?1097)?89;08 41f2;1/=:l52:&23f<53-;7=#9>l1>6*>8181?!7?9380(<6=:39'5=5=:2.:494=;%3;1?4<,8236<5+19;95>"6;o097)?;0;08 4262;1/=9<52:&206<53-;?87<4$0:5>7=#91=1>6*=378161=#9=?1>6*>4781?!43j389j6*=4b816c=imk0;7c??d;28j7572;>0b?=>:368j72c2;>0b?:j:368 44728837)<<9;38 75228837)?7b;31<>"60j0:>55+23f9672<,;9j6<5f4e83>!4513>h7c<=8;28?l2e290/>?754b9m67>=921b8l4?:%01=?2d3g8947<4;h6:>5<#:;318n5a23:97>=n<10;6)<=9;6`?k4503>07d;9:18'67?=?655:9j10<72-8957:l;o01!4513>h7c<=8;:8?l35290/>?754b9m67>=121b9<4?:%01=?2d3g8947o4;h73>5<#:;318n5a23:9f>=n?65d:9j02<72-8957:l;o01!4513?h7c<=8;38?l3f290/>?755b9m67>=:21b944?:%01=?3d3g8947=4;h7;>5<#:;319n5a23:90>=n>?0;6)<=9;7`?k4503?07d8::18'67?==j1e>?656:9j21<72-8957;l;o01!4513?h7c<=8;;8?l06290/>?755b9m67>=i21b:=4?:%01=?3d3g8947l4;h7e>5<#:;319n5a23:9g>=n=l0;6)<=9;7`?k4503n07d;8:18'67?==j1e>?65e:9j=2<72-895779;o016=4+23;9=3=i:;21=65f9283>!45133=7c<=8;08?l?5290/>?75979m67>=;21b5<4?:%01=??13g8947:4;h;3>5<#:;315;5a23:91>=n0o0;6)<=9;;5?k4503<07d6j:18'67?=1?1e>?657:9j<3`2h6=4+23;9=3=i:;21565f8c83>!45133=7c<=8;c8?l>f290/>?75979m67>=j21b454?:%01=??13g8947m4;h:4>5<#:;315;5a23:9`>=n0?0;6)<=9;;5?k4503o07d6::18'67?=1?1e>?65f:9j<1<72-895779;o015$30:><05<#:;315;5a23:957=h5:10:?65f8183>!45133=7c<=8;37?>o0n3:1(?<6:848j74?28?07d7j:18'67?=1?1e>?651798m4466:l16=<6?21b5n4?:%01=??13g8947?7;:k:f?6=,;826484n30;>4?<3`3j6=4+23;9=3=i:;21=l54i8;94?"5:002:6`=2982f>=n110;6)<=9;;5?k4503;h76g64;29 74>20<0b?<7:0f8?l>>290/>?75979m67>=9l10e:k50;&16<<>>2d9>54>f:9jf=<72-8957l8;o01!4513h<7c<=8;08?ld4290/>?75b69m67>=;21bn?4?:%01=?d03g8947:4;h`2>5<#:;31n:5a23:91>=nj90;6)<=9;`4?k4503<07doi:18'67?=j>1e>?657:9je`<72-8957l8;o01<3`ko6=4+23;9f2=i:;21565fab83>!4513h<7c<=8;c8?lge290/>?75b69m67>=j21bm44?:%01=?d03g8947m4;hc;>5<#:;31n:5a23:9`>=ni>0;6)<=9;`4?k4503o07do9:18'67?=j>1e>?65f:9je0<72-8957l8;o015$30:>g15<#:;31n:5a23:957=h5:10:?65fa083>!4513h<7c<=8;37?>of83:1(?<6:c58j74?28?07dli:18'67?=j>1e>?651798mgc=83.9>44m7:l16=<6?21bni4?:%01=?d03g8947?7;:kag?6=,;826o94n30;>4?<3`hi6=4+23;9f2=i:;21=l54icc94?"5:00i;6`=2982f>=nj00;6)<=9;`4?k4503;h76gm5;29 74>2k=0b?<7:0f8?lgf290/>?75b69m67>=9l10e4h50;&16<54>f:9jg1<72-8957m<;o01!4513i87c<=8;08?le7290/>?75c29m67>=;21bo44?:%01=?e?3g8947>4;ha4>5<#:;31o55a23:95>=nk?0;6)<=9;a;?k4503807dm::18'67?=k11e>?653:9j613=83.9>44=459m67>=821b>9=50;&16<<5<=1e>?651:9j614=83.9>44=459m67>=:21b>9?50;&16<<5<=1e>?653:9j61g=83.9>44=489m67>=821b>9650;&16<<5<01e>?651:9j611=83.9>44=489m67>=:21b>9850;&16<<5<01e>?653:9j2`<722c=j7>5;h55>5<=1<75f10f94?=n::81<75f22194?=n98o1<75f22`94?=n::i1<75`e283>!4513o97c<=8;28?jc6290/>?75e39m67>=921dhk4?:%01=?c53g8947<4;nff>5<#:;31i?5a23:97>=hlm0;6)<=9;g1?k4503>07bjl:18'67?=m;1e>?655:9l`g<72-8957k=;o01!4513o97c<=8;:8?jb?290/>?75e39m67>=121dh:4?:%01=?c53g8947o4;nf5>5<#:;31i?5a23:9f>=hl=0;6)<=9;g1?k4503i07bj<:18'67?=m;1e>?65d:9l`7<72-8957k=;o01!4513o97c<=8;33?>idn3:1(?<6:d08j74?28;07bmj:18'67?=m;1e>?651398kfb=83.9>44j2:l16=<6;21don4?:%01=?c53g8947?;;:m`f?6=,;826h<4n30;>43<3foj6=4+23;9a7=i:;21=;54od;94?"5:00n>6`=29823>=hm10;6)<=9;g1?k4503;376aj7;29 74>2l80b?<7:0;8?jc1290/>?75e39m67>=9h10ch;50;&16<54>b:9la1<72-8957k=;o015$30:>`45<#:;31i?5a23:95`=h5:10:j65`11794?"5:00:<95a23:94>=h9991<7*=288241=i:;21=65`11394?"5:00:<95a23:96>=h99:1<7*=288241=i:;21?65`fg83>!4513;;86`=2987?>iam3:1(?<6:027?k4503?07bhk:18'67?=99>0b?<7:798kce=83.9>44>059m67>=?21djo4?:%01=?77<2d9>547;:mee?6=,;826<>;;o01=hn?0;6)<=9;330>h5:10h76ai5;29 74>28:?7c<=8;f8?j`3290/>?751168j74?2l10ck=50;&16<<68=1e>?65f:9lb7<72-8957??4:l16=<6821dj<4?:%01=?77<2d9>54>1:9lb5<72-8957??4:l16=<6:21dik4?:%01=?77<2d9>54>3:9la`<72-8957??4:l16=<6<21dii4?:%01=?77<2d9>54>5:9l55e=83.9>44>059m67>=9?10c<>m:18'67?=99>0b?<7:058?j77i3:1(?<6:027?k4503;376a>0883>!4513;;86`=2982=>=h9921<7*=288241=i:;21=l54o024>5<#:;31==:4n30;>4d<3f;;:7>5$30:>4633g8947?l;:m247<72-8957??4:l16=<6l21dj:4?:%01=?77<2d9>54>e:9laf<72-8957??4:l16=<6n21d=<<50;&16<<6981e>?650:9l546=83.9>44>109m67>=921d==h50;&16<<6981e>?652:9l55c=83.9>44>109m67>=;21d=<950;&16<<69?1e>?650:9l543=83.9>44>179m67>=921d=<:50;&16<<69?1e>?652:9l545=83.9>44>179m67>=;21d;=4?::m45?6=3th>n:4?:583>5}#::n1=?k4H31f?M4282c5;h000?6=3`5<55;294~"5;m0:>n5G22g8L7373`=j6=44i30a>5<91<75f6`83>>i5:h0;66sm5cf94?3=83:p(?=k:00`?M44m2B99=5f7`83>>o5:k0;66g83;29?l0f2900c?50z&17a<6:j1C>>k4H373?l1f2900e?N5=91b;l4?::k16g<722c5;h4b>5<5<h0;66a=2`83>>{e=jo1<7;50;2x 75c288h7E<>o0;3:17d8n:188k74f2900qo;lf;291?6=8r.9?i4>2b9K66c<@;?;7d9n:188m74e2900e:=50;9j2d<722e9>l4?::a1db=83>1<7>t$31g>44e3A88i6F=519j3d<722c9>o4?::k5e?6=3f89m7>5;|`6e`<72=0;6=u+22f957d<@;9n7E<:0:k4e?6=3`89n7>5;h4b>5<5<k1<75f6`83>>i5:h0;66sm6e;94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd1lh0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo;k0;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f3be290?6=4?{%00`?75j2B9?h5G2428m2g=831b>?l50;9j2d<722e9>l4?::a1a7=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th=444?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm69a94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd10m0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo87e;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f3>a29086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi:4>50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`5=7<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb7;7>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e>0?1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c??3:1?7>50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn;77:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a2t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th=5l4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm68g94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd11o0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo8n0;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f3g629086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi:l<50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`5e6<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb7c6>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e>h<1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn;on:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a2dd=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th=mn4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm6`d94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd1j90;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo8m1;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f3d429086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi:o:50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`5f0<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb7`4>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e>k21<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn;lm:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a2ge=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th=nh4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm6b394?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd1k;0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo8l3;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f3e329086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi:n;50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`5g3<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb7a:>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e>jk1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn;mk:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a2fc=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th=ok4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm6e094?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd1=?0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo8:7;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f33?29086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi:8750;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`51d<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<n7>53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb77`>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e>6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn;8>:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a234=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th=:>4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<6=4<:183!44l3;956F=3d9K606k1<75f6`83>>i5:h0;66sm67494?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd1>>0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo898;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f30>29086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi:;o50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`52f<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb74f>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e>?l1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn;9=:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a225=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th>o<4?:483>5}#::n1=?m4H31f?M4282c5;h01f?6=3`=86=44i7c94?=h:;k1<75rb4a1>5<2290;w)<N5;l1C>8>4i6c94?=n:;h1<75f7283>>o1i3:17b<=a;29?xd2io0;694?:1y'66b=9;h0D?=j;I064>o0i3:17d<=b;29?l0f2900c?50z&17a<6:k1C>>k4H373?l1f2900e??o50;9~f2g129086=4?{%00`?7>82B9?h5+155954><@;?;7d?5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th>>44?:583>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f04?290?6=4?{%00`?7>;2B9?h5+155954?<@;?;7d?1<729q/>>j51818L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj<8<6=4;:183!44l3;2?6F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`664<72=0;6=u+22f95<5<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn8<9:187>5<7s-88h7?63:J17`=#9==1=<74H373?l74j3:17d?5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th>=k4?:583>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f043290?6=4?{%00`?7>;2B9?h5+155954?<@;?;7d?1<729q/>>j51818L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj<886=4;:183!44l3;2?6F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`65=<72=0;6=u+22f95<5<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn8?k:187>5<7s-88h7?63:J17`=#9==1=<74H373?l74j3:17d?0;694?:1y'66b=9090D?=j;%373?7612B99=5f12`94?=n9:i1<75f12f94?=h:;?1<75rb43`>5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th>=;4?:583>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f07e290?6=4?{%00`?7>;2B9?h5+155954?<@;?;7d?1<729q/>>j51818L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj<;j6=4;:183!44l3;2?6F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`651<72=0;6=u+22f95<5<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn8?6:187>5<7s-88h7?63:J17`=#9==1=<74H373?l74j3:17d?5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f076290?6=4?{%00`?7>;2B9?h5+155954?<@;?;7d?1<729q/>>j51818L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj<;;6=4;:183!44l3;2?6F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`64d<72=0;6=u+22f95<5<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn8>i:187>5<7s-88h7?63:J17`=#9==1=<74H373?l74j3:17d?5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th><54?:583>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f06c290?6=4?{%00`?7>;2B9?h5+155954?<@;?;7d?1<729q/>>j51818L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj<:<6=4;:183!44l3;2?6F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`644<72=0;6=u+22f95<5<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn8>9:187>5<7s-88h7?63:J17`=#9==1=<74H373?l74j3:17d?5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th?jk4?:583>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f063290?6=4?{%00`?7>;2B9?h5+155954?<@;?;7d?1<729q/>>j51818L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj<:86=4;:183!44l3;2?6F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`7ba<72=0;6=u+22f95<5<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn9hl:187>5<7s-88h7?63:J17`=#9==1=<74H373?l74j3:17d?5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th?j44?:583>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f02f290>6=4?{%00`?7>=2B9?h5+155966=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg33k3:187>50z&17a<61:1C>>k4$064>1=O:<:0e<=m:188m45d2900e<=k:188k7422900qo:k1;297?6=8r.9?i4>919K66c<,8><6?j4H373?l74j3:17d?6<729q/>>j51828L75b3-;?;7o6;k0;66g>3b83>>i5:<0;66sm4bg94?5=83:p(?=k:0;3?M44m2.:8:4=d:J115=n9:h1<75f12a94?=h:;?1<75rb5ag>5<4290;w)<N5;l1/=9952e9K6065<6=44}c6`g?6=;3:15;h30g?6=3f8997>5;|`7gg<72:0;6=u+22f95<6<@;9n7)?;7;0g?M4282c:?o4?::k27f<722e9>84?::a0fg=8391<7>t$31g>4?73A88i6*>4681`>N5=91b=>l50;9j56e=831d>?;50;9~f1e>29086=4?{%00`?7>82B9?h5+15596a=O:<:0e<=m:188m45d2900c?<::188yg2d03:1?7>50z&17a<6191C>>k4$064>7b<@;?;7d?0;6>4?:1y'66b=90:0D?=j;%373?4c3A8><6g>3c83>>o6;j0;66a=2483>>{e6=4<:183!44l3;2<6F=3d9'511=:m1C>8>4i01a>5<5<h?7>53;294~"5;m0:5=5G22g8 4202;n0D?;?;h30f?6=3`;8o7>5;n011?6=3th?o?4?:283>5}#::n1=4>4H31f?!73?38o7E<:0:k27g<722c:?n4?::m160<722wi8n?50;194?6|,;9o6<7?;I00a>"6<>09h6F=519j56d=831b=>m50;9l673=831vn9m?:180>5<7s-88h7?60:J17`=#9==1>i5G2428m45e2900e<=l:188k7422900qo:mf;297?6=8r.9?i4>919K66c<,8><6?j4H373?l74j3:17d?6<729q/>>j51828L75b3-;?;7o6;k0;66g>3b83>>i5:<0;66sm4cf94?5=83:p(?=k:0;3?M44m2.:8:4=d:J115=n9:h1<75f12a94?=h:;?1<75rb5``>5<4290;w)<N5;l1/=9952e9K6065<6=44}c6af?6=;3:15;h30g?6=3f8997>5;|`7fd<72:0;6=u+22f95<6<@;9n7)?;7;0g?M4282c:?o4?::k27f<722e9>84?::a0a>=8391<7>t$31g>4?73A88i6*>4681`>N5=91b=>l50;9j56e=831d>?;50;9~f1b029086=4?{%00`?7>82B9?h5+15596a=O:<:0e<=m:188m45d2900c?<::188yg2c>3:1?7>50z&17a<6191C>>k4$064>7b<@;?;7d?4?:1y'66b=90:0D?=j;%373?4c3A8><6g>3c83>>o6;j0;66a=2483>>{e1<7=50;2x 75c283;7E<8>4i01a>5<5<o>7>53;294~"5;m0:5=5G22g8 4202;n0D?;?;h30f?6=3`;8o7>5;n011?6=3th?ok4?:283>5}#::n1=4>4H31f?!73?38o7E<:0:k27g<722c:?n4?::m160<722wi8n:50;194?6|,;9o6<7?;I00a>"6<>09h6F=519j56d=831b=>m50;9l673=831vn9l6:180>5<7s-88h7?60:J17`=#9==1>i5G2428m45e2900e<=l:188k7422900qo;l6;297?6=8r.9?i4>919K66c<,8><6>k4H373?l74j3:17d?0<729q/>>j51878L75b3-;?;7?9;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm5b694?3=83:p(?=k:0;6?M44m2.:8:49;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm55g94?3=83:p(?=k:0;6?M44m2.:8:4>329K6065<5<6=44}cc;b?6=<3:15<91<75f6`83>>i5:h0;66sma8294?e5290;w)<N5;l1C>8>4Z7;9g~d=k3;<6<6524812?402;21=o4>c;0:>7g=u-;:j7?=8:&16`<5:=1/=9656c9'51?=;=1/=9o5759'51d=?k1/=9m57b9'51b=12.:8h4;1:&20c<79=;%365?773-;>>7=m;%367?563-;>87=<;%361?75<2.:9;4>1c9'501=;?1/=8652:&21<<53-;>m7<4$07a>7=#96*>5e81?!72m380(<;i:39'536=:2.::<4=;%356?4<,8<86?5+17696>"6><097)?96;08 4002;1/=;652:&22<<53-;=m7<4$04a>7=#9?i1>6*>6e81?!71m380(<8i:39'526=:2.:;<4=;%346?4<,8=86?5+16696>"6?<097)?86;08 4102;1/=:652:&23<<53-;7=#9>i1>6*>7e81?!70m380(<9i:39'5=6=:2.:4<4=;%3;6?4<,8286?5+19696>"60<097)?78;38 4>>281/=>h52:&205<53-;?=7<4$061>7=#9=91>6*>4581?!7?>380(<68:39'660=:;>0(<:::39'510=:2.98o4=2g9'61e=:;l0bhl50:l24a<73g88<774n312><=i:=n156`=4d8:?!7583;946*=3882?!44=3;946*>8c826==#91i1=?64$30g>7433-88m7?4i5f94?"5:00?o6`=2983?>o3j3:1(?<6:5a8j74?2810e9o50;&16<<3k2d9>54=;:k7=?6=,;8269m4n30;>6=h5:10?76g:6;29 74>2=i0b?<7:498m03=83.9>44;c:l16=<132c>87>5$30:>1eo2:3:1(?<6:5a8j74?2010e8?50;&16<<3k2d9>54n;:k64?6=,;8269m4n30;>g=h5:10h76g;e;29 74>2=i0b?<7:e98m11=83.9>44;c:l16=h7>5$30:>0eo6`=2982?>o2i3:1(?<6:4a8j74?2;10e8750;&16<<2k2d9>54<;:k61=h5:10>76g95;29 74>244:c:l16=<032c=?7>5$30:>0eo6`=298:?>o193:1(?<6:4a8j74?2h10e;>50;&16<<2k2d9>54m;:k6b?6=,;8268m4n30;>f=h5:10o76g:7;29 74>24466:l16=<732c297>5$30:><0o>:3:1(?<6:848j74?2:10e4?50;&16<<>>2d9>54;;:k:4?6=,;826484n30;>0=h5:10=76g7e;29 74>20<0b?<7:698m=b=83.9>4466:l16=5$30:><0o?i3:1(?<6:848j74?2k10e5650;&16<<>>2d9>54l;:k;3?6=,;826484n30;>a=h5:10n76g75;29 74>20<0b?<7:g98m=2=83.9>4466:l16=<6821b4>4?:%01=??13g8947?>;:k;6?6=,;826484n30;>44<3`2:6=4+23;9=3=i:;21=>54i9294?"5:002:6`=29820>=n?o0;6)<=9;;5?k4503;>76g6e;29 74>20<0b?<7:048?l?c290/>?75979m67>=9>10e4m50;&16<<>>2d9>54>8:9j=g<72-895779;o0132c2m7>5$30:><05<#:;315;5a23:95g=h5:10:o65f9583>!45133=7c<=8;3g?>o?13:1(?<6:848j74?28o07d9j:18'67?=1?1e>?651g98mg>=83.9>44m7:l16=<732ci:7>5$30:>g1oe;3:1(?<6:c58j74?2:10eo<50;&16<54;;:ka5?6=,;826o94n30;>0=h5:10=76gnf;29 74>2k=0b?<7:698mdc=83.9>44m7:l16=5$30:>g1ofj3:1(?<6:c58j74?2k10el750;&16<54l;:kba=h5:10n76gn6;29 74>2k=0b?<7:g98md3=83.9>44m7:l16=<6821bm94?:%01=?d03g8947?>;:kb7?6=,;826o94n30;>44<3`k96=4+23;9f2=i:;21=>54i`394?"5:00i;6`=29820>=ni90;6)<=9;`4?k4503;>76gmf;29 74>2k=0b?<7:048?ldb290/>?75b69m67>=9>10eoj50;&16<54>8:9jff<72-8957l8;o0132cin7>5$30:>g15<#:;31n:5a23:95g=h5:10:o65fb483>!4513h<7c<=8;3g?>ofi3:1(?<6:c58j74?28o07d7i:18'67?=j>1e>?651g98mf2=83.9>44l3:l16=<732ch>7>5$30:>f5od83:1(?<6:b18j74?2:10en750;&16<54?;:k`3?6=,;826n64n30;>4=h5:10976gl5;29 74>2j20b?<7:298m722290/>?752568j74?2910e?:<:18'67?=:=>0b?<7:098m725290/>?752568j74?2;10e?:>:18'67?=:=>0b?<7:298m72f290/>?7525;8j74?2910e?:7:18'67?=:=30b?<7:098m720290/>?7525;8j74?2;10e?:9:18'67?=:=30b?<7:298m3c=831b:k4?::k42?6=3`=<6=44i03g>5<5<5<6`=2983?>ib93:1(?<6:d08j74?2810cih50;&16<54=;:mga?6=,;826h<4n30;>6=h5:10?76akc;29 74>2l80b?<7:498kad=83.9>44j2:l16=<132eom7>5$30:>`46`=298;?>ic03:1(?<6:d08j74?2010ci950;&16<54n;:mg2?6=,;826h<4n30;>g=1<7*=288f6>h5:10h76ak3;29 74>2l80b?<7:e98ka4=83.9>44j2:l16=5$30:>`46`=29824>=hko0;6)<=9;g1?k4503;:76ale;29 74>2l80b?<7:008?jec290/>?75e39m67>=9:10cnm50;&16<54>4:9lgg<72-8957k=;o015$30:>`45<#:;31i?5a23:952=h5:10:465`e683>!4513o97c<=8;3:?>ib>3:1(?<6:d08j74?28k07bk::18'67?=m;1e>?651c98k`2=83.9>44j2:l16=<6k21di=4?:%01=?c53g8947?k;:mg1?6=,;826h<4n30;>4c<3fij6=4+23;9a7=i:;21=k54o026>5<#:;31==:4n30;>5=5<#:;31==:4n30;>7=54ogd94?"5:00:<95a23:90>=hnl0;6)<=9;330>h5:10>76aid;29 74>28:?7c<=8;48?j`d290/>?751168j74?2>10ckl50;&16<<68=1e>?658:9lbd<72-8957??4:l16=<>32em57>5$30:>4633g8947o4;nd;>5<#:;31==:4n30;>g=!4513;;86`=298g?>ia<3:1(?<6:027?k4503o07bh<:18'67?=99>0b?<7:g98kc4=83.9>44>059m67>=9910ck?50;&16<<68=1e>?651098kc6=83.9>44>059m67>=9;10chh50;&16<<68=1e>?651298k`c=83.9>44>059m67>=9=10chj50;&16<<68=1e>?651498k46d290/>?751168j74?28<07b??b;29 74>28:?7c<=8;34?>i68h0;6)<=9;330>h5:10:465`11;94?"5:00:<95a23:95<=;;o0154>c:9l554=83.9>44>059m67>=9m10ck950;&16<<68=1e>?651d98k`e=83.9>44>059m67>=9o10c?751038j74?2810c<>i:18'67?=98;0b?<7:398k46b290/>?751038j74?2:10c?751048j74?2810c?751048j74?2:10c:>50;9l34<722wim4?50;a1>5<7s-88h7<=c:J17`=O:<:0V;75cz`9g?702821>84=6;04>7>=9k0:o7<6:3c9y!76n3;946*=2d8161=#9=21:o5+15;971=#9=k1;95+15`93g=#9=i1;n5+15f9=>"64g8g?!7283=97)?:1;33?!72:39i7)?:3;12?!72<3987)?:5;310>"6=?0:=o5+145973=#9<21>6*>5881?!72i380(<;m:39'50e=:2.:9i4=;%36a?4<,8?m6?5+17296>"6>8097)?92;08 4042;1/=;:52:&220<53-;=:7<4$044>7=#9?21>6*>6881?!71i380(<8m:39'53e=:2.::i4=;%35a?4<,8"6?8097)?82;08 4142;1/=::52:&230<53-;<:7<4$054>7=#9>21>6*>7881?!70i380(<9m:39'52e=:2.:;i4=;%34a?4<,8=m6?5+19296>"608097)?72;08 4>42;1/=5:52:&2<0<53-;347?4$0::>4=#9:l1>6*>4181?!739380(<:=:39'515=:2.:894=;%3;2?4<,82<6?5+2249672<,8>>6?5+15496>"5k5+25a967`0e83?k448330b?=>:89m61b=12d98h46;%314?7502.9?44>;%001?7502.:4o4>299'5=e=9;20(?54?;:k7f?6=,;8269m4n30;>4=h5:10976g;9;29 74>2=i0b?<7:298m1>=83.9>44;c:l16=<332c>:7>5$30:>1eo2<3:1(?<6:5a8j74?2>10e8=50;&16<<3k2d9>547;:k66?6=,;8269m4n30;><=h5:10j76g:0;29 74>2=i0b?<7:c98m1`=83.9>44;c:l16=5$30:>1eo2l3:1(?<6:4a8j74?2910e8l50;&16<<2k2d9>54>;:k6e?6=,;8268m4n30;>7=h5:10876g:8;29 74>244:c:l16=<232c=97>5$30:>0eo6`=2984?>o1;3:1(?<6:4a8j74?2110e;<50;&16<<2k2d9>546;:k55?6=,;8268m4n30;>d=h5:10i76g:f;29 74>244:c:l16=;7>5$30:>0eo>=3:1(?<6:848j74?2810e4=50;&16<<>>2d9>54=;:k:6?6=,;826484n30;>6=h5:10?76g60;29 74>20<0b?<7:498m=`=83.9>4466:l16=<132c3i7>5$30:><0o?k3:1(?<6:848j74?2010e5l50;&16<<>>2d9>54n;:k;e?6=,;826484n30;>g=h5:10h76g77;29 74>20<0b?<7:e98m=0=83.9>4466:l16=5$30:><0=n0:0;6)<=9;;5?k4503;:76g72;29 74>20<0b?<7:008?l>6290/>?75979m67>=9:10e5>50;&16<<>>2d9>54>4:9j3c<72-895779;o015$30:><05<#:;315;5a23:952=h5:10:465f9c83>!45133=7c<=8;3:?>o>i3:1(?<6:848j74?28k07d76:18'67?=1?1e>?651c98m<>=83.9>4466:l16=<6k21b594?:%01=??13g8947?k;:k;=?6=,;826484n30;>4c<3`=n6=4+23;9=3=i:;21=k54ic:94?"5:00i;6`=2983?>oe>3:1(?<6:c58j74?2810eo:50;&16<54=;:ka7?6=,;826o94n30;>6=h5:10?76gm1;29 74>2k=0b?<7:498mg6=83.9>44m7:l16=<132cjj7>5$30:>g1ofl3:1(?<6:c58j74?2010elm50;&16<54n;:kbf?6=,;826o94n30;>g=h5:10h76gn8;29 74>2k=0b?<7:e98md1=83.9>44m7:l16=5$30:>g1=ni=0;6)<=9;`4?k4503;:76gn3;29 74>2k=0b?<7:008?lg5290/>?75b69m67>=9:10el?50;&16<54>4:9je5<72-8957l8;o015$30:>g15<#:;31n:5a23:952=h5:10:465fbb83>!4513h<7c<=8;3:?>oej3:1(?<6:c58j74?28k07dln:18'67?=j>1e>?651c98mg?=83.9>44m7:l16=<6k21bn84?:%01=?d03g8947?k;:kbe?6=,;826o94n30;>4c<3`3m6=4+23;9f2=i:;21=k54ib694?"5:00h?6`=2983?>od:3:1(?<6:b18j74?2810en?50;&16<54=;:k`4?6=,;826n=4n30;>6=h5:10;76gl7;29 74>2j20b?<7:098mf0=83.9>44l8:l16=<532ch97>5$30:>f>54i366>5<#:;31>9:4n30;>5=86=4+23;96125<#:;31>9:4n30;>7=:6=4+23;961254i36b>5<#:;31>974n30;>5=36=4+23;961?5<#:;31>974n30;>7==6=4+23;961?54i7g94?=n>o0;66g86;29?l102900e54?;:mf5?6=,;826h<4n30;>4=h5:10976ake;29 74>2l80b?<7:298kab=83.9>44j2:l16=<332eoo7>5$30:>`46`=2985?>ici3:1(?<6:d08j74?2>10ci750;&16<547;:mg<=h5:10j76ak6;29 74>2l80b?<7:c98ka2=83.9>44j2:l16=5$30:>`46`=298f?>ic93:1(?<6:d08j74?2o10ci>50;&16<54>0:9lgc<72-8957k=;o015$30:>`45<#:;31i?5a23:956=h5:10:865`cc83>!4513o97c<=8;36?>ibi3:1(?<6:d08j74?28<07bk6:18'67?=m;1e>?651698k`>=83.9>44j2:l16=<6021di:4?:%01=?c53g8947?6;:mf2?6=,;826h<4n30;>4g<3fo>6=4+23;9a7=i:;21=o54od694?"5:00n>6`=2982g>=hm90;6)<=9;g1?k4503;o76ak5;29 74>2l80b?<7:0g8?jef290/>?75e39m67>=9o10c<>::18'67?=99>0b?<7:198k464290/>?751168j74?2810c<>>:18'67?=99>0b?<7:398k467290/>?751168j74?2:10ckh50;&16<<68=1e>?654:9lb`<72-8957??4:l16=<232emh7>5$30:>4633g894784;nd`>5<#:;31==:4n30;>2=!4513;;86`=298:?>ia13:1(?<6:027?k4503k07bh7:18'67?=99>0b?<7:c98kc0=83.9>44>059m67>=k21dj84?:%01=?77<2d9>54k;:me0?6=,;826<>;;o0154odg94?"5:00:<95a23:951=5<#:;31==:4n30;>40<3f;;n7>5$30:>4633g8947?8;:m24d<72-8957??4:l16=<6021d==750;&16<<68=1e>?651898k46?290/>?751168j74?28k07b??7;29 74>28:?7c<=8;3a?>i68?0;6)<=9;330>h5:10:o65`11094?"5:00:<95a23:95a=5<#:;31=4=5<#:;31=6=5<#:;31=<84n30;>4=5<#:;31=<84n30;>6=:1<75`7083>>{ei>o1<7:50;2x 75c28387E<8>4i01a>5<5<6=44}cc4g?6=<3:1"6<>0:=45G2428m45e2900e<=l:188m45c2900c?<::188ygg0>3:187>50z&17a<61:1C>>k4$064>47>3A8><6g>3c83>>o6;j0;66g>3e83>>i5:<0;66sma6694?2=83:p(?=k:0;0?M44m2.:8:4>189K6065<5<7>54;294~"5;m0:5>5G22g8 42028;27E<:0:k27g<722c:?n4?::k27a<722e9>84?::ae26=83>1<7>t$31g>4?43A88i6*>46825<=O:<:0e<=m:188m45d2900e<=k:188k7422900qoo9e;290?6=8r.9?i4>929K66c<,8><6o6;k0;66g>3b83>>o6;m0;66a=2483>>{ei?i1<7:50;2x 75c28387E<8>4i01a>5<5<6=44}cc5e?6=<3:1"6<>0:=45G2428m45e2900e<=l:188m45c2900c?<::188ygg1>3:187>50z&17a<61:1C>>k4$064>47>3A8><6g>3c83>>o6;j0;66g>3e83>>i5:<0;66sma7094?2=83:p(?=k:0;0?M44m2.:8:4>189K6065<5<54;294~"5;m0:5>5G22g8 42028;27E<:0:k27g<722c:?n4?::k27a<722e9>84?::ae0c=83>1<7>t$31g>4?43A88i6*>46825<=O:<:0e<=m:188m45d2900e<=k:188k7422900qoo:c;290?6=8r.9?i4>929K66c<,8><6o6;k0;66g>3b83>>o6;m0;66a=2483>>{ei8>4i01a>5<5<6=44}cc6"6<>0:=45G2428m45e2900e<=l:188m45c2900c?<::188ygg2<3:187>50z&17a<61:1C>>k4$064>47>3A8><6g>3c83>>o6;j0;66g>3e83>>i5:<0;66sma4094?2=83:p(?=k:0;0?M44m2.:8:4>189K6065<5<<7>54;294~"5;m0:5>5G22g8 42028;27E<:0:k27g<722c:?n4?::k27a<722e9>84?::ae=e=83>1<7>t$31g>4?43A88i6*>46825<=O:<:0e<=m:188m45d2900e<=k:188k7422900qoo7a;290?6=8r.9?i4>929K66c<,8><6o6;k0;66g>3b83>>o6;m0;66a=2483>>{ei121<7:50;2x 75c28387E<8>4i01a>5<5<6=44}cc;2?6=<3:1"6<>0:=45G2428m45e2900e<=l:188m45c2900c?<::188ygg?:3:187>50z&17a<61:1C>>k4$064>47>3A8><6g>3c83>>o6;j0;66g>3e83>>i5:<0;66sma9294?2=83:p(?=k:0;0?M44m2.:8:4>189K6065<5<54;294~"5;m0:5>5G22g8 42028;27E<:0:k27g<722c:?n4?::k27a<722e9>84?::ae32=83>1<7>t$31g>4?43A88i6*>46825<=O:<:0e<=m:188m45d2900e<=k:188k7422900qoo;e;290?6=8r.9?i4>929K66c<,8><6o6;k0;66g>3b83>>o6;m0;66a=2483>>{ei1o1<7:50;2x 75c28387E<8>4i01a>5<5<6=44}cc7g?6==3:184?::ae1g=83>1<7>t$31g>4?43A88i6*>4684`>N5=91b=>l50;9j56e=831b=>j50;9l673=831vnl>i:18`6?6=8r.9?i4=2b9K66c<@;?;7W86:bya>f<6?3;36?;527813?4?28h1=n4=9;0b>x"69o0:>55+23g9672<,8>36;l4$06:>62<,8>j6::4$06a>2d<,8>h6:m4$06g><=#9=o18<5+15d9`>"6=90<>6*>50824>"6=;08n6*>52805>"6==08?6*>548261=#9<<1=60<,8?36?5+14;96>"6=h097)?:b;08 43d2;1/=8j52:&21`<53-;>j7<4$043>7=#9?;1>6*>6381?!71;380(<8;:39'533=:2.::;4=;%353?4<,8<36?5+17;96>"6>h097)?9b;08 40d2;1/=;j52:&22`<53-;=j7<4$053>7=#9>;1>6*>7381?!70;380(<9;:39'523=:2.:;;4=;%343?4<,8=36?5+16;96>"6?h097)?8b;08 41d2;1/=:j52:&23`<53-;7=#91;1>6*>8381?!7?;380(<6;:39'5=3=:2.:454>;%3;=?7<,89m6?5+15296>"6<8097)?;2;08 4242;1/=9:52:&2<3<53-;3;7<4$315>7433-;?97<4$065>7=#:=h1>?h4$36`>74a3goi6=5a11f94>h5;9027c<<1;;8j72c201e>9k59:&265<6:11/>>751:&170<6:11/=5l513:8 4>d28837)<=d;010>"5;h0:7d:k:18'67?=?650:9j0g<72-8957:l;o01j6=4+23;90f=i:;21>65f4883>!4513>h7c<=8;18?l2?290/>?754b9m67>=<21b9;4?:%01=?2d3g8947;4;h76>5<#:;318n5a23:92>=n==0;6)<=9;6`?k4503=07d;<:18'67?=?658:9j17<72-8957:l;o01!4513>h7c<=8;`8?l2a290/>?754b9m67>=k21b8h4?:%01=?2d3g8947j4;h64>5<#:;318n5a23:9a>=n=m0;6)<=9;7`?k4503:07d;m:18'67?==j1e>?651:9j1d<72-8957;l;o01!4513?h7c<=8;68?l01290/>?755b9m67>==21b:84?:%01=?3d3g894784;h47>5<#:;319n5a23:93>=n>:0;6)<=9;7`?k4503207d8=:18'67?==j1e>?659:9j24<72-8957;l;o01!4513?h7c<=8;a8?l3b290/>?755b9m67>=l21b9:4?:%01=?3d3g8947k4;h;4>5<#:;315;5a23:94>=n1<0;6)<=9;;5?k4503;07d7<:18'67?=1?1e>?652:9j=7<72-895779;o01!45133=7c<=8;78?l>a290/>?75979m67>=>21b4h4?:%01=??13g894794;h:g>5<#:;315;5a23:9<>=n0j0;6)<=9;;5?k4503307d6m:18'67?=1?1e>?65a:9j!45133=7c<=8;f8?l>1290/>?75979m67>=m21b484?:%01=??13g8947h4;h:7>5<#:;315;5a23:955=h5:10:=65f8383>!45133=7c<=8;31?>o?93:1(?<6:848j74?28907d6?:18'67?=1?1e>?651598m2`=83.9>4466:l16=<6=21b5h4?:%01=??13g8947?9;:k:`?6=,;826484n30;>41<3`3h6=4+23;9=3=i:;21=554i8`94?"5:002:6`=2982=>=n1h0;6)<=9;;5?k4503;j76g69;29 74>20<0b?<7:0`8?l??290/>?75979m67>=9j10e4:50;&16<<>>2d9>54>d:9j<<<72-895779;o015$30:><05<#:;31n:5a23:94>=nj?0;6)<=9;`4?k4503;07dl;:18'67?=j>1e>?652:9jf6<72-8957l8;o01!4513h<7c<=8;78?ld7290/>?75b69m67>=>21bmk4?:%01=?d03g894794;hcf>5<#:;31n:5a23:9<>=nim0;6)<=9;`4?k4503307dol:18'67?=j>1e>?65a:9jeg<72-8957l8;o01!4513h<7c<=8;f8?lg0290/>?75b69m67>=m21bm;4?:%01=?d03g8947h4;hc6>5<#:;31n:5a23:955=1<7*=288a3>h5:10:=65fa283>!4513h<7c<=8;31?>of:3:1(?<6:c58j74?28907do>:18'67?=j>1e>?651598md6=83.9>44m7:l16=<6=21bnk4?:%01=?d03g8947?9;:kaa?6=,;826o94n30;>41<3`ho6=4+23;9f2=i:;21=554ica94?"5:00i;6`=2982=>=njk0;6)<=9;`4?k4503;j76gma;29 74>2k=0b?<7:0`8?ld>290/>?75b69m67>=9j10eo;50;&16<54>d:9jed<72-8957l8;o015$30:>g15<#:;31o>5a23:94>=nk;0;6)<=9;a0?k4503;07dm>:18'67?=k:1e>?652:9jg5<72-8957m<;o01!4513i37c<=8;38?le1290/>?75c99m67>=:21bo84?:%01=?e?3g8947=4;h071?6=,;826?:;;o015$30:>7233g8947?4;h076?6=,;826?:;;o015$30:>7233g8947=4;h07e?6=,;826?:6;o015$30:>72>3g8947?4;h073?6=,;826?:6;o015$30:>72>3g8947=4;h4f>5<>o0?3:17d?>d;29?l44:3:17d<<3;29?l76m3:17d<?650:9la4<72-8957k=;o0165`dd83>!4513o97c<=8;18?jbc290/>?75e39m67>=<21dhn4?:%01=?c53g8947;4;nfa>5<#:;31i?5a23:92>=hlh0;6)<=9;g1?k4503=07bj6:18'67?=m;1e>?658:9l`=<72-8957k=;o01!4513o97c<=8;`8?jb3290/>?75e39m67>=k21dh>4?:%01=?c53g8947j4;nf1>5<#:;31i?5a23:9a>=hl80;6)<=9;g1?k4503l07bj?:18'67?=m;1e>?651198kf`=83.9>44j2:l16=<6921doh4?:%01=?c53g8947?=;:m``?6=,;826h<4n30;>45<3fih6=4+23;9a7=i:;21=954ob`94?"5:00n>6`=29821>=hmh0;6)<=9;g1?k4503;=76aj9;29 74>2l80b?<7:058?jc?290/>?75e39m67>=9110ch950;&16<54>9:9la3<72-8957k=;o015$30:>`45<#:;31i?5a23:95f=h5:10:h65`d483>!4513o97c<=8;3f?>idi3:1(?<6:d08j74?28l07b??5;29 74>28:?7c<=8;28?j77;3:1(?<6:027?k4503;07b??1;29 74>28:?7c<=8;08?j7783:1(?<6:027?k4503907bhi:18'67?=99>0b?<7:598kcc=83.9>44>059m67>==21dji4?:%01=?77<2d9>549;:meg?6=,;826<>;;o01=hn00;6)<=9;330>h5:10j76ai8;29 74>28:?7c<=8;`8?j`1290/>?751168j74?2j10ck;50;&16<<68=1e>?65d:9lb1<72-8957??4:l16=5$30:>4633g8947h4;nd1>5<#:;31==:4n30;>46<3fl:6=4+23;95525<#:;31==:4n30;>44<3fom6=4+23;95525<#:;31==:4n30;>42<3foo6=4+23;9552;;o0154>7:9l55g=83.9>44>059m67>=9110c<>6:18'67?=99>0b?<7:0;8?j7703:1(?<6:027?k4503;j76a>0683>!4513;;86`=2982f>=h99<1<7*=288241=i:;21=n54o021>5<#:;31==:4n30;>4b<3fl<6=4+23;95525<#:;31==:4n30;>4`<3f;:>7>5$30:>4763g8947>4;n324?6=,;826;o015$30:>4763g8947<4;n33a?6=,;826;o015$30:>4713g8947>4;n321?6=,;8265$30:>4713g8947<4;n327?6=,;826n5G22g8L7373S<26num:b823?7?2;?1>;4=7;0;>4d=9j0957?k52368 42?2?h0(<:6:268 42f2>>0(<:m:6`8 42d2>i0(<:k:89'51c=<81/=9h5d:&215<0:2.:9<4>0:&217<4j2.:9>4<1:&211<4;2.:984>259'500=98h0(<;8:248 43?2;1/=8752:&21d<53-;>n7<4$07`>7=#96*>5d81?!72n380(<8?:39'537=:2.::?4=;%357?4<,8"6>?097)?97;08 40?2;1/=;752:&22d<53-;=n7<4$04`>7=#9?n1>6*>6d81?!71n380(<9?:39'527=:2.:;?4=;%347?4<,8=?6?5+16796>"6??097)?87;08 41?2;1/=:752:&23d<53-;7=#9>n1>6*>7d81?!70n380(<6?:39'5=7=:2.:4?4=;%3;7?4<,82?6?5+19796>"6010:7)?79;38 45a2;1/=9>52:&204<53-;?>7<4$060>7=#9=>1>6*>8781?!7??380(?=9:307?!73=380(<:9:39'61d=:;l0(?:l:30e?kce291e==j50:l175<>3g88=774n36g><=i:=o156*>21826==#::31=6*=34826==#91h1=?64$0:`>44?3-89h7<=4:&17d<63`>o6=4+23;90f=i:;21<65f4c83>!4513>h7c<=8;38?l2f290/>?754b9m67>=:21b844?:%01=?2d3g8947=4;h6;>5<#:;318n5a23:90>=n=?0;6)<=9;6`?k4503?07d;::18'67?=?656:9j11<72-8957:l;o01!4513>h7c<=8;;8?l36290/>?754b9m67>=i21b9=4?:%01=?2d3g8947l4;h6e>5<#:;318n5a23:9g>=n?65e:9j1a<72-8957;l;o01!4513?h7c<=8;08?l3>290/>?755b9m67>=;21b954?:%01=?3d3g8947:4;h45>5<#:;319n5a23:91>=n><0;6)<=9;7`?k4503<07d8;:18'67?==j1e>?657:9j26<72-8957;l;o01<3`<96=4+23;91f=i:;21565f6083>!4513?h7c<=8;c8?l07290/>?755b9m67>=j21b9k4?:%01=?3d3g8947m4;h7f>5<#:;319n5a23:9`>=n=>0;6)<=9;7`?k4503o07d78:18'67?=1?1e>?650:9j=0<72-895779;o0165f9383>!45133=7c<=8;18?l?6290/>?75979m67>=<21b5=4?:%01=??13g8947;4;h:e>5<#:;315;5a23:92>=n0l0;6)<=9;;5?k4503=07d6k:18'67?=1?1e>?658:9j!45133=7c<=8;`8?l>?290/>?75979m67>=k21b4:4?:%01=??13g8947j4;h:5>5<#:;315;5a23:9a>=n0<0;6)<=9;;5?k4503l07d6;:18'67?=1?1e>?651198m=5=83.9>4466:l16=<6921b4?4?:%01=??13g8947?=;:k;5?6=,;826484n30;>45<3`2;6=4+23;9=3=i:;21=954i6d94?"5:002:6`=29821>=n1l0;6)<=9;;5?k4503;=76g6d;29 74>20<0b?<7:058?l?d290/>?75979m67>=9110e4l50;&16<<>>2d9>54>9:9j=d<72-895779;o015$30:><05<#:;315;5a23:95f=1<7*=288:2>h5:10:h65f8883>!45133=7c<=8;3f?>o0m3:1(?<6:848j74?28l07dl7:18'67?=j>1e>?650:9jf3<72-8957l8;o0165fb283>!4513h<7c<=8;18?ld5290/>?75b69m67>=<21bn<4?:%01=?d03g8947;4;h`3>5<#:;31n:5a23:92>=nio0;6)<=9;`4?k4503=07doj:18'67?=j>1e>?658:9jea<72-8957l8;o01!4513h<7c<=8;`8?lg>290/>?75b69m67>=k21bm54?:%01=?d03g8947j4;hc4>5<#:;31n:5a23:9a>=ni?0;6)<=9;`4?k4503l07do::18'67?=j>1e>?651198md2=83.9>44m7:l16=<6921bm>4?:%01=?d03g8947?=;:kb6?6=,;826o94n30;>45<3`k:6=4+23;9f2=i:;21=954i`294?"5:00i;6`=29821>=njo0;6)<=9;`4?k4503;=76gme;29 74>2k=0b?<7:058?ldc290/>?75b69m67>=9110eom50;&16<54>9:9jfg<72-8957l8;o015$30:>g15<#:;31n:5a23:95f=h5:10:h65fa`83>!4513h<7c<=8;3f?>o>n3:1(?<6:c58j74?28l07dm;:18'67?=k:1e>?650:9jg7<72-8957m<;o0165fc183>!4513i87c<=8;18?le>290/>?75c99m67>=821bo:4?:%01=?e?3g8947?4;ha5>5<#:;31o55a23:96>=nk<0;6)<=9;a;?k4503907d<;5;29 74>2;>?7c<=8;28?l43;3:1(?<6:367?k4503;07d<;2;29 74>2;>?7c<=8;08?l4393:1(?<6:367?k4503907d<;a;29 74>2;>27c<=8;28?l4303:1(?<6:36:?k4503;07d<;7;29 74>2;>27c<=8;08?l43>3:1(?<6:36:?k4503907d8j:188m3`=831b;;4?::k43?6=3`;:h7>5;h006?6=3`88?7>5;h32a?6=3`88n7>5;h00g?6=3fo86=4+23;9a7=i:;21<65`e083>!4513o97c<=8;38?jba290/>?75e39m67>=:21dhh4?:%01=?c53g8947=4;nfg>5<#:;31i?5a23:90>=hlj0;6)<=9;g1?k4503?07bjm:18'67?=m;1e>?656:9l`d<72-8957k=;o01!4513o97c<=8;;8?jb0290/>?75e39m67>=i21dh;4?:%01=?c53g8947l4;nf7>5<#:;31i?5a23:9g>=hl:0;6)<=9;g1?k4503n07bj=:18'67?=m;1e>?65e:9l`4<72-8957k=;o016`=29825>=hkl0;6)<=9;g1?k4503;976ald;29 74>2l80b?<7:018?jed290/>?75e39m67>=9=10cnl50;&16<54>5:9lad<72-8957k=;o015$30:>`45<#:;31i?5a23:95==h5:10:565`e783>!4513o97c<=8;3b?>ib=3:1(?<6:d08j74?28h07bk;:18'67?=m;1e>?651b98k`6=83.9>44j2:l16=<6l21dh84?:%01=?c53g8947?j;:m`e?6=,;826h<4n30;>4`<3f;;97>5$30:>4633g8947>4;n337?6=,;826<>;;o015$30:>4633g8947<4;n334?6=,;826<>;;o01=hnm0;6)<=9;330>h5:10=76aic;29 74>28:?7c<=8;58?j`e290/>?751168j74?2110cko50;&16<<68=1e>?659:9lb<<72-8957??4:l16=5$30:>4633g8947l4;nd5>5<#:;31==:4n30;>f=!4513;;86`=298f?>ia;3:1(?<6:027?k4503l07bh=:18'67?=99>0b?<7:028?j`6290/>?751168j74?28;07bh?:18'67?=99>0b?<7:008?jca290/>?751168j74?28907bkj:18'67?=99>0b?<7:068?jcc290/>?751168j74?28?07b??c;29 74>28:?7c<=8;35?>i68k0;6)<=9;330>h5:10:;65`11c94?"5:00:<95a23:95==;;o0154>b:9l550=83.9>44>059m67>=9j10c<>=:18'67?=99>0b?<7:0f8?j`0290/>?751168j74?28o07bkl:18'67?=99>0b?<7:0d8?j76:3:1(?<6:032?k4503:07b?>0;29 74>28;:7c<=8;38?j77n3:1(?<6:032?k4503807b??e;29 74>28;:7c<=8;18?j76?3:1(?<6:035?k4503:07b?>5;29 74>28;=7c<=8;38?j76<3:1(?<6:035?k4503807b?>3;29 74>28;=7c<=8;18?j172900c:?50;9~f<`b290?6=4?{%00`?7>;2B9?h5+155954?<@;?;7d?1<729q/>>j51818L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj0l36=4;:183!44l3;2?6F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`:b3<72=0;6=u+22f95<5<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn4h;:187>5<7s-88h7?63:J17`=#9==1=<74H373?l74j3:17d?n;0;694?:1y'66b=9090D?=j;%373?7612B99=5f12`94?=n9:i1<75f12f94?=h:;?1<75rb8d3>5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n011?6=3th2ih4?:583>5}#::n1=4=4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d>?;50;9~f;2B9?h5+155922=O:<:0e<=m:188m45d2900e<=k:188k7422900qo7ja;290?6=8r.9?i4>929K66c<,8><6;94H373?l74j3:17d?m10;694?:1y'66b=9090D?=j;%373?003A8><6g>3c83>>o6;j0;66g>3e83>>i5:<0;66sm9d494?2=83:p(?=k:0;0?M44m2.:8:497:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zj0o96=4;:183!44l3;2?6F=3d9'511=>>1C>8>4i01a>5<5<6=44}c;f4?6=<3:15;h30g?6=3`;8h7>5;n011?6=3th2hh4?:583>5}#::n1=4=4H31f?!73?3<<7E<:0:k27g<722c:?n4?::k27a<722e9>84?::a=ae=83>1<7>t$31g>4?43A88i6*>46853>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn4jn:187>5<7s-88h7?63:J17`=#9==1::5G2428m45e2900e<=l:188m45c2900c?<::188yg?c03:187>50z&17a<61:1C>>k4$064>31<@;?;7d?1<729q/>>j51818L75b3-;?;788;I064>o6;k0;66g>3b83>>o6;m0;66a=2483>>{e1m>1<7:50;2x 75c28387E<5<3290;w)<N5;l1/=995669K6065<5<54;294~"5;m0:5>5G22g8 4202?=0D?;?;h30f?6=3`;8o7>5;h30`?6=3f8997>5;|`b4f<72=0;6=u+22f95<5<@;9n7)?;7;44?M4282c:?o4?::k27f<722c:?i4?::m160<722wim=o50;694?6|,;9o6<7<;I00a>"6<>0=;6F=519j56d=831b=>m50;9j56b=831d>?;50;9~fd6?290?6=4?{%00`?7>;2B9?h5+155922=O:<:0e<=m:188m45d2900e<=k:188k7422900qoo?6;290?6=8r.9?i4>929K66c<,8><6;94H373?l74j3:17d?<6g>3c83>>o6;j0;66g>3e83>>i5:<0;66sma1094?2=83:p(?=k:0;0?M44m2.:8:497:J115=n9:h1<75f12a94?=n9:n1<75`23794?=zjh:;6=4;:183!44l3;2?6F=3d9'511=>>1C>8>4i01a>5<5<6=44}c;ee?6=<3:15;h30g?6=3`;8h7>5;n011?6=3th2i94?:583>5}#::n1=4=4H31f?!73?3<<7E<:0:k27g<722c:?n4?::k27a<722e9>84?::a=fc=83>1<7>t$31g>4?43A88i6*>46853>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn9>9:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a6fd=83>1<7>t$31g>44e3A88i6F=519j3d<722c9>o4?::k5e?6=3f89m7>5;|`745<72<0;6=u+22f957e<@;9n7E<:0:k4e?6=3`89n7>5;h50>5<k1<75f23`94?=n?:0;66g9a;29?j45i3:17pl;0383>0<729q/>>j513a8L75b3A8><6g8a;29?l45j3:17d9<:188m3g=831d>?o50;9~f6`d290?6=4?{%00`?75m2B9?h5G2428m2g=831b>>:50;9j2d<722e9>l4?::a71e=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th88h4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm3`694?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd4j90;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=mc;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f6e?29086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?i:50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`0a5<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb27a>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;?=1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>9::180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a721=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th8;44?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm39394?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd40:0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=75;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f6>029086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?5750;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`05<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb2:e>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;0;1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c??3:1?7>50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>76:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a7t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th85n4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm38d94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd4i90;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=n1;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f6g529086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?l;50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`0e3<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb2c;>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;h31<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>ol:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a7db=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th8mh4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm3c194?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd4j=0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=m5;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f6d129086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?o950;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`0f=<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb2`b>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;kn1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>m?:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a7f7=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th8o?4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm3b794?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd4k?0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=l9;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f6ef29086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?nl50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`0gf<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb2af>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;jl1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>j=:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a7a3=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th8h;4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm3e;94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd4lh0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=kb;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f6bd29086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?ij50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`0``<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb2g1>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;l91<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>k9:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a7`1=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th8i54?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm34294?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd4=80;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=:2;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f63429086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?8:50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`010<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<:7>53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb274>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;<21<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>;k:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a70c=8391<7>t$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th89k4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm37094?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd4>:0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo=94;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f60229086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi?;650;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`02<<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb24a>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e;?i1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn>8i:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a7c3=83>1<7>t$31g>44e3A88i6F=519j3d<722c9>o4?::k5e?6=3f89m7>5;|`0af<72=0;6=u+22f957d<@;9n7E<:0:k4e?6=3`89n7>5;h4b>5<84?::a6=0=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4?=3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:k=1<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>o850;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo<73;291?6=8r.9?i4>949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm2c794?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c04`?6==3:184?::a6=4=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4fn3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:k>1<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>5?50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm2c194?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c04f?6==3:184?::a6=6=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4fl3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:k81<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>:h50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm2c394?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c04=?6==3:184?::a62c=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4fj3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:k:1<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>:650;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm2`c94?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c046?6==3:184?::a621=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4f<3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:h31<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>:850;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm2`:94?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c044?6==3:184?::a623=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4f:3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:h=1<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>::50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm2`494?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c05=?6==3:184?::a63c=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4>j3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:h:1<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>;j50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo<6a;291?6=8r.9?i4>949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm28d94?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c053?6==3:184?::a63e=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4>13:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:0o1<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>;l50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo<68;291?6=8r.9?i4>949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm28f94?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c051?6==3:184?::a63g=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4>?3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:0i1<7;50;2x 75c283>7E<8>4i01a>5<5<5<j7>55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>;:50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo<61;291?6=8r.9?i4>949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm28494?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c06a?6==3:184?::a635=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4>83:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:0?1<7;50;2x 75c283>7E<8>4i01a>5<5<5<h7>55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>;<50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo<7f;291?6=8r.9?i4>949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm28694?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c06g?6==3:184?::a637=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4?m3:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:091<7;50;2x 75c283>7E<8>4i01a>5<5<5<n7>55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>;>50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo<7d;291?6=8r.9?i4>949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm28094?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c06e?6==3:184?::a6=e=83?1<7>t$31g>4?23A88i6*>468274=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg4213:197>50z&17a<61<1C>>k4$064>4563A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e:1h1<7;50;2x 75c283>7E<8>4i01a>5<5<5<47>55;294~"5;m0:585G22g8 420289:7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi>5o50;794?6|,;9o6<7:;I00a>"6<>0:?<5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo<79;291?6=8r.9?i4>949K66c<,8><6<=>;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm29:94?3=83:p(?=k:0;6?M44m2.:8:4>309K6065<5<6=44}c0`=?6==3:15<5<6=44}c:0f?6=<3:15<5<3290;w)<N5;l1C>8>4i6c94?=n:;h1<75f6`83>>i5:h0;66sm85d94?3=83:p(?=k:00`?M44m2B99=5f7`83>>o5:k0;66g83;29?l0f2900c?283:197>50z&17a<6:j1C>>k4H373?l1f2900e?N5=91b;l4?::k16g<722c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm8e194?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd?ll0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo6j1;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f=c529086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi4h=50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`;a1<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb9g5>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e0hn1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?d;3:1?7>50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn5ml:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::at$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th3oh4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<k1<75f6`83>>i5:h0;66sm8e394?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd?l;0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo6k4;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f=b229086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi4i850;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`;`2<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb9f:>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e0mk1<7=50;2x 75c28827E<6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?ck3:1?7>50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn5jk:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::at$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th3i=4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<5<h0;66a=2`83>>{e0?91<7;50;2x 75c288h7E<>o0;3:17d8n:188k74f2900qo694;291?6=8r.9?i4>2b9K66c<@;?;7d9n:188m74e2900e:=50;9j2d<722e9>l4?::a<33=83?1<7>t$31g>44d3A88i6F=519j3d<722c9>o4?::k47?6=3`5<55;294~"5;m0:>n5G22g8L7373`=j6=44i30a>5<91<75f6`83>>i5:h0;66sm87594?3=83:p(?=k:00`?M44m2B99=5f7`83>>o5:k0;66g83;29?l0f2900c?103:197>50z&17a<6:j1C>>k4H373?l1f2900e?N5=91b;l4?::k16g<722c5;h4b>5<5<h0;66a=2`83>>{e0>o0;3:17d8n:188k74f2900qo62c9K66c<@;?;7d9n:188m74e2900e;o50;9l67g=831vn5=j:187>5<7s-88h7?=b:J17`=O:<:0e:o50;9j67d=831b:l4?::m16d<722wi49650;794?6|,;9o6<N5=91b;l4?::k16g<722c5;h4b>5<5<h0;66a=2`83>>{e0=k1<7;50;2x 75c288h7E<>o0;3:17d8n:188k74f2900qo6;b;291?6=8r.9?i4>2b9K66c<@;?;7d9n:188m74e2900e:=50;9j2d<722e9>l4?::a<42=83=1<7>t$31g>75?3A88i6F=519'511=82c?>7>5;h60>5<1<75f4483>>o0=3:17d9n:188k74f2900qo6j7;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f=72290<6=4?{%00`?4402B9?h5G2428 420291b8?4?::k77?6=3`>?6=44i5794?=n?<0;66g8a;29?j45i3:17pl7e983>6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?50z&17a<5;11C>>k4H373?!73?3:0e9<50;9j06<722c?87>5;h66>5<?1<75f7`83>>i5:h0;66sm8`g94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd?9?0;6:4?:1y'66b=::20D?=j;I064>"6<>0;7d:=:188m15=831b894?::k71?6=3`=>6=44i6c94?=h:;k1<75rb9g:>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e08=1<7950;2x 75c2;937E<5;h5b>5<5<l26=48:183!44l38846F=3d9K606<,8><6=5f4383>>o3;3:17d:;:188m13=831b;84?::k4e?6=3f89m7>5;|`;ec<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<57;294~"5;m09?55G22g8L7373-;?;7>4i5094?=n<:0;66g;4;29?l222900e:;50;9j3d<722e9>l4?::at$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th5}#::n1>>64H31f?M4282.:8:4?;h61>5<>o3=3:17d9::188m2g=831d>?o50;9~f=d429086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi;kl50;594?6|,;9o6?=7;I00a>N5=91/=9950:k76?6=3`>86=44i5694?=n<<0;66g85;29?l1f2900c?e93:1?7>50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn:hl:184>5<7s-88h7<<8:J17`=O:<:0(<:8:19j07<722c??7>5;h67>5<>o0i3:17b<=a;29?xd?j;0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo9ie;293?6=8r.9?i4=399K66c<@;?;7)?;7;28m14=831b8>4?::k70?6=3`>>6=44i6794?=n?h0;66a=2`83>>{e0k>1<7=50;2x 75c28827E<2<729q/>>j522:8L75b3A8><6*>4683?l252900e9=50;9j01<722c?97>5;h56>5<k1<75`23c94?=zj1h>6=4<:183!44l3;956F=3d9K606k1<75f6`83>>i5:h0;66sm81294?1=83:p(?=k:31;?M44m2B99=5+15594>o3:3:17d:<:188m12=831b884?::k41?6=3`=j6=44o30b>5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb922>5<0290;w)<N5;l1C>8>4$064>5=n<;0;66g;3;29?l232900e9;50;9j30<722c5;n01e?6=3th3n:4?:283>5}#::n1=?74H31f?M4282c5;h4b>5<>o3<3:17d:::188m23=831b;l4?::m16d<722wi4o750;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`;46<72>0;6=u+22f966><@;9n7E<:0:&202<73`>96=44i5194?=n<=0;66g;5;29?l122900e:o50;9l67g=831vn5ln:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a<50=83=1<7>t$31g>75?3A88i6F=519'511=82c?>7>5;h60>5<1<75f4483>>o0=3:17d9n:188k74f2900qo6md;297?6=8r.9?i4>289K66c<@;?;7d9n:188m3g=831d>?o50;9~f=63290<6=4?{%00`?4402B9?h5G2428 420291b8?4?::k77?6=3`>?6=44i5794?=n?<0;66g8a;29?j45i3:17pl7bc83>6<729q/>>j513;8L75b3A8><6g8a;29?l0f2900c?7=3:1;7>50z&17a<5;11C>>k4H373?!73?3:0e9<50;9j06<722c?87>5;h66>5<?1<75f7`83>>i5:h0;66sm8ca94?5=83:p(?=k:00:?M44m2B99=5f7`83>>o1i3:17b<=a;29?xd?8>0;6:4?:1y'66b=::20D?=j;I064>"6<>0;7d:=:188m15=831b894?::k71?6=3`=>6=44i6c94?=h:;k1<75rb9`f>5<4290;w)<N5;l1C>8>4i6c94?=n>h0;66a=2`83>>{e0921<7950;2x 75c2;937E<5;h5b>5<5<<6=5f4383>>o3;3:17d:;:188m13=831b;84?::k4e?6=3f89m7>5;|`;g5<72:0;6=u+22f957?<@;9n7E<:0:k4e?6=3`5<57;294~"5;m09?55G22g8L7373-;?;7>4i5094?=n<:0;66g;4;29?l222900e:;50;9j3d<722e9>l4?::at$31g>44>3A88i6F=519j3d<722c=m7>5;n01e?6=3th35}#::n1>>64H31f?M4282.:8:4?;h61>5<>o3=3:17d9::188m2g=831d>?o50;9~f=e529086=4?{%00`?7512B9?h5G2428m2g=831b:l4?::m16d<722wi4=m50;594?6|,;9o6?=7;I00a>N5=91/=9950:k76?6=3`>86=44i5694?=n<<0;66g85;29?l1f2900c?d<3:1?7>50z&17a<6:01C>>k4H373?l1f2900e;o50;9l67g=831vn5>i:184>5<7s-88h7<<8:J17`=O:<:0(<:8:19j07<722c??7>5;h67>5<>o0i3:17b<=a;29?xd?k>0;6>4?:1y'66b=9;30D?=j;I064>o0i3:17d8n:188k74f2900qo6?d;293?6=8r.9?i4=399K66c<@;?;7)?;7;28m14=831b8>4?::k70?6=3`>>6=44i6794?=n?h0;66a=2`83>>{e0j?1<7=50;2x 75c28827E<2<729q/>>j522:8L75b3A8><6*>4683?l252900e9=50;9j01<722c?97>5;h56>5<k1<75`23c94?=zj1i=6=4<:183!44l3;956F=3d9K606k1<75f6`83>>i5:h0;66sm80294?1=83:p(?=k:31;?M44m2B99=5+15594>o3:3:17d:<:188m12=831b884?::k41?6=3`=j6=44o30b>5<53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb932>5<0290;w)<N5;l1C>8>4$064>5=n<;0;66g;3;29?l232900e9;50;9j30<722c5;n01e?6=3th3o44?:283>5}#::n1=?74H31f?M4282c5;h4b>5<>o3<3:17d:::188m23=831b;l4?::m16d<722wi4no50;194?6|,;9o6<<6;I00a>N5=91b;l4?::k5e?6=3f89m7>5;|`;56<72>0;6=u+22f966><@;9n7E<:0:&202<73`>96=44i5194?=n<=0;66g;5;29?l122900e:o50;9l67g=831vn5mm:180>5<7s-88h7?=9:J17`=O:<:0e:o50;9j2d<722e9>l4?::a<65=83>1<7>t$31g>4?43A88i6*>468264=O:<:0e<=m:188m45d2900e<=k:188k7422900qo6<5;290?6=8r.9?i4>929K66c<,8><695G2428m45e2900e<=l:188m45c2900c?<::188yg>603:1?7>50z&17a<6191C>>k4$064>7b<@;?;7d?4?:1y'66b=90:0D?=j;%373?4c3A8><6g>3c83>>o6;j0;66a=2483>>{e08k1<7=50;2x 75c283;7E<8>4i01a>5<5<53;294~"5;m0:5=5G22g8 4202>k0D?;?;h30f?6=3`;8o7>5;n011?6=3th38<4?:483>5}#::n1=4;4H31f?!73?3<37E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi4>650;194?6|,;9o6<7?;I00a>"6<>09h6F=519j56d=831b=>m50;9l673=831vn5=6:187>5<7s-88h7?63:J17`=#9==1?85G2428m45e2900e<=l:188m45c2900c?<::188yg>4i3:197>50z&17a<61<1C>>k4$064>64<@;?;7d?4?:1y'66b=90:0D?=j;%373?5?3A8><6g>3c83>>o6;j0;66a=2483>>{e:j=1<7:50;2x 75c28387E<8>4i01a>5<5<6=44}c1e7?6=<3:15;h30g?6=3`;8h7>5;n011?6=3th9ni4?:483>5}#::n1=4;4H31f?!73?3;8:6F=519j56d=831b=>m50;9j56b=831b=>k50;9l673=831vn?lj:180>5<7s-88h7?60:J17`=#9==1?55G2428m45e2900e<=l:188k7422900qo949K66c<,8><6<<9;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm4c194?3=83:p(?=k:0;6?M44m2.:8:4>6:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h:;?1<75rb4c`>5<4290;w)<N5;l1/=995399K6065<6=44}c:1a?6=;3:15;h30g?6=3f8997>5;|`4b3<72<0;6=u+22f95<3<@;9n7)?;7;32g>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d>?;50;9~f7e5290?6=4?{%00`?7>;2B9?h5+155957=O:<:0e<=m:188m45d2900e<=k:188k7422900qo:n7;291?6=8r.9?i4>949K66c<,8><6<=;;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm85094?5=83:p(?=k:0;3?M44m2.:8:4n;I064>o6;k0;66g>3b83>>i5:<0;66sm55694?5=83:p(?=k:0;3?M44m2.:8:4<8:J115=n9:h1<75f12a94?=h:;?1<75rb466>5<2290;w)<N5;l1/=9953g9K6065<5<6=44}c772?6==3:15;h30g?6=3`;8h7>5;h30a?6=3f8997>5;|`7f3<72:0;6=u+22f95<6<@;9n7)?;7;0g?M4282c:?o4?::k27f<722e9>84?::a0g3=8391<7>t$31g>4?73A88i6*>4681`>N5=91b=>l50;9j56e=831d>?;50;9~f1d029086=4?{%00`?7>82B9?h5+15596a=O:<:0e<=m:188m45d2900c?<::188yg2e03:1?7>50z&17a<6191C>>k4$064>7b<@;?;7d?4?:1y'66b=90:0D?=j;%373?4c3A8><6g>3c83>>o6;j0;66a=2483>>{e=h;1<7=50;2x 75c283;7E<8>4i01a>5<5<53;294~"5;m0:5=5G22g8 4202;n0D?;?;h30f?6=3`;8o7>5;n011?6=3th>;o4?:283>5}#::n1=4>4H31f?!73?38o7E<:0:k27g<722c:?n4?::m160<722wi94=50;194?6|,;9o6<7?;I00a>"6<>09h6F=519j56d=831b=>m50;9l673=831vn87m:180>5<7s-88h7?60:J17`=#9==1>i5G2428m45e2900e<=l:188k7422900qo;n3;297?6=8r.9?i4>919K66c<,8><6?j4H373?l74j3:17d?6<729q/>>j51828L75b3-;?;7o6;k0;66g>3b83>>i5:<0;66sm58794?5=83:p(?=k:0;3?M44m2.:8:4=d:J115=n9:h1<75f12a94?=h:;?1<75rb4;g>5<4290;w)<N5;l1/=9952e9K6065<6=44}c7b1?6=;3:15;h30g?6=3f8997>5;|`63c<72:0;6=u+22f95<6<@;9n7)?;7;0g?M4282c:?o4?::k27f<722e9>84?::a1<`=8391<7>t$31g>4?73A88i6*>4681`>N5=91b=>l50;9j56e=831d>?;50;9~f0?029086=4?{%00`?7>82B9?h5+15596a=O:<:0e<=m:188m45d2900c?<::188yg3f?3:1?7>50z&17a<6191C>>k4$064>7b<@;?;7d?o0i3:17d<<4;29?l0f2900c?50z&17a<6:l1C>>k4H373?l1f2900e?=;:188m3g=831d>?o50;9~f31e290?6=4?{%00`?75m2B9?h5G2428m2g=831b>>:50;9j2d<722e9>l4?::a2=0=83>1<7>t$31g>44b3A88i6F=519j3d<722c9?94?::k5e?6=3f89m7>5;|`5=4<72=0;6=u+22f957c<@;9n7E<:0:k4e?6=3`8887>5;h4b>5<5<5<3290;w)<N5;l1C>8>4i6c94?=n::>1<75f6`83>>i5:h0;66sm6c094?2=83:p(?=k:00f?M44m2B99=5f7`83>>o5;=0;66g9a;29?j45i3:17pl9be83>1<729q/>>j513g8L75b3A8><6g8a;29?l44<3:17d8n:188k74f2900qo8l8;290?6=8r.9?i4>2d9K66c<@;?;7d9n:188m7532900e;o50;9l67g=831vn;;::187>5<7s-88h7?=e:J17`=O:<:0e:o50;9j662=831b:l4?::m16d<722wi:;>50;694?6|,;9o6<N5=91b;l4?::k171<722c=m7>5;n01e?6=3th=:o4?:583>5}#::n1=?k4H31f?M4282c5;h000?6=3`5<54;294~"5;m0:>h5G22g8L7373`=j6=44i317>5<6=4;:183!44l3;9i6F=3d9K606k1<75f22694?=n>h0;66a=2`83>>{e>><1<7:50;2x 75c288n7E<>o1i3:17b<=a;29?xd1?>0;694?:1y'66b=9;o0D?=j;I064>o0i3:17d<<4;29?l0f2900c?50z&17a<6:l1C>>k4H373?l1f2900e?=;:188m3g=831d>?o50;9~f31>290?6=4?{%00`?75m2B9?h5G2428m2g=831b>>:50;9j2d<722e9>l4?::a22g=83>1<7>t$31g>44b3A88i6F=519j3d<722c9?94?::k5e?6=3f89m7>5;|`53f<72=0;6=u+22f957c<@;9n7E<:0:k4e?6=3`8887>5;h4b>5<5<5<3290;w)<N5;l1C>8>4i6c94?=n::>1<75f6`83>>i5:h0;66sm66d94?2=83:p(?=k:00f?M44m2B99=5f7`83>>o5;=0;66g9a;29?j45i3:17pl98183>1<729q/>>j513g8L75b3A8><6g8a;29?l44<3:17d8n:188k74f2900qo871;290?6=8r.9?i4>2d9K66c<@;?;7d9n:188m7532900e;o50;9l67g=831vn;6=:187>5<7s-88h7?=e:J17`=O:<:0e:o50;9j662=831b:l4?::m16d<722wi:5=50;694?6|,;9o6<N5=91b;l4?::k171<722c=m7>5;n01e?6=3th=494?:583>5}#::n1=?k4H31f?M4282c5;h000?6=3`5<54;294~"5;m0:>h5G22g8L7373`=j6=44i317>5<k1<75f22694?=n>h0;66a=2`83>>{e>121<7:50;2x 75c288n7E<>o1i3:17b<=a;29?xd38<0;694?:1y'66b=9;h0D?=j;I064>o0i3:17d<=b;29?l0f2900c?1i3:187>50z&17a<6:k1C>>k4H373?l1f2900e??o50;9~f=ce290?6=4?{%00`?7>;2B9?h5+1559<>N5=91b=>l50;9j56e=831b=>j50;9l673=831vn8l7:186>5<7s-88h7?=d:J17`=O:<:0e:o50;9j67d=831b>>:50;9j2d<722e9>l4?::a7cg=83?1<7>t$31g>44c3A88i6F=519j3d<722c9>o4?::k171<722c=m7>5;n01e?6=3th8j=4?:483>5}#::n1=?j4H31f?M4282c5;h01f?6=3`8887>5;h4b>5<5;h30g?6=3`;8h7>5;n011?6=3th8ih4?:483>5}#::n1=4;4H31f?!73?3;87E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi?k750;694?6|,;9o6<7<;I00a>"6<>0:><5G2428m45e2900e<=l:188m45c2900c?<::188yg5a?3:197>50z&17a<61<1C>>k4$064>45<@;?;7d?<6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e=>>1<7;50;2x 75c283>7E<8>4i01a>5<5<5<55;294~"5;m0:585G22g8 4202::0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n011?6=3th>;54?:483>5}#::n1=4;4H31f?!73?39;7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi95:50;794?6|,;9o6<7:;I00a>"6<>08<6F=519j56d=831b=>m50;9j56b=831b=>k50;9l673=831vn869:186>5<7s-88h7?65:J17`=#9==1?=5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo;7c;291?6=8r.9?i4>949K66c<,8><6>>4H373?l74j3:17d?0<729q/>>j51878L75b3-;?;7=?;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm59g94?3=83:p(?=k:0;6?M44m2.:8:4<0:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h:;?1<75rb4;3>5<2290;w)<N5;l1/=995319K6065<5<6=44}c7:6?6==3:15;h30g?6=3`;8h7>5;h30a?6=3f8997>5;|`0b7<72:0;6=u+22f95<6<@;9n7)?;7;01?M4282c:?o4?::k27f<722e9>84?::a7c7=83?1<7>t$31g>4?23A88i6*>46874>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d>?;50;9~f247290>6=4?{%00`?7>=2B9?h5+155972=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg15:3:197>50z&17a<61<1C>>k4$064>61<@;?;7d?<6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e?;<1<7;50;2x 75c283>7E<836=4::183!44l3;296F=3d9'511=;>1C>8>4i01a>5<5<5<55;294~"5;m0:585G22g8 4202:=0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n011?6=3th<>n4?:483>5}#::n1=4;4H31f?!73?39<7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi;"6<>08;6F=519j56d=831b=>m50;9j56b=831b=>k50;9l673=831vn:6k:186>5<7s-88h7?65:J17`=#9==1?l5G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo;<0;290?6=8r.9?i4>929K66c<,8><6<<4H373?l74j3:17d?5<2290;w)<N5;l1/=9951248L7373`;8n7>5;h30g?6=3`;8h7>5;h30a?6=3f8997>5;|`0bg<72<0;6=u+22f957b<@;9n7E<:0:k4e?6=3`89n7>5;h000?6=3`5<7>53;294~"5;m0:>45G22g8L7373`=j6=44i7c94?=h:;k1<75rb90e>5<3290;w)<N5;l1C>8>4i01a>5<5<6=44}c:04?6=<3:15<5<jh7>54;294~"5;m0:555G22g8L7373`;8n7>5;h30g?6=3`8887>5;n011?6=3th?mh4?:483>5}#::n1=4;4H31f?!73?38?7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m160<722wi8lh50;794?6|,;9o6<7:;I00a>"6<>0::6F=519j56d=831b=>m50;9j56b=831b=>k50;9l673=831vn8=>:187>5<7s-88h7?68:J17`=O:<:0e<=m:188m45d2900e?=;:188k7422900qo;<2;291?6=8r.9?i4>949K66c<,8><6?l4H373?l74j3:17d?0<729q/>>j51878L75b3-;?;787;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm2cd94?2=83:p(?=k:0;;?M44m2B99=5f12`94?=n9:i1<75f22694?=h:;?1<75rb3a3>5<2290;w)<N5;l1/=9951d9K6065<5<6=44}c0`5?6==3:15<5<6=44}c774?6=<3:15;h000?6=3f8997>5;|`607<72<0;6=u+22f95<3<@;9n7)?;7;302>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d>?;50;9~f05>290?6=4?{%00`?7>02B9?h5G2428m45e2900e<=l:188m7532900c?<::188yg34i3:187>50z&17a<61:1C>>k4$064>3e<@;?;7d?0<729q/>>j51878L75b3-;?;7?;;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i5:<0;66sm53f94?2=83:p(?=k:0;;?M44m2B99=5f12`94?=n9:i1<75f22694?=h:;?1<75rb40f>5<2290;w)<N5;l1/=995159K6065<5<6=44}c71b?6==3:184?::a160=83>1<7>t$31g>4??3A88i6F=519j56d=831b=>m50;9j662=831d>?;50;9~f050290>6=4?{%00`?7>=2B9?h5+155954=O:<:0e<=m:188m45d2900e<=k:188m45b2900c?<::188yg3403:197>50z&17a<61<1C>>k4$064>4523A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a=2483>>{e=:n1<7:50;2x 75c28337E<1<75`23794?=zj<9n6=4;:183!44l3;2?6F=3d9'511=<2B99=5f12`94?=n9:i1<75f12f94?=h:;?1<75rb41e>5<2290;w)<N5;l1/=9951248L7373`;8n7>5;h30g?6=3`;8h7>5;h30a?6=3f8997>5;|`1f<<72=0;6=u+22f95<><@;9n7E<:0:k27g<722c:?n4?::k171<722e9>84?::a6gg=83>1<7>t$31g>4?43A88i6*>4687?M4282c:?o4?::k27f<722c:?i4?::m160<722wi>ol50;794?6|,;9o6<7:;I00a>"6<>0:?85G2428m45e2900e<=l:188m45c2900e<=j:188k7422900qo6jd;290?6=8r.9?i4>999K66c<@;?;7d?1<729q/>>j518:8L75b3A8><6g>3c83>>o6;j0;66g=3583>>i5:<0;66sm92g94?2=83:p(?=k:0;;?M44m2B99=5f12`94?=n9:i1<75f22694?=h:;?1<75rb862>5<3290;w)<N5;l1C>8>4i01a>5<5<6=44}c;3a?6=<3:15;h000?6=3f8997>5;|`:02<72=0;6=u+22f95<><@;9n7E<:0:k27g<722c:?n4?::k171<722e9>84?::a=12=83>1<7>t$31g>4??3A88i6F=519j56d=831b=>m50;9j662=831d>?;50;9~f<4a290?6=4?{%00`?7>02B9?h5G2428m45e2900e<=l:188m7532900c?<::188yg?403:187>50z&17a<6111C>>k4H373?l74j3:17d?o6;k0;66g>3b83>>o5;=0;66a=2483>>{e0o:1<7:50;2x 75c28337E<1<75`23794?=zj0>j6=4;:183!44l3;246F=3d9K6065<5<54;294~"5;m0:555G22g8L7373`;8n7>5;h30g?6=3`8887>5;n011?6=3th25}#::n1=464H31f?M4282c:?o4?::k27f<722c9?94?::m160<722wi4k=50;694?6|,;9o6<77;I00a>N5=91b=>l50;9j56e=831b>>:50;9l673=831vn4>::187>5<7s-88h7?68:J17`=O:<:0e<=m:188m45d2900e?=;:188k7422900qo6i6;290?6=8r.9?i4>999K66c<@;?;7d?1<729q/>>j518:8L75b3A8><6g>3c83>>o6;j0;66g=3583>>i5:<0;66sm8g;94?2=83:p(?=k:0;;?M44m2B99=5f12`94?=n9:i1<75f22694?=h:;?1<75rb82a>5<3290;w)<N5;l1C>8>4i01a>5<5<6=44}c;25?6=<3:15;h000?6=3f8997>5;|`:51<72=0;6=u+22f95<><@;9n7E<:0:k27g<722c:?n4?::k171<722e9>84?::a=41=83>1<7>t$31g>4??3A88i6F=519j56d=831b=>m50;9j662=831d>?;50;9~f<7f290?6=4?{%00`?7>02B9?h5G2428m45e2900e<=l:188m7532900c?<::188yg23j3:187>50z&17a<6111C>>k4H373?l74j3:17d?o6;k0;66g>3b83>>o5;=0;66a=2483>>{e<=31<7:50;2x 75c28337E<1<75`23794?=zj=:<6=4;:183!44l3;246F=3d9K6065<5<?j7>54;294~"5;m0:555G22g8L7373`;8n7>5;h30g?6=3`8887>5;n011?6=3th?9i4?:583>5}#::n1=464H31f?M4282c:?o4?::k27f<722c9?94?::m160<722wi8:;50;694?6|,;9o6<77;I00a>N5=91b=>l50;9j56e=831b>>:50;9l673=831vn986:187>5<7s-88h7?68:J17`=O:<:0e<=m:188m45d2900e?=;:188k7422900qo:>3;290?6=8r.9?i4>999K66c<@;?;7d?1<729q/>>j518:8L75b3A8><6g>3c83>>o6;j0;66g=3583>>i5:<0;66sm49394?2=83:p(?=k:0;;?M44m2B99=5f12`94?=n9:i1<75f22694?=h:;?1<75rb50a>5<3290;w)<N5;l1C>8>4i01a>5<5<6=44}c61=?6=<3:15;h000?6=3f8997>5;|`7=<<72=0;6=u+22f95<><@;9n7E<:0:k27g<722c:?n4?::k171<722e9>84?::a07b=83>1<7>t$31g>4??3A88i6F=519j56d=831b=>m50;9j662=831d>?;50;9~f1g2290?6=4?{%00`?7>02B9?h5G2428m45e2900e<=l:188m7532900c?<::188yg24j3:187>50z&17a<6111C>>k4H373?l74j3:17d?o6;k0;66g>3b83>>o5;=0;66a=2483>>{e<:;1<7:50;2x 75c28337E<1<75`23794?=zj=9m6=4;:183!44l3;246F=3d9K6065<5<8?7>54;294~"5;m0:555G22g8L7373`;8n7>5;h30g?6=3`8887>5;n011?6=3th??84?:583>5}#::n1=464H31f?M4282c:?o4?::k27f<722c9?94?::m160<722wi89=50;694?6|,;9o6<77;I00a>N5=91b=>l50;9j56e=831b>>:50;9l673=831vn9:::187>5<7s-88h7?68:J17`=O:<:0e<=m:188m45d2900e?=;:188k7422900qo:<7;290?6=8r.9?i4>999K66c<@;?;7d?1<729q/>>j518:8L75b3A8><6g>3c83>>o6;j0;66g=3583>>i5:<0;66sm45594?2=83:p(?=k:0;;?M44m2B99=5f12`94?=n9:i1<75f22694?=h:;?1<75rb56g>5<3290;w)<N5;l1C>8>4i01a>5<5<6=44}c6;`?6=<3:15;h000?6=3f8997>5;|`76c<72=0;6=u+22f95<><@;9n7E<:0:k27g<722c:?n4?::k171<722e9>84?::a017=83>1<7>t$31g>4??3A88i6F=519j56d=831b=>m50;9j662=831d>?;50;9~f134290?6=4?{%00`?7>02B9?h5G2428m45e2900e<=l:188m7532900c?<::188yg>2?3:1>7>50z&17a<60h1C>>k4H373?l7413:17b<=5;29?xd?;>0;6?4?:1y'66b=91k0D?=j;I064>o6;00;66a=2483>>{e?k21<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7d794?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?l=1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7d;94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?jo1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7df94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?lh1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7eg94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?l91<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7b094?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?kk1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7dd94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?j>1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7b494?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?ki1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7b:94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?ko1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7bc94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?j:1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7ba94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?m:1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7e094?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?m>1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm7e494?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;081<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm36d94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;0:1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm35f94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;0?1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm3`194?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;kh1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm3`d94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;<6g>3c83>>i5:<0;66sm37494?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;j=1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm36094?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;>:1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm3ed94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;>>1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm3d`94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;181<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm39694?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;>21<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm39494?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;>k1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm36a94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;1k1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm39a94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;>o1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm38:94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;1o1<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm38694?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;m91<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm36494?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e;121<7<50;2x 75c282m7E<<6g>3c83>>i5:<0;66sm38c94?4=83:p(?=k:0:e?M44m2.:8:4i;I064>o6;k0;66a=2483>>{e?0n1<7:50;2x 75c283?7E<5<3290;w)<N5;l1/=9956e9K6065<5<54;294~"5;m0:595G22g8 4202?n0D?;?;h30f?6=3`;8o7>5;h30`?6=3f;3h7>5;|`4=d<72=0;6=u+22f95<2<@;9n7)?;7;4g?M4282c:?o4?::k27f<722c:?i4?::m2"6<>0=h6F=519j56d=831b=>m50;9j56b=831d=5j50;9~f2?0290?6=4?{%00`?7><2B9?h5+15592a=O:<:0e<=m:188m45d2900e<=k:188k4>c2900qo966;290?6=8r.9?i4>959K66c<,8><6;j4H373?l74j3:17d?0D?=j;%373?0c3A8><6g>3c83>>o6;j0;66g>3e83>>i60m0;66sm78694?2=83:p(?=k:0;7?M44m2.:8:49d:J115=n9:h1<75f12a94?=n9:n1<75`19f94?=zj>386=4;:183!44l3;286F=3d9'511=>m1C>8>4i01a>5<5<5;h30g?6=3`;8h7>5;n3;`?6=3th<5<4?:583>5}#::n1=4:4H31f?!73?31<7>t$31g>4?33A88i6*>4685`>N5=91b=>l50;9j56e=831b=>j50;9l5=b=831vn:6i:187>5<7s-88h7?64:J17`=#9==1:i5G2428m45e2900e<=l:188m45c2900c<6k:188yg1f=3:187>50z&17a<61=1C>>k4$064>3b<@;?;7d?1<729q/>>j51868L75b3-;?;78k;I064>o6;k0;66g>3b83>>o6;m0;66a>8e83>>{e?h91<7:50;2x 75c283?7E<5<3290;w)<N5;l1/=9956e9K6065<5<54;294~"5;m0:595G22g8 4202?n0D?;?;h30f?6=3`;8o7>5;h30`?6=3f;3h7>5;|`4e5<72=0;6=u+22f95<2<@;9n7)?;7;4g?M4282c:?o4?::k27f<722c:?i4?::m2"6<>0=h6F=519j56d=831b=>m50;9j56b=831d=5j50;9~f2?b290?6=4?{%00`?7><2B9?h5+15592a=O:<:0e<=m:188m45d2900e<=k:188k4>c2900qo969;290?6=8r.9?i4>959K66c<,8><6;j4H373?l74j3:17d?0D?=j;%373?0c3A8><6g>3c83>>o6;j0;66g>3e83>>i60m0;66sm5c394?5=83:p(?=k:0;1?M44m2.:8:4>199K6065<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`6f0<72=0;6=u+22f95<7<@;9n7)?;7;5b?M4282c:?o4?::k27f<722e:4i4?::m160<722wi9o850;794?6|,;9o6<78;I00a>"6<>0:j6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn;k<:187>5<7s-88h7?64:J17`=#9==1=<74H373?l74j3:17d?0D?=j;%373?7612B99=5f12`94?=n9:i1<75f12f94?=h91n1<75rb7g5>5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n3;`?6=3th<;i4?:583>5}#::n1=4:4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d=5j50;9~f3cd290?6=4?{%00`?7><2B9?h5+155954?<@;?;7d?1<729q/>>j51868L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`19f94?=zj>2;6=4;:183!44l3;286F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f;3h7>5;|`4<6<72=0;6=u+22f95<2<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l5=b=831vn;ki:187>5<7s-88h7?64:J17`=#9==1=<74H373?l74j3:17d?0D?=j;%373?7612B99=5f12`94?=n9:i1<75f12f94?=h91n1<75rb621>5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n3;`?6=3th=j?4?:583>5}#::n1=4:4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d=5j50;9~f262290?6=4?{%00`?7><2B9?h5+155954?<@;?;7d?1<729q/>>j51868L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`19f94?=zj?l>6=4;:183!44l3;286F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f;3h7>5;|`44=<72=0;6=u+22f95<2<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l5=b=831vn:>m:187>5<7s-88h7?64:J17`=#9==1=<74H373?l74j3:17d?0D?=j;%373?7612B99=5f12`94?=n9:i1<75f12f94?=h91n1<75rb62f>5<3290;w)<N5;l1/=99510;8L7373`;8n7>5;h30g?6=3`;8h7>5;n3;`?6=3th=jk4?:583>5}#::n1=4:4H31f?!73?3;:56F=519j56d=831b=>m50;9j56b=831d=5j50;9~f276290?6=4?{%00`?7><2B9?h5+155954?<@;?;7d?1<729q/>>j51868L75b3-;?;7?>9:J115=n9:h1<75f12a94?=n9:n1<75`19f94?=zj>;<6=4;:183!44l3;286F=3d9'511=9830D?;?;h30f?6=3`;8o7>5;h30`?6=3f;3h7>5;|`45d<72=0;6=u+22f95<2<@;9n7)?;7;32=>N5=91b=>l50;9j56e=831b=>j50;9l5=b=831vn;jk:185>5<7s-88h7?66:J17`=#9==196F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831d>?;50;9~f6`?290?6=4?{%00`?7><2B9?h5+155950=O:<:0e<=m:188m45d2900e<=k:188k4>c2900qo794;291?6=8r.9?i4>969K66c<,8><6>94H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7=8;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm97394?3=83:p(?=k:0;4?M44m2.:8:4<7:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb843>5<2290;w)<N5;l1/=995369K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`:1`<72<0;6=u+22f95<1<@;9n7)?;7;14?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a=0b=83?1<7>t$31g>4?03A88i6*>46803>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f<3d290>6=4?{%00`?7>?2B9?h5+155972=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg?2j3:197>50z&17a<61>1C>>k4$064>61<@;?;7d?=h0;684?:1y'66b=90=0D?=j;%373?503A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a>8e83>>{e1<31<7;50;2x 75c283<7E<1C>8>4i01a>5<5<5<:7>55;294~"5;m0:5:5G22g8 4202:=0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th2984?:483>5}#::n1=494H31f?!73?39<7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m2"6<>08;6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn4;<:186>5<7s-88h7?67:J17`=#9==1?:5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo7:2;291?6=8r.9?i4>969K66c<,8><6>94H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7=8;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm94294?3=83:p(?=k:0;4?M44m2.:8:4<7:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb86e>5<2290;w)<N5;l1/=995369K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`:0a<72<0;6=u+22f95<1<@;9n7)?;7;14?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a=3d=83?1<7>t$31g>4?03A88i6*>46803>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f<0f290>6=4?{%00`?7>?2B9?h5+155972=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg?113:197>50z&17a<61>1C>>k4$064>61<@;?;7d?>10;684?:1y'66b=90=0D?=j;%373?503A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a>8e83>>{e1?=1<7;50;2x 75c283<7E<1C>8>4i01a>5<5<5<55;294~"5;m0:5:5G22g8 4202:=0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th2:?4?:483>5}#::n1=494H31f?!73?39<7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m2"6<>08;6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn4:l:186>5<7s-88h7?67:J17`=#9==1?:5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo7>d;291?6=8r.9?i4>969K66c<,8><6>94H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7=8;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm93294?3=83:p(?=k:0;4?M44m2.:8:4<7:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb802>5<2290;w)<N5;l1/=995369K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`:61<72<0;6=u+22f95<1<@;9n7)?;7;14?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a=70=83?1<7>t$31g>4?03A88i6*>46803>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f<40290>6=4?{%00`?7>?2B9?h5+155972=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg?513:197>50z&17a<61>1C>>k4$064>61<@;?;7d?:h0;684?:1y'66b=90=0D?=j;%373?503A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a>8e83>>{e1:81<7;50;2x 75c283<7E<1C>8>4i01a>5<5<5<55;294~"5;m0:5:5G22g8 4202:=0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th2>i4?:483>5}#::n1=494H31f?!73?39<7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m2;50;794?6|,;9o6<78;I00a>"6<>08;6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn4=9:186>5<7s-88h7?67:J17`=#9==1?:5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo979;291?6=8r.9?i4>969K66c<,8><6?k4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm4c694?5=83:p(?=k:0;1?M44m2.:8:4=2:J115=n9:h1<75f12a94?=h91n1<75rb91g>5<2290;w)<N5;l1/=9951308L7373`;8n7>5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`1g0<72=0;6=u+22f95<7<@;9n7)?;7;32<>N5=91b=>l50;9j56e=831d=5j50;9l673=831vn55<7s-88h7?67:J17`=#9==1=?=4H373?l74j3:17d?1<729q/>>j51868L75b3-;?;7=6;I064>o6;k0;66g>3b83>>o6;m0;66a>8e83>>{e2h6=4::183!44l3;2;6F=3d9'511=:l1C>8>4i01a>5<5<5<55;294~"5;m0:5:5G22g8 4202::0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th>;n4?:483>5}#::n1=494H31f?!73?39;7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m250;794?6|,;9o6<78;I00a>"6<>08<6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn86=:186>5<7s-88h7?67:J17`=#9==1?=5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo;64;291?6=8r.9?i4>969K66c<,8><6>>4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7=?;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm58494?3=83:p(?=k:0;4?M44m2.:8:4<0:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb4;b>5<2290;w)<N5;l1/=995319K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`6=`<72<0;6=u+22f95<1<@;9n7)?;7;13?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a1d4=83?1<7>t$31g>4?03A88i6*>46804>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f0g7290>6=4?{%00`?7>?2B9?h5+155975=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg3f<3:197>50z&17a<61>1C>>k4$064>66<@;?;7d?<6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a>8e83>>{e=h21<7;50;2x 75c283<7E<8>4i01a>5<5<5<55;294~"5;m0:5:5G22g8 4202::0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th>;=4?:483>5}#::n1=494H31f?!73?39;7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m2"6<>08<6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn89=:186>5<7s-88h7?67:J17`=#9==1?=5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo8ke;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<5;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9;0;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9;b;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9:6;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9:d;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo994;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo99f;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo988;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo975;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo8id;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9>c;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9=d;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9=e;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9=f;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<0;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<1;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<2;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<3;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<4;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<6;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<7;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<8;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9<9;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9;1;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9;2;291?6=8r.9?i4>969K66c<,8><6h5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo;77;291?6=8r.9?i4>969K66c<,8><6>>4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7=?;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm56794?3=83:p(?=k:0;4?M44m2.:8:4<0:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb45:>5<2290;w)<N5;l1/=995319K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`6<6<72<0;6=u+22f95<1<@;9n7)?;7;13?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a1=3=83?1<7>t$31g>4?03A88i6*>46804>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f0>e290>6=4?{%00`?7>?2B9?h5+155975=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg3?13:197>50z&17a<61>1C>>k4$064>66<@;?;7d?<6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a>8e83>>{e=1l1<7;50;2x 75c283<7E<8>4i01a>5<5<5<55;294~"5;m0:5:5G22g8 4202:=0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th<;o4?:483>5}#::n1=494H31f?!73?39<7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m2"6<>08;6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn:9j:186>5<7s-88h7?67:J17`=#9==1?:5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo8jd;291?6=8r.9?i4>969K66c<,8><6>94H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7=8;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm79394?3=83:p(?=k:0;4?M44m2.:8:4<7:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb6:7>5<2290;w)<N5;l1/=995369K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`5a4<72<0;6=u+22f95<1<@;9n7)?;7;14?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a355=83?1<7>t$31g>4?03A88i6*>46803>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f3`4290>6=4?{%00`?7>?2B9?h5+155972=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg17>3:197>50z&17a<61>1C>>k4$064>61<@;?;7d?<6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a>8e83>>{e>o<1<7;50;2x 75c283<7E<:26=4::183!44l3;2;6F=3d9'511=;>1C>8>4i01a>5<5<5<55;294~"5;m0:5:5G22g8 4202:=0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th=jn4?:483>5}#::n1=494H31f?!73?39<7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m2"6<>08;6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn:>?:186>5<7s-88h7?67:J17`=#9==1?:5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo9>2;291?6=8r.9?i4>969K66c<,8><6>94H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7=8;I064>o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm70:94?3=83:p(?=k:0;4?M44m2.:8:4<7:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb63a>5<2290;w)<N5;l1/=995369K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`4<2<72<0;6=u+22f95<1<@;9n7)?;7;0f?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a<67=83>1<7>t$31g>4?33A88i6*>46825d=O:<:0e<=m:188m45d2900e<=k:188k4>c2900qo;;1;291?6=8r.9?i4>969K66c<,8><6>o4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm92a94?3=83:p(?=k:0;4?M44m2.:8:4=c:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb81e>5<2290;w)<N5;l1/=9952b9K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`:4c<72<0;6=u+22f95<1<@;9n7)?;7;0`?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a=1>=83?1<7>t$31g>4?03A88i6*>4681g>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f<22290>6=4?{%00`?7>?2B9?h5+15596f=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg?483:197>50z&17a<61>1C>>k4$064>7e<@;?;7d?;00;684?:1y'66b=90=0D?=j;%373?4d3A8><6g>3c83>>o6;j0;66g>3e83>>o6;l0;66a>8e83>>{e0on1<7;50;2x 75c283<7E<8>4i01a>5<5<5<55;294~"5;m0:5:5G22g8 4202;i0D?;?;h30f?6=3`;8o7>5;h30`?6=3`;8i7>5;n3;`?6=3th2<=4?:483>5}#::n1=494H31f?!73?38h7E<:0:k27g<722c:?n4?::k27a<722c:?h4?::m2"6<>09o6F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn5h;:186>5<7s-88h7?67:J17`=#9==1>n5G2428m45e2900e<=l:188m45c2900e<=j:188k4>c2900qo7?6;291?6=8r.9?i4>969K66c<,8><6?m4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7o6;k0;66g>3b83>>o6;m0;66g>3d83>>i60m0;66sm91;94?3=83:p(?=k:0;4?M44m2.:8:4=c:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb9db>5<2290;w)<N5;l1/=9952b9K6065<5<5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`:57<72<0;6=u+22f95<1<@;9n7)?;7;0`?M4282c:?o4?::k27f<722c:?i4?::k27`<722e:4i4?::a=43=83?1<7>t$31g>4?03A88i6*>4681g>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f<7?290>6=4?{%00`?7>?2B9?h5+15596f=O:<:0e<=m:188m45d2900e<=k:188m45b2900c<6k:188yg?6j3:197>50z&17a<61>1C>>k4$064>7e<@;?;7d?5;h30`?6=3`;8i7>5;n3;`?6=3th?8l4?:483>5}#::n1=494H31f?!73?3;996F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn9>7:186>5<7s-88h7?67:J17`=#9==1=?;4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7?=5:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb57f>5<2290;w)<N5;l1/=9951378L7373`;8n7>5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`733<72<0;6=u+22f95<1<@;9n7)?;7;311>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f10f290>6=4?{%00`?7>?2B9?h5+1559573<@;?;7d?5;h30`?6=3`;8i7>5;n3;`?6=3th?4?4?:483>5}#::n1=494H31f?!73?3;996F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn95<7s-88h7?67:J17`=#9==1=?;4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7?=5:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb5;b>5<2290;w)<N5;l1/=9951378L7373`;8n7>5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`76`<72<0;6=u+22f95<1<@;9n7)?;7;311>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f1g1290>6=4?{%00`?7>?2B9?h5+1559573<@;?;7d?5;h30`?6=3`;8i7>5;n3;`?6=3th???4?:483>5}#::n1=494H31f?!73?3;996F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn9:?:186>5<7s-88h7?67:J17`=#9==1=?;4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7?=5:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb515>5<2290;w)<N5;l1/=9951378L7373`;8n7>5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`701<72<0;6=u+22f95<1<@;9n7)?;7;311>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f121290>6=4?{%00`?7>?2B9?h5+1559573<@;?;7d?5;h30`?6=3`;8i7>5;n3;`?6=3th?854?:483>5}#::n1=494H31f?!73?3;996F=519j56d=831b=>m50;9j56b=831b=>k50;9l5=b=831vn9:j:186>5<7s-88h7?67:J17`=#9==1=?;4H373?l74j3:17d?0<729q/>>j51858L75b3-;?;7?=5:J115=n9:h1<75f12a94?=n9:n1<75f12g94?=h91n1<75rb513>5<2290;w)<N5;l1/=9951378L7373`;8n7>5;h30g?6=3`;8h7>5;h30a?6=3f;3h7>5;|`707<72<0;6=u+22f95<1<@;9n7)?;7;311>N5=91b=>l50;9j56e=831b=>j50;9j56c=831d=5j50;9~f133290>6=4?{%00`?7>?2B9?h5+1559573<@;?;7d?;fl;0<:63nd3843>;2j>0=m63:bb85e>;2jm0=m63:bd85e>;2kj0=m63:ce85e>;2kl0=m63:cg85e>;2im0=m63:ad85e>;1l>0=m639d985e>;1l00=m639d`85e>;2l90=m639dc85e>;2l80=m6398885e>;10h0=m6398c85e>;10j0=m6398e85e>;10l0=m6398g85e>;1190=m6399385e>;11:0=m6399585e>;11<0=m6399785e>;11>0=m6399985e>;1100=m6399`85e>;11k0=m6399e85e>;11l0=m6399g85e>;1i90=m639a085e>;1i;0=m639a285e>;1i=0=m639a485e>;1i?0=m639a985e>;1i00=m639a`85e>;1ik0=m639ab85e>;1im0=m639ad85e>;1io0=m639b185e>;1j80=m639b285e>;1j=0=m639b485e>;1j?0=m639b685e>;1j10=m639b885e>;1jh0=m639bc85e>;1jj0=m639bd85e>;1jo0=m639c185e>;1k80=m639c385e>;1k:0=m639c585e>;1k<0=m639c785e>;1k>0=m639c885e>;1kh0=m639cc85e>;1kj0=m639ce85e>;1kl0=m639cg85e>;1l90=m639d085e>;1l;0=m6395785e>;1=>0=m6395985e>;1=00=m6395`85e>;1=k0=m6395b85e>;1=m0=m6395d85e>;1=o0=m6396085e>;1>;0=m6396285e>;1>=0=m6396485e>;1>?0=m6396685e>;1>10=m6396885e>;1>h0=m6396b85e>;1>m0=m6396d85e>;1>o0=m6397185e>;1?80=m6397385e>;1?:0=m63:c085e>;2k;0=m63:ag85e>;2j:0=m63n8g85e>;f190<:63n91843>;f180<:63n90843>;f8o0<:63n0g843>;f990<:63n11843>;38?0=m63=cc85e>;3890=m63;0085e>;38;0=m63;4;4090=m63<9785e>;4i=0=m63;4jj0=m63;4l=0=m63;4;4>>0=m63<7085e>;4?:0=m63<7485e>;4?>0=m63<7885e>;4?k0=m63<7e85e>;4080=m63<8285e>;40<0=m63<8685e>;4000=m63<8c85e>;40m0=m63<8g85e>;4180=m63<9285e>;41>0=m63<9885e>;41k0=m63<9b85e>;41m0=m63<9d85e>;41o0=m63;4i80=m63;4i<0=m63;4i>0=m63;4i00=m63;4ik0=m63;4im0=m63;4j80=m63;4j:0=m63;4j<0=m63;4j>0=m63;4j00=m63;4jm0=m63;4jo0=m63;4k80=m63;4k:0=m63;4k<0=m63;4k00=m63;4kk0=m63;4km0=m63;4ko0=m63;4l80=m63;4l<0=m63;4l>0=m63;4l00=m63;4lk0=m63;4lm0=m63;4m80=m63;4m:0=m63;4m<0=m63;4m>0=m63;4m00=m63;4=90=m63<5085e>;4=;0=m63<5285e>;4==0=m63<5485e>;4=?0=m63<5685e>;4=10=m63<5885e>;4=j0=m63<5e85e>;4=l0=m63<5g85e>;4>90=m63<6085e>;4>;0=m63<6285e>;4>=0=m63<6485e>;4>10=m63<6885e>;4>h0=m63<6c85e>;4>j0=m63<6e85e>;4>l0=m63<6g85e>;4n<0=m63;?;k0=m6374285e>;?;?=80=m637ac85e>;?ij0=m637d285e>;?ll0=m637e085e>;?m;0=m637e285e>;?m=0=m637e485e>;?m?0=m637ae85e>;?j10=m637c285e>;?kj0=m637ce85e>;?kl0=m637cg85e>;?l90=m637d085e>;?l;0=m637d585e>;?l<0=m637d785e>;?l>0=m637d985e>;?l00=m637d`85e>;?lk0=m637db85e>;?lm0=m637dg85e>;?m90=m6376385e>;?>:0=m6376585e>;?><0=m6376785e>;?>>0=m6376985e>;?>00=m6375585e>;?=<0=m6373b85e>;?;l0=m6374985e>;?<00=m6374`85e>;?;?m>0=m63714841>;?m10=m638f9841>;?il0=m63717841>;?m00=m63716841>;?mh0=m638f8841>;?io0=m638f`841>;?j90=m638fe841>;?j:0=m638fc841>;?j80=m638fb841>;?j;0=m638fd841>;?j=0=m638fg841>;?j<0=m63701841>;?j?0=m63700841>;?j>0=m63703841>;?j00=m63702841>;?jh0=m63707841>;?jm0=m63705841>;?jk0=m63704841>;?jj0=m63706841>;?jl0=m63709841>;?jo0=m63708841>;?k90=m6370`841>;?k80=m6370c841>;?k;0=m6370b841>;?k=0=m6370g841>;?k>0=m6370e841>;?k<0=m6370d841>;?k?0=m63711841>;?k10=m63710841>;?k00=m63713841>;?kh0=m63712841>;?kk0=m6395285e>;1==0=m6397c85e>;10?0=m6399085e>;11j0=m639a685e>;1j;0=m639be85e>;1k10=m6395485e>;1>90=m6396c85e>;1?=0=m6397485e>;1??0=m6397685e>;1?10=m6397885e>;1?h0=m6397b85e>;1?m0=m6397d85e>;1?o0=m6398185e>;1080=m6398385e>;10:0=m6398585e>;10<0=m6398685e>;1010=m63;0485e>;?>h0=m63:b985e>;4nh0=m63;4nk0=m63:d385e>{t1081<79={_;:6>;0i?0:?o524g`956d<5=lj6<=m;<6e=?74j27>8n4>3c9>1f1=9:o018m;:01a?833m3;8n63=86827g=::1<1=>l4=3:6>45e348i;7?o8512`897>4289i70;5?m0:?o52290956d<5;km6<=m;<0a0?74j279;n4>3c9>6=7=9:h01?oj:01a?84e;3;8n63=7c827g=::1:1=>l4=3cg>45e348i>7?:h512`897gd289i70;5?00:?o5226g956d<5;ki6<=m;<0a4?74j279;>4>3c9>62>=9:h01?o::01a?84fi3;8n63=73827g=::>=1=>l4=3c7>45e348j57?:8512`897g4289i70;5?90:?o52267956d<5;k96<=m;<0b3?74j279:k4>3c9>622=9:h01?o>:01a?84f>3;8n63=68827g=::?o1=>l4=3;a>45e348j<7?;j512`897?f289i70<6f;30f>;5>>0:?o5227a956d<5;326<=m;<0:a?74j279:;4>3c9>63d=9:h01?77:01a?84>l3;8n63=64827g=::?k1=>l4=3;4>45e3482o7?;:512`897?6289i70<66;30f>;5=l0:?o52271956d<5;3;6<=m;<0:1?74j2799i4>3c9>634=9:h01?6i:01a?84><3;8n63=5b827g=::?;1=>l4=3:f>45e3482?7?;>512`897>c289i70<62;30f>;5=h0:?o5229a956d<5;?26<=m;<0;f?74j279954>3c9>6=g=9:h01?66:01a?84?03;8n63=be827a=:;o31=>l4=2d1>45d34>ji7?n>512g8905b289i70;m6;30a>;4n10:?o5rs8`5>5<5irT2n;525c59662<5nh4=2c9>1fe=:;h018mk:30a?83dm389n63:cg816g=:=hn1>?l4=4cf>74e34;f054=:;h01>hl:317?85a=389n63?l4=960>74e342?j7<=b:?;15<5:k1648?523`89=5d2;8i706;?;:0:?i524c1956e<5=:>6?n54=2c9>7cg=:;h01>h?:30a?85aj389n63;ad827g=:m4}r;`6?6=:rT2o?52a9g956b54z\4b1=:0:?1=>l4=962>45c3429i7?;;<0`=?74k279o:4>3b9>6gb=9:o01>h6:01`?85a:3;8n63;ad827a=::j:1=>j4=3`b>45e349m47?pR4ml;3e9>e5c=9:i0q~7m7;2902}Y1k=01l9j:01a?8g0k3;8n63n79827g=:i><1=>l4=`57>45e34k<>7?;f>10:?o52a74956d<5h<96<=m;3c9>e0e=9:h01l;n:01a?8g203;8n63n57827g=:i<>1=>l4=`71>45e34k><7??289i70o76;30f>;f0=0:?o52a90956d<5h2;6<=m;3c9>e1c=9:h01l6j:01a?8g3k3;8n63n4`827g=:1oo1=>l4=8d`>45e343m47?;>ml0:?o529da956e<50oj6<=l;<;f3b9>=`4=9:i014k?:01`?8?cm3;8o636db827f=:1mk1=>m4=8f;>45d343o:7?;f8h0:?n52a1:956e<5h:=6<=l;3b9>e56=9:i014hn:01`?8?b<3;8o636cd827f=:i9o1=>l4=915>45d348hm7?;2<;0:?n5253d956e<5<9=6?=;;<70b?74m27>n<4>3b9>1g3=9:i019l;:01a?xu>j<0;64uQ9c7893be2;8j70;3i>0:?o523dd956d<5=km6<=j;<0`5?74m27>8=4=359>6f3=9:i0q~ok6;296~;fl;0:=h527`496735bz?b`7<5<<16mi<525189db52;>970ok2;075>;fl;0:=i5282`967g<51??6:=4=976>25<51oi6<=l;<:02?74j273>i4>3e9~w;>nl0:?i529da956d<50nj6<=m;34k1289o707ic;30`>;>mh0:?o529e:956d<5h:=6<=m;|q:g=<720qU5n64=`5;>45c34k=47?;>l?0:?o52a16956d59z\:g2=:i><1=>j4=`45>45c34k>87?;f8;0:?o5rs8a5>5<>sW3h:63n75827a=:i?81=>j4=`71>45c34k3<7?{t1j?1<77t^8a6?8g0:3;8h63n61827a=:i<:1=>j4=`5b>45c343m>7?512`89<`f289i7p}6c583><}Y1j>01l9?:01g?8g2m3;8h63n8b827a=:i?>1=>j4=8d3>45c343oi7?e3c=9:n01l;l:01g?8g?i3;8h63n4d827a=:1lo1=>j4=8f`>45e34k;m7?;<:64?1f3tym6:o4}r;`4?6==rT2o=52a829=f=:i0;15n52a1d9=f=:i8:15n5rs8`f>5<2sW3ii63n918:f>;f1802n63n0g8:f>;f9902n6s|9cf94?3|V0ho70o60;;b?8g>933j70o?f;;b?8g6833j7p}6bb83>0}Y1ki01l7?:8;89d?620301l>i:8;89d772030q~7mb;291~X>jk16m4>5999>e<7=1116m=h5999>e46=111v4ln:186[?ei27j5=464:?b=4<><27j<2wx5o750;7xZ34k2<766;>34k;j766;>3ty2n54?:4y]=g><5h3;6:k4=`;2>2c<5h:m6:k4=`33>2c53z\4a4=:1?31=>k4=815>45b3ty3d9>=7g=9:o0q~9ka;297~X0lh165;;512g89<40289n7p}8d883>6}Y?m30148=:01f?8?5<3;8i6s|7e:94?5|V>n3707:7;30a>;>:80:?h5rs6f4>5<4sW=o;6364b827`=:18o1=>k4}r5g1?6=;rT45e343=?7?;<5g6?74j272:<4>3d9~w2ea2908wS9lf:?4`5<6;k165;>512g8yv1dj3:1?vP8cc9>3fe=9:h014;i:01f?xu0k00;6>uQ7b;892ef289i707:e;30a>{t?j=1<7=t^6a4?81d03;8n6365e827`=z{>i>6=4<{_5`1>;0k?0:?o5294a956c53z\4g6=:?j>1=>l4=87a>45b3tyi96<=m;<;6e?74m2wx;oh50;1xZ2da34=h<7?3c9>=0>=9:o0q~9mb;297~X0jk16;om512`89<31289n7p}8b883>6}Y?k301:ln:01a?8?2=3;8i6s|7dg94?5|V>on709jf;30f>;>==0:?h5rs6g`>5<4sW=no638ee827g=:1<91=>k4}r5fe?6=;rT45e343>=7?3d9~w2c32908wS9j4:?4a0<6;k1659h512g8yv1b:3:1?vP8e39>3`5=9:h014:j:01f?xu0lm0;6>uQ7ef892bb289i707;d;30a>{t?jn1<7=t^6ag?81dm3;8n6366c827`=z{>h<6=4<{_5a3>;0j10:?o5297c956c53z\:<0=:?;i1=>m4=577>45b3ty24>4?:2y]==5<5>8j6<=l;<666?74m2wx55?50;1xZ<>634=947?;4>3b9>01e=9:o0q~78f;297~X>?o16;?:512a8912f289n7p}67d83>6}Y1>o01:<=:01`?82303;8i6s|96f94?5|V0=o709=0;30g>;35<4sW31=>k4}r;4f?6=;rT2;o5270`956e<5=>96<=j;|q:3d<72:qU5:o4=63;>45d34>?<7?3d9~w<1?2908wS788:?457<6;j168>m512g8yv?0>3:1?vP6779>35`=9:i019=7:01f?xu>?<0;6>uQ9678926d289h70:<6;30a>{t1>>1<7=t^857?81713;8o63;35827`=z{0=86=4<{_;47>;08?0:?n52420956c7>53z\:37=:?991=>m4=513>45b3ty2;<4?:2y]=27<5>:;6<=l;<61a?74m2wx5:>50;1xZ<17343b9>07g=9:o0q~79e;297~X>>l16:k8512a89147289n7p}66e83>6}Y1?n01;h<:01`?826<3;8i6s|99a94?5|V02h708i0;30g>;3i?0:?h5rs8:a>5<4sW33n639ee827f=:<0k1=>k4}r;;e?6=;rT24l526dc956e<5=2n6<=j;|q:<<<72:qU5574=7g4>45d34>3>7?=839pR467;<4f0?74k27?;;4>3d9~w<>02908wS777:?5a4<6;j168;o512g8yv??>3:1?vP6879>3=2=9:i019;j:01f?xu>0;0;6>uQ990892>6289h70::0;30a>{t1>=1<7=t^854?810m3;8o63;3`827`=z{0;0?k0:?n5241:956c52z\:=5=:<981;l5rs8:f>5<5sW33i63;0084e>{t11n1<77}Y1hn019j>:306?xu>ik0;6?uQ9``891b72;8>7p}6a883>7}Y1h3019mj:306?xu>i10;6?uQ9`:891ec2;8>7p}6a683>7}Y1h=019ml:306?xu>i?0;6?uQ9`4891ee2;8>7p}6a483>7}Y1h?019mn:306?xu>i=0;6?uQ9`6891e>2;8>7p}6a283>7}Y1h9019m7:306?xu>i;0;6?uQ9`0891e02;8>7p}6a083>7}Y1h;019m9:306?xu>i90;6?uQ9`2891e22;8>7p}69d83>7}Y10o019m<:306?xu>1m0;6?uQ98f891e52;8>7p}69b83>7}Y10i019m>:306?xu>1k0;6?uQ98`891e72;8>7p}69`83>7}Y10k019li:306?xu>100;6?uQ98;891db2;8>7p}69983>7}Y102019lk:306?xu>1>0;6?uQ985891dd2;8>7p}69783>7}Y10<019lm:306?xu>1<0;6?uQ987891df2;8>7p}6b583>7}Y1k>019j7:306?xu>j:0;6?uQ9c1891b02;8>7p}6b383>7}Y1k8019j9:306?xu>j80;6?uQ9c3891b22;8>7p}6b183>7}Y1k:019j;:306?xu>io0;6?uQ9`d891b42;8>7p}6ad83>7}Y1ho019j=:306?xu>ih0;6?uQ9`c891ea2;8>7p}69g83>7}Y10l019m;:306?xu>1=0;6?uQ986891d>2;8>7p}6}:=ko1;l524g`956b<5=:96?0cg=9:n019>>:30b?xu4nm0;6>u25ca93d=:j4=523>74f3tyjj>4?:5y>ea4=99?019j>:01`?813:3;8h63;55827f=z{hl96=4;{3b9>317=9:n019;=:01`?xufn90;69u2ae09557<5=in6<=l;<50b?74l27?8h4>3b9~wdca290?w0ok2;334>;3km0:?n5272g956b<5=>h6<=l;|qba`<72=q6mi<5fg9>0fe=9:i01:=k:01g?823i3;8o6s|adf94?2|5hn96kk4=5aa>45d34=8o7?;0;k0:?i52454956e54z?b`73b9>36g=9:n019:;:01`?xufmh0;69u2ae09bg=:m4=61:>45c34>?>7?p1lj=:gc891e0289h709<8;30`>;3<90:?n5rs`g;>5<3s4ko>7h6;<6`2?74k273e9>06c=9:i0q~oj7;290~;fl;0m463;c4827f=:?:<1=>j4=51`>45d3tyji84?:5y>ea4=n?168n=512a89253289o70:<8;30g>{til>1<7:t=`f1>c3<5=i96<=l;<507?74l27??;4>3b9~wdc4290?w0ok2;d7?82d93;8o63833827a=:<:>1=>m4}rcf6?6=?512f89155289h7p}ne083>1}:im81j?524cd956e<5>9;6<=k;<604?74k2wxmh>50;6x9db52o;019lj:01`?815n3;8h63;2d827f=z{hnm6=4;{ih7?;3jj0:?n5273f956b<5=8j6<=l;|qb`a<72=q6mi<5ed9>0gd=9:i01:?l:01g?82583;8o6s|aea94?2|5hn96hj4=5`b>45d34j4=5c5>45d3tyjj44?:5y>ea4=99h019j8:01`?81003;8h63;9`827f=z{hl36=4;{3b9>33`=9:n0196j:01`?xufn>0;69u2ae0955?<5=n>6<=l;<550?74l27?4?4>3b9~wd`1290?w0ok2;33<>;3l=0:?n5274f956b<5===6<=l;|qbb0<72=q6mi<5115891b4289h709:6;30`>;3>h0:?n5rs`d7>5<3s4ko>7??6:?7`7<6;j16;9l512f8913b289h7p}nf083>1}:im81==<4=5ae>45d34=?<7?;0;<0:?i5242c956e54z?b`73b9>2ac=9:n019>7:01`?xuflh0;6?u2ae09541<5149>1fc=?h1vlj7:1818gc:3;:863:ce84e>{tim=1<747434?ho79n;|qb04<72lq68i?512`89d772l2019l::01`?83f;3;8o63:a4827g=:=hk1=>j4=452>45c34?3;7?>289h70;7f;30g>;2180:?i52446956d58z?7`5<6;k16m<>5e69>1l4=571>45e3tyj?h4?:9y>0fc=9:h01l??:d4890?4289h70;65;30f>;21o0:?o5258c956b<5j50;:x91ec289i70o>0;g6?83>?3;8n63:8b827g=:=081=>l4=4;b>45e34?3h7?;20=0:?o5259c956d<5<396<=l;<7;1?74k27>4k4>3e9>01g=9:h0q~oh1=>l4=45g>45e34?3m7?=}:l4=`33>a3<5<=m6<=m;<74e?74j27>4?4>3c9>125=9:n0189::01g?823>3;8n6s|a2;94?>|5=i26<=m;i97?;3<=0:?o5rs`1;>5h47?289h70;n3;30f>;2010:?h52564956c<5<=36<=j;<7:4?74m27>m54>3e9>126=9:n0186::01g?83?l3;8h63;43827g=z{h9<6=47{<6`3?74j27j==4>089>1d7=9:h0187m:01a?83f83;8h63:a7827f=:=h21=>l4=563>45e3tyj?;4?:9y>0f0=9:h01l??:02;?83>13;8n63:92827g=:=021=>j4=4;f>45c34?j<7?m4=4;3>45c34?2>7?=}:l4=`33>46134?347?b289o70;60;30g>;3;10:?o5rs`11>5h>7??289h70;76;30`>;2?j0:?n52592956b<5=9=6<=m;|qb74<721q68n?512`89d772o=0189;:01`?830i3;8h63:79827f=:=>o1=>l4=4:3>45e34>887?;2??0:?o5256:956d<5<3c9~wd4a290nw0:mf;30f>;f8o0n463;b6827f=:=>>1=>j4=455>45c34?387?b289n70;n6;30`>;2i10:?n525`c956e<5<m3;8n63:a3827f=:=h:1=>m4=4c7>45d34?j:7?;2110:?n52584956d<5<3j6<=l;<7:g?74k27>5h4>3b9>07e=9:h0q~o=c;29<~;3jj0:?o52a1d9a0=:=1o1=>m4=4;3>45e34?2>7?=}:l4=`2e>`2<5<236<=m;<7;2?74k27>4n4>3d9>1=g=9:o0186j:01a?82583;8n6s|a3c94?>|5=hj6<=m;7289h70;72;30g>;39=0:?o5rs`6;>5o47?;o4>3b9>12c=9:n0189::01a?83013;8n63:76827g=:l4}rc73?6=0r7?h:4>3c9>e5`=kh168o9512`89016289h70;82;30g>;2?:0:?o52567956e<5=3j6<=m;|qb03<72lq68i8512`89d6a28:j70:m8;30g>;2i<0:?n525`5956e<5;>4>3b9>12?=9:i0186<:01a?83?j3;8n63:88827g=:=0;1=>l4=5:f>45e3tyj884?:9y>0a3=9:h01l>i:02:?83f13;8n63:9e827f=:=0l1=>m4=4;`>45c34?j87?m4=4;6>45d34?2;7?=}:l4=`2e>46034?257?c289i70;7f;30f>;3>h0:?o5rs`61>5o>7?4289h70;75;30f>;20k0:?i52583956e<5=?n6<=m;|qb7c<721q68nh512`89d6a28:970;8d;30g>;2?o0:?n5256a956b<5<286<=k;<7;=?74l27?9=4>3c9~wd532903w0:l4;30f>;f8o0m;63:80827f=:=>>1=>l4=455>45d34?<47?o512`8yvg513:14v3;b8827g=:i9l1in524c:956d<5<=?6<=j;<74e?74m27>;=4>3c9>127=9:h019>7:01a?xu1l?0;69u2ae091==:>mk1>?o4=465>45e34=3o7?2;8j70;;6;30`>;00k0:?o5279a956e56z?b`7<1=27=h54=2`9>1de=9:h018:::01a?81?l3;8h63888827g=z{?n86=48{c289n70979;30g>;00>0:?o5rs4a3>578<;<7`6?45i27>8l4>3d9>1f0=9:i018:;:01`?81?l3;8o63:31827a=:=;o1=>k4=41;>45c34=3;7?;2k?0:?o525b6956c<5<>?6<=m;<5;`?74j27>?=4>3b9>17c=9:n018=7:01`?81??3;8o6s|ae794?4|5hn968l4=5da>7423tyjh94?:3y>ea4==h168ko52378yvgc;3:1>v3nd386=>;3n009>85rs4d2>5<4s4<m4=662>45e3ty>ik4?:2y>227=:;k014h7:01`?814n3;8n6s|5dg94?5|5?=;6?3c9~w0cc2908w089f;01e>;>n=0:?n5272f956d53z?52`<5:h165k<512a8925d289i7p}:ec83>6}:>?n1>?o4=8d3>45d34=8n7?8e9~wd7a2909w07ja;30`>;01j0:4i5rs`3f>5<5s43n47?3;8h6389`828e9~wd7f2909w07j0;30`>;01>0:4i5rs`3:>5<5s43oi7?8e9~wd712909w07k8;30`>;01:0:4i5rs`36>5<5s43o:7?8e9~wd752909w07k0;30`>;00o0:4i5rs`0;>5<5s4k;o7?4>8e9~wd422909w0o?6;30`>;0i;0:4i5rs`07>5<5s4k;87?8e9~wd462909w07ia;30`>;01l0:4i5rs`3`>5<5s43n87?:1818?dm3;8h6388d82n6=4={=7<=a:p<1b=838p1lj=:5c89=372;8j7p}74b83>7}:im81845285d967g54z?b`7<302738o4=2`9><6g=9:i01:h8:01a?xu??o4=91:>45c3428m7?706;9;01e>;?;10:?n5282;956e<519j6<=k;<5e3?74k2wx49:50;5x9db52<>015:7:30b?8>403;8n63738827g=:0:k1=>l4=6d5>45d3428;7?<9:p<05=83=p1lj=:4189=322;8j706:6;30g>;?<90:?o527g4956b<51oi6<=m;<:04?74j2wx48<50;:x9db52<8015;;:30b?8>2>3;8n63741827f=:0lh1=>j4=913>45c342>;7?<9:?4b2<6;m1v57i:1868gc:33<706j0;01e>;?9:0k4}r::a?6==r7jh?465:?;`c<5:h164<<57`9>=3>=9:n014==:01f?xu?1j0;68u2ae09=6=:0mn1>?o4=932>2g<50<<6<=k;<;1g?74m2wx44l50;7x9db5208015jl:30b?8>683=j70796;30`>;>:00:?h5rs9;b>5<2s4ko>77>;<:gf?45i273>13:19v3nd38:4>;?lh09>l5281g93d=:1?81=>j4=800>45b3ty3554?:4y>ea4=0o164i7523c89=6c2>k014;8:01g?8?583;8i6s|88594?3|5hn965k4=9f;>74f342;o79n;<;7g?74l272=i4>3d9~w=?1290>w0ok2;:g?8>c?389m6370c84e>;>>=0:?i5290`956c55z?b`7<5g=?h165;=512f89<7?289n7p}79583>0}:im814o528e7967g<51:26:o4=842>45c343:97??342o>7<=a:?;42<0i2729k4>3e9>=5e=9:o0q~660;291~;fl;03;637d0816d=:09<1;l5294g956b<50:26<=j;|q;::6c89<3c289o707?6;30a>{t01o1<7;t=`f1>=3<51im6?o7?;?8:0k4}r:;g?6==r7jh?473:?;ga<5:h164=<57`9>=0g=9:n015hk:01f?xu?0k0;68u2ae09<7=:0ji1>?o4=922>2g<50?26<=k;<:ee?74m2wx45o50;7x9db521;015m<:30b?8>783=j707:8;30`>;?n>0:?h5rs9:2>5<2s4ko>76?;<:a0>3:19v3nd384b>;?im09>l527gg93d=:1j4=9d2>45b3ty3ml4?:4y>ea4=1l164h8523c892`c2>k014;;:01g?8?3j3;8i6s|8`794?3|5hn964j4=9g6>74f34=mo79n;<;67?74l272854>3d9~w=g3290>w0ok2;;`?8>b<389m638fc84e>;>=;0:?i52957956c55z?b`7<>j273i>4=2`9>3cg=?h1658?512f89<25289n7p}7a383>0}:im815l528d0967g<5>l26:o4=873>45c3438j7?3b9>=6?=9:o0q~66d;291~;fl;028637d2816d=:08<1;l5295f956e<509;6<=j;|q;=7<72{t0?h1<7;t=`f1>2c<51ki6?93o3707<5;30`>{tij31<7`1<50996<=k;|qbg2<72;q6m4?5e79>=7e=9:n0q~ol6;296~;f180n963628827a=z{hi>6=4={:d289<44289o7p}nc283>7}:i0;1h852932956b7>52z?b=43e9~wde62909w0o61;33e>;>9k0:?i5rs`a3>5<5s4k2=7??9:?:5=<6;m1vlli:1818g>93;;463614827a=z{hhn6=4={3e9~wddd2909w0o61;332>;>8j0:?i5rs``a>5<5s4k2=7??2:?:4<<6;m1vlln:1818g>93l<707?6;30`>{tik31<7`e<50:86<=k;|qbf=<72;q6m4>5e99>=56=9:n0q~om7;296~;f190n;637fe827a=z{hh=6=4={7}:i0:1i9528g6956b52z?b=53e9~wdb62909w0o60;f6?8?3j3;8h6s|ae294?4|5h3;6no4=86;>45c3tyjok4?:3y>e<6=99k014:::01g?xufkl0;6?u2a82955?<50>96<=k;|qbga<72;q6m4>511:89<5a289o7p}ncb83>7}:i0:1==94=81`>45c3tyjoo4?:3y>e<6=99<014=6:01g?xufk10;6?u2a829554<509;6<=k;|qbfa<72;q6m4>5f69>=5`=9:n0q~om2;296~;f190no637ed827a=z{hkj6=4={8e9~wdg>2909w0o8c;30g>;>>:0:4i5rs`c4>5<5s4k<47?3;8o63661826=4={8e9~wdg32909w0o82;30g>;>=l0:4i5rs`c0>5<5s4k<<7?8e9~wdg72909w0o9a;30g>;>=h0:4i5rs`;e>5<5s4k=47?3;8o63659828e9~wd?e2909w0o90;30g>;>=<0:4i5rs`;b>5<5s4k>i7?8e9~wd?02909w0o:8;30g>;>=80:4i5rs`;5>5<5s4k>:7?8e9~wd?42909w0o:0;30g>;>5<5s4k3o7?8e9~wdgb2909w0o76;30g>;>>10:4i5rs`cg>5<5s4k387?8e9~wdg?2909w0o8a;30g>;>>;0:4i5rs`;g>5<5s4k=87?16mi<5b99>ea4=j?16mi<5b59>ea4=j:16mi<5b39>ea4=j816mi<5b19>ea4=io16mi<5ad9>ea4=im16mi<5ab9>ea4=ik16mi<5a89>ea4=i116mi<5a69>ea4=i?16mi<5a49>ea4=i=16mi<5a29>ea4=i;16mi<5a09>ea4=i916mi<5bg9>ea4=jl16mi<5be9>ea4=jj16mi<5bc9>ea4=jh16mi<5b89>ea4=j<16mi<5a`9>ea4=1o16mi<5c39>ea4=k916mi<5c89>ea4=k>16mi<5c79>ea4=k<16mi<525c89db52;>370ok2;073>;fl;098;52ae09664<5hn96?=<;e<6=54`9>e<6==k16m4>55`9>e<6=jm16m4>5bb9>e<6=jk16m4>5b`9>e<6=j016m4>5b49>e<6=ih16m4>59g9>e<6=k916m4>5c49>e<6=:=k01l7?:36;?8g>838?;63n918103=:i0:1>><4=`;3>75434k2<7<e<7=e<7==h16m4?5be9>e<7=jj16m4?5bc9>e<7=jh16m4?5b89>e<7=j<16m4?5a`9>e<7=1o16m4?5c19>e<7=k<16m4?525c89d?62;>370o61;073>;f18098;52a839664<5h3:6?=<;e=c=9:i01l>i:5`89d6a2=k01l>i:4`89d6a2i:cf89d6a2ki01l>i:c`89d6a2kk01l>i:c;89d6a2k?01l>i:`c89d6a20l01l>i:b289d6a2j?01l>i:36b?8g7n38?463n0g8102=:i9l1>984=`2e>75534k;j7<<3:?b4c<5;k16m=h522a89d772=h01l??:5c89d772j70o>0;07<>;f99098:52a029610<5h;;6?==;e46=::i015?;:5189=732=>015?;:5789=722=9015?::5689=722=?01:h7:51892`?2=>01:h7:5789=712=9015?9:5689=712=?015?8:5189=702=>015?8:57892`>2=901:h6:56892`>2=?01:hn:51892`f2=>01:hn:57892`c2=901:hk:56892`c2=?01:hm:51892`e2=>01:hm:57892`d2=901:hl:56892`d2=?01:hj:51892`b2=>01:hj:57892`a2=901:hi:56892`a2=?015>?:5189=672=>015>?:5789=662=9015>>:5689=662=?015>=:5189=652=>015>=:5789=642=9015><:5689=642=?015>9:5189=612=>015>9:5789=632=9015>;:5689=632=?015>::5189=622=>015>::5789=602=9015>8:5689=602=?015>7:5189=6?2=>015>7:5789=6>2=9015>6:5689=6>2=?015>n:5189=6f2=>015>n:5789=6e2=9015>m:5689=6e2=?015>l:5189=6d2=>015>l:5789=6a2=9015>i:5689=6a2=?015>k:5189=6c2=>015>k:5789=6b2=9015>j:5689=6b2=?015??:5189=772=>015??:5789=762=9015?>:5689=762=?015?=:5189=752=>015?=:5789=742=9015?<:5689=742=?0q~?6a;296g}::<81>?84=`f1>f2<5hn96n?4=`;3>47c34k2<7?>e:?b=4<69m16m4?510g89d6a28;o70o?f;32a>;f990:=i52a02954c<51;?69<4=936>14<5>l369<4=935>14<51;<69<4=6d:>14<5>lj69<4=6dg>14<5>li69<4=6d`>14<5>ln69<4=6de>14<51:;69<4=922>14<51:969<4=920>14<51:=69<4=927>14<51:>69<4=924>14<51:369<4=92:>14<51:j69<4=92a>14<51:h69<4=92e>14<51:o69<4=92f>14<51;;69<4=932>14<51;969<4=930>1455z?60`<6;l169o6523c89057289i70;<2;30g>;2;:0:?h5rs4f3>5<5jr7>h=4=2`9>0g5=9:h018=<:01g?833:3;8n63:3`827a=:=:h1=>l4=40e>45e34?8;7?;0;<0:?n52752956e<5>>i6<=l;<562?74k27<9i4>3b9>332=9:i01:8i:01`?81003;8o63884827f=:>on1=>m4=63`>45d34=9h7?;0;;0:?n52721956e<5>9?6<=l;<502?74k273b9>36>=9:i01:=6:01`?814i3;8o6383c827f=:?:i1=>m4=61g>45d34=8i7?7}:?;4=451>45b3ty?j;4?:3y>0g0=:;?0189>:01f?xu3n>0;6?u24c59673<5<=;6<=j;|q7b=<72;q68o652378900a289n7p}:2b83>7}:=k=1;l5253f967352z?6ea<0i27>?;4=249~w0272909w08kb;5b?833838996s|52;94?4|57423ty>?n4?:3y>1dc=?h169>j52378yv33;3:1?v3:458160=:?131=>k4=6:a>45b3ty>844?:4y>1fe=?:169nj5729>1fc=?:169nh5729>11g=:;?0q~;;b;290~;2jj0;2jl0o6=4<{<7`5?1434?h>79<;<77a?45=2wx9o950;0;83e?389m63821827g=:?;81=>l4=607>45e34=9:7?e;30f>;2;;0:?h5252c956d<5<8n6<=m;<71b?74m27>?:4>3e9>1g4=9:o01;jk:01f?80b<3;8n6387c827g=:>l=1=>l4=65f>45e343289i708i0;30f>;1m80:?o52711956d<5?l86<=m;<532?74j27=j44>3c9>2c0=9:h01:>6:01a?817k3;8n639fb827g=:?9l1=>l4=623>45e34=:>7?1?|5>l4>3c9>17?=9:h018<7:01a?835:3;8n63:26827g=:=;;1=>l4=405>45e34?9<7?e;30f>;2::0:?o5250:956d<5<;o6<=m;<723?74j27>=n4>3c9>140=9:h018?m:01a?836=3;8n63:1`827g=:=8>1=>l4=43:>45e34?:?7?;2990:?o5251c956d<5<:m6<=m;<73=?74j27>

3c9>15>=9:h018>k:01a?837:3;8n63:06827g=:=9;1=>l4=425>45e34?;<7?;28:0:?o524gf956d<5=lh6<=m;<4f7?74j27<;l4>3c9>2`0=9:h01:9k:01a?80bk3;8n639e8827g=:?1:1=>l4=6:0>45e34;1n10:?o526g7956d<5>:36<=m;<53f?74j27=jo4>3c9>35c=9:h01;hi:01a?81693;8n63815827g=:?8=1=>l4=63b>45e3ty>mh4?:5y>1dc=:;k01:o9:01`?84di3;8o63:3e8171=z{?nh6=4={<7g6?1f347p}82883>7}:>>81;l5273c967352z?534<0i27<>54=249~w2422909w0880;5b?815>38996s|73194?4|5?7423ty<><4?:3y>23c=?h16;?<52378yv16n3:1>v396e84e>;0:909>85rs63g>5<5s4<=o79n;<52a?45=2wx;<750;0x930f2>k01:?m:0:g?xu09?0;6?u267;93d=:?821=5j4}r527?6=:r7=:548a:?450<60m1v:??:181801?3=j709>2;3;`>{t?9n1<72g<5>:m6<6k;|q44d<72;q6:;;57`9>35e=91n0q~9?7;296~;1>=0:?6=4={<457?1f34=;:7?7d:p357=838p1;8=:6c89264282o7p}9fd83>7}:>?;1;l5271295=b52z?51c<0i27=jn4>8e9~w3`02909w08:e;5b?80a13;3h6s|6g694?4|5??o6:o4=7d5>4>c3ty=j<4?:3y>20e=?h16:k=519f8yv0bm3:1>v395c84e>;1n90:4i5rs7ga>5<5s4<>m79n;<4f`?7?l2wx:h650;0x933>2>k01;kn:0:g?xu1m<0;6?u264:93d=:>l=1=5j4}r4f6?6=:r7=9:48a:?5a1<60m1v;ji:181802>3=j708j1;3;`>{t?181<72g<5>2?6<6k;|q43c<72;q6:i?57`9>3=7=91n0q~98c;296~;1l90=26=4={<4`b?1f34=7p}87783>7}:>j>1;l524gf967352z?5g6<0i27?jh4=249~w2132909w08l2;5b?82an38996s|76194?4|5?i:6:o4=423>7423ty<;?4?:3y>2f6=?h169=?52378yv1093:1>v39bg84e>;28;09>85rs653>5<5s4k018>;:306?xu0>m0;6?u26c`93d=:=9?1>?;4}r55g?6=:r7=nl48a:?643<5:<1v:8m:18180e13=j70;?7;011>{t??k1<72g<5<:36?<:;|q42<<72;q6:o957`9>15?=:;?0q~998;296~;1j?0<<6=4={<4a1?1f34?;n7<=5:p330=838p1;l;:6c8906d2;8>7p}86483>7}:>k91;l5251f967352z?5f4<0i27>7423ty<:=4?:3y>2dc=?h169v39ae84e>;29;09>85rs67f>5<5s4k018?;:306?xu0=k0;6?u26`393d=:=8?1>?;4}r56e?6=:r7=m=48a:?653<5:<1v:;6:18180>n3=j70;>7;011>{t?<21<72g<5<;36?<:;|q412<72;q6:4j57`9>14?=:;?0q~9:5;296~;11k0??6=4={<4:e?1f34?:n7<=5:p305=838p1;76:6c8907d2;8>7p}85383>7}:>021;l5250f9673=7>52z?5=2<0i27>=h4=249~w2372909w0866;5b?836n38996s|75d94?4|5?3>6:o4=403>7423ty<8h4?:3y>2<2=?h169??52378yv13l3:1>v399284e>;2:;09>85rs66`>5<5s4<2>79n;<717?45=2wx;9o50;0x93?72>k018<;:306?xu0<00;6?u269d93d=:=;?1>?;4}r57{t?=<1<72g<5<836?<:;|q400<72;q6:5l57`9>17?=:;?0q~9;4;296~;10h0>86=4={<4;=?1f34?9n7<=5:p3=e=838p1;jn:6c892>d282o7p}88`83>7}:>m31;l5279`95=b52z?5`=<0i27<444>8e9~w2>12909w08k7;5b?81??3;3h6s|5d:94?2|5?3c9>36?=9:h0q~;j7;290~;1>009>l52507956b<5>3h6<=m;<506;30`>;01k0:?o52725956d54z?522<5:h169<9512f892?f289i709<6;30f>{t=l>1<7:t=745>74f34?:47?:512`8yv3b;3:18v3964816d=:=831=>j4=6;4>45e34=8?7?p1;8;:30b?836i3;8h63897827g=:?:81=>l4}r7f5?6=4=2`9>14d=9:n01:7::01a?81493;8n6s|5d294?2|5?<96?3c9>366=9:h0q~;kf;290~;1>809>l52517956b<5>386<=m;<51b?74j2wx9ij50;6x933a2;8j70;?6;30`>;01;0:?o5273g956d54z?51`<5:h169=9512f892?6289i709=d;30f>{t=mh1<7:t=77g>74f34?;47?j4=6:e>45e34p1;;m:30b?837i3;8h638a4827g=:?1?1=>l4}r7g15d=9:n01:o;:01a?81003;8n6s|5e594?2|5??26?3e9>33`=9:h0q~;k6;290~;1=109>l527`0956d<5?o=6<=k;<550?74j2wx9i;50;6x93302;8j709n1;30f>;1m:0:?i5274f956d54z?513<5:h16;l>512`893c7289o709:6;30f>{t><;1<7:t=7f1>74f34=2j7?l4=6:3>45c34=?<7?p1;j?:30b?81>13;8n6387e827a=:?:?1=>l4}r47a?6=3=c=9:h01:9n:01g?80cm3;8n6s|65f94?4|5?in6?{t>=h1<774f34=947?3;8i6s|65;94?4|5?ij6?2;8j709=2;30a>{t>=<1<774f34=9<7?6?3b9~w3242908w08l4;01e>;01j0:?n52705956e7>53z?5g6<5:h16;4l512a89273289h7p}94083>6}:>j81>?o4=6;b>45d34=:=7?:30b?81>03;8o6380d827f=z{?9m6=4<{<4`4?45i27<5:4>3b9>35d=9:i0q~8l52784956e<5>:36<=l;|q57a<72:q6:ok523c892?2289h709?5;30g>{t>:h1<7=t=7``>74f34?:o7?ol1=>m4}r40=?6=;r7=nl4=2`9>14c=9:n01;hm:01`?xu1;10;6>u26c;967g<5<;m6<=k;<4e950;1x93d?2;8j70;=0;30`>;1n<0:?n5rs715>5<4s4j4=7ge>45d3ty=?94?:2y>2g3=:;k018<<:01g?80bk3;8o6s|62194?5|5?h?6?3b9~w3552908w08m3;01e>;28m0:?i526d4956e53z?5f4<5:h169=k512f893c4289h7p}92g83>6}:>k:1>?o4=42e>45c34=<4>3e9>3=6=9:i0q~8=c;297~;1im09>l52500956b<5>=o6<=l;|q56g<72:q6:lm523c89074289o7098a;30g>{t>;k1<774f34k0q~8=8;296~;1i009>l526ba93d=z{?8<6=4={<4b7}:>h?1>?o4=7a:>2g52z?5e1<5:h16:n957`9~w3452909w08n3;01e>;1k?03e9~w3472908w08n1;01e>;3nm0:?n52705956b53z?5e5<5:h168kk512a89273289o7p}91d83>6}:>0l1>?o4=5de>45d34=:=7?<<4>3b9>35d=9:n0q~8>a;297~;11k09>l52510956e<5>:36<=k;|q55<<72:q6:4o523c89064289h709?5;30`>{t>821<7=t=7;:>74f34?;87?0389m63:04827f=:?091=>m4}r422?6=;r7=5:4=2`9>150=9:i01:7=:01`?xu19<0;6>u2684967g<5<:<6<=l;<5:5?74k2wx:<:50;1x93?22;8j70;?8;30g>;0190:?n5rs730>5<4s4<287<=a:?64<<6;j16;5h512a8yv06:3:1?v3992816d=:=9k1=>m4=6c6>45d3ty==<4?:2y>2<4=:;k018>m:01`?81f<3;8o6s|61d94?5|5?3;6?3b9~w36b2908w087f;01e>;2:<0:?i5251f956e53z?5<`<5:h169?8512f8906b289h7p}90b83>6}:>1n1>?o4=404>45c34?;j7?>44>3e9>147=9:i0q~8?9;297~;10h09>l5253c956b<5<;96<=l;|q54=<72:q6:57523c8904e289o70;>3;30g>{t>9=1<72g<5?236?2=1=:;k0q~8?4;296~;1i0042;8j7p}90083>7}:>h?1;l52690967g52z?5e1<0i27=4<4=2`9~w0`a2909w08n3;5b?80?8389m6s|5gg94?5|5<;?6<=l;<6eg?74l27=;k4=2`9~w0`c2908w0;>5;30g>;3nm0:?i5266g967g53z?653<6;j168kk512f8931c2;8j7p}:fc83>6}:=8=1=>m4=5de>45c34<<<4>3e9>22?=:;k0q~;i7;297~;29h0:?n52510956b<5?=36?{t=o?1<7=t=43`>45d34<<:7<=a:?447<6;m1v8h;:180836l3;8o63974816d=:>ol1=>j4}r7e7?6=;r7>=h4>3b9>222=:;k01;hm:01g?xu2n;0;6>u250d956e<5?;1n<0:?i5rs4ff>5<4s4?9=7?j21>?o4=7ge>45c3ty=8:4?:2y>175=9:i01;lk:30b?80bk3;8h6s|62a94?5|5<8?6<=l;<4a6?45i274>3b9~w3562908w0;=5;30g>;1i>09>l527`0956e53z?663<6;j16:4m523c892g6289h7p}91c83>6}:=;=1=>m4=7;2>74f34=j<7?389m6389g827f=z{?:>6=4<{<71=?74k27=;o4=2`9>3326<=l;|q6`6<72:q69?l512a893342;8j7097e;30g>{t=kh1<774f34>mn7?{t=?n1<74>c34=?=7?9n6<=j;<7;b?7?l2wx9;o50;0x925c289n70;77;3;`>{t=?31<74>c34=8o7?=838p1:=m:01f?830?3;3h6s|57594?4|5<=:6<6k;<50e?74m2wx9;850;0x90g1282o709<9;30a>{t=??1<74>c34=847?9=6<=j;<7;`?7?l2wx9;<50;0x9253289n70;75;3;`>{t=?;1<74>c34=8?7?{t=4>c34=9j7?8o6<=j;<7;f?7?l2wx98o50;0x927d289n70;73;3;`>{t=<31<74>c34=838p1:6::01f?830;3;3h6s|54594?4|5<{t=4>c34==87??=6<=j;<7:5?7?l2wx98<50;0x922e289n70;79;3;`>{t=<;1<74>c34=?<7?{t=jk1<774f34??:7?k018m8:306?xu2k:0;6?u25b393d=:=j>1>?;4}r7bb?6=9:q69lh523c8902f289i70;;c;30g>;2k>0:?i525b6956b<5<>n6<=l;<705?44<27>8?4>3e9>16?=::>018j4=41e>45c34?i>7?{t=k91<7?9{<7a7?45i27>8l4>3b9>11e=9:n018m8:01a?83d<3;8o63:4d827a=:j4=411>45e34?8?7?o512a8905e289n70;=e;30g>;2:o0:?i52525956e<5<936<=j;<70a?74k27>?k4>3c9>1g4=9:n018l9:01a?80cl3;8o63:40827`=z{7?7d:p1g2=838p18l<:6c890d1282o7p}:ac83>7}:=hi1>?;4=6:a>45d3ty1=7=:;?0186=:01f?xu0il0;6?u258;9673<5<3j6<=j;|q4f7<72;q69l?5237890g5289n7p}8b783>7}:=h31>?;4=4cb>45b3ty12d=:;?0189l:01f?xu0ik0;6?u25819673<5<3?6<=j;|q4ec<72;q694l5237890?d289n7p}8b283>7}:=h91>?;4=4c7>45b3ty12b=:;?0189j:01f?xu0ij0;6?u25879673<5<3=6<=j;|q4f5<72;q694j5237890?b289n7p}8b583>7}:=h?1>?;4=4c5>45b3ty12`=:;?0186?:01f?xu0im0;6?u25859673<5<336<=j;|q4f4<72;q694h5237890g7289n7p}8b483>7}:=h=1>?;4=4c;>45b3ty?h44?:3y>1f0=:;?018m8:01`?xu3lh0;6?u25c395=b<57}:>l91=5j4=7g7>45b3ty?hi4?:3y>32g=91n01:9m:01f?xu3ll0;6?u26d495=b<5?o<6<=j;|q7`c<72;q6;:j519f8921b289n7p};e183>7}:>li1=5j4=7gg>45b3ty?i<4?:3y>2`?=91n01;kn:01f?xu3m;0;6?u279295=b<5>2:6<=j;|q7a6<72;q6;5=519f892>3289n7p};e583>7}:>ll1=5j4=7d3>45b3ty?i84?:3y>2`6=91n01;k>:01f?xu3m?0;6?u271095=b<5>:86<=j;|q7a2<72;q6:k<519f893`4289n7p};e983>7}:?9?1=5j4=625>45b3ty?i44?:3y>2c>=91n01;h6:01f?xu3mh0;6?u26g795=b<5?l=6<=j;|q7ag<72;q6;=6519f8926>289n7p};eb83>7}:?9h1=5j4=62`>45b3ty?ii4?:3y>2cd=91n01;hl:01f?xu3ml0;6?u271g95=b<5>:m6<=j;|q7ac<72;q6:kh519f89267289n7p};f183>7}:?8;1=5j4=631>45b3ty?j<4?:3y>342=91n01:?::01f?xu3n;0;6?u270595=b<5>;36<=j;|q7b6<72;q6;0}:?;4=6::>45c34=3n7?v3n8g84e>;f85rs`:g>5<>s4k2<7:6;34k2=7:6;34k3i7<=5:?b4c<3127j7p}n8g83>6}:i1l1>?o4=915>45c348hm7?:5:89d1b2;8>7p}n7c83>7}:i0;19;52a6a967352z?b=4<2=27j;54=249~wd122909w0o61;77?8g0>38996s|a6194?4|5h3:68=4=`57>7423tyj;<4?:3y>e<7==;16m:<52378yvg1n3:1>v3n90865>;f?909>85rs`4g>5<5s4k2=7;?;00;6?u2a83923=:i?k1>?;4}rc53?6=:r7j5<495:?b2=<5:<1vl8::1818g>93{ti?;1<735<5h<96?<:;|qb1c<72;q6m4?5639>e36=:;?0q~o:d;296~;f180==63n5d8160=z{h?i6=4={o7<=5:pe0?=838p1l7?:5:89d3f2;8>7p}n5683>7}:i0:19;52a4:967397>52z?b=5<2=27j9;4=249~wd342909w0o60;77?8g2<38996s|a4394?4|5h3;68=4=`71>7423tyj8k4?:3y>e<6==;16m8>52378yvg?j3:1>v3n91865>;f0j09>85rs`::>5<5s4k2<7;?;?;4}rc;7?6=:r7j5=495:?b<1<5:<1vl6>:1818g>83{ti>l1<735<5h2;6?<:;|qb3<<72;q6m4>5639>e2g=:;?0q~o93;296~;f190==63n658160=z{h>o6=4={;f19098>52a829614<5h3;6?:>;e<7=:=801l7>:362?8g7n38?963n0g8106=:i9l1>9<4=`2e>72634k:<7<;5:?b55<5<:16m<>525089d772;>:70o?e;011>{t1on1<71><50ln6?<:;|q:bg<72;q6m<>5579>=ce=:;?0q~7i7;296~;f990>9636f98160=z{0l>6=4={7p}6f083>7}:i8:19?529g0967352z?b55<29272j=4=249~w0;73?8?bm38996s|9d`94?4|5h;;6864=8g`>7423ty2i44?:3y>e46=>?165ho52378yv?b?3:1>v3n11851>;>m109>85rs8g6>5<5s4k:<78;;<;f2?45=2wx5h?50;0x9d772?9014k=:306?xu>lo0;6?u2a02927=:1l:1>?;4}r;g`?6=:r7j==491:?:``<5:<1v4jm:1818g683<;707kc;011>{t1m31<71><50nj6?<:;|q:`2<72;q6m=h5579>=a>=:;?0q~7k5;296~;f8o0>9636d78160=z{0n86=4={i:41897p}6cg83>7}:i9l19?529e2967352z?b4c<2927j2909w0o?f;73?8g7i38996s|a1594?4|5h:m6864=`2;>7423tyj<84?:3y>e5`=>?16m=852378yvg7;3:1>v3n0g851>;f8=09>85rs`22>5<5s4k;j78;;?:306?xu>n00;6?u2a1d927=:1ok1>?;4}r;f7?6=:r7j{t;ok1<78:{<0;3?74l2794;4>3e9>6=3=9:n01?l8:01g?84?<3;8h63=b7827a=::191=>j4=3`6>45c348lh512f897d3289o70<8c;30`>;5080:?i522`g956b<5;h86<=k;<04f?74l2794=4>3e9>6db=9:n01?l=:01g?840i3;8h63=7g827a=::hi1=>j4=3`2>45c348<57?ll512f897d7289o70<83;30`>;5?10:?i522`7956b<5;kj6<=k;<046?74l279;:4>3e9>6d2=9:n01?o6:01g?84093;8h63=77827a=::h91=>j4=3c;>45c348<<7?l<512f897g0289o70<9f;30`>;5?=0:?i522`3956b<5;k=6<=k;<05=?74l279:h4>3e9>6j4=3;e>45c348=;7?47512f897?b289o70<96;30`>;5>k0:?i5228:956b<5;3o6<=k;<051?74l279:l4>3e9>6<1=9:n01?7l:01g?842n3;8h63=65827a=::0;1=>j4=3;5>45c348>i7?4>512f897?2289o70<:d;30`>;5>;0:?i5229d956b<5;3?6<=k;<06g?74l279:<4>3e9>6=c=9:n01?7<:01g?842j3;8h63=61827a=::1n1=>j4=3;1>45c348>m7?87512f897>e289o70<:8;30`>;50h0:?i5229;956b<5;236<=k;<0`6?74j278jl4=2`9>6f6=9:h01?m>:01`?84d=3;8n6s|2b:94?2|5=:;6:=4=522>25<5=:96:=4=3a:>7423ty8in4?:8y>7`e=:;k01?m6:01a?85a;3;8n63=bb827a=:m4=2gf>45e349m=7?n?512`8yv4e03:1>v3=cc84e>;5j009>85rs3``>5<5s49mo79n;<0ag?45=2wx>n:50;0x97e22;8>70:m0;30g>{t:j<1<7<>{<0`3?45=27?8o4=359>06?=::>019:6:317?827?388863;4g8171=:<>:4=556>75334>=57<<4:?756<5;=16862;9?70:=b;000>;3:009?95248;9662<5=8o6?=;;<6b1?44<27??o4=359>06b=::>019=>:317?824n388863;328171=:<:?1>>:4=560>75334>?97<<4:?772<5;=1688?5226891202;9?70:;d;000>;30m09?95243d9662<5=>:6?=;;<667?44<2wx>nl50;1x97ee2;8j70;5j009?95rs2d`>5<5:r78jn4=2`9>6ge=9:h019:l:01g?824i3;8h63;4`827a=:<921=>j4=573>45c34>>i7?;30;0:?i5243a956b<5=8j6<=k;<6:e?74l27?>h4>3e9>0d0=9:n019=l:01g?824m3;8h63;33827a=:<=:1=>j4=517>45c34>8:7?;3<10:?i5245g956b<5=2n6<=k;<604?74l27?8?4>3e9>002=9:n0q~:=8;296~;4>o057<=5:p070=838p1>8k:6c8973f2;8>7p};2483>7}:;?i1;l5224`9673987>52z?02g<0i2799n4=249~w1442909w0=9a;5b?842l38996s|43094?4|5:<26:o4=37f>7423ty?><4?:3y>73>=?h16>8h52378yv26m3:1>v3<6484e>;5>909>85rs53g>5<5s49=879n;<055?45=2wx8k01?8=:306?xu39k0;6?u237093d=::?91>?;4}r62e?6=:r78:<48a:?121<5:<1v9?6:18185183=j70<95;011>{t<821<72g<5;<=6?<:;|q752<72;q6?8k57`9>631=:;?0q~:>6;296~;4=m06=4={<16g?1f348=57<=5:p044=838p1>;6:6c8970f2;8>7p};1083>7}:;<21;l5227`9673:<7>52z?012<0i279:n4=249~w16a2909w0=:6;5b?841l38996s|41g94?4|5:?>6:o4=34f>7423ty?702=?h16>;h52378yv27k3:1>v3<5284e>;5?909>85rs52a>5<5s49>>79n;<045?45=2wx8=o50;0x96362>k01?9=:306?xu3800;6?u234293d=::>91>?;4}r6b0?6=:r78il48a:?131<5:<1v9o<:18185b13=j70<85;011>{t2g<5;==6?<:;|q7e4<72;q6?h957`9>621=:;?0q~:n0;296~;4m?0k;:6c8971f2;8>7p};9e83>7}:;l91;l5226`96732o7>52z?0a7<0i279;n4=249~w1?e2909w0=j1;5b?840l38996s|48:94?4|5:nn6:o4=35f>7423ty?5:4?:3y>7ab=?h16>:h52378yv2>>3:1>v3;50909>85rs5;6>5<5s49on79n;<0;5?45=2wx84:50;0x96bf2>k01?6=:306?xu31:0;6?u23e;93d=::191>?;4}r6:6?6=:r78h548a:?1<1<5:<1v97>:18185c?3=j70<75;011>{t<0:1<72g<5;2=6?<:;|q76=1=:;?0q~:7c;296~;4l;0j?:6c897>f2;8>7p};8883>7}:;jl1;l5229`9673347>52z?0g`<0i2794n4=249~w1>02909w0=ld;5b?84?l38996s|49494?4|5:ih6:o4=3:f>7423ty?484?:3y>7fd=?h16>5h52378yv2?<3:1>v3;51909>85rs5:0>5<5s49h579n;<0:5?45=2wx85>50;0x96e12>k01?7=:306?xu3?o0;6?u23b793d=::091>?;4}r64a?6=:r78o948a:?1=1<5:<1v99k:18185d;3=j70<65;011>{t<>i1<72g<5;3=6?<:;|q73g<72;q6?n?57`9>6<1=:;?0q~:8a;296~;4k90=838p1>lj:6c897?f2;8>7p};7683>7}:;kn1;l5228`9673<87>52z?0fd<0i2795n4=249~w1142909w0=m9;5b?84>l38996s|46094?4|5:h36:o4=3;f>7423ty?;<4?:3y>7g1=?h16>4h52378yv2083:1>v3;5i909>85rs54e>5<5s49i979n;<0b5?45=2wx8;k50;0x96d32>k01?o=:306?xu3>m0;6?u23c193d=::h91>?;4}r65g?6=:r78n?48a:?1e1<5:<1v98m:18185e93=j70{t2g<5;k=6?<:;|q722<72;q6?lj57`9>6d1=:;?0q~:96;296~;4ij06=4={<1bf?1f348j57<=5:p032=838p1>on:6c897gf2;8>7p};6283>7}:;h31;l522``9673=>7>52z?0e=<0i279mn4=249~w1062909w0=n7;5b?84fl38996s|47294?4|5:k=6:o4=3cf>7423ty?9k4?:3y>7d3=?h16>lh52378yv22k3:1>v3;5j909>85rs57a>5<5s49j=79n;<0a5?45=2wx88o50;0x96g72>k01?l=:306?xu3=00;6?u238d93d=::k91>?;4}r66l3=j70{t<<<1<72g<5;h=6?<:;|q710<72;q6?4l57`9>6g1=:;?0q~::3;296~;4100>=7<=5:p01b=838p1>7<:6c8912c2;8>7p};4c83>7}:;0;1;l5245`9673?57>52z?07423ty?8>4?:3y>7=?=?h1689=52378yv2393:1>v3<8684e>;3<809>85rs51e>5<5s493979n;<60b?45=2wx8>j50;0x96>42>k019=k:306?xu3;k0;6?u239393d=:<:h1>?;4}r603?6=:r78;i48a:?772<5:<1v9=::181850j3=j70:<5;011>{t<:91<72g<5=986?<:;|q774<72;q6?:957`9>067=:;?0q~:=f;296~;4?<09h7<=5:p07d=838p1>9>:6c8914e2;8>7p};2883>7}:;?=1;l5243;9673:j7>52z?01g<0i27?=k4=249~w1742909w0=;f;5b?826;38996s|4`794?4|5:o;6:o4=5c6>7423ty?544?:3y>7a2=?h1684752378yv2?l3:1>v3;30m09>85rs5:2>5<5s49io79n;<6;5?45=2wx8:;50;0x96d72>k0199::306?xu3>00;6?u23`693d=:?;4}r66`?6=:r785;48a:?71a<5:<1v9:i:18185?83=j70:;f;011>{t<:31<72g<5=926?<:;|q742<72;q6?9m57`9>051=:;?0q~:nc;296~;38?04>3e9>6gc=9:h01?m=:01g?85bm3;8o63j4=5`3>45e3ty?<>4?:8y>7c5=9:i01?lj:01`?84d:3;8o63;04816d=:;lo1=>j4=2d4>45c348in7?512g8yv4bi3:1?v3<6g816d=::<21=>m4=60`>45c3ty9i44?:2y>73c=:;k01?;6:01`?815i3;8h6s|2d:94?5|5:54>3e9~w7c02908w0=9c;01e>;5=k0:?n52734956b53z?02g<5:h16>8m512a89243289o7p}=e483>6}:;?k1>?o4=37g>45d34=9>7?86:30b?842m3;8o63821827a=z{;o86=4<{<153b9>34c=9:n0q~<09>l52272956e<5>;i6<=k;|q1a5<72:q6?;:523c89706289h709>8;30`>{t:ml1<7=t=240>74f348=>7?j4}r0g`?6=;r78:<4=2`9>632=9:i01:>i:01g?xu5lj0;6>u2372967g<5;<>6<=l;<53g?74l2wx>il50;1x963a2;8j70<96;30g>;0800:?i5rs3fb>5<4s49>i7<=a:?122<6;j16;=8512f8yv4c13:1?v3<5e816d=::?21=>m4=620>45c3ty9h54?:2y>70e=:;k01?86:01`?81783;8h6s|2e494?5|5:?26?3e9~w7b22908w0=:8;01e>;5>k0:?n526g;956b53z?012<5:h16>;m512a893`1289o7p}=d283>6}:;<<1>?o4=34g>45d34;::30b?841m3;8o639f1827a=z{;n:6=4<{<160?45i279:k4>3b9>2`b=9:n0q~l52262956e<5?oj6<=k;|q1gc<72:q6?8<523c89716289h708j7;30`>{t:jo1<7=t=272>74f348<>7?l;1=>j4}r17e?6=;r78il4=2`9>622=9:i01:6;:01g?xu4<00;6>u23d;967g<5;=>6<=l;<5;5?74l2wx?9650;1x96c?2;8j70<86;30g>;0?l0:?i5rs264>5<4s49n;7<=a:?132<6;j16;:l512f8yv53>3:1?v321=>m4=37;>45b3ty8884?:2y>7`3=:;k01?96:01`?84213;8i6s|35694?5|5:o?6?3d9~w6242908w0=j3;01e>;5?k0:?n5224`956c7>53z?0a7<5:h16>:m512a8973d289n7p}<4083>6}:;l;1>?o4=35g>45d348>h7?jj:30b?840m3;8o63=5d827`=z{:9n6=4<{<1g`?45i279;k4>3b9>60`=9:o0q~=l52292956e<5;<;6<=j;|q07f<72:q6?il523c897>6289h70<91;30a>{t;:h1<7=t=2fb>74f3483>7?=n:18085c1389m63=82827f=::?91=>k4}r10=?6=;r78h54=2`9>6=2=9:i01?8;:01f?xu4;10;6>u23e5967g<5;2>6<=l;<051?74m2wx?>950;1x96b12;8j70<76;30g>;5>?0:?h5rs215>5<4s49o97<=a:?1<2<6;j16>;9512g8yv54<3:1?v3k4=3:;>45d3ty8?>4?:2y>7a7=:;k01?86:01f?84?13;8o6s|32094?5|5:n;6?3b9~w6562908w0=lf;01e>;5>k0:?h5229`956e53z?0g`<5:h16>;m512g897>d289h7p}<2g83>6}:;jn1>?o4=34g>45b3483h7?ml:30b?841m3;8i63=8d827f=z{:8o6=4<{<1`f?45i279:k4>3d9>6=`=9:i0q~==c;297~;4kh09>l52262956c<5;3;6<=l;|q06g<72:q6?n7523c89716289n70<61;30g>{t;;31<7=t=2a5>74f348<>7?<7:18085d=389m63=72827`=::091=>m4}r113?6=;r78o94=2`9>622=9:o01?7;:01`?xu4:?0;6>u23b1967g<5;=>6<=j;<0:1?74k2wx??;50;1x96e52;8j70<86;30a>;51?0:?n5rs207>5<4s49h=7<=a:?132<6;l16>49512a8yv55;3:1?v321=>k4=3;;>45d3ty8>?4?:2y>7g`=:;k01?96:01f?84>13;8o6s|33394?5|5:hn6?3b9~w6472908w0=md;01e>;5?k0:?h5228`956e53z?0fd<5:h16>:m512g897?d289h7p}<1e83>6}:;k31>?o4=35g>45b3482h7?l7:30b?840m3;8i63=9d827f=z{:;i6=4<{<1a3?45i279;k4>3d9>6<`=9:i0q~=>a;297~;4j?09>l52292956c<5;k;6<=l;|q05<<72:q6?o;523c897>6289n70{t;821<7=t=2`7>74f3483>7??8:18085e;389m63=82827`=::h91=>m4}r122?6=;r78n?4=2`9>6=2=9:o01?o;:01`?xu49<0;6>u23c3967g<5;2>6<=j;<0b1?74k2wx?<=50;1x96gb2;8j70<76;30a>;5i?0:?n5rs231>5<4s49jh7<=a:?1<2<6;l16>l9512a8yv5693:1?v3m4=3:;>45b3ty8==4?:2y>7dd=:;k01?o6:01`?84?13;8i6s|31d94?5|5:kj6?3d9~w66b2908w0=n9;01e>;5ik0:?n5229`956c53z?0e=<5:h16>lm512a897>d289n7p}<0b83>6}:;h=1>?o4=3cg>45d3483h7?o9:30b?84fm3;8o63=8d827`=z{::j6=4<{<1b1?45i279mk4>3b9>6=`=9:o0q~=?8;297~;4i;09>l522c2956e<5;3;6<=j;|q042<72:q6?l?523c897d6289h70<61;30a>{t;9<1<7=t=2c3>74f348i>7?>::18085>n389m63=b2827f=::091=>k4}r130?6=;r785h4=2`9>6g2=9:i01?7;:01f?xu48:0;6>u238f967g<5;h>6<=l;<0:1?74m2wx?=<50;1x96?d2;8j70;51?0:?h5rs222>5<4s492n7<=a:?1f2<6;j16>49512g8yv5783:1?v3<98816d=::021=>k4=2;b>45e3ty9jk4?:2y>7<1=:;k01?76:01f?85>03;8n6s|2gf94?5|5:386?3c9~w7`d2908w0=61;01e>;51k0:?h52380956d53z?04m512g896?7289i7p}=f`83>6}:;1n1>?o4=3;g>45b3493i7?6m:30b?84>m3;8i63<8b827g=z{;l36=4<{<1;=?45i2795k4>3d9>7=g=9:h0q~09>l522`2956c<5:236<=m;|q1b3<72:q6?5;523c897g6289n70=76;30f>{t:o?1<7=t=2:0>74f348j>7?l4}r0e6?6=;r78;i4=2`9>6d2=9:o01>9j:01a?xu5n80;6>u236`967g<5;k>6<=j;<14g?74j2wx>k>50;1x961>2;8j70;4?h0:?o5rs3ge>5<4s49<;7<=a:?1e2<6;l16?:6512`8yv4bm3:1?v3<74816d=::h21=>k4=255>45e3ty9ii4?:2y>725=:;k01?o6:01f?850<3;8n6s|2da94?5|5:=:6?3c9~w7ce2908w0=97;01e>;5ik0:?h52362956d7>53z?01g<5:h16>lm512g89601289i7p}=d683>6}:;=l1>?o4=3cg>45b349>m7?k?:30b?84fm3;8i63;6=4<{<1g0?45i279mk4>3d9>7a`=9:h0q~=<5;297~;4k109>l522c2956c<5:n86<=m;|q06d<72:q6?om523c897d6289n70=l7;30f>{t;8l1<7=t=2`3>74f348i>7??;:18085f<389m63=b2827`=:;hl1=>l4}r13=?6=;r785;4=2`9>6g2=9:o01>o<:01a?xu5nl0;6>u2392967g<5;h>6<=j;<1:1?74j2wx>k=50;1x962b2;8j70;4?o0:?o5rs3a`>5<4s49?o7<=a:?1f2<6;l16?9j512`8yv5a83:1ov3=c8827a=::kn1=>l4=5c4>45c349m<7<=a:?0ac<6;m16?k7512f896`6289h70:nd;000>;5jo09?9522cc956e<5;hi6<=j;<1e;5jm0:?n523dd956e<5:l<6<=m;<1e5?74j27?mh4>3b9>0d`=9:h01?m?:01`?84d93;8h63=b`827a=::kh1=>l4=5c;>45b3ty8ii4?:3y>7`e=?h16?hk52378yv5a>3:1>v3;4n>09>85rs90:>5<5s42=:79n;<:2k015?6:306?xu?:k0;6?u287193d=:08k1>?;4}r:1`?6=:r73?o48a:?;6a<60m1v53;3=j706=f;011>{t0:81<79t=977>74e342>97<=b:?;0=<5:k16497523`89=2f2;8i706;b;01f>;?;:09>85rs94b>5<5lr73:?483:?;26<0;273:9483:?;20<0;273:;483:?;22<0;273:5483:?;2<<0;27385483:?;0<<0;2738l483:?;0g<0;273:l4=2`9>=4b=9:h014l4=811>45e3439o7?;><;0:?n5291d956e<50>36<=l;<;71?74k272?=4>3b9>=6?=9:i015hk:01`?8>a93;8o6364c827f=:19:1=>m4=820>45d342m87?289h706ia;30g>;>8j0:?n52900956e<50;>6<=l;<;23b9~w=4d2902w0692;000>;?>:09>o52876967d<51<>6?<3>=:;h01586:30a?8>3:38996s|82a94?>|519h6?3b9><17=9:i015:=:01`?8>4l3;8h6372e827g=:0:;1=>j4}r:0a?6=1r73?h4=2`9><65=9:i015=::01g?8>393;8n6372d827g=:0=81=>l4=913>45d3428h7?3n3=8706:0;50?8>293=8706<5;011>{t0=91<7:={<:77?45i273>k4=359><`b=::>014=m:317?8?4m3888636408171=:19o1>>:4=864>753343?87<<4:?:6c<5;=165>6522689=`d2;9?706i0;000>;>014>7:317?8>a138886360c8171=:18;1>>:4=837>753343:;7<<4:?:5d<5;=165;:512`89<04289i70791;30f>;>>90:?o5294d956d<50?n6<=m;<;6`?74j2729n4>3c9>=0d=9:h014;n:01a?8?213;8n63659827g=:1<<1=>l4=876>45e343>87?;>o6<=m;<;5f?74j272:l4>3c9>=3?=9:h01487:01a?8?1?3;8n63667827g=:1??1=>l4=841>45e343>;7?;>:>0:?o5293c956d<50986<=m;<;1`?74j272?;4>3c9~w<532909w06j0;5b?8?4>3;3h6s|92394?4|51nm6:o4=810>4>c3ty2>o4?:3y>v37db84e>;>:h0:4i5rs806>5<5s42on79n;<;13?7?l2wx5?<50;0x9=bf2>k014<;:0:g?xu>9o0;6?u28e;93d=:1;;1=5j4}r;2g?6=:r73h548a:?:5`<60m1v4?6:1818>c?3=j707>a;011>{t18<1<72g<50;<6?<:;|q:56<72;q64i;57`9>=42=:;?0q~7>0;296~;?l=0:6c89<6?2;8>7p}60583>7}:0m:1;l52917967352z?;gc<0i272an38996s|8g`94?4|51io6:o4=9d`>7423ty3j54?:3y>a=3:1>v37c284e>;?n?09>85rs9d1>5<5s42i479n;<:e7?45=2wx4hh50;0x9=gc2>k015h?:306?xu><00;6?u28d493d=:1=k1>?;4}r;72?6=:r73i848a:?:02<5:<1v4:<:1818>b<3=j707;4;011>{t1=:1<72g<50>:6?<:;|q:7a<72;q64h<57`9>=6c=:;?0q~77p}60e83>7}:0hi1;l5291g967352z?;eg<0i273ii4=249~w=>>2908w06lb;01e>;>>00:?n52924956e53z?;gd<5:h165;6512a89<54289h7p}78683>6}:0j31>?o4=844>45d3439h7?3;8o6362`827f=z{12>6=4<{<:`3?45i272:84>3b9>=71=9:i0q~674;297~;?k?09>l52970956e<508?6<=l;|q;<6<72:q64n;523c89<30289h707=1;30g>{t0181<7=t=9a7>74f343?o7?d:389m63665827f=:18h1=>l4}r:4b?6=;r73o<4=2`9>=35=9:i014?7:01a?xu??l0;6>u28b2967g<50<:6<=l;<;21?74j2wx4:j50;1x9=da2;8j70790;30g>;>9;0:?o5rs95`>5<4s42ii7<=a:?:1c<6;j165=m512`8yv>0j3:1?v37be816d=:1m4=82:>45e3ty3;l4?:2y>3;8n6s|86;94?5|51hi6?4>3c9~w=1?2908w06ma;01e>;>=k0:?n52912956d53z?;f<<5:h1658o512a89=`c289i7p}77483>6}:0k=1>?o4=87:>45d342mm7?3b9>l52947956e<51l:6<=m;|q;34<72:q64o=523c89<33289h707;b;30f>{t0>:1<7=t=9`1>74f343>?7?e9389m63653827f=:1=?1=>l4}r:5a?6=;r73n=4=2`9>=07=9:i014:=:01a?xu?>m0;6>u28`d967g<50?;6<=l;<;0b?74j2wx4;m50;1x9=gb2;8j707;f;30g>;>;j0:?o5rs9c:>5<4s42nm7<=a:?:0`<6;m165>7512`8yv>f03:1?v37e8816d=:1=n1=>j4=813>45e3ty3m:4?:2y><`>=:;k0148m:01g?8?7n3;8n6s|8`494?5|51o<6?3c9~w=06290=w0692;5b?8>11389m63719827f=:0831=>m4=93b>45d343897?113=j707<2;30g>{t074f342=479n;<;1g?74k2wx48k50;1x9=012;8j70697;5b?8?513;8o6s|84f94?5|51<>6?;4>3b9~w=3d2908w0694;01e>;?900:?o52931956en7>53z?;26<5:h164;:57`9>=76=9:i0q~6:a;297~;?>;09>l5280c956d<50;o6<=l;|q;1<<72;q648;57`9><00=:;?0q~6:8;296~;?==07p}72483>7}:0=21;l52825967352z?;0<<0i273?54=249~w=402909w06;a;5b?8>4138996s|83:94?4|51>i6:o4=91b>7423ty3=94?:3y><42=:;k015k8:6c8yv>6=3:1>v3714816d=:0l21;l5rs6d;>5<5s4=m47<=a:?;e`<0i2wx4<850;0x9=712;8j706j9;5b?xu?9>0;6?u2805967g<51oj6:o4}r5e=?6=:r7{t?on1<774f342i?79n;|q4bg<72;q6;kl523c89=d62>k0q~9ic;296~;0nj09>l528c093d=z{>ln6=4={<5ea?45i273n948a:p3c`=838p1:hi:30b?8>e=3=j7p}70183>7}:09:1>?o4=9`5>2g52z?;44<5:h164o957`9~w=652909w06?2;01e>;?j00<50=:;k015lk:6c8yv>7<3:1>v3705816d=:0kh1;l5rs926>5<5s42;97<=a:?;ff<0i2wx4=950;0x9=602;8j706me;5b?xu?810;6?u281:967g<51hm6:o4}r:3=?6=:r73<44=2`9>n:1818>7i389m637c084e>{t09h1<774f342h>79n;|q;4f<72;q64=m523c89=e32>k0q~6?f;296~;?8o09>l528b593d=z{1:o6=4={<:3`?45i273o848a:p<5c=838p15>j:30b?8>d>3=j7p}71183>7}:08:1>?o4=9a;>2g52z?;54<5:h164n757`9~w=752909w06>2;01e>;?kh094?:2y><16=:;?015:>:01f?8>4l3;8o6s|80`94?4|50;o6<6k;<;2a?74l2wx4{t08n1<74>c343987?50;0x9<55282o707<3;30`>{t0;;1<74>c3439h7?3;8h6s|83194?2|5>l=6?<:;<:0`?74m273>i4>3d9><67=9:i0q~=i4;296~;4n:09>8523g2966252z?1fa<5:<16>om512a8yv7>l3:1>v3=bd8160=::ki1=>k4}r3:a?6=:r7?n>4>3d9>0g2=91n0q~?6f;296~;?:l09>85283f956e52z?4b3<6;l16;k9519f8yv34<3:1>v3:b98171=:=::1>?;4}r0`7?6=;r79o?4=249>7cg=::>01>hm:317?xu3i00;6?u24`5956c<5:l36<6k;|q7ed<72;q68l95237891g?289o7p};ac83>7}:<9?1;l524`:95=bi=7>52z?7ea<5:<168o>512f8yv7>j3:1>v388e8160=:?1i1=>k4}r773?6=;r7>884=249>16d=9:i018:>:01`?xu2<10;6>u25549673<5<9i6<=k;<775?74j2wx=l?50;0x93342>k01;jj:0:g?xu6i;0;6?u264693d=:?:?1=5j4}r3b7?6=:r7=;o48a:?405<60m1v3=j709;b;3;`>{t9h?1<72g<5>?=6<6k;|q2e3<72;q6:4m57`9>30b=91n0q~?n7;296~;1i>0a`83>7}:>j21;l5279795=b52z?510<0i27=ji4>8e9~w4gd2909w0890;5b?816k3;3h6s|1`f94?4|5?4>c3ty:mh4?:3y>222=?h16;?k519f8yv7fn3:1>v397484e>;0:o0:4i5rs0`3>5<5s4<<:79n;<504?7?l2wx=o?50;0x93102>k01:=>:0:g?xu6j;0;6?u266:93d=:?:81=5j4}r3a7?6=:r7=;448a:?476<60m1v{t9k?1<72g<5>9=6<6k;|q2f3<72;q6::j57`9>361=91n0q~?m7;296~;1?l0b`83>7}:>1;1;l5272`95=b52z?5<7<0i278e9~w4dd2909w0873;5b?814l3;3h6s|1cf94?4|5?2?6:o4=61f>4>c3ty:nh4?:3y>2=3=?h16;>h519f8yv7en3:1>v398684e>;0<80:4i5rs0a3>5<5s4<3479n;<576?7?l2wx=n?50;0x9=0f2>k015km:306?xu6k;0;6?u25c:93d=:=:;1>?;4}r3`7?6=;r78jl48a:?0bg<0i279nk4=249~w4e32909w0=i0;5b?85a938996s|1b794?4|5:om6?<:;<1fa?74m2wx=n850;0x96`>2;8>70=i7;30a>{t9j=1<774234?3;7?=838p189;:306?830;3;8i6s|1b;94?4|5<==6?<:;<741?74m2wx=no50;0x901f2;8>70;89;30a>{t9jh1<774234?<;7?d2;8>70;7b;30a>{t9jl1<774234?357?70;61;30a>{t9m91<7742349m=7?s4<>?7<<4:?511<5;=16::l5226893>12;9?70861;000>;11j09?9526`59662<5?h96?=;;<4a`?44<27=o54=359>203=::>01;8?:317?801j3888639758171=:>>?1>>:4=755>75334<<;7<<4:?53=<5;=16::752268931f2;9?7088c;000>;1?m09?95266g9662<5?=m6?=;;<4;4?44<27=4<4=359>2=4=::>01;6<:317?80?<3888639848171=:>1=1>>:4=7:;>75334?o>7<=a:?4=a<6;m16;4m512f892?e289o7096a;30`>;0110:?i52785956b<5>3=6<=k;<5:1?74l27<594>3e9>3<5=9:n01:7=:01g?81>93;8h63891827a=:?1l1=>j4=6c6>45c34=j87?;01o0:?i5278g956b<5>326<=k;<5;a?74l2wx=i:50;0x9=4a289i706<0;011>{t9m?1<745d3428=7?7d:p5a0=838p19ok:01a?82fm38996s|1e594?4|5=ko6<=l;<6bb?45=2wx=i650;0x9056289i70;<2;011>{t9m31<745d34?8?7<=5:p5ag=838p1?li:01a?84d838996s|1e`94?4|5;hm6<=l;<0`5?45=2wx=im50;0x9027289i70;;1;3;`>{t9mn1<745d34??>7<=5:p5ac=838p18=6:01a?834i38996s|1ed94?4|5<926<=l;<70f?45=2wx=h>50;0x904c289i70;=e;011>{t9l;1<745d34?9j7<=5:p5`4=838p18=9:01a?834?38996s|1d194?4|5<9=6<=l;<70{t9l?1<745d34?8j7<=5:p5`0=838p1?l6:01a?84ei38996s|1d594?4|5;h26<=l;<0af?45=2wx=h650;0x9=cc289h706je;3;`>{t9l31<745d3438o7?7d:p5`g=838p14=j:01`?8?4n3;3h6s|1d`94?4|50>:6<=l;<;76?7?l2wx=hm50;0x9<6b289h707?f;3;`>{t9ln1<745d343?47?7d:p5`c=838p14:;:01`?8?3=3;3h6s|1dd94?4|508m6<=l;<;04?7?l2wx=k>50;0x9<5?289h707<9;3;`>{t9o;1<745d342mh7?7d:p5c4=838p15h?:01`?8>a93;3h6s|1g194?4|50>j6<=l;<;7f?7?l2wx=k:50;0x9=`a289h707?0;3;`>{t9o?1<745d343;?7?7d:p5c0=838p15h<:01`?8>a<3;3h6s|1g594?4|50:>6<=l;<;32?7?l2wx=k650;0x9=`1289h706i7;3;`>{t9o31<745d343;57?7d:p5cg=838p15h6:01`?8>ai3;3h6s|1g`94?4|50:i6<=l;<;3g?7?l2wx=km50;0x9<76289h707>2;3;`>{t9on1<745d343:97?7d:p5cc=838p14?8:01`?8?603;3h6s|1gd94?4|50;j6<=l;<;2f?7?l2wx>=>50;0x912e289h70:;c;3;`>{t:9;1<745d34>8m7?7d:p654=838p19:6:01`?823i3;3h6s|21194?4|5=:<6<=l;<63=:50;0x912a289h70::0;3;`>{t:9?1<745d34>>i7?7d:p650=838p199::01`?820>3;3h6s|21594?4|5=<26<=l;<65e?7?l2wx>=650;0x9174289h70:>4;3;`>{t:931<745d34>9<7?7d:p65g=838p196>:01`?82?:3;3h6s|21`94?4|5=8i6<=l;<61g?7?l2wx>=m50;0x914>289h70:=a;3;`>{t:9n1<745d34>2m7?7d:p65c=838p196<=l;<6b2?7?l2wx><>50;0x915e289h70:{t:8;1<745d34>8i7?7d:p644=838p19=>:01`?824:3;3h6s|20194?4|5=9m6<=l;<674?7?l2wx><:50;0x9154289h70:<4;3;`>{t:8?1<745d34>8:7?7d:p640=838p19:<:01`?823<3;3h6s|20594?4|5=>>6<=l;<672?7?l2wx><650;0x9150289h70:<8;3;`>{t:831<745d34>>>7?7d:p64g=838p19:8:01`?82303;3h6s|20`94?4|5=>o6<=l;<67a?7?l2wx>c289h70:7e;3;`>{t:8n1<745d34>8<7?7d:p64c=838p19:>:01`?823:3;3h6s|20d94?4|5=?86<=l;<660?7?l2wx;o650;0x9=cc289i709m8;011>{t?l?1<745e34=n97<=5:p3`1=838p14=j:01a?81b?38996s|7d;94?4|50>:6<=m;<5f=?45=2wx;nk50;0x9<6b289i709le;011>{t?ln1<745e34=nh7<=5:p3`d=838p14:;:01a?81bj38996s|7eg94?4|508m6<=m;<5ga?45=2wx;h=50;0x9<5?289i709j3;011>{t?j81<745e34=h>7<=5:p3gg=838p15h?:01a?81ei38996s|7dd94?4|50>j6<=m;<5fb?45=2wx;n:50;0x9=`a289i709l4;011>{t?j<1<745e34=h:7<=5:p3ge=838p15h<:01a?81ek38996s|7b:94?4|50:>6<=m;<5`{t?jk1<745e34=hm7<=5:p3f6=838p15h6:01a?81d838996s|7ba94?4|50:i6<=m;<5`g?45=2wx;i>50;0x9<76289i709k0;011>{t?m81<745e34=o>7<=5:p3a2=838p14?8:01a?81c<38996s|7e494?4|50;j6<=m;<5g2?45=2wx?4<50;0x912e289i70=62;011>{t;>l1<745e349838996s|35f94?4|5=:<6<=m;<17`?45=2wx?4;50;0x912a289i70=65;011>{t;h91<745e349j?7<=5:p7gd=838p199::01a?85ej38996s|3`d94?4|5=<26<=m;<1bb?45=2wx?8o50;0x9174289i70=:a;011>{t;?<1<745e349=:7<=5:p7f1=838p196>:01a?85d?38996s|36094?4|5=8i6<=m;<146?45=2wx?:>50;0x914>289i70=80;011>{t;ml1<745e349oj7<=5:p722=838p196<=m;<1ff?45=2wx?5<50;0x915e289i70=72;011>{t;1>1<745e349387<=5:p72>=838p19=>:01a?850038996s|39494?4|5=9m6<=m;<1;2?45=2wx?:o50;0x9154289i70=8a;011>{t;>i1<745e349>6<=m;<1;g?45=2wx?:k50;0x9150289i70=8e;011>{t;021<745e349247<=5:p7=c=838p19:8:01a?85?m38996s|38694?4|5=>o6<=m;<1:0?45=2wx?i=50;0x91>c289i70=k3;011>{t;><1<745e349<:7<=5:p7=>=838p19:>:01a?85?038996s|38c94?4|5=?86<=m;<1:e?45=2wx>?>50;0x90d2282o708kd;30`>{t:;;1<72g<5?no6<6k;|q167<72;q6>n;519f891g?289h7psa1``0>5<6sA88i6sa1``7>5<6sA88i6sa1``6>5<6sA88i6sa1``5>5<6sA88i6sa1``4>5<6sA88i6sa1``;>5<6sA88i6sa1``:>5<6sA88i6sa1``b>5<6sA88i6sa1``a>5<6sA88i6sa1```>5<6sA88i6sa1``g>5<6sA88i6sa1``f>5<6sA88i6sa1``e>5<6sA88i6sa1`a3>5<6sA88i6sa1`a2>5<6sA88i6sa1`a1>5<6sA88i6sa1`a0>5<6sA88i6sa1`a7>5<6sA88i6sa1`a6>5<6sA88i6sa1`a5>5<6sA88i6sa1`a4>5<6sA88i6sa1`a;>5<6sA88i6sa1`a:>5<6sA88i6sa1`ab>5<6sA88i6sa1`aa>5<6sA88i6sa1`a`>5<6sA88i6sa1`ag>5<6sA88i6sa1`af>5<6sA88i6sa1`ae>5<6sA88i6sa1`f3>5<6sA88i6sa1`f2>5<6sA88i6sa1`f1>5<6sA88i6sa1`f0>5<6sA88i6sa1`f7>5<6sA88i6sa1`f6>5<6sA88i6sa1`f5>5<6sA88i6sa1`f4>5<6sA88i6sa1`f;>5<6sA88i6sa1`f:>5<6sA88i6sa1`fb>5<6sA88i6sa1`fa>5<6sA88i6sa1`f`>5<6sA88i6sa1`fg>5<6sA88i6sa1`ff>5<6sA88i6sa1`fe>5<6sA88i6sa1`g3>5<6sA88i6sa1`g2>5<6sA88i6sa1`g1>5<6sA88i6sa1`g0>5<6sA88i6sa1`g7>5<6sA88i6sa1`g6>5<6sA88i6sa1`g5>5<6sA88i6sa1`g4>5<6sA88i6sa1`g;>5<6sA88i6sa1`g:>5<6sA88i6sa1`gb>5<6sA88i6sa1`ga>5<6sA88i6sa1`g`>5<6sA88i6sa1`gg>5<6sA88i6sa1`gf>5<6sA88i6sa1`ge>5<6sA88i6sa1`d3>5<6sA88i6sa1`d2>5<6sA88i6sa1`d1>5<6sA88i6sa1`d0>5<6sA88i6sa1`d7>5<6sA88i6sa1`d6>5<6sA88i6sa1`d5>5<6sA88i6sa1`d4>5<6sA88i6sa1`d;>5<6sA88i6sa1`d:>5<6sA88i6sa1`db>5<6sA88i6sa1`da>5<6sA88i6sa1`d`>5<6sA88i6sa1`dg>5<6sA88i6sa1`df>5<6sA88i6sa1`de>5<6sA88i6sa1c23>5<6sA88i6sa1c22>5<6sA88i6sa1c21>5<6sA88i6sa1c20>5<6sA88i6sa1c27>5<6sA88i6sa1c26>5<6sA88i6sa1c25>5<6sA88i6sa1c24>5<6sA88i6sa1c2;>5<6sA88i6sa1c2:>5<6sA88i6sa1c2b>5<6sA88i6sa1c2a>5<6sA88i6sa1c2`>5<6sA88i6sa1c2g>5<6sA88i6sa1c2f>5<6sA88i6sa1c2e>5<6sA88i6sa1c33>5<6sA88i6sa1c32>5<6sA88i6sa1c31>5<6sA88i6sa1c30>5<6sA88i6sa1c37>5<6sA88i6sa1c36>5<6sA88i6sa1c35>5<6sA88i6sa1c34>5<6sA88i6sa1c3;>5<6sA88i6sa1c3:>5<6sA88i6sa1c3b>5<6sA88i6sa1c3a>5<6sA88i6sa1c3`>5<6sA88i6sa1c3g>5<6sA88i6sa1c3f>5<6sA88i6sa1c3e>5<6sA88i6sa1c03>5<6sA88i6sa1c02>5<6sA88i6sa1c01>5<6sA88i6sa1c00>5<6sA88i6sa1c07>5<6sA88i6sa1c06>5<6sA88i6sa1c05>5<6sA88i6sa1c04>5<6sA88i6sa1c0;>5<6sA88i6sa1c0:>5<6sA88i6sa1c0b>5<6sA88i6sa1c0a>5<6sA88i6sa1c0`>5<6sA88i6sa1c0g>5<6sA88i6sa1c0f>5<6sA88i6sa1c0e>5<6sA88i6sa1c13>5<6sA88i6sa1c12>5<6sA88i6sa1c11>5<6sA88i6sa1c10>5<6sA88i6sa1c17>5<6sA88i6sa1c16>5<6sA88i6sa1c15>5<6sA88i6sa1c14>5<6sA88i6sa1c1;>5<6sA88i6sa1c1:>5<6sA88i6sa1c1b>5<6sA88i6sa1c1a>5<6sA88i6sa1c1`>5<6sA88i6sa1c1g>5<6sA88i6sa1c1f>5<6sA88i6sa1c1e>5<6sA88i6sa1c63>5<6sA88i6sa1c62>5<6sA88i6sa1c61>5<6sA88i6sa1c60>5<6sA88i6sa1c67>5<6sA88i6sa1c66>5<6sA88i6sa1c65>5<6sA88i6sa1c64>5<6sA88i6sa1c6;>5<6sA88i6sa1c6:>5<6sA88i6sa1c6b>5<6sA88i6sa1c6a>5<6sA88i6sa1c6`>5<6sA88i6sa1c6g>5<6sA88i6sa1c6f>5<6sA88i6sa1c6e>5<6sA88i6sa1c73>5<6sA88i6sa1c72>5<6sA88i6sa1c71>5<6sA88i6sa1c70>5<6sA88i6sa1c77>5<6sA88i6sa1c76>5<6sA88i6sa1c75>5<6sA88i6sa1c74>5<6sA88i6sa1c7;>5<6sA88i6sa1c7:>5<6sA88i6sa1c7b>5<6sA88i6sa1c7a>5<6sA88i6sa1c7`>5<6sA88i6sa1c7g>5<6sA88i6sa1c7f>5<6sA88i6sa1c7e>5<6sA88i6sa1c43>5<6sA88i6sa1c42>5<6sA88i6sa1c41>5<6sA88i6sa1c40>5<6sA88i6sa1c47>5<6sA88i6sa1c46>5<6sA88i6sa1c45>5<6sA88i6sa1c44>5<6sA88i6sa1c4;>5<6sA88i6sa1c4:>5<6sA88i6sa1c4b>5<6sA88i6sa1c4a>5<6sA88i6sa1c4`>5<6sA88i6sa1c4g>5<6sA88i6sa1c4f>5<6sA88i6sa1c4e>5<6sA88i6sa1c53>5<6sA88i6sa1c52>5<6sA88i6sa1c51>5<6sA88i6sa1c50>5<6sA88i6sa1c57>5<6sA88i6sa1c56>5<6sA88i6sa1c55>5<6sA88i6sa1c54>5<6sA88i6sa1c5;>5<6sA88i6sa1c5:>5<6sA88i6sa1c5b>5<6sA88i6sa1c5a>5<6sA88i6sa1c5`>5<6sA88i6sa1c5g>5<6sA88i6sa1c5f>5<6sA88i6sa1c5e>5<6sA88i6sa1c:3>5<6sA88i6sa1c:2>5<6sA88i6sa1c:1>5<6sA88i6sa1c:0>5<6sA88i6sa1c:7>5<6sA88i6sa1c:6>5<6sA88i6sa1c:5>5<6sA88i6sa1c:4>5<6sA88i6sa1c:;>5<6sA88i6sa1c::>5<6sA88i6sa1c:b>5<6sA88i6sa1c:a>5<6sA88i6sa1c:`>5<6sA88i6sa1c:g>5<6sA88i6sa1c:f>5<6sA88i6sa1c:e>5<6sA88i6sa1c;3>5<6sA88i6sa1c;2>5<6sA88i6sa1c;1>5<6sA88i6sa1c;0>5<6sA88i6sa1c;7>5<6sA88i6sa1c;6>5<6sA88i6sa1c;5>5<6sA88i6sa1c;4>5<6sA88i6sa1c;;>5<6sA88i6sa1c;:>5<6sA88i6sa1c;b>5<6sA88i6sa1c;a>5<6sA88i6sa1c;`>5<6sA88i6sa1c;g>5<6sA88i6sa1c;f>5<6sA88i6sa1c;e>5<6sA88i6sa1cc3>5<6sA88i6sa1cc2>5<6sA88i6sa1cc1>5<6sA88i6sa1cc0>5<6sA88i6sa1cc7>5<6sA88i6sa1cc6>5<6sA88i6sa1cc5>5<6sA88i6sa1cc4>5<6sA88i6sa1cc;>5<6sA88i6sa1cc:>5<6sA88i6sa1ccb>5<6sA88i6sa1cca>5<6sA88i6sa1cc`>5<6sA88i6sa1ccg>5<6sA88i6sa1ccf>5<6sA88i6sa1cce>5<6sA88i6sa1c`3>5<6sA88i6sa1c`2>5<6sA88i6sa1c`1>5<6sA88i6sa1c`0>5<6sA88i6sa1c`7>5<6sA88i6sa1c`6>5<6sA88i6sa1c`5>5<6sA88i6sa1c`4>5<6sA88i6sa1c`;>5<6sA88i6sa1c`:>5<6sA88i6sa1c`b>5<6sA88i6sa1c`a>5<6sA88i6sa1c``>5<6sA88i6sa1c`g>5<6sA88i6sa1c`f>5<6sA88i6sa1c`e>5<6sA88i6sa1ca3>5<6sA88i6sa1ca2>5<6sA88i6sa1ca1>5<6sA88i6sa1ca0>5<6sA88i6sa1ca7>5<6sA88i6sa1ca6>5<6sA88i6sa1ca5>5<6sA88i6sa1ca4>5<6sA88i6sa1ca;>5<6sA88i6sa1ca:>5<6sA88i6sa1cab>5<6sA88i6sa1caa>5<6sA88i6sa1ca`>5<6sA88i6sa1cag>5<6sA88i6sa1caf>5<6sA88i6sa1cae>5<6sA88i6sa1cf3>5<6sA88i6sa1cf2>5<6sA88i6sa1cf1>5<6sA88i6sa1cf0>5<6sA88i6sa1cf7>5<6sA88i6sa1cf6>5<6sA88i6sa1cf5>5<6sA88i6sa1cf4>5<6sA88i6sa1cf;>5<6sA88i6sa1cf:>5<6sA88i6sa1cfb>5<6sA88i6sa1cfa>5<6sA88i6sa1cf`>5<6sA88i6sa1cfg>5<6sA88i6sa1cff>5<6sA88i6sa1cfe>5<6sA88i6sa1cg3>5<6sA88i6sa1cg2>5<6sA88i6sa1cg1>5<6sA88i6sa1cg0>5<6sA88i6sa1cg7>5<6sA88i6sa1cg6>5<6sA88i6sa1cg5>5<6sA88i6sa1cg4>5<6sA88i6sa1cg;>5<6sA88i6sa1cg:>5<6sA88i6sa1cgb>5<6sA88i6sa1cga>5<6sA88i6sa1cg`>5<6sA88i6sa1cgg>5<6sA88i6sa1cgf>5<6sA88i6sa1cge>5<6sA88i6sa1cd3>5<6sA88i6sa1cd2>5<6sA88i6sa1cd1>5<6sA88i6sa1cd0>5<6sA88i6sa1cd7>5<6sA88i6sa1cd6>5<6sA88i6sa1cd5>5<6sA88i6sa1cd4>5<6sA88i6sa1cd;>5<6sA88i6sa1cd:>5<6sA88i6sa1cdb>5<6sA88i6sa1cda>5<6sA88i6sa1cd`>5<6sA88i6sa1cdg>5<6sA88i6sa1cdf>5<6sA88i6sa1cde>5<6sA88i6sa1b23>5<6sA88i6sa1b22>5<6sA88i6sa1b21>5<6sA88i6sa1b20>5<6sA88i6sa1b27>5<6sA88i6sa1b26>5<6sA88i6sa1b25>5<6sA88i6sa1b24>5<6sA88i6sa1b2;>5<6sA88i6sa1b2:>5<6sA88i6sa1b2b>5<6sA88i6sa1b2a>5<6sA88i6sa1b2`>5<6sA88i6sa1b2g>5<6sA88i6sa1b2f>5<6sA88i6sa1b2e>5<6sA88i6sa1b33>5<6sA88i6sa1b32>5<6sA88i6sa1b31>5<6sA88i6sa1b30>5<6sA88i6sa1b37>5<6sA88i6sa1b36>5<6sA88i6sa1b35>5<6sA88i6sa1b34>5<6sA88i6sa1b3;>5<6sA88i6sa1b3:>5<6sA88i6sa1b3b>5<6sA88i6sa1b3a>5<6sA88i6sa1b3`>5<6sA88i6sa1b3g>5<6sA88i6sa1b3f>5<6sA88i6sa1b3e>5<6sA88i6sa1b03>5<6sA88i6sa1b02>5<6sA88i6sa1b01>5<6sA88i6sa1b00>5<6sA88i6sa1b07>5<6sA88i6sa1b06>5<6sA88i6sa1b05>5<6sA88i6sa1b04>5<6sA88i6sa1b0;>5<6sA88i6sa1b0:>5<6sA88i6sa1b0b>5<6sA88i6sa1b0a>5<6sA88i6sa1b0`>5<6sA88i6sa1b0g>5<6sA88i6sa1b0f>5<6sA88i6sa1b0e>5<6sA88i6sa1b13>5<6sA88i6sa1b12>5<6sA88i6sa1b11>5<6sA88i6sa1b10>5<6sA88i6sa1b17>5<6sA88i6sa1b16>5<6sA88i6sa1b15>5<6sA88i6sa1b14>5<6sA88i6sa1b1;>5<6sA88i6sa1b1:>5<6sA88i6sa1b1b>5<6sA88i6sa1b1a>5<6sA88i6sa1b1`>5<6sA88i6sa1b1g>5<6sA88i6sa1b1f>5<6sA88i6sa1b1e>5<6sA88i6sa1b63>5<6sA88i6sa1b62>5<6sA88i6sa1b61>5<6sA88i6sa1b60>5<6sA88i6sa1b67>5<6sA88i6sa1b66>5<6sA88i6sa1b65>5<6sA88i6sa1b64>5<6sA88i6sa1b6;>5<6sA88i6sa1b6:>5<6sA88i6sa1b6b>5<6sA88i6sa1b6a>5<6sA88i6sa1b6`>5<6sA88i6sa1b6g>5<6sA88i6sa1b6f>5<6sA88i6sa1b6e>5<6sA88i6sa1b73>5<6sA88i6sa1b72>5<6sA88i6sa1b71>5<6sA88i6sa1b70>5<6sA88i6sa1b77>5<6sA88i6sa1b76>5<6sA88i6sa1b75>5<6sA88i6sa1b74>5<6sA88i6sa1b7;>5<6sA88i6sa1b7:>5<6sA88i6sa1b7b>5<6sA88i6sa1b7a>5<6sA88i6sa1b7`>5<6sA88i6sa1b7g>5<6sA88i6sa1b7f>5<6sA88i6sa1b7e>5<6sA88i6sa1b43>5<6sA88i6sa1b42>5<6sA88i6sa1b41>5<6sA88i6sa1b40>5<6sA88i6sa1b47>5<6sA88i6sa1b46>5<6sA88i6sa1b45>5<6sA88i6sa1b44>5<6sA88i6sa1b4;>5<6sA88i6sa1b4:>5<6sA88i6sa1b4b>5<6sA88i6sa1b4a>5<6sA88i6sa1b4`>5<6sA88i6sa1b4g>5<6sA88i6sa1b4f>5<6sA88i6sa1b4e>5<6sA88i6sa1b53>5<6sA88i6sa1b52>5<6sA88i6sa1b51>5<6sA88i6sa1b50>5<6sA88i6sa1b57>5<6sA88i6sa1b56>5<6sA88i6sa1b55>5<6sA88i6sa1b54>5<6sA88i6sa1b5;>5<6sA88i6sa1b5:>5<6sA88i6sa1b5b>5<6sA88i6sa1b5a>5<6sA88i6sa1b5`>5<6sA88i6sa1b5g>5<6sA88i6sa1b5f>5<6sA88i6sa1b5e>5<6sA88i6sa1b:3>5<6sA88i6sa1b:2>5<6sA88i6sa1b:1>5<6sA88i6sa1b:0>5<6sA88i6sa1b:7>5<6sA88i6sa1b:6>5<6sA88i6sa1b:5>5<6sA88i6sa1b:4>5<6sA88i6sa1b:;>5<6sA88i6sa1b::>5<6sA88i6sa1b:b>5<6sA88i6sa1b:a>5<6sA88i6sa1b:`>5<6sA88i6sa1b:g>5<6sA88i6sa1b:f>5<6sA88i6sa1b:e>5<6sA88i6sa1b;3>5<6sA88i6sa1b;2>5<6sA88i6sa1b;1>5<6sA88i6sa1b;0>5<6sA88i6sa1b;7>5<6sA88i6sa1b;6>5<6sA88i6sa1b;5>5<6sA88i6sa1b;4>5<6sA88i6sa1b;;>5<6sA88i6sa1b;:>5<6sA88i6sa1b;b>5<6sA88i6sa1b;a>5<6sA88i6sa1b;`>5<6sA88i6sa1b;g>5<6sA88i6sa1b;f>5<6sA88i6sa1b;e>5<6sA88i6sa1bc3>5<6sA88i6sa1bc2>5<6sA88i6sa1bc1>5<6sA88i6sa1bc0>5<6sA88i6sa1bc7>5<6sA88i6sa1bc6>5<6sA88i6sa1bc5>5<6sA88i6sa1bc4>5<6sA88i6sa1bc;>5<6sA88i6sa1bc:>5<6sA88i6sa1bcb>5<6sA88i6sa1bca>5<6sA88i6sa1bc`>5<6sA88i6sa1bcg>5<6sA88i6sa1bcf>5<6sA88i6sa1bce>5<6sA88i6sa1b`3>5<6sA88i6sa1b`2>5<6sA88i6sa1b`1>5<6sA88i6sa1b`0>5<6sA88i6sa1b`7>5<6sA88i6sa1b`6>5<6sA88i6sa1b`5>5<6sA88i6sa1b`4>5<6sA88i6sa1b`;>5<6sA88i6sa1b`:>5<6sA88i6sa1b`b>5<6sA88i6sa1b`a>5<6sA88i6sa1b``>5<6sA88i6sa1b`g>5<6sA88i6sa1b`f>5<6sA88i6sa1b`e>5<6sA88i6sa1ba3>5<6sA88i6sa1ba2>5<6sA88i6sa1ba1>5<6sA88i6sa1ba0>5<6sA88i6sa1ba7>5<6sA88i6sa1ba6>5<6sA88i6sa1ba5>5<6sA88i6sa1ba4>5<6sA88i6sa1ba;>5<6sA88i6sa1ba:>5<6sA88i6sa1bab>5<6sA88i6sa1baa>5<6sA88i6sa1ba`>5<6sA88i6sa1bag>5<6sA88i6sa1baf>5<6sA88i6sa1bae>5<6sA88i6sa1bf3>5<6sA88i6sa1bf2>5<6sA88i6sa1bf1>5<6sA88i6sa1bf0>5<6sA88i6sa1bf7>5<6sA88i6sa1bf6>5<6sA88i6sa1bf5>5<6sA88i6sa1bf4>5<6sA88i6sa1bf;>5<6sA88i6sa1bf:>5<6sA88i6sa1bfb>5<6sA88i6sa1bfa>5<6sA88i6sa1bf`>5<6sA88i6sa1bfg>5<6sA88i6sa1bff>5<6sA88i6sa1bfe>5<6sA88i6sa1bg3>5<6sA88i6sa1bg2>5<6sA88i6sa1bg1>5<6sA88i6sa1bg0>5<6sA88i6sa1bg7>5<6sA88i6sa1bg6>5<6sA88i6sa1bg5>5<6sA88i6sa1bg4>5<6sA88i6sa1bg;>5<6sA88i6sa1bg:>5<6sA88i6sa1bgb>5<6sA88i6sa1bga>5<6sA88i6sa1bg`>5<6sA88i6sa1bgg>5<6sA88i6sa1bgf>5<6sA88i6sa1bge>5<6sA88i6sa1bd3>5<6sA88i6sa1bd2>5<6sA88i6sa1bd1>5<6sA88i6sa1bd0>5<6sA88i6sa1bd7>5<6sA88i6sa1bd6>5<6sA88i6sa1bd5>5<6sA88i6sa1bd4>5<6sA88i6sa1bd;>5<6sA88i6sa1bd:>5<6sA88i6sa1bdb>5<6sA88i6sa1bda>5<6sA88i6sa1bd`>5<6sA88i6sa1bdg>5<6sA88i6sa1bdf>5<6sA88i6sa1bde>5<6sA88i6sa1e23>5<6sA88i6sa1e22>5<6sA88i6sa1e21>5<6sA88i6sa1e20>5<6sA88i6sa1e27>5<6sA88i6sa1e26>5<6sA88i6sa1e25>5<6sA88i6sa1e24>5<6sA88i6sa1e2;>5<6sA88i6sa1e2:>5<6sA88i6sa1e2b>5<6sA88i6sa1e2a>5<6sA88i6sa1e2`>5<6sA88i6sa1e2g>5<6sA88i6sa1e2f>5<6sA88i6sa1e2e>5<6sA88i6sa1e33>5<6sA88i6sa1e32>5<6sA88i6sa1e31>5<6sA88i6sa1e30>5<6sA88i6sa1e37>5<6sA88i6sa1e36>5<6sA88i6sa1e35>5<6sA88i6sa1e34>5<6sA88i6sa1e3;>5<6sA88i6sa1e3:>5<6sA88i6sa1e3b>5<6sA88i6sa1e3a>5<6sA88i6sa1e3`>5<6sA88i6sa1e3g>5<6sA88i6sa1e3f>5<6sA88i6sa1e3e>5<6sA88i6sa1e03>5<6sA88i6sa1e02>5<6sA88i6sa1e01>5<6sA88i6sa1e00>5<6sA88i6sa1e07>5<6sA88i6sa1e06>5<6sA88i6sa1e05>5<6sA88i6sa1e04>5<6sA88i6sa1e0;>5<6sA88i6sa1e0:>5<6sA88i6sa1e0b>5<6sA88i6sa1e0a>5<6sA88i6sa1e0`>5<6sA88i6sa1e0g>5<6sA88i6sa1e0f>5<6sA88i6sa1e0e>5<6sA88i6sa1e13>5<6sA88i6sa1e12>5<6sA88i6sa1e11>5<6sA88i6sa1e10>5<6sA88i6sa1e17>5<6sA88i6sa1e16>5<6sA88i6sa1e15>5<6sA88i6sa1e14>5<6sA88i6sa1e1;>5<6sA88i6sa1e1:>5<6sA88i6sa1e1b>5<6sA88i6sa1e1a>5<6sA88i6sa1e1`>5<6sA88i6sa1e1g>5<6sA88i6sa1e1f>5<6sA88i6sa1e1e>5<6sA88i6sa1e63>5<6sA88i6sa1e62>5<6sA88i6sa1e61>5<6sA88i6sa1e60>5<6sA88i6sa1e67>5<6sA88i6sa1e66>5<6sA88i6sa1e65>5<6sA88i6sa1e64>5<6sA88i6sa1e6;>5<6sA88i6sa1e6:>5<6sA88i6sa1e6b>5<6sA88i6sa1e6a>5<6sA88i6sa1e6`>5<6sA88i6sa1e6g>5<6sA88i6sa1e6f>5<6sA88i6sa1e6e>5<6sA88i6sa1e73>5<6sA88i6sa1e72>5<6sA88i6sa1e71>5<6sA88i6sa1e70>5<6sA88i6sa1e77>5<6sA88i6sa1e76>5<6sA88i6sa1e75>5<6sA88i6sa1e74>5<6sA88i6sa1e7;>5<6sA88i6sa1e7:>5<6sA88i6sa1e7b>5<6sA88i6sa1e7a>5<6sA88i6sa1e7`>5<6sA88i6sa1e7g>5<6sA88i6sa1e7f>5<6sA88i6sa1e7e>5<6sA88i6sa1e43>5<6sA88i6sa1e42>5<6sA88i6sa1e41>5<6sA88i6sa1e40>5<6sA88i6sa1e47>5<6sA88i6sa1e46>5<6sA88i6sa1e45>5<6sA88i6sa1e44>5<6sA88i6sa1e4;>5<6sA88i6sa1e4:>5<6sA88i6sa1e4b>5<6sA88i6sa1e4a>5<6sA88i6sa1e4`>5<6sA88i6sa1e4g>5<6sA88i6sa1e4f>5<6sA88i6sa1e4e>5<6sA88i6sa1e53>5<6sA88i6sa1e52>5<6sA88i6sa1e51>5<6sA88i6sa1e50>5<6sA88i6sa1e57>5<6sA88i6sa1e56>5<6sA88i6sa1e55>5<6sA88i6sa1e54>5<6sA88i6sa1e5;>5<6sA88i6sa1e5:>5<6sA88i6sa1e5b>5<6sA88i6sa1e5a>5<6sA88i6sa1e5`>5<6sA88i6sa1e5g>5<6sA88i6sa1e5f>5<6sA88i6sa1e5e>5<6sA88i6sa1e:3>5<6sA88i6sa1e:2>5<6sA88i6sa1e:1>5<6sA88i6sa1e:0>5<6sA88i6sa1e:7>5<6sA88i6sa1e:6>5<6sA88i6sa1e:5>5<6sA88i6sa1e:4>5<6sA88i6sa1e:;>5<6sA88i6sa1e::>5<6sA88i6sa1e:b>5<6sA88i6sa1e:a>5<6sA88i6sa1e:`>5<6sA88i6sa1e:g>5<6sA88i6sa1e:f>5<6sA88i6sa1e:e>5<6sA88i6sa1e;3>5<6sA88i6sa1e;2>5<6sA88i6sa1e;1>5<6sA88i6sa1e;0>5<6sA88i6sa1e;7>5<6sA88i6sa1e;6>5<6sA88i6sa1e;5>5<6sA88i6sa1e;4>5<6sA88i6sa1e;;>5<6sA88i6sa1e;:>5<6sA88i6sa1e;b>5<6sA88i6sa1e;a>5<6sA88i6sa1e;`>5<6sA88i6sa1e;g>5<6sA88i6sa1e;f>5<6sA88i6sa1e;e>5<6sA88i6sa1ec3>5<6sA88i6sa1ec2>5<6sA88i6sa1ec1>5<6sA88i6sa1ec0>5<6sA88i6sa1ec7>5<6sA88i6sa1ec6>5<6sA88i6sa1ec5>5<6sA88i6sa1ec4>5<6sA88i6sa1ec;>5<6sA88i6sa1ec:>5<6sA88i6sa1ecb>5<6sA88i6sa1eca>5<6sA88i6sa1ec`>5<6sA88i6sa1ecg>5<6sA88i6sa1ecf>5<6sA88i6sa1ece>5<6sA88i6sa1e`3>5<6sA88i6sa1e`2>5<6sA88i6sa1e`1>5<6sA88i6sa1e`0>5<6sA88i6sa1e`7>5<6sA88i6sa1e`6>5<6sA88i6sa1e`5>5<6sA88i6sa1e`4>5<6sA88i6sa1e`;>5<6sA88i6sa1e`:>5<6sA88i6sa1e`b>5<6sA88i6sa1e`a>5<6sA88i6sa1e``>5<6sA88i6sa1e`g>5<6sA88i6sa1e`f>5<6sA88i6sa1e`e>5<6sA88i6sa1ea3>5<6sA88i6sa1ea2>5<6sA88i6sa1ea1>5<6sA88i6sa1ea0>5<6sA88i6sa1ea7>5<6sA88i6sa1ea6>5<6sA88i6sa1ea5>5<6sA88i6sa1ea4>5<6sA88i6sa1ea;>5<6sA88i6sa1ea:>5<6sA88i6sa1eab>5<6sA88i6sa1eaa>5<6sA88i6sa1ea`>5<6sA88i6sa1eag>5<6sA88i6sa1eaf>5<6sA88i6sa1eae>5<6sA88i6sa1ef3>5<6sA88i6sa1ef2>5<6sA88i6sa1ef1>5<6sA88i6sa1ef0>5<6sA88i6sa1ef7>5<6sA88i6sa1ef6>5<6sA88i6sa1ef5>5<6sA88i6sa1ef4>5<6sA88i6sa1ef;>5<6sA88i6sa1ef:>5<6sA88i6sa1efb>5<6sA88i6sa1efa>5<6sA88i6sa1ef`>5<6sA88i6sa1efg>5<6sA88i6sa1eff>5<6sA88i6sa1efe>5<6sA88i6sa1eg3>5<6sA88i6sa1eg2>5<6sA88i6sa1eg1>5<6sA88i6sa1eg0>5<6sA88i6sa1eg7>5<6sA88i6sa1eg6>5<6sA88i6sa1eg5>5<6sA88i6sa1eg4>5<6sA88i6sa1eg;>5<6sA88i6sa1eg:>5<6sA88i6sa1egb>5<6sA88i6sa1ega>5<6sA88i6sa1eg`>5<6sA88i6sa1egg>5<6sA88i6sa1egf>5<6sA88i6sa1ege>5<6sA88i6sa1ed3>5<6sA88i6sa1ed2>5<6sA88i6sa1ed1>5<6sA88i6sa1ed0>5<6sA88i6sa1ed7>5<6sA88i6sa1ed6>5<6sA88i6sa1ed5>5<6sA88i6sa1ed4>5<6sA88i6sa1ed;>5<6sA88i6sa1ed:>5<6sA88i6sa1edb>5<6sA88i6sa1eda>5<6sA88i6sa1ed`>5<6sA88i6sa1edg>5<6sA88i6sa1edf>5<6sA88i6sa1ede>5<6sA88i6sa1d23>5<6sA88i6sa1d22>5<6sA88i6sa1d21>5<6sA88i6sa1d20>5<6sA88i6sa1d27>5<6sA88i6sa1d26>5<6sA88i6sa1d25>5<6sA88i6sa1d24>5<6sA88i6sa1d2;>5<6sA88i6sa1d2:>5<6sA88i6sa1d2b>5<6sA88i6sa1d2a>5<6sA88i6sa1d2`>5<6sA88i6sa1d2g>5<6sA88i6sa1d2f>5<6sA88i6sa1d2e>5<6sA88i6sa1d33>5<6sA88i6sa1d32>5<6sA88i6sa1d31>5<6sA88i6sa1d30>5<6sA88i6sa1d37>5<6sA88i6sa1d36>5<6sA88i6sa1d35>5<6sA88i6sa1d34>5<6sA88i6sa1d3;>5<6sA88i6sa1d3:>5<6sA88i6sa1d3b>5<6sA88i6sa1d3a>5<6sA88i6sa1d3`>5<6sA88i6sa1d3g>5<6sA88i6sa1d3f>5<6sA88i6sa1d3e>5<6sA88i6sa1d03>5<6sA88i6sa1d02>5<6sA88i6sa1d01>5<6sA88i6sa1d00>5<6sA88i6sa1d07>5<6sA88i6sa1d06>5<6sA88i6sa1d05>5<6sA88i6sa1d04>5<6sA88i6sa1d0;>5<6sA88i6sa1d0:>5<6sA88i6sa1d0b>5<6sA88i6sa1d0a>5<6sA88i6sa1d0`>5<6sA88i6sa1d0g>5<6sA88i6sa1d0f>5<6sA88i6sa1d0e>5<6sA88i6sa1d13>5<6sA88i6sa1d12>5<6sA88i6sa1d11>5<6sA88i6sa1d10>5<6sA88i6sa1d17>5<6sA88i6sa1d16>5<6sA88i6sa1d15>5<6sA88i6sa1d14>5<6sA88i6sa1d1;>5<6sA88i6sa1d1:>5<6sA88i6sa1d1b>5<6sA88i6sa1d1a>5<6sA88i6sa1d1`>5<6sA88i6sa1d1g>5<6sA88i6sa1d1f>5<6sA88i6sa1d1e>5<6sA88i6sa1d63>5<6sA88i6sa1d62>5<6sA88i6sa1d61>5<6sA88i6sa1d60>5<6sA88i6sa1d67>5<6sA88i6sa1d66>5<6sA88i6sa1d65>5<6sA88i6sa1d64>5<6sA88i6sa1d6;>5<6sA88i6sa1d6:>5<6sA88i6sa1d6b>5<6sA88i6sa1d6a>5<6sA88i6sa1d6`>5<6sA88i6sa1d6g>5<6sA88i6sa1d6f>5<6sA88i6sa1d6e>5<6sA88i6sa1d73>5<6sA88i6sa1d72>5<6sA88i6sa1d71>5<6sA88i6sa1d70>5<6sA88i6sa1d77>5<6sA88i6sa1d76>5<6sA88i6sa1d75>5<6sA88i6sa1d74>5<6sA88i6sa1d7;>5<6sA88i6sa1d7:>5<6sA88i6sa1d7b>5<6sA88i6sa1d7a>5<6sA88i6sa1d7`>5<6sA88i6sa1d7g>5<6sA88i6sa1d7f>5<6sA88i6sa1d7e>5<6sA88i6sa1d43>5<6sA88i6sa1d42>5<6sA88i6sa1d41>5<6sA88i6sa1d40>5<6sA88i6sa1d47>5<6sA88i6sa1d46>5<6sA88i6sa1d45>5<6sA88i6sa1d44>5<6sA88i6sa1d4;>5<6sA88i6sa1d4:>5<6sA88i6sa1d4b>5<6sA88i6sa1d4a>5<6sA88i6sa1d4`>5<6sA88i6sa1d4g>5<6sA88i6sa1d4f>5<6sA88i6sa1d4e>5<6sA88i6sa1d53>5<6sA88i6sa1d52>5<6sA88i6sa1d51>5<6sA88i6sa1d50>5<6sA88i6sa1d57>5<6sA88i6sa1d56>5<6sA88i6sa1d55>5<6sA88i6sa1d54>5<6sA88i6sa1d5;>5<6sA88i6sa1d5:>5<6sA88i6sa1d5b>5<6sA88i6sa1d5a>5<6sA88i6sa1d5`>5<6sA88i6sa1d5g>5<6sA88i6sa1d5f>5<6sA88i6sa1d5e>5<6sA88i6sa1d:3>5<6sA88i6sa1d:2>5<6sA88i6sa1d:1>5<6sA88i6sa1d:0>5<6sA88i6sa1d:7>5<6sA88i6sa1d:6>5<6sA88i6sa1d:5>5<6sA88i6sa1d:4>5<6sA88i6sa1d:;>5<6sA88i6sa1d::>5<6sA88i6sa1d:b>5<6sA88i6sa1d:a>5<6sA88i6sa1d:`>5<6sA88i6sa1d:g>5<6sA88i6sa1d:f>5<6sA88i6sa1d:e>5<6sA88i6sa1d;3>5<6sA88i6sa1d;2>5<6sA88i6sa1d;1>5<6sA88i6sa1d;0>5<6sA88i6sa1d;7>5<6sA88i6sa1d;6>5<6sA88i6sa1d;5>5<6sA88i6sa1d;4>5<6sA88i6sa1d;;>5<6sA88i6sa1d;:>5<6sA88i6sa1d;b>5<6sA88i6sa1d;a>5<6sA88i6sa1d;`>5<6sA88i6sa1d;g>5<6sA88i6sa1d;f>5<6sA88i6sa1d;e>5<6sA88i6sa1dc3>5<6sA88i6sa1dc2>5<6sA88i6sa1dc1>5<6sA88i6sa1dc0>5<6sA88i6sa1dc7>5<6sA88i6sa1dc6>5<6sA88i6sa1dc5>5<6sA88i6sa1dc4>5<6sA88i6sa1dc;>5<6sA88i6sa1dc:>5<6sA88i6sa1dcb>5<6sA88i6sa1dca>5<6sA88i6sa1dc`>5<6sA88i6sa1dcg>5<6sA88i6sa1dcf>5<6sA88i6sa1dce>5<6sA88i6sa1d`3>5<6sA88i6sa1d`2>5<6sA88i6sa1d`1>5<6sA88i6sa1d`0>5<6sA88i6sa1d`7>5<6sA88i6sa1d`6>5<6sA88i6sa1d`5>5<6sA88i6sa1d`4>5<6sA88i6sa1d`;>5<6sA88i6sa1d`:>5<6sA88i6sa1d`b>5<6sA88i6sa1d`a>5<6sA88i6sa1d``>5<6sA88i6sa1d`g>5<6sA88i6sa1d`f>5<6sA88i6sa1d`e>5<6sA88i6sa1da3>5<6sA88i6sa1da2>5<6sA88i6sa1da1>5<6sA88i6sa1da0>5<6sA88i6sa1da7>5<6sA88i6sa1da6>5<6sA88i6sa1da5>5<6sA88i6sa1da4>5<6sA88i6sa1da;>5<6sA88i6sa1da:>5<6sA88i6sa1dab>5<6sA88i6sa1daa>5<6sA88i6sa1da`>5<6sA88i6sa1dag>5<6sA88i6sa1daf>5<6sA88i6sa1dae>5<6sA88i6sa1df3>5<6sA88i6sa1df2>5<6sA88i6sa1df1>5<6sA88i6sa1df0>5<6sA88i6sa1df7>5<6sA88i6sa1df6>5<6sA88i6sa1df5>5<6sA88i6sa1df4>5<6sA88i6sa1df;>5<6sA88i6sa1df:>5<6sA88i6sa1dfb>5<6sA88i6sa1dfa>5<6sA88i6sa1df`>5<6sA88i6sa1dfg>5<6sA88i6sa1dff>5<6sA88i6sa1dfe>5<6sA88i6sa1dg3>5<6sA88i6sa1dg2>5<6sA88i6sa1dg1>5<6sA88i6sa1dg0>5<6sA88i6sa1dg7>5<6sA88i6sa1dg6>5<6sA88i6sa1dg5>5<6sA88i6sa1dg4>5<6sA88i6sa1dg;>5<6sA88i6sa1dg:>5<6sA88i6sa1dgb>5<6sA88i6sa1dga>5<6sA88i6sa1dg`>5<6sA88i6sa1dgg>5<6sA88i6sa1dgf>5<6sA88i6sa1dge>5<6sA88i6sa1dd3>5<6sA88i6sa1dd2>5<6sA88i6sa1dd1>5<6sA88i6sa1dd0>5<6sA88i6sa1dd7>5<6sA88i6sa1dd6>5<6sA88i6sa1dd5>5<6sA88i6sa1dd4>5<6sA88i6sa1dd;>5<6sA88i6sa1dd:>5<6sA88i6sa1ddb>5<6sA88i6sa1dda>5<6sA88i6sa1dd`>5<6sA88i6sa1ddg>5<6sA88i6sa1ddf>5<6sA88i6sa1dde>5<6sA88i6sa1g23>5<6sA88i6sa1g22>5<6sA88i6sa1g21>5<6sA88i6sa1g20>5<6sA88i6sa1g27>5<6sA88i6sa1g26>5<6sA88i6sa1g25>5<6sA88i6sa1g24>5<6sA88i6sa1g2;>5<6sA88i6sa1g2:>5<6sA88i6sa1g2b>5<6sA88i6sa1g2a>5<6sA88i6sa1g2`>5<6sA88i6sa1g2g>5<6sA88i6sa1g2f>5<6sA88i6sa1g2e>5<6sA88i6sa1g33>5<6sA88i6sa1g32>5<6sA88i6sa1g31>5<6sA88i6sa1g30>5<6sA88i6sa1g37>5<6sA88i6sa1g36>5<6sA88i6sa1g35>5<6sA88i6sa1g34>5<6sA88i6sa1g3;>5<6sA88i6sa1g3:>5<6sA88i6sa1g3b>5<6sA88i6sa1g3a>5<6sA88i6sa1g3`>5<6sA88i6sa1g3g>5<6sA88i6sa1g3f>5<6sA88i6sa1g3e>5<6sA88i6sa1g03>5<6sA88i6sa1g02>5<6sA88i6sa1g01>5<6sA88i6sa1g00>5<6sA88i6sa1g07>5<6sA88i6sa1g06>5<6sA88i6sa1g05>5<6sA88i6sa1g04>5<6sA88i6sa1g0;>5<6sA88i6sa1g0:>5<6sA88i6sa1g0b>5<6sA88i6sa1g0a>5<6sA88i6sa1g0`>5<6sA88i6sa1g0g>5<6sA88i6sa1g0f>5<6sA88i6sa1g0e>5<6sA88i6sa1g13>5<6sA88i6sa1g12>5<6sA88i6sa1g11>5<6sA88i6sa1g10>5<6sA88i6sa1g17>5<6sA88i6sa1g16>5<6sA88i6sa1g15>5<6sA88i6sa1g14>5<6sA88i6sa1g1;>5<6sA88i6sa1g1:>5<6sA88i6sa1g1b>5<6sA88i6sa1g1a>5<6sA88i6sa1g1`>5<6sA88i6sa1g1g>5<6sA88i6sa1g1f>5<6sA88i6sa1g1e>5<6sA88i6sa1g63>5<6sA88i6sa1g62>5<6sA88i6sa1g61>5<6sA88i6sa1g60>5<6sA88i6sa1g67>5<6sA88i6sa1g66>5<6sA88i6sa1g65>5<6sA88i6sa1g64>5<6sA88i6sa1g6;>5<6sA88i6sa1g6:>5<6sA88i6sa1g6b>5<6sA88i6sa1g6a>5<6sA88i6sa1g6`>5<6sA88i6sa1g6g>5<6sA88i6sa1g6f>5<6sA88i6sa1g6e>5<6sA88i6sa1g73>5<6sA88i6sa1g72>5<6sA88i6sa1g71>5<6sA88i6sa1g70>5<6sA88i6sa1g77>5<6sA88i6sa1g76>5<6sA88i6sa1g75>5<6sA88i6sa1g74>5<6sA88i6sa1g7;>5<6sA88i6sa1g7:>5<6sA88i6sa1g7b>5<6sA88i6sa1g7a>5<6sA88i6sa1g7`>5<6sA88i6sa1g7g>5<6sA88i6sa1g7f>5<6sA88i6sa1g7e>5<6sA88i6sa1g43>5<6sA88i6sa1g42>5<6sA88i6sa1g41>5<6sA88i6sa1g40>5<6sA88i6sa1g47>5<6sA88i6sa1g46>5<6sA88i6sa1g45>5<6sA88i6sa1g44>5<6sA88i6sa1g4;>5<6sA88i6sa1g4:>5<6sA88i6sa1g4b>5<6sA88i6sa1g4a>5<6sA88i6sa1g4`>5<6sA88i6sa1g4g>5<6sA88i6sa1g4f>5<6sA88i6sa1g4e>5<6sA88i6sa1g53>5<6sA88i6sa1g52>5<6sA88i6sa1g51>5<6sA88i6sa1g50>5<6sA88i6sa1g57>5<6sA88i6sa1g56>5<6sA88i6sa1g55>5<6sA88i6sa1g54>5<6sA88i6sa1g5;>5<6sA88i6sa1g5:>5<6sA88i6sa1g5b>5<6sA88i6sa1g5a>5<6sA88i6sa1g5`>5<6sA88i6sa1g5g>5<6sA88i6sa1g5f>5<6sA88i6sa1g5e>5<6sA88i6sa1g:3>5<6sA88i6sa1g:2>5<6sA88i6sa1g:1>5<6sA88i6sa1g:0>5<6sA88i6sa1g:7>5<6sA88i6sa1g:6>5<6sA88i6sa1g:5>5<6sA88i6sa1g:4>5<6sA88i6sa1g:;>5<6sA88i6sa1g::>5<6sA88i6sa1g:b>5<6sA88i6sa1g:a>5<6sA88i6sa1g:`>5<6sA88i6sa1g:g>5<6sA88i6sa1g:f>5<6sA88i6sa1g:e>5<6sA88i6sa1g;3>5<6sA88i6sa1g;2>5<6sA88i6sa1g;1>5<6sA88i6sa1g;0>5<6sA88i6sa1g;7>5<6sA88i6sa1g;6>5<6sA88i6sa1g;5>5<6sA88i6sa1g;4>5<6sA88i6sa1g;;>5<6sA88i6sa1g;:>5<6sA88i6sa1g;b>5<6sA88i6sa1g;a>5<6sA88i6sa1g;`>5<6sA88i6sa1g;g>5<6sA88i6sa1g;f>5<6sA88i6sa1g;e>5<6sA88i6sa1gc3>5<6sA88i6sa1gc2>5<6sA88i6sa1gc1>5<6sA88i6sa1gc0>5<6sA88i6sa1gc7>5<6sA88i6sa1gc6>5<6sA88i6sa1gc5>5<6sA88i6sa1gc4>5<6sA88i6sa1gc;>5<6sA88i6sa1gc:>5<6sA88i6sa1gcb>5<6sA88i6sa1gca>5<6sA88i6sa1gc`>5<6sA88i6sa1gcg>5<6sA88i6sa1gcf>5<6sA88i6sa1gce>5<6sA88i6sa1g`3>5<6sA88i6sa1g`2>5<6sA88i6sa1g`1>5<6sA88i6sa1g`0>5<6sA88i6sa1g`7>5<6sA88i6sa1g`6>5<6sA88i6sa1g`5>5<6sA88i6sa1g`4>5<6sA88i6sa1g`;>5<6sA88i6sa1g`:>5<6sA88i6sa1g`b>5<6sA88i6sa1g`a>5<6sA88i6sa1g``>5<6sA88i6sa1g`g>5<6sA88i6sa1g`f>5<6sA88i6sa1g`e>5<6sA88i6sa1ga3>5<6sA88i6sa1ga2>5<6sA88i6sa1ga1>5<6sA88i6sa1ga0>5<6sA88i6sa1ga7>5<6sA88i6sa1ga6>5<6sA88i6sa1ga5>5<6sA88i6sa1ga4>5<6sA88i6sa1ga;>5<6sA88i6sa1ga:>5<6sA88i6sa1gab>5<6sA88i6sa1gaa>5<6sA88i6sa1ga`>5<6sA88i6sa1gag>5<6sA88i6sa1gaf>5<6sA88i6sa1gae>5<6sA88i6sa1gf3>5<6sA88i6sa1gf2>5<6sA88i6sa1gf1>5<6sA88i6sa1gf0>5<6sA88i6sa1gf7>5<6sA88i6sa1gf6>5<6sA88i6sa1gf5>5<6sA88i6sa1gf4>5<6sA88i6sa1gf;>5<6sA88i6sa1gf:>5<6sA88i6sa1gfb>5<6sA88i6sa1gfa>5<6sA88i6sa1gf`>5<6sA88i6sa1gfg>5<6sA88i6sa1gff>5<6sA88i6sa1gfe>5<6sA88i6sa1gg3>5<6sA88i6sa1gg2>5<6sA88i6sa1gg1>5<6sA88i6sa1gg0>5<6sA88i6sa1gg7>5<6sA88i6sa1gg6>5<6sA88i6sa1gg5>5<6sA88i6sa1gg4>5<6sA88i6sa1gg;>5<6sA88i6sa1gg:>5<6sA88i6sa1ggb>5<6sA88i6sa1gga>5<6sA88i6sa1gg`>5<6sA88i6sa1ggg>5<6sA88i6sa1ggf>5<6sA88i6sa1gge>5<6sA88i6sa1gd3>5<6sA88i6sa1gd2>5<6sA88i6sr}|BCG~42;80i5:6;123456789>;7=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<95?0137?5671=1;<<>;;12061=78=:?7=>7039351=7:89?7=<<339301=7=8>?7=8?F393<1=709H?7=6=A593<6D33923495?C1:2?42<99;:86??1B3b?44=G\^[YY4fnrvq[dbcz5;:6=0;;065242<9<0BB][[:@FGVD:6<3:5=95>5;KMTPR=IMNYN1?;:1<2<>7?2@D[YY4fnrvq[aoi48=1<3:41G365>433;:;4?5=8591<=>33;H8??5=F5904<633:89><<4338JJUSS2MCJ0>?50?31?64=AGZ^X7JFB=12>586;2996B[[PTV9@JG;;80;2<=4338LQQVR\3NDN1=>:1<7?6?09=18N:H>;508052<<9:;86:;5532?1RCF4:0;2<>44;KMTPR=_LH7?7>11397>JSSX\^1HB^N<283:44<<3E^X][[:EMSF95=87>09HHJ1:41?3233?28;?59C594@5?53>L?7:HIC09;6>>7<22;<=:481CB0>>28=>0486K149;>LHW]]0sahcPdhl?3?699>136B[[PTV9|hcjWhno~1950?34?=<?0=1J4KH;;@CBF1=FIHI?7LOL059BEFG53HI?7LMNA59BGD@?3HNO^L2?>89B@ATF48:556OKDSC?548>3HNO^L2>2?;8EABUI5;82o5NDEPB842=8730MIJ]A=37:==FLMXJ0<07;@FGVD:5611JHI\N<2<;?DBCZH6?255NDEPB808?3HNO^L29>99B@ATF4>437LJKR@>;:==FLMXJ0407;@FGVG:7601JHI\M<02==>GCL[H7=<06;@FGVG:6:730MIJ]B=30:g=FLMXI0<:50?;8EABUJ5;?255NDEPA848?3HNO^O2=>99B@ATE4:437LJKRC>7:==FLMXI0807;@FGVG:1611JHI\M<6<;?DBCZK63255NDEPA8<833HO;895M45@1?G>33K2JM95MBC37?GDEL11IY^QFNGM2?F2EDK1>0OIM72:AF0>EAKH80OD:4CMIB0>EKCK90OA\6;BMNILRSMM=0O_KNTDF2?A40H5H?4:F;BC469GMD:6;7=0HDO315<4?AOF48?5;6JFA=35:2=CAH6:;394DHC?5=803MCJ0<716:FJE979?2NBM169GMD:597=0HDO323<4?AOF4;95;6JFA=07:2=CAH699394DHC?63803MCJ0?917:FJE94?6>1OEL2=9?48@LG;:7=0HDO331<:?AOF4:;1<394DHC?74813MCJ0>09;EKB81813MCJ0809;EKB83813MCJ0:09;EKB8=813MCJ0409;EKA85803MCI0<>17:FJF9766>1OEO2>2?58@LD;9:4<7IGM<06=3>BNJ5;>2:5KIC>22;19?2NBN1?6>79GMG:66>1OEO2=0?58@LD;:84<7IGM<30=3>BNJ5882:5KIC>10;1808;EKA8709?2NBN1<8>69GMG:507=0HDL328<5?AOE4;4<7IGM<22==>BNJ59:6=08;EKA8679>2NBN1=16:FJF929>2NBN1;16:FJF909>2NBN1916:FJF9>9>2NBN1717:FJTD:76>1OE]O31?58@LVF4;427IG_A=194;108;EKSF969?2NB\O2>>69GMUD;:730HD^M<283:2=CAYH7?384DNC?4;169GKD:6;7=0HBO315<4?AIF48?5;6J@A=35:2=CGH6:;394DNC?5=803MEJ0<716:FLE979?2NDM169GKD:597=0HBO323<4?AIF4;95;6J@A=07:2=CGH699394DNC?63803MEJ0?917:FLE94?6>1OCL2=9?48@JG;:7=0HBO331<:?AIF4:;1<394DNC?74813MEJ0>09;EMB81813MEJ0809;EMB83813MEJ0:09;EMB8=813MEJ0408;EMB[WC@>2NDN1>17:FLF9776>1OCO2>1?58@JD;9;4<7IAM<01=3>BHJ5;?2:5KOC>21;169GKG:617<0HBL31?58@JD;:94<7IAM<33=3>BHJ5892:5KOC>17;1908;EMA8739?2NDN1<9>69GKG:5?7=0HBL329<4?AIE4;35:6J@B=0=3>BHJ59;245KOC>05?69?2NDN1=>>79GKG:46?1OCO2;>79GKG:26?1OCO29>79GKG:06?1OCO27>79GKG:>6>1OCOQ]EF58@JVF494<7IA_A=3=3>BHXH69245KOQC?7?69?2ND\L2<>69GKUD;87=0HB^M<0<4?AIWJ58556J@PC>0>5803ME[N1=13:FSK0=CX[K;96J_R@36?AVUI;?0H]\N309F0>C6ML>0I?ON2:G70>C3<=>0I98;2:G60>C0<>80IL:4E@CB0>CFK9>0IN>?4:G@E52CII:1NBO:4F27E0>@4M;>0J9:;4:D67C2H886H6AG68BD@5=2LJ@^K=;G@7?CD70;1MH95ID677?CBFL:1MHN:4FEAF7>@CM:1MH]=4FEP1?CC33OOMO95IF1:7?C@2<=1MJ:H;;GDB<1=ANHO?7KHMF59EBFG33OLHI95IFE77?C@C0=1MJHO;;GDFB1=ANO8?7KHI459EBC>33OLMI<5H3:EM@4=N:2C;>6G>2:K16>O402CEEY^P01:8MKOSXV::46GAIUR\47><8:KMMQVX8=20ECG[P^26<>OIA]ZT<;64IOKWTZ6012CEEY][AUG4?LHN\V:;;6GAIU]352=NF@^T;7:KMMQY7=>1BBDZP0758MKOSW9=<7D@FT^2;3>OIA]U;5:5FNHV\4D11BBDZP1758MKOSW8=<7D@FT^3;3>OIA]U:5:5FNHV\5D1D69JJLRX9L=0ECG[_0D4?LHN\V8;;6GAIU]152=NF@^T>?94IOKW[7503@DBXR<;7:KMMQY5=>1BBDZP2758MKOSW;=<7D@FT^0;3>OIA]U95:5FNHV\6D11BBDZP3758MKOSW:=<7D@FT^1;3>OIA]U85:5FNHV\7D1L8;HLJPZ5D?2CEEYQ=>5Bmtz\v`aXl`dT>Rh:_130?HkrpVxnkRjfn^0\b0Y69:1FaxvPrde\`lhX:Vl>S??<;Lov|ZtboVnbbRH7;2D;=?5A129M5520946?K770>?0B<>7949M55?7=2D:<46<;O320>H699?0B1006?K769:?0B549M5471<2D:=?;4N03;30=I982396@>1826?K761;?0B7C?=0078J447;<1E=?>;5:L265323G;9<;;4N00330=I9;:396@>21;7?K759<1E=???5:L264723G;9=?;4N00270=I9;;?96@>2046?K759>?0B<<>949M5746=2D:>?=:;O31603H6::;>7C?=3278J444=<1E=?=85:L266?23G;98<;4N00770=I9;>>96@>25;6?K75=8?0B<<:349M5704=2D:>;;:;O31223H6:>9>7C?=7478J440?<1E=?965:L26=723G;94>;4N00;10=I9;2<96@>29;6?K7518?0B<<6349M57?2=2D:>49:;O31=<3H6;9?>7C?<0868J456=2D:?<>:;O30573H6;83?7C?<249M5644=2D:??::;O30603H6;;2>7C?<2878J4548<1E=>=>5:L276423G;8?>;4N01000=I9:9>96@>3246?K74;>?0B<=<849M565>=2D:?9>:;O3004385A12601>H6;=>>7C?<5178J4529<1E=>;<5:L270223G;89;;4N01630=I9:?396@>34;6?K74>9?0B<=9149M5605=2D:?;=:;O30213H6;?=>7C?<6978J4511<1E=>9?5:L272723G;8;?;4N01470=I9:=?96@>3676?K74?1?0B<=8949M56>7=2D:?5?:;O30<73H6;1?>7C?<8778J45??<1E=>675:L27=?23G;85=;4N01:50=I9:3996@>3816?K741=?0B<=6549M56?1=2D:?49:;O30==35A1568J426<2D:84:4N0720>H6=;>0B<8>4:L2325H599>0B??>3:L176=I:=90B?9<;O0;0>H51?90B>><;O120>H499>0B>?>3:L066=I;:90B>:<;O167>H4>:1E?::4N2527>H40:1E?4:4N2;26>H3;2D?=95A4030?K25<2D?><=4N517?K241:1E89=4N5;1?K343G?:86@:3168J055<2D>?>=4N467?K33==1E998<;O757>H2?;1E:>5A6018J3433G<9?95A6367?K05>=1E:?9<;O527>H0::1E4<=4N951?K?43G3:?6@6259M=2633G3<=:5AEUULVN2;Q68TDTSi2ZBBRLZSHF[f>VNFVH^_COBE29SV@7TBOJOI56\jstnw858>3[oxyaz31?;8V`urd}69245]erwop95912Xnxb{<5<:?Wct}e~79374Rdqvhq:1601Yi~{ct=5==>Tb{|f050>;R:8WDPBLH^J:6]@USAF7>UWG>1X^[OC_@58WWPFDVH?7^]]A59PWWD33]S[In5ZSDP\RLUNJEO87[ML9:TJARYSQYO?7ZMCK39TA3=PMH6;2;5XE@>2:3=PMH69255XE@>0>5813^OJ0>09;VGA85813^OI0<09;VGA878?3^OI0>4?>79TAG:46k1\^DZJ_GKQWQe<_[C_IRC@DD]Bg>QUA]OTABJJ_Cf8SWOSMV]BHYFPAe9TVLRBW^COXEQM1e9[MIOIP$RON->!1!QWQG&7&8*J_NGF5:ZLVF_13QY_@DL8;YQW[BHC?2RXXRXLC79[`gYNl8:0TicPM`hlvScu{`ee==5Wdl]Nmkiu^lxxeb`<;Yqwe>gk}Ve{=1>1b:coqZiw95:5=l5nlt]lt4:66k1j`xQ`p0>2:4g3?n;`nv[jv64:4i7lbz_nr28686i2kgyRa1=6=f>gk}Ve{=1:11`9bhpYhx86>2o5nlt]lt4:268k0ma{Poq3?2;d4:m6ocu^ms6969j2kgyRa2=2=5g=fd|Ud|?2?>3f8eisXgy87<3Qi5`9bhpYhx;6:2h5nlt]lt7:66VY\1:ZUP8l1j`xQ`p3>1:ZUP9h1j`xQ`p3>0:`=fd|Ud|?2<>^QT4`=fd|Ud|?2<>^QT5d=fd|Ud|?2;>d9bhpYhx;6?2R]X0d9bhpYhx;6?2R]X1`9bhpYhx;6>2h5nlt]lt7:26VY\5:ZUP8l1j`xQ`p3>5:ZUP9h1j`xQ`p3>4:g=fd|Ud|?28>0`8eisXgy87;34Tj8<4cd58gliX{lf:?6mfo^qfhZejxVoz<=>?129`hneejmdUocxz30?a8ghcjWme~x1?1c:anahYcg|~7>3m4clgn[air|595o6mbel]gkpr;<7i0o`kb_emvp939k2ifi`Qkotv?2;eejmdU|io5lmdo\s`YT_890o}{n;brv[desao<7n|jg^uf<>eumnU|ih5fnrv\IwgjWdof?h5fnrv\IwgjWdof8h5fnrv\IwgjWdof9h5fnrv\IwgjWdof:h5fnrv\IwgjWdof;o5fnrv\eis(F8i0ec}{_`nv+K71k2ceyQnlt-M52eoi{}Uj`x!A21f8mkusWhf~#C<>1b9jjvrXie$B??0^az8585m2ceyQnlt-b`aurjVcey!BaefpqgYt}dUfyu>?01]`}979:l1bb~zPamw,eabt}kUbb~z M`fgwpdX{|gTaxv?012\g|:56;o0ec}{_`nv+dbc{|hTec}{/Lcg`vseWzfS`{w0123[f;;78n7d`|t^coq*gclziSd`|t.Ob`aurjVy~aRczx1234Ze~4=49i6gasu]bhp)flmy~nRgasu-Neabt}kUxy`Qbuy2345Ydq5?5>h5fnrv\eis(imnxyoQfnrv,Idbc{|hTxcPmtz3456Xkp6=2?k4ioqw[djr'hnoxlPioqw+HgclziS~{b_lw{4567Wjs7;33d8mkusWhf~#ljkst`\mkus'Dkoh~{m_rwn[hs89:;Sa{{<0<1b>oi{}Uj`x!ndeqvfZoi{}%Fmij|uc]pqhYj}q:;<=Qcuu>1:7`?_mww8685n2ceyQnlt-b`aurjVcey!BaefpqgYt}dUfyu>?01]oqq:36;l0ec}{_`nv+dbc{|hTec}{/Lcg`vseWzfS`{w0123[iss4<49j6gasu]bhp)flmy~nRgasu-Neabt}kUxy`Qbuy2345Yk}}6=2?h4ioqw[djr'hnoxlPioqw+HgclziS~{b_lw{4567We0:0=f:kmwqYfd|%jhi}zb^kmwq)JimnxyoQ|ul]nq}6789Ugyy27>3d8mkusWhf~#ljkst`\mkus'Dkoh~{m_rwn[hs89:;Sua}<0<1b>oi{}Uj`x!ndeqvfZoi{}%Fmij|uc]pqhYj}q:;<=Qwos>1:7`?_ymq8685n2ceyQnlt-b`aurjVcey!BaefpqgYt}dUfyu>?01]{kw:36;l0ec}{_`nv+dbc{|hTec}{/Lcg`vseWzfS`{w0123[}iu4<49j6gasu]bhp)flmy~nRgasu-Neabt}kUxy`Qbuy2345Yg{6=2?h4ioqw[djr'hnoxlPioqw+HgclziS~{b_lw{4567Wqey0:0=f:kmwqYfd|%jhi}zb^kmwq)JimnxyoQ|ul]nq}6789Usc27>3d8mkusWhf~#ljkst`\mkus'Dkoh~{m_rwn[hs89:;Sua}<8<2<>oi{}Uj`x!ndeqvfZoi{}%E==?7;hlppZgk}&koh~{m_hlpp*H69820ec}{_`nv+dbc{|hTec}{/O315==nfz~Tma{ aefpqgYnfz~$B<=>7:kmwqYfd|%jhi}zb^kmwq)I=8=0ec}{_`nv+dbc{|hTec}{/O423>oi{}Uj`x!ndeqvfZoi{}%E;<94ioqw[djr'hnoxlPioqw+K>6?2ceyQnlt-b`aurjVcey!A9318mkusWhf~#ljkst`\mkus'zfS`{w01228585<2ceyQnlt-b`aurjVcey!|ul]nq}67886;2<?3338mkusWhf~#ljkst`\mkus'zfS`{w01206741129jjvrXie$~h}Prde?5;743`dxxRocu.pfwZtbo585=>5fnrv\eis(zlyT~hi33?30?lht|Vkgy"|js^pfc9299:1bb~zPamw,v`uXzlm793?<;hlppZgk}&xnR|jg=4=56=nfz~Tma{ rdq\v`a;?7;97d`|t^coq*tb{VxnkR>>2:kmwqYfd|%yi~Q}ef]257=nfz~Tma{ rdq\v`aX:880ec}{_`nv+wctW{olS>?=;hlppZgk}&xnR|jg^626>oi{}Uj`x!}er]qabY29;1bb~zPamw,v`uXzlmT:<<4ioqw[djr'{oxSkh_631?lht|Vkgy"|jstnw8586=2ceyQnlt-qavsk|5:5==>>5:kmwqYfd|%yi~{ct=2=555612ceyQnlt-qavsk|5:5===PSV321>oi{}Uj`x!}erwop9699;2:86gasu]bhp)umzgx1>11735?lht|Vkgy"|jstnw8586>VL::6gasu]bhp)umzgx1>117]D51=nfz~Tma{ rdqvhq:76=>:46gasu]bhp)umzgx1>145]PS5733`dxxRocu.pfwpjs494>=<64ioqw[djr'{oxyaz30?77[VQ79=1bb~zPamw,v`urd}6;2;?>4:kmwqYfd|%yi~{ct=2=34733`dxxRocu.pfwpjs4943=<:4ioqw[djr'{oxyaz30?;25==nfz~Tma{ rdqvhq:76Vgj|<:>8:kmwqYfd|%yi~{ct=2=[hgw:1;37d`|t^coq*tb{|f0=0Pm`r1=412:kmwqYfd|%yi~{ct=3=51=nfz~Tma{ rdqvhq:6683:46gasu]bhp)umzgx1?118]PS5733`dxxRocu.pfwpjs48489<=4ioqw[djr'{oxyaz31?627>oi{}Uj`x!}erwop979=8>0ec}{_`nv+wct}e~7=3;>159jjvrXie$~h}zlu>2:24602ceyQnlt-qavsk|5;5S`o123;?lht|Vkgy"|jstnw848Xehz::<94ioqw[djr'{oxyaz31?]neu46?2ceyQnlt-qavsk|5;5S`o3058mkusWhf~#k|umv?5;Yjiy2:>6gasu]bhp)umzgx1<1159jjvrXie$~h}zlu>1:4?602ceyQnlt-qavsk|585=4Q\W137?lht|Vkgy"|jstnw8784=890ec}{_`nv+wct}e~7>3:>3:kmwqYfd|%yi~{ct=0=142602<>oi{}Uj`x!}erwop949Wdk{=>?7;hlppZgk}&xnxb{<3<\idv6>8=0ec}{_`nv+wct}e~7>3Qbaq023>oi{}Uj`x!}erwop949Wdk{?<94ioqw[djr'{oxyaz32?]neu>6:2ceyQnlt-qavsk|595=95fnrv\eis(zly~`y2<>0;2<>oi{}Uj`x!}erwop95990UX[=?;;hlppZgk}&xnxb{<2<0145:?6gasu]bhp)umzgx1=15068mkusWhf~#k|umv?7;369=1bb~zPamw,v`urd}682:<>8:kmwqYfd|%yi~{ct=1=[hgw9:;37d`|t^coq*tb{|f0>0Pm`r22417:kmwqYfd|%yi~{ct=1=[hgw;8=0ec}{_`nv+wct}e~7?3Qbaq:26>oi{}Uj`x!}erwop9299=1bb~zPamw,v`urd}6?2<7>8:kmwqYfd|%yi~{ct=6=559<:4ioqw[djr'{oxyaz34?7251=nfz~Tma{ rdqvhq:36>8:46gasu]bhp)umzgx1:1_lcs567?3`dxxRocu.pfwpjs4=4Tal~>6058mkusWhf~#k|umv?0;Yjiy8:;6gasu]bhp)umzgx1:1_lcs7412:kmwqYfd|%yi~{ct=7=51=nfz~Tma{ rdqvhq:2683:46gasu]bhp)umzgx1;118]PS5733`dxxRocu.pfwpjs4<489<=4ioqw[djr'{oxyaz35?627>oi{}Uj`x!}erwop939=8>0ec}{_`nv+wct}e~793;>159jjvrXie$~h}zlu>6:24602ceyQnlt-qavsk|5?5S`o123;?lht|Vkgy"|jstnw808Xehz::<94ioqw[djr'{oxyaz35?]neu46?2ceyQnlt-qavsk|5?5S`o3058mkusWhf~#k|umv?1;Yjiy2:>6gasu]bhp)umzgx181159jjvrXie$~h}zlu>5:4?602ceyQnlt-qavsk|5<5=4Q\W137?lht|Vkgy"|jstnw8384=890ec}{_`nv+wct}e~7:3:>3:kmwqYfd|%yi~{ct=4=1427?:=95fnrv\eis(zly~`y29>602<>oi{}Uj`x!}erwop909Wdk{=>?7;hlppZgk}&xnxb{<7<\idv6>8=0ec}{_`nv+wct}e~7:3Qbaq023>oi{}Uj`x!}erwop909Wdk{?<94ioqw[djr'{oxyaz36?]neu>6:2ceyQnlt-qavsk|5=5=85fnrv\eis(zly~`y28>02051=nfz~Tma{ rdqvhq:0688:86gasu]bhp)umzgx1911637?lht|Vkgy"|jstnw828598>0ec}{_`nv+wct}e~7;3=>129jjvrXie$~h}zlu>4:1733`dxxRocu.pfwpjs4>4?><:4ioqw[djr'{oxyaz37?6651=nfz~Tma{ rdqvhq:06?<:86gasu]bhp)umzgx191833;?lht|Vkgy"|jstnw828Xehz:8<64ioqw[djr'{oxyaz37?]neu729>1bb~zPamw,v`urd}6<2Rcnp33;?lht|Vkgy"|jstnw828Xehz9<<64ioqw[djr'{oxyaz37?]neu449>1bb~zPamw,v`urd}6<2Rcnp734?lht|Vkgy"|jstnw828Xehz2=:5fnrv\eis({}kSkh.bcqv|713`dxxRocu.qweqYumn$qia>f:kmwqYfd|%xxlzPrde\gdtuqVg~t=>?0308mkusWhf~#~znt^pfcZefz{sTaxv?012254463`dxxRocu.qweqYumnUhm|v_lw{4567:;8:7d`|t^coq*usi}UyijQlaspz[hs89:;?><>;hlppZgk}&ymyQ}ef]`ewt~Wds<=>?4202?lht|Vkgy"}{au]qabYdi{xrS`{w012316463`dxxRocu.qweqYumnUhm|v_lw{4567><8>7d`|t^coq*usi}UyijQlaspz[hs89:;55Q\W106?lht|Vkgy"}{au]qabYdi{xrS`{w0123==YT_88>7d`|t^coq*usi}UyijQlaspz[hs89:;S`o1006?lht|Vkgy"}{au]qabYdi{xrS`{w0123[hgw9?8>7d`|t^coq*usi}UyijQlaspz[hs89:;S`o1807?lht|Vkgy"}{au]qabYdi{xrS`{w0123[hgw?;>0ec}{_`nv+vrf|VxnkRmnrs{\ip~789:Tal~61g9jjvrXie$yo{_sgd[fguzpUecy>?0003?lht|Vkgy"}{au]qabYdi{xrSca{012254coi{}Uj`x!|t`v\v`aXrlxdS`{w012371453`dxxRocu.qweqYumnUqiaPmtz3456?<8;986gasu]bhp)t|h~T~hiPzdpl[hs89:;49?Pf407?lht|Vkgy"}{au]qabY}m{eTaxv?012\idv6>;90ec}{_`nv+vrf|VxnkRtjrn]nq}6789Ufm}7i;hlppZgk}&y~aRmv139jjvrXie$xcPcx]jj45018mkusWhf~#~{b_sgp8486;2ceyQnlt-pqhYumz692<=4ioqw[djr'zfSk|<2<27>oi{}Uj`x!|ul]qav:36890ec}{_`nv+vsjW{ox080>3:kmwqYfd|%xy`Q}er>5:454:96gasu]`llvuid%F~lcPR@O15>oi{}Uhdd~}ef-`pwjXg|~%o`kb_ikdlZ6592ceyQlhhrqab)d|{fTcxz!clgn[mo``V;9=6gasu]`llvumn%hxbPotv-ghcjWacldR<=1:kmwqYd``zyij!ltsn\kpr)kdofSeghh^11<>oi{}Uhdd~}ef-`pwjXg|~%eczPcupo*`b`mVynb~<:;hlppZeoayxnk"m{rm]lqq(nf}Uhxb!eocah`403`dxxRmgiqpfc*eszeUdyy fnu]`pwj)xffj~dzv279jjvrXkac{~hi cupo[jss&`dSnz}l/pfupct|;:0ec}{_bjjtwc`'j~y`Razt/rbc`YtmeU;>=5fnrv\gmowzlm$oy|c_nww*vrlWacldR>=0:kmwqYd``zyij!ltsn\kpr){}aTddig_003?lht|Vice}|jg.awviYh}}$xxfQgifj\6764:kmwqYd``zyij!kotv?5;733`dxxRmgiqpfc*bh}}692<:4ioqw[fnnx{ol#iazt=1=51=nfz~Toegrde,`jss4=4:86gasu]`llvumn%ocxz35?37?lht|Vice}|jg.flqq:06890ec}{_bjjtwc`'me~xR>>a:kmwqYd``zyij!kotv\4Ztt|ye=>5fnrv\gmowzlm$hb{{_03b?lht|Vice}|jg.flqqY6W{y|bz>3:kmwqYd``zyij!kotv\645?00>7:ZUP88i0ec}{_bjjtwc`'me~xRczx1235939:91bb~zPciksv`a(lfS`{w0122808X[^:9<6gasu]`llvumn%ocxzPmtz3457;=7UX[><7<7=74?1=4=[hgw9=8:7d`|t^akmutbo&ndyyQbuy2344:16Vgj|5?k;hlppZeoayxnk"j`uu]nq}67886<2d:kmwqYd``zyij!kotv\ip~789;7;39>e:kmwqYd``zyij!kotv\ip~789;7;39>239jjvrXkac{~hi dnww[hs89::0:081^QT477?1=5=[hgw9;80ec}{_bjjtwc`'me~xRczx1235919Wdk{=4<>;hlppZeoayxnk"j`uu]nq}67886<2Rcnp502?lht|Vice}|jg.flqqYj}q:;<<28>^obt27c3`dxxRmgiqpfc*tboVifi`Qgifj?4;7c3`dxxRmgiqpfc*tboVifi`Qgifj?5;7c3`dxxRmgiqpfc*tboVifi`Qgifj?6;7c3`dxxRmgiqpfc*tboVifi`Qgifj?7;7d3`dxxRmgiqpfc*tboVifi`Qgifj\4751^QT47>269jjvrXkac{~hi rde\ghcjWacldR``t12357YT_98<7d`|t^akmutbo&xnkRmbel]kmbnXff~;<=?=_RU262=nfz~Toegrde,v`aXkdofSeghh^llp5679;UX[?<8;hlppZeoayxnk"|jg^anahYoanbTbbz?0131[VQ4::1bb~zPciksv`a(zlmTeczPcupo*`b`mVynb~>4ioqw[fnnx{ol#kh_hlw[frudVookhQ|eoq\jjr789;:S^Y?319jjvrXkac{~hi rde\mkrXk}xgShjhe^qfjvYig}:;<oi{}Uhdd~}ef-qabYnf}UhxbPeeef[vci{Vddx=>?10]PS74>3`dxxRmgiqpfc*tboVcexRm{rm]qatsb{}Ufyu>?030b?lht|Vice}|jg.pfcZoi|Vi~aQ}epwfwqYj}q:;oi{}Uhdd~}ef-qabYnf}UhxbPrdsvavrXe|r;<=<=1^QT57`?233\WR45i2ceyQlhhrqab)umnUbbyQltsn\v`wrmz~Taxv?01005f=nfz~Toegrde,v`aXxhmnS~kc<1<2f>oi{}Uhdd~}ef-qabYwinoThbP03:8mkusWjbb|kh/sgd[ug`mVyn`R>Pnnv34576WZ];>?5fnrv\gmowzlm$~hiPp`ef[vckW9Uyy~`t0a8mkusWjbb|kh/sgd[vrlWacld1>11b9jjvrXkac{~hi rde\wqmX``mc0<0>c:kmwqYd``zyij!}ef]ppnYoanb7>3?l;hlppZeoayxnk"|jg^qwoZnnoa6826gasu]`llvumn%yijQ|tj]kmbnX8Vxxx}a{1c9jjvrXkac{~hi rde\wqmX``mcS<<=;hlppZeoayxnk"|jg^qwoZnnoaU:S}{pnv2f>oi{}Uhdd~}ef-qabYt|bUcejfP2308mkusWjbb|kh/sgd[vrlWacldR_RU163=nfz~Toegrde,v`aX{}aTddig_omw45669VY\?<:4ioqw[fnnx{ol#}{_hlu5g=nfz~Toegrde,vvrXag|:SD@Y_100?lht|Vn{myfPcupo+HtheVd;<=>Prno34566:?1bb~zPdqcwlZesze%F~bcPn1234Zthe9:;<13c8mkusWmzjxeQltsn,IwijWg:;<=Q}ol23457698UX[=<9;hlppZbwi}bToy|c/LpliZh789:T~bc?01220475i2ceyQkp`vk[frud&Gyc`Qa0123[wij89:;=9?>_RU16d=nfz~Th}o{h^awvi)JzfgTb=>?0^pli56788>:=R]X33:8mkusWmzjxeQltsn,IwijWg:;<=Q}ol23457?98;:>55fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?00:2576502ceyQkp`vk[frud&Gyc`Qa0123[wij89:;=5?>300;?lht|Vn{myfPcupo+HtheVd;<=>Prno3456608;88?74ioqw[avf|aUhxb Msmn[k6789Uyc`>?013;54029;h0ec}{_erbpmYd|{f$Aab_o2345Yugd:;<=?71046[c3502ceyQkp`vk[frud&Gyc`Qa0123[wij89:;=5?>710;?lht|Vn{myfPcupo+HtheVd;<=>Prno3456608;<;?m4ioqw[avf|aUhxb Msmn[k6789Uyc`>?013;54Yjiy;;>n5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?00:25Zkfx;89o6gasu]gtdroWj~y`"C}ol]m4567W{ef<=>?1932[hgw::8i7d`|t^fseqnXk}xg#@|`m^l3456Xzfg;<=>>803\idv?:<1bb~zPdqcwlZesze%F~bcPn1234Zthe9:;289jjvrXlykdRm{rm-NvjkXf9:;o5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?0332564Xn<837d`|t^fseqnXk}xg#@|`m^l3456Xzfg;<=>=103077>?01]qkh67898:=<;>2`9jjvrXlykdRm{rm-NvjkXf9:;?010254Yjiy;:>o5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?03325Zkfx;827d`|t^fseqnXk}xg#@|`m^l3456Xzfg;<=>=10]PS5413`dxxRjauj\gqtk'DxdaR`?012\vjk789:98:5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?034254413`dxxRjauj\gqtk'DxdaR`?012\vjk789:95l5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?03;25ZUP9;<0ec}{_erbpmYd|{f$Aab_o2345Yugd:;<===100;?lht|Vn{myfPcupo+HtheVd;<=>Prno34564:8;:=?64ioqw[avf|aUhxb Msmn[k6789Uyc`>?01115446:h1bb~zPdqcwlZesze%F~bcPn1234Zthe9:;<><>1^QT47g?01]qkh678999=Prno345638;>0ec}{_erbpmYd|{f$Aab_o2345Yugd:;<=:>249jjvrXlykdRm{rm-NvjkXf9:;_7]e171?01]qkh6789>:=R9=7:kmwqYcxh~cSnz}l.OqkhYi89:;Sab0123047X0;h0ec}{_erbpmYd|{f$Aab_o2345Yugd:;<=:>1^:\WR65<2ceyQkp`vk[frud&Gyc`Qa0123[wij89:;8><:;hlppZbwi}bToy|c/LpliZh789:T~bc?012774433`dxxRjauj\gqtk'DxdaR`?012\vjk789:?8?:4ioqw[avf|aUhxb Msmn[k6789Uyc`>?016661=nfz~Th}o{h^awvi)JzfgTb=>?0^pli5678=<996gasu]gtdroWj~y`"C}ol]m4567W{ef<=>?4731e>oi{}Uo|lzg_bvqh*KugdUe<=>?_smn4567Rh92`9jjvrXlykdRm{rm-NvjkXf9:;?01655Z25i2ceyQkp`vk[frud&Gyc`Qa0123[wij89:;8;?P4^d662=nfz~Th}o{h^awvi)JzfgTb=>?0^pli5678=<:S8<7;hlppZbwi}bToy|c/LpliZh789:T~bc?012724Y29;=0ec}{_erbpmYd|{f$Aab_o2345Yugd:;<=:91^411>oi{}Uo|lzg_bvqh*KugdUe<=>?_smn4567<>;996gasu]gtdroWj~y`"C}ol]m4567W{ef<=>?49311>oi{}Uo|lzg_bvqh*KugdUe<=>?_smn4567<0;9:6gasu]gtdroWj~y`"C}ol]m4567W{ef<=>?52326d=nfz~Th}o{h^awvi)JzfgTb=>?0^pli5678<9:=R]X03:8mkusWmzjxeQltsn,IwijWg:;<=Q}ol234530988;>55fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?04525705k2ceyQkp`vk[frud&Gyc`Qa0123[wij89:;9:?>27]PS54e3`dxxRjauj\gqtk'DxdaR`?012\vjk789:>;?0^pli5678??:=<<8;hlppZbwi}bToy|c/LpliZh789:T~bc?01251475:h1bb~zPdqcwlZesze%F~bcPn1234Zthe9:;<;;>1^QT47??01]qkh6789<>=85031e>oi{}Uo|lzg_bvqh*KugdUe<=>?_smn4567?<;:S^Y>289jjvrXlykdRm{rm-NvjkXf9:;69=;:>o5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?06:2517Xn<8<7d`|t^fseqnXk}xg#@|`m^l3456Xzfg;<=>880346==nfz~Th}o{h^awvi)JzfgTb=>?0^pli5678>2:=57=c:kmwqYcxh~cSnz}l.OqkhYi89:;Sab01233=76Wdk{=9:5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?093254403`dxxRjauj\gqtk'DxdaR`?012\vjk789:3=>;5fnrv\`ugs`Vi~a!Brno\j5678Vxda=>?0932671?01]qkh67892:=??=e:kmwqYnf}Uhxb Mymq[lhsWzkf|akk_ymq4567W[oxyaz>179jjvrXag~Toy|c/hlw[del9830ec}{_hlw[frud&cexR}nmqnf`77 Ga19310>oi{}UbbyQltsn,mkrX{}kiRHId3/Jj4>Xn<8:7d`|t^kmpZesze%bbyQ|t`vf[C@c:$Ce><<>;hlppZoi|Vi~a!fnu]ppdrbWOLo> Ga3707?lht|VcexRm{rm-jjqYt|h~nSKHk2,Km[hgw9;>0ec}{_hlw[frud&cexR}{aug\BCb5%@dTal~71b9jjvrXag~Toy|c/qkm[vrf|lUMJi?>f:kmwqYnf}Uhxb phl\wqgsmVLMh<#Fn318mkusW`dSnz}l.rjjZusi}oTJKj>-Hl\WR76k2ceyQfnu]`pwj(x`dTyo{e^DE`77a3`dxxRgat^awvi)wagUxxlzj_GDg6(Oi:81bb~zPiov\gqtk'yceS~zntd]EBa4*AgUM><5fnrv\mkrXk}xg#}ga_rvbp`YANm8&EcQH1c9jjvrXag~Toy|c/rvbpZtb{}Udyy?m;hlppZoi|Vi~a!|t`v\wdpbWf=;5fnrv\mkrXk}xg#~zd_qms541oi{}U{o"Cnde]utfYflmy~n=>?0^az8469:<1bb~zPpb-NeabX~yiTmij|uc2345Ydq5;;2R|{209jjvrXxj%FmijPvqa\eabt}k:;<=Qly=3=61=nfz~T|n!Baef\rueXimnxyo>?01]`}979W{~9=6gasu]sg*KflmU}|nQndeqvf5678Vir0?0=4:kmwqYwk&GjhiQypb]b`aurj9:;Pcx>7:72<5fnrv\tf)JimnTz}mPaefpqg6789Uhu1;1259jjvrXxj%FmijPvqa\eabt}k:;<=Qly=7=[wr592ceyQc.Ob`aYqxjUjhi}zb1234Ze~4?4986gasu]sg*KflmU}|nQndeqvf5678Vir0;0Pru02?lht|Vzh#@okd^tsgZgclzi<=>?_b{?3;433`dxxR~l/Lcg`ZpwkVkoh~{m0123[f;?7Uyx??4ioqw[ue(EhnoS{~l_`fgwpd789:Tot27>368mkusWyi$Aljk_wr`[dbc{|h;<=>Pcx>;:Zts:81bb~zPpb-NeabX~yiTmij|uc2345Ydq535>95fnrv\tf)JimnTz}mPaefpqg6789Uhu171_sv1<>oi{}U{o"Cnde]utfYflmy~n=>?0^nvp969W@D]S=<<;hlppZvd'DkohRxc^cg`vse89:;Sua}<02=66=nfz~T|n!Baef\rueXimnxyo>?01]{kw:6978=7d`|t^r`+HgclV|{oRokdrwa4567Wqey0oi{}U{o"Cnde]utfYflmy~n=>?0^zlv979:;1bb~zPpb-NeabX~yiTmij|uc2345Yg{692?<4ioqw[ue(EhnoS{~l_`fgwpd789:Ttb|33?01?lht|Vzh#@okd^tsgZgclzi<=>?_ymq8185:2ceyQc.Ob`aYqxjUjhi}zb1234Z~hz5?5>?5fnrv\tf)JimnTz}mPaefpqg6789Usc29>308mkusWyi$Aljk_wr`[dbc{|h;<=>Pxnp?3;453`dxxR~l/Lcg`ZpwkVkoh~{m0123[}iu4149>6gasu]sg*KflmU}|nQndeqvf5678Vrd~171a:kmwqYwk&D>=?5fnrv\tf)wkVdnty2?>018mkusWyi$|nQaeyv?5586;2ceyQc.r`[kc|5;:2<<4ioqw[ue(xjUeiuz31?31?lht|Vzh#}mPndzw8786:2ceyQc.r`[kc|595=?5fnrv\tf)wkVdnty2;>008mkusWyi$|nQaeyv?1;753`dxxR~l/qa\j`~s4?4:>6gasu]sg*vdWgosx191139jjvrXxj%{oR`jxu>;:44;hlppZvd'yiTbhv{_031?lht|Vzh#}mPndzw[466:2ceyQc.r`[kc|V;:=<5fnrv\tf)wkVdntyQ=109jjvrXxj%{oR`jxu]054=nfz~T|n!c^lf|qY3981bb~zPpb-sgZhbp}U>=<5fnrv\tf)wkVdntyQ9109jjvrXxj%{oR`jxu]454=nfz~T|n!c^lf|qY?981bb~zPpb-sgZhbp}U2=55fnrv\tf)wkVdntyQnne234576j2ceyQc.r`[kc|Vddx=>?1^kmr`=nfz~T|n!ypb>3:46TJ<<4ioqw[ue(~yi7<3<;_F33?lht|Vzh#{~l<1<1346oi{}U{o"xc=33:455fnrv\tf)qxj6:=3Q\W1g8mkusWyi$z}m31?31?lht|Vzh#{~l<0<\WR4b3`dxxR~l/wr`8786:2ceyQc.tsg949WZ]9i6gasu]sg*pwk595=?5fnrv\tf)qxj682R]X2d9jjvrXxj%}|n2;>008mkusWyi$z}m34?]PS7c6gasu]sg*pwk5<5S^Y=e:kmwqYwk&|{o191139jjvrXxj%}|n28>^QT6`=nfz~T|n!ypb>;:44a:kmwqYwk&|{oRokdrwa456748:5=l5fnrv\tf)qxjUjhi}zb12349766830ec}{_qa,rueXimnxyo>?01>2:4?0;8mkusWyi$z}mPaefpqg6789682<74ioqw[ue(~yiTmij|uc2345:36830ec}{_qa,rueXimnxyo>?01>6:4?0;8mkusWyi$z}mPaefpqg67896<2<74ioqw[ue(~yiTmij|uc2345:?6830ec}{_qa,rueXimnxyo>?01>::471:kmwqYwk&|{oR|jg^625>oi{}U{o"xc^pfcZ3692ceyQc.tsgZtboV<:=6gasu]sg*pwkVxnkR9>1:kmwqYwk&|{oR|jg^:25>oi{}U{o"xc^pfcZ?6>2ceyQc.tsgZtboVey<=>?199jjvrXxj%}|nQ}ef]lv5678:<:o6gasu]sg*pwkVxnkRa}012373YT_9;h7d`|t^r`+svdW{olSb|?01202ZUP9820ec}{_qa,rueXzlmTc>?01:75f=nfz~T|n!ypb]qabYhz9:;oi{}Uxxlmd_bvqh*Kdg|dS}z}_b{?4;473`dxxR}{abi\gqtk'DidyczPpup\g|:66;:0ec}{_rvbgnYd|{f$Anaznu]spwYdq585>=5fnrv\wqgdcVi~a!BcnwmpZvszVir0>0=0:kmwqYt|hi`Snz}l.O`kphsWy~ySnw34?03?lht|VymnePcupo+Heh}g~T|y|Pcx>6:7649=6gasu]ppdelWj~y`"Clotlw[uruWe0=0=1:kmwqYt|hi`Snz}l.O`kphsWy~ySa{{<0<15>oi{}Uxxlmd_bvqh*Kdg|dS}z}_mww878592ceyQ|t`ah[frud&Ghcx`{_qvq[iss4:49=6gasu]ppdelWj~y`"Clotlw[uruWe090=1:kmwqYt|hi`Snz}l.O`kphsWy~ySa{{<4<15>oi{}Uxxlmd_bvqh*Kdg|dS}z}_mww838592ceyQ|t`ah[frud&Ghcx`{_qvq[iss4>49=6gasu]ppdelWj~y`"Clotlw[uruWe050=1:kmwqYt|hi`Snz}l.O`kphsWy~ySua}<1<15>oi{}Uxxlmd_bvqh*Kdg|dS}z}_ymq848592ceyQ|t`ah[frud&Ghcx`{_qvq[}iu4;49=6gasu]ppdelWj~y`"Clotlw[uruWqey0>0=1:kmwqYt|hi`Snz}l.O`kphsWy~ySua}<5<15>oi{}Uxxlmd_bvqh*Kdg|dS}z}_ymq808592ceyQ|t`ah[frud&Ghcx`{_qvq[}iu4?49=6gasu]ppdelWj~y`"Clotlw[uruWqey0:0=1:kmwqYt|hi`Snz}l.O`kphsWy~ySua}<9<23>oi{}Uxxlmd_bvqh*bh}}6;2<64ioqw[vrfkbUhxb dnww8469911bb~zPsuc`oZesze%ocxz310<23>oi{}Uxxlmd_bvqh*bh}}6:2<94ioqw[vrfkbUhxb dnww8786?2ceyQ|t`ah[frud&ndyy2<>058mkusWz~jofQltsn,`jss4=4:;6gasu]ppdelWj~y`"j`uu>6:417:kmwqYt|hi`Snz}l.flqq:068=0ec}{_rvbgnYd|{f$hb{{<9<23>oi{}Uxxlmd_bvqh*bh}}622<84ioqw[vrfkbUhxb dnww[5713`dxxR}{abi\gqtk'me~xR?>7:kmwqYt|hi`Snz}l.flqqY688=0ec}{_rvbgnYd|{f$hb{{_0322>oi{}Uxxlmd_bvqh*bh}}U9=;5fnrv\wqgdcVi~a!kotv\7402ceyQ|t`ah[frud&ndyyQ9179jjvrX{}khgRm{rm-gkprX?8<0ec}{_rvbgnYd|{f$hb{{_935?lht|VymnePcupo+air|V3::6gasu]ppdelWj~y`"cjm^uf53=nfz~Tyolk^awvi)w|{6;2<84ioqw[vrfkbUhxb pup?5;713`dxxR}{abi\gqtk'y~y0?0>6:kmwqYt|hi`Snz}l.rwv9599?1bb~zPsuc`oZesze%{x2;>048mkusWz~jofQltsn,tqt;=7;=7d`|t^qwefmXk}xg#}z}<7<22>oi{}Uxxlmd_bvqh*vsz5=5=;5fnrv\wqgdcVi~a!ts>;:43<;4ioqw[vrfkbUhxb pup\743oi{}xThd`3111?f8mkuszVnbb1?=>e9jjvruWmce0<=1d:kmwqtXl`d7=90k;hlppwYcag6:93j4ioqwvZbnf5;=2k5fnrvq[aoi48=1<3j4ioqwvZbnf5;<2n5fnrvq[aoi484h7d`|ts]gmk:56j1bb~z}_ekm868d3`dxxQkio>7:f=nfz~ySiga<4<`?lht|{Uoec29>b9jjvruWmce0:0l;hlppwYcag632n5fnrvq[aoi404<7d`{_`ah2>oi|Vcen6gat^qwoZvhxj1bbyQ|tj]sqvn13`eThb8;hrkevc612c{dl}j<1<;?lvoizoT>_HLU[5d1_RU3b>kbeVkoh2?>^QT5g=jmdUjhi|31?f8i`kXimny0<0P1g9nahYflmx7=3Q\W1d8i`kXimny0<0PSV3a?hcjWhno~1<1d:ofiZgcl{692R?i;lgn[dbcz585S^Y?f:ofiZgcl{692R]X1b9nahYflmx7?3?l;lgn[dbcz595>h5bel]b`at;;7Um9o5bel]b`at;<7l0ahcPaefq818X[^:m7`kb_`fgv929WZ]:o6cjm^cg`w:268i0ahcPaefq8085m2gnaRokds>6:Z`2k2gnaRokds>5:4ekbeVkoh29>^d6g>kbeVkoh28>0a8i`kXimny0:0=e:ofiZgcl{6<2Rh:c:ofiZbf|h6;27:4ekbeVnjxl29>0a8i`kXlh~j0:0>a:r`[lh;87;:n6~l_hl?55869>1{oRb`ae:8tfYkghn:h6|jg^c\`jss494o7kh_`]gkpr;97n0~hiPa^flqq:56m1yijQn_emvp959l2xnkRoPdnww818c3{olSlQkotv?1;b5:a=umnUjSiazt=5=`>tboVhThb{{<1e9qabYeWme~x1=1d:pfcZdXlf090k;sgd[gYcg|~793j4rde\fZbh}}6=2i5}ef]a[air|5=5m6|jg^fjj969i2xnkRjfn=3=e>tboVnbb1<1a:pfcZbnf595m6|jg^fjj929i2xnkRjfn=7=e>tboVnbb181a:pfcZbnf5=5=?5}ef]gmkYj}q:;<=2?>018v`aXl`dTaxv?012?4;76:2xnkRjfn^ov|56785;5=>5}ef]gmkYj}q:;<=2>>031?wc`WmceS`{w01238786;2xnkRjfn^ov|5678585=<<4rde\`lhXe|r;<=>33?30?wc`WmceS`{w012386869;1yijQkio]nq}67896?2<=4rde\`lhXe|r;<=>34?326>tboVnbbRczx12349399:1yijQkio]nq}67896>2?<7<27>tboVnbbRczx12349099880~hiPdhl\ip~789:7;3?<;sgd[aoiWds<=>?<6<27>tt|8>0yo{ur]qab(fd|$hm|v129ppdrr{Vxnk#ocu/xfvj?<{}aTec2?>c9ppnYnf5:5SKl4sui\mk:76VMj7~zd_hl?558e3z~`Sd`311<2`>uscVce0<>1_g7b?vrlW`d7=<0m;rvh[lh;984:h6}{k^km8479Wo?27~zd_hl?5;d<{}aTec2>>^Da?vrlW`d7=3QH9:qwoZoi4;4i7~zd_hl?6;YAj2ygRga<3<\C<=t|bUbb1=1b:qwoZoi4:4TJo5|tj]jj959WN30yePio>7:g=t|bUbb1:1_G`8wqmXag6?2RI6;rvh[lh;=7h0yePio>6:Z@e3z~`Sd`35?]D=>uscVce0;0m;rvh[lh;>7UMn6}{k^km838XO01xxfQfn=5=f>uscVce0:0PFc9ppnYnf5=5SJ74sui\mk:?6h1xxfQfn=:=5f=t|bUbb161_g7:?vrlW`d753o4sui\mk:>68i0yePio>::Z`2m2ygRga_`lg4567n2ygRga_`lg45679h1xxfQ`uu>3:g=t|bUdyy2>0?`8wqmXg|~7=<0n;rvh[jss484j7~zd_nww878f3z~`Sb{{<21`9ppnYw}zb:9h5|tj]sqvn6=VY\;ya7rv~4=$;;!kh96930?}ohWzogSnc_ds34566k2rfi`Qndep?4;e~jmdUjhi|32?a8|hcjWhno~1=1c:znahYflmx783m4xlgn[dbcz5?5o6vbel]b`at;>7o0t`kb_`fgv91=87i0t`kb_`fgv919j2rfi`Qkio>3:g=elgThd`31?`8|hcjWmce0?0m;yofiZbnf595n6vbel]gmk:36k1sahcPdhl?1;d7:f=elgThb{{<4<`?}kbeVndyy29>d9{i`kXlf0:4?>b9{i`kXlf0:08;yofiZtb02rfi`Q}e058|hcjW~o37ucjm^uf5xFGx89??6NOx26f>C<528qX5;4<1582g<<6;;>:j84=08c;k56:3;0b>?<:59'747=;9i0q^7::237>4e>28998"5nh0:on5+2e:92=en6=4>6pa:f783>>o4<;0;66g<3g83>>o1>i2nh0;66a9ac83>>o2n>0;66a9a983>!4ci3i1i?0;6)h5l00:76a9a483>!4ci3i1i=0;6)h5l00876a9a283>!4ci3i1i;0;6)h5l00>76a9a083>!4ci3i1i90;6)h5l00<76a99783>!4ci3<296`=d883?>i11=0;6)h5l00:76a99283>!4ci3<296`=d881?>i11;0;6)h5l00876a99083>!4ci3<296`=d887?>i1190;6)h5l00>76a98g83>!4ci3<296`=d885?>i10l0;6)h5l00<76a:d883>!4ci3?o46`=d883?>i2l>0;6)h5l00:76a:e383>!4ci3?o46`=d881?>i2m80;6)h5l00876a:e183>!4ci3?o46`=d887?>i2lo0;6)h5l00>76a:dd83>!4ci3?o46`=d885?>i2lm0;6)h5l00<76a:db83>!4ci3?o46`=d88;?>i2lk0;6)h5l00276a:d`83>!4ci3?o46`=d88b?>i2l?0;6)h5l00i76g:eb83>!4ci3?nn6`=d883?>o2mh0;6)h5l00:76g:e883>!4ci3?nn6`=d881?>o2m10;6)h5l00876g:e683>!4ci3?nn6`=d887?>o2m?0;6)h5l00>76g:e483>!4ci3?nn6`=d885?>o2m=0;6)h5l00<76g:f483>!4ci3?nn6`=d88;?>o2n=0;6)h5l00276g:f283>!4ci3?nn6`=d88b?>o2n;0;6)h5l00i76g:f083>!4ci3?nn6`=d88`?>o2n90;6)h5l00o76g:eg83>!4ci3?nn6`=d88f?>o2ml0;6)h5l00m76g:ee83>!4ci3?nn6`=d8824>=n=l91<7*=d`86ag=i:m31=<54i7;e>5<#:mk1:4k4n3f:>5=5<#:mk1:4k4n3f:>7=54i7;b>5<#:mk1:4k4n3f:>1=5<#:mk1:4k4n3f:>3=5<6290;w)N48l1C>k64o3f4>5<51;294~"5n>0:;85G31g8L7`?3f;<87>5;|`6ba<72<0;6=u+2g5950c<@::n7E1<729q/>k9514f8L66b3A8m46g73;29?l?32900e4950;9l6ae=831vn;;?:187>5<7s-8m;7?:f:J04`=O:o20e5=50;9j5;n0gg?6=3th=9<4?:583>5}#:o=1=8h4H22f?M4a02c3?7>5;h:e>5<h6F<0d9K6c>>o>?3:17b>j;I0e<>o?;3:17d6i:188m<2=831b5:4?::m1`f<722wi9o950;794?6|,;l<6<;j;I13a>N5n11b4>4?::k;b?6=3`3?6=44i8594?=h:mi1<75rb4a3>5<2290;w)N48l1C>k64i9194?=n0o0;66g64;29?l?02900c?jl:188yg3en3:197>50z&1b2<6=l1C?=k4H3d;?l>42900e5h50;9j=1<722c2;7>5;n0gg?6=3th>nh4?:483>5}#:o=1=8k4H22f?M4a02c3?7>5;h:e>5<1<75f9683>>i5lj0;66sm5cf94?3=83:p(?h8:07f?M57m2B9j55f8283>>o?n3:17d7;:188m<1=831d>im50;9~f0dd290>6=4?{%0e3?72m2B85<55;294~"5n>0:9h5G31g8L7`?3`286=44i9d94?=n1=0;66g67;29?j4ck3:17pl:b`83>0<729q/>k9514g8L66b3A8m46g73;29?l>a2900e4:50;9j=2<722e9hn4?::a1g?=83?1<7>t$3d4>43b3A9;i6F=f99j<6<722c3j7>5;h;7>5<i6F<0d9K6c>>o><3:17d78:188k7bd2900qo;m5;291?6=8r.9j:4>5d9K75c<@;l37d6<:188m=`=831b594?::k:3?6=3f8oo7>5;|`7bc<72:0;6=u+2g5950g<@::n7E5<53;294~"5n>0:9l5G31g8L7`?3`286=44i8594?=h:mi1<75rb437>5<4290;w)N48l1C>k64i9194?=n1>0;66a=db83>>{e=9l1<7:50;2x 7`028?o7E=?e:J1b==#9191<6g73;29?l?32900e4950;9l6ae=831vn8>l:187>5<7s-8m;7?:d:J04`=O:o20(<6<:19j<6<722c287>5;h;4>5<>o>?3:17b>j;I0e<>"60:0;7d6<:188m<2=831b5:4?::m1`f<722wi8>950;a1>5<7s-8m;74e=:>0947=>:20976<4<3826?o534802?{#91;1?6*>8380?!57039;;6*<088042=i:l81=?5a2d1957=i;9k1=?5a31`957=i99k1<6`>2b83?!4a83;>;6*=e081`0=#:o91=6*>8580?!7?=390(<69:29'5=1=;2.:454<;%3;=?5<,82j6>5+19`97>"60j087)?7d;18 4>b2:1/=5h53:&2=5<43-;2=7=4$0;1>6=#9091?6*>9580?!7>=390(<79:29'5<1=;2.:554<;%3:=?5<,83j6>5+18`97>"61j087)?6d;18 4?b2:1/=4h53:&2e5<43-;j=7=4$0c1>6=#9h91?6*>a580?!7f=390(5+1``97>"6ij087)?nd;18 4gb2:1/=lh53:&2f5<43-;i=7=4$0`1>6=#9k91?6*>b580?!7e=390(5+1c`97>"6jj087)?md;18 4db2:1/=oh53:&2g5<43-;h=7=4$0a1>6=#9j91?6*>c581?!7d=380(<9m:29'52e=;2.:;i4<;%34a?5<,8=m6>5+19297>"6k>0:9:5+1b:9501<,;o;6?j:;%0e0?7>o>:3:17d7<:188m42b2900e?k;:188m7c22900e<:i:188m7`22900e?h9:188k=d=831d4n4?::k56?6=,;nj6;?4n3f:>5=h5l00:76g:f;29 7bf2?;0b?j6:398m0c=83.9hl491:l1`<<432c>h7>5$3fb>37o1i3:1(?jn:738j7b>2?10e;750;&1`d<192d9h448;:k5==h5l00276g96;29 7bf2?;0b?j6:`98m33=83.9hl491:l1`<5$3fb>37o2k3:1(?jn:738j7b>2l10e:<50;&1`d<092d9h44?;:k44?6=,;nj6:?4n3f:>4=h5l00976g9e;29 7bf2>;0b?j6:298m3b=83.9hl481:l1`<<332c5$3fb>27o013:1(?jn:638j7b>2>10e:650;&1`d<092d9h447;:k43?6=,;nj6:?4n3f:><=<1<7*=d`845>h5l00j76g85;29 7bf2>;0b?j6:c98m22=83.9hl481:l1`<5$3fb>27oe>3:1(?jn:c78j7b>2910eo:50;&1`d;:ka6?6=,;nj6o;4n3f:>7=h5l00876gm0;29 7bf2k?0b?j6:598md`=83.9hl4m5:l1`<<232cji7>5$3fb>g3ofk3:1(?jn:c78j7b>2110ell50;&1`dd=h5l00i76gn7;29 7bf2k?0b?j6:b98md0=83.9hl4m5:l1`<5$3fb>g3of;3:1(?jn:c78j7b>28:07do=:18'6ag=j<1e>i751098md7=83.9hl4m5:l1`<<6:21bm=4?:%0ge?d23g8o57?<;:k:b?6=,;nj6o;4n3f:>42<3`3n6=4+2ec9f0=i:m31=854icf94?"5lh0i96`=d8822>=njj0;6)io5b49m6a?=9010eo750;&1`da:9jf=<72-8om7l:;o0g=?7e32ci;7>5$3fb>g35<#:mk1n85a2e;95a=h5l00:i65f9e83>!4ci3h>7coc?3:1(?jn:e48j7b>2910ei;50;&1`d2d9h44>;:kg7?6=,;nj6i84n3f:>7=h5l00876gk1;29 7bf2m<0b?j6:598ma6=83.9hl4k6:l1`<<232chj7>5$3fb>a0odl3:1(?jn:e48j7b>2110enm50;&1`d2d9h446;:k`f?6=,;nj6i84n3f:>d=h5l00i76gl8;29 7bf2m<0b?j6:b98mf1=83.9hl4k6:l1`<5$3fb>a0od<3:1(?jn:e48j7b>28:07dm<:18'6ag=l?1e>i751098mf4=83.9hl4k6:l1`<<6:21bo<4?:%0ge?b13g8o57?<;:k`4?6=,;nj6i84n3f:>42<3`hm6=4+2ec9`3=i:m31=854ieg94?"5lh0o:6`=d8822>=nlm0;6)io5d79m6a?=9010eio50;&1`d2d9h44>a:9j`<<72-8om7j9;o0g=?7e32co47>5$3fb>a05<#:mk1h;5a2e;95a=h5l00:i65fbd83>!4ci3n=7cob;3:1(?jn:d08j7b>2910eh?50;&1`d;:kf4?6=,;nj6h<4n3f:>7=h5l00876gj8;29 7bf2l=0b?j6:198m`0=83.9hl4j7:l1`<<632cn97>5$3fb>`1o4880;6)h5l00;76g=fg83>!4ci39;<6`=d882?>o5nl0;6)h5l00976g=fe83>!4ci39;<6`=d880?>o48?0;6)h5l00;76g<0583>!4ci39;96`=d882?>o48:0;6)h5l00976g<0383>!4ci39;96`=d880?>i68;0;6)h5l00;76a>0183>!4ci3;;=6`=d882?>iam3:1(?jn:022?k4c13807bhk:18'6ag=99;0b?j6:298kce=83.9hl4>009m6a?=<21djo4?:%0ge?7792d9h44:;:mee?6=,;nj6<>>;o0g=?0<3fl26=4+2ec9557=hn>0;6)h5l00276ai6;29 7bf28::7cio51138j7b>2k10ck=50;&1`d<6881e>i75c:9lb7<72-8om7??1:l1`<5$3fb>4663g8o57k4;nd3>5<#:mk1==?4n3f:>c=>;o0g=?7032e:<:4?:%0ge?7792d9h44>8:9l550=83.9hl4>009m6a?=9010c<>::18'6ag=99;0b?j6:0c8?j77<3:1(?jn:022?k4c13;i76a>0283>!4ci3;;=6`=d882g>=hno0;6)h5l00:h65`f583>!4ci3;;=6`=d882a>=hm00;6)h5l00:j65`13694?"5lh0:>>5a2e;94>=h9;81<7*=d`8266=i:m31=65`13294?"5lh0:>>5a2e;96>=h98l1<7*=d`8266=i:m31?65`10g94?"5lh0:>>5a2e;90>=h98n1<7*=d`8266=i:m31965`10a94?"5lh0:>>5a2e;92>=h98h1<7*=d`8266=i:m31;65`10c94?"5lh0:>>5a2e;9<>=h9831<7*=d`8266=i:m31565`10:94?"5lh0:>>5a2e;9e>=h98=1<7*=d`8266=i:m31n65`10794?"5lh0:>>5a2e;9g>=h98>1<7*=d`8266=i:m31h65`10194?"5lh0:>>5a2e;9a>=h9881<7*=d`8266=i:m31j65`10394?"5lh0:>>5a2e;955=3:9l55b=83.9hl4>229m6a?=9=10c<>l:18'6ag=9;90b?j6:078?j75j3:1(?jn:000?k4c13;=76a>2`83>!4ci3;9?6`=d8823>=h9;31<7*=d`8266=i:m31=554o00;>5<#:mk1=?=4n3f:>4?<3f;9;7>5$3fb>4443g8o57?n;:m263<72-8om7?=3:l1`<<6j21d=?;50;&1`d<6::1e>i751b98k446290/>io51318j7b>28n07b?>6;29 7bf28887ci68k0;6)h5l00:j65`12394?"5lh0:?=5a2e;94>=h9;l1<7*=d`8275=i:m31=65`13g94?"5lh0:?=5a2e;96>=h9;n1<7*=d`8275=i:m31?65`12494?"5lh0:?85a2e;94>=h9:>1<7*=d`8270=i:m31=65`12194?"5lh0:?85a2e;96>=h9:81<7*=d`8270=i:m31?65rb271>5N48l1C>k64i5f94?=n=831b=>750;9j56g=831b=>l50;9j6cd=831b>km50;9l6c4=831d=>950;9~f634290o6=4?{%0e3?4cm2B8>o3n3:17d;>:188m<1=831b=>650;9j56?=831b=>o50;9j56d=831b>kl50;9j6ce=831d>k<50;9l561=831vn>;8:18g>5<7s-8m;75;h72>5<5N48l1C>k64i5f94?=n=831b=>750;9j56g=831b=>l50;9j6cd=831b>km50;9l6c4=831d=>950;9~f631290o6=4?{%0e3?4cm2B8>o3n3:17d;>:188m<1=831b=>650;9j56?=831b=>o50;9j56d=831b>kl50;9j6ce=831d>k<50;9l561=831vn>;6:18g>5<7s-8m;75;h72>5<5<2290;w)N48l1C>k64i9194?=n0o0;66g64;29?l?02900c?jl:188yg3dk3:197>50z&1b2<6=l1C?=k4H3d;?l>42900e5h50;9j=1<722c2;7>5;n0gg?6=3th>oi4?:483>5}#:o=1=8k4H22f?M4a02c3?7>5;h:e>5<1<75f9683>>i5lj0;66sm5bg94?3=83:p(?h8:07f?M57m2B9j55f8283>>o?n3:17d7;:188m<1=831d>im50;9~f0ea290>6=4?{%0e3?72m2B85<55;294~"5n>0:9h5G31g8L7`?3`286=44i9d94?=n1=0;66g67;29?j4ck3:17pl:d083>0<729q/>k9514g8L66b3A8m46g73;29?l>a2900e4:50;9j=2<722e9hn4?::a1a4=83?1<7>t$3d4>43b3A9;i6F=f99j<6<722c3j7>5;h;7>5<i6F<0d9K6c>>o><3:17d78:188k7bd2900qo;67;297?6=8r.9j:4>cd9K75c<@;l37)?73;1;?l70?3:17d?88;29?j4c>3:17pl:8g83>1<729q/>k951e78L66b3A8m46g61;29?l?d2900e?ki:188k7b12900qo;n0;297?6=8r.9j:4<0e9K75c<@;l37d7>:188m4ef2900c?j9:188yg3>03:1?7>50z&1b2<6kl1C?=k4H3d;?!7?;3>27d?87;29?l7003:17b>j;I0e<>o>93:17d7l:188m7ca2900c?j9:188yg3f93:1?7>50z&1b2<48m1C?=k4H3d;?l?62900ecd9K75c<@;l37)?73;6:?l70?3:17d?88;29?j4c>3:17pl:9083>1<729q/>k951e78L66b3A8m46g61;29?l?d2900e?ki:188k7b12900qo;n2;297?6=8r.9j:4<0e9K75c<@;l37d7>:188m4ef2900c?j9:188yg3>i3:1?7>50z&1b2<6kl1C?=k4H3d;?!7?;3>27d?87;29?l7003:17b>j;I0e<>o>93:17d7l:188m7ca2900c?j9:188yg3f;3:1?7>50z&1b2<48m1C?=k4H3d;?l?62900ecd9K75c<@;l37)?73;6:?l70?3:17d?88;29?j4c>3:17pl:9283>1<729q/>k951e78L66b3A8m46g61;29?l?d2900e?ki:188k7b12900qo;n4;297?6=8r.9j:4<0e9K75c<@;l37d7>:188m4ef2900c?j9:188yg3>k3:1?7>50z&1b2<6kl1C?=k4H3d;?!7?;3>27d?87;29?l7003:17b>j;I0e<>o>93:17d7l:188m7ca2900c?j9:188yg3f=3:1?7>50z&1b2<48m1C?=k4H3d;?l?62900ecd9K75c<@;l37)?73;6:?l70?3:17d?88;29?j4c>3:17pl:9483>1<729q/>k951e78L66b3A8m46g61;29?l?d2900e?ki:188k7b12900qo;n6;297?6=8r.9j:4<0e9K75c<@;l37d7>:188m4ef2900c?j9:188yg3>m3:1?7>50z&1b2<6kl1C?=k4H3d;?!7?;3>27d?87;29?l7003:17b>j;I0e<>o>93:17d7l:188m7ca2900c?j9:188yg3f?3:1?7>50z&1b2<48m1C?=k4H3d;?l?62900ecd9K75c<@;l37)?73;6:?l70?3:17d?88;29?j4c>3:17pl:a983>6<729q/>k9531f8L66b3A8m46g61;29?l7di3:17b>j;I0e<>o6?>0;66g>7983>>o5mo0;66a=d783>>{e9ll1<7:50;2x 7`028im7E=?e:J1b==#9191=>h4i054>5<5<5;h345;n0g2?6=3th:hh4?:583>5}#:o=1=i84H22f?M4a02c:;:4?::k23=<722c9ik4?::m1`3<722wi=hk50;694?6|,;l<6N5n11/=5=512d8m4102900e<97:188m41>2900c?j9:188yg7b>3:187>50z&1b2<6ko1C?=k4H3d;?!7?;3=n7d?87;29?l7003:17d?89;29?j4c>3:17pl>de83>1<729q/>k951e48L66b3A8m46g>7683>>o6?10;66g=eg83>>i5l?0;66sm1df94?2=83:p(?h8:0ae?M57m2B9j55+191956`5<5<54;294~"5n>0:ok5G31g8L7`?3-;3?79j;h343?6=3`;<47>5;h34=?6=3f8o:7>5;|`2`f<72=0;6=u+2g595a0<@::n7E1<7>t$3d4>4ea3A9;i6F=f99'5=5=9:l0e<98:188m41?2900e<96:188k7b12900qo?j4;290?6=8r.9j:4>cg9K75c<@;l37)?73;5f?l70?3:17d?88;29?l7013:17b>j;I0e<>o6?>0;66g>7983>>o5mo0;66a=d783>>{e9lh1<7:50;2x 7`028im7E=?e:J1b==#9191=>h4i054>5<5<5;h345;n0g2?6=3th:hl4?:583>5}#:o=1=i84H22f?M4a02c:;:4?::k23=<722c9ik4?::m1`3<722wi=ho50;694?6|,;l<6N5n11/=5=512d8m4102900e<97:188m41>2900c?j9:188yg7b:3:187>50z&1b2<6ko1C?=k4H3d;?!7?;3=n7d?87;29?l7003:17d?89;29?j4c>3:17pl>d883>1<729q/>k951e48L66b3A8m46g>7683>>o6?10;66g=eg83>>i5l?0;66sm1d;94?2=83:p(?h8:0ae?M57m2B9j55+191956`5<5<54;294~"5n>0:ok5G31g8L7`?3-;3?79j;h343?6=3`;<47>5;h34=?6=3f8o:7>5;|`2`=<72=0;6=u+2g595a0<@::n7E=83>1<7>t$3d4>4ea3A9;i6F=f99'5=5=9:l0e<98:188m41?2900e<96:188k7b12900qo?j0;290?6=8r.9j:4>cg9K75c<@;l37)?73;5f?l70?3:17d?88;29?l7013:17b>j;I0e<>o6?>0;66g>7983>>o5mo0;66a=d783>>{eh4i054>5<5<5;h0fb?6=3f8o:7>5;|`7``<72=0;6=u+2g595a0<@::n7Et$3d4>4b53A9;i6F=f99'5=5=9?<0e<98:188m41?2900e<96:188m41f2900c?j9:188yg2b83:197>50z&1b2<6l;1C?=k4H3d;?!7?;3;=:6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e=1<75f16:94?=n:ll1<75`2e494?=zj=nm6=4::183!4a?3;o>6F<0d9K6c><,8286<89;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th?hi4?:483>5}#:o=1=i<4H22f?M4a02.:4>4>679j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn85<7s-8m;7=?d:J04`=O:o20e4?50;9j5fg=831d>i850;9~f04c29086=4?{%0e3?57l2B85<7s-8m;7?k5:J04`=O:o20e4?50;9j=f<722c9ik4?::m1`3<722wi9>650;194?6|,;l<6>>k;I13a>N5n11b5<4?::k2gd<722e9h;4?::a17g=83>1<7>t$3d4>4b23A9;i6F=f99j=4<722c2o7>5;h0fb?6=3f8o:7>5;|`672<72:0;6=u+2g5975b<@::n7E5;n0g2?6=3th>>54?:583>5}#:o=1=i;4H22f?M4a02c2=7>5;h;`>5<5<53;294~"5n>085<5<5<4290;w)N48l1C>k64i8394?=n9jk1<75`2e494?=zj<8?6=4;:183!4a?3;o96F<0d9K6c>>o5mo0;66a=d783>>{e=:>1<7=50;2x 7`02::o7E=?e:J1b==n180;66g>c`83>>i5l?0;66sm53094?2=83:p(?h8:0f6?M57m2B9j55f9083>>o>k3:17d3:17pl:3283>6<729q/>k9531f8L66b3A8m46g61;29?l7di3:17b>j;I0e<>o>93:17d7l:188m7ca2900c?j9:188yg34:3:1?7>50z&1b2<48m1C?=k4H3d;?l?62900ee;290?6=8r.9j:4>d49K75c<@;l37d7>:188mhh50;9l6a0=831vn8=>:180>5<7s-8m;7=?d:J04`=O:o20e4?50;9j5fg=831d>i850;9~f07d290?6=4?{%0e3?7c=2B8t$3d4>66c3A9;i6F=f99j=4<722c:ol4?::m1`3<722wi9N5n11b5<4?::k:g?6=3`8nj7>5;n0g2?6=3th>=:4?:583>5}#:o=1=i;4H22f?M4a02c2=7>5;h;`>5<5<55;294~"5n>0:9h5G31g8L7`?3`286=44i9d94?=n1=0;66g67;29?j4ck3:17pl:7g83>0<729q/>k9514g8L66b3A8m46g73;29?l>a2900e4:50;9j=2<722e9hn4?::a1=>=83?1<7>t$3d4>43b3A9;i6F=f99j<6<722c3j7>5;h;7>5<i6F<0d9K6c>>o><3:17d78:188k7bd2900qo;76;291?6=8r.9j:4>5d9K75c<@;l37d6<:188m=`=831b594?::k:3?6=3f8oo7>5;|`6<0<72<0;6=u+2g5950c<@::n7E0;66a=db83>>{e=1>1<7;50;2x 7`028?n7E=?e:J1b==n0:0;66g7f;29?l?32900e4950;9l6ae=831vn86<:186>5<7s-8m;7?:e:J04`=O:o20e5=50;9j5;h;4>5<5<>o>?3:17b>j;I0e<>o?;3:17d6i:188m<2=831b5:4?::m1`f<722wi9:k50;794?6|,;l<6<;j;I13a>N5n11b4>4?::k;b?6=3`3?6=44i8594?=h:mi1<75rb45g>5<2290;w)N48l1C>k64i9194?=n0o0;66g64;29?l?02900c?jl:188yg3313:187>50z&1b2<6=o1C?=k4H3d;?l>42900e5h50;9j=2<722e9hn4?::a11>=83>1<7>t$3d4>43a3A9;i6F=f99j<6<722c3j7>5;h;4>5<5<>i5lj0;66sm54294?2=83:p(?h8:07e?M57m2B9j55f8283>>o?n3:17d78:188k7bd2900qo;;f;290?6=8r.9j:4>5g9K75c<@;l37d6<:188m=`=831b5:4?::m1`f<722wi99k50;694?6|,;l<6<;i;I13a>N5n11b4>4?::k;b?6=3`3<6=44o3f`>5<54;294~"5n>0:9k5G31g8L7`?3`286=44i9d94?=n1>0;66a=db83>>{e==i1<7:50;2x 7`028?m7E=?e:J1b==n0:0;66g7f;29?l?02900c?jl:188yg33j3:187>50z&1b2<6=o1C?=k4H3d;?l>42900e5h50;9j=2<722e9hn4?::a11g=83>1<7>t$3d4>43a3A9;i6F=f99j<6<722c3j7>5;h;4>5<5<>i5lj0;66sm55494?2=83:p(?h8:07e?M57m2B9j55f8283>>o?n3:17d78:188k7bd2900qo:5`9K75c<@;l37d6<:188m<1=831d>im50;9~f12329086=4?{%0e3?72i2B8N5n11b4>4?::k:3?6=3f8oo7>5;|`707<72:0;6=u+2g5950g<@::n7E5<?=7>53;294~"5n>0:9l5G31g8L7`?3`286=44i8594?=h:mi1<75rb51g>5<4290;w)N48l1C>k64i9194?=n1>0;66a=db83>>{e<:l1<7=50;2x 7`028?j7E=?e:J1b==n0:0;66g67;29?j4ck3:17pl;3c83>6<729q/>k9514c8L66b3A8m46g73;29?l?02900c?jl:188yg24i3:1?7>50z&1b2<6=h1C?=k4H3d;?l>42900e4950;9l6ae=831vn9=6:180>5<7s-8m;7?:a:J04`=O:o20e5=50;9j=2<722e9hn4?::a06>=8391<7>t$3d4>43f3A9;i6F=f99j<6<722c2;7>5;n0gg?6=3th?8=4?:283>5}#:o=1=8o4H22f?M4a02c3?7>5;h;4>5<5<6=4;:183!4a?3;>j6F<0d9K6c>>o>?3:17b4?:1y'6c1=9>j;I0e<>o?;3:17d78:188k7bd2900qo::3;297?6=8r.9j:4>5`9K75c<@;l37d6<:188m<1=831d>im50;9~f13629086=4?{%0e3?72i2B850;194?6|,;l<6<;n;I13a>N5n11b4>4?::k:3?6=3f8oo7>5;|`021<72=0;6=u+2g595a3<@::n7E5<5<5<4290;w)N48l1C>k64i8394?=n9jk1<75`2e494?=zj:<=6=4;:183!4a?3;o96F<0d9K6c>>o5mo0;66a=d783>>{e;>=1<7=50;2x 7`02::o7E=?e:J1b==n180;66g>c`83>>i5l?0;66sm37594?2=83:p(?h8:0f6?M57m2B9j55f9083>>o>k3:17d3:17pl<7983>6<729q/>k9531f8L66b3A8m46g61;29?l7di3:17b10;694?:1y'6c1=9m?0D>>j;I0e<>o>93:17d7l:188m7ca2900c?j9:188yg5013:1?7>50z&1b2<48m1C?=k4H3d;?l?62900ed49K75c<@;l37d7>:188mhh50;9l6a0=831vn>9n:180>5<7s-8m;7=?d:J04`=O:o20e4?50;9j5fg=831d>i850;9~f60f290?6=4?{%0e3?7c=2B8t$3d4>66c3A9;i6F=f99j=4<722c:ol4?::m1`3<722wi?;l50;694?6|,;l<6N5n11b5<4?::k:g?6=3`8nj7>5;n0g2?6=3th8;n4?:283>5}#:o=1?=j4H22f?M4a02c2=7>5;h3`e?6=3f8o:7>5;|`02f<72=0;6=u+2g595a3<@::n7E5<5<5<53;294~"5n>085<5<>o>?3:17b>j;I0e<>o?;3:17d6i:188m<2=831b5:4?::m1`f<722wi?4l50;794?6|,;l<6<;j;I13a>N5n11b4>4?::k;b?6=3`3?6=44i8594?=h:mi1<75rb2;b>5<2290;w)N48l1C>k64i9194?=n0o0;66g64;29?l?02900c?jl:188yg5>13:197>50z&1b2<6=l1C?=k4H3d;?l>42900e5h50;9j=1<722c2;7>5;n0gg?6=3th8554?:483>5}#:o=1=8k4H22f?M4a02c3?7>5;h:e>5<1<75f9683>>i5lj0;66sm38594?3=83:p(?h8:07f?M57m2B9j55f8283>>o?n3:17d7;:188m<1=831d>im50;9~f6?1290>6=4?{%0e3?72m2B85<55;294~"5n>0:9h5G31g8L7`?3`286=44i9d94?=n1=0;66g67;29?j4ck3:17pl;1083>0<729q/>k9514g8L66b3A8m46g73;29?l>a2900e4:50;9j=2<722e9hn4?::a2de=8391<7>t$3d4>4eb3A9;i6F=f99'5=5=;o1b=:950;9j52>=831d>i850;9~f1`d29086=4?{%0e3?7dm2B842:l0e<98:188m41?2900c?j9:188yg2dj3:1?7>50z&1b2<6kl1C?=k4H3d;?!7?;38o7d?87;29?l7003:17b4?:1y'6c1=9jo0D>>j;I0e<>"60:09h6g>7683>>o6?10;66a=d783>>{e7683>>o6?10;66g>7883>>i5l?0;66sm4`g94?2=83:p(?h8:0ae?M57m2B9j55+19197a=n9>=1<75f16:94?=n9>31<75`2e494?=zj?kj6=4::183!4a?3;o>6F<0d9K6c><,828655f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj?2o6=4::183!4a?3;o>6F<0d9K6c><,82865:4i054>5<5<5<o<7>55;294~"5n>0:h?5G31g8L7`?3-;3?774i054>5<5<5<;?7>55;294~"5n>0:h?5G31g8L7`?3-;3?7?;;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th8m44?:483>5}#:o=1=i<4H22f?M4a02.:4>4>5:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi?l950;794?6|,;l<6N5n11/=5=56:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi?9?50;794?6|,;l<6N5n11/=5=5149j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn9hm:186>5<7s-8m;7?k2:J04`=O:o20(<6<:063?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl0<729q/>k951e08L66b3A8m46*>8286?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl;d`83>0<729q/>k951e08L66b3A8m46*>82817>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm41694?3=83:p(?h8:0f1?M57m2B9j55+1919a>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm43694?3=83:p(?h8:0f1?M57m2B9j55+19197`=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb5g7>5<2290;w)N48l1C>k64$0:0>7d5<5<5;h345;h34e?6=3f8o:7>5;|`7a7<72<0;6=u+2g595a4<@::n7Et$3d4>4b53A9;i6F=f99'5=5=k2c:;:4?::k23=<722c:;44?::k23d<722e9h;4?::a0`0=83?1<7>t$3d4>4b53A9;i6F=f99'5=5=081b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f1c2290?6=4?{%0e3?7dn2B842m1b=:950;9j52>=831b=:750;9l6a0=831vn9m8:186>5<7s-8m;7?k2:J04`=O:o20(<6<:060?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl;c983>1<729q/>k951bd8L66b3A8m46*>828207=n9>=1<75f16:94?=n9>31<75`2e494?=zj=i=6=4::183!4a?3;o>6F<0d9K6c><,8286<8k;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th?ii4?:483>5}#:o=1=i<4H22f?M4a02.:4>4;a:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi8lo50;794?6|,;l<6N5n11/=5=51478m4102900e<97:188m41>2900e<9n:188k7b12900qo:n9;291?6=8r.9j:4>d39K75c<@;l37)?73;32?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl;cb83>0<729q/>k951e08L66b3A8m46*>82820a=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb5a:>5<2290;w)N48l1C>k64$0:0>g=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb5`g>5<4290;w)N48l1C>k64$0:0>45d3`;<;7>5;h345;|`7ec<72=0;6=u+2g595f`<@::n7EN5n11/=5=5319j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn9l;:186>5<7s-8m;7?k2:J04`=O:o20(<6<:478m4102900e<97:188m41>2900e<9n:188k7b12900qo:m5;297?6=8r.9j:4>cd9K75c<@;l37)?73;30g>o6?>0;66g>7983>>i5l?0;66sm4gf94?5=83:p(?h8:0af?M57m2B9j55+19190<=n9>=1<75f16:94?=h:m<1<75rb420>5<3290;w)N48l1C>k64$0:0>6d5<5<9>7>53;294~"5n>0:oh5G31g8L7`?3-;3?7?N5n11/=5=5d:k232<722c:;54?::k23<<722e9h;4?::a15>=8391<7>t$3d4>4eb3A9;i6F=f99'5=5=9o1b=:950;9j52>=831d>i850;9~f0`e29086=4?{%0e3?7dm2B842:l0e<98:188m41?2900c?j9:188yg25?3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3>0e<98:188m41?2900e<96:188m41f2900c?j9:188yg0593:187>50z&1b2<6ko1C?=k4H3d;?!7?;3;8j6g>7683>>o6?10;66g>7883>>i5l?0;66sm63294?2=83:p(?h8:0ae?M57m2B9j55+191956`5<5<54;294~"5n>0:ok5G31g8L7`?3-;3?7?1<7>t$3d4>4ea3A9;i6F=f99'5=5=?l1b=:950;9j52>=831b=:750;9l6a0=831vn;?k:187>5<7s-8m;7?lf:J04`=O:o20(<6<:6g8m4102900e<97:188m41>2900c?j9:188yg06k3:187>50z&1b2<6ko1C?=k4H3d;?!7?;3=n7d?87;29?l7003:17d?89;29?j4c>3:17pl91c83>1<729q/>k951bd8L66b3A8m46*>8284a>o6?>0;66g>7983>>o6?00;66a=d783>>{e=m>1<7;50;2x 7`028n97E=?e:J1b==#9191=;l4i054>5<5<5<h97>55;294~"5n>0:h?5G31g8L7`?3-;3?784i054>5<5<5<7>54;294~"5n>0:ok5G31g8L7`?3-;3?79j;h343?6=3`;<47>5;h34=?6=3f8o:7>5;|`014<72:0;6=u+2g595fc<@::n7Et$3d4>4b53A9;i6F=f99'5=5=9<1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f071290?6=4?{%0e3?7dn2B842;o0e<98:188m41?2900e<96:188k7b12900qo878;291?6=8r.9j:4>d39K75c<@;l37)?73;345>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm54d94?3=83:p(?h8:0f1?M57m2B9j55+1919<0=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb471>5<4290;w)N48l1C>k64$0:0>405<t$3d4>4b53A9;i6F=f99'5=5===1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f13c290?6=4?{%0e3?7dn2B842=:0e<98:188m41?2900e<96:188k7b12900qo::c;291?6=8r.9j:4>d39K75c<@;l37)?73;;b?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl;2d83>0<729q/>k951e08L66b3A8m46*>82814>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm65g94?2=83:p(?h8:0ae?M57m2B9j55+1919===n9>=1<75f16:94?=n9>31<75`2e494?=zj?>h6=4;:183!4a?3;hj6F<0d9K6c><,8286464i054>5<5<5;h345;n0g2?6=3th=854?:583>5}#:o=1=nh4H22f?M4a02.:4>468:k232<722c:;54?::k23<<722e9h;4?::a210=83>1<7>t$3d4>4ea3A9;i6F=f99'5=5=111b=:950;9j52>=831b=:750;9l6a0=831vn;:;:187>5<7s-8m;7?lf:J04`=O:o20(<6<:8:8m4102900e<97:188m41>2900c?j9:188yg03:3:187>50z&1b2<6ko1C?=k4H3d;?!7?;3337d?87;29?l7003:17d?89;29?j4c>3:17pl94183>1<729q/>k951bd8L66b3A8m46*>828:<>o6?>0;66g>7983>>o6?00;66a=d783>>{e>9;1<7:50;2x 7`028im7E=?e:J1b==#9191=>h4i054>5<5<N5n11/=5=5919j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn;>;:187>5<7s-8m;7?lf:J04`=O:o20(<6<:01e?l70?3:17d?88;29?l7013:17b>j;I0e<>"60:0:8;5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj:h=6=4<:183!4a?3;hi6F<0d9K6c><,8286>h4i054>5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?7?93:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi?n<50;794?6|,;l<6N5n11/=5=515:8m4102900e<97:188m41>2900e<9n:188k7b12900qo=l3;297?6=8r.9j:4>cd9K75c<@;l37)?73;1e?l70?3:17d?88;29?j4c>3:17pl0<729q/>k951e08L66b3A8m46*>828226=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb207>5<2290;w)N48l1C>k64$0:0>43>3`;<;7>5;h345;h34e?6=3f8o:7>5;|`0gc<72<0;6=u+2g595a4<@::n7E=831b=:750;9j52g=831d>i850;9~f6b729086=4?{%0e3?7dm2B842:l0e<98:188m41?2900c?j9:188yg5c:3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3;=?6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e;;81<7;50;2x 7`028n97E=?e:J1b==#9191=874i054>5<5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?7?;8:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi?ij50;194?6|,;l<6N5n11/=5=53g9j521=831b=:650;9l6a0=831vn>ji:186>5<7s-8m;7?k2:J04`=O:o20(<6<:040?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl<2183>0<729q/>k951e08L66b3A8m46*>82821<=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb2g:>5<2290;w)N48l1C>k64$0:0>42?3`;<;7>5;h345;h34e?6=3f8o:7>5;|`0ad<72:0;6=u+2g595fc<@::n7Et$3d4>4b53A9;i6F=f99'5=5=9?90e<98:188m41?2900e<96:188m41f2900c?j9:188yg56m3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3;>56g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e;o<1<7;50;2x 7`028n97E=?e:J1b==#9191=964i054>5<5<5<53;294~"5n>0:oh5G31g8L7`?3-;3?7=i;h343?6=3`;<47>5;n0g2?6=3th8j44?:483>5}#:o=1=i<4H22f?M4a02.:4>4>629j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn>?l:186>5<7s-8m;7?k2:J04`=O:o20(<6<:07:?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl;0483>0<729q/>k951e08L66b3A8m46*>82820==n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb525>5<3290;w)N48l1C>k64$0:0>465<5<;57>55;294~"5n>0:h?5G31g8L7`?3-;3?7?;7:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi8=>50;794?6|,;l<6N5n11/=5=51718m4102900e<97:188m41>2900e<9n:188k7b12900qo=>a;291?6=8r.9j:4>d39K75c<@;l37)?73;36=>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm30:94?3=83:p(?h8:0f1?M57m2B9j55+191950?5<5<t$3d4>4b53A9;i6F=f99'5=5=191b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f36a290?6=4?{%0e3?7dn2B84289m7d?87;29?l7003:17d?89;29?j4c>3:17pl;6083>0<729q/>k951e08L66b3A8m46*>8286f>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm47794?3=83:p(?h8:0f1?M57m2B9j55+191951g5<5<5;h345;h34e?6=3f8o:7>5;|`07=<72=0;6=u+2g595f`<@::n7E=831b=:750;9l6a0=831vn>=8:186>5<7s-8m;7?k2:J04`=O:o20(<6<:828m4102900e<97:188m41>2900e<9n:188k7b12900qo=<5;290?6=8r.9j:4>cg9K75c<@;l37)?73;30b>o6?>0;66g>7983>>o6?00;66a=d783>>{e<1k1<7;50;2x 7`028n97E=?e:J1b==#919186g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e;:>1<7;50;2x 7`028n97E=?e:J1b==#91915=5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj:996=4;:183!4a?3;hj6F<0d9K6c><,8286<=i;h343?6=3`;<47>5;h34=?6=3f8o:7>5;|`074<72<0;6=u+2g595a4<@::n7E82c:;:4?::k23=<722c:;44?::k23d<722e9h;4?::a77`=83>1<7>t$3d4>4ea3A9;i6F=f99'5=5=9:l0e<98:188m41?2900e<96:188k7b12900qo==e;291?6=8r.9j:4>d39K75c<@;l37)?73;;3?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl<2b83>1<729q/>k951bd8L66b3A8m46*>82827c=n9>=1<75f16:94?=n9>31<75`2e494?=zj:8i6=4::183!4a?3;o>6F<0d9K6c><,82864>4i054>5<5<5<54;294~"5n>0:ok5G31g8L7`?3-;3?7?t$3d4>4b53A9;i6F=f99'5=5=<11b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f171290>6=4?{%0e3?7c:2B8428>37d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:09:6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e>1h1<7:50;2x 7`028<:7E=?e:J1b==n0:0;66g67;29?l4cl3:17b>j;I0e<>o?;3:17d78:188m7bc2900c?jl:188yg22:3:187>50z&1b2<6>81C?=k4H3d;?l>42900e4950;9j6ab=831d>im50;9~f07>29096=4?{%0e3?7dl2B8428l0e<98:188k7b12900qo;=b;296?6=8r.9j:4>ce9K75c<@;l37)?73;3e?l70?3:17b>j;I0e<>"60:0:j6g>7683>>i5l?0;66sm53594?4=83:p(?h8:0ag?M57m2B9j55+19195c=n9>=1<75`2e494?=zj<8>6=4=:183!4a?3;hh6F<0d9K6c><,82865<5;n0g2?6=3th>><4?:383>5}#:o=1=nj4H22f?M4a02.:4>4>f:k232<722e9h;4?::a14`=8381<7>t$3d4>4ec3A9;i6F=f99'5=5=9o1b=:950;9l6a0=831vn8?k:181>5<7s-8m;7?ld:J04`=O:o20(<6<:0d8m4102900c?j9:188yg36j3:1>7>50z&1b2<6km1C?=k4H3d;?!7?;3;m7d?87;29?j4c>3:17pl:2g83>7<729q/>k951bf8L66b3A8m46*>8282b>o6?>0;66a=d783>>{e<<31<7;50;2x 7`028n97E=?e:J1b==#91918?5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj=386=4;:183!4a?3;>h6F<0d9K6c>>o>?3:17b4?:1y'6c1=9>j;I0e<>o?;3:17d78:188k7bd2900qo:;c;297?6=8r.9j:4>5`9K75c<@;l37d6<:188m<1=831d>im50;9~f1>d290>6=4?{%0e3?7c:2B8428>j;I0e<>"60:0:;>5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj=2:6=4;:183!4a?3;>h6F<0d9K6c>>o>?3:17b>j;I0e<>o?;3:17d78:188m7be2900c?jl:188yg20?3:187>50z&1b2<6=m1C?=k4H3d;?l>42900e4:50;9j=2<722e9hn4?::a023=83>1<7>t$3d4>43c3A9;i6F=f99j<6<722c287>5;h;4>5<5<1<75f9683>>i5lj0;66sm46394?2=83:p(?h8:07g?M57m2B9j55f8283>>o><3:17d78:188k7bd2900qo:8f;290?6=8r.9j:4>619K75c<@;l37d6<:188m<1=831b>il50;9l6ae=831vn9o?:187>5<7s-8m;7?:d:J04`=O:o20e5=50;9j=1<722c2;7>5;n0gg?6=3th?5h4?:583>5}#:o=1=8j4H22f?M4a02c3?7>5;h;7>5<h6F<0d9K6c>>o>?3:17b>j;I0e<>o?;3:17d7;:188m<1=831d>im50;9~f12a290>6=4?{%0e3?7c:2B8428<>7d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:0:::5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj=6F<0d9K6c><,82868>4i054>5<5<5<=:7>55;294~"5n>0:h?5G31g8L7`?3-;3?7?=;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th?9:4?:483>5}#:o=1=i<4H22f?M4a02.:4>4>729j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn9?m:180>5<7s-8m;7?le:J04`=O:o20(<6<:01`?l70?3:17d?88;29?j4c>3:17pl;1583>0<729q/>k951e08L66b3A8m46*>828:=>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm37g94?3=83:p(?h8:0f1?M57m2B9j55+19193a=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb24e>5<2290;w)N48l1C>k64$0:0>2b5<5<5;h345;h34e?6=3f8o:7>5;|`034<72<0;6=u+2g595a4<@::n7Et$3d4>4b53A9;i6F=f99'5=5=?m1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f614290>6=4?{%0e3?7c:2B842>n0e<98:188m41?2900e<96:188m41f2900c?j9:188yg50<3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3=o7d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:07683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e<0;1<7;50;2x 7`028n97E=?e:J1b==#9191>k5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj=3?6=4::183!4a?3;o>6F<0d9K6c><,8286884i054>5<5<5<297>55;294~"5n>0:h?5G31g8L7`?3-;3?79i;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th?4?4?:483>5}#:o=1=i<4H22f?M4a02.:4>4>3d9j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn96;:186>5<7s-8m;7?k2:J04`=O:o20(<6<:01f?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl;8183>0<729q/>k951e08L66b3A8m46*>82827`=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb55;>5<2290;w)N48l1C>k64$0:0>2`5<5<5;h345;h34e?6=3f8o:7>5;|`731<72<0;6=u+2g595a4<@::n7Et$3d4>4b53A9;i6F=f99'5=5=?o1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f1g6290>6=4?{%0e3?7c:2B842>l0e<98:188m41?2900e<96:188m41f2900c?j9:188yg2>n3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3=m7d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:07683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e21<75f16;94?=n9>k1<75`2e494?=zj=3i6=4::183!4a?3;o>6F<0d9K6c><,8286:h4i054>5<5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?7?82:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi8;>50;794?6|,;l<6N5n11/=5=51418m4102900e<97:188m41>2900e<9n:188k7b12900qo:98;291?6=8r.9j:4>d39K75c<@;l37)?73;364>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm3`794?3=83:p(?h8:0f1?M57m2B9j55+191953c5<5<5;h345;h34e?6=3f8o:7>5;|`61a<72<0;6=u+2g595a4<@::n7Et$3d4>4b53A9;i6F=f99'5=5=0<1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f00a290>6=4?{%0e3?7c:2B8421?0e<98:188m41?2900e<96:188m41f2900c?j9:188yg31l3:197>50z&1b2<6l;1C?=k4H3d;?!7?;32>7d?87;29?l7003:17d?89;29?l70i3:17bk0;684?:1y'6c1=9m80D>>j;I0e<>"60:0396g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e=?31<7;50;2x 7`028n97E=?e:J1b==#9191485f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj<<<6=4::183!4a?3;o>6F<0d9K6c><,82865;4i054>5<5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?76:;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th>:>4?:483>5}#:o=1=i<4H22f?M4a02.:4>475:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi85h50;794?6|,;l<6N5n11/=5=5899j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn996:186>5<7s-8m;7?k2:J04`=O:o20(<6<:3a8m4102900e<97:188m41>2900e<9n:188k7b12900qo:8a;291?6=8r.9j:4>d39K75c<@;l37)?73;360>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm39;94?3=83:p(?h8:0f1?M57m2B9j55+191953?5<5<5;h345;n0g2?6=3th=484?:483>5}#:o=1=i<4H22f?M4a02.:4>4>7:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi::950;794?6|,;l<6N5n11/=5=59:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi8=?50;794?6|,;l<6N5n11/=5=58d9j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn>7j:186>5<7s-8m;7?k2:J04`=O:o20(<6<:99j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn9?7:186>5<7s-8m;7?k2:J04`=O:o20(<6<:79j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn8;j:186>5<7s-8m;7?k2:J04`=O:o20(<6<:06`?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl0<729q/>k951e08L66b3A8m46*>828235=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb2`e>5<2290;w)N48l1C>k64$0:0>4173`;<;7>5;h345;h34e?6=3f8o:7>5;|`0gf<72<0;6=u+2g595a4<@::n7E=831b=:750;9j52g=831d>i850;9~f6b>290>6=4?{%0e3?7c:2B8428=;7d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:0:;=5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj:l86=4::183!4a?3;o>6F<0d9K6c><,8286<9?;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th>5}#:o=1=i<4H22f?M4a02.:4>47;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th>5}#:o=1=i<4H22f?M4a02.:4>4>449j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn9h>:186>5<7s-8m;7?k2:J04`=O:o20(<6<:04:?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl98683>0<729q/>k951e08L66b3A8m46*>828223=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb26g>5<2290;w)N48l1C>k64$0:0>4c5<5<5;h345;h34e?6=3f8o:7>5;|`7g6<72<0;6=u+2g595a4<@::n7Et$3d4>4b53A9;i6F=f99'5=5=950z&1b2<6ko1C?=k4H3d;?!7?;32=7d?87;29?l7003:17d?89;29?j4c>3:17pl0<729q/>k951e08L66b3A8m46*>82821>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm4b094?3=83:p(?h8:0f1?M57m2B9j55+191953e5<5<5;h345;h34e?6=3f8o:7>5;|`752<72<0;6=u+2g595a4<@::n7Et$3d4>4b53A9;i6F=f99'5=5=9?l0e<98:188m41?2900e<96:188m41f2900c?j9:188yg3?k3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3>:7d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:08;6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e=<31<7;50;2x 7`028n97E=?e:J1b==#91914=5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj<:26=4;:183!4a?3;hj6F<0d9K6c><,8286>74i054>5<5<t$3d4>4b53A9;i6F=f99'5=5=9=i0e<98:188m41?2900e<96:188m41f2900c?j9:188yg31m3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3;?o6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e=?i1<7;50;2x 7`028n97E=?e:J1b==#9191=9m4i054>5<5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?7?;c:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi9;650;794?6|,;l<6N5n11/=5=515a8m4102900e<97:188m41>2900e<9n:188k7b12900qo;96;291?6=8r.9j:4>d39K75c<@;l37)?73;37g>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm57694?3=83:p(?h8:0f1?M57m2B9j55+191951e5<5<t$3d4>4b53A9;i6F=f99'5=5=9=h0e<98:188m41?2900e<96:188m41f2900c?j9:188yg5>n3:187>50z&1b2<6ko1C?=k4H3d;?!7?;3;?86g>7683>>o6?10;66g>7883>>i5l?0;66sm3c694?3=83:p(?h8:0f1?M57m2B9j55+191956b5<5<t$3d4>4b53A9;i6F=f99'5=5=9:n0e<98:188m41?2900e<96:188m41f2900c?j9:188yg5cj3:197>50z&1b2<6l;1C?=k4H3d;?!7?;3;8h6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e;l21<7;50;2x 7`028n97E=?e:J1b==#9191=>j4i054>5<5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?7?N5n11/=5=5d:k232<722c:;54?::k23<<722e9h;4?::a0a2=83?1<7>t$3d4>4b53A9;i6F=f99'5=5=9h1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f1b429086=4?{%0e3?7dm2B84289h7d?87;29?l7003:17b>j;I0e<>"60:0m7d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:0?n6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e5<5<5<jh7>54;294~"5n>0:ok5G31g8L7`?3-;3?7?92:k232<722c:;54?::k23<<722e9h;4?::a0dd=83?1<7>t$3d4>4b53A9;i6F=f99'5=5=911b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f1c0290>6=4?{%0e3?7c:2B842=>0e<98:188m41?2900e<96:188m41f2900c?j9:188yg2b03:197>50z&1b2<6l;1C?=k4H3d;?!7?;3;87d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:0:9;5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj:<86=4;:183!4a?3;hj6F<0d9K6c><,8286i5f16594?=n9>21<75f16;94?=h:m<1<75rb2:a>5<3290;w)N48l1C>k64$0:0>43?3`;<;7>5;h345;n0g2?6=3th84n4?:583>5}#:o=1=nh4H22f?M4a02.:4>4>599j521=831b=:650;9j52?=831d>i850;9~f0`b290>6=4?{%0e3?72m2B84291b4>4?::k;b?6=3`3?6=44i8594?=h:mi1<75rb726>5<3290;w)N48l1C>k64$0:0>45a3`;<;7>5;h345;n0g2?6=3th=<44?:583>5}#:o=1=nh4H22f?M4a02.:4>4>3g9j521=831b=:650;9j52?=831d>i850;9~f30c290?6=4?{%0e3?7c>2B850z&1b2<6l;1C?=k4H3d;?!7?;3=h7d?87;29?l7003:17d?89;29?l70i3:17bo0;684?:1y'6c1=9m80D>>j;I0e<>"60:0:9<5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj?5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?79l;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th=:n4?:483>5}#:o=1=i<4H22f?M4a02.:4>4>509j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn;88:187>5<7s-8m;7?k6:J04`=O:o20e<98:188m41?2900e?ki:188k7b12900qo898;291?6=8r.9j:4>d39K75c<@;l37)?73;5`?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl96883>0<729q/>k951e08L66b3A8m46*>828214=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb747>5<3290;w)N48l1C>k64i054>5<5<5;h345;h34e?6=3f8o:7>5;|`523<72<0;6=u+2g595a4<@::n7E=831b=:750;9j52g=831d>i850;9~f306290?6=4?{%0e3?7c>2B850z&1b2<6l;1C?=k4H3d;?!7?;3=h7d?87;29?l7003:17d?89;29?l70i3:17b:0;684?:1y'6c1=9m80D>>j;I0e<>"60:0:9<5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj??n6=4;:183!4a?3;o:6F<0d9K6c>5<5<j7>55;294~"5n>0:h?5G31g8L7`?3-;3?79l;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th=:=4?:483>5}#:o=1=i<4H22f?M4a02.:4>4>509j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn;;m:187>5<7s-8m;7?k6:J04`=O:o20e<98:188m41?2900e?ki:188k7b12900qo8:c;291?6=8r.9j:4>d39K75c<@;l37)?73;5`?l70?3:17d?88;29?l7013:17d?8a;29?j4c>3:17pl95e83>0<729q/>k951e08L66b3A8m46*>828214=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb771>5<3290;w)N48l1C>k64i054>5<5<5;h345;h34e?6=3f8o:7>5;|`511<72<0;6=u+2g595a4<@::n7E=831b=:750;9j52g=831d>i850;9~f077290?6=4?{%0e3?7c>2B850z&1b2<6l;1C?=k4H3d;?!7?;3;>7d?87;29?l7003:17d?89;29?l70i3:17b>j;I0e<>"60:0:955f16594?=n9>21<75f16;94?=h:m<1<75rb2c1>5<3290;w)N48l1C>k64i054>5<5<03`;<;7>5;h345;h34e?6=3f8o:7>5;|`0e1<72<0;6=u+2g595a4<@::n7E1<7>t$3d4>4b13A9;i6F=f99j521=831b=:650;9j6``=831d>i850;9~f031290?6=4?{%0e3?7dn2B842m1b=:950;9j52>=831b=:750;9l6a0=831vn8;8:187>5<7s-8m;7?lf:J04`=O:o20(<6<:8`8m4102900e<97:188m41>2900c?j9:188yg35k3:1>7>50z&1b2<6k?1C?=k4H3d;?l70>3:17b0;6?4?:1y'6c1=9j<0D>>j;I0e<>o6??0;66a=d783>>{e>9:1<7<50;2x 7`028i=7E=?e:J1b==n9><1<75`2e494?=zj=oi6=4::183!4a?3;o>6F<0d9K6c><,8286<89;h343?6=3`;<47>5;h34=?6=3`;5;n0g2?6=3th?in4?:283>5}#:o=1=nk4H22f?M4a02.:4>467:k232<722c:;54?::m1`3<722wi8hk50;694?6|,;l<6N5n11b=:950;9j52>=831b>hh50;9l6a0=831vn9lj:186>5<7s-8m;7?k2:J04`=O:o20(<6<:518m4102900e<97:188m41>2900e<9n:188k7b12900qo:mf;290?6=8r.9j:4>d79K75c<@;l37d?87;29?l7003:17d3:17pl;bc83>0<729q/>k951e08L66b3A8m46*>82816>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm4ca94?2=83:p(?h8:0f5?M57m2B9j55f16594?=n9>21<75f2dd94?=h:m<1<75rb5`1>5<2290;w)N48l1C>k64$0:0>0=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb5`0>5<3290;w)N48l1C>k64i054>5<5<5<5<5;h0fb?6=3f8o:7>5;|`760<72<0;6=u+2g595a4<@::n7E5;h345;h34e?6=3f8o:7>5;|`763<72=0;6=u+2g595a0<@::n7Et$3d4>4b53A9;i6F=f99'5=5=:<1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f1`4290?6=4?{%0e3?7c>2B850z&1b2<6l;1C?=k4H3d;?!7?;3;>=6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e>831<7;50;2x 7`028n97E=?e:J1b==#9191;n5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj?;j6=4;:183!4a?3;o:6F<0d9K6c>5<5<7>55;294~"5n>0:h?5G31g8L7`?3-;3?7?:1:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi:<=50;794?6|,;l<6N5n11/=5=57b9j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn;?;:187>5<7s-8m;7?k6:J04`=O:o20e<98:188m41?2900e?ki:188k7b12900qo=d39K75c<@;l37)?73;365>o6?>0;66g>7983>>o6?00;66g>7`83>>i5l?0;66sm32f94?3=83:p(?h8:0f1?M57m2B9j55+19193f=n9>=1<75f16:94?=n9>31<75f16c94?=h:m<1<75rb21f>5<3290;w)N48l1C>k64i054>5<5<t$3d4>4b53A9;i6F=f99'5=5=?j1b=:950;9j52>=831b=:750;9j52g=831d>i850;9~f370290?6=4?{%0e3?7c>2B850z&1b2<6l;1C?=k4H3d;?!7?;3;>=6g>7683>>o6?10;66g>7883>>o6?h0;66a=d783>>{e>9n1<7;50;2x 7`028n97E=?e:J1b==#9191;n5f16594?=n9>21<75f16;94?=n9>k1<75`2e494?=zj?:n6=4;:183!4a?3;o:6F<0d9K6c>5<5<55;294~"5n>0:h?5G31g8L7`?3-;3?7?:1:k232<722c:;54?::k23<<722c:;l4?::m1`3<722wi??950;794?6|,;l<6N5n11/=5=57b9j521=831b=:650;9j52?=831b=:o50;9l6a0=831vn><7:187>5<7s-8m;7?k6:J04`=O:o20e<98:188m41?2900e?ki:188k7b12900qo884;290?6=8r.9j:4>cg9K75c<@;l37)?73;30b>o6?>0;66g>7983>>o6?00;66a=d783>>{e>>?1<7:50;2x 7`028n=7E=?e:J1b==n9>=1<75f16:94?=n:ll1<75`2e494?=zj?=:6=4;:183!4a?3;hj6F<0d9K6c><,8286<=i;h343?6=3`;<47>5;h34=?6=3f8o:7>5;|`537<72=0;6=u+2g595a0<@::n7E1<7>t$3d4>4ea3A9;i6F=f99'5=5=9:l0e<98:188m41?2900e<96:188k7b12900qo8:a;290?6=8r.9j:4>d79K75c<@;l37d?87;29?l7003:17d3:17pl95783>1<729q/>k951bd8L66b3A8m46*>82827c=n9>=1<75f16:94?=n9>31<75`2e494?=zj??<6=4;:183!4a?3;o:6F<0d9K6c>5<5<m47>55;294~"5n>0:h?5G31g8L7`?3-;3?784i054>5<5<5<m57>54;294~"5n>0:ok5G31g8L7`?3-;3?7j4i054>5<5<5;h0fb?6=3f8o:7>5;|`76=<72<0;6=u+2g595a4<@::n7E=831b=:750;9j52g=831d>i850;9~f14>290?6=4?{%0e3?7c>2B850z&1b2<6l=1C?=k4H3d;?!7?;3;=86g>7683>>o6?10;66g>7883>>o6?h0;66a>cc83>>{e<21<75f16;94?=h9jh1<75rb57f>5<2290;w)N48l1C>k64$0:0>40f3`;<;7>5;h345;h34e?6=3f;hn7>5;|`547<72?0;6=u+2g595a5<@::n7EN5n11/=5=5919j521=831b=:650;9j52?=831b=:o50;9l5fd=831d>i850;9~f36f290=6=4?{%0e3?7c;2B842<80e<98:188m41?2900e<96:188m41f2900cd29K75c<@;l37)?73;;3?l70?3:17d?88;29?l7013:17d?8a;29?j7dj3:17b>j;I0e<>"60:0>>6g>7683>>o6?10;66g>7883>>o6?h0;66a>cc83>>i5l?0;66sm3c594?3=83:p(?h8:0f7?M57m2B9j55+19195115<5<t$3d4>4b33A9;i6F=f99'5=5=9==0e<98:188m41?2900e<96:188m41f2900c50z&1b2<6l=1C?=k4H3d;?!7?;3;?;6g>7683>>o6?10;66g>7883>>o6?h0;66a>cc83>>{e;lh1<7;50;2x 7`028n?7E=?e:J1b==#9191=994i054>5<5<5<55;294~"5n>0:h95G31g8L7`?3-;3?7?;7:k232<722c:;54?::k23<<722c:;l4?::m2gg<722wi8=950;794?6|,;l<6N5n11/=5=517g8m4102900e<97:188m41>2900e<9n:188k4ee2900qo8>0;292?6=8r.9j:4>d29K75c<@;l37)?73;71?l70?3:17d?88;29?l7013:17d?8a;29?j7dj3:17b>j;I0e<>"60:0>>6g>7683>>o6?10;66g>7883>>o6?h0;66a>cc83>>i5l?0;66sm32494?0=83:p(?h8:0f0?M57m2B9j55+191917=n9>=1<75f16:94?=n9>31<75f16c94?=h9jh1<75`2e494?=zj:986=49:183!4a?3;o?6F<0d9K6c><,82868<4i054>5<5<5<3:15;h345;h34e?6=3f;hn7>5;n0g2?6=3th8>i4?:783>5}#:o=1=i=4H22f?M4a02.:4>4:2:k232<722c:;54?::k23<<722c:;l4?::m2gg<722e9h;4?::a77g=83<1<7>t$3d4>4b43A9;i6F=f99'5=5==;1b=:950;9j52>=831b=:750;9j52g=831d=nl50;9l6a0=831vn96m:185>5<7s-8m;7?k3:J04`=O:o20(<6<:04g?l70?3:17d?88;29?l7013:17d?8a;29?j7dj3:17b>j;I0e<>"60:0:895f16594?=n9>21<75f16;94?=h9jh1<75rb5:5>5<2290;w)N48l1C>k64$0:0>0g5<5<5;h345;h34e?6=3f;hn7>5;|`7<=<72<0;6=u+2g595a2<@::n7Et$3d4>4b33A9;i6F=f99'5=5==11b=:950;9j52>=831b=:750;9j52g=831d=nl50;9~f11d290>6=4?{%0e3?7c<2B842<20e<98:188m41?2900e<96:188m41f2900c50z&1b2<6l=1C?=k4H3d;?!7?;3?37d?87;29?l7003:17d?89;29?l70i3:17b?lb;29?xd3?l0;684?:1y'6c1=9m>0D>>j;I0e<>"60:0>46g>7683>>o6?10;66g>7883>>o6?h0;66a>cc83>>{e21<75f16;94?=n9>k1<75`1b`94?=zj=k86=4::183!4a?3;o86F<0d9K6c><,8286864i054>5<5<5<j87>55;294~"5n>0:h95G31g8L7`?3-;3?7;7;h343?6=3`;<47>5;h34=?6=3`;5;n3`f?6=3th?=l4?:483>5}#:o=1=i:4H22f?M4a02.:4>4>489j521=831b=:650;9j52?=831b=:o50;9l5fd=831vn9;i:187>5<7s-8m;7?k1:J04`=O:o20(<6<:`9j521=831b=:650;9j52?=831d=nl50;9~f100290?6=4?{%0e3?7c92B842h1b=:950;9j52>=831b=:750;9l5fd=831vn>o9:186>5<7s-8m;7?k4:J04`=O:o20(<6<:458m4102900e<97:188m41>2900e<9n:188k4ee2900qo=n8;291?6=8r.9j:4>d59K75c<@;l37)?73;:4?l70?3:17d?88;29?l7013:17d?8a;29?j7dj3:17pl0<729q/>k951e68L66b3A8m46*>82821g=n9>=1<75f16:94?=n9>31<75f16c94?=h9jh1<75rb2a3>5<2290;w)N48l1C>k64$0:0>43e3`;<;7>5;h345;h34e?6=3f;hn7>5;|`0ga<72<0;6=u+2g595a2<@::n7E=831b=:750;9j52g=831d=nl50;9~f6bf290>6=4?{%0e3?7c<2B8428?i7d?87;29?l7003:17d?89;29?l70i3:17b?lb;29?xd4m>0;684?:1y'6c1=9m>0D>>j;I0e<>"60:0:9o5f16594?=n9>21<75f16;94?=n9>k1<75`1b`94?=zj:l?6=4::183!4a?3;o86F<0d9K6c><,8286<;m;h343?6=3`;<47>5;h34=?6=3`;5;n3`f?6=3th?5=4?:483>5}#:o=1=i:4H22f?M4a02.:4>4;1:k232<722c:;54?::k23<<722c:;l4?::m2gg<722wi8k>50;494?6|,;l<6N5n11/=5=58:k232<722c:;54?::k23<<722c:;l4?::m2gg<722e9h;4?::a2=0=83<1<7>t$3d4>4b43A9;i6F=f99'5=5=02c:;:4?::k23=<722c:;44?::k23d<722e:oo4?::m1`3<722wi?l>50;794?6|,;l<6N5n11/=5=512f8m4102900e<97:188m41>2900e<9n:188k4ee2900qo:?8;291?6=8r.9j:4>d59K75c<@;l37)?73;30`>o6?>0;66g>7983>>o6?00;66g>7`83>>i6kk0;66sm63494?3=83:p(?h8:0f3?M57m2B9j55+191961=n9>=1<75f16:94?=n9>31<75`1b`94?=h:m<1<75rb5d6>5<1290;w)N48l1C>k64$0:0>2=n9>=1<75f16:94?=n9>31<75f16c94?=h9jh1<75`2e494?=zj?8?6=49:183!4a?3;o?6F<0d9K6c><,8286<;>;h343?6=3`;<47>5;h34=?6=3`;5;n3`f?6=3f8o:7>5;|`624<72<0;6=u+2g595a2<@::n7E=83?1<7>t$3d4>4b33A9;i6F=f99'5=5=0m1b=:950;9j52>=831b=:750;9j52g=831d=nl50;9~f344290=6=4?{%0e3?7c;2B8428<37d?87;29?l7003:17d?89;29?l70i3:17b?lb;29?j4c>3:17p}:f783>7}Y=o<019hj:3f5?xu4<;0;6:4;:0?836;32870:if;:0?837k32870;?f;:0?837932870;?4;:0?824?33970:<7;;0?852:38mn63<5281bg=:;<>1>kl4=274>7`e349>972;li70;lb;:0?83dk32870;ld;:0?83dm32870;lf;:0?83c832870;k1;:0?83c:32870;k3;:0?833>32870;;7;:0?833i32870;;b;:0?833k32870;;d;:0?833m32870;;f;:0?832832870;:1;:0?833032870;;9;:0?830l32870;8e;:0?83?932870;72;:0?83?;32870;74;:0?83?=32870;76;:0?83??32870;78;:0?830n32870;70;:0?822832870::1;:0?822;32870::4;:0?82?=32870:>32870=67;:0?85>032870=69;:0?85>i32870=6b;:0?85>k32870:>2;:0?80?j3287087a;:0?822:32870:63;:0?823m32870:;c;:0?82?932870:73;:0?820?32870:85;:0?820;32870:81;:0?820n32870:n0;:0?82>m32870:6c;:0?82>i32870;ie;:0?xu4;o0;69uQ32d890`c21l01>:i:85890`b21l0q~8;f;2907}Y>=l018hk:868962a20>018l::86890d120>018l6:86890df20>018lm:86890dd20>018lk:86890db20>018li:86890e720>018l8:86890d?20>018m>:868906d20>018>i:868906620>018>;:86890ee20>018ml:86890ec20>018mj:86890ea20>018j?:86890b620>018j=:86890b420>0189k:868901b20>0186>:86890>520>0186<:86890>320>0186::86890>120>01868:86890>?20>0189i:86890>720>019?>:86896?220>01>79:86896?020>01>77:86896?>20>01>7n:86896?e20>01>7l:868917520>018;=:054?82>;33?70:71;;7?82?;38on63;768:0>;3?<02863;728:0>;3?802863;7g81`g=:52z\5e<=:>hk1>i84}r7ee?6=:rT>jl5269f96a052z\5eg=:>hi1>i84}r7e3?6=:rT>j:524gf952>8i7>52z?77`<5lj168kj51658yv36;3:1>v3:1281`f=:<;81=:94}r626?6=>r7=9<467:?7`f<5mo168ik52dd891752;nh70:=8;34<>;3>10:;55rs51`>5<5s4>8o7:l:186824?39;>63;368046=:<:=1?=:4=514>661349?o7p1>:i:3f`?824?3;?i63;36820c=:=1n1=:94}r164?6=0=`=9>201996:05;?820i3;<46s|5b394?3|5061=:ol019=8:222?xu29=0;6>u26429<;14k5250696ae53z?5?28=<7p}:fb83>40|5<>4>769>0cc=9>3018hm:05;?82d=3;41?34?;i7?87:?64<<6?>169<<516;8903028=3708?0;342>;2810:;552504952?<56<96;<6e4?70i27=4;4>7`9>270=9>2019h::05b?805;3;<56s|69c94?4|5?2j6?jl;<443?70?2wx:?;50;0x903>28=<708=6;0g2>{t>1>1<7?7{<7a1?>a34?i:76i;<7a=?>a34?im76i;<7af?>a34?io76i;<7a`?>a34?ii76i;<7ab?>a34?h<76i;<7a3?>a34?i476i;<7`5??034?2;7?88:?6==<6?116947516:890?f28=370;6b;34<>;21j0:;55258f952><5<3n6<97;<7:b?70027=454=d79>1a3=9>k0q~;i9;290~;29=02;63:1781`3=:>121=:64=7:6>41f3ty?=<4?:`y>206=1>168il52dd891762;nh70:=e;343>;3>80:;552404952?<5:226<97;<635?7002785h4>789>04>=9>30q~8:1;296~;1=809hn5243;952154z?656<>?27>=84=d79>1a2=9>201;<;:05:?xu3;o0;6?u242d96ae<5<;:6<98;|q515<72:q6:8>52ea8917e28=<70:>a;34<>{t<:n1<77bd34?:=7?88:p016=838p19=8:7d891272;nh7p}:fg83>6}:=on15:525gg9=2=:>9:1>i84}r4b;81>i84=5;3>41>3ty=m;4?:2y]2d0<5=9<6il4=702>7b13ty=m84?:2y]2d3<5=9<6io4=703>7b13ty=m94?:2y]2d2<5=9<6i74=73e>7b13ty=m>4?:4y]2d5<5=9<6i64=73f>7b134>{t>h;1<78t^7c2?824?3i2708>c;0g2>;30>0:;55246f952><5=k?6<97;|q5e5<72>qU:l>4=514>gc<5?;i6?j9;<6:0?70027?m84>799>0=0=9>20199j:05;?xu11?0;6:uQ684891502?o0196n:054?82?k3;7b13ty=594?:6y]2<2<5=9<6;j4=5:b>41?34>3o7?88:?72}Y>09019=8:6`891>f28=270:7c;343>;30m0:;45260696a0<5=2n6<98;|q5=7<72:qU:4<4=514>2g<5?:m6?j9;|q5=4<72=qU:4?4=514>2?<5?:n6?j9;<6;f?70i2wx:4>50;37[0>827??:488:?71d<6?>1688m51658936?2;n=70::9;34=>;3i<0:;452473952?<5=3:6<98;<6:0?70127?4;4>789>0=1=9>301967:05:?820j3;<563;7b823<=:<>n1=:74=55f>41>34>j>7?89:?7e6<6?0168l:516;8yv0?n3:1=;uQ69d891502>=019;n:05;?807<38o:63;58823==:<41f34>=97?8a:?7=4<6?11684:516c891g228=j70::e;34e>;30?0:;l52495952g<5=236<9n;<64f?70i27?;n4>7`9>02b=9>k0199j:05b?82f:3;1=:o4}r4;a?6=lrT=4h52425933=:<7b134>>>71685m516;891>c28=j70:;f;343>;334?3<71v8j8:180[3c?27>;k4=db9>14?=9>=0q~;j2;297~X2m;1695652ea8904e28=<7p}:e083>6}Y=l;01868:3f`?83513;<;6s|5d294?5|V;2:>0:;:5rs4fe>5<4sW?oj63:8481`f=:=;?1=:94}r7ga?6=;rT>hh5259696ae<5<886<98;|q6`a<72:qU9ij4=4:0>7bd34?9=7?87:p1ae=839pR8jl;<7;6?4ck27>=k4>769~w0be2908wS;kb:?6<4<5lj16912c=:mi018?m:054?xu2l?0;69uQ5e48901c2;nh70;:9;34<>;2:j0:;;5rs4g`>5<6lrT>in524e396``<5=no6<96;<6gb?70127?i=4>789>0`7=9>3019hl:054?82e83;<463;fc823d=:41034>j57?88:?7g<<6?>168o?5165891`328=<70=;d;34=>;3k:0:;5524b0952><5<2j6<98;<6fb?70?27?mo4>789>0`>=9>2019kj:3ge?82ek38nj63:078232=:hh4=5db>7ca34>m<7?89:?5<3<6?01v8kn:182b~X2mh168i<5165891bc28=370:kf;34<>;3m90:;5524d3952><5=lh6<97;<6a4?70?27=ml4>769>0cd=9>=019ln:05;?82b=3;<;63;c7823d=:41>34>h57?88:?7ec<6?>168o:516;8962d28=370:l3;34=>;20h0:;4524e19521<5=o26<96;<6bf?70027?i54>789>0`d=9>k019lm:054?837>3;<463;f1823==:>1<1=:64=5d6>41?3ty>i44?:36xZ0c>34>hn7?87:?7gd<6?1168lk5165891b728=270:ka;34e>;3m=0:;l524d1952?<5=o96<98;<6f2?70?27?o:4>789>0f>=9>3019kk:05;?82fi3;1=:74=5d2>41?34<3;7?87:?7ga<6?>168n<516c890>e28=j70;7c;343>;3l=0:;l524d;952><5=n=6<97;<6bg?70?27?mi4>769>0`1=9>=019m;:054?82bj3;<;63;bd8232=:41>34>m>7?89:?7b=<6?0168k7516;8yv3b03:1>8uQ5d:891ee28=370:la;343>;3il0:;5524e29521<5=nj6<96;<6f0?70027?i>4>769>0`4=9>2019k::05;?82d?3;<;63;c98232=:41>34>ho7?88:?7ec<6?0168k:516:891`628=270877;34e>;3km0:;4524b09521<5<2i6<97;<7;g?70027?h94>769>0`?=9>=019j9:054?82fk3;<463;ae823==:41>34>nn7?88:?7f`<6?0168ol516c891d528=j70:i2;34e>;3n10:;5524g;952>522y]1`1<5=ij6<96;<6ba?70127?h=4>7`9>0ag=9>=019k;:054?82b;3;41f34>h47?88:?7aa<6?h168lo5165891ed28=j70:nf;34<>;3n=0:;l524g39521<5?2<6<97;<6``?70027?o?4>789>1=d=9>=0186l:05:?82c<3;<463;e8823d=:41>34>n;7?88:?7g1<6?1168hl516;891db28=370:mb;34=>;3j;0:;5524g0952><5=l36<98;<6e=?70?2wx9h850;02[3b>27?h=4>799>0ag=9>2019k;:05:?82b;3;<463;e3823<=:41?34>h;7?88:?7ed<6?1168nm5165891d628=270:m4;34e>;3k<0:;5524g3952g<5?2<6<96;<17`?70i27?oi4>7`9>1=d=9>30186l:05b?82bn3;<463;d5823<=:41f34>jh7?89:?7a2<6?h168n:516c891cd28=<70:me;34e>;3j;0:;:52514952?<5=l96<98;<6el50;0x91502j:019=m:3f`?xu3;h0;6?u24259fc=:<:k1>im4}r60=?6=:r7??:4ke:?77<<5lj1v9=7:181824?3no70:<8;0gg>{t;=91<7:t=233>7b034>8;79?;<723??d34<3m778;|q53d<72;q68>95ec9>10`=9>20q~889;296~;3;>0nm63:5e823==z{?286=4={<603?77127>;<4>799~w3>52909w0:<7;33<>;2>o0:;55rs7:2>5<4s4>8;7??7:?2ac<6?0169;j516:8yv0?83:1?v3;368243=:9lo1=:74=44a>41?3ty=;k4?:2y>061=99?01;;<3fg?70127>::4>799~w31c2908w0:<7;337>;6mk0:;452577952>53z?772789>135=9>20q~88b;297~;3;>0m863>e8823<=:=?;1=:64}r44;2l:09hn5258d952154z?772<2m27>h?4=db9>1=01879:8a8yv3d03:18v3;3686`>;2l809hn5258f9521<5<3>64m4}r7`3?6=0=m63:cg81`f=:=0h1=:94=4;0>54z?772<1127>oh4=db9>1=0187=:8a8yv3d<3:18v3;3685<>;2km09hn5258;9521<5<3:64m4}r7`7?6=0=:63:cc81`f=:=0=1=:94=4:e>52z?60<<5lj16:87516:8yv34j3:1>v3:4981`f=:><<1=:64}r771?6=:r7>9<4=db9>222=9>20q~;;4;296~;2=909hn52663952>53z?60c<5lj16:;k516:8930a28=<7p}:4383>6}:==o1>im4=74a>41?34<=o7?87:p117=839p18:k:3f`?80103;<4639688232=z{<>;6=4<{<77g?4ck27=:84>799>230=9>=0q~;<5?<86<98;|q67`<72:q699o52ea8933a28=370890;343>{t=:n1<7=t=464>7bd34<>o7?88:?51a<6?>1v8=n:180833>38oo63952823==:><>1=:o4}r46n5467:?51d<5l?1v;;::18183e?33<708:7;0g2>{t>>91<7<1<5?=>6?j9;|q535<72;q69oh5969>224=:m<0q~89d;296~;2jl02;6396e81`3=z{?7}:=kh15:5267696a052z?6fd<>?27=:<4=d79~w33b2909w0;m9;;4?802m38o:6s|64`94?4|57b13ty=9?4?:3y>1g3=1>16:8<52e48yv3b=3:15vP:e49>24>=9>301;?6:05b?854k3;<563<3e823d=:>41034?>j7?87:?061<6?>1v8k;:18:[3b<27=><4>789>243=9>301;?9:05b?802?3;<463<238232=:;:k1=:64=47g>410349857?87:p1c3=833pR8h:;<414?70127==?4>789>245=9>k01;9::05;?85583;<;63<36823==:=>;1=:94=215>4103ty>j94?:8y]1c2<5?;m6<96;<446?700278=h4>769>247=9>201>=;:05;?831n3;<;639118232=:;:91=:94}r7e7?6=9;qU9k=4=271>45e349>?7?;4=10:?o5234;956d<5?789>25b=9>k01;?j:054?856k3;<;63<30823==:=?n1=:94=213>4103ty>j?4?:00xZ0`5349>>7?;4=?0:?l5234:956g<5:?26<=n;<45f?70i27=:n4>789>24b=9>=01>?n:054?855m3;<463:6c8232=:>9k1=:94=72a>41?3499h7?87:p1c7=83;9wS;i1:?017<6;016?8=512;89633289270=:7;30=>;4=<0:?452344956?<5:?36<=6;<16=?74127=:54>7`9>23?=9>301;?l:054?807?3;<463<198232=:;;h1=:64=44:>41034<;:7?87:?06d<6?>1v8h?:1826~X2n916?8<512:89634289370=:4;30<>;4=>0:?552347956><5:?=6<=7;<16399>233=9>k01;89:05:?855>3;<563<26823d=:>8h1=:94=235>41034?=;7?87:?547<6?>16:==516:8yv05m3:14v3<5881b7=:>?n1>hh4=73;>41034<:57?88:?07f<6?>16?>j516:8934528=270==4;34e>{t>;n1<76t=27;>7`534<9=7?88:?52d<5mo16:<;51658937128=370==2;34e>;4;h0:;l5232;952g58z?012<5n;16:?>516:893002;om708>2;343>;19:0:;552332952g<5:9<6<9n;<102?70i2wx:?l50;:x96312;l9708>f;34<>;1>=09ik5230g952g<5?;:6<9n;<100?70i27===4>7`9>765=9>k0q~8=a;29<~;4=<09j?5267396``<5?:h6<98;<43`?70027==h4>789>74e=9>k01>=>:05b?85483;|5:??6?h=;<46a?4bn27==i4>789>74g=9>k01>4=f39>20d=:ll01;?l:05:?807?3;41f3499m7?8a:p271=832p1>;=:3d1?802:38nj63<278232=:;;=1=:64=73a>41>349::7?8a:?547<6?h16:==516c8yv04>3:1?v3<588272=:>8k1>hh4=21f>7ca3ty=?84?:5y>70>=9:=01>=7:054?806?38nj63769>242=:ll01>k8:05;?xu1;:0;68u23449561<5?:m6<98;<106?70?27?4o4>769>7ag=9>20q~8<2;290~;4=<0:?:5233d9521<5?:n6?ki;<1``?7002wx:>?50;5x9633289<708?8;343>;4:j0:;:52476952><5?:26<98;<652?700278o=4>799~w357290>w0=:3;303>;18=0:;:5233;9521<5?:>6<98;<1a7?7002wx:?h50;4x9635289<708?1;343>;3?00:;:5246c9521<5:836?ki;<6;b?70?2wx??=50;;x960d20i01><;:3f5?85c83;<463;078232=:;o<1=:o4=535>41f349<97?89:?0e1<6?h168=6516c8yv5593:14v3<6c8:g>;4k:0:;55233096a0<5:o26<9n;<631?701278;94>789>7c5=9>=01>h::05b?xu49o0;65u237c9=f=:;k<1=:64=203>7b1349oo7?8a:?0b3<6?016?:=516;896c128=<70=j8;34e>{t;8n1<76t=24:>7`9>7`?=9>301>9=:05:?85c13;<;63;4kj0:;:523bg952g58z?022<>k278j:4>799>74g=:m<01>l::05:?85dn3;<563<71823<=:;kl1=:94=2a2>41f3ty8=:4?:9y>730=1j16?ho516:8967?2;n=70=l2;34=>;4>o0:;4523c09521<5:h?6<9n;<1b7?70i2wx?<;50;;x960220i01>l::05b?85cl3;<463<1781`3=:<831=:o4=522>41f349=i7?89:?0e3<6?016?l>516c8yv54j3:18v3;07823<=:;:o1>i84=52:>41f349<97?8a:p76>=839p1>=7:3f5?850<3;6=4<{<101?4c>278;>4>7`9>7`d=9>k0q~=<2;297~;4;;09h;52360952g<5:nn6<9n;|q06c<72:q6??h52e48961628=j70=k1;34e>{t;;i1<7=t=20`>7b1349<<7?8a:?0g1<6?h1v><6:180855138o:63<6g823d=:;k=1=:o4}r111?6=54=d79>73c=9>k01>7i:05:?85f>3;{t<=31<7=t=571>7bd34<6=4={<664?4ck27=894>799~w1212909w0:;e;0gg>;1<;0:;55rs566>5<5s4>?o7e6823<=z{?>i6=4={<47g?4c>27:i;4>789~w32>2909w08;a;0g2>;6m<0:;45rs764>5<5s438o:63>e2823<=z{?>86=4={<470?4c>27:i?4>789~w3262909w08;2;0g2>;6m80:;45rs71e>5<5s47;:18087bn3;<463<9b81`f=:<;<1>hh4}r1:7?6=;r7:ih4>799>7u21df952><5:3j6?jl;<611?70i2wx?4?50;1x94cd28=370=69;0gg>;3:>0:;:5rs2;3>5<4s4;nn7?88:?0==<5lj168?9516:8yv5?n3:1?v3>e`823==:;0=1>im4=504>41>3ty84h4?:2y>5`?=9>201>79:3f`?825?3;84>769~w1232909w0:;4;0gg>;1=00:;45rs560>5<5s4>??7:6=4={<675?4ck27=;<4>789~w62e2909w0:<7;31=>;15<5s4>8;7?=8:?50f<6?01v>:6:181824?3;9;6394`823<=z{:>36=4={<603?75>27=854>789~w6202909w0:<7;311>;15<5s4>8;7?=1:?501<6?01v>:::181824?3;::63943823<=z{:>?6=4={<603?77j27=8=4>789~w0ge2909w0;m8;0gg>;3;>02j6s|5`c94?4|5n94?:3y>1f6=:mi019=8:cf8yv3e;3:1>v3:bg81`f=:<:=1nn5rs4`1>5<5s4?ii7no4=db9>061=j11v8oj:18183ei38oo63;368a3>{t=hn1<77bd34>8;7l<;|q6ef<72;q69o852ea891502h20q~;n9;296~;2j<09hn524259=a=z{;4=;0>=63<52865>;4==0>=63<56865>;4=<0>=63<57865>;4=10>=63<58865>;1>;0:;l52671952?<5<<>6<98;|q6a`<72jqU9hk4=271>1`<5:?869h4=277>1`<5:?<69h4=276>1`<5:?=69h4=27;>1`<5:?269h4=77e>41f34<=<7?89:?626<6?>1v8kk:18`[3bl2789?4;e:?016<3m278994;e:?012<3m278984;e:?013<3m278954;e:?01<<3m27=9n4>7`9>20b=9>30188>:054?xu2m:0;6nuQ5d1896352=n01>;<:5f896332=n01>;8:5f896322=n01>;9:5f8963?2=n01>;6:5f8933428=j708:4;34=>;2=?0:;55rs71f>5<5s49>5778;<3gb?4c>2wx:>j50;0x963?20=01i84}r40f?6=:r789;467:?2`f<5l?1v;=n:181852=33<70?kb;0g2>{t>:31<7<1<58nj6?j9;|q57=<72;q6?8=5969>5a?=:m<0q~8<7;296~;4=;02;63>d981`3=z{a34?ho76i;<7``?>a34?hi76i;<7`b?>a34?o<76i;<7g5?>a34?o>76i;<7g7?>a34?o871}:=9l1>im4=42f>41?34?:<71v9hi:18082an38oo63:0e823<=:=8;1=:o4}r724?6=:r7>k:181837k33<70;?d;0g2>{t=9i1<7=t=42`>7bd34?;h7?88:?654<6?01v8>::181837<33<70;?9;0g2>{t=981<7<1<5<:86?j9;|q641<72mq69=:52ea8906428=270:ie;34<>;29?0:;5525079521<5?=<6<96;<73a?70127><44>799>144=9>2018;8:054?83703;<;639278232=:>;91=:64}r735?6=ir7><<4=db9>155=9>2019hj:054?836=3;<463976823d=:=9o1=:o4=431>41034?>;7?89:?642<5mo169<851658yv4b>3:1>v3:cc8:3>;2i909h;5rs3g4>5<5s4?ho778;<7b5?4c>2wx>h650;0x90ec20=018o=:3f5?xu5m00;6?u25bg9=2=:=h91>i84}r0fe?6=:r7>ok467:?6e1<5l?1v?km:18183c833<70;n5;0g2>{t:li1<7<1<51d1=:m<0q~95619>061=i9168>95a09>061=i;168>95a29>061=k8168>95c39>061=k:168>95c59>061=lo168>95e19>061=m=168>95e49>061=:l>019=8:3g6?824?38m963;3681b3=:=8=15<5250c9=f=:=8i15n5250g9=f=:=;:15n525309=f=:=;>15n525349=f=:=;215n5253c9=f=:=8215n524cd9521<5=hh6<97;<6a7?70?27?>;4>799>0c5=9>20q~5ab=:ll01az?746<6?116?l7516;896g028=j70=nb;34e>;38=0:;l52436952><5=8n6<9n;<621?70i27?=44>799>7=?=9>k01>ol:05;?827:3;<563;ac81`3=:;?91=:64=2:a>41?3493o7?88:?0e7<5mo16?;k516:8960a28=370=80;34<>;4?80:;552360952><5:=86<97;<140?700278;84>799>7d>=9>20q~41?349j;7?89:?0eg<6?0168=:51658914328=<70:>5;34=>;41l0:;5524b196a0<5:kj6<96;<636?70027?=:4>799>7g2=9>301>m>:05:?85dm3;<56341>349j?7?88:?0e1<6?116?l>516;8916?28=27p};cd83>7}:7b13ty?ok4?:5y>0a4=9>3019j?:3f5?82aj3;<563:d48232=z{;396=46{<166?4ak2789>4=fb9>702=:oi01>;8:3d`?852=38mo63<5781bf=:;<21>km4=27:>7`d34?mn7:054?82ci38o:6s|4e594?4|5=o;6<98;<6f6?4c>2wx8i650;0x91ba28=<70:j3;0g2>{t41034>n87u258596a0<5<2m6?ki;<7b4?7di2wx95h50;1x90>a2;n=70;60;;2?83f933:7p}=a683>6}:=021>i84=4;3>7ca34?j=7?la:p1<6=839p187?:3f5?83>933:70;n2;;2?xu5i10;6>u258;96a0<5<3:6?ki;<7b6?7di2wx94?50;1x90?62;n=70;62;;2?83f;33:7p}=a883>6}:=0k1>i84=4;1>7ca34?j?7?la:p1<4=839p187=:3f5?83>;33:70;n4;;2?xu5ih0;6>u258`96a0<5<386?ki;<7b0?7di2wx94=50;1x90?42;n=70;64;;2?83f=33:7p}=ac83>6}:=0i1>i84=4;7>7ca34?j97?la:p1<2=839p187;:3f5?83>=33:70;n6;;2?xu5ij0;6>u258f96a0<5<3>6?ki;<7b2?7di2wx94;50;1x90?22;n=70;66;;2?83f?33:7p}=ad83>6}:=0o1>i84=4;5>7ca34?j;7?la:p1<0=838p1879:3f5?83f033:7p}=ag83>7}:=0l1>i84=4c;>4ef3ty95:4?:3y>5``=:m<017}:9l<1>i84=0ff>41?3ty9=:4?:3y>5`b=:m<017}:9l>1>i84=0f`>41?3ty9oi4?:3y>5`d=:m<017}:9l81>i84=0fb>41?3ty9n?4?:3y>5`?=:m<01f383>7}:9l:1>i84=0f;>41?3ty9n<4?:03x94c?28=<70?j9;343>;6mh0:;:521d`9521<58oh6<98;<3f`?70?27:ih4>769>5``=9>=019hm:3f5?87b?3;<463>e7823==:9l?1=:64=0g7>41?34;n?7?88:?2a7<6?116=h?516:894c728=37p};d083>7}:i84=4da>4103ty:jo4?:3y>0a7=9>=019j<:3f5?xu6n90;6?u24e096a0<5=n:6<97;|q7``<72;q68ik52e4891be28=<7p}=b583>7}:i84=5ff>4103ty9m;4?:3y>0`6=:m<019jj:05;?xu3lj0;6?u24ea96a0<5=ni6<97;|q1=a<72;q68ih52e4891bd28=<7p}=0483>7}:i84=5f`>41?3ty95;4?:01x91be2;n=7087b;0g`>;10h09hi5254g952?<5:h4>789>13e=9>30188n:05:?83103;<563:67823<=:=?>1=:74=441>41>34?=<7?89:?613<6?016:?8516;8934328=j70;:8;34e>;1::0:;l5rs755>5<6=r7=;:4=d79>23c=9>=01;8i:05;?801j3;<;6396b823==:>?21=:94=74:>41?34<=97?87:?523<6?116:;<51658930428=3708:f;343>;1>90:;55264a9521<5??o6<97;<467?70?27=994>799>223=:ll01;9=:3ge?802i38nj6395681ac=z{8lj6=4>1z?7g3<5l?16:<6516c8937>28=2708>2;34e>;19:0:;452607952g<5?;=6<96;<43g?70i27=789>251=9>=01;?>:054?807:3;<4639028232=:>9k1=:64=72a>41034<;:7?88:?555<6?11v?>j:1825~;3k009h;5260:952><5?;26<98;<426?70027==>4>769>243=9>201;?9:054?807k3;<46390e8232=:>9=1=:74=732>41>34<;>7?89:?546<6?016:=o516;8936e28=2708?6;34=>;1990:;45rs3`5>5<4s44103416:9651658932128=<708;4;343>;1<;0:;:526529521<5=3;6<98;|q1`4<72?q68no52e4893>c28=j70=;1;343>;3jh0:;:524`;9521<5:>o6<98;|q10a<72=q68nl52e4893>c28=<70=;1;34e>;45<3s41684>516:891`22;n=7p}=9c83>0}:>hi1=:94=7cb>41?34<3h7?89:?004<6?0168oo52e48yv4>m3:1=;4>7`9>771=9>301>=n:054?854?3;<;63<358232=:;:;1=:94=20f>4103499n7?87:?07<<6?116?>8516:8965428=370=<0;34<>;4:m0:;55233c952>510y>0``=:m<01>=l:05;?854l3;<;63<27823==:;;=1=:94=21b>41>3498;7?89:?071<6?016?>?516;8964b28=270==b;34=>;4;00:;452324952?<5:986<96;<104?701278>i4>789>77g=9>30q~<69;29`~;3j909h;5269f952><5:>:6<97;<6ab?4bn27?n>4=eg9>772=9>201><=:05;?85583;<463<1d823==:;8i1=:64=23b>41?349:47?88:?053<6?11v?o?:1822~;10<0:;:5267g952?<5?7`9>23>=9>301;86:05b?801=3;<563967823d=:>?81=:74=740>41f34<>j7?89:?525<6?h16:8m516;8933c28=j708:3;34=>;1==0:;:526669521<5?=:6<98;<46=?70?27=9;4>769>0c6=:m<0q~6<97;|q1gf<72lq68lk52e4891d628=j70:m4;34<>;3k<0:;:524b19521<5<:=6<9n;<110?701278>?4>789>776=9>301>?j:05:?856k3;<563<1`823<=:;821=:74=235>41>3ty:j<4?:cy>10b=9>30189>:05:?831n3;<563:6e823<=:=?h1=:74=44:>41>34?=;7?89:?620<6?0169;=516;893432;n=70;91;34=>{t:j<1<7lt=47e>41f34?<=7?8a:?62c<6?h169;j516c8900e28=j70;99;34e>;2>>0:;l52577952g<5<<86<9n;<755?70i27=>>4=d79~w4`4290;10k02;63:578232=:=m>1=:94=707>41034?>47?89:?566<6?>1v?7n:18:82b=38o:639208232=:>;:1=:94=73e>41034<:i7?88:?55a<6?116:{t=821<77b134?9i77>;|q66d<72:q69?o52e48907?20;01827>>5461:?672<>92wx9?:50;1x90432;n=70;=6;;2?834>33:7p}:2383>6}:=;81>i84=407><7<5<9>64?4}r714?6=;r7>>=4=d79>174=18169>:5909~w07b2908w0;>e;0g2>;2:902=63:328:5>{t=8i1<7=t=43`>7b134?:i77>;<706??63ty>=l4?:2y>14g=:m<018?l:838905620;0q~;>7;297~;29>09h;5250c9=4=:=::15<5rs41:>5<5s4?:;732m70;;7;:e?833i32m70;;b;:e?833k32m70;;d;:e?833m32m70;;f;:e?832832m70;:1;:e?833032m70;;9;:e?832:38o:6s|54694?5|5<>=6494=45g><1<512c=1>169;>52e48yv31:3:1?v3:4`8:3>;20802;63:6381`3=z{<778;<750?4c>2wx9;850;1x902d20=0186<:85890012;n=7p}:6983>6}:==n15:525969=2=:=?21>i84}r75e?6=;r7>8h467:?6<0<>?27>:l4=d79~w00d2908w0;;f;;4?83?>33<70;9c;0g2>{t=?o1<7=t=473><1<5<2<6494=44f>7b13ty>;=4?:2y>107=1>169565969>126=:m<0q~;:c;297~;2<102;63:7g8:3>;2=j09h;5rs47f>5<4s4??5778;<7;4??034?>i7{t=>=1<77b134?=:7?88:p12>=838p18=;:3f5?83103;<46s|56;94?4|5<9>6?j9;<75e?7002wx9:o50;0x90512;n=70;9c;34<>{t=>h1<77b134?=i7?88:p12e=838p18=7:3f5?83083;<46s|56094?4|5<8o6?j9;<76g?7002wx9:=50;0x904b2;n=70;:e;34<>{t=131<7kt=45g>=`<5<=n65h4=4:2>=`<5<2965h4=4:0>=`<5<2?65h4=4:6>=`<5<2=65h4=4:4>=`<5<2365h4=45e>=`<5<2;65h4=471>41?34?3h70}:<=;15:5248c96ae<5=769~w1?0290>w0:;2;;4?82>k38oo63;61823==:<0n1=:94=5c7>4103ty?554?:4y>015=1>1684k52ea891?a28=<70::e;34<>;3i:0:;:5rs5;:>5<2s4>?8778;<6b4?4ck27?m<4>769>00d=9>=019o=:054?xu3>m0;68u242:9=2=:<>;1>im4=551>41034>=47?87:?73`<6?>1v98j:186824133<70:83;0gg>;3>80:;:524669521<5==o6<98;|q72c<72o5969>023=:mi01999:054?822m3;<;63;7b8232=z{==;6=4:{<60f??034><;71688l516:8911e28=<7p};5b83>7}:<<:15:5244a96a0>m7>52z?714<>?27?9l4=d79~w13?2909w0::3;;4?822138o:6s|44494?3|5=??6494=571><1<5=?<6?j9;<67b?70127?8i4>789~w1>22909w0:75;0gg>;3;o02;6s|49394?3|5=9o6494=5:2>7bd34>=97?87:?7<7<6?>1685851658yv22=3:1=7`9>0<7=9>k0197::05b?82?:3;41f34><:7?8a:?731<6?h168:<516c891g628=j70:6f;34e>;31m0:;l5248`952g357>52z?7<0<>?27?5<4=d79~w1>4290>w0:4103ty?;k4?:4y>06e=1>168:h52ea8913c28=<70:70;343>;3010:;:5rs5;1>5<2s4>?<778;<6:7?4ck27?:;4>769>0<2=9>=0197::054?xu40h0;6>u23769=4=:;?n1=:64=2:a>7b13ty8454?:2y>732=1j16?;j5165896>>2;n=7p}<8283>7}:;?>1>hh4=24g>7b13ty8:94?:2y>732=:m<01>8::838961120;0q~=74;297~;4><09ik5236495fg<5:98:838yv5?=3:1?v3<6781ac=:;>=1=no4=24e>7b13ty8:;4?:2y>730=:m<01>88:838961?20;0q~=76;297~;4>>09ik5236:95fg<5:=;6?j9;|q022<72:q6?;952e48960?20;01>96:838yv5??3:1?v3<6981ac=:;>31=no4=252>7b13ty8:54?:2y>73>=:m<01>86:838961f20;0q~=8f;297~;4>009ik5236c95fg<5:=96?j9;|q02<<72:q6?;752e48960f20;01>9m:838yv5?83:1?v3<6`81ac=:;>h1=no4=250>7b13ty8:l4?:2y>73g=:m<01>8m:838961d20;0q~=71;297~;4>k09ik5236a95fg<5:=?6?j9;|q02g<72:q6?;l52e48960d20;01>9k:838yv5?:3:1?v3<6b81ac=:;>n1=no4=256>7b13ty8:n4?:3y>73e=:m<01>9j:838yv5193:1mv3;0581`3=:;k21=:94=2a6>410349o>7?87:?0`c<6?>16?hm5165896`>28=<70:?0;343>;39=0:;:523`3952158z?0ef<5l?168=75165896d028=<70=l4;343>;4l80:;:523eg9521<5:oi6<98;<1e;4j>0:;5523b6952><5:n:6<97;<1ga?700278io4>799>7c>=9>201>o9:054?xu4=l0;64u2414952><5:kj6?j9;<1b2?700278n>4>769>7f6=9>=01>mk:054?85ci3;<;631=:94}r16`?6=1r7?<>4=d79>7g3=9>=01>m=:054?85dn3;<;6341034>;97?87:?753<6?11v>;l:18485f138o:6341?349oo7?88:?0a<<6?116?k8516:8yv52j3:15v3410349o<7?87:?0`a<6?>16?ho5165896`028=<70=n5;34<>;38<0:;55rs27b>5<4s4>987l3:1>v3<948:3>;4i809h;5rs2`2>5<5s492:778;<1a2wx?ok50;0x96?020=01>m::3f5?xu4kk0;6?u238:9=2=:;m81>i84}r1gk::18185>i33<70=jc;0g2>{t;o81<7<1<5:l26?j9;|q0bc<72;q6?4m5969>056=:m<0q~:=f;296~;4??09h;523`3952>8<7>52z?032<5l?16?o6516c8yv2493:1>v3<7981`3=:;j?1=:o4}r606?6=:r78;44=d79>7a4=9>k0q~:<3;296~;4?h09h;523ed952g887>52z?03g<5l?16?hm516c8yv24=3:1>v3<7b81`3=:;o31=:o4}r602?6=:r78;i4=d79>056=9>k0q~:=1;297~;39803j63;138;b>;3:;09h;5rs50g>5<5s4>9i74=d79~w1442909w0:>2;;4?825138o:6s|40194?4|5=;:6494=537>7b13ty9mi4?:2y>0gg=9>k01>:l:05:?82d:38o:6s|2c294?4|5=o=6?j9;<6f1?7012wx>o=50;0x91e02;n=70:l6;34=>{t:k?1<77b134>h:7?88:p6g>=839p19kk:3f5?82bn3;<563;eb823==z{;hm6=4={<6be?4c>27?m44>7`9~w7e52909w0:lc;0g2>;3k00:;l5rs3a0>5<5s4>h57?89:?7ga<5l?1v9m>:18:82el3;<;6341f349=?7?87:?016?5m5165891da2;n=70=n8;34=>{t41?349jo7?89:?0ed<6?>168=<51658960428=270=7b;34=>;40j0:;4524ca96a0<5:k36<98;|q1g`<72841?34>;87?89:?761<6?h168?k516:8917228=<70=79;34=>;3910:;l52405952g<5:769>727=9>=01>9=:054?850;3;<;63<758232=:;>?1=:94=2c0>41>349j87?87:p0g?=838p19l>:05;?82fn38o:6s|4c494?c|5=h>6<98;<6a5?4c>27?<<4>769>7=019?7:054?826?3;<;6341?349on7?88:?0a=<6?116?k;516:896g728=370:?8;34<>{t41034>i?7=83op19l::05;?82e<38o:63;00823<=:;0o1=:o4=53;>41?34>:;7?89:?0f1<6?>16?n?5165896eb28=<70=kb;343>;4m10:;:523g79521<5:k;6<98;<634:50;fx91d22;n=70:?3;34=>;4i00:;l523`5952><5:ki6<98;<630?70027?>94>789>07c=9>3019?::05;?85?13;<;6341>3ty?il4?:3y>0`1=:m<019k7:054?xu5110;6iu23879<5=;i6<97;<6f27?>44=eg9>04g=9>=0q~;?a;2955}:=921>i84=4f7>41>34?>i7?87:?61f<6?>169:>51658900b28=<70;9c;343>;2>h0:;:5257:9521<5<<=6<98;<750?70?27>:?4>769>103=:ll0188?:05;?805<3;<463:598232=z{<:i6=4={<73=?70127><:4=d79~w14e2909w0:=6;0g2>;3:10:;45rs50b>5<5s4>9;727?j84>789~w1`12909w0:i3;0g2>;3n<0:;:5rs7::>5<5s4<347?89:?5<3<5l?1v?l8:181832n38o:63:5d823d=z{984=d79~w03e2909w0;:9;34=>;2=10:oo5rs4:f>5<5s4?3h7?88:?627?9n4>789~w7db2909w0::c;34<>;3=l0:oo5rs3a3>5<3s4>3j7?89:?73<<6?h168:o516c893652;n=7p}=c083>1}:>9;1=:74=5:e>41f34>l?:18185f=3;<;63278m<4>789~w6gb2909w0=6e;0g2>;41o0:;:5rs2ce>5<5s492j77b13ty9o54?:5y>25>=9>301;>6:05:?821>3;<56390c81`3=z{;i26=4={<430?70027=<;4=d79~w7ef2908w08?7;0g2>;18=0:;452617952?52z?0f0<5l?16?o<516;8yv5ek3:1>v37g>=9>30q~=m9;296~;4j=09h;523c5952?52z?0f=<6?116?o951b`8yv5d03:1>v34=d79>7g`=9>k0q~=la;296~;4jo09h;523b7952?52z?0g4<5l?16?n:516;8yv5d?3:1>v31=nl4}r1g1?6=:r78ok4=d79>7fe=9>30q~=k6;296~;4l909h;523ba952g52z?0gf<5l?16?i<516;8yv5c;3:1>v3799>7a7=9jh0q~=j2;296~;4lj09h;523e;952?52z?0`a<5l?16?i7516c8yv5b<3:1>v37ac=9>30q~=j1;296~;4lo0:;5523eg95fd52z?0a<<5l?16?h8516;8yv5a83:1>v37`e=9>30q~=jd;296~;4m109h;523d`952?52z?0af<6?116?hl51b`8yv5ak3:1>v37c5=9>30q~=ie;296~;4n:09h;523g;952?52z?0b0<5l?16?k6516;8yv5aj3:1>v3051=9>=0q~:?f;296~;38809h;52415952>:<7>52z?747<5l?168=9516;8yv27i3:1>v3;0781`3=:<9=1=:o4}r63f?6=:r7?<=4>789>051=9jh0q~:?d;296~;3800:;45241:95fd;i7>52z?74<<5l?168=>516:8yv4c:3:1>v391181`3=:<1h1=:74}r0g7?6=;r7==<4=d79>25`=9>30196m:05;?xu3>:0;6?u245d952g<5=?m67}:1>i84=546>41?3ty?:o4?:3y>033=9>301989:3f5?xu3>j0;6?u247796a0<5=>o6<97;|q72d<72;q689j516c8910028ii7p}>f483>7}:;:31>i84=2d7>41>3ty:j;4?:2y>76g=:m<01>=7:05:?85a<3;;4m>0:;l5rs0d:>5<3s4>>;7?87:?7fb83>7}:;:91>i84=2fb>41>3ty:ji4?:2y>762=:m<01>==:05:?85ci3;=>50;1x96562;n=70==f;34=>;4km0:;l5rs322>5<5s499h7=:180855m38o:63<2b823<=:;j:1=:o4}r037?6=:r78>l4=d79>7g5=9>30q~7}:<8<1>i84=53b>41f3ty?=n4?:3y>04?=9>3019?8:3f5?xu39m0;6?u240;9521<5=;36?j9;|q75`<72;q68<752e48917f28=27p}:1883>6}:=831>i84=43;>7ca34?9h7?la:p17d=839p1827>>54=eg9>161=9jk0q~;=7;297~;2:>09h;5253496``<5<9=6{t=;91<7=t=400>7b134?9>7:180835938o:63:2181ac=:=:91=no4}r72b?6=;r7>=k4=d79>14c=:ll018==:0ab?xu29m0;6>u250f96a0<5<;h6?ki;<705?7di2wx9a;0fb>;2;90:ol5rs40e>5<5s4?9j79:181850m3;hm63<8b81`3=z{;:<6=49{<64=?4c>27?584>799>0d7=9>20197i:05;?82>l3;<463;9c823==z{;:36=4:{<64e?4c>27?;54>799>020=9>20199;:05;?820:3;<46s|21;94?4|5=386494=5;6>7b13ty901c=1>1689h52e48yv47j3:1>v3;4b8:3>;35<3s4>3j7728=37p}=0e83>7}:<1i1>i84=57e>41>3ty90=b=:m<01988:05:?xu5990;6?u24939=2=:<181>i84}r025?6=:r7?4>467:?7<1<5l?1v??=:181820?33<70:88;0g2>{t:891<7<1<5===6?j9;|q151<72;q68:=5969>022=:m<0q~<>5;296~;3?802;63;7381`3=z{;;=6=4={<64b??034>3<7=838p19o?:85891g62;n=7p}=1883>7}:<0o15:5248d96a052z?7=f<>?27?5i4=d79~w77e2909w0:6a;;4?82>j38o:6s|20a94?4|5=?<6<9n;<6;a?7dj2wx>a;3`f>{t:8o1<77b134>:87?88:p64`=838p197>:05:?82>83;hn6s|23294?4|5=3?6?j9;<6:1?7012wx>??50;0x91>528=270:76;3`f>{t:;81<741>34>3;7?lb:p675=838p196?:05:?82?03;hn6s|23694?4|5==36<96;<64f?7dj2wx>?;50;0x911128=270:8c;3`f>{t:;<1<741>34>?750;0x91?a28=270:n3;3`f>{t:;k1<741>34>j87?lb:p67d=838p19o::3f5?82>j3;<56s|23a94?4|5:k:6<9n;<1b?j50;0x91072;n=70::f;34<>{t:;o1<77b134>=;7?88:p67`=838p1>o::05b?85f>3;hn6s|22294?4|5=o26?j9;<6f>?50;0x903c2;n=70;:c;34e>{t::81<77b134?<<7?8a:p665=838p188i:3f5?831m3;>;50;0x900e2;n=70;9a;34e>{t::<1<77b134?=47?8a:p661=838p1888:3f5?831>3;6?j9;<750?70i2wx>>750;0x90042;n=70;92;34e>{t::k1<741f34?==7?lb:p66d=838p1>l=:05;?85e;3;hn6s|22a94?4|5:hm6<97;<1`4?7dj2wx>>j50;0x96ed28=370=ld;3`f>{t::o1<741?349om7?lb:p66`=838p1>k9:05;?85b?3;hn6s|25294?4|5:l86<97;<1e0?7dj2wx>9?50;0x906b2;n=70;?d;343>{t:=81<77b134>m<7?87:p615=838p1;68:3f5?80?>3;<;6s|25694?4|5:>o6?j9;<17g?70i2wx>9;50;0x91e428=j70:l4;0g2>{t:=<1<77b134?3m7?88:p61>=838p186l:3f5?83?i3;9o50;0x91b32;n=70:k3;34<>{t:=h1<77b134>jn7?8a:p61e=838p19ok:3f5?82fj3;<;6s|5gg94?3|57`9>0ab=9>k019k?:05b?xu18=0;69u261796a0<5=<;6<9n;<65789~w36?290?w08?9;0g2>;3>10:;452472952?<5=2n6<97;|q10`<72;q6:;k52e48930c28=<7p}=4g83>7}:>?l1>i84=74g>41?3ty99=4?:3y>23d=:m<01;8n:054?xu5=80;6?u267a96a0<5?7}:>?31>i84=744>41?3ty9994?:3y>233=:m<01;8;:054?xu5=<0;6?u267496a0<5?7}:>?91>i84=742>41?3ty9954?:3y>20`=:m<01;;j:054?xu5=00;6?u267296a0<5??n6<97;|q11d<72;q6:8m52e48933e28=<7p}=5c83>7}:>i84=77a>41?3ty99n4?:3y>205=:m<01;;=:054?xu5=m0;6?u264696a0<5??96<97;|q11`<72;q697}:=881>i84=433>41?3ty9:=4?:3y>7d5=:m<01>o=:054?xu5>80;6?u23`696a0<5:k96<97;|q127<72;q698852e48903228=<7p}=6283>7}:=<=1>i84=476>41?3ty9:94?:3y>0`d=:m<019kj:05;?xu5><0;6?u24da96a0<5=on6<98;|q123<72;q68ok52e4891da28=37p}=6683>7}:i84=5``>4103ty9:54?:3y>0g4=:m<019l<:05;?xu5>00;6?u251496a0<5<:<6<97;|q12d<72;q68?;52e48914128=<7p}=6c83>7}:i84=5d0>4103ty9:n4?:3y>24>=:m<01;?n:05;?xu5>m0;6?u260;96a0<5?;j6<98;|q12`<72;q6:<<52e48937328=37p}=6g83>7}:>891>i84=737>4103ty9;=4?:3y>76e=:m<01>=j:05;?xu5?80;6?u232f96a0<5:9n6<98;|q137<72;q6:<;52e48937028=37p}=7283>7}:>8<1>i84=734>4103ty9;94?:3y>25e=:m<01;>j:05;?xu5?<0;6?u261f96a0<5?:n6<98;|q133<72;q6??852e48964?28=37p}=7683>7}:;;=1>i84=20;>4103ty9;54?:3y>222=:m<01;9::054?xu5?00;6?u266396a0<5?=96<98;|q13d<72;q6:8752e48933f28=<7p}=7c83>7}:><<1>i84=774>4103ty9;n4?:3y>0c>=:m<019hn:05;?xu5?m0;6?u24g;96a0<5=lj6<98;|q13`<72;q68?652e48914>28=37p}=7g83>7}:>981=nl4=722>41?3ty94=4?:3y>255=9jh01996:05:?xu5080;6?u261c95fd<5?:26<97;|q1<7<72;q6:=l51b`8910328=27p}=8283>7}:>9<1=nl4=726>41?3ty9494?:3y>246=9jh01;>i:05;?xu50<0;6?u232;95fd<5:936<97;|q1<3<72;q6?>851b`8965228=37p}=8683>7}:;:91=nl4=211>41?3ty9454?:3y>766=9jh01>28=37p}=8c83>7}:<1h1=nl4=5:b>41f3ty94n4?:3y>0c6=9jh01;67:05b?xu50m0;6?u269495fd<5?2>6<97;|q1<`<72;q6:?851b`890>c28=j7p}=8g83>7}:41?3ty95=4?:3y>272=9jh018;i:05:?xu5180;6?u263195fd<5k64}ofe1?6=9rB9j55rned5>5<6sA8m46sadg594?7|@;l37p`kf983>4}O:o20qcji9;295~N5n11vbihn:182M4a02wehkl50;3xL7`?3tdojn4?:0yK6c>51zJ1b==zfmln6=4>{I0e<>{ilol1<7?tH3d;?xhb890;6k64}og31?6=9rB9j55rnd25>5<6sA8m46sae1594?7|@;l37p`j0983>4}O:o20qck?9;295~N5n11vbh>n:182M4a02wei=l50;3xL7`?3tdn51zJ1b==zfl:n6=4>{I0e<>{im9l1<7?tH3d;?xhb990;6k64}og21?6=9rB9j55rnd35>5<6sA8m46sae0594?7|@;l37p`j1983>4}O:o20qck>9;295~N5n11vbh?n:182M4a02wei51zJ1b==zfl;n6=4>{I0e<>{im8l1<7?tH3d;?xhb:90;6k64}og11?6=9rB9j55rnd05>5<6sA8m46sae3594?7|@;l37p`j2983>4}O:o20qck=9;295~N5n11vbhn4?:0yK6c>51zJ1b==zfl8n6=4>{I0e<>{im;l1<7?tH3d;?xhb;90;6k64}og01?6=9rB9j55rnd15>5<6sA8m46sae2594?7|@;l37p`j3983>4}O:o20qck<9;295~N5n11vbh=n:182M4a02wei>l50;3xL7`?3tdn?n4?:0yK6c>51zJ1b==zfl9n6=4>{I0e<>{im:l1<7?tH3d;?xhb<90;6k64}og71?6=9rB9j55rnd65>5<6sA8m46sae5594?7|@;l37p`j4983>4}O:o20qck;9;295~N5n11vbh:n:182M4a02wei9l50;3xL7`?3tdn8n4?:0yK6c>51zJ1b==zfl>n6=4>{I0e<>{im=l1<7?tH3d;?xhb=90;6k64}og61?6=9rB9j55rnd75>5<6sA8m46sae4594?7|@;l37p`j5983>4}O:o20qck:9;295~N5n11vbh;n:182M4a02wei8l50;3xL7`?3tdn9n4?:0yK6c>h7>51zJ1b==zfl?n6=4>{I0e<>{im90;6k64}og51?6=9rB9j55rnd45>5<6sA8m46sae7594?7|@;l37p`j6983>4}O:o20qck99;295~N5n11vbh8n:182M4a02wei;l50;3xL7`?3tdn:n4?:0yK6c>51zJ1b==zfl{I0e<>{im?l1<7?tH3d;?xhb?90;6k64}og41?6=9rB9j55rnd55>5<6sA8m46sae6594?7|@;l37p`j7983>4}O:o20qck89;295~N5n11vbh9n:182M4a02wei:l50;3xL7`?3tdn;n4?:0yK6c>51zJ1b==zfl=n6=4>{I0e<>{im>l1<7?tH3d;?xhb090;65290:wEk64}og;1?6=9rB9j55rnd:5>5<6sA8m46sae9594?7|@;l37p`j8983>4}O:o20qck79;295~N5n11vbh6n:182M4a02wei5l50;3xL7`?3tdn4n4?:0yK6c>51zJ1b==zfl2n6=4>{I0e<>{im1l1<7?tH3d;?xhb190;693:1=vF=f99~j`?5290:wEk64}og:1?6=9rB9j55rnd;5>5<6sA8m46sae8594?7|@;l37p`j9983>4}O:o20qck69;295~N5n11vbh7n:182M4a02wei4l50;3xL7`?3tdn5n4?:0yK6c>51zJ1b==zfl3n6=4>{I0e<>{im0l1<7?tH3d;?xhbi90;6k64}ogb1?6=9rB9j55rndc5>5<6sA8m46sae`594?7|@;l37p`ja983>4}O:o20qckn9;295~N5n11vbhon:182M4a02weill50;3xL7`?3tdnmn4?:0yK6c>51zJ1b==zflkn6=4>{I0e<>{imhl1<7?tH3d;?xhbj90;6k64}oga1?6=9rB9j55rnd`5>5<6sA8m46saec594?7|@;l37p`jb983>4}O:o20qckm9;295~N5n11vbhln:182M4a02weiol50;3xL7`?3tdnnn4?:0yK6c>51zJ1b==zflhn6=4>{I0e<>{imkl1<7?tH3d;?xhbk90;6k64}og`1?6=9rB9j55rnda5>5<6sA8m46saeb594?7|@;l37p`jc983>4}O:o20qckl9;295~N5n11vbhmn:182M4a02weinl50;3xL7`?3tdnon4?:0yK6c>51zJ1b==zflin6=4>{I0e<>{imjl1<7?tH3d;?xhbl90;6k64}ogg1?6=9rB9j55rndf5>5<6sA8m46saee594?7|@;l37p`jd983>4}O:o20qckk9;295~N5n11vbhjn:182M4a02weiil50;3xL7`?3tdnhn4?:0yK6c>51zJ1b==zflnn6=4>{I0e<>{imml1<7?tH3d;?xhbm90;6k64}ogf1?6=9rB9j55rndg5>5<6sA8m46saed594?7|@;l37p`je983>4}O:o20qckj9;295~N5n11vbhkn:182M4a02weihl50;3xL7`?3tdnin4?:0yK6c>51zJ1b==zflon6=4>{I0e<>{imll1<7?tH3d;?xhbn90;6k64}oge1?6=9rB9j55rndd5>5<6sA8m46saeg594?7|@;l37p`jf983>4}O:o20qcki9;295~N5n11vbhhn:182M4a02weikl50;3xL7`?3tdnjn4?:0yK6c>51zJ1b==zflln6=4>{I0e<>{imol1<7?tH3d;?xha890;6k64}od31?6=9rB9j55rng25>5<6sA8m46saf1594?7|@;l37p`i0983>4}O:o20qch?9;295~N5n11vbk>n:182M4a02wej=l50;3xL7`?3tdm51zJ1b==zfo:n6=4>{I0e<>{in9l1<7?tH3d;?xha990;6k64}od21?6=9rB9j55rng35>5<6sA8m46saf0594?7|@;l37p`i1983>4}O:o20qch>9;295~N5n11vbk?n:182M4a02wej51zJ1b==zfo;n6=4>{I0e<>{in8l1<7?tH3d;?xha:90;6k64}od11?6=9rB9j55rng05>5<6sA8m46saf3594?7|@;l37p`i2983>4}O:o20qch=9;295~N5n11vbkn4?:0yK6c>51zJ1b==zfo8n6=4>{I0e<>{in;l1<7?tH3d;?xha;90;6k64}od01?6=9rB9j55rng15>5<6sA8m46saf2594?7|@;l37p`i3983>4}O:o20qch<9;295~N5n11vbk=n:182M4a02wej>l50;3xL7`?3tdm?n4?:0yK6c>51zJ1b==zfo9n6=4>{I0e<>{in:l1<7?tH3d;?xha<90;6k64}od71?6=9rB9j55rng65>5<6sA8m46saf5594?7|@;l37p`i4983>4}O:o20qch;9;295~N5n11vbk:n:182M4a02wej9l50;3xL7`?3tdm8n4?:0yK6c>51zJ1b==zfo>n6=4>{I0e<>{in=l1<7?tH3d;?xha=90;6k64}od61?6=9rB9j55rng75>5<6sA8m46saf4594?7|@;l37p`i5983>4}O:o20qch:9;295~N5n11vbk;n:182M4a02wej8l50;3xL7`?3tdm9n4?:0yK6c>h7>51zJ1b==zfo?n6=4>{I0e<>{in90;6k64}od51?6=9rB9j55rng45>5<6sA8m46saf7594?7|@;l37p`i6983>4}O:o20qch99;295~N5n11vbk8n:182M4a02wej;l50;3xL7`?3tdm:n4?:0yK6c>51zJ1b==zfo{I0e<>{in?l1<7?tH3d;?xha?90;6k64}od41?6=9rB9j55rng55>5<6sA8m46saf6594?7|@;l37p`i7983>4}O:o20qch89;295~N5n11vbk9n:182M4a02wej:l50;3xL7`?3tdm;n4?:0yK6c>51zJ1b==zfo=n6=4>{I0e<>{in>l1<7?tH3d;?xha090;65290:wEk64}od;1?6=9rB9j55rng:5>5<6sA8m46saf9594?7|@;l37p`i8983>4}O:o20qch79;295~N5n11vbk6n:182M4a02wej5l50;3xL7`?3tdm4n4?:0yK6c>51zJ1b==zfo2n6=4>{I0e<>{in1l1<7?tH3d;?xha190;693:1=vF=f99~jc?5290:wEk64}od:1?6=9rB9j55rng;5>5<6sA8m46saf8594?7|@;l37p`i9983>4}O:o20qch69;295~N5n11vbk7n:182M4a02wej4l50;3xL7`?3tdm5n4?:0yK6c>51zJ1b==zfo3n6=4>{I0e<>{in0l1<7?tH3d;?xhai90;6k64}odb1?6=9rB9j55rngc5>5<6sA8m46saf`594?7|@;l37p`ia983>4}O:o20qchn9;295~N5n11vbkon:182M4a02wejll50;3xL7`?3tdmmn4?:0yK6c>51zJ1b==zfokn6=4>{I0e<>{inhl1<7?tH3d;?xhaj90;6k64}oda1?6=9rB9j55rng`5>5<6sA8m46safc594?7|@;l37p`ib983>4}O:o20qchm9;295~N5n11vbkln:182M4a02wejol50;3xL7`?3tdmnn4?:0yK6c>51zJ1b==zfohn6=4>{I0e<>{inkl1<7?tH3d;?xhak90;6k64}od`1?6=9rB9j55rnga5>5<6sA8m46safb594?7|@;l37p`ic983>4}O:o20qchl9;295~N5n11vbkmn:182M4a02wejnl50;3xL7`?3tdmon4?:0yK6c>51zJ1b==zfoin6=4>{I0e<>{injl1<7?tH3d;?xhal90;6k64}odg1?6=9rB9j55rngf5>5<6sA8m46safe594?7|@;l37p`id983>4}O:o20qchk9;295~N5n11vbkjn:182M4a02wejil50;3xL7`?3tdmhn4?:0yK6c>51zJ1b==zfonn6=4>{I0e<>{inml1<7?tH3d;?xham90;6k64}odf1?6=9rB9j55rngg5>5<6sA8m46safd594?7|@;l37p`ie983>4}O:o20qchj9;295~N5n11vbkkn:182M4a02wejhl50;3xL7`?3tdmin4?:0yK6c>51zJ1b==zfoon6=4>{I0e<>{inll1<7?tH3d;?xhan90;6k64}ode1?6=9rB9j55rngd5>5<6sA8m46safg594?7|@;l37p`if983>4}O:o20qchi9;295~N5n11vbkhn:182M4a02wejkl50;3xL7`?3tdmjn4?:0yK6c>51zJ1b==zfoln6=4>{I0e<>{inol1<7?tH3d;?xh689:1<7?tH3d;?xh689;1<7?tH3d;?xh68981<7?tH3d;?xh68991<7?tH3d;?xh689>1<7?tH3d;?xh689?1<7?tH3d;?xh689<1<7?tH3d;?xh689=1<7?tH3d;?xh68921<7?tH3d;?xh68931<7?tH3d;?xh689k1<7?tH3d;?xh689h1<7?tH3d;?xh689i1<7?tH3d;?xh689n1<7?tH3d;?xh689o1<7?tH3d;?xh689l1<7?tH3d;?xh688:1<7?tH3d;?xh688;1<7?tH3d;?xh68881<7?tH3d;?xh68891<7?tH3d;?xh688>1<7?tH3d;?xh688?1<7?tH3d;?xh688<1<7?tH3d;?xh688=1<7?tH3d;?xh68821<7?tH3d;?xh68831<7?tH3d;?xh688k1<7?tH3d;?xh688h1<7?tH3d;?xh688i1<7?tH3d;?xh688n1<7?tH3d;?xh688o1<7?tH3d;?xh688l1<7?tH3d;?xh68;:1<7?tH3d;?xh68;;1<7?tH3d;?xh68;81<7?tH3d;?xh68;91<7?tH3d;?xh68;>1<7?tH3d;?xh68;?1<7?tH3d;?xh68;<1<7?tH3d;?xh68;=1<7?tH3d;?xh68;21<7?tH3d;?xh68;31<7?tH3d;?xh68;k1<7?tH3d;?xh68;h1<7?tH3d;?xh68;i1<7?tH3d;?xh68;n1<7?tH3d;?xh68;o1<7?tH3d;?xh68;l1<7?tH3d;?xh68::1<7?tH3d;?xh68:;1<7?tH3d;?xh68:81<7?tH3d;?xh68:91<7?tH3d;?xh68:>1<7?tH3d;?xh68:?1<7?tH3d;?xh68:<1<7?tH3d;?xh68:=1<7?tH3d;?xh68:21<7?tH3d;?xh68:31<7?tH3d;?xh68:k1<7?tH3d;?xh68:h1<7?tH3d;?xh68:i1<7?tH3d;?xh68:n1<7?tH3d;?xh68:o1<7?tH3d;?xh68:l1<7?tH3d;?xh68=:1<7?tH3d;?xh68=;1<7?tH3d;?xh68=81<7?tH3d;?xh68=91<7?tH3d;?xh68=>1<7?tH3d;?xh68=?1<7?tH3d;?xh68=<1<7?tH3d;?xh68==1<7?tH3d;?xh68=21<7?tH3d;?xh68=31<7?tH3d;?xh68=k1<7?tH3d;?xh68=h1<7?tH3d;?xh68=i1<7?tH3d;?xh68=n1<7?tH3d;?xh68=o1<7?tH3d;?xh68=l1<7?tH3d;?xh68<:1<7?tH3d;?xh68<;1<7?tH3d;?xh68<81<7?tH3d;?xh68<91<7?tH3d;?xh68<>1<7?tH3d;?xh681<7?tH3d;?xh68??1<7?tH3d;?xh68?<1<7?tH3d;?xh68?=1<7?tH3d;?xh68?21<7?tH3d;?xh68?31<7?tH3d;?xh68?k1<7?tH3d;?xh68?h1<7?tH3d;?xh68?i1<7?tH3d;?xh68?n1<7?tH3d;?xh68?o1<7?tH3d;?xh68?l1<7?tH3d;?xh68>:1<7?tH3d;?xh68>;1<7?tH3d;?xh68>81<7?tH3d;?xh68>91<7?tH3d;?xh68>>1<7?tH3d;?xh68>?1<7?tH3d;?xh68><1<7?tH3d;?xh68>=1<7?tH3d;?xh68>21<7?tH3d;?xh68>31<7?tH3d;?xh68>k1<7?tH3d;?xh68>h1<7?tH3d;?xh68>i1<7?tH3d;?xh68>n1<7?tH3d;?xh68>o1<7?tH3d;?xh68>l1<7?tH3d;?xh681:1<7?tH3d;?xh681;1<7?tH3d;?xh68181<7?tH3d;?xh68191<7?tH3d;?xh681>1<7?tH3d;?xh681?1<7?tH3d;?xh681<1<7?tH3d;?xh681=1<7?tH3d;?xh68121<7?tH3d;?xh68131<7?tH3d;?xh681k1<7?tH3d;?xh681h1<7?tH3d;?xh681i1<7?tH3d;?xh681n1<7?tH3d;?xh681o1<7?tH3d;?xh681l1<7?tH3d;?xh680:1<7?tH3d;?xh680;1<7?tH3d;?xh68081<7?tH3d;?xh68091<7?tH3d;?xh680>1<7?tH3d;?xh680?1<7?tH3d;?xh680<1<7?tH3d;?xh680=1<7?tH3d;?xh68021<7?tH3d;?xh68031<7?tH3d;?xh680k1<7?tH3d;?x{zuIJHw<=;3;c`1c0f?kwKLOu?}ABSxFG \ No newline at end of file diff --git a/projects/messe_demo/netlists/ecb_128_encryption_core.ngc b/projects/messe_demo/netlists/ecb_128_encryption_core.ngc new file mode 100644 index 0000000..a9cf93f --- /dev/null +++ b/projects/messe_demo/netlists/ecb_128_encryption_core.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.4e +$9521=789:27=>?0123452739:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?012345678;1;>95?2547?54AN;1;49>409CF3D02MHL?9;8LA86F@0>C>M9;KHH>M=5B07432>8H9J??K?1:320>722@D[YY4NDEPB842=87;?7<;5IORVP?GCL[H7=94?>52853DE==H;BL0<2=<77F9G20>7BL;;0>9>424F2?K:>H>74DA0BD258K3>8NKJ3E00G7G1;;3?;O;;4:05412<:HKJ86==3231?64=AGZ^X7JFA=12>586:2996D@_UU8GMG:493:5=55<2;KMTPR=clsTeRejy=12>586j2996D@_UU8nkacXaVzgmd`33083:45<;;0DYY^ZT;FLE956294:?6==:NWWTPR=LFH7?<4?>0f87759037061291EC^ZT;if}ZoXclsTei2=:1<2e>5=AGZ^X7c`dd]j[nc~W`n7>7>14:1BGD7<<=1?<=>>1:69MKVR\3NB\L2<:1<25>2=AGZ^X7JFPC>0>58682>1EC^ZT;UFE95=87;;794FNQWW>RCE4:0;2<<44;MVPUSS2ME[M1=50?31?10>5853=I?78:IE596=3G63?>0:=O?4:4:=3273?H3M<=?111A@D@D998;J>HLA9D2A7EC89>8=1=ONM;0:4F@C129JO3?:H6E3:670GCM>89;9OL9750A3D3N9INOKH=96GB@F00:=<7>3@63?23E:;=NNH<700033L20762673>0O:>;J976@B3@63:K;<:<7652:07FDEMKI3N=H:2@CF0A5EM9K;869K2938<7=?8=13<=>;0::7=A>CI>?<8;?:5DFBF?B9MI:4;L65616246BN?:88589B41F35>F0KHO8O?I75FGA=E1J=K==N89B@ATF48;556OKDSC?578>3HNO^L2>3?`8EABUI5;?6=06;@FGVD:6<720MIJ]A=3=<>GCL[K7>364AEFQE95902KOH_O34?:8EABUI5?546OKDSC?2;>GCL[H7<374AEFQF977601JHI\M<03==>GCL[H7=?06;@FGVG:6;7h0MIJ]B=37>58>3HNO^O2>4?:8EABUJ5;546OKDS@?6;>GCL[H7:364AEFQF91902KOH_L38?:8EABUJ535>6L74:@B55>E7?;K?5NOIA3F7EA@7<>?2JL9KC8:1GD11IKNO?89=7E26;3C@5N0H3>>7J36AEFA1A;1;2IL=;0CD0::O9;O?9401?FC382IM95:L4@1:F@EE>H?INKK<28@0@35E=;K;9L8J1C3B6F>48090OAE;;BNHE1=DDBH27NABMHVWAA1;E68@77B<91O>K=IF0215AGE>KIM9>66D80;B16F;<;J44H=;D51EFDGBNM:?<6JM0C7F@@73J1ON8;67910B67BD1OEL2>7?58@LG;914<7IGN<0;=2>BNI5;5;6JFA=03:2=CAH69=394DHC?67803MCJ0?=17:FJE9436>1OEL2=5?58@LG;:?4<7IGN<35=3>BNI5832:5KI@>1=;0394DHC?758>3MCJ0>?50?58@LG;;84=7IGN<2<5?AOF4=4=7IGN<4<5?AOF4?4=7IGN<6<5?AOF414=7IGN<8<5?AOE494<7IGM<02=3>BNJ5;:2:5KIC>26;108;EKA8429?2NBN1?:>69GMG:6>7=0HDL316<4?AOE4825;6JFB=3::3=CAK6:2:5KIC>14;1<08;EKA8749?2NBN1<<>69GMG:5<7=0HDL324<4?AOE4;<5;6JFB=04:2=CAK694394DH@?6<813MCI0?08;EKA866912NBN1=>:1<4?AOE4:;5:6JFB=1=2>BNJ5>5:6JFB=7=2>BNJ5<5:6JFB=5=2>BNJ525:6JFB=;=3>BNXH6;2:5KIQC?5;12:2=CAYH7>374DHRA86<76>1OE]L33?48@JG;87=0HBO311<4?AIF48;5;6J@A=31:2=CGH6:?394DNC?51803MEJ0<;17:FLE9716>1OCL2>7?58@JG;914<7IAN<0;=2>BHI5;5;6J@A=03:2=CGH69=394DNC?67803MEJ0?=17:FLE9436>1OCL2=5?58@JG;:?4<7IAN<35=3>BHI5832:5KO@>1=;0394DNC?758>3MEJ0>?50?58@JG;;84=7IAN<2<5?AIF4=4=7IAN<4<5?AIF4?4=7IAN<6<5?AIF414=7IAN<8<4?AIFW[OL:6J@B=2=3>BHJ5;;2:5KOC>25;169GKG:6=7=0HBL317<4?AIE48=5;6J@B=3;:2=CGK6:5384DN@?5;1=08;EMA8779?2NDN1<=>69GKG:5;7=0HBL325<4?AIE4;?5;6J@B=05:2=CGK69;394DN@?6=803MEI0?716:FLF949?2NDN1=?>89GKG:493:5;6J@B=12:3=CGK682;5KOC>7:3=CGK6>2;5KOC>5:3=CGK6<2;5KOC>;:3=CGK622:5KOC]QAB189GKUG;;3:5;6J@P@>0:2=CGYH7<394DNRA84803ME[N1<19:FLTG:4294<7IA_B=1=5>C53L>?7H:K839FB16JN8?6A85E1407=OOH4=<8583357D6;8I<<:6732C;@A7A<2OMJK=4EOC0?@HEj2OESHML_SGB@f=BFVOHORY]IUG1?C733O89>95I44674>@3=HIO;5HJC1FA=D47?0N9O;:M3D75BF7EJL;3ML>J63@42C>>K<82=I9>1@D20225IDR68BAUB<2LM<<:4FG210>@A?O>0JKKI1:E0?BHC92C?7D =739J47=N9;1B>?5F399JJLRWW9:37D@FTQ]35==NF@^[S=<7;HLJPUY7;11BBDZ__16;?LHN\YU;955FNHVS[50?3@DBX]Q?789JJLRT\H^N;6GAIU]342=NF@^T<<94IOKW[5403@DBXR><7:KMMQY7<>1BBDZP0458MKOSW9<<7D@FT^243>OIA]U;4:5FNHV\4<11BBDZP1458MKOSW8<<7D@FT^343>OIA]U:4:5FNHV\5<1C69JJLRX9M=0ECG[_0G4?LHN\V;M;6GAIU]142=NF@^T><94IOKW[7403@DBXR<<7:KMMQY5<>1BBDZP2458MKOSW;<<7D@FT^043>OIA]U94:5FNHV\6<11BBDZP3458MKOSW:<<7D@FT^143>OIA]U84:5FNHV\7<1O8;HLJPZ5E?2CEEYQOIA]UI?6GAV008MKPBZ]UH@FQKO@]QAB753@D]I_ZPCMI\@JDXZLM97AA8;MMDMFGK<2F^X<:4LTV12>JR\;UO:6BZT3]O0>JR\:<0@XZ<_M68HPR3>2F^X9QK6:NVP1YK=2G^TK;=;O21?K743G;;?6@>259M63333G8=:95A2757?K410=1E>;7;;O0441=I:>;?7C<8259M62533G8<895A2677?K40>=1E>:9;;O04<1=I:>3?7C<7059M6=733G83>95A2917?K4?<=1E>5;;;O0;21=I:1=?7C<7859M6=?33G82<95A2837?K4>:=1E>4=;;O0:01=I:0??7C<6659M6<133G82495A3057?K561=1E???;;O1171=I;;??7C==759M77?33G98=95A3217?K54==1E?>9;;O10=1=I;=;?7C=;359M71333G9?;95A35:7?K528=1E?8?;;O1671=I;<>?7C:<759M06>33G>8595A4527?K239=1E89<;;O6771=I<=>?7C:;559M01033G>?;95A45:7?K231=1E88>;;O6661=I<<>?7C::659M00>33G>=<95A4707?K21<=1E8;8;;O65<1=I<>:?7C:8259M02233G><:95A46:7?K2?8=1E85<;;O6;01=I<12>95A4867?K2>>=1E846;;O6:=7=I==1E9=><;O563>HB\^EYG95AOOG2?J7TBIMU\EIZG_@a8V@GCW^COXEQM6:PFCFCF>2XNKNKM1:Q;?VGQMMK_M<=4SHO\GJJKAZCDBRMGEBI5?VIRZJO>7^\C1758WWPFDVK<7^\YAM]A0>UTZH>0_^\M4:VZT@e<]ZOYS[G\ICNF7>PDK01]EHYPTXRF2>QBI5:5:6YJA=3=2>QBI58546YJA=194;0<_LK7?384WD@?4;0<_LH7=384WD@?6;><_LH7?7>16:UFF959k2]YEYKPMNFF[De<_[C_IRC@DD]A`>QUA]OT[DJ[H^Cg?RTN\LU\EIZG_C3g?]OKAGR&TIL/0/3#WQSE(9$:,L]LIH48\VRKAK=0T^ZPGOF4?]USW_IH:6Vkb^Kg55=_ldUFmga}Vdppmjh682RoaRCfnnpUawungg90T~z<;bnh52=bkkU:>5QjnbpztqohfVid~hm4eoa\aka(Clx3==5jnb]fjb)Lm{2T_Z>>b:gmgZcio&GscQPn121=ZTb{|f=:7^Pfwpjs98h0icmPeoe,I}iuWVd;<::PRdqvhq75<2oeoRkag.O{kwYbfjUdSnghdp\V`urd}6;2<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=33:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|5;:2<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=31:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|5;82<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=37:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|5;>2<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=35:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|5;<2<<:;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=3;:4423ldhSh`h/LzlvZcikVeTod~ges]Qavsk|5;22<<;;dl`[`h`'Drd~Rkac^m\glvom{UYi~{ct=3=5735=?;4eoa\aka(EqeySh`l_n]`munbzVXnxb{<37=57385jnb]fjb)JpfxTicmPo^ajtmcuW[oxyaz331<260=bfjUnbj!Bxnp\akeXgVib|ek}_Sgpqir;;84:>95jnb]fjb)JpfxTicmPo^ajtmcuW[oxyaz33?310>cikVoek"Cwos]fjfYhWjc{dh|PRdqvhq:3688?7h`l_dld+H~hzVoeoRaPchrkawYUmzgx1;11368akeXmgm$Aua}_dl`[jYdaybn~R\jstnw8386:=1nbnQjnf-N|jtXmgiTcRmfpigq[Wct}e~7;3?=4:gmgZcio&GscQjnb]l[fow`lxT^h}zlu>;:4433ldhSh`h/LzlvZcikVeTod~ges]Qavsk|535=n5jnb]fjb)I98>h7h`l_dld+K76?j1nbnQjnf-M54?d3ldhSh`h/O31:l;dl`[`h`'G;8:n5jnb]fjb)I9:2h7h`l_dld+K738j1nbnQjnf-M514d3ldhSh`h/O370f=bfjUnbj!A154`?`hdWldl#C?;8b9fjfYbfn%E=8>l;dl`[`h`'G;>>n5jnb]fjb)I9<>h7h`l_dld+K72>j1nbnQjnf-M50>d3ldhSh`h/O354f=bfjUnbj!A170`?`hdWldl#C?94b9fjfYbfn%E=;8l;dl`[`h`'G;=4n5jnb]fjb)I9>:h7h`l_dld+K70:j1nbnQjnf-M522f3ldhSh`h/O;f?`hdWldl#R`?03;f?`hdWldl#R`?02:f?`hdWldl#R`?045f?`hdWldl#R`?06626>cikVoek"Qa004285869;1nbnQjnf-\j57195;5=<<4eoa\aka(Wg:::<2=>0d8akeXmgm$Sc>=323e?`hdWldl#R`?2262b>cikVoek"Qa03165c=bfjUnbj!Pn10024`6n2oeoRkag.]m475>9o1nbnQjnf-\j54388l0icmPeoe,[k65<8;m7h`l_dld+Zh7:=8:j6kac^gmc*Yi8;>8=k5jnb]fjb)Xf98?898>f:gmgZcio&Ue=483e?`hdWldl#R`?2422b>cikVoek"Qa03725c=bfjUnbj!Pn10664`8l0icmPeoe,[k65><;m7h`l_dld+Zh7:?<:j6kac^gmc*Yi8;<<=k5jnb]fjb)Xf98=4:>>f:gmgZcio&Ue1g9fjfYbfn%Tb=<820d8akeXmgm$Sc>=723e?`hdWldl#R`?2662b>cikVoek"Qa03565c=bfjUnbj!Pn10424`6n2oeoRkag.]m471>9o1nbnQjnf-\j54?88l0icmPeoe,[k6508;m7h`l_dld+Zh7:18:j6kac^gmc*Yi8;28=k5jnb]fjb)Xf983858>f:gmgZcio&Ue<3431?`hdWldl#R`?32725476<2oeoRkag.]m465298;:SK?;;dl`[`h`'Vd;?>;>103\C46?8:=>5jnb]fjb)Xf998:;<>_G30?`hdWldl#R`?324564Y@9<1nbnQjnf-\j554>Vgj|996e:gmgZcio&Ue<>=8139fjfYbfn%Tb==<70325421^Ef?`hdWldl#R`?32:24>cikVoek"Qa021;[C773ldhSh`h/^l376>XOl1nbnQjnf-\j5541880icmPeoe,[k64;0;:=7>103\B429==5jnb]fjb)Xf99?>RH>0:gmgZcio&Ue<>:=_Fg8akeXmgm$Sc>;11d8akeXmgm$Sc>;11325>cikVoek"Qa0531070692oeoRkag.]m4175<<9::6kac^gmc*Yi8=;98Rcnp42353=bfjUnbj!Pn16261Yjiy?:=h5jnb]fjb)Xf9>98k5jnb]fjb)Xf9>988h4eoa\aka(Wg:?>8?j;dl`[`h`'Vd;8?8i;dl`[`h`'Vd;8?8>109fjfYbfn%Tb=:64=2=54=bfjUnbj!Pn16:0979981nbnQjnf-\j52><585=<5jnb]fjb)Xf9>281=1109fjfYbfn%Tb=:64=6=54=bfjUnbj!Pn16:0939981nbnQjnf-\j52><5<5=<5jnb]fjb)Xf9>28191109fjfYbfn%Tb=:66=2=54=bfjUnbj!Pn16:2979981nbnQjnf-\j52>>595=<5jnb]fjb)Xf9>2:1:1109fjfYbfn%Tb=:66=7=54=bfjUnbj!Pn16:2909981nbnQjnf-\j52>>5=5=<5jnb]fjb)Xf9>241>1109fjfYbfn%Tb=:68=3=54=bfjUnbj!Pn16:<959981nbnQjnf-\j52>05>5=<5jnb]fjb)Xf9>241;1109fjfYbfn%Tb=:68=4=54=bfjUnbj!Pn16:<919981nbnQjnf-\j53785:5=<5jnb]fjb)Xf9?;<1?1109fjfYbfn%Tb=;?0=1=54=bfjUnbj!Pn1734929981nbnQjnf-\j53785?5=<5jnb]fjb)Xf9?;<181109fjfYbfn%Tb=;?0=5=56=bfjUnbj!jnb]l[gstq8887h`l_dld+`hdzpzeb`Peoejj`Y79Vrd0?0>229fjfYbfn%nbn|vpukljZcio`dnS=1:4443ldhSh`h/dl`v|vsafdTicifnd]37Z~h4;4:>?5jnb]fjb)bfjxr|yg`n^gmclhbW9Usc1<11318akeXmgm$icm}yqvjkkYbfnceiR?>_ym?6;75?2oeoRkag.gmgww|`eeSh`hiog\54Yg585=R]X0318akeXmgm$icm}yqvjkkYbfnceiR?=_ym?6;75?2oeoRkag.gmgww|`eeSh`hiog\57Yg585=R]X0318akeXmgm$icm}yqvjkkYbfnceiR?<_ym?6;75?2oeoRkag.gmgww|`eeSh`hiog\56Yg585=R]X0308akeXmgm$icm}yqvjkkYbfnceiR?Pxn>1:4413ldhSh`h/dl`v|vsafdTicifnd]2[}i;:7;T_Z>=7:gmgZcio&oeowthmm[`h`agoT>3?PSV213>cikVoek"kacs{spliiWldleckP22]{k9499VY\>001?`hdWldl#h`lrxrwmjhXmgmbbhQ=_ym?6;75;2oeoRkag.gmgww|`eeSh`hiog\74Yg585=?94eoa\aka(mgiyu}zfoo]fjboimV9:Sua32?3\WR65;2oeoRkag.gmgww|`eeSh`hiog\77Yg585=?94eoa\aka(mgiyu}zfoo]fjboimV99Sua32?3\WR65;2oeoRkag.gmgww|`eeSh`hiog\76Yg585=?94eoa\aka(mgiyu}zfoo]fjboimV98Sua32?3\WR65:2oeoRkag.gmgww|`eeSh`hiog\7Z~h4;4:>;5jnb]fjb)bfjxr|yg`n^gmclhbW:Usc1<11^QT4753?PSV217>cikVoek"kacs{spliiWldleckP50]{k9799;90icmPeoe,akeuqy~bccQjnfkmaZ36Wqe7>3?=3:gmgZcio&oeowthmm[`h`agoT9?Qwo=3=575?5jnb]fjb)bfjxr|yg`n^gmclhbW_ym?5;75;2oeoRkag.gmgww|`eeSh`hiog\24Yg585=?=4eoa\aka(mgiyu}zfoo]fjboimV<9Sua31?317>cikVoek"kacs{spliiWldleckP63]{k9499;90icmPeoe,akeuqy~bccQjnfkmaZ04Wqe7=3?=3:gmgZcio&oeowthmm[`h`agoT:>Qwo=0=5743?=3:gmgZcio&oeowthmm[`h`agoT;cikVoek"kacs{spliiWldleckP7^zl8486:;1nbnQjnf-fjft~x}cdbRkaghlf[2Yg585=?94eoa\aka(mgiyu}zfoo]fjboimVUe<>:<<0<\g|i5?2oeoRkag.gmgww|`eeSh`hiog\[k64<:6:2nw>1008akeXmgm$~Rolt^qak}c1`9fjfYbfn%ySnz}l^dpiZ@Al8'BbcikVoek"|Pcupo[cujWOLo> Ga1c9fjfYbfn%ySnz}l^dpiZ@Al;'Bb>2:gmgZcio&xTghwPie]257=bfjUnbj!}_jgz[lbX:8>0icmPeoe,vZvfz}Uec1>1159fjfYbfn%yS}o}t^ll8486;2oeoRkag.p\tdtsWgeT<<=4eoa\aka(zVzj~yQao^32f>cikVoek"|Pp`pw[kiXWg:;<<2?>0a8akeXmgm$~R~nru]mkZYi89::0=0>1c9fjfYbfn%yS}o}t^ll[Zh789;7=3?l;dl`[`h`'{U{mzPnn]\j56795;5=5jnb]fjb)uW{e~bi}30?30?`hdWldl#Q}otlgw9799:1nbnQjnf-q[wirfmy7>3?<;dl`[`h`'{Uycx`ks=1=57=bfjUnbj!}_smvjauX8880icmPeoe,vZth}gnxScikVoek"|Prnwm`vY49:1nbnQjnf-q[vdXeqUxia?;;dl`[`h`'{Uxddh{_smtw40cikVoek"|Psucwa97787;?7h`l_dld+wYt|h~n0<>>>068akeXmgm$~R}{aug?55499=1nbnQjnf-q[vrf|l6:<>0>4:gmgZcio&xTyo{e=330;733ldhSh`h/s]ppdrb48:>2<:4eoa\aka(zVymyk3114=51=bfjUnbj!}_rvbp`:68>4:86kac^gmc*tX{}ki1??8?37?`hdWldl#Q|t`vf846>6890icmPeoe,vZusi}o7==0>4:gmgZcio&xTyo{e=324;733ldhSh`h/s]ppdrb48;:2<:4eoa\aka(zVymyk3100=51=bfjUnbj!}_rvbp`:69:4:86kac^gmc*tX{}ki1?>4?37?`hdWldl#Q|t`vf847268>0icmPeoe,vZusi}o7=<81159fjfYbfn%yS~zntd>25286<2oeoRkag.p\wqgsm5;:43?;;dl`[`h`'{Uxxlzj<03::450icmPeoe,vZusi}o7=?<1159fjfYbfn%yS~zntd>26686<2oeoRkag.p\wqgsm5;983?;;dl`[`h`'{Uxxlzj<006:4226<27>cikVoek"|Psucwa9756890icmPeoe,vZusi}o7=>0>3:gmgZcio&xTyo{e=37:45018akeXmgm$~R}{aug?5286;2oeoRkag.p\wqgsm5;32<=4eoa\aka(zVymyk318<26>cikVoek"|Psucwa9799:1nbnQjnf-q[vrf|l69<3?<;dl`[`h`'{Uxxlzj<33=56=bfjUnbj!}_rvbp`:5:7;87h`l_dld+wYt|h~n0?=1129fjfYbfn%yS~zntd>10;743ldhSh`h/s]ppdrb4;?5=>5jnb]fjb)uWz~jxh2=6?30?`hdWldl#Q|t`vf87199:1nbnQjnf-q[vrf|l6943?<;dl`[`h`'{Uxxlzj<3;=57=bfjUnbj!}_rvbp`:56890icmPeoe,vZusi}o7?=0>3:gmgZcio&xTyo{e=12:45018akeXmgm$~R}{aug?7186;2oeoRkag.p\wqgsm59>2<=4eoa\aka(zVymyk337<27>cikVoek"|Psucwa9506890icmPeoe,vZusi}o7?50>3:gmgZcio&xTyo{e=1::441129fjfYbfn%yS~zntd>75;743ldhSh`h/s]ppdrb4=85=>5jnb]fjb)uWz~jxh2;3?30?`hdWldl#Q|t`vf81299:1nbnQjnf-q[vrf|l6?93?<;dl`[`h`'{Uxxlzj<54=56=bfjUnbj!}_rvbp`:3?7;87h`l_dld+wYt|h~n0961129fjfYbfn%yS~zntd>7=;753ldhSh`h/s]ppdrb4=4:?6kac^gmc*tX{}ki1;?>018akeXmgm$~R}{aug?1486;2oeoRkag.p\wqgsm5?92<=4eoa\aka(zVymyk352<27>cikVoek"|Psucwa9336890icmPeoe,vZusi}o7980>3:gmgZcio&xTyo{e=75:454:?6kac^gmc*tX{}ki1;7>018akeXmgm$~R}{aug?1<86:2oeoRkag.p\wqgsm5?5=>5jnb]fjb)uWz~jxh290?30?`hdWldl#Q|t`vf83799:1nbnQjnf-q[vrf|l6=>3?<;dl`[`h`'{Uxxlzj<71=56=bfjUnbj!}_rvbp`:1<7;87h`l_dld+wYt|h~n0;;1129fjfYbfn%yS~zntd>52;743ldhSh`h/s]ppdrb4?=5=>5jnb]fjb)uWz~jxh298?30?`hdWldl#Q|t`vf83?99;1nbnQjnf-q[vrf|l6=2<=4eoa\aka(zVymyk371<27>cikVoek"|Psucwa9166890icmPeoe,vZusi}o7;?0>3:gmgZcio&xTyo{e=50:45018akeXmgm$~R}{aug?3386;2oeoRkag.p\wqgsm5=<2<=4eoa\aka(zVymyk379<27>cikVoek"|Psucwa91>6880icmPeoe,vZusi}o7;3?<;dl`[`h`'{Uxxlzj<92=56=bfjUnbj!}_rvbp`:?97;87h`l_dld+wYt|h~n05<1129fjfYbfn%yS~zntd>;7;743ldhSh`h/s]ppdrb41>5=>5jnb]fjb)uWz~jxh275?30?`hdWldl#Q|t`vf8=099:1nbnQjnf-q[vrf|l63;3?<;dl`[`h`'{Uxxlzj<9:=56=bfjUnbj!}_rvbp`:?17;97h`l_dld+wYt|h~n050>3:gmgZcio&xTyo{e=;3:45018akeXmgm$~R}{aug?=686;2oeoRkag.p\wqgsm53?2<=4eoa\aka(zVymyk394<27>cikVoek"|Psucwa9?16890icmPeoe,vZusi}o75:0>3:gmgZcio&xTyo{e=;;:456kac^gmc*tX{}ki171109fjfYbfn%yS~zntd]354=bfjUnbj!}_rvbp`Y69;1nbnQjnf-q[vrf|lU:<<=4eoa\aka(zVymykP11227>cikVoek"|PsucwaZ779890icmPeoe,vZusi}oT==<>3:gmgZcio&xTyo{e^33745:?6kac^gmc*tX{}kiR??5018akeXmgm$~R}{aug\5506;2oeoRkag.p\wqgsmV;;;<=4eoa\aka(zVymykP11:27>cikVoek"|PsucwaZ771880icmPeoe,vZusi}oT=5jnb]fjb)uWz~jxhQ>1430?`hdWldl#Q|t`vf[4719:1nbnQjnf-q[vrf|lU:=:?<;dl`[`h`'{Uxxlzj_03;56=bfjUnbj!}_rvbp`Y690;97h`l_dld+wYt|h~nS<<>3:gmgZcio&xTyo{e^31445cikVoek"|PsucwaZ75>890icmPeoe,vZusi}oT=?9>2:gmgZcio&xTyo{e^3057=bfjUnbj!}_rvbp`Y6<880icmPeoe,vZusi}oT=8?=;dl`[`h`'{Uxxlzj_0426>cikVoek"|PsucwaZ709;1nbnQjnf-q[vrf|lU:4<<4eoa\aka(zVymykP1832?`hdWldl#Q|t`vf[7753ldhSh`h/s]ppdrbW;::>6kac^gmc*tX{}kiR<>139fjfYbfn%yS~zntd]16442:gmgZcio&xTyo{e^0657=bfjUnbj!}_rvbp`Y5>880icmPeoe,vZusi}oT>:?=;dl`[`h`'{Uxxlzj_3:26>cikVoek"|PsucwaZ4>981nbnQjnf-q[vrf|lU8=?5jnb]fjb)uWz~jxhQ<0008akeXmgm$~R}{aug\74753ldhSh`h/s]ppdrbW:8:>6kac^gmc*tX{}kiR=<139fjfYbfn%yS~zntd]00448>2:gmgZcio&xTyo{e^1457=bfjUnbj!}_rvbp`Y40880icmPeoe,vZusi}oT?4?>;dl`[`h`'{Uxxlzj_531?`hdWldl#Q|t`vf[166:2oeoRkag.p\wqgsmV>:=?5jnb]fjb)uWz~jxhQ;2008akeXmgm$~R}{aug\06753ldhSh`h/s]ppdrbW=>:>6kac^gmc*tX{}kiR::139fjfYbfn%yS~zntd]7244;97h`l_dld+wYt|h~nS96>2:gmgZcio&xTyo{e^6:54=bfjUnbj!}_rvbp`Y29;1nbnQjnf-q[vrf|lU><<<4eoa\aka(zVymykP5031?`hdWldl#Q|t`vf[046:2oeoRkag.p\wqgsmV?8=?5jnb]fjb)uWz~jxhQ:4008akeXmgm$~R}{aug\10753ldhSh`h/s]ppdrbW<<:>6kac^gmc*tX{}kiR;8139fjfYbfn%yS~zntd]6<44cikVoek"|PsucwaZ069;1nbnQjnf-q[vrf|lU=><<4eoa\aka(zVymykP6231?`hdWldl#Q|t`vf[326:2oeoRkag.p\wqgsmV<>=?5jnb]fjb)uWz~jxhQ96008akeXmgm$~R}{aug\22753ldhSh`h/s]ppdrbW?2:>6kac^gmc*tX{}kiR86109fjfYbfn%yS~zntd]457=bfjUnbj!}_rvbp`Y08880icmPeoe,vZusi}oT;cikVoek"|PsucwaZ149;1nbnQjnf-q[vrf|lU<8<<4eoa\aka(zVymykP7431?`hdWldl#Q|t`vf[206:2oeoRkag.p\wqgsmV=<=?5jnb]fjb)uWz~jxhQ88008akeXmgm$~R}{aug\3<763ldhSh`h/s]ppdrbW1;97h`l_dld+wYt|h~nS5>>2:gmgZcio&xTyo{e^:257=bfjUnbj!}_rvbp`Y?:880icmPeoe,vZusi}oT4>?=;dl`[`h`'{Uxxlzj_9626>cikVoek"|PsucwaZ>29;1nbnQjnf-q[vrf|lU3:<<4eoa\aka(zVymykP8631?`hdWldl#Q|t`vf[=>6:2oeoRkag.p\wqgsmV22=<5jnb]fjb)uWz~jxhQ6139fjfYbfn%yS~zntd]:4442:gmgZcio&xTyo{e^;057=bfjUnbj!}_rvbp`Y><880icmPeoe,vZusi}oT58?=;dl`[`h`'{Uxxlzj_8426>cikVoek"|PsucwaZ?09;1nbnQjnf-q[vrf|lU24<<4eoa\aka(zVymykP9835?`hdWldl#Q|ucif}Zhh494::6kac^gmc*tX{|h`itQao=3=53=bfjUnbj!}_rwao`Xff692<84eoa\aka(zVy~nfkv_om?7;723ldhSh`h/s]pqgmbqVddS=?:;dl`[`h`'{Uxyoejy^ll[4723ldhSh`h/s]pqgmbqVddS??:;dl`[`h`'{Uxyoejy^ll[6`2oeoRkag.pjjZuoao~T~by|169fjfYbfn%yecQ|hhdw[wip{;;>7h`l_dld+woiWz~jxh2?>035?`hdWldl#ga_rvbp`:6894:;6kac^gmc*tnfVymyk3112=5416:gmgZcio&xbbR}{aug?55799>1nbnQjnf-qmkYt|h~n0<>>>034?`hdWldl#ga_rvbp`:68849=;5jnb]fjb)uagUxxlzj<021:413?>7:gmgZcio&xbbR}{aug?5549:8<0icmPeoe,vlhX{}ki1??3?34?`hdWldl#ga_rvbp`:68:4:=:5jnb]fjb)uagUxxlzj<020:7713ldhSh`h/skm[vrf|l6:<90>7:gmgZcio&xbbR}{aug?552998=0icmPeoe,vlhX{}ki1??4?022>cikVoek"|fn^qweqc;99?5=:5jnb]fjb)uagUxxlzj<026:4703ldhSh`h/skm[vrf|l6:<80=179fjfYbfn%yecQ|t`vf846168=0icmPeoe,vlhX{}ki1??6?323>cikVoek"|fn^qweqc;99<5><84eoa\aka(z`dTyo{e=333;703ldhSh`h/skm[vrf|l6:<:0>169fjfYbfn%yecQ|t`vf84606;;=7h`l_dld+woiWz~jxh2>09<23>cikVoek"|fn^qweqc;9925=<94eoa\aka(z`dTyo{e=33<;46>2oeoRkag.pjjZusi}o7==71169fjfYbfn%yecQ|t`vf846>68;<7h`l_dld+woiWz~jxh2>08<153=bfjUnbj!}io]ppdrb48:5=0?3\WR76>2oeoRkag.pjjZusi}o7=<>1169fjfYbfn%yecQ|t`vf847768;<7h`l_dld+woiWz~jxh2>11<153=bfjUnbj!}io]ppdrb48;:2<94eoa\aka(z`dTyo{e=325;76?2oeoRkag.pjjZusi}o7=13<252=bfjUnbj!}io]ppdrb48;92??9;dl`[`h`'{ceS~zntd>25686?2oeoRkag.pjjZusi}o7=<=11058akeXmgm$~d`Psucwa976;78::6kac^gmc*tnfVymyk3106=52=bfjUnbj!}io]ppdrb48;?2251859?1nbnQjnf-qmkYt|h~n0058akeXmgm$~d`Psucwa976=7;:;6kac^gmc*tnfVymyk3107=640253869>1nbnQjnf-qmkYt|h~n0335?`hdWldl#ga_rvbp`:69>4:;6kac^gmc*tnfVymyk3105=5416:gmgZcio&xbbR}{aug?54>99>1nbnQjnf-qmkYt|h~n0034?`hdWldl#ga_rvbp`:69149=;5jnb]fjb)uagUxxlzj<03::417:gmgZcio&xbbR}{aug?54?9:8<0icmPeoe,vlhX{}ki1?>>035?`hdWldl#ga_rvbp`:6:94:;6kac^gmc*tnfVymyk3132=540264869?1nbnQjnf-qmkYt|h~n0<<=>058akeXmgm$~d`Psucwa975:7;::6kac^gmc*tnfVymyk3131=52=bfjUnbj!}io]ppdrb4888226186?2oeoRkag.pjjZusi}o7=?:11048akeXmgm$~d`Psucwa975=7;<7h`l_dld+woiWz~jxh2>24<253=bfjUnbj!}io]ppdrb488=2<94eoa\aka(z`dTyo{e=312;76>2oeoRkag.pjjZusi}o7=?91169fjfYbfn%yecQ|t`vf844068;=7h`l_dld+woiWz~jxh2>2?322>cikVoek"|fn^qweqc;9:4:=;5jnb]fjb)uagUxxlzj<06=540222;76>2oeoRkag.pjjZusi}o7=:0>179fjfYbfn%yecQ|t`vf84>998k0icmPeoe,vlhX{}ki1?7>0]PS57f3ldhSh`h/skm[vrf|l6:43?PSV322>cikVoek"|fn^qweqc;904:=85jnb]fjb)uagUxxlzj<0<253=bfjUnbj!}io]ppdrb4;:5=<84eoa\aka(z`dTyo{e=02:4713ldhSh`h/skm[vrf|l69>3?>6:gmgZcio&xbbR}{aug?66869?1nbnQjnf-qmkYt|h~n0?:11048akeXmgm$~d`Psucwa94268;=7h`l_dld+woiWz~jxh2=6?32e>cikVoek"|fn^qweqc;:?4:S^Y?1`9fjfYbfn%yecQ|t`vf87099VY\=<84eoa\aka(z`dTyo{e=04:4713ldhSh`h/skm[vrf|l6943?>6:gmgZcio&xbbR}{aug?6<869<1nbnQjnf-qmkYt|h~n0?0>179fjfYbfn%yecQ|t`vf866998<0icmPeoe,vlhX{}ki1=>>036?`hdWldl#ga_rvbp`:4:7;>7h`l_dld+woiWz~jxh2<3?36?`hdWldl#ga_rvbp`:4<7;>7h`l_dld+woiWz~jxh2<5?36?`hdWldl#ga_rvbp`:4>7;>7h`l_dld+woiWz~jxh2<7?36?`hdWldl#ga_rvbp`:407;>7h`l_dld+woiWz~jxh2<9?36?`hdWldl#ga_rvbp`:468;>7h`l_dld+woiWz~jxh2;0?36?`hdWldl#ga_rvbp`:397;>7h`l_dld+woiWz~jxh2;2?36?`hdWldl#ga_rvbp`:3;7;>7h`l_dld+woiWz~jxh2;4?36?`hdWldl#ga_rvbp`:3=7;>7h`l_dld+woiWz~jxh2;6?36?`hdWldl#ga_rvbp`:3?7;>7h`l_dld+woiWz~jxh2;8?36?`hdWldl#ga_rvbp`:317;>7h`l_dld+woiWz~jxh2;>036?`hdWldl#ga_rvbp`:287;>7h`l_dld+woiWz~jxh2:1?36?`hdWldl#ga_rvbp`:2:7;>7h`l_dld+woiWz~jxh2:3?36?`hdWldl#ga_rvbp`:2<7;>7h`l_dld+woiWz~jxh2:5?36?`hdWldl#ga_rvbp`:268;>7h`l_dld+woiWz~jxh294?36?`hdWldl#ga_rvbp`:1=7;>7h`l_dld+woiWz~jxh296?36?`hdWldl#ga_rvbp`:1?7;>7h`l_dld+woiWz~jxh298?36?`hdWldl#ga_rvbp`:117;>7h`l_dld+woiWz~jxh29>036?`hdWldl#ga_rvbp`:087;>7h`l_dld+woiWz~jxh281?36?`hdWldl#ga_rvbp`:0:7;>7h`l_dld+woiWz~jxh283?36?`hdWldl#ga_rvbp`:0<7;>7h`l_dld+woiWz~jxh285?36?`hdWldl#ga_rvbp`:0>7;>7h`l_dld+woiWz~jxh287?36?`hdWldl#ga_rvbp`:007;>7h`l_dld+woiWz~jxh289?36?`hdWldl#ga_rvbp`:068;>7h`l_dld+woiWz~jxh270?36?`hdWldl#ga_rvbp`:?97;>7h`l_dld+woiWz~jxh272?36?`hdWldl#ga_rvbp`:?;7;>7h`l_dld+woiWz~jxh274?36?`hdWldl#ga_rvbp`:?=7;>7h`l_dld+woiWz~jxh276?36?`hdWldl#ga_rvbp`:??7;>7h`l_dld+woiWz~jxh27>036?`hdWldl#ga_rvbp`:>>7;=7h`l_dld+woiWz~jxh266?322>cikVoek"|fn^qweqc;1?49=85jnb]fjb)uagUxxlzj<85=53=bfjUnbj!}io]ppdrb40=5=<84eoa\aka(z`dTyo{e=;4:7723ldhSh`h/skm[vrf|l6243?9;dl`[`h`'{ceS~zntd>:<;76>2oeoRkag.pjjZusi}o7550=149fjfYbfn%yecQ|t`vf86;;>7h`l_dld+woiWz~jxh26>03;?`hdWldl#ga_rwao`Xff6;2<74eoa\aka(z`dTxldex]mk9699820icmPeoe,vlhX{|h`itQao=3=5<=bfjUnbj!}io]pqgmbqVdd0<0>199fjfYbfn%yecQ|ucif}Zhh4;4:56kac^gmc*tnfVy~nfkv_om?6;7602oeoRkag.pjjZurjborSca33?3`?`hdWldl#ga_rwao`Xff682R]X0048akeXmgm$oaw_n]gmk:768;<7h`l_dld+vdhpVeThd`311<252=bfjUnbj!|bnz\kZbnf5;:21nbnQjnf-pfj~XgVnbb1?<>034?`hdWldl#~l`x^m\`lh;9=4:=:5jnb]fjb)tjfrTcRjfn=36:4703ldhSh`h/r`l|ZiXl`d7=;0>169fjfYbfn%xnbvPo^fjj97068;<7h`l_dld+vdhpVeThd`319<252=bfjUnbj!|bnz\kZbnf5;2211058akeXmgm$oaw_n]gmk:597;:;6kac^gmc*uegqUdSiga<30=5416:gmgZcio&yicuQ`_ekm87869?1nbnQjnf-pfj~XgVnbb1=11048akeXmgm$oaw_n]gmk:368;=7h`l_dld+vdhpVeThd`35?322>cikVoek"}moy]l[aoi4?4:=;5jnb]fjb)tjfrTcRjfn=5=5402:732:7385jnb]fjb)gVoeowthmm[`h`agoT:?Qwo=3=60=bfjUnbj!wo^gmgww|`eeSh`hiog\26Yg5;5>95jnb]fjb)gVoeowthmm[`h`agoT:Rv`<0<11>cikVoek"v`_dl`v|vsafdTicifnd]45Z~h484996kac^gmc*~hWldh~t~{inl\akanflU<>Rv`<0<11>cikVoek"v`_dl`v|vsafdTicifnd]47Z~h484986kac^gmc*~hWldh~t~{inl\akanflU1f:if}ZoXcls7<3Q}te9ha|YnWbor0<>1119ha|YnWbor0<>1_svg?nc~W`U`it2>1?33?nc~W`U`it2>1?]qpa=lmpUbSfkv<00=55=lmpUbSfkv<00=[wrc3borSdQdex>27;773borSdQdex>27;Yu|m1`itQf_jgz8429991`itQf_jgz8429W{~o7fkv_h]ha|:6=7;;7fkv_h]ha|:6=7Uyxi5dex]j[nc~48<5==5dex]j[nc~48<5Szk;jgz[lYlmp6:;3??;jgz[lYlmp6:;3Q}te9ha|YnWbor0<61119ha|YnWbor0<61_svg?nc~W`U`it2>9?33?nc~W`U`it2>9?]qpf=lmpUbSfkv<0>^pw`>mbqVcTghw321<24>mbqVcTghw321<\vqb1=;embqVcTghw32?]qpa=lmpUbSfkv<22=b>mbqVcTghw33083:a=lmpUbSfkv<23=g>mbqVcTghw33?d8o`XaVanu1=1_sv`?nc~W`U`it2;>g9ha|YnWbor090Prua8o`XaVanu1;1f:if}ZoXcls793Q}tb9ha|YnWbor0;0i;jgz[lYlmp6=2R|{c:if}ZoXcls7;3h4kd{\mZmbq5=5Szl;jgz[lYlmp632k5dex]j[nc~414T~ym4kd{\mZmbq535j6ejy^k\o`;17Uyxk5dex]j[nc~W`n7<3h4kd{\mZmbqVco0<0>1:if}ZoXclsTei2=:1mbqVcT`bok_jgze>mbqVeTnx}ve:if}Zud`ln$Gh|=139ha|Ytkaoo#Fk}2^QT44`f:if}Zud`ln$A~f}ef]q[vmX{ecoiR??50d8o`X{jbnh"C|hsgd[wYtcVygeikP1142b>mbqVyhdhj MrjqabYuWzaTagke^3334`6n2anuR}lhdf,IvnumnUyS~ePsmkgaZ7718l0ghwPsbjf`*Kt`{olSQ|k^qomacX98::j6ejy^q`l`b(EzbyijQ}_ri\wiocmV;:=f:if}Zud`ln$A~f}ef]q[vmX{ecoiR?>30d8o`X{jbnh"C|hsgd[wYtcVygeikP1062b>mbqVyhdhj MrjqabYuWzaTagke^3214`>f:if}Zud`ln$A~f}ef]q[vmX{ecoiR?=10d8o`X{jbnh"C|hsgd[wYtcVygeikP1302b>mbqVyhdhj MrjqabYuWzaTagke^3174`e:if}Zud`ln$A~f}ef]q[vmX{ecoiR771d9ha|Ytkaoo#@}grde\vZulWzfbhhQ690f8o`X{jbnh"Cwos]\j5679VXnxb{10f8o`X{jbnh"Cwos]\j567:VXnxb{10f8o`X{jbnh"Cwos]\j567;VXnxb{1d9ha|Ytkaoo#C??6d9ha|Ytkaoo#C??8d9ha|Ytkaoo#C?>0d9ha|Ytkaoo#C?>2d9ha|Ytkaoo#C?>4d9ha|Ytkaoo#C?>6d9ha|Ytkaoo#C?>8d9ha|Ytkaoo#C?=0b9ha|Ytkaoo#C0:if}Zud`ln$Sc>?9733?nc~Wzicii!Pn1335422:if}Zud`ln$Sc>>03]E57=lmpUxoekk/^l3554XO8:0ghwPsbjf`*Yi88:?=<5dex]pgmcc'Vd;==:>119ha|Ytkaoo#R`?16525>mbqVyhdhj _o223276=2anuR}lhdf,o`XgVh~t?<0:if}Zud`ln$ghwPsbjf`pjbW883S_k|umv?4;Yg{;:SD@Y_10b?nc~Wzicii!dex]pgmcc}eoT=?6PRdqvhq:66Vrd~l5dex]pgmcc'borS~mgeewoaZ750VXnxb{<2<\|jt698:0ghwPsbjf`*tXj|yr=45dex]pgmcc'{UhxbPfro\BCb69j1`itQ|cigg+wYd|{fTj~cPFGf2)Lh612anuR}lhdf,vZeszeUm`QIFe02g>mbqVyhdhj r^awviYa{dUMJi<"Io3g?nc~Wzicii!}_bvqhZ`teVLMh?#Fn03g?nc~Wzicii!}_bvqhZ`teVLMh?#Fn33b?nc~Wzicii!}_bvqhZ`teVE~x=?>3:if}Zud`ln$~Rjfn^qfh4>1199ha|Ytkaoo#Qjnb]poZhh484:46ejy^q`l`b(zVoeoR}d_om?6;7?3borS~mgee-q[`hdWzaTbb2<>058o`X{jbnh"|Peoa\wnYigV::;6ejy^q`l`b(zVoeoR}d_om\5417:if}Zud`ln$~Rkac^qh[kiX;8?0ghwPsbjf`*tXclsTei2?>078o`X{jbnh"|Pkd{\ma:668?0ghwPsbjf`*tXclsTei2=>068o`X{jbnh"|Pkd{\maY79=1`itQ|cigg+wYlmpUbhR?>4:if}Zud`ln$~Rejy^kg[7713borS~mgee-q[ugu|Vdd0=0>6:if}Zud`ln$~R~nru]mk9799<1`itQ|cigg+wYwi{~TbbQ?149ha|Ytkaoo#Qasv\jjY6;?1`itQ|cigg+wYwi{~TbbQBaef\[k6789UFtb|PRdqvhq:66VXnxb{13f8o`X{jbnh"|Pp`pw[kiXEhnoSR`?012\[k678:;TECXP00f8o`X{jbnh"|Pp`pw[kiXWg:;<=2?>0f8o`X{jbnh"|Pp`pw[kiXWg:;<=2>>078o`X{jbnh"|Prbmmwq:768?0ghwPsbjf`*tXzjeey2>>078o`X{jbnh"|Prbmmwq:568?0ghwPsbjf`*tXzjeey2<>078o`X{jbnh"|Prbmmwq:368?0ghwPsbjf`*tXzjeey2:>078o`X{jbnh"|Prbmmwq:168?0ghwPsbjf`*tXzjeey28>068o`X{jbnh"|PrbmmwqY79=1`itQ|cigg+wYukfdxxR?>4:if}Zud`ln$~R|looqw[7733borS~mgee-q[wehfz~T?<:4kd{\wfnbl&xT~naasu]751=lmpUxoekk/s]qgjht|V?:86ejy^q`l`b(zVxhcc}{_737?nc~Wzicii!}_saljvrX?8>0ghwPsbjf`*tX{kesS~kc169ha|Ytkaoo#Q|k^qomac;87;27fkv_rakaa)uWzaTagke=334;7>3borS~mgee-q[vmX{ecoi1??1?3:?nc~Wzicii!}_ri\wiocm5;;>3?6;jgz[veomm%yS~ePsmkga977;7;27fkv_rakaa)uWzaTagke=330;7>3borS~mgee-q[vmX{ecoi1??5?3:?nc~Wzicii!}_ri\wiocm5;;:3?6;jgz[veomm%yS~ePsmkga977?7;27fkv_rakaa)uWzaTagke=33<;7>3borS~mgee-q[vmX{ecoi1??9?3;?nc~Wzicii!}_ri\wiocm5;;2<74kd{\wfnbl&xTfQ|lhff84776830ghwPsbjf`*tX{bUx`djj<032:4?0;8o`X{jbnh"|Psj]phlbb48;82<74kd{\wfnbl&xTfQ|lhff84736830ghwPsbjf`*tX{bUx`djj<036:4?0;8o`X{jbnh"|Psj]phlbb48;<2<74kd{\wfnbl&xTfQ|lhff847?6830ghwPsbjf`*tX{bUx`djj<03::4>5=45dex]pgmcc'{UxgR}cieg?5739901`itQ|cigg+wYtcVygeik3134=5<=lmpUxoekk/s]poZukamo7=?91199ha|Ytkaoo#Q|k^qomac;9;4:46ejy^q`l`b(zVy`S~bfdd>27;7?3borS~mgee-q[vmX{ecoi1?;>0:8o`X{jbnh"|Psj]phlbb48?5=55dex]pgmcc'{UxgR}cieg?538602anuR}lhdf,vZulWzfbhh2>7?3;?nc~Wzicii!}_ri\wiocm5;32<64kd{\wfnbl&xTfQ|lhff84?99>1`itQ|cigg+wYtcVygeik31?3;?nc~Wzicii!}_ri\wiocm58;2<64kd{\wfnbl&xTfQ|lhff8779911`itQ|cigg+wYtcVygeik323<2<>mbqVyhdhj r^qh[vjnll69?3?7;jgz[veomm%yS~ePsmkga9436820ghwPsbjf`*tX{bUx`djj<37=5==lmpUxoekk/s]poZukamo7>;0>8:if}Zud`ln$~R}d_rnj``:5?7;37fkv_rakaa)uWzaTagke=0;:4>?1169ha|Ytkaoo#Q|k^qomac;;7;<7fkv_rakaa)uWzaTagke=6=52=lmpUxoekk/s]poZukamo793?8;jgz[veomm%yS~ePsmkga9099>1`itQ|cigg+wYtcVygeik37?34?nc~Wzicii!}_ri\wiocm525=55dex]pgmcc'{UxgR}cieg?=38602anuR}lhdf,vZulWzfbhh267?3;?nc~Wzicii!}_ri\wiocm5332<64kd{\wfnbl&xTfQ|lhff81`itQ|cigg+wYtcVygeik39?35?nc~Wzicii!}_ri\wiocmV:::6ejy^q`l`b(zVy`S~bfdd]252=lmpUxoekk/s]poZukamoT==?7;jgz[veomm%yS~ePsmkgaZ778820ghwPsbjf`*tX{bUx`djj_0225==lmpUxoekk/s]poZukamoT==<>8:if}Zud`ln$~R}d_rnj``Y68:;37fkv_rakaa)uWzaTagke^3304>:199ha|Ytkaoo#Q|k^qomacX99<:46ejy^q`l`b(zVy`S~bfdd]2427?3borS~mgee-q[vmX{ecoiR??80:8o`X{jbnh"|Psj]phlbbW8:2=:5dex]pgmcc'{UxgR}cieg\547?3borS~mgee-q[vmX{ecoiR?>00:8o`X{jbnh"|Psj]phlbbW8;:=55dex]pgmcc'{UxgR}cieg\544602anuR}lhdf,vZulWzfbhhQ>123;?nc~Wzicii!}_ri\wiocmV;:8<64kd{\wfnbl&xTfQ|lhff[472911`itQ|cigg+wYtcVygeikP1042<>mbqVyhdhj r^qh[vjnllU:=:?7;jgz[veomm%yS~ePsmkgaZ760820ghwPsbjf`*tX{bUx`djj_03:52=lmpUxoekk/s]poZukamoT=??7;jgz[veomm%yS~ePsmkgaZ758820ghwPsbjf`*tX{bUx`djj_0025==lmpUxoekk/s]poZukamoT=?<>8:if}Zud`ln$~R}d_rnj``Y6::;37fkv_rakaa)uWzaTagke^3104>1`itQ|cigg+wYtcVygeikP1934?nc~Wzicii!}_ri\wiocmV;2=;5dex]pgmcc'{UxgR}cieg\641>7:if}Zud`ln$~R}d_rnj``Y598=0ghwPsbjf`*tX{bUx`djj_3023>mbqVyhdhj r^qh[vjnllU9?<94kd{\wfnbl&xTfQ|lhff[726?2anuR}lhdf,vZulWzfbhhQ=5058o`X{jbnh"|Psj]phlbbW;<:;6ejy^q`l`b(zVy`S~bfdd]13417:if}Zud`ln$~R}d_rnj``Y518<0ghwPsbjf`*tX{bUx`djj_234?nc~Wzicii!}_ri\wiocmV9;=:5dex]pgmcc'{UxgR}cieg\74713borS~mgee-q[vmX{ecoiR:>6:if}Zud`ln$~R}d_rnj``Y29?1`itQ|cigg+wYtcVygeikP6048o`X{jbnh"|Psj]phlbbW>;=7fkv_rakaa)uWzaTagke^:22>mbqVyhdhj r^qh[vjnllU2=:5dex]pgmcc'{UxgR}cieg\=3703borS~mgee-q[vmX{ecoiR78169ha|Ytkaoo#Q|k^qomacX11;<7fkv_rakaa)uWzaTagke^;:5==lmpUxoekk/skm[vdhpVyn`9:if}Zud`ln$~d`Psj]phlbb494:n6ejy^q`l`b(z`dTfQ|lhff858598n0ghwPsbjf`*tnfVy`S~bfdd>3:77XO8k0ghwPsbjf`*tnfVy`S~bfdd>24;7d3borS~mgee-qmkYtcVygeik311<154c0?02[B7f3borS~mgee-qmkYtcVygeik310<2g>mbqVyhdhj rhl\wnYtd`nn0mbqVyhdhj rhl\wnYtd`nn0<<11b9ha|Ytkaoo#ga_ri\wiocm5;92??>e:if}Zud`ln$~d`Psj]phlbb4885>20;46WN;j7fkv_rakaa)uagUxgR}cieg?5086k2anuR}lhdf,vlhX{bUx`djj<07=647b3borS~mgee-qmkYtcVygeik314<15ZA6i2anuR}lhdf,vlhX{bUx`djj<04=5f=lmpUxoekk/skm[vmX{ecoi1?9>332a>mbqVyhdhj rhl\wnYtd`nn0<8120]D5d=lmpUxoekk/skm[vmX{ecoi1?8>0a8o`X{jbnh"|fn^qh[vjnll6:;3<>1d9ha|Ytkaoo#ga_ri\wiocm5;<2??PG0c8o`X{jbnh"|fn^qh[vjnll6:43?l;jgz[veomm%yecQ|k^qomac;9149=>33\C4g=0=10g8o`X{jbnh"|fn^qh[vjnll69<3<>_F3b?nc~Wzicii!}io]poZukamo7><0>c:if}Zud`ln$~d`Psj]phlbb4;;5>a:if}Zud`ln$~d`Psj]phlbb4;85=n5dex]pgmcc'{ceS~ePsmkga9456;;:i6ejy^q`l`b(z`dTfQ|lhff8749:8UL=l5dex]pgmcc'{ceS~ePsmkga94468i0ghwPsbjf`*tnfVy`S~bfdd>17;469l1`itQ|cigg+woiWzaTagke=00:77XO8k0ghwPsbjf`*tnfVy`S~bfdd>10;7e3borS~mgee-qmkYtcVygeik325<25g=lmpUxoekk/skm[vmX{ecoi1<;>33b?nc~Wzicii!}io]poZukamo7>80>b:if}Zud`ln$~d`Psj]phlbb4;?5=0`8o`X{jbnh"|fn^qh[vjnll69;3?>b:if}Zud`ln$~d`Psj]phlbb4;=5>mbqVyhdhj rhl\wnYtd`nn0?7110`8o`X{jbnh"|fn^qh[vjnll6953<>9:if}Zud`ln$~d`Psj]phlbb4;4:n6ejy^q`l`b(z`dTfQ|lhff878598n0ghwPsbjf`*tnfVy`S~bfdd>1:77XO8k0ghwPsbjf`*tnfVy`S~bfdd>04;7e3borS~mgee-qmkYtcVygeik331<25g=lmpUxoekk/skm[vmX{ecoi1=?>33b?nc~Wzicii!}io]poZukamo7?<0>b:if}Zud`ln$~d`Psj]phlbb4:;5=33\C4?0`8o`X{jbnh"|fn^qh[vjnll6?2??>d:if}Zud`ln$~d`Psj]phlbb4=49=RI>9:if}Zud`ln$~d`Psj]phlbb4<4:n6ejy^q`l`b(z`dTfQ|lhff808598n0ghwPsbjf`*tnfVy`S~bfdd>6:77XO830ghwPsbjf`*tnfVy`S~bfdd>5:4d332`>mbqVyhdhj rhl\wnYtd`nn0;0=1^E2=>mbqVyhdhj rhl\wnYtd`nn0:0>b:if}Zud`ln$~d`Psj]phlbb4>49=;:776l2anuR}lhdf,vlhX{bUx`djj<9<15ZA612anuR}lhdf,vlhX{bUx`djj<8<2f>mbqVyhdhj rhl\wnYtd`nn040=10f8o`X{jbnh"|fn^qh[vjnll622??PG0:8o`X{jbnh"}moy]l[aoi494:=45dex]pgmcc'zhdtRaPdhl?5586901`itQ|cigg+vdhpVeThd`310<25<=lmpUxoekk/r`l|ZiXl`d7=?0>189ha|Ytkaoo#~l`x^m\`lh;9:4:=45dex]pgmcc'zhdtRaPdhl?5186901`itQ|cigg+vdhpVeThd`314<25<=lmpUxoekk/r`l|ZiXl`d7=;0>189ha|Ytkaoo#~l`x^m\`lh;9>4:=45dex]pgmcc'zhdtRaPdhl?5=86901`itQ|cigg+vdhpVeThd`318<25==lmpUxoekk/r`l|ZiXl`d7=3?>9:if}Zud`ln$oaw_n]gmk:587;:56ejy^q`l`b({kesSbQkio>15;7612anuR}lhdf,wgiWfUoec2=2?32=>mbqVyhdhj scm{[jYcag69?3?>9:if}Zud`ln$oaw_n]gmk:5<7;:56ejy^q`l`b({kesSbQkio>11;7612anuR}lhdf,wgiWfUoec2=6?32=>mbqVyhdhj scm{[jYcag69;3?>9:if}Zud`ln$oaw_n]gmk:507;:56ejy^q`l`b({kesSbQkio>1=;7602anuR}lhdf,wgiWfUoec2=>03:?nc~Wzicii!|bnz\kZbnf59;2199ha|Ytkaoo#~l`x^m\`lh;=7;:46ejy^q`l`b({kesSbQkio>5:47?3borS~mgee-pfj~XgVnbb19110:8o`X{jbnh"}moy]l[aoi414:=55dex]pgmcc'zhdtRaPdhl?=;7682gdhhQf_jgz[lb;87;;7`ake^k\o`Xam6:2<<4mnff[lYlmpUbh1<50?33?hicmVcTghwPie>1:c=jgmoTeR~cahl?4;773deoiRgPpmcjj97768:0abjj_h]shdoi48;5==5boeg\mZvki`d7=?0>0:ol``YnWyfjec2>3?33?hicmVcT|aofn=37:46028ijbbW`U{`lga<0;=b>khllUbS}bnio>2:463??;lmgaZoXxekbb1<<>028ijbbW`U{`lga<36=55=jgmoTeR~cahl?608682gdhhQf_qnbmk:5>7;;7`ake^k\tignf58<2<>4mnff[lYwdhce0?61119nkacXaVzgmd`328g9nkacXaVzgmd`35?d8ijbbW`U{`lga<7khllUbS}bnio>;:c=jgmoTeR~cahl?=;ekhllUdSo{|y028ijbbWfUhe}fjr=2=54=jgmoTcRmfpigq8469981fcikPo^ajtmcu48;5=<5boeg\kZenxaoy0<<1109nkacXgVib|ek}<01=54=jgmoTcRmfpigq8429981fcikPo^ajtmcu48?5=<5boeg\kZenxaoy0<81109nkacXgVib|ek}<05=54=jgmoTcRmfpigq84>9981fcikPo^ajtmcu4835==5boeg\kZenxaoy0<0>1:ol``YhWjc{dh|321<25>khllUdSnghdp?648692gdhhQ`_bksl`t;:;4:=6c`dd]l[fow`lx7>>0>1:ol``YhWjc{dh|325<25>khllUdSnghdp?608692gdhhQ`_bksl`t;:?4:=6c`dd]l[fow`lx7>:0>1:ol``YhWjc{dh|329<25>khllUdSnghdp?6<8682gdhhQ`_bksl`t;:7;:7`ake^m\glvom{68<3?<;lmgaZiXk`zci2<1;2=54=jgmoTcRmfpigq8679991fcikPo^ajtmcu4:4:<6c`dd]l[fow`lx783??;lmgaZiXk`zci2:>028ijbbWfUhe}fjr=4=55=jgmoTcRmfpigq828682gdhhQ`_bksl`t;07;;7`ake^m\glvom{622n5boeg\kZpfd`n87}{a:qahaYnWhih6}mle]j[aoi494o7~lcd^k\`lh;97n0obk_h]gmk:56m1xnajPi^fjj959l2yi`iQf_ekm818c3zhghRgPdhl?1;b<{kfoSdQkio>5:c=tjenTeRjfn=594;b<{kfoSdQkio>4:g=tjenTeRj`ndg8wgjcW`UnhRc`ddf8wgjcW`U{c~2?>e9pfibXaVzd1?1d:qahaYnWyex0?0k;r`o`ZoXxfy7?3j4scng[lYwgz6?2i5|bmf\mZvh{5?5h6}mle]j[uit4?4m7~lcd^k\tju;?3:5h6}mle]j[uit4>4j7~lcd^k\s`h692yicuQjnb-p[aoi494:>6}moy]fjf)tWmce0=0>139pfj~Xmgi$Rjfn=33:45<{kesSh`l/r]gmk:687;:>6}moy]fjf)tWmce027;743zhdtRkac.q\`lh;9:4:=?5|bnz\ake({Vnbb1?;>018wgiWldh#~Qkio>20;76:2yicuQjnb-p[aoi48?5=>5|bnz\ake({Vnbb1?:>031?vdhpVoeo"}Pdhl?5386;2yicuQjnb-p[aoi48<5=<<4scm{[`hd'zUoec2>7?30?vdhpVoeo"}Pdhl?52869;1xnbvPeoa,wZbnf5;32<=4scm{[`hd'zUoec2>8?326>uegqUnbn!|_ekm84?99:1xnbvPeoa,wZbnf5;22;r`l|Zcik&yThd`31?31?vdhpVoeo"}Pdhl?5;76:2yicuQjnb-p[aoi4;:5=>5|bnz\ake({Vnbb1031?vdhpVoeo"}Pdhl?6486;2yicuQjnb-p[aoi4;;5=<<4scm{[`hd'zUoec2=2?30?vdhpVoeo"}Pdhl?67869;1xnbvPeoa,wZbnf5882<=4scm{[`hd'zUoec2=3?326>uegqUnbn!|_ekm87299:1xnbvPeoa,wZbnf58?2uegqUnbn!|_ekm87399880oaw_dl`+vYcag69:3?<;r`l|Zcik&yThd`327<257=tjfrTicm s^fjj9406890oaw_dl`+vYcag69;3?>2:qak}Ybfj%xSiga<3:=56=tjfrTicm s^fjj94?68;97~l`x^gmg*uXl`d7>40>3:qak}Ybfj%xSiga<3;=547<{kesSh`l/r]gmk:56880oaw_dl`+vYcag692uegqUnbn!|_ekm86699880oaw_dl`+vYcag68=3?<;r`l|Zcik&yThd`330<254=tjfrTicm s^fjj9599;1xnbvPeoa,wZbnf595=008wgiWldh#~Qkio>7:4763zhdtRkac.q\`lh;=7;97~l`x^gmg*uXl`d793?>1:qak}Ybfj%xSiga<7<26>uegqUnbn!|_ekm8386981xnbvPeoa,wZbnf5=5=?5|bnz\ake({Vnbb1911038wgiWldh#~Qkio>;:44<{kesSh`l/r]gmk:?68;:7~l`x^gmg*uXl`d753?=;r`l|Zcik&yThd`39?32=>uegqUnbn!|bnz\6}>X8&yicuj>9:qak}Ybfj%xnbvP2y:\5*uegqn:=6}moy]fjfYnWmce0=0>2:qak}YbfjUbSiga<02=57=tjfrTicmPi^fjj9766880oaw_dl`[lYcag6:>3?=;r`l|ZcikVcThd`312<26>uegqUnbnQf_ekm84299;1xnbvPeoa\mZbnf5;>2<<4scm{[`hdW`Uoec2>6?31?vdhpVoeoRgPdhl?5286:2yicuQjnb]j[aoi4825=?5|bnz\akeXaVnbb1?6>038wgiWldhSdQkio>2:44<{kesSh`l_h]gmk:587;97~l`x^gmgZoXl`d7><0>2:qak}YbfjUbSiga<30=57=tjfrTicmPi^fjj94468;0oaw_dl`[lYcag692038wgiWldhSdQkio>7:47<{kesSh`l_h]gmk:268;0oaw_dl`[lYcag6=2038wgiWldhSdQkio>;:47<{kesSh`l_h]gmk:>6880oaw_dl`[jYcg|~7<3?<;r`l|ZcikVeThb{{<02=56=tjfrTicmPo^flqq:697;87~l`x^gmgZiXlf0<<1129pfj~XmgiTcRj`uu>27;743zhdtRkac^m\`jss48>5=>5|bnz\akeXgVndyy2>5?30?vdhpVoeoRaPdnww84099:1xnbvPeoa\kZbh}}6:;3?<;r`l|ZcikVeThb{{<0:=56=tjfrTicmPo^flqq:617;97~l`x^gmgZiXlf0<0>3:qak}YbfjUdSiazt=03:45<{kesSh`l_n]gkpr;:84:?6}moy]fjfYhWme~x1<=>018wgiWldhSbQkotv?6686;2yicuQjnb]l[air|58?2<=4scm{[`hdWfUocxz324<27>uegqUnbnQ`_emvp9416890oaw_dl`[jYcg|~7>:0>3:qak}YbfjUdSiazt=0;:45<{kesSh`l_n]gkpr;:04:>6}moy]fjfYhWme~x1<1129pfj~XmgiTcRj`uu>04;743zhdtRkac^m\`jss4:;5=?5|bnz\akeXgVndyy2<>008wgiWldhSbQkotv?0;753zhdtRkac^m\`jss4<4:>6}moy]fjfYhWme~x181139pfj~XmgiTcRj`uu>4:44<{kesSh`l_n]gkpr;07;97~l`x^gmgZiXlf040j;r`l|Zmt'Vd;<=?i;r`l|Zmt'Vd;<=?>e:qak}Yl{&Ue<=?7f:qak}Yl{&Ue<=?71028wgiWby$Rjfn=2=54=tjfrTg~!|_ekm8586981xnbvPkr-p[aoi48:5=?5|bnz\ov)tWmce0<>11038wgiWby$Rjfn=32:44<{kesSf} s^fjj97668;:7~l`x^ip+vYcag6:>3?=;r`l|Zmt'zUoec2>2?325>uegqU`"}Pdhl?5686:2yicuQds.q\`lh;9:4:=<5|bnz\ov)tWmce0<:1139pfj~Xcz%xSiga<06=547<{kesSf} s^fjj9726880oaw_jq,wZbnf5;>2;r`l|Zmt'zUoec2>6?31?vdhpVax#~Qkio>22;7692yicuQds.q\`lh;9>4:>6}moy]hw*uXl`d7=:0>109pfj~Xcz%xSiga<0:=57=tjfrTg~!|_ekm84>998;0oaw_jq,wZbnf5;22<<4scm{[nu({Vnbb1?6>033?vdhpVax#~Qkio>2:47<{kesSf} s^fjj97998;0oaw_jq,wZbnf58;2<<4scm{[nu({Vnbb1032?vdhpVax#~Qkio>15;753zhdtRe|/r]gmk:597;:=6}moy]hw*uXl`d7>?0>2:qak}Yl{&yThd`323<254=tjfrTg~!|_ekm87599;1xnbvPkr-p[aoi4;95=008wgiWby$Rjfn=07:4763zhdtRe|/r]gmk:5=7;97~l`x^ip+vYcag6993?>1:qak}Yl{&yThd`327<26>uegqU`"}Pdhl?6386981xnbvPkr-p[aoi4;=5=?5|bnz\ov)tWmce0?911038wgiWby$Rjfn=0;:44<{kesSf} s^fjj94?68;:7~l`x^ip+vYcag6953?=;r`l|Zmt'zUoec2=9?324>uegqU`"}Pdhl?6;763zhdtRe|/r]gmk:568;:7~l`x^ip+vYcag68<3?=;r`l|Zmt'zUoec2<0?325>uegqU`"}Pdhl?7486:2yicuQds.q\`lh;;84:==5|bnz\ov)tWmce0>0>1:qak}Yl{&yThd`33?324>uegqU`"}Pdhl?0;763zhdtRe|/r]gmk:368;;7~l`x^ip+vYcag6>24:=6}moy]hw*uXl`d7;3?>0:qak}Yl{&yThd`38?32?vdhpVax#~Qkio>;:4773zhdtRe|/r]gmk:>68;0oaw_jq,wZbnf535=1:qak}Yl{VcThd`311<25>uegqU`RgPdhl?548692yicuQds^k\`lh;9;4:=6}moy]hwZoXl`d7=>0>1:qak}Yl{VcThd`315<25>uegqU`RgPdhl?508692yicuQds^k\`lh;9?4:=6}moy]hwZoXl`d7=:0>1:qak}Yl{VcThd`319<25>uegqU`RgPdhl?5<8682yicuQds^k\`lh;97;:7~l`x^ip[lYcag69<3?>;r`l|ZmtW`Uoec2=1?32?vdhpVaxSdQkio>16;763zhdtRe|_h]gmk:5;7;:7~l`x^ip[lYcag6983?>;r`l|ZmtW`Uoec2=5?32?vdhpVaxSdQkio>12;763zhdtRe|_h]gmk:5?7;:7~l`x^ip[lYcag6943?>;r`l|ZmtW`Uoec2=9?33?vdhpVaxSdQkio>1:47<{kesSf}Pi^fjj95768;0oaw_jq\mZbnf59:2<>4scm{[nuXaVnbb1=1119pfj~XczUbSiga<5<24>uegqU`RgPdhl?1;773zhdtRe|_h]gmk:168:0oaw_jq\mZbnf5=5==5|bnz\ovYnWmce050>0:qak}Yl{VcThd`39?32?vdhpVaxSbQkotv?4;753zhdtRe|_n]gkpr;994:>6}moy]hwZiXlf02:qak}Yl{VeThb{{<07=57=tjfrTg~Q`_emvp9716880oaw_jq\kZbh}}6:;3?=;r`l|ZmtWfUocxz319<26>uegqU`RaPdnww84?9981xnbvPkr]l[air|5;5=?5|bnz\ovYhWme~x1008wgiWbyTcRj`uu>15;753zhdtRe|_n]gkpr;:;4:>6}moy]hwZiXlf0?=1139pfj~XczUdSiazt=07:44<{kesSf}Po^flqq:5=7;97~l`x^ip[jYcg|~7>;0>2:qak}Yl{VeThb{{<35=57=tjfrTg~Q`_emvp94?6880oaw_jq\kZbh}}6953?>;r`l|ZmtWfUocxz32?31?vdhpVaxSbQkotv?7586:2yicuQds^m\`jss4:;5=<5|bnz\ovYhWme~x1=1109pfj~XczUdSiazt=6=54=tjfrTg~Q`_emvp939981xnbvPkr]l[air|5<5=<5|bnz\ovYhWme~x191109pfj~XczUdSiazt=:=54=tjfrTg~Q`_emvp9?9j2y`aRkac.qhi45<{bgTicmPi^if}Zoc494:?6}dm^gmgZoXclsTei2>>018wnkXmgiTeRejy^kg878a3zafSh`l_h]q`Zci9:1xg`Qjnb]l[wirfmy7<3?<;rin[`hdWfUycx`ks=3=56=tcdUnbnQ`_smvjau;:7;87~eb_dl`[jYug|do1=1129pohYbfjUdS~{mkd{?4;733zafSh`l_n]pqgmbq5;;2<:4sjo\akeXgVy~nfkv<03=51=tcdUnbnQ`_rwao`;9;4:86}dm^gmgZiX{|h`it2>3?37?vmjWldhSbQ|ucif}97368>0fcPeoa\kZurjbor0<;1159pohYbfjUdS~{mkd{?5386<2y`aRkac^m\wpdlmp6:;3?;;rin[`hdWfUxyoejy=3;:42<{bgTicmPo^qvfnc~4835=>5|kl]fjfYhWzighw31?37?vmjWldhSbQ|ucif}94768>0fcPeoa\kZurjbor0??1159pohYbfjUdS~{mkd{?6786<2y`aRkac^m\wpdlmp69?3?;;rin[`hdWfUxyoejy=07:42<{bgTicmPo^qvfnc~4;?5=95|kl]fjfYhWzighw327<20>uleVoeoRaPst`ha|:5?7;?7~eb_dl`[jYt}kanu1<7>068wnkXmgiTcR}zbjgz87?99:1xg`Qjnb]l[vsecls7>3?;;rin[`hdWfUxyoejy=13:42<{bgTicmPo^qvfnc~4:;5=>5|kl]fjfYhWzighw33?30?vmjWldhSbQ|ucif}9299:1xg`Qjnb]l[vsecls793?<;rin[`hdWfUxyoejy=4=56=tcdUnbnQ`_rwao`;?7;87~eb_dl`[jYt}kanu161129pohYbfjUdS~{mkd{?=;763qi?z~v<5,33)c`1>1wKL}?m859CD}45i3L1>7?tS61967>=9:;1=><;27c962e61rd9>;4>;o013?2<,;8>6?<>;|Q46?4503;8=7?<2505e?40k8k0h?4}T?:09>54>30827725>h09;n?6;wV14<<7280:6>j6{R50>74?289:6<==434b>71d901/><<51978 4`>21=;7o<=a;29<4<49h08h4uU628461=9h08:7?;:0`950<603w/>=h523c8L7773`8957>5;h533?6=3`=9n7>5;h503?6=3`?=m7>5;h502?6=3`=?=7>5;h51g?6=3`=?<7>5$0da>25a3g;mm7>4;h50a?6=,8li6:=i;o3ee?7<3`=8h7>5$0da>25a3g;mm7<4;h50g?6=,8li6:=i;o3ee?5<3`=8n7>5$0da>25a3g;mm7:4;h50e?6=,8li6:=i;o3ee?3<3`=857>5$0da>25a3g;mm784;h505$0da>00?3g;mm7>4;h753?6=,8li6887;o3ee?7<3`?=:7>5$0da>00?3g;mm7<4;h501?6=,8li6:=;;o3ee?6<3`=8?7>5$0da>2533g;mm7?4;h506?6=,8li6:=;;o3ee?4<3`=8=7>5$0da>2533g;mm7=4;h504?6=,8li6:=;;o3ee?2<3`=9j7>5$0da>2533g;mm7;4;h51a?6=,8li6:=;;o3ee?0<3`=9h7>5$0da>2533g;mm794;h763?6=,8li68;9;o3ee?6<3`?>97>5$0da>0313g;mm7?4;h766?6=,8li68;9;o3ee?4<3`?>=7>5$0da>0313g;mm7=4;h764?6=,8li68;9;o3ee?2<3`??j7>5$0da>0313g;mm7;4;h77a?6=,8li68;9;o3ee?0<3`??h7>5$0da>0313g;mm794;h77f?6=,8li68;9;o3ee?><3`??57>5$0da>0313g;mm774;h773?6=,8li68;9;o3ee?g<3`??97>5$0da>0313g;mm7l4;h775?6=,8li68;9;o3ee?e<3`?8j7>5$0da>0313g;mm7j4;h70`?6=,8li68;9;o3ee?c<3`?8n7>5$0da>0313g;mm7h4;h70=?6=,8li68;9;o3ee?7732c>?:4?:%3ef?32>2d:jl4>1:9j163=83.:jo4:579m5cg=9;10e8=<:18'5cd==<<0b!7aj3?>:6`>f`821>=n=?>1<7*>fc8613=i9ok1=;54i441>5<#9oh19884n0db>41<3`?=<7>5$0da>0313g;mm7?7;:k61`<72-;mn7;:6:l2bd<6121b98m50;&2bg<2=?1e=ko51`98m03f290/=kl55448j4`f28h07d;:8;29 4`e2o2=:0;6)?ib;762>h6nh0:h65f55194?"6nk0>9;5a1gc95`=5$0da>3c33g;mm7?4;h4f6?6=,8li6;k;;o3ee?4<3`5$0da>3`b3g;mm7>4;h4e`?6=,8li6;hj;o3ee?7<3`5$0da>3`b3g;mm7<4;h4ee?6=,8li6;hj;o3ee?5<3`5$0da>3`b3g;mm7:4;h4e5$0da>3`b3g;mm784;h4e2?6=,8li6;hj;o3ee?1<3`5$0da>3`b3g;mm764;h4e0?6=,8li6;hj;o3ee??<3`5$0da>3`b3g;mm7o4;h4e6?6=,8li6;hj;o3ee?d<3`5$0da>3`b3g;mm7m4;h4fb?6=,8li6;hj;o3ee?b<3`5$0da>3`b3g;mm7k4;h4f`?6=,8li6;hj;o3ee?`<3`5$0da>3`b3g;mm7??;:k5ag<72-;mn78ie:l2bd<6921b:ho50;&2bg<1nl1e=ko51398m3c>290/=kl56gg8j4`f28907d8j8;29 4`e2?ln7c?ia;37?>o1m>0;6)?ib;4ea>h6nh0:965f71494?"6nk0=jh5a1gc953=:>6=4+1g`92cc4?:%3ef?0am2d:jl4>9:9j354=83.:jo49fd9m5cg=9h10e:>>:18'5cd=>oo0b!7aj3f`82`>=n>o;1<7*>fc85b`=i9ok1=h54i7g5>5<#9oh1:kk4n0db>4`<3f=9m7>5;n535;n516?6=,8li6:<>;o3ee?6<3f=9<7>5$0da>2463g;mm7?4;n52a?6=,8li6:<>;o3ee?4<3f=:h7>5$0da>2463g;mm7=4;n52g?6=,8li6:<>;o3ee?2<3f=:n7>5$0da>2463g;mm7;4;n52e?6=,8li6:<>;o3ee?0<3f=:57>5$0da>2463g;mm794;n52;o3ee?><3f=:;7>5$0da>2463g;mm774;n522?6=,8li6:<>;o3ee?g<3f=:97>5$0da>2463g;mm7l4;n527?6=,8li6:<>;o3ee?e<3f=:>7>5$0da>2463g;mm7j4;n525?6=,8li6:<>;o3ee?c<3f=:<7>5$0da>2463g;mm7h4;n53b?6=,8li6:<>;o3ee?7732e<1:9l35b=83.:jo48209m5cg=9;10c:>l:18'5cd=?;;0b!7aj3=9=6`>f`821>=h?;31<7*>fc8464=i9ok1=;54o60;>5<#9oh1;??4n0db>41<3f=9;7>5$0da>2463g;mm7?7;:m463<72-;mn79=1:l2bd<6121d;?;50;&2bg<0:81e=ko51`98k243290/=kl57338j4`f28h07b9=3;29 4`e2>8:7c?ia;3`?>i09o0;6)?ib;515>h6nh0:h65`70694?"6nk0<><5a1gc95`=:26=4+1g`937794?:083>5}#:9l1>1q)?>b;316>"5890:j;5+12d96>"6<9097)?;1;08 4252;1/=9=52:&201<53-;?97<4$065>7=#9==1>6*>4981?!731380(<:n:39'51d=:2.:8n4=;%37`?4<,8>n6?5+15d96>"6=9097)?:1;08 4352;1/=8=52:&211<53-;>97<4$075>7=#9<=1>6*>5981?!721380(<;n:39'50d=:2.:9n4=;%36`?4<,8?n6?5+14d96>"6>9097)?91;08 4052;1/=;=52:&221<53-;=97<4$045>7=#9?=1>6*>6981?!711380(<8n:39'53d=:2.::n4=;%35`?4<,8"6?9097)?81;08 4152;1/=:=52:&231<53-;<97<4$055>7=#9>=1>6*>7981?!701380(<9n:39'52d=:2.:;n4=;%34b?7<,82;6<5+12496>"6;>097)?<8;08 45>2;1/=>o52:&27g<53-;7=#:921=k84$01`>7=#9:n1>6*=1e8144=#:8o1>=?4nd494>h6810;7cf;07?k45838?7)?>c;316>"58k0:7)"60;0:>?5+1919574<,8lm6fc872>h6nh0;76g;5;29 4`e2=<0b5$0da>1054i5094?"6nk0?:6`>f`87?>o283:1(2d:jl49;:k7a?6=,8li6984n0db>2=fc872>h6nh0376g;c;29 4`e2=<0b5$0da>10f`8`?>o303:1(2d:jl4j;:k63?6=,8li6884n0db>5=fc862>h6nh0:76g:4;29 4`e2<<0b>7>5$0da>00:6`>f`86?>o2n3:1(2d:jl48;:k6`?6=,8li6884n0db>==fc862>h6nh0276g:b;29 4`e2<<0b57>5$0da>00:6`>f`8g?>o293:1(92d:jl4?;:k:4?6=,8li64?4n0db>4=fc8:5>h6nh0976g7d;29 4`e20;0b5$0da><7f`85?>o?13:1(10e5650;&2bg<>92d:jl47;:k;3?6=,8li64?4n0db><=fc8:5>h6nh0j76g75;29 4`e20;0b7>5$0da><7f`8f?>o?83:1(92d:jl4>0:9j3`<72-;mn77>;o3ee?7632c5$0da><75<#9oh15<5a1gc956=h1<7*>fc8:5>h6nh0:865f7`83>!7aj33:7c?ia;36?>o>13:1(4g<3`3?6=4+1g`9=4=i9ok1=o54i8194?"6nk02=6`>f`82g>=n0o0;6)?ib;;2?k7ai3;o76g74;29 4`e20;0b290/=kl5909m5cg=9o10eo=50;&2bg4=fc8a6>h6nh0976gne;29 4`e2k80b5$0da>g46`>f`85?>ofi3:1(10el750;&2bg<=fc8a6>h6nh0j76gn6;29 4`e2k80b5$0da>g46`>f`8f?>of93:1(50;&2bg0:9j=c<72-;mn7l=;o3ee?7632c2i7>5$0da>g45<#9oh1n?5a1gc956=fc8a6>h6nh0:865f9c83>!7aj3h97c?ia;36?>oei3:1(=83.:jo4m2:l2bd<6021bn:4?:%3ef?d53g;mm7?6;:ka2?6=,8li6o<4n0db>4g<3`h>6=4+1g`9f7=i9ok1=o54ic694?"6nk0i>6`>f`82g>=nj90;6)?ib;`1?k7ai3;o76gn5;29 4`e2k80b4=fc8aa>h6nh0976gmb;29 4`e2ko0b7>5$0da>f5f`81?>od83:1(5;h52>5<5<6=44i03b>5<5<fc8g`>h6nh0;76akc;29 4`e2mn0b5$0da>ab54oe:94?"6nk0oh6`>f`87?>ic?3:1(2=1<7*>fc8g`>h6nh0376ak3;29 4`e2mn0b5$0da>abf`8`?>idm3:1(c=fc8g`>h6nh0:<65`c`83>!7aj3no7c?ia;32?>id13:1(40<3fo?6=4+1g`9`a=i9ok1=:54od194?"6nk0oh6`>f`82<>=hm;0;6)?ib;fg?k7ai3;276aj1;29 4`e2mn0bc:9l`g<72-;mn7jk;o3ee?7c32eo<7>5$0da>ab5<#9oh1hi5a1gc95c=!7aj3lm7c?ia;38?j`d290/=kl5fg9m5cg=:21djo4?:%3ef?`a3g;mm7=4;ndb>5<#9oh1jk5a1gc90>=hn00;6)?ib;de?k7ai3?07bh7:18'5cd=no1e=ko56:9lb2<72-;mn7hi;o3ee?1<3fl=6=4+1g`9bc=i9ok1465`f483>!7aj3lm7c?ia;;8?j`3290/=kl5fg9m5cg=i21dj>4?:%3ef?`a3g;mm7l4;nd2>5<#9oh1jk5a1gc9g>=hn90;6)?ib;de?k7ai3n07bki:18'5cd=no1e=ko5e:9la`<72-;mn7hi;o3ee?`<3foo6=4+1g`9bc=i9ok1==54oda94?"6nk0mj6`>f`825>=hmk0;6)?ib;de?k7ai3;976aja;29 4`e2ol0b290/=kl5fg9m5cg=9=10ch650;&2bg5:9l551=83.:jo4if:l2bd<6>21d==850;&2bg7:9l553=83.:jo4if:l2bd<6021d==:50;&2bg9:9l555=83.:jo4if:l2bd<6i21d==<50;&2bgb:9l557=83.:jo4if:l2bd<6k21dji4?:%3ef?`a3g;mm7?k;:me6?6=,8li6kh4n0db>4c<3fo<6=4+1g`9bc=i9ok1=k54o02g>5<#9oh1==m4n0db>5=5<#9oh1==m4n0db>7=54o031>5<#9oh1=5=5<#9oh1=7=54o7c94?=h>k0;66sm33c94?2=83:p(?>i:00;?M4682B9>?5f7583>>o58?0;66g94;29?j7ak3:17pl<2g83>0<729q/>=h51348L7773A89>6g84;29?l7al3:17d8k:188m32=831d=km50;9~f657290>6=4?{%03b?75>2B9==5G2308m22=831b=kj50;9j2a<722c=87>5;n3eg?6=3th8?<4?:483>5}#:9l1=?84H333?M45:2c<87>5;h3e`?6=3`5<2290;w)N5991C>?<4i6694?=n9on1<75f6e83>>o1<3:17b?ic;29?xd4<90;684?:1y'65`=9;<0D???;I016>o0<3:17d?id;29?l0c2900e;:50;9l5ce=831vn>:>:186>5<7s-8;j7?=6:J155=O:;80e::50;9j5cb=831b:i4?::k50?6=3f;mo7>5;|`007<72<0;6=u+21d9570<@;;;7E<=2:k40?6=3`;mh7>5;h4g>5<1<75`1ga94?=zj:8;6=4;:183!47n3;996F=119K674>1<75f1gf94?=n>=0;66a>fb83>>{e;;;1<7:50;2x 76a288>7E<>0:J167=n?=0;66g>fe83>>o1<3:17b?ic;29?xd34?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo:;b;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f12d29086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi89j50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`006<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<?i7>54;294~"58o0:>85G2028L7453`=?6=44i0dg>5<1<75`1ga94?=zj:>?6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm3ga94?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd4nm0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo=ie;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f6`a29086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi8=>50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`744<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<;>7>53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb520>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e<9?1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl;0783>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn9>7:180>5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a05?=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th?5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj=:h6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm41f94?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd38l0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo:>0;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f17629086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi8<<50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`756<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<:87>53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb536>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e<8<1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl;1683>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn9?6:180>5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a04d=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th?=n4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj=;n6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm40d94?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd3:90;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo:=1;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f14529086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi8?=50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`761<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<9:7>53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb504>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e<;21<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl;2883>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn95<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a07e=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th?>i4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj=8m6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm42394?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd3;;0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo:<3;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f15329086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi8>;50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`773<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<8;7>53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb51;>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e<:31<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl;3`83>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn9=k:180>5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a06c=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th??k4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj=>:6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm45094?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd3<:0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo:;4;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f12229086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi?n750;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`0gd<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb2a`>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e;jn1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn>j?:180>5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a7a7=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th8h?4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj:n>6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm3e494?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd4l>0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo=k8;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f6b>29086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi?io50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`0`g<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb2fg>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e;ml1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn>k=:180>5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a7`5=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th8i94?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj:o=6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm32694?3=83:p(?>i:005?M4682B9>?5f7583>>o6nm0;66g9d;29?l032900c50z&14c<6:?1C><>4H301?l132900eN5:;1b;94?::k2ba<722c=87>5;n3eg?6=3th8>;4?:583>5}#:9l1=?;4H333?M45:2c<87>5;h3e`?6=3`5<53;294~"58o0:4:5G2028 45b28;87E<=2:k277<722c:?>4?::m2b2<722wi>l=50;694?6|,;:m6<6n;I024>"6;l0:=95G2308m4552900e<=<:188m4532900c50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm2`394?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<54;294~"58o0:4l5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:j:4?::a61<7>t$32e>4>f3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4`02900qo<6f;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e:031<7:50;2x 76a282j7E<>0:&27`<69=1C>?<4i011>5<5<4650;694?6|,;:m6<6n;I024>"6;l0:=95G2308m4552900e<=<:188m4532900cl3:187>50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm28594?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<54;294~"58o0:4l5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:j:4?::a6<0=83>1<7>t$32e>4>f3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4`02900qo<6b;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e:0:1<7:50;2x 76a282j7E<>0:&27`<69=1C>?<4i011>5<5<5h50;694?6|,;:m6<6n;I024>"6;l0:=95G2308m4552900e<=<:188m4532900c<3:187>50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm29g94?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<54;294~"58o0:4l5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:j:4?::a6=b=83>1<7>t$32e>4>f3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4`02900qo<62;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e:1i1<7:50;2x 76a282j7E<>0:&27`<69=1C>?<4i011>5<5<5l50;694?6|,;:m6<6n;I024>"6;l0:=95G2308m4552900e<=<:188m4532900c50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm29694?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<54;294~"58o0:4l5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:j:4?::a6=5=83>1<7>t$32e>4>f3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4`02900qo<78;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e:181<7:50;2x 76a282j7E<>0:&27`<69=1C>?<4i011>5<5<5?50;694?6|,;:m6<6n;I024>"6;l0:=95G2308m4552900e<=<:188m4532900c3:187>50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm29294?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<54;294~"58o0:4l5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:j:4?::a62g=83>1<7>t$32e>4>f3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4`02900qo<8f;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e:>31<7:50;2x 76a282j7E<>0:&27`<69=1C>?<4i011>5<5<:650;694?6|,;:m6<6n;I024>"6;l0:=95G2308m4552900e<=<:188m4532900c50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm26594?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<54;294~"58o0:4l5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:j:4?::a620=83>1<7>t$32e>4>f3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4`02900qo<8b;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e:>?1<7:50;2x 76a282j7E<>0:&27`<69=1C>?<4i011>5<5<:=50;694?6|,;:m6<6n;I024>"6;l0:=95G2308m4552900e<=<:188m4532900c50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm26394?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<7>55;294~"58o0:4n5G2028 45b28o0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3e3?6=3th9o94?:583>5}#:9l1=5o4H333?!74m390D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`10<<72:0;6=u+21d95=1<@;;;7)?=8391<7>t$32e>4>03A8:<6*>3d81<>N5:;1b=><50;9j565=831d=k950;9~f72129086=4?{%03b?7??2B9==5+12g96==O:;80e<==:188m4542900c50z&14c<60>1C><>4$01f>7><@;897d?<2;29?l74;3:17b?i7;29?xd5<=0;6>4?:1y'65`=91=0D???;%30a?4?3A89>6g>3383>>o6;:0;66a>f683>>{e:=91<7=50;2x 76a282<7E<>0:&27`<502B9>?5f12094?=n9:91<75`1g594?=zj;>96=4<:183!47n3;3;6F=119'56c=:11C>?<4i011>5<5<53;294~"58o0:4:5G2028 45b2;20D?<=;h306?6=3`;8?7>5;n3e3?6=3th98=4?:283>5}#:9l1=594H333?!74m3837E<=2:k277<722c:?>4?::m2b2<722wi>>h50;194?6|,;:m6<68;I024>"6;l0946F=239j564=831b=>=50;9l5c1=831vn?=j:180>5<7s-8;j7?77:J155=#9:o1>55G2308m4552900e<=<:188k4`02900qo<869K646<,89n6?64H301?l74:3:17d?<3;29?j7a?3:17pl=3c83>6<729q/>=h51958L7773-;8i7<7;I016>o6;;0;66g>3283>>i6n>0;66sm22c94?5=83:p(?>i:0:4?M4682.:?h4=8:J167=n9:81<75f12194?=h9o=1<75rb31:>5<4290;w)N5991/=>k5299K6745<7>5;h307?6=3f;m;7>5;|`172<72:0;6=u+21d95=1<@;;;7)?t$32e>4>03A8:<6*>3d81<>N5:;1b=><50;9j565=831d=k950;9~f75229086=4?{%03b?7??2B9==5+12g96==O:;80e<==:188m4542900c50z&14c<60>1C><>4$01f>7><@;897d?<2;29?l74;3:17b?i7;29?xd5;:0;6>4?:1y'65`=91=0D???;%30a?4?3A89>6g>3383>>o6;:0;66a>f683>>{e::81<7=50;2x 76a282<7E<>0:&27`<502B9>?5f12094?=n9:91<75`1g594?=zj;?;6=4<:183!47n3;3;6F=119'56c=:11C>?<4i011>5<5<53;294~"58o0:4:5G2028 45b2;20D?<=;h306?6=3`;8?7>5;n3e3?6=3th98h4?:283>5}#:9l1=594H333?!74m3837E<=2:k277<722c:?>4?::m2b2<722wi>9j50;194?6|,;:m6<68;I024>"6;l0946F=239j564=831b=>=50;9l5c1=831vn?:l:180>5<7s-8;j7?77:J155=#9:o1>55G2308m4552900e<=<:188k4`02900qo<;b;297?6=8r.9869K646<,89n6?64H301?l74:3:17d?<3;29?j7a?3:17pl=4`83>6<729q/>=h51958L7773-;8i7<7;I016>o6;;0;66g>3283>>i6n>0;66sm25594?5=83:p(?>i:0:4?M4682.:?h4=8:J167=n9:81<75f12194?=h9o=1<75rb31`>5<4290;w)N5991/=>k5299K6745<7>5;h307?6=3f;m;7>5;|`07<<72:0;6=u+21d95=1<@;;;7)?t$32e>4>d3A8:<6*>3d825>N5:;1b=><50;9j565=831b=>:50;9j563=831d=k950;9~f650290>6=4?{%03b?7?k2B9==5+12g91>N5:;1b=><50;9j565=831b=>:50;9j563=831d=k950;9~f1?2290?6=4?{%03b?7?i2B9==5+12g9542<@;897d?<2;29?l74;3:17d?<4;29?j7a?3:17pl;9683>1<729q/>=h519c8L7773-;8i7?>4:J167=n9:81<75f12194?=n9:>1<75`1g594?=zj=326=4;:183!47n3;3m6F=119'56c=98>0D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`7=g<72=0;6=u+21d95=g<@;;;7)?N5:;1b=><50;9j565=831b=>:50;9l5c1=831vn97k:187>5<7s-8;j7?7a:J155=#9:o1=<:4H301?l74:3:17d?<3;29?l74<3:17b?i7;29?xd31o0;694?:1y'65`=91k0D???;%30a?76<2B9>?5f12094?=n9:91<75f12694?=h9o=1<75rb5c2>5<3290;w)N5991/=>k51068L7453`;8>7>5;h307?6=3`;887>5;n3e3?6=3th?5>4?:583>5}#:9l1=5o4H333?!74m3;:86F=239j564=831b=>=50;9j562=831d=k950;9~f7e1290>6=4?{%03b?7?k2B9==5+12g957d<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?i7;29?xd?8;0;694?:1y'65`=9;>0D???;I016>o0<3:17d8k:188m32=831d=km50;9~f=62290h>7>50z&14c<6nl1C><>4H301?_042jq26l4>2;30>4`=:909=7<=:04952<5;38?6p*>1c8267=#:9:1=k84$01e>33<,8>;6?k4$062>3c<,8>96:84$060>21<,8>?6:5+15797g=#9=<1n6*>4685g>"6<10n7)?;9;16?!73i38i7)?;b;0g?!73k3;9<6*>4e8252=#9=o1?=5+15d96>"6=9097)?:1;08 4352;1/=8=52:&211<53-;>97<4$075>7=#9<=1>6*>5981?!721380(<;n:39'50d=:2.:9n4=;%36`?4<,8?n6?5+14d96>"6>9097)?91;08 4052;1/=;=52:&221<53-;=97<4$045>7=#9?=1>6*>6981?!711380(<8n:39'53d=:2.::n4=;%35`?4<,8"6?9097)?81;08 4152;1/=:=52:&231<53-;<97<4$055>7=#9>=1>6*>7981?!701380(<9n:39'52d=:2.:;n4=;%34b?7<,82;6<5+12496>"6;>097)?<8;08 45>2;1/=>o52:&27g<53-;7=#:921=k84$01`>7=#9:n1>6*=1e8144=#:8o1>=?4nd494>h6810;7c3-;:o7?=2:&14g<63-8;;7?=2:&2<7<6:;1/=5=51308 4`a28l=7)5$0da>10f`81?>o3;3:1(2d:jl4;;:k64?6=,8li6984n0db>0=fc872>h6nh0=76g;e;29 4`e2=<0b5$0da>10f`8b?>o3i3:1(2d:jl4l;:k7a=fc872>h6nh0n76g:7;29 4`e2<<0b87>5$0da>00:6`>f`80?>o2:3:1(50;&2bg<2>2d:jl4:;:k6b?6=,8li6884n0db>3=fc862>h6nh0<76g:d;29 4`e2<<0b32c>n7>5$0da>00:6`>f`8a?>o213:1(2d:jl4k;:k65?6=,8li6884n0db>`=fc8:5>h6nh0;76g60;29 4`e20;0b5$0da><754i9a94?"6nk02=6`>f`87?>o?j3:1(92d:jl49;:k;=?6=,8li64?4n0db>2=fc8:5>h6nh0376g77;29 4`e20;0b5$0da><7f`8`?>o?:3:1(92d:jl4j;:k;4?6=,8li64?4n0db>c=l1<7*>fc8:5>h6nh0:<65f7d83>!7aj33:7c?ia;32?>o0l3:1(40<3`336=4+1g`9=4=i9ok1=:54i8594?"6nk02=6`>f`82<>=n1?0;6)?ib;;2?k7ai3;276g65;29 4`e20;0b92d:jl4>c:9j;o3ee?7c32c387>5$0da><75<#9oh15<5a1gc95c=fc8a6>h6nh0;76gm1;29 4`e2k80b5$0da>g454i`f94?"6nk0i>6`>f`87?>ofk3:1(2=fc8a6>h6nh0376gn8;29 4`e2k80b5$0da>g46`>f`8`?>of;3:1(c=fc8a6>h6nh0:<65f9g83>!7aj3h97c?ia;32?>o>m3:1(40<3`h26=4+1g`9f7=i9ok1=:54ic:94?"6nk0i>6`>f`82<>=nj>0;6)?ib;`1?k7ai3;276gm6;29 4`e2k80bc:9jf5<72-;mn7l=;o3ee?7c32cj97>5$0da>g45<#9oh1n?5a1gc95c=fc8aa>h6nh0;76gmd;29 4`e2ko0b5$0da>gc54ib694?"6nk0h?6`>f`83?>od:3:1(6=5<#9oh1><84n0db>4=5<#9oh1><84n0db>6=5<#9oh1>4=5<#9oh1>6=>o083:17d9>:188m47>2900e?>;:188m7622900ej:188kac=83.:jo4kd:l2bd<732eoo7>5$0da>abf`81?>ic13:1(0=fc8g`>h6nh0=76ak5;29 4`e2mn0b5$0da>abf`8b?>ic93:1(a=fc8g`>h6nh0n76alc;29 4`e2mn0b;:m`=?6=,8li6ij4n0db>44<3fi36=4+1g`9`a=i9ok1=>54ob594?"6nk0oh6`>f`820>=hk?0;6)?ib;fg?k7ai3;>76aj5;29 4`e2mn0b10ch=50;&2bg8:9la7<72-;mn7jk;o3ee?7>32en=7>5$0da>ab5<#9oh1hi5a1gc95g=fc8g`>h6nh0:o65`dc83>!7aj3no7c?ia;3g?>ic83:1(5<#9oh1jk5a1gc96>=hnk0;6)?ib;de?k7ai3907bhn:18'5cd=no1e=ko54:9lb<<72-;mn7hi;o3ee?3<3fl36=4+1g`9bc=i9ok1:65`f683>!7aj3lm7c?ia;58?j`1290/=kl5fg9m5cg=021dj84?:%3ef?`a3g;mm774;nd7>5<#9oh1jk5a1gc9e>=hn:0;6)?ib;de?k7ai3h07bh>:18'5cd=no1e=ko5c:9lb5<72-;mn7hi;o3ee?b<3fom6=4+1g`9bc=i9ok1i65`ed83>!7aj3lm7c?ia;d8?jcc290/=kl5fg9m5cg=9910chm50;&2bg1:9lag<72-;mn7hi;o3ee?7532enm7>5$0da>c`5<#9oh1jk5a1gc951=fc8eb>h6nh0:965`11594?"6nk0mj6`>f`822>=h99<1<7*>fc8eb>h6nh0:;65`11794?"6nk0mj6`>f`82<>=h99>1<7*>fc8eb>h6nh0:565`11194?"6nk0mj6`>f`82e>=h9981<7*>fc8eb>h6nh0:n65`11394?"6nk0mj6`>f`82g>=hnm0;6)?ib;de?k7ai3;o76ai2;29 4`e2ol0bk:18'5cd=99i0bn:18'5cd=99i0b290/=kl511a8j4`f2:10ci:18'5cd=98;0b5<7s-8;j7?ie:J155=O:;80V;=5cz;9e?752891=k4=0;02>74=9?0:;7<<:369y!76j3;9>6*=0182b3=#9:l1:85+15296`=#9=;1:h5+150933=#9=91;:5+15693>"6<<08n6*>478a?!73?32:?0(<:n:3`8 42e2;n0(<:l:003?!73l3;:;6*>4d804>"687<4$076>7=#9<<1>6*>5681?!720380(<;6:39'50g=:2.:9o4=;%36g?4<,8?o6?5+14g96>"6=o097)?90;08 4062;1/=;<52:&226<53-;=87<4$046>7=#9?<1>6*>6681?!710380(<86:39'53g=:2.::o4=;%35g?4<,8"6>o097)?80;08 4162;1/=:<52:&236<53-;<87<4$056>7=#9><1>6*>7681?!700380(<96:39'52g=:2.:;o4=;%34g?4<,8=m6<5+19295>"6;?097)?<7;08 45?2;1/=>752:&27d<53-;8n7<4$05g>7=#9>o1>6*=0982b3=#9:i1>6*>3e81?!46l38;=6*=1d8144=im?0;7c??8;28j765201e>==59:l15c<>3g89<774$03`>4453-8;n7?4$324>4453-;3>7?=2:&2<6<6:;1/=kh51g48 76d281b8:4?:%3ef?213g;mm7>4;h66>5<#9oh18;5a1gc95>=n<=0;6)?ib;65?k7ai3807d:<:18'5cd=!7aj3>=7c?ia;48?l2b290/=kl5479m5cg=?21b8i4?:%3ef?213g;mm764;h6`>5<#9oh18;5a1gc9=>=n36=4+1g`903=i9ok1h65f4083>!7aj3>=7c?ia;g8?l30290/=kl5579m5cg=821b984?:%3ef?313g;mm7?4;h77>5<#9oh19;5a1gc96>=n=:0;6)?ib;75?k7ai3907d;=:18'5cd==?1e=ko54:9j25<72-;mn7;9;o3ee?3<3`?m6=4+1g`913=i9ok1:65f5d83>!7aj3?=7c?ia;58?l3c290/=kl5579m5cg=021b9n4?:%3ef?313g;mm774;h7a>5<#9oh19;5a1gc9e>=n=h0;6)?ib;75?k7ai3h07d;6:18'5cd==?1e=ko5c:9j1=<72-;mn7;9;o3ee?b<3`?:6=4+1g`913=i9ok1i65f9383>!7aj33:7c?ia;28?l?7290/=kl5909m5cg=921b4h4?:%3ef??63g;mm7<4;h:g>5<#9oh15<5a1gc97>=n0j0;6)?ib;;2?k7ai3>07d6m:18'5cd=181e=ko55:9j;o3ee?0<3`226=4+1g`9=4=i9ok1;65f8983>!7aj33:7c?ia;:8?l>0290/=kl5909m5cg=121b4;4?:%3ef??63g;mm7o4;h:6>5<#9oh15<5a1gc9f>=n0:0;6)?ib;;2?k7ai3i07d6=:18'5cd=181e=ko5d:9j<4<72-;mn77>;o3ee?c<3`2;6=4+1g`9=4=i9ok1j65f7g83>!7aj33:7c?ia;33?>o0m3:1(43<3`326=4+1g`9=4=i9ok1=;54i8:94?"6nk02=6`>f`823>=n1>0;6)?ib;;2?k7ai3;376g66;29 4`e20;0b92d:jl4>b:9j=6<72-;mn77>;o3ee?7d32c3j7>5$0da><75<#9oh15<5a1gc95`=31<7*>fc8:5>h6nh0:j65fb283>!7aj3h97c?ia;28?ld6290/=kl5b39m5cg=921bmk4?:%3ef?d53g;mm7<4;hcf>5<#9oh1n?5a1gc97>=nim0;6)?ib;`1?k7ai3>07dol:18'5cd=j;1e=ko55:9jeg<72-;mn7l=;o3ee?0<3`kj6=4+1g`9f7=i9ok1;65fa883>!7aj3h97c?ia;:8?lg?290/=kl5b39m5cg=121bm:4?:%3ef?d53g;mm7o4;hc5>5<#9oh1n?5a1gc9f>=ni=0;6)?ib;`1?k7ai3i07do<:18'5cd=j;1e=ko5d:9je7<72-;mn7l=;o3ee?c<3`k:6=4+1g`9f7=i9ok1j65fa183>!7aj3h97c?ia;33?>o>n3:1(43<3`hj6=4+1g`9f7=i9ok1=;54ic;94?"6nk0i>6`>f`823>=nj10;6)?ib;`1?k7ai3;376gm7;29 4`e2k80bb:9jf1<72-;mn7l=;o3ee?7d32ci<7>5$0da>g45<#9oh1n?5a1gc95`=fc8a6>h6nh0:j65fbg83>!7aj3hn7c?ia;28?ldc290/=kl5bd9m5cg=921bnn4?:%3ef?db3g;mm7<4;h`a>5<#9oh1nh5a1gc97>=nk=0;6)?ib;a0?k7ai3:07dm=:18'5cd=k:1e=ko51:9jg4<72-;mn7m<;o3ee?4<3`i;6=4+1g`9g6=i9ok1?65f20594?"6nk09=;5a1gc94>=n:8?1<7*>fc8153=i9ok1=65f20694?"6nk09=;5a1gc96>=n:891<7*>fc8153=i9ok1?65f20a94?"6nk09=o5a1gc94>=n:8k1<7*>fc815g=i9ok1=65f20;94?"6nk09=o5a1gc96>=n:821<7*>fc815g=i9ok1?65f6983>>o113:17d9?:188m27=831b=<750;9j652=831b>=;50;9j54g=831b>=j50;9j65c=831dhh4?:%3ef?bc3g;mm7>4;nf`>5<#9oh1hi5a1gc95>=hlh0;6)?ib;fg?k7ai3807bj6:18'5cd=lm1e=ko53:9l`=<72-;mn7jk;o3ee?2<3fn<6=4+1g`9`a=i9ok1965`d783>!7aj3no7c?ia;48?jb2290/=kl5de9m5cg=?21dh94?:%3ef?bc3g;mm764;nf0>5<#9oh1hi5a1gc9=>=hl;0;6)?ib;fg?k7ai3k07bj>:18'5cd=lm1e=ko5b:9lgc<72-;mn7jk;o3ee?e<3fin6=4+1g`9`a=i9ok1h65`ce83>!7aj3no7c?ia;g8?jed290/=kl5de9m5cg=n21doo4?:%3ef?bc3g;mm7??;:m`e?6=,8li6ij4n0db>47<3fi26=4+1g`9`a=i9ok1=?54ob:94?"6nk0oh6`>f`827>=hk>0;6)?ib;fg?k7ai3;?76al6;29 4`e2mn0b7:9la6<72-;mn7jk;o3ee?7?32en>7>5$0da>ab5<#9oh1hi5a1gc95d=fc8g`>h6nh0:n65`dg83>!7aj3no7c?ia;3`?>icj3:1(50;&2bg4=fc8eb>h6nh0976aib;29 4`e2ol0b5$0da>c`f`85?>ia?3:1(10ck850;&2bg<=1<7*>fc8eb>h6nh0j76ai3;29 4`e2ol0b5$0da>c`f`8f?>ibm3:1(0:9laf<72-;mn7hi;o3ee?7632enn7>5$0da>c`5<#9oh1jk5a1gc956=fc8eb>h6nh0:865`e983>!7aj3lm7c?ia;36?>i68>0;6)?ib;de?k7ai3;=76a>0783>!7aj3lm7c?ia;34?>i68<0;6)?ib;de?k7ai3;376a>0583>!7aj3lm7c?ia;3:?>i68:0;6)?ib;de?k7ai3;j76a>0383>!7aj3lm7c?ia;3a?>i6880;6)?ib;de?k7ai3;h76aid;29 4`e2ol0bf:9l55b=83.:jo4>0b9m5cg=821d==l50;&2bg<68j1e=ko51:9l55g=83.:jo4>0b9m5cg=:21d==750;&2bg<68j1e=ko53:9l544=83.:jo4>109m5cg=821d=<>50;&2bg<6981e=ko51:9l55`=83.:jo4>109m5cg=:21d==k50;&2bg<6981e=ko53:9l2d<722e=n7>5;|`4b4<72=0;6=u+21d95=g<@;;;7)?N5:;1b=><50;9j565=831b=>:50;9l5c1=831vn:ki:187>5<7s-8;j7?7a:J155=#9:o1=<:4H301?l74:3:17d?<3;29?l74<3:17b?i7;29?xd0mk0;694?:1y'65`=91k0D???;%30a?76<2B9>?5f12094?=n9:91<75f12694?=h9o=1<75rb6g:>5<3290;w)N5991/=>k51068L7453`;8>7>5;h307?6=3`;887>5;n3e3?6=3th5}#:9l1=5o4H333?!74m3;:86F=239j564=831b=>=50;9j562=831d=k950;9~f2c2290?6=4?{%03b?7?i2B9==5+12g9542<@;897d?<2;29?l74;3:17d?<4;29?j7a?3:17pl8e283>1<729q/>=h519c8L7773-;8i7?>4:J167=n9:81<75f12194?=n9:>1<75`1g594?=zj>o:6=4;:183!47n3;3m6F=119'56c=98>0D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`4`c<72=0;6=u+21d95=g<@;;;7)?N5:;1b=><50;9j565=831b=>:50;9l5c1=831vn:jk:187>5<7s-8;j7?7a:J155=#9:o1=<:4H301?l74:3:17d?<3;29?l74<3:17b?i7;29?xd0lk0;694?:1y'65`=91k0D???;%30a?76<2B9>?5f12094?=n9:91<75f12694?=h9o=1<75rb6f:>5<3290;w)N5991/=>k51068L7453`;8>7>5;h307?6=3`;887>5;n3e3?6=3th5}#:9l1=5o4H333?!74m3;:86F=239j564=831b=>=50;9j562=831d=k950;9~f2b4290?6=4?{%03b?7?i2B9==5+12g9542<@;897d?<2;29?l74;3:17d?<4;29?j7a?3:17pl8d083>1<729q/>=h519c8L7773-;8i7?>4:J167=n9:81<75f12194?=n9:>1<75`1g594?=zj>im6=4;:183!47n3;3m6F=119'56c=98>0D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`4ga<72=0;6=u+21d95=g<@;;;7)?N5:;1b=><50;9j565=831b=>:50;9l5c1=831vn:mm:187>5<7s-8;j7?7a:J155=#9:o1=<:4H301?l74:3:17d?<3;29?l74<3:17b?i7;29?xd0k00;694?:1y'65`=91k0D???;%30a?76<2B9>?5f12094?=n9:91<75f12694?=h9o=1<75rb6a4>5<3290;w)N5991/=>k51068L7453`;8>7>5;h307?6=3`;887>5;n3e3?6=3th5}#:9l1=5o4H333?!74m3;:86F=239j564=831b=>=50;9j562=831d=k950;9~f2e4290?6=4?{%03b?7?i2B9==5+12g9542<@;897d?<2;29?l74;3:17d?<4;29?j7a?3:17pl8fg83>1<729q/>=h519c8L7773-;8i7?>4:J167=n9:81<75f12194?=n9:>1<75`1g594?=zj>lo6=4;:183!47n3;3m6F=119'56c=98>0D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`4bg<72=0;6=u+21d95=g<@;;;7)?N5:;1b=><50;9j565=831b=>:50;9l5c1=831vn:h6:187>5<7s-8;j7?7a:J155=#9:o1=<:4H301?l74:3:17d?<3;29?l74<3:17b?i7;29?xd0n>0;694?:1y'65`=91k0D???;%30a?76<2B9>?5f12094?=n9:91<75f12694?=h9o=1<75rb6d6>5<3290;w)N5991/=>k51068L7453`;8>7>5;h307?6=3`;887>5;n3e3?6=3th4?:583>5}#:9l1=5o4H333?!74m3;:86F=239j564=831b=>=50;9j562=831d=k950;9~f2cc290?6=4?{%03b?7?i2B9==5+12g9542<@;897d?<2;29?l74;3:17d?<4;29?j7a?3:17pl8d683>1<729q/>=h519c8L7773-;8i7?>4:J167=n9:81<75f12194?=n9:>1<75`1g594?=zj>i:6=4;:183!47n3;3m6F=119'56c=98>0D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`;44<72=0;6=u+21d95=g<@;;;7)?N5:;1b=><50;9j565=831b=>:50;9l5c1=831vn:li:186>5<7s-8;j7?7c:J155=#9:o1=??4H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7a?3:17pl8be83>1<729q/>=h519c8L7773-;8i797;I016>o6;;0;66g>3283>>o6;=0;66a>f683>>{e?181<7m=:183!47n3;mi6F=119K67445=9o09<7<>:30953<6?3886?:5}%32f?75:2.9<=4>f79'56`=><1/=9>52d9'517=>l1/=9<5779'515=?>1/=9:57:&200<4j2.:8;4m;%373?0d3-;?47k4$06:>63<,8>j6?l4$06a>7b<,8>h6<<7<4$072>7=#9<81>6*>5281?!72<380(<;::39'500=:2.:9:4=;%36"6=k097)?:c;08 43c2;1/=8k52:&21c<53-;=<7<4$042>7=#9?81>6*>6281?!71<380(<8::39'530=:2.:::4=;%35"6>k097)?9c;08 40c2;1/=;k52:&22c<53-;<<7<4$052>7=#9>81>6*>7281?!70<380(<9::39'520=:2.:;:4=;%34"6?k097)?8c;08 41a281/=5>51:&273<53-;8;7<4$01;>7=#9:31>6*>3`81?!74j380(<9k:39'52c=:2.9<54>f79'56e=:2.:?i4=;%02`?4792.9=h4=009ma3<73g;;47>4n321><=i:99156`=1g8:?k458330(8:001?!7?:3;9>6*>828267=#9ol1=k84$32`>4=n<>0;6)?ib;65?k7ai3:07d:::18'5cd=86=4+1g`903=i9ok1?65f4383>!7aj3>=7c?ia;68?l37290/=kl5479m5cg==21b8k4?:%3ef?213g;mm784;h6f>5<#9oh18;5a1gc93>=nj6=4+1g`903=i9ok1n65f4883>!7aj3>=7c?ia;a8?l2?290/=kl5479m5cg=l21b8<4?:%3ef?213g;mm7k4;h74>5<#9oh19;5a1gc94>=n=<0;6)?ib;75?k7ai3;07d;;:18'5cd==?1e=ko52:9j16<72-;mn7;9;o3ee?5<3`?96=4+1g`913=i9ok1865f6183>!7aj3?=7c?ia;78?l3a290/=kl5579m5cg=>21b9h4?:%3ef?313g;mm794;h7g>5<#9oh19;5a1gc9<>=n=j0;6)?ib;75?k7ai3307d;m:18'5cd==?1e=ko5a:9j1d<72-;mn7;9;o3ee?d<3`?26=4+1g`913=i9ok1o65f5983>!7aj3?=7c?ia;f8?l36290/=kl5579m5cg=m21b5?4?:%3ef??63g;mm7>4;h;3>5<#9oh15<5a1gc95>=n0l0;6)?ib;;2?k7ai3807d6k:18'5cd=181e=ko53:9j;o3ee?2<3`2i6=4+1g`9=4=i9ok1965f8`83>!7aj33:7c?ia;48?l>>290/=kl5909m5cg=?21b454?:%3ef??63g;mm764;h:4>5<#9oh15<5a1gc9=>=n0?0;6)?ib;;2?k7ai3k07d6::18'5cd=181e=ko5b:9j<6<72-;mn77>;o3ee?e<3`296=4+1g`9=4=i9ok1h65f8083>!7aj33:7c?ia;g8?l>7290/=kl5909m5cg=n21b;k4?:%3ef??63g;mm7??;:k4a?6=,8li64?4n0db>47<3`=o6=4+1g`9=4=i9ok1=?54i6a94?"6nk02=6`>f`827>=n?k0;6)?ib;;2?k7ai3;?76g8a;29 4`e20;0b290/=kl5909m5cg=9?10e4650;&2bg<>92d:jl4>7:9j=2<72-;mn77>;o3ee?7?32c2:7>5$0da><75<#9oh15<5a1gc95d=1<7*>fc8:5>h6nh0:n65f9283>!7aj33:7c?ia;3`?>o?n3:1(4?:%3ef?d53g;mm7>4;h`2>5<#9oh1n?5a1gc95>=nio0;6)?ib;`1?k7ai3807doj:18'5cd=j;1e=ko53:9jea<72-;mn7l=;o3ee?2<3`kh6=4+1g`9f7=i9ok1965fac83>!7aj3h97c?ia;48?lgf290/=kl5b39m5cg=?21bm44?:%3ef?d53g;mm764;hc;>5<#9oh1n?5a1gc9=>=ni>0;6)?ib;`1?k7ai3k07do9:18'5cd=j;1e=ko5b:9je1<72-;mn7l=;o3ee?e<3`k86=4+1g`9f7=i9ok1h65fa383>!7aj3h97c?ia;g8?lg6290/=kl5b39m5cg=n21bm=4?:%3ef?d53g;mm7??;:k:b?6=,8li6o<4n0db>47<3`3n6=4+1g`9f7=i9ok1=?54i8f94?"6nk0i>6`>f`827>=n1j0;6)?ib;`1?k7ai3;?76g6b;29 4`e2k80b7:9jf=<72-;mn7l=;o3ee?7?32ci;7>5$0da>g45<#9oh1n?5a1gc95d=fc8a6>h6nh0:n65fb583>!7aj3h97c?ia;3`?>oe83:1(4;h`g>5<#9oh1nh5a1gc95>=njj0;6)?ib;`f?k7ai3807dlm:18'5cd=jl1e=ko53:9jg1<72-;mn7m<;o3ee?6<3`i96=4+1g`9g6=i9ok1=65fc083>!7aj3i87c?ia;08?le7290/=kl5c29m5cg=;21b><950;&2bg<59?1e=ko50:9j643=83.:jo4=179m5cg=921b><:50;&2bg<59?1e=ko52:9j645=83.:jo4=179m5cg=;21b><750;&2bg<59k1e=ko52:9j64>=83.:jo4=1c9m5cg=;21b:54?::k5=?6=3`=;6=44i6394?=n9831<75f21694?=n:9?1<75f10c94?=n:9n1<75f21g94?=hll0;6)?ib;fg?k7ai3:07bjl:18'5cd=lm1e=ko51:9l`d<72-;mn7jk;o3ee?4<3fn26=4+1g`9`a=i9ok1?65`d983>!7aj3no7c?ia;68?jb0290/=kl5de9m5cg==21dh;4?:%3ef?bc3g;mm784;nf6>5<#9oh1hi5a1gc93>=hl=0;6)?ib;fg?k7ai3207bj<:18'5cd=lm1e=ko59:9l`7<72-;mn7jk;o3ee?g<3fn:6=4+1g`9`a=i9ok1n65`cg83>!7aj3no7c?ia;a8?jeb290/=kl5de9m5cg=l21doi4?:%3ef?bc3g;mm7k4;na`>5<#9oh1hi5a1gc9b>=hkk0;6)?ib;fg?k7ai3;;76ala;29 4`e2mn0b290/=kl5de9m5cg=9;10cn650;&2bg3:9lg2<72-;mn7jk;o3ee?7332eh:7>5$0da>ab5<#9oh1hi5a1gc953=1<7*>fc8g`>h6nh0:;65`e283>!7aj3no7c?ia;3;?>ib:3:1(:18'5cd=lm1e=ko51`98k`6=83.:jo4kd:l2bd<6j21dhk4?:%3ef?bc3g;mm7?l;:mgf?6=,8li6ij4n0db>4b<3fn;6=4+1g`9`a=i9ok1=h54ob794?"6nk0oh6`>f`82b>=h99:1<7*>fc8eb>h6nh0;76aie;29 4`e2ol0b5$0da>c`54ogc94?"6nk0mj6`>f`87?>ia13:1(2=fc8eb>h6nh0376ai5;29 4`e2ol0b5$0da>c`f`8`?>ia83:1(c=fc8eb>h6nh0:<65`eb83>!7aj3lm7c?ia;32?>ibj3:1(5$0da>c`5<#9oh1jk5a1gc95`=fc8eb>h6nh0:j65`11f94?"6nk0:=h99h1<7*>fc824f=i9ok1=65`11c94?"6nk0:=h9931<7*>fc824f=i9ok1?65`10094?"6nk0:=<5a1gc94>=h98:1<7*>fc8254=i9ok1=65`11d94?"6nk0:=<5a1gc96>=h99o1<7*>fc8254=i9ok1?65`6`83>>i1j3:17pl88283>f4=83:p(?>i:0df?M4682B9>?5U628`<4>f;03>77=:;0::7?8:319612.:?k495:&205<5m2.:8<49e:&207<0>2.:8>487:&201<03-;?97=m;%372?d<,8><6;m4$06;>`=#9=31?85+15c96g=#9=h1>i5+15a9576<,8>o67=#9<;1>6*>5381?!72;380(<;;:39'503=:2.:9;4=;%363?4<,8?36?5+14;96>"6=h097)?:b;08 43d2;1/=8j52:&21`<53-;>j7<4$043>7=#9?;1>6*>6381?!71;380(<8;:39'533=:2.::;4=;%353?4<,8<36?5+17;96>"6>h097)?9b;08 40d2;1/=;j52:&22`<53-;=j7<4$053>7=#9>;1>6*>7381?!70;380(<9;:39'523=:2.:;;4=;%343?4<,8=36?5+16;96>"6?h097)?8b;08 41d2;1/=:h51:&2<5<63-;8:7<4$014>7=#9:21>6*>3881?!74i380(<=m:39'52b=:2.:;h4=;%032.:?n4=;%30`?4<,;;o6?>>;%02a?4792dn:7>4n02;>5=i:98156`=028:?k46n330b?m:09'651=9;80(<6=:001?!7?;3;9>6*>fg82b3=#:9i1=6g;7;29 4`e2=<0b5$0da>10f`80?>o3:3:1(50;&2bg<3>2d:jl4:;:k7b?6=,8li6984n0db>3=fc872>h6nh0<76g;d;29 4`e2=<0b32c?n7>5$0da>10f`8a?>o313:1(2d:jl4k;:k75?6=,8li6984n0db>`=fc862>h6nh0;76g:5;29 4`e2<<0b?7>5$0da>0054i4094?"6nk0>:6`>f`87?>o183:1(2d:jl49;:k6a?6=,8li6884n0db>2=fc862>h6nh0376g:c;29 4`e2<<0bm7>5$0da>00:6`>f`8`?>o203:1(2d:jl4j;:k:6?6=,8li64?4n0db>5=fc8:5>h6nh0:76g7e;29 4`e20;0b5$0da><7f`86?>o?i3:1(92d:jl48;:k;==fc8:5>h6nh0276g76;29 4`e20;0b5$0da><7f`8g?>o?93:1(50;&2bg<>92d:jl4i;:k4b?6=,8li64?4n0db>46<3`=n6=4+1g`9=4=i9ok1=<54i6f94?"6nk02=6`>f`826>=n?j0;6)?ib;;2?k7ai3;876g8b;29 4`e20;0b92d:jl4>6:9j==<72-;mn77>;o3ee?7032c2;7>5$0da><75<#9oh15<5a1gc95<=fc8:5>h6nh0:m65f9583>!7aj33:7c?ia;3a?>o>;3:1(5=fc8a6>h6nh0:76gnf;29 4`e2k80b5$0da>g46`>f`86?>ofj3:1(==fc8a6>h6nh0276gn7;29 4`e2k80b5$0da>g46`>f`8g?>of:3:1(46<3`3m6=4+1g`9f7=i9ok1=<54i8g94?"6nk0i>6`>f`826>=n1m0;6)?ib;`1?k7ai3;876g6c;29 4`e2k80b6:9jf<<72-;mn7l=;o3ee?7032ci47>5$0da>g45<#9oh1n?5a1gc95<=fc8a6>h6nh0:m65fb483>!7aj3h97c?ia;3a?>oe<3:1(5=fc8aa>h6nh0:76gmc;29 4`e2ko0b5$0da>f5f`82?>od93:1(50;&2bg6:l2bd<732c9=84?:%3ef?46>2d:jl4>;:k151<72-;mn7<>6:l2bd<532c9=>4?:%3ef?46>2d:jl4<;:k15f<72-;mn7<>b:l2bd<732c9=l4?:%3ef?46j2d:jl4>;:k15<<72-;mn7<>b:l2bd<532c9=54?:%3ef?46j2d:jl4<;:k51883>>o58=0;66g=0483>>o69h0;66g=0e83>>o58l0;66ake;29 4`e2mn0b5$0da>abf`80?>ic03:1(3=fc8g`>h6nh0<76ak4;29 4`e2mn0b32eo>7>5$0da>abf`8a?>idn3:1(`=fc8g`>h6nh0m76alb;29 4`e2mn0b2:9lg=<72-;mn7jk;o3ee?7432eh;7>5$0da>ab5<#9oh1hi5a1gc950=fc8g`>h6nh0::65`e583>!7aj3no7c?ia;34?>ib;3:1(4e<3fni6=4+1g`9`a=i9ok1=i54oe294?"6nk0oh6`>f`82a>=hk<0;6)?ib;fg?k7ai3;m76a>0183>!7aj3lm7c?ia;28?j`b290/=kl5fg9m5cg=921djn4?:%3ef?`a3g;mm7<4;nda>5<#9oh1jk5a1gc97>=hnh0;6)?ib;de?k7ai3>07bh6:18'5cd=no1e=ko55:9lb=<72-;mn7hi;o3ee?0<3fl<6=4+1g`9bc=i9ok1;65`f783>!7aj3lm7c?ia;:8?j`2290/=kl5fg9m5cg=121dj94?:%3ef?`a3g;mm7o4;nd0>5<#9oh1jk5a1gc9f>=hn80;6)?ib;de?k7ai3i07bh?:18'5cd=no1e=ko5d:9lac<72-;mn7hi;o3ee?c<3fon6=4+1g`9bc=i9ok1j65`ee83>!7aj3lm7c?ia;33?>ibk3:1(43<3f;;;7>5$0da>c`41<3f;;97>5$0da>c`4?<3f;;?7>5$0da>c`4d<3f;;=7>5$0da>c`5<#9oh1jk5a1gc95a=fc8eb>h6nh0:i65`e683>!7aj3lm7c?ia;3e?>i68m0;6)?ib;33g>h6nh0;76a>0c83>!7aj3;;o6`>f`82?>i68h0;6)?ib;33g>h6nh0976a>0883>!7aj3;;o6`>f`80?>i69;0;6)?ib;325>h6nh0;76a>1183>!7aj3;:=6`>f`82?>i68o0;6)?ib;325>h6nh0976a>0d83>!7aj3;:=6`>f`80?>i1i3:17b8m:188yg10;3:187>50z&14c<60h1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm76394?2=83:p(?>i:0:b?M4682.:?h4>159K6745<5<54;294~"58o0:4l5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:j:4?::a33d=83>1<7>t$32e>4>f3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4`02900qo999;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e??=1<7:50;2x 76a282j7E<>0:&27`<69=1C>?<4i011>5<5<"6;l0:=95G2308m4552900e<=<:188m4532900c50z&14c<60h1C><>4$01f>37<@;897d?<2;29?l74;3:17d?<4;29?j7a?3:17pl85g83>1<729q/>=h519c8L7773-;8i78>;I016>o6;;0;66g>3283>>o6;=0;66a>f683>>{e?0:&27`<192B9>?5f12094?=n9:91<75f12694?=h9o=1<75rb67a>5<3290;w)N5991/=>k5609K6745<5<;7>54;294~"58o0:4l5G2028 45b2?;0D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`410<72=0;6=u+21d95=g<@;;;7)?"6;l0==6F=239j564=831b=>=50;9j562=831d=k950;9~f236290?6=4?{%03b?7?i2B9==5+12g924=O:;80e<==:188m4542900e<=;:188k4`02900qo9;f;290?6=8r.98`9K646<,89n6;?4H301?l74:3:17d?<3;29?l74<3:17b?i7;29?xd06g>3383>>o6;:0;66g>3583>>i6n>0;66sm75`94?2=83:p(?>i:0:b?M4682.:?h491:J167=n9:81<75f12194?=n9:>1<75`1g594?=zj>>26=4;:183!47n3;3m6F=119'56c=>81C>?<4i011>5<5<7>5;h307?6=3`;887>5;n3e3?6=3th<884?:583>5}#:9l1=5o4H333?!74m3<:7E<=2:k277<722c:?>4?::k271<722e:j:4?::a3=7=83>1<7>t$32e>4>f3A8:<6*>3d855>N5:;1b=><50;9j565=831b=>:50;9l5c1=831vn:9i:187>5<7s-8;j7?7a:J155=#9:o1:<5G2308m4552900e<=<:188m4532900c50z&14c<60h1C><>4$01f>37<@;897d?<2;29?l74;3:17d?<4;29?j7a?3:17pl87c83>1<729q/>=h519c8L7773-;8i78>;I016>o6;;0;66g>3283>>o6;=0;66a>f683>>{e?>31<7:50;2x 76a282j7E<>0:&27`<192B9>?5f12094?=n9:91<75f12694?=h9o=1<75rb654>5<3290;w)N5991/=>k5609K6745<5<54;294~"58o0:4l5G2028 45b2?;0D?<=;h306?6=3`;8?7>5;h300?6=3f;m;7>5;|`42c<72=0;6=u+21d95=g<@;;;7)?"6;l0==6F=239j564=831b=>=50;9j562=831d=k950;9~f224290?6=4?{%03b?7?i2B9==5+12g924=O:;80e<==:188m4542900e<=;:188k4`02900qo;m1;290?6=8r.9249K646<@;897d9;:188m4`c2900e;:50;9l5ce=831vn8l6:187>5<7s-8;j7?=5:J155=O:;80e::50;9j5cb=831b:94?::m2bf<722wi9n;50;794?6|,;:m6<<9;I024>N5:;1b;94?::k2ba<722c=h7>5;h47>5<5<=0;66a>fb83>>{e=j=1<7;50;2x 76a288=7E<>0:J167=n?=0;66g>fe83>>o1l3:17d8;:188k4`d2900qo8=1;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f34529086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi:9750;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`511<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<;7>53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb77;>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e><31<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl95`83>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn;;l:180>5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a275=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th=>h4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj?>96=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm65194?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd1<=0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo8;5;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f32129086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi:9950;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`50=<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb76a>5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e>=i1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl94e83>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn;:i:180>5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a206=8391<7>t$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th=9<4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<5<1<75`1ga94?=zj??86=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm64794?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd1=?0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo;k8;291?6=8r.9289K646<@;897d9;:188m7612900e;j50;9j21<722e:jn4?::a1a?=83?1<7>t$32e>4413A8:<6F=239j31<722c:ji4?::k5`?6=3`5<55;294~"58o0:>;5G2028L7453`=?6=44i0dg>5<>i6nj0;66sm5e`94?3=83:p(?>i:005?M4682B9>?5f7583>>o6nm0;66g9d;29?l032900c50z&14c<6:?1C><>4H301?l132900eN5:;1b;94?::k2ba<722c=h7>5;h47>5<5<=0;66a>fb83>>{e=ml1<7;50;2x 76a288=7E<>0:J167=n?=0;66g>fe83>>o1l3:17d8;:188k4`d2900qo;la;291?6=8r.9279K646<@;897d9;:188m4`c2900e;j50;9j21<722e:jn4?::a1fd=83?1<7>t$32e>4413A8:<6F=239j31<722c:ji4?::k5`?6=3`5<7>54;294~"58o0:>85G2028L7453`=?6=44i0dg>5<1<75`1ga94?=zj>1<75f1gf94?=n>=0;66a>fb83>>{e=ko1<7;50;2x 76a288=7E<>0:J167=n?=0;66g>fe83>>o1l3:17d8;:188k4`d2900qo;mf;291?6=8r.9279K646<@;897d9;:188m4`c2900e;j50;9j21<722e:jn4?::a1f6=83?1<7>t$32e>4413A8:<6F=239j31<722c:ji4?::k5`?6=3`5<55;294~"58o0:>;5G2028L7453`=?6=44i0dg>5<>i6nj0;66sm59c94?1=83:p(?>i:32b?M4682B9>?5+12g94>o4k3:17d=k:188m6c=831b?k4?::k5b?6=3`=?6=44o0d`>5<h7>53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb4:a>5<0290;w)N5991C>?<4$01f>5=n;j0;66gh50;9j2c<722c<87>5;n3eg?6=3th=9h4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<>o4m3:17d=i:188m3`=831b;94?::m2bf<722wi:?:50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`60;6=u+21d965g<@;;;7E<=2:&27`<73`9h6=44i2f94?=n;l0;66g5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a1=b=83=1<7>t$32e>76f3A8:<6F=239'56c=82c8o7>5;h1g>5<>o1n3:17d9;:188k4`d2900qo890;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f00a290<6=4?{%03b?47i2B9==5G2308 45b291b?n4?::k0`?6=3`9n6=44i2d94?=n>o0;66g84;29?j7ak3:17pl92483>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<58h1C><>4H301?!74m3:0e>m50;9j7a<722c8i7>5;h1e>5<>i6nj0;66sm63494?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd2?:0;6:4?:1y'65`=:9k0D???;I016>"6;l0;7d=l:188m6b=831b?h4?::k0b?6=3`5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e=>;1<7950;2x 76a2;:j7E<>0:J167=#9:o1<6gk50;9j7c<722c=j7>5;h57>5<5<1<75`1ga94?=zj<=96=48:183!47n38;m6F=119K674<,89n6=5f3b83>>o4l3:17d=j:188m6`=831b:k4?::k40?6=3f;mo7>5;|`56=<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<57;294~"58o094i2a94?=n;m0;66gt$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th>;84?:683>5}#:9l1>=o4H333?M45:2.:?h4?;h1`>5<>o4n3:17d8i:188m22=831d=km50;9~f34e29086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi9:850;594?6|,;:m6?>n;I024>N5:;1/=>k50:k0g?6=3`9o6=44i2g94?=n;o0;66g9f;29?l132900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn898:184>5<7s-8;j75;h1f>5<>o0<3:17b?ic;29?xd1:m0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo;88;293?6=8r.9fb83>>{e>;l1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl:7883>2<729q/>=h521c8L7773A89>6*>3d83?l5d2900e>j50;9j7`<722c8j7>5;h4e>5<>1<75`1ga94?=zj?9;6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm56a94?1=83:p(?>i:32b?M4682B9>?5+12g94>o4k3:17d=k:188m6c=831b?k4?::k5b?6=3`=?6=44o0d`>5<53;294~"58o0:>>5G2028L7453`=?6=44i7694?=h9oi1<75rb45b>5<0290;w)N5991C>?<4$01f>5=n;j0;66gh50;9j2c<722c<87>5;n3eg?6=3th=?<4?:283>5}#:9l1=?=4H333?M45:2c<87>5;h47>5<>o4m3:17d=i:188m3`=831b;94?::m2bf<722wi:><50;194?6|,;:m6<<<;I024>N5:;1b;94?::k50?6=3f;mo7>5;|`63a<72>0;6=u+21d965g<@;;;7E<=2:&27`<73`9h6=44i2f94?=n;l0;66g5<7s-8;j7?=3:J155=O:;80e::50;9j21<722e:jn4?::a12c=83=1<7>t$32e>76f3A8:<6F=239'56c=82c8o7>5;h1g>5<>o1n3:17d9;:188k4`d2900qo8<5;297?6=8r.9229K646<@;897d9;:188m32=831d=km50;9~f01a290<6=4?{%03b?47i2B9==5G2308 45b291b?n4?::k0`?6=3`9n6=44i2d94?=n>o0;66g84;29?j7ak3:17pl93783>6<729q/>=h51318L7773A89>6g84;29?l032900c50z&14c<58h1C><>4H301?!74m3:0e>m50;9j7a<722c8i7>5;h1e>5<>i6nj0;66sm62594?5=83:p(?>i:000?M4682B9>?5f7583>>o1<3:17b?ic;29?xd2080;6:4?:1y'65`=:9k0D???;I016>"6;l0;7d=l:188m6b=831b?h4?::k0b?6=3`5<4290;w)N5991C>?<4i6694?=n>=0;66a>fb83>>{e=181<7950;2x 76a2;:j7E<>0:J167=#9:o1<6gk50;9j7c<722c=j7>5;h57>5<5<1<75`1ga94?=zj<2>6=48:183!47n38;m6F=119K674<,89n6=5f3b83>>o4l3:17d=j:188m6`=831b:k4?::k40?6=3f;mo7>5;|`57a<72:0;6=u+21d9575<@;;;7E<=2:k40?6=3`5<57;294~"58o094i2a94?=n;m0;66gt$32e>4443A8:<6F=239j31<722c=87>5;n3eg?6=3th>494?:683>5}#:9l1>=o4H333?M45:2.:?h4?;h1`>5<>o4n3:17d8i:188m22=831d=km50;9~f35d29086=4?{%03b?75;2B9==5G2308m22=831b:94?::m2bf<722wi95850;594?6|,;:m6?>n;I024>N5:;1/=>k50:k0g?6=3`9o6=44i2g94?=n;o0;66g9f;29?l132900c50z&14c<6::1C><>4H301?l132900e;:50;9l5ce=831vn868:184>5<7s-8;j75;h1f>5<>o0<3:17b?ic;29?xd1;o0;6>4?:1y'65`=9;90D???;I016>o0<3:17d8;:188k4`d2900qo;78;293?6=8r.9fb83>>{e>=:1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl:8883>2<729q/>=h521c8L7773A89>6*>3d83?l5d2900e>j50;9j7`<722c8j7>5;h4e>5<>1<75`1ga94?=zj?>:6=4<:183!47n3;9?6F=119K674>1<75f6583>>i6nj0;66sm5`;94?2=83:p(?>i:0:b?M4682.:?h4>1e9K6745<5<54;294~"58o0:4l5G2028 45b2:1C>?<4i011>5<5<7>5;h307?6=3f;m;7>5;|`6t$32e>4>03A8:<6*>3d81<>N5:;1b=><50;9j565=831d=k950;9~f0ed29086=4?{%03b?7??2B9==5+12g96==O:;80e<==:188m4542900c3:1?7>50z&14c<60>1C><>4$01f>22<@;897d?<2;29?l74;3:17b?i7;29?xd2j>0;684?:1y'65`=91i0D???;%30a?053A89>6g>3383>>o6;:0;66g>3583>>o6;<0;66a>f683>>{e=ho1<7=50;2x 76a282<7E<>0:&27`<502B9>?5f12094?=n9:91<75`1g594?=zj?<4i011>5<5<7>5;h307?6=3`;887>5;h301?6=3f;m;7>5;|`;41<72:0;6=u+21d95=1<@;;;7)?t$32e>4>d3A8:<6*>3d825>N5:;1b=><50;9j565=831b=>:50;9j563=831d=k950;9~f67a29086=4?{%03b?7??2B9==5+12g977=O:;80e<==:188m4542900c50z&14c<60>1C><>4$01f>4b<@;897d?<2;29?l74;3:17b?i7;29?xd2>j0;684?:1y'65`=91i0D???;%30a?7602B9>?5f12094?=n9:91<75f12694?=n9:?1<75`1g594?=zj?5f12094?=n9:91<75`1g594?=zj;hh6=4<:183!47n3;3;6F=119'56c=;;1C>?<4i011>5<5<55;294~"58o0:4n5G2028 45b2:30D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3e3?6=3th9nh4?:483>5}#:9l1=5m4H333?!74m3927E<=2:k277<722c:?>4?::k271<722c:?84?::m2b2<722wi>?j50;194?6|,;:m6<68;I024>"6;l0946F=239j564=831b=>=50;9l5c1=831vn?5<7s-8;j7?77:J155=#9:o1>55G2308m4552900e<=<:188k4`02900qo<=f;297?6=8r.9869K646<,89n6?64H301?l74:3:17d?<3;29?j7a?3:17pl=3183>6<729q/>=h51958L7773-;8i7<7;I016>o6;;0;66g>3283>>i6n>0;66sm2g694?5=83:p(?>i:0:4?M4682.:?h4=8:J167=n9:81<75f12194?=h9o=1<75rb22`>5<4290;w)N5991/=>k5299K6745<7>5;h307?6=3f;m;7>5;|`05f<72:0;6=u+21d95=1<@;;;7)?t$32e>4>03A8:<6*>3d81<>N5:;1b=><50;9j565=831d=k950;9~f66129086=4?{%03b?7??2B9==5+12g96==O:;80e<==:188m4542900c3:1?7>50z&14c<60>1C><>4$01f>7><@;897d?<2;29?l74;3:17b?i7;29?xd4810;6>4?:1y'65`=91=0D???;%30a?4?3A89>6g>3383>>o6;:0;66a>f683>>{e;8:1<7=50;2x 76a282<7E<>0:&27`<502B9>?5f12094?=n9:91<75`1g594?=zj:;36=4<:183!47n3;3;6F=119'56c=:11C>?<4i011>5<5<53;294~"58o0:4:5G2028 45b2;20D?<=;h306?6=3`;8?7>5;n3e3?6=3th8=?4?:283>5}#:9l1=594H333?!74m3837E<=2:k277<722c:?>4?::m2b2<722wi?"6;l0946F=239j564=831b=>=50;9l5c1=831vn>m9:187>5<7s-8;j7?=8:J155=O:;80e::50;9j650=831b:94?::m2bf<722wi?n950;694?6|,;:m6<<7;I024>N5:;1b;94?::k143<722c=87>5;n3eg?6=3th8ih4?:583>5}#:9l1=?64H333?M45:2c<87>5;h032?6=3`5<54;294~"58o0:>55G2028L7453`=?6=44i325>5<1<75`1ga94?=zj=:?6=4;:183!47n3;946F=119K674>1<75f21494?=n>=0;66a>fb83>>{e<9l1<7:50;2x 76a28837E<>0:J167=n?=0;66g=0783>>o1<3:17b?ic;29?xd39h0;694?:1y'65`=9;20D???;I016>o0<3:17d50z&14c<6:11C><>4H301?l132900e?>9:188m32=831d=km50;9~f157290?6=4?{%03b?7502B9==5G2308m22=831b>=850;9j21<722e:jn4?::a06d=83>1<7>t$32e>44?3A8:<6F=239j31<722c9<;4?::k50?6=3f;mo7>5;|`0g=<72=0;6=u+21d957><@;;;7E<=2:k40?6=3`8;:7>5;h47>5<5<5<3290;w)N5991C>?<4i6694?=n:9<1<75f6583>>i6nj0;66sm3d594?2=83:p(?>i:00;?M4682B9>?5f7583>>o58?0;66g94;29?j7ak3:17pl1<729q/>=h513:8L7773A89>6g84;29?l47>3:17d8;:188k4`d2900qo=j9;290?6=8r.9299K646<@;897d9;:188m7612900e;:50;9l5ce=831vn>kn:187>5<7s-8;j7?=8:J155=O:;80e::50;9j650=831b:94?::m2bf<722wi?hl50;694?6|,;:m6<<7;I024>N5:;1b;94?::k143<722c=87>5;n3eg?6=3th8in4?:583>5}#:9l1=?64H333?M45:2c<87>5;h032?6=3`5<54;294~"58o0:>55G2028L7453`=?6=44i325>5<1<75`1ga94?=zj:om6=4;:183!47n3;946F=119K674>1<75f21494?=n>=0;66a>fb83>>{e;o:1<7:50;2x 76a28837E<>0:J167=n?=0;66g=0783>>o1<3:17b?ic;29?xd4n80;694?:1y'65`=9;20D???;I016>o0<3:17d50z&14c<6:11C><>4H301?l132900e?>9:188m32=831d=km50;9~f6`4290?6=4?{%03b?7502B9==5G2308m22=831b>=850;9j21<722e:jn4?::a7c2=83>1<7>t$32e>44?3A8:<6F=239j31<722c9<;4?::k50?6=3f;mo7>5;|`0b0<72=0;6=u+21d957><@;;;7E<=2:k40?6=3`8;:7>5;h47>5<5<5<3290;w)N5991C>?<4i6694?=n:9<1<75f6583>>i6nj0;66sm3g:94?2=83:p(?>i:00;?M4682B9>?5f7583>>o58?0;66g94;29?j7ak3:17pl1<729q/>=h513:8L7773A89>6g84;29?l47>3:17d8;:188k4`d2900qo=ib;290?6=8r.9299K646<@;897d9;:188m7612900e;:50;9l5ce=831vn8k?:187>5<7s-8;j7?=5:J155=O:;80e::50;9j5cb=831b:94?::m2bf<722wi:;?50;694?6|,;:m6<6n;I024>"6;l0=7E<=2:k277<722c:?>4?::k271<722e:j:4?::a77d=83?1<7>t$32e>4403A8:<6F=239j31<722c:ji4?::k143<722c=87>5;n3eg?6=3th9jo4?:483>5}#:9l1=5m4H333?!74m38j7E<=2:k277<722c:?>4?::k271<722c:?84?::m2b2<722wi>ho50;794?6|,;:m6<6l;I024>"6;l09m6F=239j564=831b=>=50;9j562=831b=>;50;9l5c1=831vn?kl:186>5<7s-8;j7?7c:J155=#9:o1>l5G2308m4552900e<=<:188m4532900e<=::188k4`02900qo8b9K646<,89n6?o4H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7a?3:17pl=f183>0<729q/>=h519a8L7773-;8i7o6;;0;66g>3283>>o6;=0;66g>3483>>i6n>0;66sm2g594?3=83:p(?>i:0:`?M4682.:?h4=a:J167=n9:81<75f12194?=n9:>1<75f12794?=h9o=1<75rb3d:>5<2290;w)N5991/=>k52`9K6745<5<7>5;h307?6=3`;887>5;h301?6=3f;m;7>5;|`1bc<72<0;6=u+21d95=e<@;;;7)?t$32e>4>d3A8:<6*>3d81e>N5:;1b=><50;9j565=831b=>:50;9j563=831d=k950;9~f664290>6=4?{%03b?7?k2B9==5+12g96d=O:;80e<==:188m4542900e<=;:188m4522900c50z&14c<60j1C><>4$01f>7g<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?i7;29?xd5n80;694?:1y'65`=91k0D???;%30a?5f3A89>6g>3383>>o6;:0;66g>3583>>i6n>0;66sm2g094?2=83:p(?>i:0:b?M4682.:?h41<75`1g594?=zj==:6=4::183!47n3;3o6F=119'56c=k2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`1g594?=zj=k26=4::183!47n3;3o6F=119'56c=k2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`1g594?=zj=h?6=4::183!47n3;3o6F=119'56c=k2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`1g594?=zj=h>6=4::183!47n3;3o6F=119'56c=?<1C>?<4i011>5<5<6=44o0d4>5<55;294~"58o0:4n5G2028 45b2:>0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3e3?6=3th9m54?:583>5}#:9l1=5o4H333?!74m38>7E<=2:k277<722c:?>4?::k271<722e:j:4?::a6`2=83>1<7>t$32e>4>f3A8:<6*>3d8253=O:;80e<==:188m4542900e<=;:188k4`02900qo;nc;290?6=8r.98`9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>f683>>{e;=?1<7=50;2x 76a28887E<>0:J167=n?=0;66g94;29?j7ak3:17pl:a483>1<729q/>=h519d8L7773A89>6g>3383>>o6;:0;66g=0783>>i6n>0;66sm5`494?2=83:p(?>i:0:b?M4682.:?h49;I016>o6;;0;66g>3283>>o6;=0;66a>f683>>{e:h31<7:50;2x 76a282m7E<>0:J167=n9:81<75f12194?=n:9<1<75`1g594?=zj;kj6=4::183!47n3;3o6F=119'56c=:?1C>?<4i011>5<5<6=44o0d4>5<55;294~"58o0:4n5G2028 45b2?80D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3e3?6=3th9n54?:583>5}#:9l1=5h4H333?M45:2c:??4?::k276<722c9<;4?::m2b2<722wi>oo50;794?6|,;:m6<6l;I024>"6;l0:>i5G2308m4552900e<=<:188m4532900e<=::188k4`02900qo8g9K646<@;897d?<2;29?l74;3:17d1<729q/>=h519c8L7773-;8i789;I016>o6;;0;66g>3283>>o6;=0;66a>f683>>{e:k91<7;50;2x 76a282h7E<>0:&27`<682B9>?5f12094?=n9:91<75f12694?=n9:?1<75`1g594?=zj;k>6=4;:183!47n3;3j6F=119K6745<5<55;294~"58o0:4n5G2028 45b28:0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3e3?6=3th9m:4?:483>5}#:9l1=5m4H333?!74m3;9m6F=239j564=831b=>=50;9j562=831b=>;50;9l5c1=831vn?oj:187>5<7s-8;j7?7f:J155=O:;80e<==:188m4542900e?>9:188k4`02900qo8b9K646<,89n6k5G2308m4552900e<=<:188m4532900e<=::188k4`02900qo8b9K646<,89n6<o6;;0;66g>3283>>o6;=0;66g>3483>>i6n>0;66sm2c794?2=83:p(?>i:0:e?M4682B9>?5f12094?=n9:91<75f21494?=h9o=1<75rb3`5>5<3290;w)N5991/=>k53:J167=n9:81<75f12194?=n9:>1<75`1g594?=zj;h<6=4::183!47n3;3o6F=119'56c=9;n0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3e3?6=3th=:>4?:583>5}#:9l1=5h4H333?M45:2c:??4?::k276<722c9<;4?::m2b2<722wi:o?50;694?6|,;:m6<6i;I024>N5:;1b=><50;9j565=831b>=850;9l5c1=831vn;l;:187>5<7s-8;j7?7f:J155=O:;80e<==:188m4542900e?>9:188k4`02900qo8m7;290?6=8r.98g9K646<@;897d?<2;29?l74;3:17d1<729q/>=h519d8L7773A89>6g>3383>>o6;:0;66g=0783>>i6n>0;66sm6cf94?2=83:p(?>i:0:e?M4682B9>?5f12094?=n9:91<75f21494?=h9o=1<75rb7`b>5<3290;w)N5991C>?<4i011>5<5<5;h032?6=3f;m;7>5;|`5e`<72=0;6=u+21d95=`<@;;;7E<=2:k277<722c:?>4?::k143<722e:j:4?::a224=83>1<7>t$32e>4>a3A8:<6F=239j564=831b=>=50;9j650=831d=k950;9~f301290?6=4?{%03b?7?n2B9==5G2308m4552900e<=<:188m7612900c50z&14c<60o1C><>4H301?l74:3:17d?<3;29?l47>3:17b?i7;29?xd1?<0;694?:1y'65`=91l0D???;I016>o6;;0;66g>3283>>o58?0;66a>f683>>{e>>21<7:50;2x 76a282m7E<>0:J167=n9:81<75f12194?=n:9<1<75`1g594?=zj?<26=4;:183!47n3;3j6F=119K6745<5<54;294~"58o0:4k5G2028L7453`;8>7>5;h307?6=3`8;:7>5;n3e3?6=3th=:n4?:583>5}#:9l1=5h4H333?M45:2c:??4?::k276<722c9<;4?::m2b2<722wi::k50;694?6|,;:m6<6i;I024>N5:;1b=><50;9j565=831b>=850;9l5c1=831vn;8i:187>5<7s-8;j7?7f:J155=O:;80e<==:188m4542900e?>9:188k4`02900qo871;290?6=8r.98g9K646<@;897d?<2;29?l74;3:17d1<729q/>=h519d8L7773A89>6g>3383>>o6;:0;66g=0783>>i6n>0;66sm69c94?2=83:p(?>i:0:e?M4682B9>?5f12094?=n9:91<75f21494?=h9o=1<75rb7:g>5<3290;w)N5991C>?<4i011>5<5<5;h032?6=3f;m;7>5;|`6ga<72;0;6=u+21d95=7<@;;;7E<=2:k275<722e:j:4?::a1db=8381<7>t$32e>4>63A8:<6F=239j566=831d=k950;9~f04b29096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8;m:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f03c29096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8;i:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f02329096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn88<:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f00629096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8;;:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f03>29096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8=7:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f05729096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn88::181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f05f29096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8=l:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f05529096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8=j:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f05329096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8:?:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f05129096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8:=:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f02129096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8:7:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f02f29096=4?{%03b?7?>2B9==5+12g9`>N5:;1b=><50;9l5c1=831vn8:l:181>5<7s-8;j7?76:J155=#9:o1h6F=239j564=831d=k950;9~f071290?6=4?{%03b?7?j2B9==5+12g922=O:;80e<==:188m4542900e<=;:188k4>32900qo;>5;290?6=8r.98c9K646<,89n6;94H301?l74:3:17d?<3;29?l74<3:17b?74;29?xd29=0;694?:1y'65`=91h0D???;%30a?003A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm50194?2=83:p(?>i:0:a?M4682.:?h497:J167=n9:81<75f12194?=n9:>1<75`19694?=zj<;:6=4;:183!47n3;3n6F=119'56c=>>1C>?<4i011>5<5<7>5;h307?6=3`;887>5;n3;0?6=3th>5}#:9l1=5l4H333?!74m3<<7E<=2:k277<722c:?>4?::k271<722e:494?::a15c=83>1<7>t$32e>4>e3A8:<6*>3d853>N5:;1b=><50;9j565=831b=>:50;9l5=2=831vn8>k:187>5<7s-8;j7?7b:J155=#9:o1::5G2308m4552900e<=<:188m4532900c<6;:188yg37k3:187>50z&14c<60k1C><>4$01f>31<@;897d?<2;29?l74;3:17d?<4;29?j7?<3:17pl:0c83>1<729q/>=h519`8L7773-;8i788;I016>o6;;0;66g>3283>>o6;=0;66a>8583>>{e=9k1<7:50;2x 76a282i7E<>0:&27`<1?2B9>?5f12094?=n9:91<75f12694?=h91>1<75rb42:>5<3290;w)N5991/=>k5669K6745<5<54;294~"58o0:4o5G2028 45b2?=0D?<=;h306?6=3`;8?7>5;h300?6=3f;387>5;|`65`<72=0;6=u+21d95=d<@;;;7)?"6;l0=;6F=239j564=831b=>=50;9j562=831d=5:50;9~f07d290?6=4?{%03b?7?j2B9==5+12g922=O:;80e<==:188m4542900e<=;:188k4>32900qo;>b;290?6=8r.98c9K646<,89n6;94H301?l74:3:17d?<3;29?l74<3:17b?74;29?xd29h0;694?:1y'65`=91h0D???;%30a?003A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm50;94?2=83:p(?>i:0:a?M4682.:?h497:J167=n9:81<75f12194?=n9:>1<75`19694?=zj<;36=4;:183!47n3;3n6F=119'56c=>>1C>?<4i011>5<5<7>5;h307?6=3`;887>5;n3;0?6=3th>=?4?:583>5}#:9l1=5l4H333?!74m3<<7E<=2:k277<722c:?>4?::k271<722e:494?::a151=83>1<7>t$32e>4>e3A8:<6*>3d853>N5:;1b=><50;9j565=831b=>:50;9l5=2=831vn><;:180>5<7s-8;j7?79:J155=#9:o1=<=4H301?l74:3:17d?<3;29?j7?<3:17pl<2483>0<729q/>=h519g8L7773-;8i7:?;I016>o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm33:94?2=83:p(?>i:0:;?M4682.:?h484:J167=n9:81<75f12194?=h91>1<75`1g594?=zj:826=4::183!47n3;3i6F=119'56c=901C>?<4i011>5<5<6=44o0:7>5<>:7>54;294~"58o0:4o5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:494?::a001=83>1<7>t$32e>4>e3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4>32900qo:i3;290?6=8r.98c9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>8583>>{e1<7:50;2x 76a282i7E<>0:&27`<69=1C>?<4i011>5<5<"6;l0:=95G2308m4552900e<=<:188m4532900c<6;:188yg2a>3:187>50z&14c<60k1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm4g594?2=83:p(?>i:0:a?M4682.:?h4>159K6745<5<>j7>54;294~"58o0:4o5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:494?::a036=83>1<7>t$32e>4>e3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4>32900qo::c;290?6=8r.98c9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>8583>>{e<0:&27`<69=1C>?<4i011>5<5<"6;l0:=95G2308m4552900e<=<:188m4532900c<6;:188yg2ak3:187>50z&14c<60k1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm4gf94?2=83:p(?>i:0:a?M4682.:?h4>159K6745<5<=>7>54;294~"58o0:4o5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:494?::a035=83>1<7>t$32e>4>e3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4>32900qo::3;290?6=8r.98c9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>8583>>{e<<>1<7:50;2x 76a282i7E<>0:&27`<69=1C>?<4i011>5<5<"6;l0:=95G2308m4552900e<=<:188m4532900c<6;:188yg21=3:187>50z&14c<60k1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm47494?2=83:p(?>i:0:a?M4682.:?h4>159K6745<5<54;294~"58o0:4o5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:494?::a02d=83>1<7>t$32e>4>e3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4>32900qo:9b;290?6=8r.98c9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>8583>>{e0:&27`<69=1C>?<4i011>5<5<"6;l0:=95G2308m4552900e<=<:188m4532900c<6;:188yg20l3:187>50z&14c<60k1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm46g94?2=83:p(?>i:0:a?M4682.:?h4>159K6745<5<3<7>54;294~"58o0:4o5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:494?::a0=7=83>1<7>t$32e>4>e3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4>32900qo:9e;290?6=8r.98c9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>8583>>{e0:&27`<69=1C>?<4i011>5<5<"6;l0:=95G2308m4552900e<=<:188m4532900c<6;:188yg20<3:187>50z&14c<60k1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm46794?2=83:p(?>i:0:a?M4682.:?h4>159K6745<5<3:7>54;294~"58o0:4o5G2028 45b28;?7E<=2:k277<722c:?>4?::k271<722e:494?::a0=1=83>1<7>t$32e>4>e3A8:<6*>3d8251=O:;80e<==:188m4542900e<=;:188k4>32900qo:79;290?6=8r.98c9K646<,89n6o6;;0;66g>3283>>o6;=0;66a>8583>>{e<1k1<7:50;2x 76a282i7E<>0:&27`<69=1C>?<4i011>5<5<"6;l0:=95G2308m4552900e<=<:188m4532900c<6;:188yg2?n3:187>50z&14c<60k1C><>4$01f>4733A89>6g>3383>>o6;:0;66g>3583>>i60=0;66sm48294?2=83:p(?>i:0:a?M4682.:?h4>159K6745<5<><7>56;294~"58o0:4i5G2028 45b2=1C>?<4i011>5<5<6=44o0:7>5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`5`<<72<0;6=u+21d95=c<@;;;7)?t$32e>4>b3A8:<6*>3d805>N5:;1b=><50;9j565=831b=>:50;9j563=831d=5:50;9~f3b1290>6=4?{%03b?7?m2B9==5+12g974=O:;80e<==:188m4542900e<=;:188m4522900c<6;:188yg0c=3:197>50z&14c<60l1C><>4$01f>67<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?74;29?xd1l=0;684?:1y'65`=91o0D???;%30a?563A89>6g>3383>>o6;:0;66g>3583>>o6;<0;66a>8583>>{e>m91<7;50;2x 76a282n7E<>0:&27`<492B9>?5f12094?=n9:91<75f12694?=n9:?1<75`19694?=zj?n96=4::183!47n3;3i6F=119'56c=;81C>?<4i011>5<5<6=44o0:7>5<55;294~"58o0:4h5G2028 45b2:;0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3;0?6=3th=h=4?:483>5}#:9l1=5k4H333?!74m39:7E<=2:k277<722c:?>4?::k271<722c:?84?::m2<1<722wi:nh50;794?6|,;:m6<6j;I024>"6;l08=6F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn;mj:186>5<7s-8;j7?7e:J155=#9:o1?<5G2308m4552900e<=<:188m4532900e<=::188k4>32900qo8lc;291?6=8r.98d9K646<,89n6>?4H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7?<3:17pl9cc83>0<729q/>=h519g8L7773-;8i7=>;I016>o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm6bc94?3=83:p(?>i:0:f?M4682.:?h4<1:J167=n9:81<75f12194?=n9:>1<75f12794?=h91>1<75rb7a:>5<2290;w)N5991/=>k5309K6745<5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`5g2<72<0;6=u+21d95=c<@;;;7)?t$32e>4>b3A8:<6*>3d805>N5:;1b=><50;9j565=831b=>:50;9j563=831d=5:50;9~f3e2290>6=4?{%03b?7?m2B9==5+12g974=O:;80e<==:188m4542900e<=;:188m4522900c<6;:188yg0d<3:197>50z&14c<60l1C><>4$01f>67<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?74;29?xd1k:0;684?:1y'65`=91o0D???;%30a?563A89>6g>3383>>o6;:0;66g>3583>>o6;<0;66a>8583>>{e>l;1<7;50;2x 76a282n7E<>0:&27`<492B9>?5f12094?=n9:91<75f12694?=n9:?1<75`19694?=zj?o;6=4::183!47n3;3i6F=119'56c=;81C>?<4i011>5<5<6=44o0:7>5<55;294~"58o0:4h5G2028 45b2:;0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3;0?6=3th=hh4?:483>5}#:9l1=5k4H333?!74m39:7E<=2:k277<722c:?>4?::k271<722c:?84?::m2<1<722wi:ij50;794?6|,;:m6<6j;I024>"6;l08=6F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn;jl:186>5<7s-8;j7?7e:J155=#9:o1?<5G2308m4552900e<=<:188m4532900e<=::188k4>32900qo8kb;291?6=8r.98d9K646<,89n6>?4H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7?<3:17pl9d983>0<729q/>=h519g8L7773-;8i7=>;I016>o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm6bf94?3=83:p(?>i:0:f?M4682.:?h4<1:J167=n9:81<75f12194?=n9:>1<75f12794?=h91>1<75rb7a1>5<2290;w)N5991/=>k5309K6745<5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`5=1<72<0;6=u+21d95=c<@;;;7)?t$32e>4>b3A8:<6*>3d82g>N5:;1b=><50;9j565=831b=>:50;9j563=831d=5:50;9~f3?0290>6=4?{%03b?7?m2B9==5+12g95f=O:;80e<==:188m4542900e<=;:188m4522900c<6;:188yg0>13:197>50z&14c<60l1C><>4$01f>4e<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?74;29?xd11h0;684?:1y'65`=91o0D???;%30a?7d3A89>6g>3383>>o6;:0;66g>3583>>o6;<0;66a>8583>>{e>0i1<7;50;2x 76a282n7E<>0:&27`<6k2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`19694?=zj?3o6=4::183!47n3;3i6F=119'56c=9j1C>?<4i011>5<5<6=44o0:7>5<55;294~"58o0:4h5G2028 45b28i0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3;0?6=3th=m=4?:483>5}#:9l1=5k4H333?!74m3;h7E<=2:k277<722c:?>4?::k271<722c:?84?::m2<1<722wi:l650;794?6|,;:m6<6j;I024>"6;l0:o6F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn;o6:186>5<7s-8;j7?7e:J155=#9:o1=n5G2308m4552900e<=<:188m4532900e<=::188k4>32900qo8n2;291?6=8r.98d9K646<,89n60<729q/>=h519g8L7773-;8i7?l;I016>o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm6``94?3=83:p(?>i:0:f?M4682.:?h4>c:J167=n9:81<75f12194?=n9:>1<75f12794?=h91>1<75rb7c`>5<2290;w)N5991/=>k51b9K6745<5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`647<72<0;6=u+21d95=c<@;;;7)?t$32e>4>>3A8:<6*>3d82`>N5:;1b=><50;9j565=831d=5:50;9~f0d4290>6=4?{%03b?7?m2B9==5+12g954c<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?74;29?xd2i:0;684?:1y'65`=91o0D???;%30a?76n2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`19694?=zj<?<4i011>5<5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`1b0<72<0;6=u+21d95=c<@;;;7)?t$32e>4>b3A8:<6*>3d81e>N5:;1b=><50;9j565=831b=>:50;9j563=831d=5:50;9~f66>290>6=4?{%03b?7?m2B9==5+12g96d=O:;80e<==:188m4542900e<=;:188m4522900c<6;:188yg57j3:197>50z&14c<60l1C><>4$01f>7g<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?74;29?xd48m0;684?:1y'65`=91o0D???;%30a?4f3A89>6g>3383>>o6;:0;66g>3583>>o6;<0;66a>8583>>{e;9l1<7;50;2x 76a282n7E<>0:&27`<5i2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`19694?=zj:;:6=4::183!47n3;3i6F=119'56c=:h1C>?<4i011>5<5<6=44o0:7>5<55;294~"58o0:4h5G2028 45b2;k0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3;0?6=3th8=84?:483>5}#:9l1=5k4H333?!74m38j7E<=2:k277<722c:?>4?::k271<722c:?84?::m2<1<722wi?<950;794?6|,;:m6<6j;I024>"6;l09m6F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn>?6:186>5<7s-8;j7?7e:J155=#9:o1>l5G2308m4552900e<=<:188m4532900e<=::188k4>32900qo=>b;291?6=8r.98d9K646<,89n6?o4H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7?<3:17pl<1e83>0<729q/>=h519g8L7773-;8i7o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm2d794?3=83:p(?>i:0:f?M4682.:?h4=a:J167=n9:81<75f12194?=n9:>1<75f12794?=h91>1<75rb3g4>5<2290;w)N5991/=>k52`9K6745<5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`1a=<72<0;6=u+21d95=c<@;;;7)?t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0de=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0g?=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0f2=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0f`=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0a0=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0ab=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0`>=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0c7=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0cc=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0<7=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0d4=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0d5=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0d2=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0d3=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0d0=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0d1=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0dd=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0db=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0dc=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0d`=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0g6=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0g7=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0g4=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0g0=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0g1=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0g>=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0gg=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a0gd=83?1<7>t$32e>4>b3A8:<6*>3d8`?M45:2c:??4?::k276<722c:?94?::k270<722e:494?::a6cg=83?1<7>t$32e>4>b3A8:<6*>3d81e>N5:;1b=><50;9j565=831b=>:50;9j563=831d=5:50;9~f7c>290>6=4?{%03b?7?m2B9==5+12g96d=O:;80e<==:188m4542900e<=;:188m4522900c<6;:188yg4bj3:197>50z&14c<60l1C><>4$01f>7g<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?74;29?xd5mm0;684?:1y'65`=91o0D???;%30a?4f3A89>6g>3383>>o6;:0;66g>3583>>o6;<0;66a>8583>>{e:ll1<7;50;2x 76a282n7E<>0:&27`<5i2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`19694?=zj;l=6=4::183!47n3;3i6F=119'56c=:h1C>?<4i011>5<5<6=44o0:7>5<55;294~"58o0:4h5G2028 45b2;k0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3;0?6=3th9jn4?:483>5}#:9l1=5k4H333?!74m38j7E<=2:k277<722c:?>4?::k271<722c:?84?::m2<1<722wi>kk50;794?6|,;:m6<6j;I024>"6;l09m6F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn>>?:186>5<7s-8;j7?7e:J155=#9:o1>l5G2308m4552900e<=<:188m4532900e<=::188k4>32900qo=?2;291?6=8r.98d9K646<,89n6?o4H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7?<3:17pl<0583>0<729q/>=h519g8L7773-;8i7o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm2g194?2=83:p(?>i:0:a?M4682.:?h41<75`19694?=zj==96=4::183!47n3;3i6F=119'56c=?<1C>?<4i011>5<5<6=44o0:7>5<<<7>55;294~"58o0:4h5G2028 45b28;>7E<=2:k277<722c:?>4?::k271<722c:?84?::m2<1<722wi8lo50;794?6|,;:m6<6j;I024>"6;l0<96F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn9o7:186>5<7s-8;j7?7e:J155=#9:o1=<;4H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7?<3:17pl;b283>0<729q/>=h519g8L7773-;8i7?>5:J167=n9:81<75f12194?=n9:>1<75f12794?=h91>1<75rb423>5<2290;w)N5991/=>k5289K6745<5<o750;794?6|,;:m6<6j;I024>"6;l0886F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn;8;:186>5<7s-8;j7?7e:J155=#9:o1>:5G2308m4552900e<=<:188m4532900e<=::188k4>32900qo8m2;291?6=8r.98d9K646<,89n6?94H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7?<3:17pl9b483>0<729q/>=h519g8L7773-;8i7<8;I016>o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm6c:94?3=83:p(?>i:0:f?M4682.:?h4=7:J167=n9:81<75f12194?=n9:>1<75f12794?=h91>1<75rb7:6>5<2290;w)N5991/=>k5269K6745<5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`5fg<72<0;6=u+21d95=c<@;;;7)?t$32e>4>b3A8:<6*>3d813>N5:;1b=><50;9j565=831b=>:50;9j563=831d=5:50;9~f3ga290>6=4?{%03b?7?m2B9==5+12g962=O:;80e<==:188m4542900e<=;:188m4522900c<6;:188yg00;3:197>50z&14c<60l1C><>4$01f>71<@;897d?<2;29?l74;3:17d?<4;29?l74=3:17b?74;29?xd1>>0;684?:1y'65`=91o0D???;%30a?403A89>6g>3383>>o6;:0;66g>3583>>o6;<0;66a>8583>>{e>j;1<7;50;2x 76a282n7E<>0:&27`<5?2B9>?5f12094?=n9:91<75f12694?=n9:?1<75`19694?=zj?==6=4::183!47n3;3i6F=119'56c=:>1C>?<4i011>5<5<6=44o0:7>5<55;294~"58o0:4h5G2028 45b2;=0D?<=;h306?6=3`;8?7>5;h300?6=3`;897>5;n3;0?6=3th=:l4?:483>5}#:9l1=5k4H333?!74m38<7E<=2:k277<722c:?>4?::k271<722c:?84?::m2<1<722wi::m50;794?6|,;:m6<6j;I024>"6;l09;6F=239j564=831b=>=50;9j562=831b=>;50;9l5=2=831vn;8k:186>5<7s-8;j7?7e:J155=#9:o1>:5G2308m4552900e<=<:188m4532900e<=::188k4>32900qo88f;291?6=8r.98d9K646<,89n6?94H301?l74:3:17d?<3;29?l74<3:17d?<5;29?j7?<3:17pl97183>0<729q/>=h519g8L7773-;8i7<8;I016>o6;;0;66g>3283>>o6;=0;66g>3483>>i60=0;66sm69094?3=83:p(?>i:0:f?M4682.:?h4=7:J167=n9:81<75f12194?=n9:>1<75f12794?=h91>1<75rb7:;>5<2290;w)N5991/=>k5269K6745<5<7>5;h307?6=3`;887>5;h301?6=3f;387>5;|`5<`<72<0;6=u+21d95=c<@;;;7)?t$32e>4>b3A8:<6*>3d813>N5:;1b=><50;9j565=831b=>:50;9j563=831d=5:50;9~w74>290:=4uQ23;89=202>:015:8:638964f2?>01>01>=>:768965a2?>01>:?:76896262?>01>:=:76896472?>01><>:768912f2?>019:m:768912d2?>019:k:76896242?>019:j:76896232?>01>hl:76896`c2?>01>hj:76896`a2?>019>?:76891662?>019>=:76891642?>019>::76891612?>019>8:768916?2?>019>6:768916f2?>019>m:768916d2?>019>k:768916b2?>019??:76891762?>019?=:76891742?>019?;:76891722?>019?9:76891702?>019?7:768917>2?>019?m:768917d2?>019?k:768917b2?>019?i:76891472?>019<>:76891452?>019<<:76891432?>019<9:76891402?>019<7:768914>2?>019019019019=>:76891552?>019=<:76891532?>019=::76891512?>019=8:768915?2?>019=6:768915f2?>019=l:768915c2?>019=j:768915a2?>019:?:76891262?>019:=:76891242?>019:;:76891222?>01>m6:76896ef2?>01>mm:76896ed2?>01>mk:76896eb2?>01>mi:76896b72?>01>j>:76896b52?>01>j;:76896b22?>01>j9:76896b02?>01>j7:76896b>2?>01>jn:76896be2?>01>jl:76896bc2?>01>ji:76896c72?>01>k>:76896c52?>01>k<:76896c32?>01>k::76896c12?>01>=;:76896522?>01><=:76896412?>015>=:7689=622>:015>::6389=612>:015>9:63892>52>:01:6=:63892>42>:01:6<:63890d62?>018l6:76890e22?>018m9:76890e02?>01;<>:76893452?>01;:6:76893332?>01;;8:768933?2?>01;;6:768933f2?>01;;m:768933d2?>01;<<:768934b2?>01;=6:76893252?>01;:<:76893232?>01;:::76893212?>01;:8:768932?2?>01;:n:768932e2?>01;:l:768932c2?>01;:j:768932a2?>01;;?:76893362?>01;;=:76893342?>01;;::76893312?>018j7:76890b>2?>018jn:76890be2?>018jl:76890bc2?>018jj:76890ba2?>018mn:76890ee2?>018l=:76890d32?>018lj:76890da2?>018m?:76890e62?>0186n:7d8933c2?>0186m:7d8933b2?>0188j:7d893432?>0186l:7d8933a2?>0186k:7d893072?>0188i:7d893422?>0189?:7d893412?>0189<:7d8934>2?>0189>:7d893402?>0189=:7d8934?2?>0189;:7d8934f2?>0189::7d8934e2?>01899:7d8934d2?>01898:7d8934c2?>01897:7d8934a2?>01896:7d893572?>0189l:7d893542?>0189n:7d893562?>0189m:7d893552?>0189k:7d893532?>0189j:7d893522?>0189i:7d893512?>0186?:7d893502?>0186>:7d8935?2?>0186=:7d8935f2?>0186::7d8935c2?>0186<:7d8935e2?>0186;:7d8935d2?>01869:7d8935b2?>01868:7d8935a2?>01867:7d893272?>01866:7d893262?>01>m9:76896e02?>01>kj:76896`>2?>019>;:768916a2?>019?n:76891422?>019=?:768915e2?>01>m7:76896b42?>01>jj:76896c02?>01>k7:76896c>2?>01>kn:76896ce2?>01>kl:76896cc2?>01>ki:76896`72?>01>h>:76896`52?>01>h<:76896`32?>01>h::76896`12?>01>h8:76896`?2?>01>hn:76896`e2?>018k?:768964e2?>01>:::768yv17?3:1ovP8069>14`=9:801?9<:011?840:3;8>63=708277=::j>1=><4=21b>4523498;7?<2:?1g3<6;;16>lo5126897d1289970==9;301>{t?;h1<7?k{_51f>;4:h09<;5233d95cb<5:9;6fe9>716=9on01>:>:0dg?853:3;mh63<2182ba=:;;;1=kj4=56f>4`c349887?id:?070<6nm16??<51gf8964128lo709mf;300>;0jm0:?>525c395cb<5o;4>fe9>1f1=9on018l=:0dg?83e<3;mh63:a88271=::;h1=>=4=4g3>4`c3499n7?id:p361=838pR:=8;<:35?74<2wx9;o50;6xZ00f34?jn7?<2:?6f2<6;=169l:51218yv14>3:1>vP8379>3g`=9:90q~9;1;290~X0<816;oh5127892dc289?706?4;307>{t?;i1<7:8{_51g>;0n80:??527dd9564<5>oi6<==;<5f=?74:27339>3`3=9:801:k<:011?81b93;8>638dg8277=:?mn1=><4=6fa>45534=o57?<2:?4`0<6;;16;i=5120892b62899709lf;306>;0km0:??527b`9564<5>i26<==;<5`3?74:27339>3f5=9:801:hi:011?81al3;8>638fc8277=:?o31=><4=6d4>45534=m97?<2:?4b6<6;;16;hj5120892b02899709l1;306>;?880:??527cd9564<5>ho6<==;<547?74:27<;<4>339>33b=9:801:8m:011?81113;8>638668277=:???1=><4=640>45534===7?<3:?41c<6;:16;8j51218923e2898709:7;307>;0=<0:?>527419565<5>?:6<=<;<57b?74;27<8i4>329>31d=9:901::6:010?813?3;8?638448276=:?1;1=>=4=65e>45434=;0>o0:?>5274;9565<5>>86<=<;<:30?74:279i94>329>1de=9:90q~;9b;296~X2>k169lm51g58yv5583:15v3<2182bf=::hh1=>=4=3`b>454348j;7?<3:?1e`<58?16>o9512789643289870==8;307>;5:j0:??5rs62;>5<5sW=;463=e582b2=z{>8j6=4<{_51e>;352z?;02<69h169<;4=964>773342?;7<>3:?;02<690169o?51ga890ef2?n018mm:7f89306289870;nc;306>;2i:0:?95rs663>5<>sW=?<638f08271=:?ml1=>:4=6ag>45334=mn7?<4:?436<6;=16;;?51208922a28997098d;306>{t?:o1<77t^61f?81bn3;88638de8271=:?jh1=>:4=6d:>45334=<=7?<4:?41c<6;;16;9j51208921e28997p}83e83><}Y?:n01:km:017?81cj3;88638c88271=:?o=1=>:4=64g>45334=>h7?<2:?40g<6;;16;:751208yv14k3:15vP83b9>3`?=9:>01:j6:017?81d?3;88638f48271=:??h1=>:4=67a>45534=?57?<2:?432<6;;1v:=m:18:[14j27359>3a3=9:>01:m::017?81a;3;88638688271=:?<=1=><4=664>45534=<97?<2:p36g=833pR:=n;<5f1?74<274>359>3f5=9:>01:kk:017?811?3;88638548277=:?=?1=><4=64e>4553tyo86<=;;<5g5?74<27359>3a1=9:>01:8::017?812;3;8>638808277=:?<31=><4}r50im6<=;;<5e`?74<27359>335=9:>01:;>:011?810n3;8>638428277=z{<<26=4={_75=>;2k>0<86s|57594?4|V<<<70;l6;57?xu2>?0;6?uQ574890e22>>0q~9<5;291~X0;<164=;5969><50=1>16;5<5969>3=5=1>1v:=<:186[14;273<8466:?;43<>>27<4?466:?4<6<>>2wx;><50;7xZ255342;977:;<:32??234=3>77:;<5;7??23ty64:4=925><2<5>2964:4=6:0><255z\475=:09?15>528149=6=:?1815>527919=6=z{>8m6=4:{_51b>;?8<03j637078;b>;00;03j638828;b>{t?;o1<7;t^60f?8>7=32?706?6;:7?81?:32?70973;:7?xu0:m0;68uQ73f89=622>3015>9:6;892>52>301:6<:6;8yv32?3:1?vP:569>2a`=9:?01;ol:011?xu2=<0;6>uQ547893bb289>708n9;306>{t=<81<7=t^471?80cl3;89639a28277=z{;1lj0:?8526`29564<7>53z\615=:>mh1=>;4=7;g>4553ty>8k4?:2y]11`<5?n36<=:;<4:e?74:2wx99k50;1xZ02b34349>2<2=9:80q~;;b;297~X27p}:4883>6}Y==3018:n:011?80c13;896s|55594?5|V<><70;;8;306>;1l>0:?85rs466>5<4sW??963:478277=:>m<1=>;4}r775?6=;rT>8<525509564<5?n>6<=:;|q67c<72:qU9>h4=463>455344>349~w05e2908wS;16g=9:801;j>:016?xu2;>0;6>uQ5258905?2899708k0;301>{t=:?1<7=t^416?834>3;8>639cg8270=z{<986=4<{_707>;2;=0:??526bg956353z\674=:=:81=><4=7a`>4523ty>>k4?:2y]17`<5<9;6<==;<4`f?74=2wx9;:50;1xZ00334?=97?<2:?5gd<6;<1v88=:180[31:27>:>4>339>2f?=9:?0q~;90;297~X2>9169;?5120893e?289>7p}:5d83>6}Y=;1k?0:?85rs47b>5<4sW?>m63:5c8277=:>j?1=>;4}r76955254;9564<5?i?6<=:;|q616<72:qU98=4=477>45534349~w04c2908wS;=d:?66`<6;;16:h>51278yv0b=3:1?vP9e49>767=?=16>:=51268yv0b;3:1?vP9e29>766=?=16>:<51268yv0b:3:1?vP9e39>77`=?=16>:?51268yv0an3:1>vP9fg9>0d7=9:>0q~8id;296~X1nm1684h51268yv0aj3:1>vP9fc9>00q~8ia;296~X1nh1684l51268yv0a13:1>vP9f89>00q~8i8;296~X1n11684951268yv0a?3:1>vP9f69>0<3=9:>0q~8i6;296~X1n?1684=51268yv0a=3:1>vP9f49>0<6=9:>0q~8i4;296~X1n=1685j51268yv0a;3:1>vP9f29>0=g=9:>0q~8i2;296~X1n;1685951268yv0a83:1>vP9f19>0=2=9:>0q~8jf;296~X1mo1685?51268yv0bm3:1>vP9ed9>02c=9:>0q~8jd;296~X1mm168:l51268yv0bk3:1>vP9eb9>02>=9:>0q~8jb;296~X1mk168:;51268yv0bi3:1>vP9e`9>03`=9:>0q~8j9;296~X1m0168;m51268yv0b03:1>vP9e99>03?=9:>0q~8j7;296~X1m>168;851268yv17>3:1>vP8079>035=9:>0q~9?5;296~X08<168;>51268yv17<3:1>vP8059>00b=9:>0q~9?3;296~X08:1688o51268yv17:3:1>vP8039>001=9:>0q~9?1;296~X0881688:51268yv1783:1>vP8019>0cb=9:>0q~8ic;296~X1nj168ko51268yv0a93:1>vP9f09>0c1=9:>0q~8j6;296~X1m?168k:51268yv15:3:1>vP8239>61?=9o=0q~9=0;296~X0:916>9651g58yv16m3:1>vP81d9>610=9o=0q~9>d;296~X09m16>9;51g58yv16k3:1>vP81b9>612=9o=0q~9>b;296~X09k16>9=51g58yv16i3:1>vP81`9>614=9o=0q~9>9;296~X09016>9?51g58yv1603:1>vP8199>616=9o=0q~9>7;296~X09>16>>h51g58yv16>3:1>vP8179>66c=9o=0q~9>5;296~X09<16>>j51g58yv16;3:1>vP8129>66d=9o=0q~9>2;296~X09;16>>o51g58yv1693:1>vP8109>66?=9o=0q~9>0;296~X09916>>651g58yv17n3:1>vP80g9>661=9o=0q~9?e;296~X08l16>>851g58yv17l3:1>vP80e9>663=9o=0q~9?c;296~X08j16>>:51g58yv17j3:1>vP80c9>665=9o=0q~9?a;296~X08h16>><51g58yv1513:1>vP8289>606=9o=0q~9=8;296~X0:116>9h51g58yv15?3:1>vP8269>61c=9o=0q~9=6;296~X0:?16>9j51g58yv15=3:1>vP8249>61e=9o=0q~9=4;296~X0:=16>9l51g58yv15;3:1>vP8229>61g=9o=0q~9>f;296~X09o16>9951g58yv16<3:1>vP8159>66e=9o=0q~9?9;296~X08016>>?51g58yv>103:1?v37468245=::=31=>=4=5`a>4533ty3::4?:2y><11=nl16>965121891df289?7p}76483>6}:0==1jn522549565<5=h36<=;;|q;21<72:q64995fc9>613=9:9019l8:017?xu?>:0;6>u28559bd=::=>1=>=4=5`5>4533ty3:?4?:5y><11=n016>9=5121891d3289?70:m5;300>{t0?;1<7=t=964>c><5;>96<=<;<6a6?74<2wx4;>50;1x9=202o=01?:>:010?82e93;886s|84d94?5|51><6k84=363>45434>i<7?<4:p<0c=839p15:8:g78975a289870:nf;300>{t0c2<5;9n6<=<;<6ba?74<2wx48m50;1x9=202o901?=k:010?82fl3;886s|84c94?5|51><6k?4=31a>45434>jn7?<4:p<0?=83>p15:8:g28975f289870:n9;300>;3ih0:?95rs97;>5<4s42?;7ki;<00=?74;27?m:4>359~w=302908w06;7;gf?84403;8?63;a78271=z{1?=6=4<{<:73?cc3488;7?<3:?7e0<6;=1v5;::1808>3?3oh70<<6;307>;3i=0:?95rs977>5<4s42?;7km;<001?74;27?m>4>359~w=342908w06;7;gb?844<3;8?63;a38271=z{1?96=4<{<:73?c>3488?7?<3:?7=4<6;=1v5;>:1878>3?3o370<<2;307>;3?80:?952460956253z?;02<68>16>8>5121891`b289?7p}76d83>6}:0==1==84=36e>45434>m=7?<4:p<3b=839p15:8:026?843m3;8?63;e98271=z{1329>0ab=9:>0q~69b;297~;?<>0:<>5225a9565<5=n=6<=;;|q;2d<72:q649951108972e289870:lf;300>{t0?31<7=t=964>466348?m7?<3:?7g1<6;=1v589:1808>3?3lo70<;7;307>;3j00:?95rs97a>5<4s42?;7h=;<00g?74;27?mn4>359~w=372908w06;7;g4?84493;8?63;508271=z{1>m6=4={<:73?76:2788?484:p<1c=838p15:8:033?85393=?7p}74e83>7}:0==1==h4=263>2252z?;02<68l16?>h5759~w2d3290ow0<;9;306>;00:0n?63=2e8276=:;8<1=>=4=23;>455349:h7?<4:?1a2<6;=16>ko5121897cc289870;5nj0:?>523109565<5::?6<=;;|q4f6<72>q6>965120892>42l801>>j:010?85683;8>63<1`8277=:;8?1=>:4=23g>4553ty610=9:801:6<:d389661289870=?8;306>;49;0:??5231f9562<5:;>6<==;|q4f5<72>q6>9;5120892>42l:01>>n:011?84an3;8>63<048277=:;9n1=><4=223>4543ty612=9:801:6<:ed897`0289970;48<0:?>522g:9565<5::96<=;;|q4e`<720q6>9=5120892>42mh01?hk:010?82093;8963;a88270=::o?1=>:4=3db>45334><>7?<5:?7ed<6;<1v:ok:18;843:3;8>638828g4>;5n90:??524c69563<5=h>6<=:;<0e1?74;279i44>359>6`d=9:>0q~9nc;293~;5<80:??527919g0=::;n1=><4=3d3>454348n97?<2:?1a3<6;:16>hj51268yv1fj3:1hv3=418277=:?191==;4=30f>454349:o7?<3:?053<6;;16>kl5127897cd289>70;48:0:?85230`9562<5;o=6<=;;<0e359~w2gf290;00:0:<9523069564<5::n6<==;<127?74<278=44>329>74d=9:80q~9n9;293~;5;l0:??527919555<5::h6<==;<132?74:278359>747=9:>01>?<:011?xu0i10;6:u222f9564<5>286<>=;<0eb?74;278<>4>359>753=9:>01>>6:017?857j3;8>6s|7`494?1|5;9i6<==;<5;7?779279jo4>359>6c1=9:901?hk:017?85793;8863<028276=z{>k>6=48{<00e?74:27<4>4id:?1b1<6;;16>kl5121897`>289?70;5n:0:??5rs6c7>5<0s48857?<2:?4<6329>6`c=9:901?h?:017?84a:3;8?63=f28276=z{>k86=48{<004j7:?16`<6;;16>hm5120897cb289970;5m10:??5rs6c1>5k4>329>6`g=9:>01?kl:017?84a?3;8863=f88270=::ol1=>:4=222>452349:57?<4:?05g<6;:16?2}:::<1=><4=6:1>`4<5:;:6<==;<127?74;278=84>329>741=9:901>?6:011?xu0i90;6:u22279564<5>296h?4=22:>455349;n7?<3:?04a<6;:16?=h51218967628987p}89g83>2}:::>1=><4=6:1>`6<5:::6<=<;<137?74:278<84>349>751=9:901>>6:010?xu01l0;6:u22219564<5>296ih4=3da>455348m57?<3:?1ba<6;<16>kh51278966628997p}89e83>2}:::81=><4=6:1>ad<5;l<6<=:;<0e=?74:279j?4>359>6c3=9:801?h<:017?xu0jk0;6:u22429564<5>296i>4=3d1>455348nn7?<2:?1aa<6;;16>hh51208911728997p}8b`83>2}::=l1=><4=6:1>f3<5;8m6<==;<0f3?74;279i54>329>6`?=9:801?km:010?xu0j00;6iu225g9564<5>296<>:;<004?74;278=54>329>74g=9:901>?8:017?84b03;8863=e88276=::ll1=>=4=3d5>455348mo7?<2:?1b`<6;;16?=:51208yv1e03:1;v3=4e8277=:?181==:4=23`>455349:<7?<3:?057<6;:16?=h51268967028997p}8b683>2}::=i1=><4=6:1>464349:87?<3:?04=<6;:16?=o512189660289?70=?f;306>{t?k<1<79t=36a>45534=3>7??2:?04f<6;:16?=95120897`b289870=?0;306>;48;0:??5rs6`6>5<0s48?m7?<2:?4<7<68816>ko5120897`1289870;5nl0:?95231695657>57z?102<6;;16;5<5fe9>6c7=9:801?h9:017?84ak3;8863;a98277=:<4}r5b3?6=?r79?n4>339>3=4=n;16>k:5121897cf289970;5ml0:?9522g3956557z?174<6;;16;5<5e69>666=9:801?kn:016?84a83;8963=e68277=::l<1=><4}r67=?6=ok51208906228997p};4983>0}:0==1:=5245a95ce<5;hn6<=;;<730?74:27><84>329~w120290=w06;7;7e?823j3;mo63<1g8277=::kn1=><4=425>45334?;>7?<2:p010=83=p15:8:4g8912f28lh70=>f;307>;5jm0:?9525149563<5<:96<=<;<734?74:2wx?>=50;cx9=202=::0d`?84d:3;8963<388276=::ki1=>=4=425>454348j47?<4:?1e3<6;<16>o>512689067289>7p}<3383>g}:0==19n5232695ce<5;i96<=;;<10=?74:278?:4>349>6ge=9:8018>9:011?84f03;8>63=a78271=::k:1=>=4=423>4543ty38l4?:3y><11==<16>:=51g58yv>313:1>v3746860>;5?;0:j:5rs96;>5<5s42?;7;<;<045?7a?2wx?;:50;1x96c128lh70983;307>;3jk0:??5rs240>5<4s49n97?ic:?434<6;:168oo51208yv51:3:1?v3=4=5`;>4553ty8:<4?:2y>7`5=9oi01:8m:010?82e?3;8>6s|37294?5|5:o96339~w63a290?w0=j1;3eg>;0>>0:?>524c69564<5=h>6<==;|q01`<72:q6?h>51ga89202289870:m2;306>{t;4`d34==?7?<3:?7f4<6;;1v:7<:18181193;8863:1782<1=z{>396=4={<56b?74<27>=84>859~w2?62909w09:d;300>;29=0:495rs6;3>5<5s4=>n7?<4:?656<60=1v:6j:181812?3;8863:1082<1=z{>2o6=4={<561?74<27>==4>859~w2>d2909w09:3;300>;28o0:495rs6:a>5<5s4=>=7?<4:?64`<60=1v:6n:181813n3;8863:0e82<1=z{>226=4={<57`?74<27>859~w2>?2909w09;b;300>;28k0:495rs6:4>5<5s4=?57?<4:?64d<60=1v:69:181813?3;8863:0882<1=z{>2>6=4={<571?74<27><54>859~w2?e2909w0971;300>;29l0:495rs6;b>5<5s4=336=4={<54f?74<27>=o4>859~w2?02909w0989;300>;29h0:495rs6;5>5<5s4=<;7?<4:?65<<60=1v:7::181810=3;8863:1982<1=z{>3?6=4={<55b?74<27>=:4>859~w2>a2909w09:9;300>;29;0:495rs6:7>5<5s4=??7?<4:?642<60=1v8m;:1818>3?3>>70;l7;3eg>{t=j91<712<51f3=9oi0q~;md;290~;?<>0?>63:c082bf=:=k:1=>=4=44g>4553ty>nn4?:4y><11==9169n>51ga890ga289?70;m0;301>;2>j0:??5rs4`a>5<1s42?;7:i;<7ab?7ak27>mh4>329>1d`=9:9018l?:017?831l3;8?6s|5cc94?1|51><69k4=4`f>4`d34?ji7?<2:?6ec<6;;169o>51208900d289870;nd;304>{t=j31<79t=964>1b<5n;4>339>13e=9:>01;8>:011?83f>3;8>6s|5b:94?>|51><69m4=4ab>4`d34?ho7?<2:?6f3<6;:16:;?5126890g1289?70;ld;304>;2>m0:?95rs736>5<2s42?;77=;<462?7ak27>44484:?5`c<6;=16:ll51208yv06<3:19v37468:4>;1=<0:jn5259:931=:>mo1=>:4=7c;>4553ty==?4?:4y><11=0l16:8=51ga890>02>>01;jk:017?80f:3;8>6s|60394?3|51><65j4=771>4`d34?3:79;;<4gg?74<27=5k4>339~w377290>w06;7;:`?80293;mo63:84840>;1lk0:?95268a956455z?;02fb9>1=2=?=16:i65126893?>28997p}90d83>0}:0==14l5265d95ce<5<286::4=7ag>45334<2:7?<2:p25b=83?p15:8:9;8932b28lh70;72;57?80d:3;88639928277=z{?:h6=4:{<:73?>?34359>2<7=9:?0q~8?b;291~;?<>03;6394b82bf=:=1:1;9526e;9562<5?2n6<=:;|q54d<7221d=9oi0189i:66893b0289?7087b;301>{t>931<7;t=964>=3<5?>j68:1868>3?328708;8;3eg>;2?m0<8639d48271=:>181=>;4}r432?6==r738:472:?502<6nj169:m5759>2a2=9:>01;9i:016?xu18<0;68u28559<4=:>=<1=km4=45a>22<5?n86<=;;<44g?74=2wx:=:50;7x9=2021:01;:::0d`?830i3=?708k2;300>;1?00:?85rs720>5<2s42?;79i;<470?7ak27>;4484:?5`4<6;=16::851278yv07:3:19v374684a>;1<:0:jn5256:931=:>m:1=>:4=750>4523ty=<<4?:4y><11=?m16:9<51ga890102>>01;mi:017?80083;896s|61294?3|51><6:m4=71:>4`d34?<:79;;<4`a?74<27=:i4>349~w0`0290>w06;7;5a?805m3;mo63:74840>;1kj0:?95267c956355z?;02<0i27=>>4>fb9>122=?=16:nl512689300289>7p}92183>0}:0==1545264a95ce<5<=86::4=7ab>45334m7?ic:?634<0<27=o54>359>2gd=9:?0q~8>9;291~;?<>02:6395882bf=:=>:1;9526b59562<5?h36<=:;|q55=<7220>=9oi0188i:66893e1289?708m5;301>{t>8=1<7;t=964><2<5??<63?338708:4;3eg>;20m0<8639c58276=:>hl1=>;4}r427?6==r738:47f:?50<<6nj1695m5759>2f5=9:901;o9:016?xu1810;68u28559<1=:>;81=km4=4:a>22<5?o:6<=<;<4;1?74=2wx9h?50;7x9=202>301;<>:0d`?83?i3=?708j0;307>;1>=0:?85rs91e>5<5s42;:7k<;<4bf?74=2wx4>k50;0x9=612l801;o7:016?xu?;j0;6?u28149a4=:>h81=>;4}r:0f?6=:r73<;4j0:?5=c<6;<1v5=n:1818>7>3nm7086c;301>{t0:31<7ad<5?326<=:;|q;7=<72;q64=85d19>2<0=9:?0q~6<7;296~;?8?0h9639928270=z{19=6=4={<:32?77=27=5<4>359~w=522909w06?6;330>;10l0:?95rs917>5<5s42;:7??3:?57>3;;>639898271=z{19:6=4={<:32?77927=4?4>359~w=572909w06?6;dg?800n3;886s|83d94?4|51:=6k<4=75`>4533ty3>h4?:3y><50=m>16::751268yv>5l3:1>v37048f7>;1??0:?95rs90`>5<5s42;97k=;<447?74<2wx4?l50;0x9=622l;01;9?:017?xu?:h0;6?u28179a5=:>?n1=>:4}r:1=?6=:r73<84kf:?52d<6;=1v5<7:1818>7=3ni70897;300>{t0=<1<7a6<5?i:6<=;;|q;00<72;q64=;5c49>2gc=9:>0q~6;4;296~;?8<0:<8526c`956252z?;40<68=16:o651268yv>3:3:1>v37048246=:>k?1=>:4}r:75?6=:r73<84>039>2g4=9:>0q~6;0;296~;?8<0:<<526`d956252z?;40359~w=552909w06?5;d1?80?=3;886s|83594?4|51:>6h94=747>4533ty3=k4?:3y>3c7=9:901;jn:0:7?xu?9l0;6?u27dd9565<5?n26<6;;|q;5f<72;q6;hl5121893b0282?7p}71c83>7}:?l31=>=4=7f5>4>33ty3=l4?:3y>3`1=9:901;j::0:7?xu?900;6?u27d79565<5?n?6<6;;|q;5=<72;q6;h=5121893b4282?7p}71683>7}:?l;1=>=4=7f1>4>33ty3=;4?:3y>3a`=9:901;j>:0:7?xu?9<0;6?u27ef9565<5?n;6<6;;|q;51<72;q6;il5121893ea282?7p}71283>7}:?m31=>=4=7af>4>33ty3=<4?:3y>3a3=9:901;ml:0:7?xu?990;6?u27e19565<5?ii6<6;;|q;4c<72;q6;i?5121893ef282?7p}70d83>7}:?jl1=>=4=7a:>4>33ty33fb=9:901;m7:0:7?xu?8j0;6?u27b`9565<5?i<6<6;;|q;4g<72;q6;n75121893e1282?7p}70`83>7}:?j=1=>=4=7a6>4>33ty3<44?:3y>3f3=9:901;m;:0:7?xu?810;6?u27b19565<5?i86<6;;|q;63<72;q6;kh5121893c6282?7p}72483>7}:?on1=>=4=7g3>4>33ty3>94?:3y>3cd=9:901;ji:0:7?xu?::0;6?u27g;9565<5?nn6<6;;|q;67<72;q6;k95121893bc282?7p}72083>7}:?o?1=>=4=7f`>4>33ty3>=4?:3y>3c5=9:901;jm:0:7?xu?9m0;6?u27df9565<5?n36<6;;|q;57<72;q6;i95121893ec282?7p}70683>7}:?j;1=>=4=7a1>4>33ty:5=4?:d:x9744288n706;7;`0?8>3?3h:706;7;ce?8>3?3kn706;7;cg?8>3?3kh706;7;ca?8>3?3kj706;7;c:?8>3?3k3706;7;c4?8>3?3k=706;7;c7?8>3?3k8706;7;c1?8>3?3k:706;7;c3?8>3?33m706;7;;f?8>3?33o706;7;;`?8>3?33i706;7;`b?8>3?3h2706;7;`;?8>3?3h<706;7;`5?8>3?3h>706;7;`7?8>3?3h;706;7;c6?8>3?33j706;7;`g?8>3?3hi706;7;a7?8>3?3i9706;7;a2?8>3?3i;706;7;02g>;?<>09=l52855964?<51><6??7;<:73?47<2738:4=049><11=:9n015:8:32f?8>7=3>>706?5;67?8>7=3?>706?5;77?8>7=3h3706?5;`4?8>7=3h=706?5;`6?8>7=3h?706?5;`3?8>7=3k>706?5;;b?8>7=3hi706?5;a3?8>7=38:o63704815d=:09?1><74=926>77?342;977>3>?706?6;76?8>7>3??706?6;`;?8>7>3h<706?6;`5?8>7>3h>706?6;`7?8>7>3h;706?6;c6?8>7>33j706?6;`a?8>7>3i;706?6;02g>;?8?09=l52814964?<51:=6??7;<:32?47<273<;4=049><50=:9n015>9:32f?8>793;8?63883871>;00;0?863883861>;00;0>8638838a<>;00;0i;638838a2>;00;0i9638838a0>;00;0i<638838b1>;00;02m638838af>;00;0h<63883815f=:?181>77>34=3>7<>8:?4<7<58=16;5<5217892>52;:o70972;03a>;00:0?963882870>;00:0>963882860>;00:0i4638828a3>;00:0i:638828a1>;00:0i8638828a4>;00:0j9638828:e>;00:0in638828`4>;00:09=n52791964g<5>286??6;<5;7?46027<4>4=059>3=5=:9?01:6<:32g?81?;38;i63:8`80`>;20h08i63:8`80b>;20k08h63:8c80a>;20k08j63:6d80`>;2>l08i63:6d80b>;20j08h63:8b80a>;20j08j63:8e80`>;20m08i63:8e80b>;2>o08h63:6g80a>;2>o08j63:7180`>;2?908i63:7180b>;2?:08h63:7280a>;2?:08j63:7080`>;2?808i63:7080b>;2?;08h63:7380a>;2?;08j63:7580`>;2?=08i63:7580b>;2?<08h63:7480a>;2?<08j63:7780`>;2??08i63:7780b>;2?>08h63:7680a>;2?>08j63:7980`>;2?108i63:7980b>;2?008h63:7880a>;2?008j63:7b80`>;2?j08i63:7b80b>;2?h08h63:7`80a>;2?h08j63:7c80`>;2?k08i63:7c80b>;2?m08h63:7e80a>;2?m08j63:7d80`>;2?l08i63:7d80b>;2?o08h63:7g80a>;2?o08j63:8180`>;20908i63:8180b>;20808h63:8080a>;20808j63:8380`>;20;08i63:8380b>;20<08h63:8480a>;20<08j63:8280`>;20:08i63:8280b>;20=08h63:8580a>;20=08j63:8780`>;20?08i63:8780b>;20>08h63:8680a>;20>08j63:8980`>;20108i63:8980b>;20008h63:8880a>;20008j6s|18394?4es48987?i8:?;02;00;0:=452790954g<5>2864l4:h44i4;=4;<4;94;;4;54;n4;o4;h44=44?44>44;445470==b;3eg>;5i10:?>522`c9565<5;ki6<=:;|q006<72;op1>:<:0d`?845j3;8>63;708276=:=4=5`7>45434>i97?<3:?1eg<6;=16>oo5120897d5289?70;5i>0:??522`d9563<5;h<6<=<;<110?74:278>54>339>007=9:9019ol:010?82e13;8?63;c58276=:=4=5f5>45434>oh7?<3:?7a=<6;:168k?5121891`b289870:61;307>;3i;0:?>524`19565<5=k?6<=<;<6b1?74;27?m;4>329>0d1=9:9019om:010?82fl3;8?63;ad8276=:=4=5`3>45434>i=7?<3:?7f7<6;:168o85121891d0289870:m8;307>;3jh0:?>524c`9565<5==96<=<;<6be?74;2wx>;j50;0x974c28l<70{t:?o1<74`0348n;7?<5:p63`=838p1?3;896s|26294?4|5;9;6l:50;0x964f2>>01?o::0d4?xu5im0;6?u2332931=::ho1=k94}r0a1v?l>:181853;3=?70{t:k>1<722<5;h>6om51g589063289>70;?2;301>{t:j;1<7;t=21e>3b<5:>;6;j4=262>3b<5:>96;j4=3a1>4`03ty9o>4?:5y>77`=>m16?>>56e9>767=>m16>n:51g58yv4d=3:1?v3<3585`>;4;<0=h63=c782b2=z{:8j6=4=8z?06d<6nj1684;5120891?0289970:69;306>;31k0:??5248f9564<5=3m6<==;<6b5?74:27?5>4>339>6dg=9:?01?l=:011?84f>3;8>63=a68270=::hl1=>:4=206>45234>>;7?<2:?7b1<6;;1688o5120891`0289970:90;306>;3=m0:??524gc9564<5=lo6<==;<657?74:27?994>339>02>=9:801989:011?820j3;8>63;6b8277=:<4=55f>45534>3=7?<2:?72c<6;;1685:512089112289970:77;306>;30h0:??5249f9564<5=3;6<==;<664?74=2wx?9:50;6:853<3;mo63=a28277=::h81=><4=3c2>455348j<7?<2:?1=d<6;;16>4h5120897?>289970<6e;306>;5110:??5228f9564<5;3<6<==;<0:g?74:2795;4>339>6=3;8>63=8g8277=::0>1=><4=3:f>4553482?7?<2:?14<5120897>d289970<61;306>;50k0:??5229c9564<5;2?6<==;<0;=?74:2794>4>339>6=>=9:801?6=:011?84??3;8>63=808277=::1<1=><4=3:3>455348397?<2:?13d<6;;16>:h51208971>289970<8e;306>;5?10:??5226f9564<5;=<6<==;<04g?74:279;;4>339>62d=9:801?9::011?840<3;8>63;578277=:<4=57:>45534>m:7?<2:?71c<6;;1688m5120891`>289970:ic;306>;3>;0:??524419564<5==<6<==;<651?74:27?;l4>339>03d=9:801987:011?820l3;8>63;818277=:<4=5:0>45534><87?<2:?7<3<6;;168575120891>d289970:7f;306>{t;;;1<7:t=202>4`d34?:j7?<3:?1a1<6;;16>o;52148yv23n3:1>v3<44840>;3=90:j:5rs5c3>5<5s49n:79;;<6b5?7a?2wx84k50;0x96c22>>0197i:0d4?xu31j0;6?u23d6931=:<0n1=k94}r6:e?6=:r78i>484:?7=g<6n>1v977:18185b:3=?70:69;3e3>{t<0<1<722<5=3<65759>0<3=9o=0q~:62;296~;4lo0<863;9282b2=z{=2n6=4={<1g`?1334>2<7?74:p0=d=838p1>jl:66891>c282?7p};8983>7}:;mh1;95249c95=2397>52z?0`d<0<27?4:4>859~w1>52909w0=k9;57?82?<3;386s|46d94?4|5:n36::4=5:2>4>33ty?;n4?:3y>7a1=?=168:k51968yv2013:1>v3;3?k0:495rs555>5<5s49o979;;<64>0199::0:7?xu3>m0;6?u23e0931=:{t1<722<5=<=6<6;;|q724<72;q6?nk5759>035=91>0q~::e;296~;4km0<863;6182<1=z{=?i6=4={<1`g?1334>>h7?74:p00>=838p1>mm:668913f282?7p};5483>7}:;jk1;95244595=2>>7>52z?0g<<0<27?994>859~w1`e2909w0:;5;57?82al3;386s|4g:94?4|5=>?6::4=5db>4>33ty?j84?:3y>015=?=168k951968yv2a:3:1>v3;43840>;3n=0:495rs5d3>5<5s4>8479;;<040?7a?2wx8hh50;0x91502>>01?9::0d4?xu3ml0;6?u2424931=::><1=k94}r6f`?6=:r7??8484:?132<6n>1v9kl:181824<3=?70<88;3e3>{t22<5;=26<5759>62g=9o=0q~:j9;296~;3;80<863=7c82b2=z{=o<6=4={<61b?133487}:<;n1;95226g95c1n87>52z?76f<0<279;k4>f69~w1c42909w0:=b;57?84?83;m;6s|4d094?4|5=8j6::4=3:2>4`03ty?i<4?:3y>07?=?=16>5<51g58yv2b83:1>v3;29840>;50:0:j:5rs5fe>5<5s4>9;79;;<0;0?7a?2wx8ik50;0x91412>>01?6::0d4?xu3lj0;6?u2436931=::1<1=k94}r6gf?6=:r7?>>484:?1<2<6n>1v9jn:181825:3=?70<78;3e3>{t22<5;2265759>6=g=9o=0q~:k7;296~;39o0<863=8c82b2=z{=n>6=4={<621?133483o7?i7:p0a2=838p19?;:66897>c28l<7p};d283>7}:<891;95229g95c1o>7>52z?757<0<2794k4>f69~w1b62909w0:>1;57?84>83;m;6s|4e294?4|5=;;6::4=3;2>4`03ty?oh4?:3y>05c=?=16>4<51g58yv2dl3:1>v3;0e840>;51:0:j:5rs5a`>5<5s4>;o79;;<0:0?7a?2wx8nl50;0x916e2>>01?7::0d4?xu3kh0;6?u241c931=::0<1=k94}r6`=?6=:r7?<4484:?1=2<6n>1v9m7:18182703=?70<68;3e3>{t22<5;3266=:66897?c28l<7p};c083>7}:<9;1;95228g95c1h<7>52z?745<0<2795k4>f69~w1da2909w0=if;57?84f83;m;6s|4cg94?4|5:ln6::4=3c2>4`03ty?ni4?:3y>7cb=?=16>l<51g58yv2ek3:1>v3;5i:0:j:5rs426>5<5s4>?h79;;<731?7?<2wx9==50;0x912d2>>018>;:0:7?xu2880;6?u245`931=:=981=5:4}r6eb?6=:r7?8l484:?645<60=1v>;m:18785cl3;mo63=8b8271=:=8<1=><4=5`3>4553ty89l4?:5y>7ae=9oi01?6k:017?836=3;8>63;ag8277=z{:?26=4;{<1gf?7ak2794h4>359>142=9:8019oj:011?xu4=10;69u23ec95ce<5;2m6<=;;<727?74:27?mi4>339~w630290?w0=k9;3eg>;5190:?9525039564<5=ki6<==;|q013<72;2990:??524`c956497>54z?0`2<6nj16>4<51268906a289970:n7;306>{t;<>1<7:t=2f5>4`d3482?7?<4:?64`<6;;168l851208yv52;3:18v3i1=>:4=42g>45534>j97?<2:p704=83>p1>j;:0d`?840l3;8863:0b8277=:1=><4}r164?6=fb9>62c=9:>018>m:011?82f;3;8>6s|35d94?2|5:n:6339>0d4=9:80q~=;e;290~;4l90:jn522929562<5<:26<==;<6:5?74:2wx?9j50;7x96ea28lh70<71;300>;3?80:??5251:9564<5==96<==;|q00f<72=q6?nk51ga897>5289?70;>e;306>;3nl0:??5rs26a>5<3s49hh7?ic:?1<6<6;=1691}:;ji1=km4=43`>45534>>o7?<4:?7a=<6;;1v>:6:18785dj3;mo63:1c8277=:<<31=>:4=5fg>4553ty8854?:5y>7fg=9oi018?n:011?822>3;8863;d78277=z{:><6=4;{<1`=?7ak27>=44>339>005=9:>019mi:011?xu4k=0;69u245795ce<5<;36<==;<6eg?74<27?o94>339~w6e4290?w0:;4;3eg>;29>0:??524g;9562<5=h26<==;|q0g7<72=q689=51ga89075289970:i6;300>;3ij0:??5rs2a2>5<3s4>?>7?ic:?642<6;;168k=51268913628997p}7}:<=;1=km4=5c2>4543ty8nk4?:3y>016=9oi0197i:010?xu4jl0;6?u242d95ce<5=3o6<=<;|q0fa<72;q68>k51ga891?e28987p}7}:<:n1=km4=5;:>4543ty8no4?:3y>06e=9oi01978:010?xu4j00;6?u242c95ce<5=3>6<=<;|q0f=<72;q68>751ga891?428987p}6}:<:21=km4=435>45434>3j7?<3:p7g0=839p19=8:0d`?836=3;8?63;8b8276=z{:h>6=4<{<602?7ak27>=94>329>0=?=9:90q~=m4;297~;3;<0:jn525019565<5=2=6<=<;|q0f6<72:q68>:51ga89076289870:73;307>{t;k81<7=t=510>4`d34?:<7?<3:?7<5<6;:1v>l>:180824:3;mo63:0g8276=:<>n1=>=4}r1a4?6=;r7??<4>fb9>15c=9:90199n:010?xu4il0;6>u243d95ce<5;3?6<=;;<643?74;2wx?lj50;1x914b28lh70<65;300>;3?=0:?>5rs2c`>5<4s4>9h7?ic:?1=3<6;=168;k51218yv5fj3:1?v3;2b82bf=::0=1=>:4=54a>4543ty8ml4?:2y>07d=9oi01?77:017?82103;8?6s|3`;94?5|5=8j6329~w6g?2908w0:=9;3eg>;51h0:?952470956553z?76=<6nj16>4l51268913a28987p}6}:<;=1=km4=3:7>45334>>o7?<3:p7d3=839p19<9:0d`?84?=3;8863;588276=z{:k86=4<{<610?7ak2794;4>359>000=9:90q~=n2;297~;3::0:jn522959562<5=?86<=<;|q0e4<72:q68?<51ga897>?289?70:ic;307>{t;h:1<7=t=502>4`d348357?<4:?7b<<6;:1v>7i:18082583;mo63=8`8271=:=4}r1:a?6=;r7?=k4>fb9>6=d=9:>019h<:010?xu41m0;6?u240g95ce<5=>:6::4}r1:g?6=:r7?=i4>fb9>016=?=1v>7m:181826k3;mo63;3g840>{t;0k1<74`d34>8i79;;|q0==<72;q68<751ga8915c2>>0q~=67;296~;3910:jn5242a931=z{:3=6=4={<623?7ak27??l484:p7<3=838p19?9:0d`?82413=?7p}<9583>6}:<8?1=km4=357>45434>3j7?<4:p7<5=839p19?;:0d`?840=3;8?63;8b8271=z{:396=4<{<627?7ak279;;4>329>0=?=9:>0q~=61;297~;39;0:jn522659565<5=2=6<=;;|q0=5<72:q68{t;1l1<7=t=533>4`d348<57?<3:?7<5<6;=1v>6k:180827m3;mo63=7`8276=:<>n1=>:4}r1;g?6=;r7?fb9>62d=9:90199n:017?xu40k0;6>u241a95ce<5;=h6<=<;<73`?74;2wx?5o50;1x916e28lh70<8d;307>;28j0:?>5rs2::>5<4s4>;m7?ic:?13`<6;:169=l51218yv5?03:1?v3;0882bf=::>l1=>=4=42b>4543ty84:4?:2y>05>=9oi01?6?:010?83713;8?6s|39494?5|5=:<6<54>329~w6>22908w0:?6;3eg>;50;0:?>5250g956553z?740<6nj16>5=51218907c28987p}<8383>6}:<991=km4=3;`>453348387?<3:p7=7=839p19>=:0d`?84>l3;8863=848276=z{:2;6=4<{<635?7ak2795h4>359>6=0=9:90q~=8f;297~;3890:jn5228d9562<5;2<6<=<;|q03`<72:q6?kh51ga897g7289?70<78;307>{t;>n1<7=t=2df>4`d348j=7?<4:?1<<<6;:1v>9l:18085al3;mo63=a38271=::1k1=>=4}r14f?6=;r78jn4>fb9>6d5=9:>01?6m:010?xu4?h0;6?u240g931=:;oh1=km4}r14=?6=:r7?=i484:?0bd<6nj1v>98:181826k3=?70=i8;3eg>{t;><1<722<5:l<67c0=9oi0q~=84;296~;3910<8636}::1i1=>=4=357>453349m>7?ic:p726=839p1?6k:010?840=3;8863359>7c6=9oi0q~=9e;297~;50o0:?>522659562<5:om64>51218971?289?70=jd;3eg>{t;?h1<7=t=3;2>454348<57?<4:?0af<6nj1v>8n:18084>:3;8?63=7`8271=:;lh1=km4}r15=?6=;r795>4>329>62d=9:>01>kn:0d`?xu4>10;6>u22869565<5:o26;3?=0:?95rs245>5<4s482:7?<3:?0a2<6nj168;k51268yv51=3:1?v3=968276=:;mo1=km4=54a>4533ty89n4?:2y>6<>=9:901>j<:0d`?82103;886s|34394?5|5;326<=<;<1`359~w6e22908w0<6a;307>;3;k0:jn52470956253z?1=g<6;:168>>51ga8913a289?7p}6}::0i1=>=4=506>4`d34?:o7?<3:p7d2=839p1?7k:010?826i3;mo63:1c8276=z{:326=4<{<0:a?74;27?fb9>14g=9:90q~=7e;297~;51o0:?>5241695ce<5<;26<=<;|q0<6<72:q6>l>5121896`>28lh70;>8;307>{t;>21<7=t=3c2>454349ni7?ic:?652<6;:1v>8k:18084f:3;8?63=4}r172?6=;r79m>4>329>7f0=9oi018>8:010?xu4:l0;6?u232395ce<5;=86<=<;|q06a<72;q6?>>51ga8971528987p}<2b83>7}:;;l1=km4=352>4543ty9i>4?:3y>74d=91>019lm:016?xu5m;0;6?u230195=2<5=hj6<=:;|q1a4<72;q6?=l5196891d?289>7p}=e183>7}:;4=221>4>33ty9hk4?:3y>0g0=9:?01?hn:0:7?xu5ll0;6?u24c09563<5;oo6<6;;|q1`a<72;q6>h95196891d6289>7p}=db83>7}:;831=5:4=5`3>4523ty9ho4?:3y>747=91>019oi:016?xu5lh0;6?u231;95=2<5=kn6<=:;|q1`<<72;q68lj512789667282?7p}=d983>7}:;4=3d;>4>33ty9h:4?:3y>0d1=9:?01?km:0:7?xu5l?0;6?u22d495=2<5=k=6<=:;|q1`0<72;q6?<95196891g2289>7p}=d583>7}:;9l1=5:4=5c7>4523ty9h>4?:3y>751=91>019o<:016?xu5l;0;6?u24`09563<5;ln6<6;;|q1`4<72;q684?5127897`1282?7p}=d183>7}:;4=3g:>4>33ty9ok4?:3y>6`3=91>019h>:016?xu5kl0;6?u230f95=2<5=o36<=:;|q1ga<72;q6?<;5196891bc289>7p}=cb83>7}:;9n1=5:4=5f5>4523ty9oo4?:3y>0f`=9:?01>>;:0:7?xu5kh0;6?u24b69563<5;lh6<6;;|q1g<<72;q6>k;5196891d>289>7p}=c983>7}:;4=3ge>4>33ty9o:4?:3y>6`>=91>019;>:016?xu4;l0;6?u235095ce<5;hn6<=<;|q07a<72;q6?9?51ga897db289>7p}<3b83>7}:;=:1=km4=3`g>4543ty8?o4?:3y>76`=9oi01?lk:016?xu4;10;6?u2327931=:;:k1=k94}r102?6=:r78?9484:?072<6n>1v><=:1827~;4:;0:jn522b09564<5;i?6<=<;<10e?74<278?:4>359>6f0=9:901?o6:325?84ei3;8863=b08143=::h?1>=84=3ce>455348i<7?<2:?1f3<6;=16>o9512689642289970==9;307>;3=90:??5223a9565<5;h26<=;;|q063<728<9:0d`?84d:3;8?63=c58271=:;:k1=><4=214>454348h:7?<4:?16g<6;=16>lo5120897ge289970;5j;0:?>522c19563<5;k=6<=<;<0b3?74<279mk4>329>6g6=9:?01?l9:010?84e?3;8>63<248271=:;;31=><4=573>454348i57?<5:p775=838p1><=:6689642282?7p}<2683>7}:;;<1;95233;95=252z?05c<6n>169=:51218yv3583:1>v3=f582b2=::o?1=>;4}r710?6=:r78f69>75b=9:?0q~;=8;296~;49=0:j:52307956352z?05f<6n>16?v3<0782b2=:;9=1=>;4}r711?6=:r78

f69>75`=9:?0q~;=9;296~;49?0:j:5230595637>52z?04=<6n>16?=751278yv35>3:1>v3<1182b2=:;8;1=>;4}r71e?6=:r78=54>f69>74?=9:?0q~;=3;296~;48h0:j:5231`956352z?057<6n>16?<=51278yv35j3:1>v3<1`82b2=:;8h1=>;4}r065?6=:r78?44>f69>76g=9:90q~<:2;296~;4:=0:49523379565?7>52z?06=<6n>16??751268yv42<3:1>v3;5782<1=:<<=1=>=4}r061?6=:r7?j>4>859>0c2=9:90q~<:6;296~;3=00:495244c9565;7>52z?7b3<60=168k951218yv4203:1>v3;5g82<1=:=4}r06=?6=:r7?9n4>859>00b=9:90q~<:a;296~;3n00:49524gc9565n7>52z?7bf<60=168kj51218yv42k3:1>v3;6382<1=:=4}r06`?6=:r7?9>4>859>002=9:90q~<:e;296~;3?>0:495246:9565j7>52z?720<60=168;851218yv4183:1>v3;7`82<1=:<>h1=>=4}r055?6=:r7?:o4>859>03e=9:90q~<92;296~;3>10:495247;956552z?73a<60=168:k51218yv41<3:1>v3;8182<1=:<1;1=>=4}r051?6=:r7?:h4>859>03`=9:90q~<96;296~;30:0:4952496956552z?731<60=168:;51218yv4103:1>v3;8782<1=:<1=1=>=4}r05=?6=:r7?444>859>0=g=9:90q~<9a;296~;30j0:495249f956552z?751218yv41k3:19v3=2c82b2=:=9>1=>:4=421>45334?;97?<4:?645<6;=1v:ll:1818>7:3=?709md;3e3>{t09:1<77t=926>15<51:>68=4=925>15<51:=68=4=922>4`034=3>7:<;<5;6?3434=3?7:<;<5;7?343ty<54=>m16;oh51g58yv>7:3:1?v370382bf=::l>1=>:4=4c`>4533ty3<>4?:03x9=622;;<706?5;021>;?8<09=9528179645<51:=6??8;<:32?46=273<;4=159><50=:8901:6=:334?81?:38:9638838151=:?181><=4=6:0>77034=3?7<>5:?4<6<59=16;5=520189=6328l<7p}8f183>7}:09<18?527g395c152z?;43<2827f69~w2cf2909w06?6;6e?81bj3;m;6s|7d:94?4|51:=69k4=6g:>4`03ty<50=v370787g>;0m<0:j:5rs6g1>5<5s42;:7:m;<5f7?7a?2wx;h>50;0x9=612=k01:k>:0d4?xu0ll0;6?u2814917=:?ml1=k94}r5gg?6=:r73<;490:?4`a<6n>1v:jn:1818>7>3?m709kb;3e3>{t?m21<70c<5>n263a3=9o=0q~9k2;296~;?8?0>o638d282b2=z{>n;6=4={<:32?3e34=o=7?i7:p3fc=838p15>9:4c892ea28l<7p}8cb83>7}:09?18?527bf95c152z?;40<2827f69~w2e?2909w06?5;6e?81d13;m;6s|7b494?4|51:>69k4=6a4>4`03ty<53=v370487g>;0k:0:j:5rs6df>5<5s42;97:m;<5eb?7a?2wx;km50;0x9=622=k01:hk:0d4?xu0nh0;6?u2817917=:?oh1=k94}r5e1v:h9:1818>7=3?m709i7;3e3>{t?o>1<70c<5>l>63c5=9o=0q~9jc;296~;?8<0>o638ee82b2=z{>n=6=4={<:31?3e34=o;7?i7:p3f6=838p15>::4c892e628l<7p}87383>7}:?1918?5276195c152z?4<6<2827<;<4>f69~w20d2909w0973;6e?811l3;m;6s|77c94?4|5>2869k4=64a>4`03ty<:54?:3y>3=5=3:1>v388287g>;0>>0:j:5rs647>5<5s4=3?7:m;<551?7a?2wx;;<50;0x92>42=k01:8<:0d4?xu0>90;6?u2791917=:??;1=k94}r56a?6=:r7<4>490:?41c<6n>1v:;l:18181?;3?m709:d;3e3>{t?0c<5>?i6301=9o=0q~9:4;296~;00:0>o6385482b2=z{>?96=4={<5;7?3e34=>?7?i7:p306=838p1:6<:4c8923628l<7p}84d83>7}:?1818?5275d95c152z?4<7<2827<8i4>f69~w22f2909w0972;6e?813j3;m;6s|75:94?4|5>2969k4=66:>4`03ty<8;4?:3y>3=4=v388387g>;0<<0:j:5rs6:3>5<5s4=3>7:m;<5;5?7a?2wx;:k50;0x92>52=k01:9i:0d4?xu0?j0;6?u2790917=:?>n1=k94}r54e?6=:r7<4?490:?43g<6n>1v:97:18181?:3?m70989;3e3>{t?><1<70c<5>=<6323=9o=0q~99e;296~;00;0>o6386g82b2=z{>?36=4={<5;6?3e34=>57?i7:p314=838p1:6=:4c8922428l<7p}:9g83>7}:=mi1;95259g95c152z?6`g<0<27>4k4>f69~w0g62909w0;k9;57?83>83;m;6s|5`194?4|54>33ty>m84?:3y>1g?=?=169l;51g58yv3f03:1;v3:c`82ba=:=jh1=kj4=4`f>4`c34?ij7?id:?6g5<6nm169n?51gf890g>28l<7p}:e183>7b|53b<53b<53b<53b<53b<53b<5359>201;7l:017?80>n3;88639a98271=:>h81=>:4=7ca>45334<=87?<3:?5f7<6;:16:o;5121893d?289870875;307>;1jl0:?>526c`9565<5?k=6<=<;<4bb?74;27=;>4>329>231=9:901;m>:010?800>3;8?639788276=:>?k1=>=4=75`>45434<=h7?<3:?53c<6;:16::>5121893>5289870878;307>;10k0:?>5269g9565<5?3:6<=<;|q6e7<720q69i65214890b>28lo70;ka;3e`>;2lk0:ji525ea95cb<5hk4>fe9>1g>=9o=0q~;m2;29<~;2j;0:jn525`;9564<5n54>329>1g5=9:>018o<:011?83f?3;886s|5c694??|5mo4>359>1g1=9:8018o;:011?83e03;8>63:a78276=:=k91=><4=4c4>4553ty>ml4?:5y>1f3=>m169n856e9>1f1=>m169ll51g58yv3e13:18?u25c;95ce<56?>9;<457?47>27=n<4=079>2g2=:9<01;l8:325?80?<38;:639be8143=:>kk1>=84=7c6>76134;1?109<;5267;9650<5?=i6?>9;<45g?47>27=;h4=079>23`=:9<01;6>:325?80??38;:6398`8143=:>1n1>=84=7;3>76134;1l=0:??526e19564<5?n96<==;<4g5?74:27=h=4>339>2f`=9:801;mj:011?80dk3;8>639cc8277=:>jk1=><4=7a:>45534;1k:0:??526d39564<5?o;6<==;<4gb?74:27=hh4>339>2ab=9:801;jl:011?80cj3;8>639d98277=:>jn1=><4=7a1>45534<287?<4:?5=2<6;=16:4o5126893?c289?708n0;300>;1i00:?9526`19562<5?kh6<=;;|q5ed<72;q6:885759>2de=91>0q~8n7;296~;1=<0<8639a882<1=z{?k:6=4={<467?13347}:><;1;95268f95=252z?515<0<27=5l4>859~w3?22909w08;f;57?80>?3;386s|68094?4|5?>n6::4=7;7>4>33ty=4k4?:3y>21b=?=16:4>51g58yv0?k3:1>v394b840>;10m0:j:5rs7::>5<5s4>01;68:0d4?xu1090;6?u265:931=:>1;1=k94}r44`?6=:r7=8:484:?53`<6n>1v;9n:181803>3=?7088b;3e3>{t>>=1<722<5?=36223=9o=0q~881;296~;1<:0<86397382b2=z{?7}:>;o1;95267;95c152z?566<0<27=:;4>f69~w3da2909w08:c;57?80d83;m;6s|6ca94?4|5??i6::4=7`g>4`03ty=n44?:3y>20g=?=16:oo51g58yv0e>3:1>v3958840>;1j>0:j:5rs7`0>5<5s4<>479;;<4a0?7a?2wx:o>50;0x93302>>01;l>:0d4?xu1im0;6?u2646931=:>ho1=k94}r4b0?6=:r7=84484:?5e0<6n>1v;6<:181805:3=?70874;3e3>{t>?81<722<5?<86{t=oo1<7=t=763>4`d34h91=>=4}r7eg?6=;r7=?h4>fb9>2ae=9:901;o?:010?xu2nk0;6>u262f95ce<5?ni6<=<;<4:`?74;2wx9ko50;1x935d28lh708k8;307>;11h0:?>5rs4d:>5<4s4<8n7?ic:?5ga<6;:16:4951218yv3a03:1?v393`82bf=:>j81=>=4=7;7>4543ty>j;4?:2y>26>=9oi01;jn:010?80>93;8>6s|5g794?5|5?9<6339~w0`32908w08<6;3eg>;1l>0:?>5269`956453z?570<6nj16:i85121893>?28997p}:f383>6}:>:>1=km4=7f6>45434<3>7?<2:p1c7=839p1;=<:0d`?80c<3;8?6397g8277=z{4>329>22e=9:80q~;jf;297~;1;80:jn526e09565<5?=26<==;|q6a`<72:q6:>>51ga893b6289870886;306>{t=ln1<7=t=70e>4`d34>:1=><4}r7fe?6=;r7=>n4>fb9>2fc=9:901;8k:011?xu2m00;6>u263`95ce<5?ih6<=<;<45e?74:2wx9h650;1x934f28lh708lb;307>;1>>0:??5rs4g4>5<4s4<957?ic:?5gd<6;:16:n?51208yv3b>3:1?v392982bf=:>j31=>=4=7`f>4553ty>i84?:2y>271=9oi01;m7:010?80ej3;8>6s|5d694?5|5?8=6339~w0c42908w08=5;3eg>;1k?0:?>526c795647>53z?561<6nj16:n;5121893d528997p}91g83>6}:>?:1=km4=7a7>45334359>2=3=9:80q~8>c;297~;1=m0:jn526d29562<5?1a`=9oi0186j:010?83?n3;8?63:918276=:>hh1=>=4}r7g2?6=;r7>hh4>fb9>1a`=?=16:l651218yv3c=3:1?v3:de82bf=:=mo1;9526`0956553z?6`f<6nj169ij5759>2<`=9:90q~;k3;297~;2lk0:jn5259g9564<5?3h6<=<;|q6`7<72:q69io51ga890>a289970869;307>{t=m;1<7=t=4f:>4`d34?om79;;<4:2?74;2wx9i>50;1x90b?28lh70;60;306>;11:0:?>5rs4ae>5<5s4?hn79;;<7`g?7a?2wx9nk50;0x90ef2>>018mk:0d4?xu2j:0;6?u25c0931=:=k91=5:4}r7a1?6=:r7>n9484:?6f2<6n>1v87m:18183em3=?70;nd;3e3>{t=0i1<722<55759>1d`=9o=0q~;6e;296~;2k80<863:b182b2=z{<2j6=4={<7;e?7ak27=9i484:p1=d=838p186m:0d`?802m3=?7p}:6d83>7}:=?o1=km4=707>2252z?6c2909w0;7d;3eg>;1>90<86s|57d94?4|5<;=4?:3y>126=9oi01;<9:668yv30;3:1>v3:7282bf=:>;31;95rs452>5<5s4?<=7?ic:?562<0<2wx9:<50;0x901528lh708=8;57?xu2?=0;6?u256695ce<5?8j6::4}r741?6=:r7>;84>fb9>27d=?=1v899:181830>3;mo6392b840>{t=>=1<74`d34<9h79;;|q63=<72;q69:651ga8934a2>>0q~;89;296~;2?00:jn52622931=z{<=h6=4={<74g?7ak27=?>484:p12g=838p189n:0d`?80493=?7p}:7c83>7}:=>h1=km4=711>2252z?63a<6nj16:>:5759~w01b2909w0;8e;3eg>;1;<0<86s|56d94?4|5<=m64=4?:3y>1=6=9oi01;=8:668yv3?93:1>v3:8082bf=:>:21;95rs4:1>5<5s4?3>7?ic:?57d<0<2wx95;50;0x90>228lh708494>fb9>26e=?=1v869:18183?>3;mo6393d840>{t=1=1<74`d34<8j79;;|q6<=<72;q695651ga893272>>0q~;79;296~;2000:jn52653931=z{<3j6=4<{<7a2?7a?27>n:4>349>1g5=9:90q~;61;296~;11:0:495268695637>52z?5=3<60=16:4951278yv3>;3:1>v399882<1=:>0k1=>;4}r7:0?6=:r7=5n4>859>252z?5e=<60=16:l751278yv3>?3:1>v39a382<1=:>h91=>;4}r7:859>2de=9:?0q~;69;290~;2>j0:j:525c19563<570<=c;3;0>{t9081<74`034?j?7?<3:p5<5=838p188l:016?831l3;386s|2`a94?4|5:8i6?>9;<0b{t:kl1<7=t=3`g>4`0348i?7?<3:?1f<<6;:1v?m?:18084em3;m;63=b28271=::k31=><4}r3:0?6=:r78o;484:?714<60=1v<7::18185d?3=?70:nc;3;0>{t90<1<722<5=h26<6;;|q2=2<72;q6?k75759>0f2=91>0q~?68;296~;38=0<863;cg82<1=z{8326=4={<63b?1334>o:7?74:p59c83>7}:<;?1;9524d:95=252z?775<0<27?j<4>859~w4?c2909w0:4>33ty:5k4?:3y>7a5=?=1684?51968yv7f83:1>v3;3i;0:495rs0c2>5<5s49n;79;;<6b7?7?<2wx=l<50;0x96c?2>>019o;:0:7?xu6i:0;6?u23d;931=:{t9h<1<722<5=k36<6;;|q2e2<72;q6?hj5759>0dd=91>0q~?n8;296~;4mo0<863;ae82<1=z{8k26=4={<1e4?1334>ji7?74:p5dg=838p1>h>:66891ga282?7p}>ac83>7}:;o81;9524c295=252z?0b6<0<27?n<4>859~w4gc2909w0=i4;57?82e:3;386s|1`g94?4|5:l>6::4=5`0>4>33ty:mk4?:3y>7c0=?=168o851968yv7e83:1>v3;3j>0:495rs0`2>5<5s49m479;;<6a>019ln:0:7?xu6j:0;6?u23g`931=:i=484:?524<6n>1v{t9k<1<74`0348mm7?<5:p5g1=838p1?kn:0d4?84b13;896s|1c:94?4|5;oh6{t9kk1<74`0348nj7?<5:p5gd=838p1?h8:0d4?84a>3;896s|1ca94?4|5;l26{t9ko1<74`0348mi7?<5:p5g`=838p1>>>:0d4?85783;896s|1b294?4|5::86{t9j81<74`034><<7?<5:p5f5=838p1?h=:0d4?82f03;896s|1b694?4|5;l86<6;;<6a7?74=2wx=n;50;0x911628l<70:80;300>{t9j<1<74>334><<7?<3:p5f1=838p19o6:0d4?82f03;886s|1b:94?4|5=kj6<6;;<6b{t9jk1<74`034>i?7?<3:p713=8392w0=l6;032>;4k>09<;523dg9650<5:l26?>9;<630?47>27?04g=:9<019<::325?824838;:63;3c8143=:;j21>=84=2f0>761349oi72;:=70=ja;032>;4mk09<;523da9650<5:oo6?>9;<1fb?47>278j=4=079>7c7=:9<01>h=:325?85a;38;:63=84=2d5>761349m;7;29?0:?9525079562<5<;?6<=;;<727?74<27>=<4>359>146=9:>018>i:017?837m3;8863:0e8271=:=9i1=>:4=42a>45334?;m7?<4:?64<<6;=169=651268907b289?70;>d;300>;29j0:?95250`9562<5<;j6<=;;<72=?74<27>=54>359>141=9:>018?=:017?837?3;886s|1b`94?4|56<==;<7b2?7a?2wx=nm50;0x90g2289870;n7;3;0>{t9jn1<7455348jm7?i7:p5fc=838p1?o6:010?84fj3;m;6s|1bd94?4|5;h36<==;<0a=?7?<2wx=i>50;0x97d?289870{t9m;1<7455348i>7?i7:p5a4=838p1?l>:010?84e;3;m;6s|1e194?4|5;k>6<==;<0b2?7a?2wx=i:50;0x97g2289870{t9m?1<7455348jj7?i7:p5a0=838p1?oj:010?84e83;m;6s|1e594?4|5;h>6<==;<0a2?7a?2wx=i650;0x97d2289870{t9m31<745434<=87?74:p5ag=838p1;l>:010?80e:3;386s|1e`94?4|5?h?6<=<;<4a1?7?<2wx=im50;0x93d02898708m8;3;0>{t9mn1<745434<397?74:p5ac=838p1;lk:010?80em3;386s|1ed94?4|5?hj6<=<;<4af?7?<2wx=h>50;0x93g22898708n6;3;0>{t9l;1<745434{t9l?1<745434<<:7?74:p5`0=838p1;97:010?80013;386s|1d594?4|5?<26<=<;<45e?7?<2wx=h650;0x931e28987088c;3;0>{t9l31<745434<=h7?74:p5`g=838p1;9j:010?800n3;386s|1d`94?4|5?6289870872;3;0>{t9ln1<745434<347?74:p5`c=838p1;6n:010?80?j3;386s|1dd94?4|5?2o6<=<;<4;a?7?<2wx=k>50;0x93?7289870861;3;0>{t=;o1<745534?9i7?i7:p10d=838p1;l>:011?832j3;m;6s|54f94?4|5?h?6<==;<76`?7a?2wx98h50;0x93d0289970;:f;3e3>{t==>1<745534??87?i7:p135=838p1;lk:011?831;3;m;6s|57394?4|5?hj6<==;<755?7a?2wx98:50;0x93g2289970;:4;3e3>{t=<31<745534?>57?i7:p16>=838p1;9=:011?83403;m;6s|52294?4|5?<=6<==;<704?7a?2wx9;;50;0x93e7289970;95;3e3>{t=:k1<745534?8m7?i7:p16e=838p1;97:011?834k3;m;6s|52094?4|5?<26<==;<706?7a?2wx9>k50;0x931e289970;{t=:>1<745534?887?i7:p116=838p1;9j:011?83383;m;6s|52494?4|5?6289970;;2;3e3>{t==<1<745534??:7?i7:p11>=838p1;6n:011?83303;m;6s|55c94?4|5?2o6<==;<77e?7a?2wx99m50;0x93?7289970;;c;3e3>{t9o;1<74>334>><7?<4:p5c5=838p1>:;:6689137282?7psa12f1>5<6sA8:<6sa12f0>5<6sA8:<6sa12f7>5<6sA8:<6sa12f6>5<6sA8:<6sa12f5>5<6sA8:<6sa12f4>5<6sA8:<6sa12f;>5<6sA8:<6sa12f:>5<6sA8:<6sa12fb>5<6sA8:<6sa12fa>5<6sA8:<6sa12f`>5<6sA8:<6sa12fg>5<6sA8:<6sa12ff>5<6sA8:<6sa12fe>5<6sA8:<6sa12g3>5<6sA8:<6sa12g2>5<6sA8:<6sa12g1>5<6sA8:<6sa12g0>5<6sA8:<6sa12g7>5<6sA8:<6sa12g6>5<6sA8:<6sa12g5>5<6sA8:<6sa12g4>5<6sA8:<6sa12g;>5<6sA8:<6sa12g:>5<6sA8:<6sa12gb>5<6sA8:<6sa12ga>5<6sA8:<6sa12g`>5<6sA8:<6sa12gg>5<6sA8:<6sa12gf>5<6sA8:<6sa12ge>5<6sA8:<6sa12d3>5<6sA8:<6sa12d2>5<6sA8:<6sa12d1>5<6sA8:<6sa12d0>5<6sA8:<6sa12d7>5<6sA8:<6sa12d6>5<6sA8:<6sa12d5>5<6sA8:<6sa12d4>5<6sA8:<6sa12d;>5<6sA8:<6sa12d:>5<6sA8:<6sa12db>5<6sA8:<6sa12da>5<6sA8:<6sa12d`>5<6sA8:<6sa12dg>5<6sA8:<6sa12df>5<6sA8:<6sa12de>5<6sA8:<6sa1523>5<6sA8:<6sa1522>5<6sA8:<6sa1521>5<6sA8:<6sa1520>5<6sA8:<6sa1527>5<6sA8:<6sa1526>5<6sA8:<6sa1525>5<6sA8:<6sa1524>5<6sA8:<6sa152;>5<6sA8:<6sa152:>5<6sA8:<6sa152b>5<6sA8:<6sa152a>5<6sA8:<6sa152`>5<6sA8:<6sa152g>5<6sA8:<6sa152f>5<6sA8:<6sa152e>5<6sA8:<6sa1533>5<6sA8:<6sa1532>5<6sA8:<6sa1531>5<6sA8:<6sa1530>5<6sA8:<6sa1537>5<6sA8:<6sa1536>5<6sA8:<6sa1535>5<6sA8:<6sa1534>5<6sA8:<6sa153;>5<6sA8:<6sa153:>5<6sA8:<6sa153b>5<6sA8:<6sa153a>5<6sA8:<6sa153`>5<6sA8:<6sa153g>5<6sA8:<6sa153f>5<6sA8:<6sa153e>5<6sA8:<6sa1503>5<6sA8:<6sa1502>5<6sA8:<6sa1501>5<6sA8:<6sa1500>5<6sA8:<6sa1507>5<6sA8:<6sa1506>5<6sA8:<6sa1505>5<6sA8:<6sa1504>5<6sA8:<6sa150;>5<6sA8:<6sa150:>5<6sA8:<6sa150b>5<6sA8:<6sa150a>5<6sA8:<6sa150`>5<6sA8:<6sa150g>5<6sA8:<6sa150f>5<6sA8:<6sa150e>5<6sA8:<6sa1513>5<6sA8:<6sa1512>5<6sA8:<6sa1511>5<6sA8:<6sa1510>5<6sA8:<6sa1517>5<6sA8:<6sa1516>5<6sA8:<6sa1515>5<6sA8:<6sa1514>5<6sA8:<6sa151;>5<6sA8:<6sa151:>5<6sA8:<6sa151b>5<6sA8:<6sa151a>5<6sA8:<6sa151`>5<6sA8:<6sa151g>5<6sA8:<6sa151f>5<6sA8:<6sa151e>5<6sA8:<6sa1563>5<6sA8:<6sa1562>5<6sA8:<6sa1561>5<6sA8:<6sa1560>5<6sA8:<6sa1567>5<6sA8:<6sa1566>5<6sA8:<6sa1565>5<6sA8:<6sa1564>5<6sA8:<6sa156;>5<6sA8:<6sa156:>5<6sA8:<6sa156b>5<6sA8:<6sa156a>5<6sA8:<6sa156`>5<6sA8:<6sa156g>5<6sA8:<6sa156f>5<6sA8:<6sa156e>5<6sA8:<6sa1573>5<6sA8:<6sa1572>5<6sA8:<6sa1571>5<6sA8:<6sa1570>5<6sA8:<6sa1577>5<6sA8:<6sa1576>5<6sA8:<6sa1575>5<6sA8:<6sa1574>5<6sA8:<6sa157;>5<6sA8:<6sa157:>5<6sA8:<6sa157b>5<6sA8:<6sa157a>5<6sA8:<6sa157`>5<6sA8:<6sa157g>5<6sA8:<6sa157f>5<6sA8:<6sa157e>5<6sA8:<6sa1543>5<6sA8:<6sa1542>5<6sA8:<6sa1541>5<6sA8:<6sa1540>5<6sA8:<6sa1547>5<6sA8:<6sa1546>5<6sA8:<6sa1545>5<6sA8:<6sa1544>5<6sA8:<6sa154;>5<6sA8:<6sa154:>5<6sA8:<6sa154b>5<6sA8:<6sa154a>5<6sA8:<6sa154`>5<6sA8:<6sa154g>5<6sA8:<6sa154f>5<6sA8:<6sa154e>5<6sA8:<6sa1553>5<6sA8:<6sa1552>5<6sA8:<6sa1551>5<6sA8:<6sa1550>5<6sA8:<6sa1557>5<6sA8:<6sa1556>5<6sA8:<6sa1555>5<6sA8:<6sa1554>5<6sA8:<6sa155;>5<6sA8:<6sa155:>5<6sA8:<6sa155b>5<6sA8:<6sa155a>5<6sA8:<6sa155`>5<6sA8:<6sa155g>5<6sA8:<6sa155f>5<6sA8:<6sa155e>5<6sA8:<6sa15:3>5<6sA8:<6sa15:2>5<6sA8:<6sa15:1>5<6sA8:<6sa15:0>5<6sA8:<6sa15:7>5<6sA8:<6sa15:6>5<6sA8:<6sa15:5>5<6sA8:<6sa15:4>5<6sA8:<6sa15:;>5<6sA8:<6sa15::>5<6sA8:<6sa15:b>5<6sA8:<6sa15:a>5<6sA8:<6sa15:`>5<6sA8:<6sa15:g>5<6sA8:<6sa15:f>5<6sA8:<6sa15:e>5<6sA8:<6sa15;3>5<6sA8:<6sa15;2>5<6sA8:<6sa15;1>5<6sA8:<6sa15;0>5<6sA8:<6sa15;7>5<6sA8:<6sa15;6>5<6sA8:<6sa15;5>5<6sA8:<6sa15;4>5<6sA8:<6sa15;;>5<6sA8:<6sa15;:>5<6sA8:<6sa15;b>5<6sA8:<6sa15;a>5<6sA8:<6sa15;`>5<6sA8:<6sa15;g>5<6sA8:<6sa15;f>5<6sA8:<6sa15;e>5<6sA8:<6sa15c3>5<6sA8:<6sa15c2>5<6sA8:<6sa15c1>5<6sA8:<6sa15c0>5<6sA8:<6sa15c7>5<6sA8:<6sa15c6>5<6sA8:<6sa15c5>5<6sA8:<6sa15c4>5<6sA8:<6sa15c;>5<6sA8:<6sa15c:>5<6sA8:<6sa15cb>5<6sA8:<6sa15ca>5<6sA8:<6sa15c`>5<6sA8:<6sa15cg>5<6sA8:<6sa15cf>5<6sA8:<6sa15ce>5<6sA8:<6sa15`3>5<6sA8:<6sa15`2>5<6sA8:<6sa15`1>5<6sA8:<6sa15`0>5<6sA8:<6sa15`7>5<6sA8:<6sa15`6>5<6sA8:<6sa15`5>5<6sA8:<6sa15`4>5<6sA8:<6sa15`;>5<6sA8:<6sa15`:>5<6sA8:<6sa15`b>5<6sA8:<6sa15`a>5<6sA8:<6sa15``>5<6sA8:<6sa15`g>5<6sA8:<6sa15`f>5<6sA8:<6sa15`e>5<6sA8:<6sa15a3>5<6sA8:<6sa15a2>5<6sA8:<6sa15a1>5<6sA8:<6sa15a0>5<6sA8:<6sa15a7>5<6sA8:<6sa15a6>5<6sA8:<6sa15a5>5<6sA8:<6sa15a4>5<6sA8:<6sa15a;>5<6sA8:<6sa15a:>5<6sA8:<6sa15ab>5<6sA8:<6sa15aa>5<6sA8:<6sa15a`>5<6sA8:<6sa15ag>5<6sA8:<6sa15af>5<6sA8:<6sa15ae>5<6sA8:<6sa15f3>5<6sA8:<6sa15f2>5<6sA8:<6sa15f1>5<6sA8:<6sa15f0>5<6sA8:<6sa15f7>5<6sA8:<6sa15f6>5<6sA8:<6sa15f5>5<6sA8:<6sa15f4>5<6sA8:<6sa15f;>5<6sA8:<6sa15f:>5<6sA8:<6sa15fb>5<6sA8:<6sa15fa>5<6sA8:<6sa15f`>5<6sA8:<6sa15fg>5<6sA8:<6sa15ff>5<6sA8:<6sa15fe>5<6sA8:<6sa15g3>5<6sA8:<6sa15g2>5<6sA8:<6sa15g1>5<6sA8:<6sa15g0>5<6sA8:<6sa15g7>5<6sA8:<6sa15g6>5<6sA8:<6sa15g5>5<6sA8:<6sa15g4>5<6sA8:<6sa15g;>5<6sA8:<6sa15g:>5<6sA8:<6sa15gb>5<6sA8:<6sa15ga>5<6sA8:<6sa15g`>5<6sA8:<6sa15gg>5<6sA8:<6sa15gf>5<6sA8:<6sa15ge>5<6sA8:<6sa15d3>5<6sA8:<6sa15d2>5<6sA8:<6sa15d1>5<6sA8:<6sa15d0>5<6sA8:<6sa15d7>5<6sA8:<6sa15d6>5<6sA8:<6sa15d5>5<6sA8:<6sa15d4>5<6sA8:<6sa15d;>5<6sA8:<6sa15d:>5<6sA8:<6sa15db>5<6sA8:<6sa15da>5<6sA8:<6sa15d`>5<6sA8:<6sa15dg>5<6sA8:<6sa15df>5<6sA8:<6sa15de>5<6sA8:<6sa1423>5<6sA8:<6sa1422>5<6sA8:<6sa1421>5<6sA8:<6sa1420>5<6sA8:<6sa1427>5<6sA8:<6sa1426>5<6sA8:<6sa1425>5<6sA8:<6sa1424>5<6sA8:<6sa142;>5<6sA8:<6sa142:>5<6sA8:<6sa142b>5<6sA8:<6sa142a>5<6sA8:<6sa142`>5<6sA8:<6sa142g>5<6sA8:<6sa142f>5<6sA8:<6sa142e>5<6sA8:<6sa1433>5<6sA8:<6sa1432>5<6sA8:<6sa1431>5<6sA8:<6sa1430>5<6sA8:<6sa1437>5<6sA8:<6sa1436>5<6sA8:<6sa1435>5<6sA8:<6sa1434>5<6sA8:<6sa143;>5<6sA8:<6sa143:>5<6sA8:<6sa143b>5<6sA8:<6sa143a>5<6sA8:<6sa143`>5<6sA8:<6sa143g>5<6sA8:<6sa143f>5<6sA8:<6sa143e>5<6sA8:<6sa1403>5<6sA8:<6sa1402>5<6sA8:<6sa1401>5<6sA8:<6sa1400>5<6sA8:<6sa1407>5<6sA8:<6sa1406>5<6sA8:<6sa1405>5<6sA8:<6sa1404>5<6sA8:<6sa140;>5<6sA8:<6sa140:>5<6sA8:<6sa140b>5<6sA8:<6sa140a>5<6sA8:<6sa140`>5<6sA8:<6sa140g>5<6sA8:<6sa140f>5<6sA8:<6sa140e>5<6sA8:<6sa1413>5<6sA8:<6sa1412>5<6sA8:<6sa1411>5<6sA8:<6sa1410>5<6sA8:<6sa1417>5<6sA8:<6sa1416>5<6sA8:<6sa1415>5<6sA8:<6sa1414>5<6sA8:<6sa141;>5<6sA8:<6sa141:>5<6sA8:<6sa141b>5<6sA8:<6sa141a>5<6sA8:<6sa141`>5<6sA8:<6sa141g>5<6sA8:<6sa141f>5<6sA8:<6sa141e>5<6sA8:<6sa1463>5<6sA8:<6sa1462>5<6sA8:<6sa1461>5<6sA8:<6sa1460>5<6sA8:<6sa1467>5<6sA8:<6sa1466>5<6sA8:<6sa1465>5<6sA8:<6sa1464>5<6sA8:<6sa146;>5<6sA8:<6sa146:>5<6sA8:<6sa146b>5<6sA8:<6sa146a>5<6sA8:<6sa146`>5<6sA8:<6sa146g>5<6sA8:<6sa146f>5<6sA8:<6sa146e>5<6sA8:<6sa1473>5<6sA8:<6sa1472>5<6sA8:<6sa1471>5<6sA8:<6sa1470>5<6sA8:<6sa1477>5<6sA8:<6sa1476>5<6sA8:<6sa1475>5<6sA8:<6sa1474>5<6sA8:<6sa147;>5<6sA8:<6sa147:>5<6sA8:<6sa147b>5<6sA8:<6sa147a>5<6sA8:<6sa147`>5<6sA8:<6sa147g>5<6sA8:<6sa147f>5<6sA8:<6sa147e>5<6sA8:<6sa1443>5<6sA8:<6sa1442>5<6sA8:<6sa1441>5<6sA8:<6sa1440>5<6sA8:<6sa1447>5<6sA8:<6sa1446>5<6sA8:<6sa1445>5<6sA8:<6sa1444>5<6sA8:<6sa144;>5<6sA8:<6sa144:>5<6sA8:<6sa144b>5<6sA8:<6sa144a>5<6sA8:<6sa144`>5<6sA8:<6sa144g>5<6sA8:<6sa144f>5<6sA8:<6sa144e>5<6sA8:<6sa1453>5<6sA8:<6sa1452>5<6sA8:<6sa1451>5<6sA8:<6sa1450>5<6sA8:<6sa1457>5<6sA8:<6sa1456>5<6sA8:<6sa1455>5<6sA8:<6sa1454>5<6sA8:<6sa145;>5<6sA8:<6sa145:>5<6sA8:<6sa145b>5<6sA8:<6sa145a>5<6sA8:<6sa145`>5<6sA8:<6sa145g>5<6sA8:<6sa145f>5<6sA8:<6sa145e>5<6sA8:<6sa14:3>5<6sA8:<6sa14:2>5<6sA8:<6sa14:1>5<6sA8:<6sa14:0>5<6sA8:<6sa14:7>5<6sA8:<6sa14:6>5<6sA8:<6sa14:5>5<6sA8:<6sa14:4>5<6sA8:<6sa14:;>5<6sA8:<6sa14::>5<6sA8:<6sa14:b>5<6sA8:<6sa14:a>5<6sA8:<6sa14:`>5<6sA8:<6sa14:g>5<6sA8:<6sa14:f>5<6sA8:<6sa14:e>5<6sA8:<6sa14;3>5<6sA8:<6sa14;2>5<6sA8:<6sa14;1>5<6sA8:<6sa14;0>5<6sA8:<6sa14;7>5<6sA8:<6sa14;6>5<6sA8:<6sa14;5>5<6sA8:<6sa14;4>5<6sA8:<6sa14;;>5<6sA8:<6sa14;:>5<6sA8:<6sa14;b>5<6sA8:<6sa14;a>5<6sA8:<6sa14;`>5<6sA8:<6sa14;g>5<6sA8:<6sa14;f>5<6sA8:<6sa14;e>5<6sA8:<6sa14c3>5<6sA8:<6sa14c2>5<6sA8:<6sa14c1>5<6sA8:<6sa14c0>5<6sA8:<6sa14c7>5<6sA8:<6sa14c6>5<6sA8:<6sa14c5>5<6sA8:<6sa14c4>5<6sA8:<6sa14c;>5<6sA8:<6sa14c:>5<6sA8:<6sa14cb>5<6sA8:<6sa14ca>5<6sA8:<6sa14c`>5<6sA8:<6sa14cg>5<6sA8:<6sa14cf>5<6sA8:<6sa14ce>5<6sA8:<6sa14`3>5<6sA8:<6sa14`2>5<6sA8:<6sa14`1>5<6sA8:<6sa14`0>5<6sA8:<6sa14`7>5<6sA8:<6sa14`6>5<6sA8:<6sa14`5>5<6sA8:<6sa14`4>5<6sA8:<6sa14`;>5<6sA8:<6sa14`:>5<6sA8:<6sa14`b>5<6sA8:<6sa14`a>5<6sA8:<6sa14``>5<6sA8:<6sa14`g>5<6sA8:<6sa14`f>5<6sA8:<6sa14`e>5<6sA8:<6sa14a3>5<6sA8:<6sa14a2>5<6sA8:<6sa14a1>5<6sA8:<6sa14a0>5<6sA8:<6sa14a7>5<6sA8:<6sa14a6>5<6sA8:<6sa14a5>5<6sA8:<6sa14a4>5<6sA8:<6sa14a;>5<6sA8:<6sa14a:>5<6sA8:<6sa14ab>5<6sA8:<6sa14aa>5<6sA8:<6sa14a`>5<6sA8:<6sa14ag>5<6sA8:<6sa14af>5<6sA8:<6sa14ae>5<6sA8:<6sa14f3>5<6sA8:<6sa14f2>5<6sA8:<6sa14f1>5<6sA8:<6sa14f0>5<6sA8:<6sa14f7>5<6sA8:<6sa14f6>5<6sA8:<6sa14f5>5<6sA8:<6sa14f4>5<6sA8:<6sa14f;>5<6sA8:<6sa14f:>5<6sA8:<6sa14fb>5<6sA8:<6sa14fa>5<6sA8:<6sa14f`>5<6sA8:<6sa14fg>5<6sA8:<6sa14ff>5<6sA8:<6sa14fe>5<6sA8:<6sa14g3>5<6sA8:<6sa14g2>5<6sA8:<6sa14g1>5<6sA8:<6sa14g0>5<6sA8:<6sa14g7>5<6sA8:<6sa14g6>5<6sA8:<6sa14g5>5<6sA8:<6sa14g4>5<6sA8:<6sa14g;>5<6sA8:<6sa14g:>5<6sA8:<6sa14gb>5<6sA8:<6sa14ga>5<6sA8:<6sa14g`>5<6sA8:<6sa14gg>5<6sA8:<6sa14gf>5<6sA8:<6sa14ge>5<6sA8:<6sa14d3>5<6sA8:<6sa14d2>5<6sA8:<6sa14d1>5<6sA8:<6sa14d0>5<6sA8:<6sa14d7>5<6sA8:<6sa14d6>5<6sA8:<6sa14d5>5<6sA8:<6sa14d4>5<6sA8:<6sa14d;>5<6sA8:<6sa14d:>5<6sA8:<6sa14db>5<6sA8:<6sa14da>5<6sA8:<6sa14d`>5<6sA8:<6sa14dg>5<6sA8:<6sa14df>5<6sA8:<6sa14de>5<6sA8:<6sa1723>5<6sA8:<6sa1722>5<6sA8:<6sa1721>5<6sA8:<6sa1720>5<6sA8:<6sa1727>5<6sA8:<6sa1726>5<6sA8:<6sa1725>5<6sA8:<6sa1724>5<6sA8:<6sa172;>5<6sA8:<6sa172:>5<6sA8:<6sa172b>5<6sA8:<6sa172a>5<6sA8:<6sa172`>5<6sA8:<6sa172g>5<6sA8:<6sa172f>5<6sA8:<6sa172e>5<6sA8:<6sa1733>5<6sA8:<6sa1732>5<6sA8:<6sa1731>5<6sA8:<6sa1730>5<6sA8:<6sa1737>5<6sA8:<6sa1736>5<6sA8:<6sa1735>5<6sA8:<6sa1734>5<6sA8:<6sa173;>5<6sA8:<6sa173:>5<6sA8:<6sa173b>5<6sA8:<6sa173a>5<6sA8:<6sa173`>5<6sA8:<6sa173g>5<6sA8:<6sa173f>5<6sA8:<6sa173e>5<6sA8:<6sa1703>5<6sA8:<6sa1702>5<6sA8:<6sa1701>5<6sA8:<6sa1700>5<6sA8:<6sa1707>5<6sA8:<6sa1706>5<6sA8:<6sa1705>5<6sA8:<6sa1704>5<6sA8:<6sa170;>5<6sA8:<6sa170:>5<6sA8:<6sa170b>5<6sA8:<6sa170a>5<6sA8:<6sa170`>5<6sA8:<6sa170g>5<6sA8:<6sa170f>5<6sA8:<6sa170e>5<6sA8:<6sa1713>5<6sA8:<6sa1712>5<6sA8:<6sa1711>5<6sA8:<6sa1710>5<6sA8:<6sa1717>5<6sA8:<6sa1716>5<6sA8:<6sa1715>5<6sA8:<6sa1714>5<6sA8:<6sa171;>5<6sA8:<6sa171:>5<6sA8:<6sa171b>5<6sA8:<6sa171a>5<6sA8:<6sa171`>5<6sA8:<6sa171g>5<6sA8:<6sa171f>5<6sA8:<6sa171e>5<6sA8:<6sa1763>5<6sA8:<6sa1762>5<6sA8:<6sa1761>5<6sA8:<6sa1760>5<6sA8:<6sa1767>5<6sA8:<6sa1766>5<6sA8:<6sa1765>5<6sA8:<6sa1764>5<6sA8:<6sa176;>5<6sA8:<6sa176:>5<6sA8:<6sa176b>5<6sA8:<6sa176a>5<6sA8:<6sa176`>5<6sA8:<6sa176g>5<6sA8:<6sa176f>5<6sA8:<6sa176e>5<6sA8:<6sa1773>5<6sA8:<6sa1772>5<6sA8:<6sa1771>5<6sA8:<6sa1770>5<6sA8:<6sa1777>5<6sA8:<6sa1776>5<6sA8:<6sa1775>5<6sA8:<6sa1774>5<6sA8:<6sa177;>5<6sA8:<6sa177:>5<6sA8:<6sa177b>5<6sA8:<6sa177a>5<6sA8:<6sa177`>5<6sA8:<6sa177g>5<6sA8:<6sa177f>5<6sA8:<6sa177e>5<6sA8:<6sa1743>5<6sA8:<6sa1742>5<6sA8:<6sa1741>5<6sA8:<6sa1740>5<6sA8:<6sa1747>5<6sA8:<6sa1746>5<6sA8:<6sa1745>5<6sA8:<6sa1744>5<6sA8:<6sa174;>5<6sA8:<6sa174:>5<6sA8:<6sa174b>5<6sA8:<6sa174a>5<6sA8:<6sa174`>5<6sA8:<6sa174g>5<6sA8:<6sa174f>5<6sA8:<6sa174e>5<6sA8:<6sa1753>5<6sA8:<6sa1752>5<6sA8:<6sa1751>5<6sA8:<6sa1750>5<6sA8:<6sa1757>5<6sA8:<6sa1756>5<6sA8:<6sa1755>5<6sA8:<6sa1754>5<6sA8:<6sa175;>5<6sA8:<6sa175:>5<6sA8:<6sa175b>5<6sA8:<6sa175a>5<6sA8:<6sa175`>5<6sA8:<6sa175g>5<6sA8:<6sa175f>5<6sA8:<6sa175e>5<6sA8:<6sa17:3>5<6sA8:<6sa17:2>5<6sA8:<6sa17:1>5<6sA8:<6sa17:0>5<6sA8:<6sa17:7>5<6sA8:<6sa17:6>5<6sA8:<6sa17:5>5<6sA8:<6sa17:4>5<6sA8:<6sa17:;>5<6sA8:<6sa17::>5<6sA8:<6sa17:b>5<6sA8:<6sa17:a>5<6sA8:<6sa17:`>5<6sA8:<6sa17:g>5<6sA8:<6sa17:f>5<6sA8:<6sa17:e>5<6sA8:<6sa17;3>5<6sA8:<6sa17;2>5<6sA8:<6sa17;1>5<6sA8:<6sa17;0>5<6sA8:<6sa17;7>5<6sA8:<6sa17;6>5<6sA8:<6sa17;5>5<6sA8:<6sa17;4>5<6sA8:<6sa17;;>5<6sA8:<6sa17;:>5<6sA8:<6sa17;b>5<6sA8:<6sa17;a>5<6sA8:<6sa17;`>5<6sA8:<6sa17;g>5<6sA8:<6sa17;f>5<6sA8:<6sa17;e>5<6sA8:<6sa17c3>5<6sA8:<6sa17c2>5<6sA8:<6sa17c1>5<6sA8:<6sa17c0>5<6sA8:<6sa17c7>5<6sA8:<6sa17c6>5<6sA8:<6sa17c5>5<6sA8:<6sa17c4>5<6sA8:<6sa17c;>5<6sA8:<6sa17c:>5<6sA8:<6sa17cb>5<6sA8:<6sa17ca>5<6sA8:<6sa17c`>5<6sA8:<6sa17cg>5<6sA8:<6sa17cf>5<6sA8:<6sa17ce>5<6sA8:<6sa17`3>5<6sA8:<6sa17`2>5<6sA8:<6sa17`1>5<6sA8:<6sa17`0>5<6sA8:<6sa17`7>5<6sA8:<6sa17`6>5<6sA8:<6sa17`5>5<6sA8:<6sa17`4>5<6sA8:<6sa17`;>5<6sA8:<6sa17`:>5<6sA8:<6sa17`b>5<6sA8:<6sa17`a>5<6sA8:<6sa17``>5<6sA8:<6sa17`g>5<6sA8:<6sa17`f>5<6sA8:<6sa17`e>5<6sA8:<6sa17a3>5<6sA8:<6sa17a2>5<6sA8:<6sa17a1>5<6sA8:<6sa17a0>5<6sA8:<6sa17a7>5<6sA8:<6sa17a6>5<6sA8:<6sa17a5>5<6sA8:<6sa17a4>5<6sA8:<6sa17a;>5<6sA8:<6sa17a:>5<6sA8:<6sa17ab>5<6sA8:<6sa17aa>5<6sA8:<6sa17a`>5<6sA8:<6sa17ag>5<6sA8:<6sa17af>5<6sA8:<6sa17ae>5<6sA8:<6sa17f3>5<6sA8:<6sa17f2>5<6sA8:<6sa17f1>5<6sA8:<6sa17f0>5<6sA8:<6sa17f7>5<6sA8:<6sa17f6>5<6sA8:<6sa17f5>5<6sA8:<6sa17f4>5<6sA8:<6sa17f;>5<6sA8:<6sa17f:>5<6sA8:<6sa17fb>5<6sA8:<6sa17fa>5<6sA8:<6sa17f`>5<6sA8:<6sa17fg>5<6sA8:<6sa17ff>5<6sA8:<6sa17fe>5<6sA8:<6sa17g3>5<6sA8:<6sa17g2>5<6sA8:<6sa17g1>5<6sA8:<6sa17g0>5<6sA8:<6sa17g7>5<6sA8:<6sa17g6>5<6sA8:<6sa17g5>5<6sA8:<6sa17g4>5<6sA8:<6sa17g;>5<6sA8:<6sa17g:>5<6sA8:<6sa17gb>5<6sA8:<6sa17ga>5<6sA8:<6sa17g`>5<6sA8:<6sa17gg>5<6sA8:<6sa17gf>5<6sA8:<6sa17ge>5<6sA8:<6sa17d3>5<6sA8:<6sa17d2>5<6sA8:<6sa17d1>5<6sA8:<6sa17d0>5<6sA8:<6sa17d7>5<6sA8:<6sa17d6>5<6sA8:<6sa17d5>5<6sA8:<6sa17d4>5<6sA8:<6sa17d;>5<6sA8:<6sa17d:>5<6sA8:<6sa17db>5<6sA8:<6sa17da>5<6sA8:<6sa17d`>5<6sA8:<6sa17dg>5<6sA8:<6sa17df>5<6sA8:<6sa17de>5<6sA8:<6sa1623>5<6sA8:<6sa1622>5<6sA8:<6sa1621>5<6sA8:<6sa1620>5<6sA8:<6sa1627>5<6sA8:<6sa1626>5<6sA8:<6sa1625>5<6sA8:<6sa1624>5<6sA8:<6sa162;>5<6sA8:<6sa162:>5<6sA8:<6sa162b>5<6sA8:<6sa162a>5<6sA8:<6sa162`>5<6sA8:<6sa162g>5<6sA8:<6sa162f>5<6sA8:<6sa162e>5<6sA8:<6sa1633>5<6sA8:<6sa1632>5<6sA8:<6sa1631>5<6sA8:<6sa1630>5<6sA8:<6sa1637>5<6sA8:<6sa1636>5<6sA8:<6sa1635>5<6sA8:<6sa1634>5<6sA8:<6sa163;>5<6sA8:<6sa163:>5<6sA8:<6sa163b>5<6sA8:<6sa163a>5<6sA8:<6sa163`>5<6sA8:<6sa163g>5<6sA8:<6sa163f>5<6sA8:<6sa163e>5<6sA8:<6sa1603>5<6sA8:<6sa1602>5<6sA8:<6sa1601>5<6sA8:<6sa1600>5<6sA8:<6sa1607>5<6sA8:<6sa1606>5<6sA8:<6sa1605>5<6sA8:<6sa1604>5<6sA8:<6sa160;>5<6sA8:<6sa160:>5<6sA8:<6sa160b>5<6sA8:<6sa160a>5<6sA8:<6sa160`>5<6sA8:<6sa160g>5<6sA8:<6sa160f>5<6sA8:<6sa160e>5<6sA8:<6sa1613>5<6sA8:<6sa1612>5<6sA8:<6sa1611>5<6sA8:<6sa1610>5<6sA8:<6sa1617>5<6sA8:<6sa1616>5<6sA8:<6sa1615>5<6sA8:<6sa1614>5<6sA8:<6sa161;>5<6sA8:<6sa161:>5<6sA8:<6sa161b>5<6sA8:<6sa161a>5<6sA8:<6sa161`>5<6sA8:<6sa161g>5<6sA8:<6sa161f>5<6sA8:<6sa161e>5<6sA8:<6sa1663>5<6sA8:<6sa1662>5<6sA8:<6sa1661>5<6sA8:<6sa1660>5<6sA8:<6sa1667>5<6sA8:<6sa1666>5<6sA8:<6sa1665>5<6sA8:<6sa1664>5<6sA8:<6sa166;>5<6sA8:<6sa166:>5<6sA8:<6sa166b>5<6sA8:<6sa166a>5<6sA8:<6sa166`>5<6sA8:<6sa166g>5<6sA8:<6sa166f>5<6sA8:<6sa166e>5<6sA8:<6sa1673>5<6sA8:<6sa1672>5<6sA8:<6sa1671>5<6sA8:<6sa1670>5<6sA8:<6sa1677>5<6sA8:<6sa1676>5<6sA8:<6sa1675>5<6sA8:<6sa1674>5<6sA8:<6sa167;>5<6sA8:<6sa167:>5<6sA8:<6sa167b>5<6sA8:<6sa167a>5<6sA8:<6sa167`>5<6sA8:<6sa167g>5<6sA8:<6sa167f>5<6sA8:<6sa167e>5<6sA8:<6sa1643>5<6sA8:<6sa1642>5<6sA8:<6sa1641>5<6sA8:<6sa1640>5<6sA8:<6sa1647>5<6sA8:<6sa1646>5<6sA8:<6sa1645>5<6sA8:<6sa1644>5<6sA8:<6sa164;>5<6sA8:<6sa164:>5<6sA8:<6sa164b>5<6sA8:<6sa164a>5<6sA8:<6sa164`>5<6sA8:<6sa164g>5<6sA8:<6sa164f>5<6sA8:<6sa164e>5<6sA8:<6sa1653>5<6sA8:<6sa1652>5<6sA8:<6sa1651>5<6sA8:<6sa1650>5<6sA8:<6sa1657>5<6sA8:<6sa1656>5<6sA8:<6sa1655>5<6sA8:<6sa1654>5<6sA8:<6sa165;>5<6sA8:<6sa165:>5<6sA8:<6sa165b>5<6sA8:<6sa165a>5<6sA8:<6sa165`>5<6sA8:<6sa165g>5<6sA8:<6sa165f>5<6sA8:<6sa165e>5<6sA8:<6sa16:3>5<6sA8:<6sa16:2>5<6sA8:<6sa16:1>5<6sA8:<6sa16:0>5<6sA8:<6sa16:7>5<6sA8:<6sa16:6>5<6sA8:<6sa16:5>5<6sA8:<6sa16:4>5<6sA8:<6sa16:;>5<6sA8:<6sa16::>5<6sA8:<6sa16:b>5<6sA8:<6sa16:a>5<6sA8:<6sa16:`>5<6sA8:<6sa16:g>5<6sA8:<6sa16:f>5<6sA8:<6sa16:e>5<6sA8:<6sa16;3>5<6sA8:<6sa16;2>5<6sA8:<6sa16;1>5<6sA8:<6sa16;0>5<6sA8:<6sa16;7>5<6sA8:<6sa16;6>5<6sA8:<6sa16;5>5<6sA8:<6sa16;4>5<6sA8:<6sa16;;>5<6sA8:<6sa16;:>5<6sA8:<6sa16;b>5<6sA8:<6sa16;a>5<6sA8:<6sa16;`>5<6sA8:<6sa16;g>5<6sA8:<6sa16;f>5<6sA8:<6sa16;e>5<6sA8:<6sa16c3>5<6sA8:<6sa16c2>5<6sA8:<6sa16c1>5<6sA8:<6sa16c0>5<6sA8:<6sa16c7>5<6sA8:<6sa16c6>5<6sA8:<6sa16c5>5<6sA8:<6sa16c4>5<6sA8:<6sa16c;>5<6sA8:<6sa16c:>5<6sA8:<6sa16cb>5<6sA8:<6sr}|BCG~7e0=08o<>8217~DED|8tJK\vsO@ \ No newline at end of file diff --git a/projects/messe_demo/src/AES_32bit_datapath/aes_column_ops.vhd b/projects/messe_demo/src/AES_32bit_datapath/aes_column_ops.vhd new file mode 100644 index 0000000..bb92a7e --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/aes_column_ops.vhd @@ -0,0 +1,134 @@ +--- ============================================================================ +-- +-- Design unit : aes_column_ops +-- +-- File Name : aes_column_ops.vhd +-- +-- Purpose : Design file +-- +-- +-- Depends on : +-- +-- - Package(s) : - +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) , +-- M.v.d.Wall (mvdw) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- ============================================================================ +-- +-- Revision List: +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + +use work.aes_gf_2exp8_arith.all; + + +package aes_column_ops is + + + type column_t is array (0 to 3) of gf_2exp8_t; + + function mix_column(col : in column_t) return column_t; + + function inv_mix_column(col : in column_t) return column_t; + + + +end aes_column_ops; + + +package body aes_column_ops is + + + type trans_matrix_t is array (0 to 3, 0 to 3) of gf_2exp8_t; + + constant TRANS_MATRIX : trans_matrix_t := + ( + (X"02", X"03", X"01", X"01"), + (X"01", X"02", X"03", X"01"), + (X"01", X"01", X"02", X"03"), + (X"03", X"01", X"01", X"02") + ); + + constant INV_TRANS_MATRIX : trans_matrix_t := + ( + (X"0e", X"0b", X"0d", X"09"), + (X"09", X"0e", X"0b", X"0d"), + (X"0d", X"09", X"0e", X"0b"), + (X"0b", X"0d", X"09", X"0e") + ); + + + function mix_column(col : in column_t) return column_t is + variable v_col : column_t; + begin + for c in v_col'range loop + v_col(c) := X"00"; + end loop; + + for r in v_col'range loop + for c in v_col'range loop + v_col(r) := add_gf_2exp8(v_col(r), mul_gf_2exp8(TRANS_MATRIX(r,c), col(c))); + end loop; + end loop; + + return v_col; + end mix_column; + + + function inv_mix_column(col : in column_t) return column_t is + variable v_col : column_t; + begin + for c in v_col'range loop + v_col(c) := X"00"; + end loop; + + for r in v_col'range loop + for c in v_col'range loop + v_col(r) := add_gf_2exp8(v_col(r), mul_gf_2exp8(INV_TRANS_MATRIX(r,c), col(c))); + end loop; + end loop; + + return v_col; + end inv_mix_column; + + +end aes_column_ops; diff --git a/projects/messe_demo/src/AES_32bit_datapath/aes_common.vhd b/projects/messe_demo/src/AES_32bit_datapath/aes_common.vhd new file mode 100644 index 0000000..43f398e --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/aes_common.vhd @@ -0,0 +1,202 @@ +--- ============================================================================ +-- +-- Design unit : aes_common +-- +-- File Name : aes_common.vhd +-- +-- Purpose : This package defines supplemental types, subtypes, +-- constants, and functions +-- +-- +-- Depends on : +-- +-- - Package(s) : - +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) , +-- M.v.d.Wall (mvdw) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- ============================================================================ +-- +-- Revision List: +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + +use work.aes_definitions.all; +use work.aes_row_ops.all; +use work.aes_column_ops.all; + + + +package aes_common is + + + function add_round_key(state, state_key : aes_state_t) return aes_state_t; + + function select_column(state : aes_state_t; pos : natural) return column_t; + + function replace_column(state : aes_state_t; col : column_t; pos : natural) return aes_state_t; + + function select_row(state : aes_state_t; pos : natural) return row_t; + + function replace_row(state : aes_state_t; row : row_t; pos : natural) return aes_state_t; + + function to_aes_state_matrix(st : aes_state_t) return aes_sbox_matrix_t; + function to_aes_state_vector(bb : aes_sbox_matrix_t) return aes_state_t; + +end aes_common; + + +package body aes_common is + + + function add_round_key(state, state_key : aes_state_t) return aes_state_t is + begin + return (state xor state_key); + end add_round_key; + + + function select_column(state : aes_state_t; pos : natural) return column_t is + variable v_col : column_t; + begin + for i in v_col'range loop + v_col(i) := state((127 - 32*pos - 8*i) downto (127 - 32*pos - 8*i) - 7); + end loop; + + return v_col; + end select_column; + + + + + function replace_column(state : aes_state_t; col : column_t; pos : natural) return aes_state_t is + variable v_st : aes_state_t; + begin + v_st := state; + + for i in col'range loop + v_st((127 - 32*pos - 8*i) downto (127 - 32*pos - 8*i) - 7) := col(i); + end loop; + + return v_st; + end replace_column; + + + + + function select_row(state : aes_state_t; pos : natural) return row_t is + variable v_row : row_t; + begin + for i in v_row'range loop + v_row(i) := state((127 - 8*pos - 32*i) downto (127 - 8*pos - 32*i) - 7); + end loop; + + return v_row; + end select_row; + + + + + function replace_row(state : aes_state_t; row : row_t; pos : natural) return aes_state_t is + variable v_st : aes_state_t; + begin + v_st := state; + + for i in row'range loop + v_st((127 - 8*pos - 32*i) downto (127 - 8*pos - 32*i) - 7) := row(i); + end loop; + + return v_st; + end replace_row; + + + + function to_aes_state_matrix(st : aes_state_t) return aes_sbox_matrix_t is + variable v_row : row_t; + variable v_line : std_logic_vector(31 downto 0); + variable v_bb : aes_sbox_matrix_t; + begin + for r in v_bb'range(1) loop + for c in v_bb'range(2) loop + v_bb(r, c) := (others => '0'); + end loop; + end loop; + + for r in v_bb'range(1) loop + v_row := select_row(st, r); + v_line := v_row(0) & v_row(1) & v_row(2) & v_row(3); + + for c in v_bb'range(2) loop + v_bb(r, c)(7 downto 0) := v_line(31 - 8*c downto 24 - 8*c); + end loop; + + end loop; + + return v_bb; + end to_aes_state_matrix; + + + + function to_aes_state_vector(bb : aes_sbox_matrix_t) return aes_state_t is + variable v_row : row_t; + variable v_line : std_logic_vector(31 downto 0); + variable v_st : aes_state_t; + begin + v_st := (others => '0'); + + for r in bb'range(1) loop + v_line := (others => '0'); + + for c in bb'range(2) loop + v_line(31 - 8*c downto 24 - 8*c) := bb(r, c)(7 downto 0); + end loop; + + for i in v_row'range loop + v_row(i) := v_line(31 - 8*i downto 31-8*i - 7); + end loop; + + v_st := replace_row(v_st, v_row, r); + end loop; + + return v_st; + end to_aes_state_vector; + + +end aes_common; \ No newline at end of file diff --git a/projects/messe_demo/src/AES_32bit_datapath/aes_decryption.vhd b/projects/messe_demo/src/AES_32bit_datapath/aes_decryption.vhd new file mode 100644 index 0000000..bdf615f --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/aes_decryption.vhd @@ -0,0 +1,115 @@ +--- ============================================================================ +-- +-- Design unit : aes_decryption +-- +-- File Name : aes_decryption.vhd +-- +-- Purpose : design file +-- +-- +-- Depends on : +-- +-- - Package(s) : - +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) , +-- M.v.d.Wall (mvdw) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- ============================================================================ +-- +-- Revision List: +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + +library ieee; +use ieee.std_logic_1164.all; + +use work.aes_definitions.all; +use work.aes_common.all; +use work.aes_column_ops.all; +use work.aes_row_ops.all; + + + +package aes_decryption is + + + function inv_mix_columns(st : in aes_state_t) return aes_state_t; + + function inv_shift_rows(st : in aes_state_t) return aes_state_t; + + +end aes_decryption; + + +package body aes_decryption is + + + function inv_mix_columns(st : in aes_state_t) return aes_state_t is + type columns_t is array(0 to 3) of column_t; + variable v_cols : columns_t; + variable v_st : aes_state_t; + begin + for i in v_cols'range loop + v_cols(i) := inv_mix_column(select_column(st, i)); + v_st := replace_column(v_st, v_cols(i), i); + end loop; + + return v_st; + end inv_mix_columns; + + + + + function inv_shift_rows(st : in aes_state_t) return aes_state_t is + type rows_t is array(0 to 3) of row_t; + variable v_rows : rows_t; + variable v_st : aes_state_t; + begin + for i in v_rows'range loop + v_rows(i) := inv_shift_row(select_row(st, i), i); + v_st := replace_row(v_st, v_rows(i), i); + end loop; + + return v_st; + end inv_shift_rows; + + + + + + +end aes_decryption; diff --git a/projects/messe_demo/src/AES_32bit_datapath/aes_definitions.vhd b/projects/messe_demo/src/AES_32bit_datapath/aes_definitions.vhd new file mode 100644 index 0000000..14fe621 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/aes_definitions.vhd @@ -0,0 +1,83 @@ +--- ============================================================================ +-- +-- Design unit : aes_definitions +-- +-- File Name : aes_definitions.vhd +-- +-- Purpose : This package defines supplemental types, subtypes, +-- constants, and functions +-- +-- +-- Depends on : +-- +-- - Package(s) : - +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) , +-- M.v.d.Wall (mvdw) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- ============================================================================ +-- +-- Revision List: +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + +library ieee; +use ieee.std_logic_1164.all; + + + +package aes_definitions is + + + constant AES_128_ROUNDS : natural := 10; + + constant AES_256_ROUNDS : natural := 14; + + + subtype aes_state_t is std_logic_vector(127 downto 0); + + -- 4 bit are sufficient to keep maximal round number + subtype aes_round_no_t is std_logic_vector(3 downto 0); + + + subtype aes_sbox_8_t is std_logic_vector(7 downto 0); + + + type aes_sbox_matrix_t is array(0 to 3, 0 to 3) of aes_sbox_8_t; + + +end aes_definitions; diff --git a/projects/messe_demo/src/AES_32bit_datapath/aes_encryption.vhd b/projects/messe_demo/src/AES_32bit_datapath/aes_encryption.vhd new file mode 100644 index 0000000..57b2748 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/aes_encryption.vhd @@ -0,0 +1,110 @@ +--- ============================================================================ +-- +-- Design unit : aes_encryption +-- +-- File Name : aes_encryption.vhd +-- +-- Purpose : Design file +-- +-- +-- Depends on : +-- +-- - Package(s) : - +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) , +-- M.v.d.Wall (mvdw) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- ============================================================================ +-- +-- Revision List: +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + +library ieee; +use ieee.std_logic_1164.all; + +use work.aes_definitions.all; +use work.aes_common.all; +use work.aes_column_ops.all; +use work.aes_row_ops.all; + + +package aes_encryption is + + + function mix_columns(st : in aes_state_t) return aes_state_t; + + function shift_rows(st : in aes_state_t) return aes_state_t; + + +end aes_encryption; + + +package body aes_encryption is + + + function mix_columns(st : in aes_state_t) return aes_state_t is + type columns_t is array(0 to 3) of column_t; + variable v_cols : columns_t; + variable v_st : aes_state_t; + begin + for i in v_cols'range loop + v_cols(i) := mix_column(select_column(st, i)); + v_st := replace_column(v_st, v_cols(i), i); + end loop; + + return v_st; + end mix_columns; + + + + + function shift_rows(st : in aes_state_t) return aes_state_t is + type rows_t is array(0 to 3) of row_t; + variable v_rows : rows_t; + variable v_st : aes_state_t; + begin + for i in v_rows'range loop + v_rows(i) := shift_row(select_row(st, i), i); + v_st := replace_row(v_st, v_rows(i), i); + end loop; + + return v_st; + end shift_rows; + + +end aes_encryption; diff --git a/projects/messe_demo/src/AES_32bit_datapath/aes_gf_2exp8_arith.vhd b/projects/messe_demo/src/AES_32bit_datapath/aes_gf_2exp8_arith.vhd new file mode 100644 index 0000000..9d5cb83 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/aes_gf_2exp8_arith.vhd @@ -0,0 +1,168 @@ +--- ============================================================================ +-- +-- Design unit : aes_gf_2exp8_arith +-- +-- File Name : aes_gf_2exp8_arith.vhd +-- +-- Purpose : Design file +-- +-- +-- Depends on : +-- +-- - Package(s) : - +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) , +-- M.v.d.Wall (mvdw) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- ============================================================================ +-- +-- Revision List: +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + +library ieee; +use ieee.std_logic_1164.all; + + +package aes_gf_2exp8_arith is + + + subtype gf_2exp8_t is std_logic_vector(7 downto 0); + + + function add_gf_2exp8(a, b : in gf_2exp8_t) return gf_2exp8_t; + + function mul_gf_2exp8(a, b : in gf_2exp8_t) return gf_2exp8_t; + + +end aes_gf_2exp8_arith; + + +-- AES irreducible polynomial +-- POLY = 2**8 + 2**4 + 2**3 + 2**1 + 2**0 + +package body aes_gf_2exp8_arith is + + + function add_gf_2exp8(a, b : in gf_2exp8_t) return gf_2exp8_t is + begin + return (a xor b); + end add_gf_2exp8; + + + function mul_gf_2exp8(a, b : in gf_2exp8_t) return gf_2exp8_t is + variable c : gf_2exp8_t; + begin + + c(0) := ((a(0)) and b(0)) xor + ((a(7)) and b(1)) xor + ((a(6)) and b(2)) xor + ((a(5)) and b(3)) xor + ((a(4)) and b(4)) xor + ((a(3) xor a(7)) and b(5)) xor + ((a(2) xor a(6) xor a(7)) and b(6)) xor + ((a(1) xor a(5) xor a(6)) and b(7)); + + c(1) := ((a(1)) and b(0)) xor + ((a(0) xor a(7)) and b(1)) xor + ((a(6) xor a(7)) and b(2)) xor + ((a(5) xor a(6)) and b(3)) xor + ((a(4) xor a(5)) and b(4)) xor + ((a(3) xor a(4) xor a(7)) and b(5)) xor + ((a(2) xor a(3) xor a(6)) and b(6)) xor + ((a(1) xor a(2) xor a(5) xor a(7)) and b(7)); + + c(2) := ((a(2)) and b(0)) xor + ((a(1)) and b(1)) xor + ((a(0) xor a(7)) and b(2)) xor + ((a(6) xor a(7)) and b(3)) xor + ((a(5) xor a(6)) and b(4)) xor + ((a(4) xor a(5)) and b(5)) xor + ((a(3) xor a(4) xor a(7)) and b(6)) xor + ((a(2) xor a(3) xor a(6)) and b(7)); + + c(3) := ((a(3)) and b(0)) xor + ((a(2) xor a(7)) and b(1)) xor + ((a(1) xor a(6)) and b(2)) xor + ((a(0) xor a(5) xor a(7)) and b(3)) xor + ((a(4) xor a(6) xor a(7)) and b(4)) xor + ((a(3) xor a(5) xor a(6) xor a(7)) and b(5)) xor + ((a(2) xor a(4) xor a(5) xor a(6) xor a(7)) and b(6)) xor + ((a(1) xor a(3) xor a(4) xor a(5) xor a(6) xor a(7)) and b(7)); + + c(4) := ((a(4)) and b(0)) xor + ((a(3) xor a(7)) and b(1)) xor + ((a(2) xor a(6) xor a(7)) and b(2)) xor + ((a(1) xor a(5) xor a(6)) and b(3)) xor + ((a(0) xor a(4) xor a(5) xor a(7)) and b(4)) xor + ((a(3) xor a(4) xor a(6)) and b(5)) xor + ((a(2) xor a(3) xor a(5)) and b(6)) xor + ((a(1) xor a(2) xor a(4) xor a(7)) and b(7)); + + c(5) := ((a(5)) and b(0)) xor + ((a(4)) and b(1)) xor + ((a(3) xor a(7)) and b(2)) xor + ((a(2) xor a(6) xor a(7)) and b(3)) xor + ((a(1) xor a(5) xor a(6)) and b(4)) xor + ((a(0) xor a(4) xor a(5) xor a(7)) and b(5)) xor + ((a(3) xor a(4) xor a(6)) and b(6)) xor + ((a(2) xor a(3) xor a(5)) and b(7)); + + c(6) := ((a(6)) and b(0)) xor + ((a(5)) and b(1)) xor + ((a(4)) and b(2)) xor + ((a(3) xor a(7)) and b(3)) xor + ((a(2) xor a(6) xor a(7)) and b(4)) xor + ((a(1) xor a(5) xor a(6)) and b(5)) xor + ((a(0) xor a(4) xor a(5) xor a(7)) and b(6)) xor + ((a(3) xor a(4) xor a(6)) and b(7)); + + c(7) := ((a(7)) and b(0)) xor + ((a(6)) and b(1)) xor + ((a(5)) and b(2)) xor + ((a(4)) and b(3)) xor + ((a(3) xor a(7)) and b(4)) xor + ((a(2) xor a(6) xor a(7)) and b(5)) xor + ((a(1) xor a(5) xor a(6)) and b(6)) xor + ((a(0) xor a(4) xor a(5) xor a(7)) and b(7)); + + return c; + + end mul_gf_2exp8; + + +end aes_gf_2exp8_arith; diff --git a/projects/messe_demo/src/AES_32bit_datapath/aes_row_ops.vhd b/projects/messe_demo/src/AES_32bit_datapath/aes_row_ops.vhd new file mode 100644 index 0000000..14a576c --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/aes_row_ops.vhd @@ -0,0 +1,105 @@ +--- ============================================================================ +-- +-- Design unit : aes +-- +-- File Name : aes_row_ops.vhd +-- +-- Purpose : Row shift operations for ciper and inverse ciphers +-- +-- +-- Depends on : +-- +-- - Package(s) : - +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) , +-- M.v.d.Wall (mvdw) +-- J. Ahrensfeld (ja) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- ============================================================================ +-- +-- Revision List: +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +-- use ieee.numeric_bit.all; + +use work.aes_gf_2exp8_arith.all; + + +package aes_row_ops is + + + type row_t is array (0 to 3) of gf_2exp8_t; + + + function shift_row(row : in row_t; steps : natural) return row_t; + + function inv_shift_row(row : in row_t; steps : natural) return row_t; + + +end aes_row_ops; + + +package body aes_row_ops is + + + function shift_row(row : in row_t; steps : natural) return row_t is + variable a_row : row_t; + begin + for i in a_row'range loop + a_row(i) := row((i + steps) mod row'length); + end loop; + + return a_row; + end shift_row; + + + function inv_shift_row(row : in row_t; steps : natural) return row_t is + variable a_row : row_t; + begin + for i in a_row'range loop + a_row(i) := row((i - steps + row'length) mod row'length); + end loop; + + return a_row; + end inv_shift_row; + + +end aes_row_ops; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_128_encryption_core.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_128_encryption_core.vhd new file mode 100644 index 0000000..dd6d8cc --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_128_encryption_core.vhd @@ -0,0 +1,185 @@ +-- ============================================================================ +-- +-- Design unit : cbc_128_encryption_core (CBC-mode encryption core with +-- 128-bit key schedule) +-- +-- File Name : cbc_128_encryption_core.vhd +-- +-- Purpose : The module instantiates all necessary modules (S-box +-- stages, encryption, CBC-mode, key schedule, subkey +-- memory etc.) to provide an CBC-mode encryption core +-- +-- +-- Depends on : +-- +-- - Package(s) : tech_iface, key_schedule_iface, engine_iface, +-- cbc_mode_iface, cbc_core_iface +-- +-- - Module(s) : cbc_mode_encryption, encryption_engine, tech_sbox_stage, +-- tech_subkey_memory, key_schedule_128 +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2007-01-31 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.engine_iface.all; +use work.cbc_mode_iface.all; +use work.cbc_core_iface.all; + + +entity cbc_128_encryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_encryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_encryption_out_type; -- see package cbc_mode_iface + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); +end cbc_128_encryption_core; + + +architecture behavioural of cbc_128_encryption_core is + + + signal enc_i : encryption_engine_in_type; -- input to the encryption engine + signal enc_o : encryption_engine_out_type; -- output of the encryption engine + + signal sbox_enc_i : sbox_stage_in_type; -- input to the S-box stage + signal sbox_enc_o : sbox_stage_out_type; -- output of the S-box stage + + signal sbox_ks_i : sbox_stage_in_type; -- input to the S-box stage (key schedule) + signal sbox_ks_o : sbox_stage_out_type; -- output of the S-box stage (key schedule) + + signal skm_enc_i : subkey_memory_ed_in_type; -- encryption-side subkey memory access (subkey selection) + signal skm_enc_o : subkey_memory_ed_out_type; -- encryption-side subkey memory access (selected subkey) + + signal skm_ks_enc_i : subkey_memory_ks_in_type; -- subkey storage by key schedule + + +begin + + + -- AES CBC-mode encryption + cbc_mode: cbc_mode_encryption + port map ( + rst => rst, + clk => clk, + mode_i => mode_i, + mode_o => mode_o, + enc_i => enc_o, + enc_o => enc_i + ); + + + -- AES encryption engine + enc_eng: encryption_engine + port map ( + rst => rst, + clk => clk, + enc_i => enc_i, + enc_o => enc_o, + skm_i => skm_enc_o, + skm_o => skm_enc_i, + sbox_i => sbox_enc_o, + sbox_o => sbox_enc_i + ); + + + -- S-Box stage for encryption engine + sbox_enc: tech_sbox_stage + port map ( + rst => rst, + clk => clk, + data_i => sbox_enc_i, + data_o => sbox_enc_o, + load_i => sbld_i + ); + + + -- subkey memory for encryption engine + skm_enc: tech_subkey_memory + port map ( + clk => clk, + key_sched_i => skm_ks_enc_i, + enc_dec_i => skm_enc_i, + enc_dec_o => skm_enc_o + ); + + + -- 128-bit key schedule + key_sched: key_schedule_128 + port map ( + rst => rst, + clk => clk, + key_i => key_i, + key_o => key_o, + sbox_i => sbox_ks_o, + sbox_o => sbox_ks_i, + skm_enc_o => skm_ks_enc_i, + skm_dec_o => open + ); + + + -- S-Box stage for key schedule + sbox_ks: tech_sbox_stage + port map ( + rst => rst, + clk => clk, + data_i => sbox_ks_i, + data_o => sbox_ks_o, + load_i => sbld_i + ); + + +end behavioural; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_128_encryption_core_tb.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_128_encryption_core_tb.vhd new file mode 100644 index 0000000..643515b --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_128_encryption_core_tb.vhd @@ -0,0 +1,2430 @@ +-- ============================================================================ +-- +-- Design unit : cbc_128_encryption_core_tb (vefification testbench for +-- CBC-128 encryption core) +-- +-- File Name : cbc_128_encryption_core_tb.vhd +-- +-- Purpose : The testbench uses test vectors to stimulate the encryption +-- core with given test data and verify output data and +-- behaviour of the core +-- +-- +-- Depends on : +-- +-- - Package(s) : tech_iface, key_schedule_iface, engine_iface, +-- cbc_mode_iface, cbc_core_iface +-- +-- - Module(s) : cbc_128_encryption_core, sbox_loader +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2007-01-31 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +use std.textio.all; + + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.engine_iface.all; +use work.cbc_mode_iface.all; +use work.cbc_core_iface.all; + + +entity cbc_128_encryption_core_tb is +end cbc_128_encryption_core_tb; + + +architecture stimuli of cbc_128_encryption_core_tb is + + + -- put a message on stdout + procedure puts(msg : string) is + variable line_out_data : line; + begin + write(line_out_data, string'(msg)); + writeline(output, line_out_data); + end procedure; + + + component sbox_loader is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + load_o : out sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- type definition for test vectors + type test_vector_type_t is record + cycles : integer; -- number of clock cycles this test vector should be applied + mode_i : cbc_mode_encryption_in_type; -- stimulus for mode_i input (data to be encrypted etc.) + key_i : key_schedule_128_in_type; -- stimulus for key_i input (key to be expanded etc.) + sep : character; + mode_o : cbc_mode_encryption_out_type; -- expected value for mode_o output (encrypted data etc.) + key_o : key_schedule_128_out_type; -- expected value for key_o output (key scheduling progress etc.) + end record; + + + constant KEY_ID : key_id_t := CONV_STD_LOGIC_VECTOR(1, key_id_t'length); + + + + type test_vectors_type_t is array(natural range <>) of test_vector_type_t; + + constant TEST_VECTORS : test_vectors_type_t := ( + + -- (tv #1) idle + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- load / expand key +-- + + -- key = X"2b7e151628aed2a6abf7158809cf4f3c" + -- (tv #2) load key (part #0) + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '1', + key_id => KEY_ID, + key => X"2b7e1516" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #3) load key (part #1) + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"28aed2a6" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #4) load key (part #2) + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"abf71588" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #5) load key (part #3) + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"09cf4f3c" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #6) wait while key is expanded + ( + cycles => 41, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '1') + ), + +-- +-- load IV +-- + + -- IV = X"000102030405060708090a0b0c0d0e0f" + -- (tv #7) load IV part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '1', + din => X"00010203", + key_id => KEY_ID + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #8) load IV part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"04050607", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #9) load IV part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"08090a0b", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #10) load IV part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"0c0d0e0f", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"6bc1bee22e409f96e93d7e117393172a" + -- (tv #11) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"6bc1bee2", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #12) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"2e409f96", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #13) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"e93d7e11", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #14) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"7393172a", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #15) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"7649abac8119b246cee98e9b12e9197d" + -- (tv #16) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"7649abac" + ), + key_o => (busy => '0') + ), + + -- (tv #17) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"8119b246" + ), + key_o => (busy => '0') + ), + + -- (tv #18) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"cee98e9b" + ), + key_o => (busy => '0') + ), + + -- (tv #19) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"12e9197d" + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"ae2d8a571e03ac9c9eb76fac45af8e51" + -- (tv #20) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"ae2d8a57", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #21) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"1e03ac9c", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #22) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"9eb76fac", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #23) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"45af8e51", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #24) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"5086cb9b507219ee95db113a917678b2" + -- (tv #25) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"5086cb9b" + ), + key_o => (busy => '0') + ), + + -- (tv #26) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"507219ee" + ), + key_o => (busy => '0') + ), + + -- (tv #27) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"95db113a" + ), + key_o => (busy => '0') + ), + + -- (tv #28) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"917678b2" + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"30c81c46a35ce411e5fbc1191a0a52ef" + -- (tv #29) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"30c81c46", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #30) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"a35ce411", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #31) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"e5fbc119", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #32) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"1a0a52ef", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #33) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"73bed6b8e3c1743b7116e69e22229516" + -- (tv #34) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"73bed6b8" + ), + key_o => (busy => '0') + ), + + -- (tv #35) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"e3c1743b" + ), + key_o => (busy => '0') + ), + + -- (tv #36) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"7116e69e" + ), + key_o => (busy => '0') + ), + + -- (tv #37) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"22229516" + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"f69f2445df4f9b17ad2b417be66c3710" + -- (tv #38) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"f69f2445", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #39) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"df4f9b17", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #40) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"ad2b417b", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #41) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"e66c3710", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #42) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"3ff1caa1681fac09120eca307586e1a7" + -- (tv #43) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"3ff1caa1" + ), + key_o => (busy => '0') + ), + + -- (tv #44) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"681fac09" + ), + key_o => (busy => '0') + ), + + -- (tv #45) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"120eca30" + ), + key_o => (busy => '0') + ), + + -- (tv #46) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"7586e1a7" + ), + key_o => (busy => '0') + ), + +-- +-- load IV +-- + + -- IV = X"000102030405060708090a0b0c0d0e0f" + -- (tv #47) load IV part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '1', + din => X"00010203", + key_id => KEY_ID + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #48) load IV part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"04050607", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #49) load IV part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"08090a0b", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #50) load IV part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"0c0d0e0f", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"6bc1bee22e409f96e93d7e117393172a" + -- (tv #51) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"6bc1bee2", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #52) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"2e409f96", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #53) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"e93d7e11", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #54) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"7393172a", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #55) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"7649abac8119b246cee98e9b12e9197d" + -- (tv #56) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"7649abac" + ), + key_o => (busy => '0') + ), + + -- (tv #57) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"8119b246" + ), + key_o => (busy => '0') + ), + + -- (tv #58) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"cee98e9b" + ), + key_o => (busy => '0') + ), + + -- (tv #59) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"12e9197d" + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"ae2d8a571e03ac9c9eb76fac45af8e51" + -- (tv #60) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"ae2d8a57", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #61) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"1e03ac9c", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #62) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"9eb76fac", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #63) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"45af8e51", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #64) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"5086cb9b507219ee95db113a917678b2" + -- (tv #65) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"5086cb9b" + ), + key_o => (busy => '0') + ), + + -- (tv #66) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"507219ee" + ), + key_o => (busy => '0') + ), + + -- (tv #67) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"95db113a" + ), + key_o => (busy => '0') + ), + + -- (tv #68) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"917678b2" + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"30c81c46a35ce411e5fbc1191a0a52ef" + -- (tv #69) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"30c81c46", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #70) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"a35ce411", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #71) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"e5fbc119", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #72) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"1a0a52ef", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #73) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"73bed6b8e3c1743b7116e69e22229516" + -- (tv #74) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"73bed6b8" + ), + key_o => (busy => '0') + ), + + -- (tv #75) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"e3c1743b" + ), + key_o => (busy => '0') + ), + + -- (tv #76) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"7116e69e" + ), + key_o => (busy => '0') + ), + + -- (tv #77) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"22229516" + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"f69f2445df4f9b17ad2b417be66c3710" + -- (tv #78) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + load_iv => '0', + din => X"f69f2445", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #79) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"df4f9b17", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #80) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"ad2b417b", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #81) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => X"e66c3710", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #82) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"3ff1caa1681fac09120eca307586e1a7" + -- (tv #83) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"3ff1caa1" + ), + key_o => (busy => '0') + ), + + -- (tv #84) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"681fac09" + ), + key_o => (busy => '0') + ), + + -- (tv #85) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"120eca30" + ), + key_o => (busy => '0') + ), + + -- (tv #86) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + dout => X"7586e1a7" + ), + key_o => (busy => '0') + ), + +-- +-- +-- + + -- (tv #87) idle + ( + cycles => 1, + mode_i => ( + start => '0', + load_iv => '0', + din => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + dout => (others => '-') + ), + key_o => (busy => '0') + ) + + + ); + + + signal rst : std_logic; -- reset + signal clk : std_logic; -- clock + signal mode_i : cbc_mode_encryption_in_type; -- see package cbc_mode_iface + signal mode_o : cbc_mode_encryption_out_type; -- see package cbc_mode_iface + signal key_i : key_schedule_128_in_type; -- see package key_schedule_iface + signal key_o : key_schedule_128_out_type; -- see package key_schedule_iface + signal sbld_i : sbox_stage_load_in_type; -- see package tech_iface + + + constant CLK_PERIOD : time := 20 ns; + + +begin + + + uut: cbc_128_encryption_core + port map ( + rst => rst, + clk => clk, + mode_i => mode_i, + mode_o => mode_o, + key_i => key_i, + key_o => key_o, + sbld_i => sbld_i + ); + + + init: sbox_loader + port map ( + rst => rst, + clk => clk, + load_o => sbld_i + ); + + + tb: process + begin + + clk <= '0'; + rst <= '1'; + mode_i.start <= '0'; + key_i.load_key <= '0'; + + -- Virtex GSR-signal is deactivated 100ns after "configuration" + wait for 200 ns; + + + -- some clock cycles for reset + for i in 0 to 3 loop + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 2; + clk <= '0'; + end loop; + + + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + + + -- separate normal output from the ugly stuff displayed at start-up + puts("#"); + puts("#"); + puts("# *** Releasing reset ***"); + puts("#"); + puts("#"); + + rst <= '0'; + + + puts("#"); + puts("#"); + puts("# *** Pre-loading S-boxes ***"); + puts("#"); + puts("#"); + + while (sbld_i.done = '0') loop + + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + + end loop; + + + -- some more clock cycles + for i in 0 to 3 loop + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + end loop; + + + puts("#"); + puts("#"); + puts("# *** Processing Test-Vectors ***"); + puts("#"); + puts("#"); + + + for i in TEST_VECTORS'range loop + + -- assign stimuli + mode_i <= TEST_VECTORS(i).mode_i; + key_i <= TEST_VECTORS(i).key_i; + + + for j in 1 to TEST_VECTORS(i).cycles loop + + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 4; + + + -- verify results (still during the same clock cycle) + + assert (mode_o.busy = TEST_VECTORS(i).mode_o.busy) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + + assert (mode_o.valid = TEST_VECTORS(i).mode_o.valid) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + + if (mode_o.valid = '1') + then + assert (mode_o.dout = TEST_VECTORS(i).mode_o.dout) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + end if; + + assert (key_o.busy = TEST_VECTORS(i).key_o.busy) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + + + wait for CLK_PERIOD / 4; + clk <= '1'; + wait for CLK_PERIOD / 4; + + end loop; + + end loop; + + + + puts("#"); + puts("#"); + puts("# *** All test vectors processed! ***"); + puts("#"); + puts("#"); + + + -- some more clock cycles + for i in 0 to 10 loop + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + end loop; + + + puts("# *** End of test! ***"); + puts("#"); + puts("#"); + + + assert false + report "Forced simulation halt" + severity failure; + + wait; + + end process; + + +end stimuli; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_core_iface.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_core_iface.vhd new file mode 100644 index 0000000..a5b2028 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_core_iface.vhd @@ -0,0 +1,146 @@ +-- ============================================================================ +-- +-- Design unit : cbc_core_iface (interfaces of CBC-mode en-/decryption +-- cores) +-- +-- File Name : cbc_core_iface.vhd +-- +-- Purpose : The package collects type declarations for all non- +-- trivial interfaces of used entities. Record types +-- are used extensively to group related signals (e.g. +-- data / control & status, physical attachment etc.). +-- +-- +-- Depends on : +-- +-- - Package(s) : tech_iface, key_schedule_iface, engine_iface, +-- cbc_mode_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2007-01-31 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.engine_iface.all; +use work.cbc_mode_iface.all; + + +package cbc_core_iface is + + +-- no new interfaces are needed yet + + + +-- +-- +-- Component declarations +-- +-- + + + -- AES-CBC-128 encryption core + component cbc_128_encryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_encryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_encryption_out_type; -- see package cbc_mode_iface + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- AES-CBC-128 decryption core + component cbc_128_decryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_decryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_decryption_out_type; -- see package cbc_mode_iface + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- AES-CBC-256 encryption core + component cbc_256_encryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_encryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_encryption_out_type; -- see package cbc_mode_iface + key_i : in key_schedule_256_in_type; -- see package key_schedule_iface + key_o : out key_schedule_256_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- AES-CBC-256 decryption core + component cbc_256_decryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_decryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_decryption_out_type; -- see package cbc_mode_iface + key_i : in key_schedule_256_in_type; -- see package key_schedule_iface + key_o : out key_schedule_256_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + +end cbc_core_iface; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_encryption.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_encryption.vhd new file mode 100644 index 0000000..1c5a118 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_encryption.vhd @@ -0,0 +1,272 @@ +-- ============================================================================ +-- +-- Design unit : cbc_mode_encryption (CBC-mode encryption) +-- +-- File Name : cbc_mode_encryption.vhd +-- +-- Purpose : The module provides CBC-mode encryption for AES +-- using 32-bit datapath +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_defnitions, tech_iface, engine_iface, cbc_mode_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2007-01-31 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: two-process method (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +use work.aes_definitions.all; +use work.tech_iface.all; +use work.engine_iface.all; +use work.cbc_mode_iface.all; + + +entity cbc_mode_encryption is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_encryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_encryption_out_type; -- see package cbc_mode_iface + enc_i : in encryption_engine_out_type; -- see package engine_iface + enc_o : out encryption_engine_in_type -- see package engine_iface + ); +end cbc_mode_encryption; + + +architecture behavioural of cbc_mode_encryption is + + + -- control fsm, states: idle / load IV / load input data / wait while encrypting / output data + type ctrl_fsm_t is (cf_idle, cf_load_iv, cf_load_data, cf_wait_enc, cf_out_data); + + type registers is record + ctrl_fsm : ctrl_fsm_t; -- control fsm + busy : std_logic; -- busy, encryption in progress + part_no : part_no_t; -- partial word number + cbc_fb_shr : aes_state_t; -- CBC-mode feedback shift-register + fb_shr_src : std_logic; -- data source for fb-shr: ciphertext (0) / IV @ din (1) + fb_shr_shift : std_logic; -- shift-data into / out of fb-shr + key_id : key_id_t; -- stored key ID + end record; + + + type variables is record + dummy : std_logic; + end record; + + + signal r, rin : registers; + + +begin + + + -- combinatorial logic + comb: process (rst, r, mode_i, enc_i) + variable v : registers; + variable t : variables; + begin + + -- assign default values + v := r; +-- +-- +-- + + if (r.fb_shr_shift = '1') or (enc_i.valid = '1') + then + v.part_no := r.part_no + 1; + end if; + + + -- control fsm + case r.ctrl_fsm is + -- wait for start / IV loading + when cf_idle => + -- handle IV loading + if (mode_i.load_iv = '1') + then + v.busy := '1'; + v.key_id := mode_i.key_id; + v.fb_shr_shift := '1'; + v.part_no := "01"; + + v.ctrl_fsm := cf_load_iv; + -- handle encryption start + elsif (mode_i.start = '1') + then + v.fb_shr_src := '0'; -- use ciphertext as source + v.fb_shr_shift := '1'; + v.part_no := "01"; + + v.ctrl_fsm := cf_load_data; + end if; + + -- load iv + when cf_load_iv => + -- handle last input data word + if (r.part_no = "11") + then + v.busy := '0'; + v.fb_shr_shift := '0'; -- partial number is hold at "00" + + v.ctrl_fsm := cf_idle; + end if; + + -- load input data + when cf_load_data => + -- handle last input data word + if (r.part_no = "11") + then + v.fb_shr_shift := '0'; -- partial number is hold at "00" + + v.ctrl_fsm := cf_wait_enc; + end if; + + -- wait while encrypting + when cf_wait_enc => + if (enc_i.valid = '1') + then + v.part_no := "01"; + v.fb_shr_shift := '1'; + + v.ctrl_fsm := cf_out_data; + end if; + + -- ouput data + when cf_out_data => + -- handle last output data word + if (r.part_no = "11") + then + v.fb_shr_src := '1'; + v.fb_shr_shift := '0'; + + v.ctrl_fsm := cf_idle; + end if; + + + when others => + v.ctrl_fsm := cf_idle; + + end case; + + + -- CBC-mode feedback register operation (4x32-bit shift-register) + if (mode_i.load_iv = '1') or (enc_i.valid = '1') or (r.fb_shr_shift = '1') + then + if (r.fb_shr_src = '1') + then + -- handle IV loading + v.cbc_fb_shr(31 downto 0) := mode_i.din; + else + v.cbc_fb_shr(31 downto 0) := enc_i.cipher; + end if; + end if; + + if (mode_i.start = '1') or (r.fb_shr_shift = '1') + then + v.cbc_fb_shr(127 downto 32) := r.cbc_fb_shr(95 downto 0); + end if; + +-- +-- +-- + -- reset handling + if (rst = '1') + then + v.fb_shr_shift := '0'; + v.fb_shr_src := '1'; + v.part_no := "00"; + v.busy := '0'; + v.key_id := (others => '0'); + + v.ctrl_fsm := cf_idle; + + end if; +-- +-- +-- + -- update registers + rin <= v; +-- +-- +-- + -- drive outputs + enc_o.start <= mode_i.start; + enc_o.plain <= mode_i.din xor r.cbc_fb_shr(127 downto 96); + enc_o.key_id <= r.key_id; + + mode_o.valid <= enc_i.valid; + mode_o.busy <= enc_i.busy or r.busy; + mode_o.dout <= enc_i.cipher; + + + end process; + + + -- registers + regs: process (clk, rst) + begin + if rising_edge(clk) + then + r <= rin; + end if; + + -- async. reset + if (rst = '1') + then + end if; + end process; + + +end behavioural; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_iface.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_iface.vhd new file mode 100644 index 0000000..fd06725 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_iface.vhd @@ -0,0 +1,153 @@ +-- ============================================================================ +-- +-- Design unit : cbc_mode_iface (interfaces of CBC-mode en-/decryption +-- modules) +-- +-- File Name : cbc_mode_iface.vhd +-- +-- Purpose : The package collects type declarations for all non- +-- trivial interfaces of used entities. Record types +-- are used extensively to group related signals (e.g. +-- data / control & status, physical attachment etc.). +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, tech_iface, engine_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2007-01-31 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.aes_definitions.all; +use work.tech_iface.all; +use work.engine_iface.all; + + +package cbc_mode_iface is + + +-- +-- CBC-mode encryption interface definition +-- + + + -- data/control input signals + type cbc_mode_encryption_in_type is record + start : std_logic; -- start encryption + load_iv : std_logic; -- load IV + din : part_data_t; -- IV / data to be encrypted (plaintext) + key_id : key_id_t; -- key id to use + end record; + + -- data/status outputs signals + type cbc_mode_encryption_out_type is record + dout : part_data_t; -- encrypted data (ciphertext) + busy : std_logic; -- busy, encrypion in progress + valid : std_logic; -- ciphertext is valid + end record; + + +-- +-- CBC-mode decryption interface definition +-- + + + -- data/control input signals + type cbc_mode_decryption_in_type is record + start : std_logic; -- start decryption + load_iv : std_logic; -- load IV + din : part_data_t; -- IV / data to be decrypted (ciphertext) + key_id : key_id_t; -- key id to use + end record; + + -- data/status outputs signals + type cbc_mode_decryption_out_type is record + dout : part_data_t; -- decrypted data (plaintext) + busy : std_logic; -- busy, decrypion in progress + valid : std_logic; -- plaintext is valid + end record; + + +-- +-- +-- Component declarations +-- +-- + + + -- AES CBC-mode encryption + component cbc_mode_encryption is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_encryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_encryption_out_type; -- see package cbc_mode_iface + enc_i : in encryption_engine_out_type; -- see package engine_iface + enc_o : out encryption_engine_in_type -- see package engine_iface + ); + end component; + + + + -- AES CBC-mode decryption + component cbc_mode_decryption is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in cbc_mode_decryption_in_type; -- see package cbc_mode_iface + mode_o : out cbc_mode_decryption_out_type; -- see package cbc_mode_iface + dec_i : in decryption_engine_out_type; -- see package engine_iface + dec_o : out decryption_engine_in_type -- see package engine_iface + ); + end component; + + +end cbc_mode_iface; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_128_encryption_core.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_128_encryption_core.vhd new file mode 100644 index 0000000..b4c746a --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_128_encryption_core.vhd @@ -0,0 +1,185 @@ +-- ============================================================================ +-- +-- Design unit : ecb_128_encryption_core (ECB-mode encryption core with +-- 128-bit key schedule) +-- +-- File Name : ecb_128_encryption_core.vhd +-- +-- Purpose : The module instantiates all necessary modules (S-box +-- stages, encryption, ECB-mode, key schedule, subkey +-- memory etc.) to provide an ECB-mode encryption core +-- +-- +-- Depends on : +-- +-- - Package(s) : tech_iface, key_schedule_iface, engine_iface, +-- ecb_mode_iface, ecb_core_iface +-- +-- - Module(s) : ecb_mode_encryption, encryption_engine, tech_sbox_stage, +-- tech_subkey_memory, key_schedule_128 +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.engine_iface.all; +use work.ecb_mode_iface.all; +use work.ecb_core_iface.all; + + +entity ecb_128_encryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_encryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_encryption_out_type; -- see package ecb_mode_iface + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); +end ecb_128_encryption_core; + + +architecture behavioural of ecb_128_encryption_core is + + + signal enc_i : encryption_engine_in_type; -- input to the encryption engine + signal enc_o : encryption_engine_out_type; -- output of the encryption engine + + signal sbox_enc_i : sbox_stage_in_type; -- input to the S-box stage + signal sbox_enc_o : sbox_stage_out_type; -- output of the S-box stage + + signal sbox_ks_i : sbox_stage_in_type; -- input to the S-box stage (key schedule) + signal sbox_ks_o : sbox_stage_out_type; -- output of the S-box stage (key schedule) + + signal skm_enc_i : subkey_memory_ed_in_type; -- encryption-side subkey memory access (subkey selection) + signal skm_enc_o : subkey_memory_ed_out_type; -- encryption-side subkey memory access (selected subkey) + + signal skm_ks_enc_i : subkey_memory_ks_in_type; -- subkey storage by key schedule + + +begin + + + -- AES ECB-mode encryption + ecb_mode: ecb_mode_encryption + port map ( + rst => rst, + clk => clk, + mode_i => mode_i, + mode_o => mode_o, + enc_i => enc_o, + enc_o => enc_i + ); + + + -- AES encryption engine + enc_eng: encryption_engine + port map ( + rst => rst, + clk => clk, + enc_i => enc_i, + enc_o => enc_o, + skm_i => skm_enc_o, + skm_o => skm_enc_i, + sbox_i => sbox_enc_o, + sbox_o => sbox_enc_i + ); + + + -- S-Box stage for encryption engine + sbox_enc: tech_sbox_stage + port map ( + rst => rst, + clk => clk, + data_i => sbox_enc_i, + data_o => sbox_enc_o, + load_i => sbld_i + ); + + + -- subkey memory for encryption engine + skm_enc: tech_subkey_memory + port map ( + clk => clk, + key_sched_i => skm_ks_enc_i, + enc_dec_i => skm_enc_i, + enc_dec_o => skm_enc_o + ); + + + -- 128-bit key schedule + key_sched: key_schedule_128 + port map ( + rst => rst, + clk => clk, + key_i => key_i, + key_o => key_o, + sbox_i => sbox_ks_o, + sbox_o => sbox_ks_i, + skm_enc_o => skm_ks_enc_i, + skm_dec_o => open + ); + + + -- S-Box stage for key schedule + sbox_ks: tech_sbox_stage + port map ( + rst => rst, + clk => clk, + data_i => sbox_ks_i, + data_o => sbox_ks_o, + load_i => sbld_i + ); + + +end behavioural; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_128_encryption_core_tb.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_128_encryption_core_tb.vhd new file mode 100644 index 0000000..5412b1c --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_128_encryption_core_tb.vhd @@ -0,0 +1,1221 @@ +-- ============================================================================ +-- +-- Design unit : ecb_128_encryption_core_tb (vefification testbench for +-- ECB-128 encryption core) +-- +-- File Name : ecb_128_encryption_core_tb.vhd +-- +-- Purpose : The testbench uses test vectors to stimulate the encryption +-- core with given test data and verify output data and +-- behaviour of the core +-- +-- +-- Depends on : +-- +-- - Package(s) : tech_iface, key_schedule_iface, engine_iface, +-- ecb_mode_iface, ecb_core_iface +-- +-- - Module(s) : ecb_128_encryption_core, sbox_loader +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +use std.textio.all; + + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.engine_iface.all; +use work.ecb_mode_iface.all; +use work.ecb_core_iface.all; + + +entity ecb_128_encryption_core_tb is +end ecb_128_encryption_core_tb; + + +architecture stimuli of ecb_128_encryption_core_tb is + + + -- put a message on stdout + procedure puts(msg : string) is + variable line_out_data : line; + begin + write(line_out_data, string'(msg)); + writeline(output, line_out_data); + end procedure; + + + component sbox_loader is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + load_o : out sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- type definition for test vectors + type test_vector_type_t is record + cycles : integer; -- number of clock cycles this test vector should be applied + mode_i : ecb_mode_encryption_in_type; -- stimulus for mode_i input (data to be encrypted etc.) + key_i : key_schedule_128_in_type; -- stimulus for key_i input (key to be expanded etc.) + sep : character; + mode_o : ecb_mode_encryption_out_type; -- expected value for mode_o output (encrypted data etc.) + key_o : key_schedule_128_out_type; -- expected value for key_o output (key scheduling progress etc.) + end record; + + + constant KEY_ID1 : key_id_t := CONV_STD_LOGIC_VECTOR(0, key_id_t'length); + + constant KEY_ID2 : key_id_t := CONV_STD_LOGIC_VECTOR(1, key_id_t'length); + + + + type test_vectors_type_t is array(natural range <>) of test_vector_type_t; + + constant TEST_VECTORS : test_vectors_type_t := ( + + -- (tv #1) idle + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- load / expand key +-- + + -- key = X"2b7e151628aed2a6abf7158809cf4f3c" + -- (tv #2) load key (part #0) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '1', + key_id => KEY_ID1, + key => X"2b7e1516" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #3) load key (part #1) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"28aed2a6" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #4) load key (part #2) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"abf71588" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #5) load key (part #3) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"09cf4f3c" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #6) wait while key is expanded + ( + cycles => 41, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"3243f6a8885a308d313198a2e0370734" + -- (tv #7) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + plain => X"3243f6a8", + key_id => KEY_ID1 + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #8) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"885a308d", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #9) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"313198a2", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #10) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"e0370734", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #11) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"3925841d02dc09fbdc118597196a0b32" + -- (tv #12) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"3925841d" + ), + key_o => (busy => '0') + ), + + -- (tv #13) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"02dc09fb" + ), + key_o => (busy => '0') + ), + + -- (tv #14) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"dc118597" + ), + key_o => (busy => '0') + ), + + -- (tv #15) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"196a0b32" + ), + key_o => (busy => '0') + ), + +-- +-- load / expand key +-- + + -- key = X"000102030405060708090a0b0c0d0e0f" + -- (tv #16) load key (part #0) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '1', + key_id => KEY_ID2, + key => X"00010203" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #17) load key (part #1) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"04050607" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #18) load key (part #2) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"08090a0b" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #19) load key (part #3) + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => X"0c0d0e0f" + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + + -- (tv #20) wait while key is expanded + ( + cycles => 41, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '1') + ), + +-- +-- encrypt data +-- + + -- plaintext = X"00112233445566778899aabbccddeeff" + -- (tv #21) start encryption / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + plain => X"00112233", + key_id => KEY_ID2 + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #22) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"44556677", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #23) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"8899aabb", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #24) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"ccddeeff", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #25) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"69c4e0d86a7b0430d8cdb78070b4c55a" + -- (tv #26) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"69c4e0d8" + ), + key_o => (busy => '0') + ), + + -- (tv #27) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"6a7b0430" + ), + key_o => (busy => '0') + ), + + -- (tv #28) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"d8cdb780" + ), + key_o => (busy => '0') + ), + + -- (tv #29) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"70b4c55a" + ), + key_o => (busy => '0') + ), + +-- +-- encrypt data +-- + + -- key = X"2b7e151628aed2a6abf7158809cf4f3c" + -- plaintext = X"3243f6a8885a308d313198a2e0370734" + -- (tv #30) start encryption with prevoius key / load plaintext part 0 + ( + cycles => 1, + mode_i => ( + start => '1', + plain => X"3243f6a8", + key_id => KEY_ID1 + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #31) load plaintext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"885a308d", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #32) load plaintext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"313198a2", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + + -- (tv #33) load plaintext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => X"e0370734", + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + + -- (tv #34) wait while busy + ( + cycles => 47, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ), + +-- +-- verify ciphertext +-- + + -- ciphertext = X"3925841d02dc09fbdc118597196a0b32" + -- (tv #35) verify ciphertext part 0 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"3925841d" + ), + key_o => (busy => '0') + ), + + -- (tv #36) verify ciphertext part 1 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"02dc09fb" + ), + key_o => (busy => '0') + ), + + -- (tv #37) verify ciphertext part 2 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"dc118597" + ), + key_o => (busy => '0') + ), + + -- (tv #38) verify ciphertext part 3 + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '1', + valid => '1', + cipher => X"196a0b32" + ), + key_o => (busy => '0') + ), + +-- +-- +-- + + -- (tv #39) idle + ( + cycles => 1, + mode_i => ( + start => '0', + plain => (others => '-'), + key_id => (others => '-') + ), + key_i => ( + load_key => '0', + key_id => (others => '-'), + key => (others => '-') + ), + sep => '=', + mode_o => ( + busy => '0', + valid => '0', + cipher => (others => '-') + ), + key_o => (busy => '0') + ) + + + ); + + + signal rst : std_logic; -- reset + signal clk : std_logic; -- clock + signal mode_i : ecb_mode_encryption_in_type; -- see package ecb_mode_iface + signal mode_o : ecb_mode_encryption_out_type; -- see package ecb_mode_iface + signal key_i : key_schedule_128_in_type; -- see package key_schedule_iface + signal key_o : key_schedule_128_out_type; -- see package key_schedule_iface + signal sbld_i : sbox_stage_load_in_type; -- see package tech_iface + + + constant CLK_PERIOD : time := 20 ns; + + +begin + + + uut: ecb_128_encryption_core + port map ( + rst => rst, + clk => clk, + mode_i => mode_i, + mode_o => mode_o, + key_i => key_i, + key_o => key_o, + sbld_i => sbld_i + ); + + + init: sbox_loader + port map ( + rst => rst, + clk => clk, + load_o => sbld_i + ); + + + tb: process + begin + + clk <= '0'; + rst <= '1'; + mode_i.start <= '0'; + key_i.load_key <= '0'; + + -- Virtex GSR-signal is deactivated 100ns after "configuration" + wait for 200 ns; + + + -- some clock cycles for reset + for i in 0 to 3 loop + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 2; + clk <= '0'; + end loop; + + + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + + + -- separate normal output from the ugly stuff displayed at start-up + puts("#"); + puts("#"); + puts("# *** Releasing reset ***"); + puts("#"); + puts("#"); + + rst <= '0'; + + + puts("#"); + puts("#"); + puts("# *** Pre-loading S-boxes ***"); + puts("#"); + puts("#"); + + while (sbld_i.done = '0') loop + + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + + end loop; + + + -- some more clock cycles + for i in 0 to 3 loop + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + end loop; + + + puts("#"); + puts("#"); + puts("# *** Processing Test-Vectors ***"); + puts("#"); + puts("#"); + + + for i in TEST_VECTORS'range loop + + -- assign stimuli + mode_i <= TEST_VECTORS(i).mode_i; + key_i <= TEST_VECTORS(i).key_i; + + + for j in 1 to TEST_VECTORS(i).cycles loop + + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 4; + + + -- verify results (still during the same clock cycle) + + assert (mode_o.busy = TEST_VECTORS(i).mode_o.busy) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + + assert (mode_o.valid = TEST_VECTORS(i).mode_o.valid) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + + if (mode_o.valid = '1') + then + assert (mode_o.cipher = TEST_VECTORS(i).mode_o.cipher) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + end if; + + assert (key_o.busy = TEST_VECTORS(i).key_o.busy) + report "Test vector #" & Integer'image(i+1) & " failed on !" + severity failure; + + + wait for CLK_PERIOD / 4; + clk <= '1'; + wait for CLK_PERIOD / 4; + + end loop; + + end loop; + + + + puts("#"); + puts("#"); + puts("# *** All test vectors processed! ***"); + puts("#"); + puts("#"); + + + -- some more clock cycles + for i in 0 to 10 loop + wait for CLK_PERIOD / 4; + clk <= '0'; + wait for CLK_PERIOD / 2; + clk <= '1'; + wait for CLK_PERIOD / 4; + end loop; + + + puts("# *** End of test! ***"); + puts("#"); + puts("#"); + + + assert false + report "Forced simulation halt" + severity failure; + + wait; + + end process; + + +end stimuli; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_core_iface.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_core_iface.vhd new file mode 100644 index 0000000..10bc17d --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_core_iface.vhd @@ -0,0 +1,146 @@ +-- ============================================================================ +-- +-- Design unit : ecb_core_iface (interfaces of ECB-mode en-/decryption +-- cores) +-- +-- File Name : ecb_core_iface.vhd +-- +-- Purpose : The package collects type declarations for all non- +-- trivial interfaces of used entities. Record types +-- are used extensively to group related signals (e.g. +-- data / control & status, physical attachment etc.). +-- +-- +-- Depends on : +-- +-- - Package(s) : tech_iface, key_schedule_iface, engine_iface, +-- ecb_mode_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.engine_iface.all; +use work.ecb_mode_iface.all; + + +package ecb_core_iface is + + +-- no new interfaces are needed yet + + + +-- +-- +-- Component declarations +-- +-- + + + -- AES-ECB-128 encryption core + component ecb_128_encryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_encryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_encryption_out_type; -- see package ecb_mode_iface + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- AES-ECB-128 decryption core + component ecb_128_decryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_decryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_decryption_out_type; -- see package ecb_mode_iface + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- AES-ECB-256 encryption core + component ecb_256_encryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_encryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_encryption_out_type; -- see package ecb_mode_iface + key_i : in key_schedule_256_in_type; -- see package key_schedule_iface + key_o : out key_schedule_256_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- AES-ECB-256 decryption core + component ecb_256_decryption_core is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_decryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_decryption_out_type; -- see package ecb_mode_iface + key_i : in key_schedule_256_in_type; -- see package key_schedule_iface + key_o : out key_schedule_256_out_type; -- see package key_schedule_iface + sbld_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + +end ecb_core_iface; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_encryption.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_encryption.vhd new file mode 100644 index 0000000..e822a23 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_encryption.vhd @@ -0,0 +1,161 @@ +-- ============================================================================ +-- +-- Design unit : ecb_mode_encryption (ECB-mode encryption) +-- +-- File Name : ecb_mode_encryption.vhd +-- +-- Purpose : The module provides ECB-mode encryption (there is no +-- internal logic, it's just a placeholder to hold up with +-- common infrastructure used for more complex modes) +-- +-- +-- Depends on : +-- +-- - Package(s) : engine_iface, ecb_mode_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-02 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: two-process method (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +use work.engine_iface.all; +use work.ecb_mode_iface.all; + + +entity ecb_mode_encryption is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_encryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_encryption_out_type; -- see package ecb_mode_iface + enc_i : in encryption_engine_out_type; -- see package engine_iface + enc_o : out encryption_engine_in_type -- see package engine_iface + ); +end ecb_mode_encryption; + + +architecture behavioural of ecb_mode_encryption is + + + type registers is record + dummy : std_logic; + end record; + + + type variables is record + dummy : std_logic; + end record; + + + signal r, rin : registers; + + +begin + + + -- combinatorial logic + comb: process (rst, r, mode_i, enc_i) + variable v : registers; + variable t : variables; + begin + + -- assign default values + v := r; +-- +-- +-- + + + +-- +-- +-- + -- reset handling + if (rst = '1') + then + end if; +-- +-- +-- + -- update registers + rin <= v; +-- +-- +-- + -- drive outputs + enc_o.start <= mode_i.start; + enc_o.plain <= mode_i.plain; + enc_o.key_id <= mode_i.key_id; + + mode_o.valid <= enc_i.valid; + mode_o.busy <= enc_i.busy; + mode_o.cipher <= enc_i.cipher; + + + end process; + + + -- registers + regs: process (clk, rst) + begin + if rising_edge(clk) + then + r <= rin; + end if; + + -- async. reset + if (rst = '1') + then + end if; + end process; + + +end behavioural; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_iface.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_iface.vhd new file mode 100644 index 0000000..a0c4b3d --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_iface.vhd @@ -0,0 +1,151 @@ +-- ============================================================================ +-- +-- Design unit : ecb_mode_iface (interfaces of ECB-mode en-/decryption +-- modules) +-- +-- File Name : ecb_mode_iface.vhd +-- +-- Purpose : The package collects type declarations for all non- +-- trivial interfaces of used entities. Record types +-- are used extensively to group related signals (e.g. +-- data / control & status, physical attachment etc.). +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, tech_iface, engine_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.aes_definitions.all; +use work.tech_iface.all; +use work.engine_iface.all; + + +package ecb_mode_iface is + + +-- +-- ECB-mode encryption interface definition +-- + + + -- data/control input signals + type ecb_mode_encryption_in_type is record + start : std_logic; -- start encryption + plain : part_data_t; -- data to be encrypted (plaintext) + key_id : key_id_t; -- key id to use + end record; + + -- data/status outputs signals + type ecb_mode_encryption_out_type is record + cipher : part_data_t; -- encrypted data (ciphertext) + busy : std_logic; -- busy, encrypion in progress + valid : std_logic; -- ciphertext is valid (encryption finished) + end record; + + +-- +-- ECB-mode decryption interface definition +-- + + + -- data/control input signals + type ecb_mode_decryption_in_type is record + start : std_logic; -- start decryption + cipher : part_data_t; -- data to be decrypted (ciphertext) + key_id : key_id_t; -- key id to use + end record; + + -- data/status outputs signals + type ecb_mode_decryption_out_type is record + plain : part_data_t; -- decrypted data (plaintext) + busy : std_logic; -- busy, decrypion in progress + valid : std_logic; -- plaintext is valid (decryption finished) + end record; + + +-- +-- +-- Component declarations +-- +-- + + + -- AES ECB-mode encryption + component ecb_mode_encryption is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_encryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_encryption_out_type; -- see package ecb_mode_iface + enc_i : in encryption_engine_out_type; -- see package engine_iface + enc_o : out encryption_engine_in_type -- see package engine_iface + ); + end component; + + + + -- AES ECB-mode decryption + component ecb_mode_decryption is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + mode_i : in ecb_mode_decryption_in_type; -- see package ecb_mode_iface + mode_o : out ecb_mode_decryption_out_type; -- see package ecb_mode_iface + dec_i : in decryption_engine_out_type; -- see package engine_iface + dec_o : out decryption_engine_in_type -- see package engine_iface + ); + end component; + + +end ecb_mode_iface; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/aux_funcs.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/aux_funcs.vhd new file mode 100644 index 0000000..54d5265 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/aux_funcs.vhd @@ -0,0 +1,182 @@ +-- ============================================================================ +-- +-- Design unit : aux_funcs (auxiliary functions) +-- +-- File Name : aux_funcs.vhd +-- +-- Purpose : The package collects type declarations and auxiliary +-- functions which are commonly used by encryption, +-- decryption and key schedule +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, aes_common, aes_column_ops, +-- aes_row_ops +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-14 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.aes_definitions.all; +use work.aes_common.all; +use work.aes_column_ops.all; +use work.aes_row_ops.all; + + +package aux_funcs is + + + subtype slv256_t is std_logic_vector(255 downto 0); + + subtype slv32_t is std_logic_vector(31 downto 0); + + subtype slv3_t is std_logic_vector(2 downto 0); + + subtype slv4_t is std_logic_vector(3 downto 0); + + subtype slv5_t is std_logic_vector(4 downto 0); + + subtype slv13_t is std_logic_vector(12 downto 0); + + subtype slv19_t is std_logic_vector(18 downto 0); + + + + -- rotate left + function rotl(val : std_logic_vector; pos : natural) return std_logic_vector; + + -- rotate right + function rotr(val : std_logic_vector; pos : natural) return std_logic_vector; + + + -- convert the row representation to 32-bit logic vector + function row2slv(row : row_t) return slv32_t; + + + -- convert 32-bit logic vector to row representation + function slv2row(slv : slv32_t) return row_t; + + + -- convert the column representation to 32-bit logic vector + function col2slv(col : column_t) return slv32_t; + + + -- convert 32-bit logic vector to column representation + function slv2col(slv : slv32_t) return column_t; + + +end aux_funcs; + + +package body aux_funcs is + + + -- rotate left + function rotl(val : std_logic_vector; pos : natural) return std_logic_vector is + variable v : std_logic_vector(val'high downto 0); + begin + v := val; + return v(v'left - pos downto 0) & v(v'left downto v'left - pos + 1); + end function; + + + -- rotate right + function rotr(val : std_logic_vector; pos : natural) return std_logic_vector is + variable v : std_logic_vector(val'high downto 0); + begin + v := val; + return v(pos - 1 downto 0) & v(v'left downto pos); + end function; + + + -- convert the row representation to 32-bit logic vector + function row2slv(row : row_t) return slv32_t is + variable v : slv32_t; + begin + v := row(0) & row(1) & row(2) & row(3); + return v; + end function; + + + -- convert 32-bit logic vector to row representation + function slv2row(slv : slv32_t) return row_t is + variable row : row_t; + begin + for i in row'range loop + row(i) := slv(31 - 8*i downto 31-8*i - 7); + end loop; + + return row; + end function; + + + -- convert the column representation to 32-bit logic vector + function col2slv(col : column_t) return slv32_t is + variable v : slv32_t; + begin + v := col(0) & col(1) & col(2) & col(3); + return v; + end function; + + + -- convert 32-bit logic vector to column representation + function slv2col(slv : slv32_t) return column_t is + variable col : column_t; + begin + for i in col'range loop + col(i) := slv(31 - 8*i downto 31-8*i - 7); + end loop; + + return col; + end function; + + +end aux_funcs; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2.vhd new file mode 100644 index 0000000..f71d3e8 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2.vhd @@ -0,0 +1,150 @@ +-- ============================================================================ +-- +-- Design unit : dual_sbox_virtex2 (dual AES S-box) +-- +-- File Name : dual_sbox_virtex2.vhd +-- +-- Purpose : The module provides dual (dual-port memory) AES S-box +-- on Virtex2 family +-- +-- +-- Depends on : +-- +-- - Package(s) : Xilinx/unisim +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +library unisim; +use unisim.vcomponents.all; + + +entity dual_sbox_virtex2 is + port ( + clk : in std_logic; -- clock (rising) + enca : in std_logic; -- encryption (0) / decryption (1) mode + encb : in std_logic; -- encryption (0) / decryption (1) mode + posa : in std_logic_vector(7 downto 0); -- position + posb : in std_logic_vector(7 downto 0); -- position + dina : in std_logic_vector(7 downto 0); -- write data + dinb : in std_logic_vector(7 downto 0); -- write data + wea : in std_logic; -- write enable + web : in std_logic; -- write enable + douta : out std_logic_vector(7 downto 0); -- read data + doutb : out std_logic_vector(7 downto 0); -- read data + is_init : out std_logic -- pre-initialised memory + ); +end dual_sbox_virtex2; + + +architecture behavioral of dual_sbox_virtex2 is + + signal s_addra : std_logic_vector(10 downto 0); + signal s_addrb : std_logic_vector(10 downto 0); + +begin + + s_addra <= "00" & enca & posa; + + s_addrb <= "00" & encb & posb; + + + -- RAMB16_S9_S9: Virtex-II/II-Pro 2k x 8 + 1 Parity bit Dual-Port RAM + -- Xilinx HDL Language Template version 7.1i + + sboxd: RAMB16_S9_S9 + generic map ( + WRITE_MODE_A => "READ_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "READ_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "NONE", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"C072A49CAFA2D4ADF04759FA7DC982CA76ABD7FE2B670130C56F6BF27B777C63", + INIT_01 => X"75B227EBE28012079A059618C323C7041531D871F1E5A534CCF73F362693FDB7", + INIT_02 => X"CF584C4A39BECB6A5BB1FC20ED00D153842FE329B3D63B52A05A6E1B1A2C8309", + INIT_03 => X"D2F3FF1021DAB6BCF5389D928F40A351A89F3C507F02F94585334D43FBAAEFD0", + INIT_04 => X"DB0B5EDE14B8EE4688902A22DC4F816073195D643D7EA7C41744975FEC130CCD", + INIT_05 => X"08AE7A65EAF4566CA94ED58D6D37C8E779E4959162ACD3C25C2406490A3A32E0", + INIT_06 => X"9E1DC186B95735610EF6034866B53E708A8BBD4B1F74DDE8C6B4A61C2E2578BA", + INIT_07 => X"16BB54B00F2D99416842E6BF0D89A18CDF2855CEE9871E9B948ED9691198F8E1", + INIT_08 => X"CBE9DEC444438E3487FF2F9B8239E37CFBD7F3819EA340BF38A53630D56A0952", + INIT_09 => X"25D18B6D49A25B76B224D92866A12E084EC3FA420B954CEE3D23C2A632947B54", + INIT_0A => X"849D8DA75746155EDAB9EDFD5048706C92B6655DCC5CA4D41698688664F6F872", + INIT_0B => X"6B8A130103BDAFC1020F3FCA8F1E2CD00645B3B80558E4F70AD3BC8C00ABD890", + INIT_0C => X"6EDF751CE837F9E28535ADE72274AC9673E6B4F0CECFF297EADC674F4111913A", + INIT_0D => X"F45ACD78FEC0DB9A2079D2C64B3E56FC1BBE18AA0E62B76F89C5291D711AF147", + INIT_0E => X"EF9CC9939F7AE52D0D4AB519A97F51605FEC8027591012B131C7078833A8DD1F", + INIT_0F => X"7D0C2155631469E126D677BA7E042B17619953833CBBEBC8B0F52AAE4D3BE0A0" + ) + port map ( + DOA => douta(7 downto 0), -- Port A 8-bit Data Output + DOB => doutb(7 downto 0), -- Port B 8-bit Data Output + DOPA => open, -- Port A 1-bit Parity Output + DOPB => open, -- Port B 1-bit Parity Output + ADDRA => s_addra, -- Port A 11-bit Address Input + ADDRB => s_addrb, -- Port B 11-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => dina(7 downto 0), -- Port A 8-bit Data Input + DIB => dinb(7 downto 0), -- Port B 8-bit Data Input + DIPA => "0", -- Port A 1-bit parity Input + DIPB => "0", -- Port-B 1-bit parity Input + ENA => '1', -- Port A RAM Enable Input + ENB => '1', -- Port B RAM Enable Input + SSRA => '0', -- Port A Synchronous Set/Reset Input + SSRB => '0', -- Port B Synchronous Set/Reset Input + WEA => wea, -- Port A Write Enable Input + WEB => web -- Port B Write Enable Input + ); + + + is_init <= '1'; + + +end behavioral; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2_empty.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2_empty.vhd new file mode 100644 index 0000000..38dce50 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2_empty.vhd @@ -0,0 +1,207 @@ +-- ============================================================================ +-- +-- Design unit : dual_sbox_virtex2 (dual AES S-box) +-- +-- File Name : dual_sbox_virtex2_empty.vhd +-- +-- Purpose : The module provides dual (dual-port memory) AES S-box +-- on Virtex2 family +-- +-- +-- Depends on : +-- +-- - Package(s) : Xilinx/unisim +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : the S-box in not pre-initialized to allow testing +-- of S-box load I/F +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +library unisim; +use unisim.vcomponents.all; + + +entity dual_sbox_virtex2 is + port ( + clk : in std_logic; -- clock (rising) + enca : in std_logic; -- encryption (0) / decryption (1) mode + encb : in std_logic; -- encryption (0) / decryption (1) mode + posa : in std_logic_vector(7 downto 0); -- position + posb : in std_logic_vector(7 downto 0); -- position + dina : in std_logic_vector(7 downto 0); -- write data + dinb : in std_logic_vector(7 downto 0); -- write data + wea : in std_logic; -- write enable + web : in std_logic; -- write enable + douta : out std_logic_vector(7 downto 0); -- read data + doutb : out std_logic_vector(7 downto 0); -- read data + is_init : out std_logic -- pre-initialised memory + ); +end dual_sbox_virtex2; + + +architecture behavioral of dual_sbox_virtex2 is + + signal s_addra : std_logic_vector(10 downto 0); + signal s_addrb : std_logic_vector(10 downto 0); + +begin + + s_addra <= "00" & enca & posa; + + s_addrb <= "00" & encb & posb; + + + -- RAMB16_S9_S9: Virtex-II/II-Pro 2k x 8 + 1 Parity bit Dual-Port RAM + -- Xilinx HDL Language Template version 7.1i + + sboxd: RAMB16_S9_S9 + generic map ( + WRITE_MODE_A => "READ_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "READ_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "NONE", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_20 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_21 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_22 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_23 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_24 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_25 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_29 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_00 => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_01 => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_02 => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_03 => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_04 => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_05 => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_06 => X"0000000000000000000000000000000000000000000000000000000000000000", + INITP_07 => X"0000000000000000000000000000000000000000000000000000000000000000" + ) + port map ( + DOA => douta(7 downto 0), -- Port A 8-bit Data Output + DOB => doutb(7 downto 0), -- Port B 8-bit Data Output + DOPA => open, -- Port A 1-bit Parity Output + DOPB => open, -- Port B 1-bit Parity Output + ADDRA => s_addra, -- Port A 11-bit Address Input + ADDRB => s_addrb, -- Port B 11-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => dina(7 downto 0), -- Port A 8-bit Data Input + DIB => dinb(7 downto 0), -- Port B 8-bit Data Input + DIPA => "0", -- Port A 1-bit parity Input + DIPB => "0", -- Port-B 1-bit parity Input + ENA => '1', -- Port A RAM Enable Input + ENB => '1', -- Port B RAM Enable Input + SSRA => '0', -- Port A Synchronous Set/Reset Input + SSRB => '0', -- Port B Synchronous Set/Reset Input + WEA => wea, -- Port A Write Enable Input + WEB => web -- Port B Write Enable Input + ); + + + is_init <= '0'; + + +end behavioral; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/encryption_engine.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/encryption_engine.vhd new file mode 100644 index 0000000..cb38b57 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/encryption_engine.vhd @@ -0,0 +1,345 @@ +-- ============================================================================ +-- +-- Design unit : encryption_engine (AES encryption engine) +-- +-- File Name : encryption_engine.vhd +-- +-- Purpose : The module provides encryption functionality (ECB-Mode) +-- based on AES algorithm by using ressource sharing +-- architecture (32-bit datapath) to reduce required area +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, aes_common, aes_column_ops, +-- aes_row_ops, aes_common, aes_encryption, tech_iface, +-- engine_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - requires external S-box stage and subkey memory +-- - number of rounds is obtained from the subkey memory +-- (set by key schedule) and should be valid when the +-- first subkey is read +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: two-process method (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +use work.aes_definitions.all; +use work.aes_common.all; +use work.aes_column_ops.all; +use work.aes_row_ops.all; +use work.aes_common.all; +use work.aes_encryption.all; + +use work.tech_iface.all; +use work.engine_iface.all; +use work.aux_funcs.all; + + +entity encryption_engine is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + enc_i : in encryption_engine_in_type; -- see package engine_iface + enc_o : out encryption_engine_out_type; -- see package engine_iface + skm_i : in subkey_memory_ed_out_type; -- see package tech_iface + skm_o : out subkey_memory_ed_in_type; -- see package tech_iface + sbox_i : in sbox_stage_out_type; -- see package tech_iface + sbox_o : out sbox_stage_in_type -- see package tech_iface + ); +end encryption_engine; + + +architecture behavioural of encryption_engine is + + + -- control fsm, states: idle / load input data / shift-rows / sub-bytes + mix-column + add-key + type ctrl_fsm_t is (cf_idle, cf_load, cf_sr, cf_sb_mc_ak); + + + type registers is record + busy : std_logic; -- busy, encryption in progress + valid : std_logic; -- ciphertext is valid + ctrl_fsm : ctrl_fsm_t; -- control fsm + key_id : key_id_t; -- stored key id + subkey_no : aes_round_no_t; -- subkey number (round number) + part_no : part_no_t; -- partinal number of subkey (# of 32-bit slice within subkey) + inc_part_no : std_logic; -- increment partial number + state : aes_state_t; -- state matrix + rounds : aes_round_no_t; -- stored number of rounds + din_sel : std_logic; -- input data select (0 : process data, 1 : load data) + sb_mx_sel : std_logic; -- select SubBytes() + MixColumn() path + act_sbox : std_logic; -- activate S-box stage (to suppress simulation warnings on Actel) + shift_rows : std_logic; -- perform ShiftRows() on state matrix + end record; + + + type variables is record + key_id : key_id_t; + sbox_dout : part_data_t; + end record; + + + signal r, rin : registers; + + +begin + + + -- combinatorial logic + comb: process (rst, r, enc_i, skm_i, sbox_i) + variable v : registers; + variable t : variables; + begin + + -- assign default values + v := r; +-- +-- +-- + -- strobes + v.shift_rows := '0'; + + + + if (r.inc_part_no = '1') + then + v.part_no := r.part_no + 1; + end if; + + -- count-up subkey # (round #) + if (r.part_no = "11") + then + v.subkey_no := r.subkey_no + 1; + end if; + + + t.sbox_dout := (others => '-'); + + -- transform state matrix + if (r.shift_rows = '1') + then + -- perform ShiftRows() (followed by one column-rotation step) + v.state := shift_rows(r.state); + v.state := v.state(95 downto 0) & (31 downto 0 => '-'); -- avoid unnecessary logic + t.sbox_dout := col2slv(select_column(shift_rows(r.state), 0)); + else + -- rotate column-weise + if (r.sb_mx_sel = '0') + then + -- bypass SubBytes() and MixColumns() during loading + v.state(31 downto 0) := r.state(127 downto 96) xor skm_i.subkey; + else + v.state(31 downto 0) := col2slv(mix_column(slv2col(sbox_i.dout))) xor skm_i.subkey; + end if; + v.state(127 downto 32) := r.state(95 downto 0); + t.sbox_dout := col2slv(select_column(r.state, 0)); + end if; + + -- shift-in input data + if (r.din_sel = '1') + then + v.state(127 downto 96) := enc_i.plain; + end if; + + + -- control fsm + case r.ctrl_fsm is + -- wait for start + when cf_idle => + v.sb_mx_sel := '0'; -- bypass SubBytes() + MixColumn() + + -- handle loading + if (enc_i.start = '1') + then + v.busy := '1'; + v.key_id := enc_i.key_id; -- store key-id + v.part_no := "01"; -- consider synchronous subkey memory + v.inc_part_no := '1'; -- allow part_no to increment + + v.ctrl_fsm := cf_load; + end if; + + -- load input data + when cf_load => + -- prepare to handle last input data word + if (r.part_no = "11") + then + v.din_sel := '0'; + v.inc_part_no := '0'; -- hold partial number at "00" + v.rounds := skm_i.rounds; + end if; + + -- finish loading + if (r.din_sel = '0') + then + v.act_sbox := '1'; -- activate S-box stage + v.sb_mx_sel := '1'; -- enable SubBytes() + MixColumn() path + -- r.part_no is automatically set to "00" (wrap-around) + v.shift_rows := '1'; + v.inc_part_no := '1'; -- re-activate partial number counting + + v.ctrl_fsm := cf_sr; + end if; + + -- perform ShiftRows() + when cf_sr => + -- check for last round + if (r.subkey_no = r.rounds) + then + v.sb_mx_sel := '0'; -- bypass SubBytes() + MixColumn() + v.valid := '1'; -- start output of encrypted data + end if; + + v.ctrl_fsm := cf_sb_mc_ak; + + -- perform SubBytes(), MixColumn() and AddRoundKey() + when cf_sb_mc_ak => + -- one clock cycle before completion + if (r.part_no = "11") + then + v.inc_part_no := '0'; -- hold partial number at "00" + v.act_sbox := '0'; -- deactivate S-box stage + end if; + + -- column-wise rotation completed + if (r.act_sbox = '0') + then + -- check for last round + if (r.sb_mx_sel = '0') + then + v.subkey_no := (others => '0'); -- consider synchronous subkey memory + -- r.part_no is held at "00" + v.din_sel := '1'; -- activate input data load mode + v.busy := '0'; + v.valid := '0'; -- stop output of encrypted data + + v.ctrl_fsm := cf_idle; + else + v.act_sbox := '1'; -- re-activate S-box stage + v.inc_part_no := '1'; -- re-activate partial number counting + v.shift_rows := '1'; + + v.ctrl_fsm := cf_sr; + end if; + end if; + + when others => + v.ctrl_fsm := cf_idle; + + end case; + + + -- handle start signal (synchronous subkey memory) + if (enc_i.start = '1') + then + t.key_id := enc_i.key_id; + else + t.key_id := r.key_id; + end if; + +-- +-- +-- + -- reset handling + if (rst = '1') + then + v.ctrl_fsm := cf_idle; + v.rounds := (others => '0'); + v.key_id := (others => '0'); + v.subkey_no := (others => '0'); + v.part_no := (others => '0'); + v.busy := '0'; + v.valid := '0'; + v.inc_part_no := '0'; + v.din_sel := '1'; + v.act_sbox := '0'; + end if; +-- +-- +-- + -- update registers + rin <= v; +-- +-- +-- + -- drive outputs + enc_o.valid <= r.valid; + enc_o.busy <= r.busy or (not sbox_i.ready); + enc_o.cipher <= sbox_i.dout xor skm_i.subkey; + + skm_o.rd_en <= enc_i.start or r.busy; + skm_o.subkey_no <= r.subkey_no; + skm_o.part_no <= r.part_no; + skm_o.key_id <= t.key_id; + + sbox_o.act <= r.act_sbox; + sbox_o.din <= t.sbox_dout; + sbox_o.ed_mode <= '0'; + + + end process; + + + -- registers + regs: process (clk, rst) + begin + if rising_edge(clk) + then + r <= rin; + end if; + + -- async. reset + if (rst = '1') + then + end if; + end process; + + +end behavioural; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/engine_iface.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/engine_iface.vhd new file mode 100644 index 0000000..8c8e209 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/engine_iface.vhd @@ -0,0 +1,152 @@ +-- ============================================================================ +-- +-- Design unit : engine_iface (interfaces of en-/decryption engines) +-- +-- File Name : engine_iface.vhd +-- +-- Purpose : The package collects type declarations for all non- +-- trivial interfaces of used entities. Record types +-- are used extensively to group related signals (e.g. +-- data / control & status, physical attachment etc.). +-- +-- +-- Depends on : +-- +-- - Package(s) : tech_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.tech_iface.all; + + +package engine_iface is + + +-- +-- encryption engine interface definition +-- + + + -- data/control input signals + type encryption_engine_in_type is record + start : std_logic; -- start encryption + plain : part_data_t; -- data to be encrypted (plaintext) + key_id : key_id_t; -- key id to use + end record; + + -- data/status outputs signals + type encryption_engine_out_type is record + cipher : part_data_t; -- encrypted data (ciphertext) + busy : std_logic; -- busy, encrypion in progress + valid : std_logic; -- ciphertext is valid (encryption finished) + end record; + + +-- +-- decryption engine interface definition +-- + + + -- data/control input signals + type decryption_engine_in_type is record + start : std_logic; -- start decryption + cipher : part_data_t; -- data to be decrypted (ciphertext) + key_id : key_id_t; -- key id to use + end record; + + -- data/status outputs signals + type decryption_engine_out_type is record + plain : part_data_t; -- decrypted data (plaintext) + busy : std_logic; -- busy, decrypion in progress + valid : std_logic; -- plaintext is valid (decryption finished) + end record; + + +-- +-- +-- Component declarations +-- +-- + + + -- AES encryption engine + component encryption_engine is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + enc_i : in encryption_engine_in_type; -- see package engine_iface + enc_o : out encryption_engine_out_type; -- see package engine_iface + skm_i : in subkey_memory_ed_out_type; -- see package tech_iface + skm_o : out subkey_memory_ed_in_type; -- see package tech_iface + sbox_i : in sbox_stage_out_type; -- see package tech_iface + sbox_o : out sbox_stage_in_type -- see package tech_iface + ); + end component; + + + + -- AES decryption engine + component decryption_engine is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + dec_i : in decryption_engine_in_type; -- see package engine_iface + dec_o : out decryption_engine_out_type; -- see package engine_iface + skm_i : in subkey_memory_ed_out_type; -- see package tech_iface + skm_o : out subkey_memory_ed_in_type; -- see package tech_iface + sbox_i : in sbox_stage_out_type; -- see package tech_iface + sbox_o : out sbox_stage_in_type -- see package tech_iface + ); + end component; + + +end engine_iface; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_128.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_128.vhd new file mode 100644 index 0000000..2c31c50 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_128.vhd @@ -0,0 +1,282 @@ +-- ============================================================================ +-- +-- Design unit : key_schedule_128 (AES 128-bit key schdeule) +-- +-- File Name : key_schedule_128.vhd +-- +-- Purpose : The module provides key expansion/subkey generaion +-- functionality for AES algorithm by using ressource +-- sharing architecture (32-bit datapath) to reduce +-- required area +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, aes_gf_2exp8_arith, tech_iface, +-- key_schedule_iface, aux_funcs +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : requires external S-box stage and subkey memory +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-14 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: two-process method (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +use work.aes_definitions.all; +use work.aes_gf_2exp8_arith.all; + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.aux_funcs.all; + + +entity key_schedule_128 is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbox_i : in sbox_stage_out_type; -- see package tech_iface + sbox_o : out sbox_stage_in_type; -- see package tech_iface + skm_enc_o : out subkey_memory_ks_in_type; -- see package tech_iface + skm_dec_o : out subkey_memory_ks_in_type -- see package tech_iface + ); +end key_schedule_128; + + +architecture behavioural of key_schedule_128 is + + + -- control fsm, states: idle / load key / expand key + type ctrl_fsm_t is (cf_idle, cf_load, cf_expand); + + type registers is record + busy : std_logic; -- busy, key expansion in progress + sk_slide : aes_state_t; -- sliding subkey register + key_id : key_id_t; -- stored key id + enc_sk_no : aes_round_no_t; -- encryption subkey number + dec_sk_no : aes_round_no_t; -- decryption subkey number + part_no : part_no_t; -- number of 32-bit slice within subkey + rconst : gf_2exp8_t; -- round "constant" + ctrl_fsm : ctrl_fsm_t; -- control fsm + din_sel : std_logic; -- input data select (0 : input data, 1 : processing) + sbox_sel : std_logic; -- select S-box path + end record; + + + type variables is record + sbox_dout : std_logic_vector(sbox_o.din'range); -- input data to the S-box stage + end record; + + + signal r, rin : registers; + + +begin + + + -- combinatorial logic + comb: process (rst, r, key_i, sbox_i) + variable v : registers; + variable t : variables; + + begin + -- assign default values + v := r; +-- +-- +-- + -- strobes + v.sbox_sel := '0'; + + + -- count-up (down) subkey # / round constant / subkey / etc. + if (r.busy = '1') + then + v.part_no := r.part_no + 1; + + if (r.part_no = "10") + then + v.sbox_sel := '1'; + end if; + end if; + + + -- count-up (down) subkey # / round constant / subkey / etc. + if (r.sbox_sel = '1') + then + v.enc_sk_no := r.enc_sk_no + 1; + v.dec_sk_no := r.dec_sk_no - 1; + v.rconst := mul_gf_2exp8(r.rconst, X"02"); + end if; + + + + + v.sk_slide(127 downto 32) := r.sk_slide(95 downto 0); + + if (r.din_sel = '0') + then + -- shift-in input data + v.sk_slide(31 downto 0) := key_i.key; + t.sbox_dout := rotl(key_i.key, 8); + else + if (r.sbox_sel = '1') + then + v.sk_slide(31 downto 0) := sbox_i.dout xor (r.rconst & X"000000") xor r.sk_slide(127 downto 96); + else + v.sk_slide(31 downto 0) := r.sk_slide(31 downto 0) xor r.sk_slide(127 downto 96); + end if; + t.sbox_dout := rotl(r.sk_slide(31 downto 0) xor r.sk_slide(127 downto 96), 8); + end if; + + + -- control fsm + case r.ctrl_fsm is + when cf_idle => + v.part_no := (others => '0'); + v.enc_sk_no := (others => '0'); + v.dec_sk_no := conv_std_logic_vector(AES_128_ROUNDS, skm_enc_o.rounds'length); + v.rconst := X"01"; + + -- handle key loading + if (key_i.load_key = '1') + then + v.busy := '1'; + v.key_id := key_i.key_id; + + v.ctrl_fsm := cf_load; + end if; + + when cf_load => + -- handle last input word + if (r.part_no = "10") + then + v.din_sel := '1'; -- switch to processing data + + v.ctrl_fsm := cf_expand; + end if; + + when cf_expand => + if (r.part_no = "11") and (r.enc_sk_no = AES_128_ROUNDS) + then + v.din_sel := '0'; + v.busy := '0'; + + v.ctrl_fsm := cf_idle; + end if; + + + when others => + v.ctrl_fsm := cf_idle; + end case; + +-- +-- +-- + -- reset handling + if (rst = '1') + then + v.ctrl_fsm := cf_idle; + v.din_sel := '0'; + v.sbox_sel := '0'; + v.busy := '0'; + v.key_id := (others => '0'); + v.enc_sk_no := (others => '0'); + v.dec_sk_no := conv_std_logic_vector(AES_128_ROUNDS, skm_enc_o.rounds'length); + v.part_no := (others => '0'); + end if; +-- +-- +-- + -- update registers + rin <= v; +-- +-- +-- + -- drive outputs + key_o.busy <= r.busy or (not sbox_i.ready); + + sbox_o.act <= r.busy; + sbox_o.din <= t.sbox_dout; + sbox_o.ed_mode <= '0'; + + skm_enc_o.subkey_no <= r.enc_sk_no; + skm_enc_o.part_no <= r.part_no; + skm_enc_o.subkey <= r.sk_slide(31 downto 0); + skm_enc_o.rounds <= conv_std_logic_vector(AES_128_ROUNDS, skm_enc_o.rounds'length); + skm_enc_o.key_id <= r.key_id; + skm_enc_o.write_en <= r.busy; + + skm_dec_o.subkey_no <= r.dec_sk_no; + skm_dec_o.part_no <= r.part_no; + skm_dec_o.subkey <= r.sk_slide(31 downto 0); + skm_dec_o.rounds <= conv_std_logic_vector(AES_128_ROUNDS, skm_enc_o.rounds'length); + skm_dec_o.key_id <= r.key_id; + skm_dec_o.write_en <= r.busy; + + end process; + + + -- registers + regs: process (clk, rst) + begin + if rising_edge(clk) + then + r <= rin; + end if; + + -- async. reset + if (rst = '1') + then + end if; + end process; + + +end behavioural; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_iface.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_iface.vhd new file mode 100644 index 0000000..6e70631 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_iface.vhd @@ -0,0 +1,151 @@ +-- ============================================================================ +-- +-- Design unit : key_schedule_iface (interfaces of 128-bit and 256-bit +-- key schedule) +-- +-- File Name : key_schedule_iface.vhd +-- +-- Purpose : The package collects type declarations for all non- +-- trivial interfaces of used entities. Record types +-- are used extensively to group related signals (e.g. +-- data / control & status, physical attachment etc.). +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, tech_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : Version for implementation using 32-bit datapath +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-14 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.aes_definitions.all; +use work.tech_iface.all; + + +package key_schedule_iface is + + +-- +-- 256-bit key schedule interface definition +-- + + + -- key/control input signals + type key_schedule_256_in_type is record + load_key : std_logic; -- load key / start expansion + key : part_data_t; -- encryption/decryption key + key_id : key_id_t; -- key id to use + end record; + + + -- status output signals + type key_schedule_256_out_type is record + busy : std_logic; -- busy, key expansion in progress + end record; + + +-- +-- 128-bit key schedule interface definition +-- + + + -- key/control input signals + type key_schedule_128_in_type is record + load_key : std_logic; -- load key / start expansion + key : part_data_t; -- encryption/decryption key + key_id : key_id_t; -- key id to use + end record; + + + -- status output signals + type key_schedule_128_out_type is record + busy : std_logic; -- busy, key expansion in progress + end record; + + +-- +-- +-- Component declarations +-- +-- + + + -- 256-bit key schedule + component key_schedule_256 is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + key_i : in key_schedule_256_in_type; -- see package key_schedule_iface + key_o : out key_schedule_256_out_type; -- see package key_schedule_iface + sbox_i : in sbox_stage_out_type; -- see package tech_iface + sbox_o : out sbox_stage_in_type; -- see package tech_iface + skm_enc_o : out subkey_memory_ks_in_type; -- see package tech_iface + skm_dec_o : out subkey_memory_ks_in_type -- see package tech_iface + ); + end component; + + + -- 128-bit key schedule + component key_schedule_128 is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + key_i : in key_schedule_128_in_type; -- see package key_schedule_iface + key_o : out key_schedule_128_out_type; -- see package key_schedule_iface + sbox_i : in sbox_stage_out_type; -- see package tech_iface + sbox_o : out sbox_stage_in_type; -- see package tech_iface + skm_enc_o : out subkey_memory_ks_in_type; -- see package tech_iface + skm_dec_o : out subkey_memory_ks_in_type -- see package tech_iface + ); + end component; + + +end key_schedule_iface; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/tech_iface_virtex2.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/tech_iface_virtex2.vhd new file mode 100644 index 0000000..b194c21 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/tech_iface_virtex2.vhd @@ -0,0 +1,197 @@ +-- ============================================================================ +-- +-- Design unit : tech_iface +-- +-- File Name : tech_iface_virtex2.vhd +-- +-- Purpose : The package collects type declarations for all non- +-- trivial interfaces of used entities. Record types +-- are used extensively to group related signals (e.g. +-- data / control & status, physical attachment etc.). +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : - +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - coding style: record-signals for related purposes (Gaisler-style) +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.aes_definitions.all; + + +package tech_iface is + + + -- architecture-dependent key-id size (matching Virtex-II BlockRAM size) + subtype key_id_t is std_logic_vector(2 downto 0); + + + -- number of 32-bit slice within subkey + subtype part_no_t is std_logic_vector(1 downto 0); + + -- 32-bit slice of 128-bit data block + subtype part_data_t is std_logic_vector(31 downto 0); + + -- 32-bit slice of 128-bit subkey + subtype part_subkey_t is std_logic_vector(31 downto 0); + + +-- +-- S-box stage interface definition (32-bit version, 2x7-bit + 2x9-bit, mapping as required by KS-128) +-- + + + -- s-box stage input signals + type sbox_stage_in_type is record + act : std_logic; -- read-enable control (to suppress simulation warnings) + din : part_data_t; -- S-box input data + ed_mode : std_logic; -- encryption (0) / decryption (1) mode + end record; + + + -- s-box stage load input signals + type sbox_stage_load_in_type is record + act : std_logic; -- activate load I/F + ed_mode : std_logic; -- encryption (0) / decryption (1) mode + pos : aes_sbox_8_t; -- position + din : aes_sbox_8_t; -- new value + wen : std_logic; -- write enable + done : std_logic; -- S-box loading done + end record; + + + -- s-box stage outputs signals + type sbox_stage_out_type is record + dout : part_data_t; -- S-box output data + ready : std_logic; -- S-box stage is ready + end record; + + +-- +-- subkey memory interface definition (32-bit version) +-- + + + -- key-schedule - side input signals + type subkey_memory_ks_in_type is record + write_en : std_logic; -- write enable + key_id : key_id_t; -- key id to use + subkey_no : aes_round_no_t; -- subkey number + part_no : part_no_t; -- 32-bit slice number + subkey : part_subkey_t; -- subkey + rounds : aes_round_no_t; -- number of rounds + end record; + + + -- key-schedule - side output signals + type subkey_memory_ks_out_type is record + dummy : std_logic; + end record; + + + -- encryption/decryption - side input signals + type subkey_memory_ed_in_type is record + rd_en : std_logic; -- read-enable control (to suppress simulation warnings) + subkey_no : aes_round_no_t; -- subkey number + part_no : part_no_t; -- 32-bit slice number + key_id : key_id_t; -- key id to use + end record; + + + -- encryption/decryption - side output signals + type subkey_memory_ed_out_type is record + subkey : part_subkey_t; -- subkey + rounds : aes_round_no_t; -- number of rounds + end record; + + +-- +-- +-- Component declarations +-- +-- + + + -- S-Box stage + component tech_sbox_stage is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + data_i : in sbox_stage_in_type; -- see package tech_iface + data_o : out sbox_stage_out_type; -- see package tech_iface + load_i : in sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + + -- subkey memory + component tech_subkey_memory is + port ( + clk : in std_logic; -- clock + key_sched_i : in subkey_memory_ks_in_type; -- see package tech_iface + enc_dec_i : in subkey_memory_ed_in_type; -- see package tech_iface + enc_dec_o : out subkey_memory_ed_out_type -- see package tech_iface + ); + end component; + + + -- S-box loader (mainly for simulation) + component sbox_loader is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + load_o : out sbox_stage_load_in_type -- see package tech_iface + ); + end component; + + +end tech_iface; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/tech_sbox_stage_virtex2.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/tech_sbox_stage_virtex2.vhd new file mode 100644 index 0000000..948fd56 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/tech_sbox_stage_virtex2.vhd @@ -0,0 +1,184 @@ +-- ============================================================================ +-- +-- Design unit : tech_sbox_stage +-- +-- File Name : tech_sbox_stage_virtex2.vhd +-- +-- Purpose : The module provides S-box stage for implementation of +-- encryption, decryption and key schedule using 32-bit +-- datapath on Virtex-II family +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, tech_iface +-- +-- - Module(s) : dual_sbox_virtex2 (dual-port RAM block) +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : S-box type mapping as required by 128-bit key schedule +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-02 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; + + +use work.aes_definitions.all; +use work.tech_iface.all; + + +entity tech_sbox_stage is + port ( + rst : in std_logic; -- reset + clk : in std_logic; -- clock + data_i : in sbox_stage_in_type; -- see package tech_iface + data_o : out sbox_stage_out_type; -- see package tech_iface + load_i : in sbox_stage_load_in_type -- see package tech_iface + ); +end tech_sbox_stage; + + +architecture behavioural of tech_sbox_stage is + + + component dual_sbox_virtex2 is + port ( + clk : in std_logic; -- clock (rising) + enca : in std_logic; -- encryption (0) / decryption (1) mode + encb : in std_logic; -- encryption (0) / decryption (1) mode + posa : in std_logic_vector(7 downto 0); -- position + posb : in std_logic_vector(7 downto 0); -- position + dina : in std_logic_vector(7 downto 0); -- write data + dinb : in std_logic_vector(7 downto 0); -- write data + wea : in std_logic; -- write enable + web : in std_logic; -- write enable + douta : out std_logic_vector(7 downto 0); -- read data + doutb : out std_logic_vector(7 downto 0); -- read data + is_init : out std_logic -- pre-initialised memory + ); + end component; + + + signal s_din : std_logic_vector(31 downto 0); -- S-box input data + signal s_ed_mode : std_logic; -- en-/decryption mode selection + + signal s_wen : std_logic; -- write enable + signal s_ready : std_logic; -- S-box is ready + + signal s_is_init : std_logic_vector(1 downto 0); -- S-box is pre-initialized + + +begin + + + -- handle activation of load I/F + process (load_i, data_i) + begin + if (load_i.act = '1') + then + s_din <= load_i.pos & load_i.pos & load_i.pos & load_i.pos; + s_ed_mode <= load_i.ed_mode; + s_wen <= load_i.wen; + else + s_din <= data_i.din; + s_ed_mode <= data_i.ed_mode; + s_wen <= '0'; + end if; + end process; + + + sbox_2x8_1: dual_sbox_virtex2 + port map ( + clk => clk, + enca => s_ed_mode, + encb => s_ed_mode, + posa => s_din(31 downto 24), + posb => s_din(23 downto 16), + dina => load_i.din, + dinb => (others => '0'), + wea => s_wen, + web => '0', + douta => data_o.dout(31 downto 24), + doutb => data_o.dout(23 downto 16), + is_init => s_is_init(1) + ); + + + sbox_2x8_0: dual_sbox_virtex2 + port map ( + clk => clk, + enca => s_ed_mode, + encb => s_ed_mode, + posa => s_din(15 downto 8), + posb => s_din(7 downto 0), + dina => load_i.din, + dinb => (others => '0'), + wea => s_wen, + web => '0', + douta => data_o.dout(15 downto 8), + doutb => data_o.dout(7 downto 0), + is_init => s_is_init(0) + ); + + + -- generate S-box ready flag + process + begin + wait until rising_edge(clk); + if (rst = '1') + then + s_ready <= s_is_init(0) and s_is_init(1); + elsif (load_i.act = '1') and (load_i.wen = '1') + then + s_ready <= '0'; + elsif (load_i.act = '1') and (load_i.done = '1') + then + s_ready <= '1'; + end if; + end process; + + + data_o.ready <= (not load_i.act) and s_ready; + + +end behavioural; diff --git a/projects/messe_demo/src/AES_32bit_datapath/enc/tech_subkey_memory_virtex2.vhd b/projects/messe_demo/src/AES_32bit_datapath/enc/tech_subkey_memory_virtex2.vhd new file mode 100644 index 0000000..3802e45 --- /dev/null +++ b/projects/messe_demo/src/AES_32bit_datapath/enc/tech_subkey_memory_virtex2.vhd @@ -0,0 +1,142 @@ +-- ============================================================================ +-- +-- Design unit : tech_subkey_memory +-- +-- File Name : tech_subkey_memory_virtex2.vhd +-- +-- Purpose : The module provides subkey memory for implementation of +-- encryption, decryption and key schedule using 32-bit +-- datapath on Virtex-II family +-- +-- +-- Depends on : +-- +-- - Package(s) : aes_definitions, tech_iface +-- +-- - Module(s) : - +-- +-- +-- Dev. Platform : Xilinx ISE 8.1i SP3 / Win32 (W2k SP4) +-- +-- - Simulator(s) : Modelsim XE III 6.0d +-- +-- - Synthesis : Xilinx XST +-- +-- - Place & Route : Xilinx PAR +-- +-- +-- Errors : None known +-- +-- +-- Limitations : None known +-- +-- +-- Notes : parity memory is used to store number of rounds +-- beside the subkey +-- +-- +-- Author(s) : A. Freund (af) +-- Digitale Signalverabeitung & Informationstechnik GmbH, +-- Bremen, Germany +-- +-- +-- ============================================================================ +-- +-- Revision List: +-- Version Author(s) Date Changes +-- +-- v0.00 af 2006-11-15 initial version +-- +-- see SVN logs +-- +-- ============================================================================ +-- +-- Naming conventions: +-- +-- - active-low signals are indicated by appending "_n" +-- - constants are in UPPERCASE +-- - name parts are separated by "_" +-- +-- ============================================================================ + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +library unisim; +use unisim.vcomponents.all; + + +use work.aes_definitions.all; +use work.tech_iface.all; + + +entity tech_subkey_memory is + port ( + clk : in std_logic; -- clock + key_sched_i : in subkey_memory_ks_in_type; -- see package tech_iface + enc_dec_i : in subkey_memory_ed_in_type; -- see package tech_iface + enc_dec_o : out subkey_memory_ed_out_type -- see package tech_iface + ); +end tech_subkey_memory; + + +architecture behavioural of tech_subkey_memory is + + signal s_pm_a_in : std_logic_vector(3 downto 0) := (others => '0'); + signal s_pm_b_out : std_logic_vector(3 downto 0); + + signal s_addr_a : std_logic_vector(key_id_t'length + aes_round_no_t'length + part_no_t'length - 1 downto 0); + signal s_addr_b : std_logic_vector(key_id_t'length + aes_round_no_t'length + part_no_t'length - 1 downto 0); + + +begin + + + s_pm_a_in(aes_round_no_t'range) <= key_sched_i.rounds; + + s_addr_a <= key_sched_i.key_id & key_sched_i.subkey_no & key_sched_i.part_no; + + s_addr_b <= enc_dec_i.key_id & enc_dec_i.subkey_no & enc_dec_i.part_no; + + + -- 1 Block-RAMs for subkey memory, port A : key schedule, port B : en-/decryprion + + -- RAMB16_S36_S36: Virtex-II/II-Pro, Spartan-3/3E 512 x 32 + 4 Parity bits Dual-Port RAM + -- Xilinx HDL Language Template version 7.1i + + skm: RAMB16_S36_S36 + generic map ( + WRITE_MODE_A => "READ_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "READ_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "NONE" -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + ) + port map ( + DOA => open, -- Port A 32-bit Data Output + DOB => enc_dec_o.subkey, -- Port B 32-bit Data Output + DOPA => open, -- Port A 4-bit Parity Output + DOPB => s_pm_b_out, -- Port B 4-bit Parity Output + ADDRA => s_addr_a, -- Port A 9-bit Address Input + ADDRB => s_addr_b, -- Port B 9-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => key_sched_i.subkey, -- Port A 32-bit Data Input + DIB => X"00000000", -- Port B 32-bit Data Input + DIPA => s_pm_a_in, -- Port A 4-bit parity Input + DIPB => "0000", -- Port-B 4-bit parity Input + ENA => key_sched_i.write_en, -- Port A RAM Enable Input + ENB => enc_dec_i.rd_en, -- PortB RAM Enable Input + SSRA => '0', -- Port A Synchronous Set/Reset Input + SSRB => '0', -- Port B Synchronous Set/Reset Input + WEA => key_sched_i.write_en, -- Port A Write Enable Input + WEB => '0' -- Port B Write Enable Input + ); + + + + enc_dec_o.rounds <= s_pm_b_out(aes_round_no_t'range); + + +end behavioural; diff --git a/projects/messe_demo/src/ac97_ctrl/ac_in.vhd b/projects/messe_demo/src/ac97_ctrl/ac_in.vhd new file mode 100644 index 0000000..a072a9b --- /dev/null +++ b/projects/messe_demo/src/ac97_ctrl/ac_in.vhd @@ -0,0 +1,309 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 08:27:43 08/26/2006 +-- Design Name: +-- Module Name: ac_out - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity ac_in is + Port ( + rst : in std_logic; + clk : in std_logic; + sync_frame : out std_logic; + sync_status : out std_logic; + slot_valid : out unsigned(0 to 12); + stat_addr : out unsigned (19 downto 0); + stat_data : out unsigned (19 downto 0); + pcm_out_addr : in unsigned (3 downto 0); + pcm_out_data : out unsigned (19 downto 0); + ac_reset : in std_logic; + ac_bit_clk : in std_logic; + ac_sdata_in : in std_logic; + ac_ssync : in std_logic + ); +end ac_in; + +architecture Behavioral of ac_in is + +------------------------------------------------------------------ +COMPONENT singleshot +GENERIC (mode : integer); +PORT( + rst : IN std_logic; + clk : IN std_logic; + input : IN std_logic; + output : OUT std_logic + ); +END COMPONENT; + +------------------------------------------------------------------ +type sac_t is (ac_idle, ac_tag, ac_data); +subtype bitcnt_t is integer range 0 to 19; +subtype slotcnt_t is integer range 0 to 12; +subtype slot_valid_t is UNSIGNED(0 to 12); +subtype tag_t is UNSIGNED(15 downto 0); +subtype slot_t is UNSIGNED(19 downto 0); +type slot_array_t is array (natural range <>) of slot_t; + +signal data_array : slot_array_t (1 to 12); +signal tag : tag_t; + +signal sac, snac : sac_t; +signal bitcnt : bitcnt_t; +signal bitcnt_rst, bitcnt_en : STD_LOGIC; +signal slotcnt : slotcnt_t; +signal slotcnt_rst, slotcnt_en : STD_LOGIC; + +signal rx_reg : slot_t; +signal stat_read, host_update : STD_LOGIC; +signal sync_end, slot_end, last_slot, start_of_frame : STD_LOGIC; + +------------------------------------------------------------------ +function GetSlotValid(data : tag_t) return slot_valid_t is +variable res : slot_valid_t := (others => '0'); +begin + res := (others => '0'); + for i in slot_valid_t'range loop + res(i) := data(data'left-i); + end loop; + return res; + +end GetSlotValid; + +------------------------------------------------------------------ +begin + +------------------------------------------------------------- +-- proc_status_flags +------------------------------------------------------------- +proc_status_flags: +process (rst, clk, host_update, tag, data_array) +begin + if rising_edge(clk) then + sync_status <= '0'; + if rst = '1' then + slot_valid <= (others => '0'); + stat_addr <= (others => '0'); + stat_data <= (others => '0'); + elsif host_update = '1' then + sync_status <= '1'; + slot_valid <= GetSlotValid(tag); + stat_addr <= data_array(1); + stat_data <= data_array(2); + end if; + end if; +end process; + +------------------------------------------------------------- +-- proc_pcm_data +------------------------------------------------------------- +proc_pcm_data: +process (clk, pcm_out_addr, data_array) +variable slot_id : integer range 0 to 12; +begin + pcm_out_data <= (others => '-'); + slot_id := to_integer(pcm_out_addr); + if (slot_id > 2) then + pcm_out_data <= data_array(slot_id); + end if; +end process; + +------------------------------------------------------------- +-- proc_read_data +------------------------------------------------------------- +proc_read_data : +process (ac_reset, ac_bit_clk, slot_end, slotcnt) +begin + + if ac_reset = '1' then + stat_read <= '0'; + elsif rising_edge(ac_bit_clk) then + stat_read <= '0'; + if slot_end = '1' and slotcnt /= 0 then + data_array(slotcnt) <= rx_reg; + if slotcnt = 2 then + stat_read <= '1'; + end if; + end if; + end if; +end process; + +------------------------------------------------------------- +-- proc_read_stat +------------------------------------------------------------- +proc_read_tag : +process (ac_reset, ac_bit_clk, sync_end) +begin + + if ac_reset = '1' then + tag <= (others => '0'); + elsif rising_edge(ac_bit_clk) then + if sync_end = '1' then + tag <= rx_reg(15 downto 0); + end if; + end if; + +end process; + +------------------------------------------------------------- +-- proc_slot_count +------------------------------------------------------------- +proc_slot_count: +process (slotcnt_rst, ac_bit_clk, slotcnt_en, slotcnt) +begin + if rising_edge(ac_bit_clk) then + if slotcnt_rst = '1' then + slotcnt <= slotcnt_t'low; + elsif slotcnt_en = '1' then + if slotcnt /= slotcnt_t'high then + slotcnt <= slotcnt + 1; + else + slotcnt <= slotcnt_t'low; + end if; + end if; + end if; +end process; + +------------------------------------------------------------- +-- proc_bit_count +------------------------------------------------------------- +proc_bit_count: +process (bitcnt_rst, ac_bit_clk, bitcnt_en, bitcnt) +begin + if rising_edge(ac_bit_clk) then + if bitcnt_rst = '1' then + bitcnt <= bitcnt_t'low; + elsif bitcnt_en = '1' then + if bitcnt /= bitcnt_t'high then + bitcnt <= bitcnt + 1; + else + bitcnt <= bitcnt_t'low; + end if; + end if; + end if; +end process; + +------------------------------------------------------------------ +proc_ac_fsm: +process (bitcnt, slotcnt, sac, ac_ssync) +begin + snac <= sac; + bitcnt_rst <= '0'; + bitcnt_en <= '1'; + slotcnt_rst <= '0'; + slotcnt_en <= '0'; + slot_end <= '0'; + sync_end <= '0'; + last_slot <= '0'; + start_of_frame <= '0'; + + if bitcnt = 19 then + slot_end <= '1'; + end if; + if slotcnt = 12 and bitcnt = 19 then + last_slot <= '1'; + end if; + + case sac is + + when ac_idle => + bitcnt_rst <= '1'; + slotcnt_rst <= '1'; + if (ac_ssync = '1') then + snac <= ac_tag; + end if; + + when ac_tag => + if (bitcnt = 0) then + start_of_frame <= '1'; + elsif (bitcnt = 15) then + slotcnt_en <= '1'; + bitcnt_rst <= '1'; + sync_end <= '1'; + if (ac_ssync = '0') then + snac <= ac_data; + else + snac <= ac_idle; + end if; + end if; + + when ac_data => + if bitcnt = 19 then + slotcnt_en <= '1'; + if slotcnt = 12 then + slotcnt_rst <= '1'; + snac <= ac_tag; + end if; + end if; + when others => null; + end case; +end process; + +proc_ac_fsm_next: +process (ac_reset, ac_bit_clk, snac) +begin + if ac_reset = '1' then + sac <= ac_idle; + elsif rising_edge(ac_bit_clk) then + sac <= snac; + end if; +end process; + +------------------------------------------------------------- +-- Receive Shift Register +------------------------------------------------------------- +process (ac_reset, ac_bit_clk, ac_sdata_in) +begin + if ac_reset = '1' then + rx_reg <= (others => '0'); + elsif falling_edge(ac_bit_clk) then + rx_reg <= rx_reg(rx_reg'left-1 downto 0) & ac_sdata_in; + end if; +end process; + +------------------------------------------------------------------ +singleshot_inst1: singleshot +GENERIC MAP ( + mode => 0) +PORT MAP( + rst => rst, + clk => clk, + input => stat_read, + output => host_update +); + +singleshot_inst2: singleshot +GENERIC MAP ( + mode => 1) +PORT MAP( + rst => rst, + clk => clk, + input => start_of_frame, + output => sync_frame +); + +------------------------------------------------------------- + +end Behavioral; + diff --git a/projects/messe_demo/src/ac97_ctrl/ac_io.vhd b/projects/messe_demo/src/ac97_ctrl/ac_io.vhd new file mode 100644 index 0000000..2736c9e --- /dev/null +++ b/projects/messe_demo/src/ac97_ctrl/ac_io.vhd @@ -0,0 +1,182 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 18:29:55 08/26/2006 +-- Design Name: +-- Module Name: ac_io - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity ac_io is + Port ( + rst : in std_logic; + clk : in std_logic; + ready : out std_logic; + sync_strobe : out unsigned(0 to 2); + slot_valid : out unsigned(0 to 12); + stat_addr : out unsigned (19 downto 0); + stat_data : out unsigned (19 downto 0); + rx_pcm_addr : in unsigned (3 downto 0); + rx_pcm_data : out unsigned (19 downto 0); + cmd_addr : in unsigned(19 downto 0); + cmd_data : in unsigned(19 downto 0); + cmd_we : in std_logic; + tx_pcm_addr : in unsigned(3 downto 0); + tx_pcm_data : in unsigned(19 downto 0); + tx_pcm_we : in std_logic; + ac_sdata_in : in std_logic; + ac_bit_clk : in std_logic; + ac_reset_n : out std_logic; + ac_sdata_out : out std_logic; + ac_ssync : out std_logic); + +end ac_io; + +architecture Behavioral of ac_io is + + COMPONENT ac_in + Port ( + rst : in std_logic; + clk : in std_logic; + sync_frame : out std_logic; + sync_status : out std_logic; + slot_valid : out unsigned(0 to 12); + stat_addr : out unsigned (19 downto 0); + stat_data : out unsigned (19 downto 0); + pcm_out_addr : in unsigned (3 downto 0); + pcm_out_data : out unsigned (19 downto 0); + ac_reset : in std_logic; + ac_bit_clk : in std_logic; + ac_sdata_in : in std_logic; + ac_ssync : in std_logic + ); + END COMPONENT; + + COMPONENT ac_out + PORT( + rst : in std_logic; + clk : in std_logic; + sync_tx : out std_logic; + cmd_addr : in unsigned(19 downto 0); + cmd_data : in unsigned(19 downto 0); + cmd_we : in std_logic; + pcm_in_addr : in unsigned(3 downto 0); + pcm_in_data : in unsigned(19 downto 0); + pcm_in_we : in std_logic; + ac_bit_clk : in std_logic; + ac_reset : in std_logic; + ac_sdata_out : out std_logic; + ac_ssync : out std_logic + ); + END COMPONENT; + + SIGNAL ac_reset : std_logic; + SIGNAL ssync_rx : std_logic; + SIGNAL ssync_tx : std_logic; + SIGNAL sync_frame : std_logic; + SIGNAL sync_status : std_logic; + SIGNAL sync_tx : std_logic; + +begin + + inst_ac_in: ac_in PORT MAP( + rst => rst, + clk => clk, + sync_frame => sync_frame, + sync_status => sync_status, + slot_valid => slot_valid, + stat_addr => stat_addr, + stat_data => stat_data, + pcm_out_addr => rx_pcm_addr, + pcm_out_data => rx_pcm_data, + ac_reset => ac_reset, + ac_bit_clk => ac_bit_clk, + ac_sdata_in => ac_sdata_in, + ac_ssync => ssync_rx + ); + + inst_ac_out: ac_out PORT MAP( + rst => rst, + clk => clk, + sync_tx => sync_tx, + cmd_addr => cmd_addr, + cmd_data => cmd_data, + cmd_we => cmd_we, + pcm_in_addr => tx_pcm_addr, + pcm_in_data => tx_pcm_data, + pcm_in_we => tx_pcm_we, + ac_reset => ac_reset, + ac_bit_clk => ac_bit_clk, + ac_sdata_out => ac_sdata_out, + ac_ssync => ssync_tx + ); + + ------------------------------------------------------------------ + ready <= not ac_reset; + ac_ssync <= ssync_tx; + ssync_rx <= ssync_tx; + sync_strobe <= sync_frame & sync_status & sync_tx; + + ------------------------------------------------------------------ + proc_reset_gen: + process (rst, clk, ac_bit_clk) + type rstate_t is (s0, s1); + variable rstate, rstaten : rstate_t; + subtype cnt_t is integer range 0 to 999; + variable cnt : cnt_t; + begin + if rising_edge(clk) then + if rst = '1' then + rstate := s0; + cnt := cnt_t'high; + ac_reset <= '1'; + ac_reset_n <= '0'; + else + rstaten := rstate; + case rstate is + when s0 => + if cnt /= 0 then + cnt := cnt - 1; + else + ac_reset_n <= '1'; + if ac_bit_clk = '1' then + rstaten := s1; + cnt := cnt_t'high; + end if; + end if; + + when s1 => + if cnt /= 0 then + cnt := cnt - 1; + else + ac_reset <= '0'; + end if; + end case; + rstate := rstaten; + end if; + end if; + end process; + + ------------------------------------------------------------------ + +end Behavioral; + diff --git a/projects/messe_demo/src/ac97_ctrl/ac_out.vhd b/projects/messe_demo/src/ac97_ctrl/ac_out.vhd new file mode 100644 index 0000000..5449403 --- /dev/null +++ b/projects/messe_demo/src/ac97_ctrl/ac_out.vhd @@ -0,0 +1,276 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15:41:12 06/05/2007 +-- Design Name: +-- Module Name: ac_out - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity ac_out is + Port ( + rst : in std_logic; + clk : in std_logic; + sync_tx : out std_logic; + cmd_addr : in unsigned (19 downto 0); + cmd_data : in unsigned (19 downto 0); + cmd_we : in std_logic; + pcm_in_addr : in unsigned (3 downto 0); + pcm_in_data : in unsigned (19 downto 0); + pcm_in_we : in std_logic; + ac_reset : in std_logic; + ac_bit_clk : in std_logic; + ac_sdata_out : out std_logic; + ac_ssync : out std_logic + ); +end ac_out; + +architecture Behavioral of ac_out is + +------------------------------------------------------------------ +COMPONENT singleshot +GENERIC (mode : integer); +PORT( + rst : IN std_logic; + clk : IN std_logic; + input : IN std_logic; + output : OUT std_logic + ); +END COMPONENT; + +------------------------------------------------------------------ +subtype tag_t is UNSIGNED(15 downto 0); +subtype slot_valid_t is UNSIGNED(1 to 12); +signal slot_valid : slot_valid_t; +subtype slot_t is UNSIGNED(19 downto 0); +type slot_array_t is array (natural range <>) of slot_t; +signal data_array : slot_array_t (1 to 12); + signal tx_reg : UNSIGNED(19 downto 0); +signal last_slot, ssync : STD_LOGIC; + +type sac_t is (ac_idle, ac_tag, ac_data); +signal sac, snac : sac_t; + +subtype bitcnt_t is integer range 0 to 19; +subtype slotcnt_t is integer range 0 to 12; + +signal bitcnt : bitcnt_t; +signal bitcnt_rst, bitcnt_en : STD_LOGIC; +signal slotcnt : slotcnt_t; +signal slotcnt_rst, slotcnt_en : STD_LOGIC; + +signal slot_start : STD_LOGIC; + +------------------------------------------------------------------ +function CreateTag(slot_valid : slot_valid_t) return tag_t is +variable tag : tag_t := (others => '0'); +begin + tag := (others => '0'); + for i in slot_valid_t'range loop + tag(15-i) := slot_valid(i); + if slot_valid(i) = '1' then + tag(15) := '1'; + end if; + end loop; + tag(0) := '0'; -- ID0 + tag(1) := '0'; -- ID1 + tag(2) := '0'; -- Reserved +-- tag(15) := '1'; -- Frame is valid + return tag; + +end CreateTag; + +begin + +------------------------------------------------------------------ +proc_slot_reg: +process (clk, cmd_addr, cmd_data, cmd_we, pcm_in_data, pcm_in_we, pcm_in_addr, last_slot) +variable slot_id : integer range 0 to 12; +begin + slot_id := to_integer(pcm_in_addr); + if rising_edge(clk) then + if rst = '1' then + for i in data_array'range(1) loop + data_array(i) <= (others => '0'); + end loop; + slot_valid <= (others => '0'); + elsif last_slot = '1' then + slot_valid <= (others => '0'); + else + if cmd_we = '1' then + slot_valid(1) <= '1'; + slot_valid(2) <= '1'; + data_array(1) <= cmd_addr; + data_array(2) <= cmd_data; + end if; + if pcm_in_we = '1' then + if (slot_id > 2) then + data_array(slot_id) <= pcm_in_data; + slot_valid(slot_id) <= '1'; + end if; + end if; + end if; + end if; +end process; + +------------------------------------------------------------- +-- proc_slot_count +------------------------------------------------------------- +proc_slot_count: +process (slotcnt_rst, ac_bit_clk, slotcnt_en, slotcnt) +begin + if rising_edge(ac_bit_clk) then + if slotcnt_rst = '1' then + slotcnt <= slotcnt_t'low; + elsif slotcnt_en = '1' then + if slotcnt /= slotcnt_t'high then + slotcnt <= slotcnt + 1; + else + slotcnt <= slotcnt_t'low; + end if; + end if; + end if; +end process; + +------------------------------------------------------------------ +-- proc_bit_count +------------------------------------------------------------------ +proc_bit_count: +process (bitcnt_rst, ac_bit_clk, bitcnt_en, bitcnt) +begin + if rising_edge(ac_bit_clk) then + if bitcnt_rst = '1' then + bitcnt <= bitcnt_t'low; + elsif bitcnt_en = '1' then + if bitcnt /= bitcnt_t'high then + bitcnt <= bitcnt + 1; + else + bitcnt <= bitcnt_t'low; + end if; + end if; + end if; +end process; + +------------------------------------------------------------------ +proc_ac_fsm: +process (bitcnt, slotcnt, sac) +begin + snac <= sac; + bitcnt_rst <= '0'; + bitcnt_en <= '1'; + slotcnt_rst <= '0'; + slotcnt_en <= '0'; + slot_start <= '0'; + ssync <= '0'; + + if bitcnt = 0 then + slot_start <= '1'; + end if; + + case sac is + + when ac_idle => + bitcnt_rst <= '1'; + slotcnt_rst <= '1'; + snac <= ac_tag; + + when ac_tag => + ssync <= '1'; + if (bitcnt = 15) then + slotcnt_en <= '1'; + bitcnt_rst <= '1'; + snac <= ac_data; + end if; + + when ac_data => + if bitcnt = 19 then + slotcnt_en <= '1'; + if slotcnt = 12 then + slotcnt_rst <= '1'; + snac <= ac_tag; + end if; + end if; + when others => null; + end case; +end process; + +proc_ac_fsm_next: +process (ac_reset, ac_bit_clk, snac) +begin + if ac_reset = '1' then + sac <= ac_idle; + elsif rising_edge(ac_bit_clk) then + sac <= snac; + end if; +end process; + +------------------------------------------------------------------ +proc_tx_shift_reg: +process (ac_reset, ac_bit_clk, tx_reg, ssync, slot_valid, data_array) +begin + + if ac_reset = '1' then + tx_reg <= (others => '0'); + elsif rising_edge(ac_bit_clk) then + last_slot <= '0'; + if slot_start = '1' then + if ssync = '1' then + tx_reg <= CreateTag(slot_valid) & "0000"; + else + if slotcnt /= 0 then + tx_reg <= data_array(slotcnt); + if slotcnt = 12 then + last_slot <= '1'; + end if; + end if; + end if; + else + tx_reg <= tx_reg(tx_reg'left-1 downto 0) & '0'; + end if; + end if; +end process; + +------------------------------------------------------------------ +proc_ac_sync_out: +process (ac_reset, ac_bit_clk, ssync, tx_reg) +begin + if ac_reset = '1' then + ac_ssync <= '0'; + ac_sdata_out <= '0'; + elsif rising_edge(ac_bit_clk) then + ac_ssync <= ssync; + ac_sdata_out <= tx_reg(tx_reg'left); + end if; +end process; + +------------------------------------------------------------------ +singleshot_inst1: singleshot +GENERIC MAP ( + mode => 0) +PORT MAP( + rst => rst, + clk => clk, + input => last_slot, + output => sync_tx +); + +end Behavioral; diff --git a/projects/messe_demo/src/ac97_ctrl/singleshot.vhd b/projects/messe_demo/src/ac97_ctrl/singleshot.vhd new file mode 100644 index 0000000..f010d04 --- /dev/null +++ b/projects/messe_demo/src/ac97_ctrl/singleshot.vhd @@ -0,0 +1,153 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 21:52:19 10/22/05 +-- Design Name: +-- Module Name: singleshot - Behavioral +-- Project Name: +-- Target Device: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-------------------------------------------------------------------------------- +-- Component Template +-- +-- COMPONENT singleshot +-- GENERIC (mode : integer); +-- PORT( +-- rst : IN std_logic; +-- clk : IN std_logic; +-- input : IN std_logic; +-- output : OUT std_logic +-- ); +-- END COMPONENT; +-- +-- Instantation Template +-- +-- singleshot_int: oneshot +-- GENERIC MAP ( +-- mode => 1) +-- PORT MAP( +-- rst => , +-- clk => , +-- input => , +-- output => +-- ); +-- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +entity singleshot is + Generic ( mode : integer range 0 to 2 := 1); + Port ( rst : in std_logic; + clk : in std_logic; + input : in std_logic; + output : out std_logic); +end singleshot; + +architecture Behavioral of singleshot is + +type s_t is (idle, shot_in, active, shot_out); +signal s, sn : s_t; + +begin + +process (rst, clk, sn) +begin + if rising_edge(clk) then + if rst = '1' then + s <= idle; + else + s <= sn; + end if; + end if; +end process; + +mode_1: +if mode = 1 generate +begin + process (input, s) + begin + output <= '0'; + sn <= s; + case s is + when idle => + if input = '1' then + sn <= shot_in; + end if; + when shot_in => + output <= '1'; + sn <= active; + when active => + if input = '0' then + sn <= shot_out; + end if; + when shot_out => + sn <= idle; + when others => null; + end case; + end process; +end generate; + +mode_0: +if mode = 0 generate +begin + process (input, s) + begin + output <= '0'; + sn <= s; + case s is + when idle => + if input = '1' then + sn <= shot_in; + end if; + when shot_in => + sn <= active; + when active => + if input = '0' then + sn <= shot_out; + end if; + when shot_out => + output <= '1'; + sn <= idle; + when others => null; + end case; + end process; +end generate; + +mode_2: +if mode = 2 generate +begin + process (input, s) + begin + output <= '0'; + sn <= s; + case s is + when idle => + if input = '1' then + sn <= shot_in; + end if; + when shot_in => + output <= '1'; + sn <= active; + when active => + if input = '0' then + sn <= shot_out; + end if; + when shot_out => + output <= '1'; + sn <= idle; + when others => null; + end case; + end process; +end generate; + +end Behavioral; diff --git a/projects/messe_demo/src/cpu/JCpu_20071014.zip b/projects/messe_demo/src/cpu/JCpu_20071014.zip new file mode 100644 index 0000000..bdd4483 Binary files /dev/null and b/projects/messe_demo/src/cpu/JCpu_20071014.zip differ diff --git a/projects/messe_demo/src/cpu_embedded.vhd b/projects/messe_demo/src/cpu_embedded.vhd new file mode 100644 index 0000000..03bed0b --- /dev/null +++ b/projects/messe_demo/src/cpu_embedded.vhd @@ -0,0 +1,107 @@ +------------------------------------------------------------------------- +-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL +-- This file: cpu_embedded using cpu_core and rom + +-- Copyright (C) 2007 J. Ahrensfeld + +-- This library is free software; you can redistribute it and/or +-- modify it under the terms of the GNU Lesser General Public +-- License as published by the Free Software Foundation; either +-- version 2.1 of the License, or (at your option) any later version. + +-- This library is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +-- Lesser General Public License for more details. + +-- You should have received a copy of the GNU Lesser General Public +-- License along with this library; if not, write to the Free Software +-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +-- For questions and ideas, please contact the author at jens@jayfield.org + +----------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.numeric_std.ALL; + +use work.cpu_pkg.all; + +entity cpu_embedded is + Port ( + rst : in STD_LOGIC; + clk : in STD_LOGIC; + ce : in STD_LOGIC; + int_in : in STD_LOGIC; + int_ack : out STD_LOGIC; + xmem_we : out STD_LOGIC; + xmem_re : out STD_LOGIC; + xmem_din : in unsigned (DMEM_DATA_WIDTH-1 downto 0); + xmem_dout : out unsigned (DMEM_DATA_WIDTH-1 downto 0); + xmem_addr : out unsigned (DMEM_ADDR_WIDTH-1 downto 0); + io_sel : out STD_LOGIC + ); +end cpu_embedded; + +architecture rtl of cpu_embedded is + + signal rom_data : unsigned (IMEM_DATA_WIDTH-1 downto 0); + signal rom_addr : unsigned (IMEM_ADDR_WIDTH-1 downto 0); + + COMPONENT cpu + Port ( + rst : in STD_LOGIC; + clk : in STD_LOGIC; + ce : in STD_LOGIC; + int_in : in STD_LOGIC; + int_ack : out STD_LOGIC; + xmem_we : out STD_LOGIC; + xmem_re : out STD_LOGIC; + instr_din : in unsigned (IMEM_DATA_WIDTH-1 downto 0); + instr_addr : out unsigned (IMEM_ADDR_WIDTH-1 downto 0); + xmem_din : in unsigned (DMEM_DATA_WIDTH-1 downto 0); + xmem_dout : out unsigned (DMEM_DATA_WIDTH-1 downto 0); + xmem_addr : out unsigned (DMEM_DATA_WIDTH-1 downto 0); + io_sel : out STD_LOGIC + ); + END COMPONENT; + + + COMPONENT irom + Port ( + clk : in STD_LOGIC; + ce : in STD_LOGIC; + addr : in inst_addr_t; + dout : out inst_t + ); + END COMPONENT; + +begin + +inst_cpu: cpu + PORT MAP( + rst => rst, + clk => clk, + ce => ce, + int_in => int_in, + int_ack => int_ack, + xmem_we => xmem_we, + xmem_re => xmem_re, + instr_din => rom_data, + instr_addr => rom_addr, + xmem_din => xmem_din, + xmem_dout => xmem_dout, + xmem_addr => xmem_addr, + io_sel => io_sel + ); + +inst_irom: irom + PORT MAP( + clk => clk, + ce => ce, + addr => rom_addr, + dout => rom_data + ); + +end rtl; diff --git a/projects/messe_demo/src/cpu_pkg.vhd b/projects/messe_demo/src/cpu_pkg.vhd new file mode 100644 index 0000000..0224726 --- /dev/null +++ b/projects/messe_demo/src/cpu_pkg.vhd @@ -0,0 +1,854 @@ +-------------------------------------------------------------------------- +-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL +-- This file: Types, constants and functions for JCPU +-- +-- Copyright (C) 2007 J. Ahrensfeld +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- For questions and ideas, please contact the author at jens@jayfield.org +-- +-------------------------------------------------------------------------- + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.numeric_std.ALL; + + +package cpu_pkg is + + -- Revision of the CPU + constant REVISION : integer := 2; + + -- Chipram depth (can be tweaked) + constant CHIPRAM_SIZE_BITS : integer := 10; + + -- Chipregister file depth + constant CHIPREG_SIZE_BITS : integer := 8; + + -- Number of registers (can be tweaked) + constant REG_SIZE_BITS : integer := 4; + + -- Instruction memory + constant IMEM_ADDR_WIDTH : integer := 12; + + -- Data memory + constant DMEM_DATA_WIDTH : integer := 8; + constant DMEM_ADDR_WIDTH : integer := 8; + + -- Instruction format + constant INST_OPCODE_WIDTH : integer := 6; + constant IMEM_DATA_WIDTH : integer := INST_OPCODE_WIDTH + DMEM_DATA_WIDTH + REG_SIZE_BITS; + + -- Microcode ROM + constant MUCODE_ADDR_WIDTH : integer := 9; + + -- Stack depth + constant STACK_SIZE_BITS : integer := CHIPRAM_SIZE_BITS-1; + + --Types + subtype iphase_t is integer range 0 to 1; + type mem_access_t is (cmem_access, xmem_access, cio_access, xio_access); + type reg_src_t is (alu_src, stk_src, cmem_src, xmem_src); + type alu_src_t is (reg_a, reg_b, const); + type ddata_src_t is (reg_a, reg_b, const); + type daddr_src_t is (reg_a, reg_b, const); + subtype instr_name_t is string(1 to 12); + type instr_name_array_t is array (0 to 63) of instr_name_t; + subtype opcode_t is unsigned (INST_OPCODE_WIDTH-1 downto 0); + subtype inst_data_t is unsigned (IMEM_ADDR_WIDTH-1 downto 0); + subtype inst_addr_t is unsigned (IMEM_ADDR_WIDTH-1 downto 0); + subtype inst_t is unsigned (IMEM_DATA_WIDTH-1 downto 0); + subtype dmem_data_t is unsigned (DMEM_DATA_WIDTH-1 downto 0); + subtype dmem_addr_t is unsigned (DMEM_DATA_WIDTH-1 downto 0); + subtype reg_ptr_t is unsigned (3 downto 0); + type dmem_array_t is array (natural range <>) of dmem_data_t; + type instr_addr_array is array (integer range <>) of inst_addr_t; + subtype page_sel_t is unsigned (CHIPRAM_SIZE_BITS-DMEM_DATA_WIDTH-2 downto 0); + + type alu_op_t is + ( + pass_op2, + op1_add_op2, + op1_sub_op2, + op1_addc_op2, + op1_subc_op2, + op1_and_op2, + op1_or_op2, + op1_xor_op2, + swap_op, + shl_op, + shr_op, + rol_op, + ror_op, + rolc_op, + rorc_op + ); + + type alu_status_t is record + zero : STD_LOGIC; + carry : STD_LOGIC; + end record; + + type cpu_status_t is record + alu : alu_status_t; + end record; + + type ctrl_lines_t is record + reg_we : STD_LOGIC; + reg_src_sel : reg_src_t; + alu_op1_src_sel : alu_src_t; + alu_op2_src_sel : alu_src_t; + alu_opsel : alu_op_t; + alu_load : STD_LOGIC; + ddata_src_sel : ddata_src_t; + daddr_src_sel : daddr_src_t; + pc_load : STD_LOGIC; + pc_inc : STD_LOGIC; + stk_push : STD_LOGIC; + stk_pop : STD_LOGIC; + stk_pushd : STD_LOGIC; + stk_popd : STD_LOGIC; + mem_access : mem_access_t; + mem_read : STD_LOGIC; + mem_write : STD_LOGIC; + int_exit : STD_LOGIC; + end record; + + type dpath_ctrl_out_t is record + lines : ctrl_lines_t; + reg_a_ptr : reg_ptr_t; + reg_b_ptr : reg_ptr_t; + end record; + + type int_ctrl_in_t is record + enable : std_logic; + polarity : std_logic; + edge_sens : std_logic; + request : std_logic; + end record; + + type creg_ctrl_out_t is record + page_sel : page_sel_t; + int_ctrl : int_ctrl_in_t; + stk_high : unsigned(IMEM_ADDR_WIDTH-DMEM_ADDR_WIDTH-1 downto 0); + cmem_high : unsigned(IMEM_ADDR_WIDTH-DMEM_ADDR_WIDTH-1 downto 0); + end record; + + type creg_ctrl_in_t is record + alu : alu_status_t; + end record; + + + type murom_t is array (0 to integer(2**MUCODE_ADDR_WIDTH)-1) of ctrl_lines_t; + + constant instr_name_array : instr_name_array_t := + ( + "NOP ", -- 00 + "HALT ", -- 01 + "MOV|R|R ", -- 02 + "MOV|R|K ", -- 03 + "MOVX|R|Ri ", -- 04 + "MOVX|R|Ki ", -- 05 + "MOVX|Ri|R ", -- 06 + "MOVX|Ri|K ", -- 07 + "MOVX|Ki|R ", -- 08 + "MOVC|R|Ri ", -- 09 + "MOVC|R|Ki ", -- 0A + "MOVC|Ri|R ", -- 0B + "MOVC|Ri|K ", -- 0C + "MOVC|Ki|R ", -- 0D + "CMP|R|R ", -- 0E + "CMP|R|K ", -- 0F + "ADD|R|R ", -- 10 + "ADD|R|K ", -- 11 + "ADDC|R|R ", -- 12 + "ADDC|R|K ", -- 13 + "SUB|R|R ", -- 14 + "SUB|R|K ", -- 15 + "SUBC|R|R ", -- 16 + "SUBC|R|K ", -- 17 + "AND|R|R ", -- 18 + "AND|R|K ", -- 19 + "OR|R|R ", -- 1A + "OR|R|K ", -- 1B + "XOR|R|R ", -- 1C + "XOR|R|K ", -- 1D + "SHL|R ", -- 1E + "SHR|R ", -- 1F + "ROL|R ", -- 20 + "ROR|R ", -- 21 + "ROLC|R ", -- 22 + "RORC|R ", -- 23 + "XOUT|Ki|R ", -- 24 + "XOUT|Ri|K ", -- 25 + "COUT|Ki|R ", -- 26 + "COUT|Ri|K ", -- 27 + "XIN|R|Ki ", -- 28 + "CIN|R|Ki ", -- 29 + "SWAP|R ", -- 2A + "UNDEF ", -- 2B + "UNDEF ", -- 2C + "UNDEF ", -- 2D + "SUB|K|R ", -- 2E + "SUBC|K|R ", -- 2F + "JMP|K ", -- 30 + "JZ|K ", -- 31 + "JNZ|K ", -- 32 + "JC|K ", -- 33 + "JNC|K ", -- 34 + "JLT|K ", -- 35 + "JGT|K ", -- 36 + "JLE|K ", -- 37 + "JGE|K ", -- 38 + "JEQ|K ", -- 39 + "JNE|K ", -- 3A + "CALL|K ", -- 3B + "PUSH|R ", -- 3C + "POP|R ", -- 3D + "RET ", -- 3E + "RETI " -- 3F + ); + -- Functions + function Instr(opcode : opcode_t) return inst_t; + function Instr(opcode : opcode_t; data : inst_data_t) return inst_t; + function Instr(opcode : opcode_t; data : inst_data_t; reg : integer) return inst_t; + function Instr(opcode : opcode_t; reg_a : integer) return inst_t; + function Instr(opcode : opcode_t; reg_a, reg_b : integer) return inst_t; + function Instr(opcode : opcode_t; reg_a, reg_b, reg_c : integer) return inst_t; + function ctrl_lines_default return ctrl_lines_t; + function idecoder(instr_name : instr_name_t; iphase : iphase_t; alu_status : alu_status_t) return ctrl_lines_t; + function idecoder(opcode : opcode_t; iphase : iphase_t; alu_status : alu_status_t) return ctrl_lines_t; + function gen_murom return murom_t; + function get_muromaddr (opcode : opcode_t; iphase : iphase_t; alu_status : alu_status_t) return unsigned; + function MIN (X, Y: INTEGER) return INTEGER; + function MAX (X, Y: INTEGER) return INTEGER; + +end cpu_pkg; + +package body cpu_pkg is + + function Instr(opcode : opcode_t) return inst_t is + variable inst : inst_t := (others => '0'); + begin + inst(inst_t'length-1 downto inst_t'length-opcode_t'length) := opcode; + return inst; + + end Instr; + + function Instr(opcode : opcode_t; data : inst_data_t) return inst_t is + variable inst : inst_t := (others => '0'); + begin + inst(inst_t'length-1 downto inst_t'length-opcode_t'length) := opcode; + inst(inst_t'length-opcode_t'length-1 downto inst_t'length-opcode_t'length-inst_addr_t'length) := data; + return inst; + + end Instr; + + function Instr(opcode : opcode_t; data : inst_data_t; reg : integer) return inst_t is + variable inst : inst_t := (others => '0'); + begin + inst(inst_t'length-1 downto inst_t'length-opcode_t'length) := opcode; + inst(inst_t'length-opcode_t'length-1 downto inst_t'length-opcode_t'length-inst_data_t'length) := data; + inst(reg_ptr_t'length-1 downto 0) := reg_ptr_t(to_unsigned(reg, reg_ptr_t'length)); + + return inst; + + end Instr; + + function Instr(opcode : opcode_t; reg_a : integer) return inst_t is + variable inst : inst_t := (others => '0'); + begin + inst(inst_t'length-1 downto inst_t'length-opcode_t'length) := opcode; + inst(reg_ptr_t'length-1 downto 0) := reg_ptr_t(to_unsigned(reg_a, reg_ptr_t'length)); + + return inst; + + end Instr; + + function Instr(opcode : opcode_t; reg_a, reg_b : integer) return inst_t is + variable inst : inst_t := (others => '0'); + begin + inst(inst_t'length-1 downto inst_t'length-opcode_t'length) := opcode; + inst(2*(reg_ptr_t'length)-1 downto reg_ptr_t'length) := reg_ptr_t(to_unsigned(reg_b, reg_ptr_t'length)); + inst(reg_ptr_t'length-1 downto 0) := reg_ptr_t(to_unsigned(reg_a, reg_ptr_t'length)); + + return inst; + + end Instr; + + function Instr(opcode : opcode_t; reg_a, reg_b, reg_c : integer) return inst_t is + variable inst : inst_t := (others => '0'); + begin + inst(inst_t'length-1 downto inst_t'length-opcode_t'length) := opcode; + inst(3*(reg_ptr_t'length)-1 downto 2*reg_ptr_t'length) := reg_ptr_t(to_unsigned(reg_c, reg_ptr_t'length)); + inst(2*(reg_ptr_t'length)-1 downto reg_ptr_t'length) := reg_ptr_t(to_unsigned(reg_b, reg_ptr_t'length)); + inst(reg_ptr_t'length-1 downto 0) := reg_ptr_t(to_unsigned(reg_a, reg_ptr_t'length)); + + return inst; + + end Instr; + + function ctrl_lines_default return ctrl_lines_t is + variable result : ctrl_lines_t; + begin + result.pc_load := '0'; + result.pc_inc := '0'; + result.stk_push := '0'; + result.stk_pop := '0'; + result.stk_pushd := '0'; + result.stk_popd := '0'; + result.reg_we := '0'; + result.reg_src_sel := alu_src; + result.ddata_src_sel := reg_a; + result.daddr_src_sel := reg_b; + result.alu_opsel := pass_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.alu_load := '0'; + result.mem_access := cmem_access; + result.mem_read := '0'; + result.mem_write := '0'; + result.int_exit := '0'; + return result; + + end ctrl_lines_default; + + function idecoder(opcode : opcode_t; iphase : iphase_t; alu_status : alu_status_t) return ctrl_lines_t is + variable instr_name : instr_name_t; + begin + instr_name := instr_name_array(to_integer(opcode)); + return idecoder(instr_name, iphase, alu_status); + end idecoder; + + function idecoder(instr_name : instr_name_t; iphase : iphase_t; alu_status : alu_status_t) return ctrl_lines_t is + variable result : ctrl_lines_t; + variable ze, cy : STD_LOGIC; + + begin + ze := alu_status.zero; + cy := alu_status.carry; + + result := ctrl_lines_default; + if iphase = 0 then + result.pc_inc := '1'; + end if; + + case instr_name is + + when "HALT " => + result.pc_inc := '0'; + when "MOV|R|R " => -- R(a) <= R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := pass_op2; + result.alu_op2_src_sel := reg_b; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "MOV|R|K " => -- R(a) <= #kk + result.reg_src_sel := alu_src; + result.alu_opsel := pass_op2; + result.alu_op2_src_sel := const; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "MOVC|Ri|R " => -- [R(b)] <= R(a) + result.mem_access := cmem_access; + result.daddr_src_sel := reg_b; + result.ddata_src_sel := reg_a; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "MOVC|Ri|K " => -- [R(a)] <= kk + result.mem_access := cmem_access; + result.daddr_src_sel := reg_a; + result.ddata_src_sel := const; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "COUT|Ri|K " => -- [R(a)] <= kk + result.mem_access := cio_access; + result.daddr_src_sel := reg_a; + result.ddata_src_sel := const; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "MOVC|R|Ri " => -- R(a) <= [R(b)] + result.mem_access := cmem_access; + result.reg_src_sel := cmem_src; + result.daddr_src_sel := reg_b; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "MOVC|R|Ki " => -- R(a) <= [#addr] + result.mem_access := cmem_access; + result.reg_src_sel := cmem_src; + result.daddr_src_sel := const; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "CIN|R|Ki " => -- R(a) <= [#addr] + result.mem_access := cio_access; + result.reg_src_sel := cmem_src; + result.daddr_src_sel := const; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "MOVC|Ki|R " => -- [#addr] <= R(a) + result.mem_access := cmem_access; + result.daddr_src_sel := const; + result.ddata_src_sel := reg_a; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "COUT|Ki|R " => -- [#addr] <= R(a) + result.mem_access := cio_access; + result.daddr_src_sel := const; + result.ddata_src_sel := reg_a; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "MOVX|Ri|R " => -- [R(b)] <= R(a) + result.mem_access := xmem_access; + result.daddr_src_sel := reg_b; + result.ddata_src_sel := reg_a; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "MOVX|Ri|K " => -- [R(a)] <= kk + result.mem_access := xmem_access; + result.daddr_src_sel := reg_a; + result.ddata_src_sel := const; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "XOUT|Ri|K " => -- [R(a)] <= kk + result.mem_access := xio_access; + result.daddr_src_sel := reg_a; + result.ddata_src_sel := const; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "MOVX|R|Ri " => -- R(a) <= [R(b)] + result.mem_access := xmem_access; + result.reg_src_sel := xmem_src; + result.daddr_src_sel := reg_b; + if iphase = 0 then + result.mem_read := '1'; + elsif iphase = 1 then + result.reg_we := '1'; + end if; + when "MOVX|R|Ki " => -- R(a) <= [#addr] + result.mem_access := xmem_access; + result.reg_src_sel := xmem_src; + result.daddr_src_sel := const; + if iphase = 0 then + result.mem_read := '1'; + elsif iphase = 1 then + result.reg_we := '1'; + end if; + when "XIN|R|Ki " => -- R(a) <= [#addr] + result.mem_access := xio_access; + result.reg_src_sel := xmem_src; + result.daddr_src_sel := const; + if iphase = 0 then + result.mem_read := '1'; + elsif iphase = 1 then + result.reg_we := '1'; + end if; + when "MOVX|Ki|R " => -- [#addr] <= R(a) + result.mem_access := xmem_access; + result.daddr_src_sel := const; + result.ddata_src_sel := reg_a; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "XOUT|Ki|R " => -- [#addr] <= R(a) + result.mem_access := xio_access; + result.daddr_src_sel := const; + result.ddata_src_sel := reg_a; + if iphase = 0 then + result.mem_write := '1'; + end if; + when "ADD|R|R " => -- R(a) <= R(a) + R(b) + result.alu_opsel := op1_add_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "ADD|R|K " => -- R(a) <= R(a) + k + result.alu_opsel := op1_add_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "ADDC|R|R " => -- R(a) <= R(a) + R(b) + result.alu_opsel := op1_addc_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "ADDC|R|K " => -- R(a) <= R(a) + k + result.alu_opsel := op1_addc_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SUB|R|R " => -- R(a) <= R(a) + R(b) + result.alu_opsel := op1_sub_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SUB|R|K " => -- R(a) <= R(a) + k + result.alu_opsel := op1_sub_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SUB|K|R " => -- R(a) <= k - R(a) + result.alu_opsel := op1_sub_op2; + result.alu_op1_src_sel := const; + result.alu_op2_src_sel := reg_a; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SUBC|R|R " => -- R(a) <= R(a) + R(b) + result.alu_opsel := op1_subc_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SUBC|R|K " => -- R(a) <= R(a) + k + result.alu_opsel := op1_subc_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SUBC|K|R " => -- R(a) <= K - R(a) + result.alu_opsel := op1_subc_op2; + result.alu_op1_src_sel := const; + result.alu_op2_src_sel := reg_a; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "AND|R|R " => -- R(a) <= R(a) and R(b) + result.alu_opsel := op1_and_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "AND|R|K " => -- R(a) <= R(a) and k + result.alu_opsel := op1_and_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "OR|R|R " => -- R(a) <= R(a) or R(b) + result.alu_opsel := op1_or_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "OR|R|K " => -- R(a) <= R(a) or R(b) + result.alu_opsel := op1_or_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "XOR|R|R " => -- R(a) <= R(a) xor R(b) + result.alu_opsel := op1_xor_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "XOR|R|K " => -- R(a) <= R(a) xor R(b) + result.alu_opsel := op1_xor_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.reg_src_sel := alu_src; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SWAP|R " => -- R(a) <= R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := swap_op; + result.alu_op1_src_sel := reg_a; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SHL|R " => -- R(a) <= R(a) xor R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := shl_op; + result.alu_op1_src_sel := reg_a; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "SHR|R " => -- R(a) <= R(a) xor R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := shr_op; + result.alu_op1_src_sel := reg_a; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "ROL|R " => -- R(a) <= R(a) xor R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := rol_op; + result.alu_op1_src_sel := reg_a; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "ROR|R " => -- R(a) <= R(a) xor R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := ror_op; + result.alu_op1_src_sel := reg_a; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "ROLC|R " => -- R(a) <= R(a) xor R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := rolc_op; + result.alu_op1_src_sel := reg_a; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "RORC|R " => -- R(a) <= R(a) xor R(b) + result.reg_src_sel := alu_src; + result.alu_opsel := rorc_op; + result.alu_op1_src_sel := reg_a; + result.alu_load := '1'; + if iphase = 1 then + result.reg_we := '1'; + end if; + when "CMP|R|R " => -- + result.alu_opsel := op1_sub_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := reg_b; + result.alu_load := '1'; + when "CMP|R|K " => -- + result.alu_opsel := op1_sub_op2; + result.alu_op1_src_sel := reg_a; + result.alu_op2_src_sel := const; + result.alu_load := '1'; + when "JMP|K " => -- PC <= #addr + if iphase = 0 then + result.pc_load := '1'; + end if; + when "JZ|K " => -- PC <= #addr, zero + if iphase = 0 then + if ze = '1' then + result.pc_load := '1'; + end if; + end if; + when "JNZ|K " => -- PC <= #addr, !zero + if iphase = 0 then + if ze = '0' then + result.pc_load := '1'; + end if; + end if; + when "JC|K " => -- PC <= #addr, carry + if iphase = 0 then + if cy = '1' then + result.pc_load := '1'; + end if; + end if; + when "JNC|K " => -- PC <= #addr, !carry + if iphase = 0 then + if cy = '0' then + result.pc_load := '1'; + end if; + end if; + when "JLT|K " => -- PC <= #addr, !carry + if iphase = 0 then + if cy = '1' then + result.pc_load := '1'; + end if; + end if; + when "JGT|K " => -- + if iphase = 0 then + if (cy or ze) = '0' then + result.pc_load := '1'; + end if; + end if; + when "JLE|K " => -- + if iphase = 0 then + if (cy xor ze) = '1' then + result.pc_load := '1'; + end if; + end if; + when "JGE|K " => -- + if iphase = 0 then + if (not cy or ze) = '1' then + result.pc_load := '1'; + end if; + end if; + when "JEQ|K " => -- + if iphase = 0 then + if ze = '1' then + result.pc_load := '1'; + end if; + end if; + when "JNE|K " => -- + if iphase = 0 then + if ze = '0' then + result.pc_load := '1'; + end if; + end if; + when "PUSH|R " => -- push + if iphase = 0 then + result.stk_pushd := '1'; + end if; + when "POP|R " => -- pop + result.reg_src_sel := stk_src; + if iphase = 0 then + result.stk_popd := '1'; + elsif iphase = 1 then + result.reg_we := '1'; + end if; + when "CALL|K " => -- call + if iphase = 0 then + result.pc_load := '1'; + result.stk_push := '1'; + end if; + when "RET " => -- return + if iphase = 0 then + result.pc_load := '1'; + result.stk_pop := '1'; + end if; + when "RETI " => -- return + result.pc_inc := '0'; + result.int_exit := '1'; + + when others => null; -- nop + end case; + + return result; + + end idecoder; + + function gen_murom return murom_t is + variable result : murom_t; + variable opcode : opcode_t; + variable iphase : iphase_t; + variable addr : unsigned(MUCODE_ADDR_WIDTH-1 downto 0); + variable alu_status : alu_status_t; + variable pos : integer := 0; + + begin + for i in 0 to 2**addr'length-1 loop + addr := to_unsigned(i, addr'length); + opcode := addr(opcode'length-1 downto 0); + pos := opcode'length; + iphase := 0; + if addr(pos) = '1' then + iphase := 1; + end if; + pos := pos + 1; + alu_status.zero := addr(pos); + pos := pos + 1; + alu_status.carry := addr(pos); + + result(i) := idecoder(opcode, iphase, alu_status); + end loop; + + return result; + end gen_murom; + + function get_muromaddr (opcode : opcode_t; iphase : iphase_t; alu_status : alu_status_t) return unsigned is + variable addr : unsigned(MUCODE_ADDR_WIDTH-1 downto 0); + begin + addr := alu_status.carry & alu_status.zero & to_unsigned(iphase, 1) & opcode; + return addr; + + end get_muromaddr; + + ------------------------------------------------------------- + function MIN (X, Y: INTEGER) return INTEGER is + variable res : integer := X; + begin + if Y < X then + res := Y; + end if; + + return res; + + end MIN; + + ------------------------------------------------------------- + function MAX (X, Y: INTEGER) return INTEGER is + variable res : integer := X; + begin + if Y > X then + res := Y; + end if; + + return res; + + end MAX; + + +end cpu_pkg; + diff --git a/projects/messe_demo/src/demo_top.vhd b/projects/messe_demo/src/demo_top.vhd new file mode 100644 index 0000000..9ddfc3c --- /dev/null +++ b/projects/messe_demo/src/demo_top.vhd @@ -0,0 +1,999 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 11:30:30 08/27/2006 +-- Design Name: +-- Module Name: ac97_test - Behavioral +-- Project Name: +-- Target Devices: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +use work.tech_iface.all; +use work.key_schedule_iface.all; +use work.engine_iface.all; + +use work.ecb_mode_iface.all; +use work.ecb_core_iface.all; + +use work.cbc_mode_iface.all; +use work.cbc_core_iface.all; + +use work.cpu_pkg.all; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +library UNISIM; +use UNISIM.VComponents.all; + +entity messe_demo is + Port ( + sys_rst_n_in : in std_logic; + sys_clk_in : in std_logic; + sys_btn : in std_logic_vector(4 downto 0); +-- sys_dip : in std_logic_vector(7 downto 0); + sys_led : out std_logic_vector(8 downto 0); + sys_rx : in std_logic; + sys_tx : out std_logic; + sys_lcd_d : inout std_logic_vector(3 downto 0); + sys_lcd_e : out std_logic; + sys_lcd_rs : out std_logic; + sys_lcd_rw : out std_logic; + ac97_bit_clk : in STD_LOGIC; + ac97_sdata_in : in STD_LOGIC; + ac97_reset_n : out STD_LOGIC; + ac97_sdata_out : out STD_LOGIC; + ac97_sync : out STD_LOGIC + ); +end messe_demo; + +architecture Behavioral of messe_demo is + + constant fa : REAL := 48.0E3; + + type stereo_t is (left, right); + type pcm_data_t is array (stereo_t) of signed(17 downto 0); + type stereo_bits_t is array (stereo_t) of std_logic; + type pcm_block_t is array (0 to 7) of unsigned(15 downto 0); + signal plain_block_in : pcm_block_t; + signal ecb_block_out : pcm_block_t; + signal cbc_block_out : pcm_block_t; + signal encrypt_audio : std_logic; + +------------------------------------------------------------------ + COMPONENT singleshot + GENERIC (mode : integer); + PORT( + rst : IN std_logic; + clk : IN std_logic; + input : IN std_logic; + output : OUT std_logic + ); + END COMPONENT; + + COMPONENT ac_io + Port ( + rst : in std_logic; + clk : in std_logic; + ready : out std_logic; + sync_strobe : out unsigned(0 to 2); + slot_valid : out unsigned(0 to 12); + stat_addr : out unsigned (19 downto 0); + stat_data : out unsigned (19 downto 0); + rx_pcm_addr : in unsigned (3 downto 0); + rx_pcm_data : out unsigned (19 downto 0); + cmd_addr : in unsigned(19 downto 0); + cmd_data : in unsigned(19 downto 0); + cmd_we : in std_logic; + tx_pcm_addr : in unsigned(3 downto 0); + tx_pcm_data : in unsigned(19 downto 0); + tx_pcm_we : in std_logic; + ac_sdata_in : in std_logic; + ac_bit_clk : in std_logic; + ac_reset_n : out std_logic; + ac_sdata_out : out std_logic; + ac_ssync : out std_logic + ); + END COMPONENT; + + SIGNAL sync_strobe : unsigned(0 to 2); + SIGNAL slot_valid : unsigned(0 to 12); + SIGNAL cmd_we : std_logic; + SIGNAL cmd_addr : unsigned(19 downto 0); + SIGNAL cmd_data : unsigned(19 downto 0); + SIGNAL stat_addr : unsigned(19 downto 0); + SIGNAL stat_data : unsigned(19 downto 0); + SIGNAL tx_pcm_addr : unsigned(3 downto 0); + SIGNAL tx_pcm_data : unsigned(19 downto 0); + SIGNAL rx_pcm_addr : unsigned(3 downto 0); + SIGNAL tx_pcm_we : std_logic; + SIGNAL rx_pcm_data : unsigned(19 downto 0); + + COMPONENT cpu_embedded + Port ( + rst : in STD_LOGIC; + clk : in STD_LOGIC; + ce : in STD_LOGIC; + int_in : in STD_LOGIC; + int_ack : out STD_LOGIC; + xmem_we : out STD_LOGIC; + xmem_re : out STD_LOGIC; + xmem_din : in unsigned (DMEM_DATA_WIDTH-1 downto 0); + xmem_dout : out unsigned (DMEM_DATA_WIDTH-1 downto 0); + xmem_addr : out unsigned (DMEM_ADDR_WIDTH-1 downto 0); + io_sel : out STD_LOGIC + ); + END COMPONENT; + + signal cpu_ce : std_logic; + signal cpu_int_in : std_logic; + signal cpu_int_ack : std_logic; + signal cpu_din : dmem_data_t; + signal cpu_dout : dmem_data_t; + signal cpu_addr : dmem_addr_t; + signal cpu_we : std_logic; + signal cpu_re : std_logic; + signal cpu_io_sel : std_logic; + + COMPONENT xrom + Port ( + clk : in STD_LOGIC; + ce : in STD_LOGIC; + addr : in dmem_addr_t; + dout : out dmem_data_t + ); + END COMPONENT; + signal xrom_data : dmem_data_t; + + COMPONENT lcd_port + PORT ( + rst : in std_logic; + clk : in std_logic; + we : in std_logic; + din : in unsigned(7 downto 0); + dout : out unsigned(7 downto 0); + lcd_d : inout std_logic_vector(3 downto 0); + lcd_e : out std_logic; + lcd_rs : out std_logic; + lcd_rw : out std_logic + ); + END COMPONENT; + + signal cpu_lcd_in_reg, cpu_lcd_out_reg : unsigned(DMEM_DATA_WIDTH-1 downto 0); + signal cpu_lcd_we : std_logic; + + ------------------------------------------------------------------ +-- X"1F400", -- W: DAC rate 8000Hz +-- X"AC440", -- W: DAC rate 44100Hz + ------------------------------------------------------------------ + + type state_t is (st_reset, st_pcm_in, st_pcm_in3, st_pcm_in4, st_pcm_out, st_pcm_out3, st_pcm_out4); + type enc_state_t is + ( + enc_init, + enc_keyload0, enc_keyload1, enc_keyload2, enc_keyload3, + enc_ivload0, enc_ivload1, enc_ivload2, enc_ivload3, + enc_wait_block, + enc_block_in0, enc_block_in1, enc_block_in2, enc_block_in3); + + signal ecb_state, ecb_state_next : enc_state_t; + signal cbc_state, cbc_state_next : enc_state_t; + + signal rst, clk : std_logic; + signal acio_ready : std_logic; + signal pcm_active : std_logic; + signal state, nextstate : state_t; + signal ac_reset_n : std_logic; + signal ac_rst : std_logic; + signal ac_ssync : std_logic; + signal pcm_request, pcm_request_set, pcm_request_ack : std_logic; + signal started_up : std_logic := '1'; + signal cpu_cmd_addr, cpu_cmd_data, cpu_stat_addr, cpu_stat_data : unsigned(15 downto 0); + signal cpu_pcmin_dc_adj_left, cpu_pcmin_dc_adj_right : unsigned(15 downto 0); + + + subtype low is unsigned(7 downto 0); + subtype high is unsigned(15 downto 8); + + signal pcm_in_data : pcm_data_t; + signal pcm_out_data : pcm_data_t; + + signal pcm_in_data_we, pcm_in_valid : stereo_bits_t; + + type pcmout_mode_t is (PCMOUT_PASSTHROUGH, PCMOUT_CIPHER_ECB, PCMOUT_CIPHER_CBC); + signal pcmout_mode : pcmout_mode_t; + signal cpu_cmd_access, cpu_cmd_ready, cpu_stat_ready : std_logic; + signal cpu_led_reg, cpu_btn_reg, cpu_dip_reg, cpu_pcmmode_reg : unsigned(DMEM_DATA_WIDTH-1 downto 0); + signal cpu_cmd_we : std_logic; + + ------------------------------------------------------------------ + constant KEY_ID1 : key_id_t := std_logic_vector(to_unsigned(0, key_id_t'length)); + + signal ecb_mode_i : ecb_mode_encryption_in_type; -- see package ecb_mode_iface + signal ecb_mode_o : ecb_mode_encryption_out_type; -- see package ecb_mode_iface + signal ecb_key_i : key_schedule_128_in_type; -- see package key_schedule_iface + signal ecb_key_o : key_schedule_128_out_type; -- see package key_schedule_iface + signal ecb_sbld_i : sbox_stage_load_in_type; -- see package tech_iface + signal ecb_cipher_pcm : unsigned(17 downto 0); + + signal cbc_mode_i : cbc_mode_encryption_in_type; -- see package cbc_mode_iface + signal cbc_mode_o : cbc_mode_encryption_out_type; -- see package cbc_mode_iface + signal cbc_key_i : key_schedule_128_in_type; -- see package key_schedule_iface + signal cbc_key_o : key_schedule_128_out_type; -- see package key_schedule_iface + signal cbc_sbld_i : sbox_stage_load_in_type; -- see package tech_iface + signal cbc_cipher_pcm : unsigned(17 downto 0); + + signal plain_block_in_rdy : std_logic; + signal encryption_constant_plain : unsigned(15 downto 0); + + ------------------------------------------------------------------ + function GetRequest(slot1 : unsigned) return unsigned is + variable res : unsigned(3 to 12); + begin + res := (others => '0'); + for i in res'range loop + res(i) := not slot1(14-i); + end loop; + return res; + + end GetRequest; + +begin + + ------------------------------------------------------------------ + cmd_data <= (cpu_cmd_data & "0000"); + cmd_addr <= (cpu_cmd_addr & "0000"); + + ac_rst <= not ac_reset_n; + ac97_reset_n <= ac_reset_n; + ac97_sync <= ac_ssync; + + sys_tx <= sys_rx; + + cpu_ce <= '1'; + clk <= sys_clk_in; + rst <= not (started_up and sys_rst_n_in); +-- rst <= not (sys_rst_n_in); + + cpu_int_in <= sync_strobe(0); + + ------------------------------------------------------------------ + proc_led_btn: + process (rst, clk) + begin + if rising_edge(clk) then + cpu_btn_reg <= "000" & unsigned(sys_btn); +-- cpu_dip_reg <= unsigned(sys_dip); + cpu_dip_reg <= (others => '0'); -- for FX12 (ML-403) + if rst = '1' then + sys_led <= (others => '0'); + else + sys_led(7 downto 0) <= STD_LOGIC_VECTOR(cpu_led_reg); + end if; + end if; + end process; + + ------------------------------------------------------------------ + ecb_fsm: process(ecb_state, plain_block_in_rdy, ecb_mode_i, ecb_key_i, plain_block_in) + begin + ecb_state_next <= ecb_state; + + ecb_mode_i.start <= '0'; + ecb_mode_i.plain <= (others => '0'); + ecb_mode_i.key_id <= KEY_ID1; + ecb_key_i.load_key <= '0'; + ecb_key_i.key_id <= KEY_ID1; + ecb_key_i.key <= (others => '0'); + + ecb_sbld_i.act <= '0'; + ecb_sbld_i.wen <= '0'; + + case ecb_state is + when enc_init => + if ecb_key_o.busy = '0' then + ecb_state_next <= enc_keyload0; + end if; + + when enc_keyload0 => + ecb_key_i.load_key <= '1'; + ecb_key_i.key <= X"2b7e1516"; + ecb_state_next <= enc_keyload1; + when enc_keyload1 => + ecb_key_i.key <= X"28aed2a6"; + ecb_state_next <= enc_keyload2; + when enc_keyload2 => + ecb_key_i.key <= X"abf71588"; + ecb_state_next <= enc_keyload3; + when enc_keyload3 => + ecb_key_i.key <= X"09cf4f3c"; + if ecb_key_o.busy = '0' then + ecb_state_next <= enc_wait_block; + end if; + + when enc_wait_block => + if plain_block_in_rdy = '1' then + ecb_state_next <= enc_block_in0; + end if; + + when enc_block_in0 => + ecb_mode_i.start <= '1'; + ecb_mode_i.plain <= std_logic_vector(plain_block_in(1)) & std_logic_vector(plain_block_in(0)); + ecb_state_next <= enc_block_in1; + when enc_block_in1 => + ecb_mode_i.plain <= std_logic_vector(plain_block_in(3)) & std_logic_vector(plain_block_in(2)); + ecb_state_next <= enc_block_in2; + when enc_block_in2 => + ecb_mode_i.plain <= std_logic_vector(plain_block_in(5)) & std_logic_vector(plain_block_in(4)); + ecb_state_next <= enc_block_in3; + when enc_block_in3 => + ecb_mode_i.plain <= std_logic_vector(plain_block_in(7)) & std_logic_vector(plain_block_in(6)); + if ecb_mode_o.busy = '0' then + ecb_state_next <= enc_wait_block; + end if; + + when others => + ecb_state_next <= enc_init; + + end case; + end process; + + proc_ecb_fsm_next: + process (rst, clk) + begin + if rst = '1' then + ecb_state <= enc_init; + elsif rising_edge(clk) then + ecb_state <= ecb_state_next; + end if; + end process; + + ------------------------------------------------------------------ + cbc_fsm: process(cbc_state, plain_block_in_rdy, cbc_mode_i, cbc_key_i, plain_block_in) + begin + cbc_state_next <= cbc_state; + + cbc_mode_i.start <= '0'; + cbc_mode_i.din <= (others => '0'); + cbc_mode_i.key_id <= KEY_ID1; + cbc_mode_i.load_iv <= '0'; + + cbc_key_i.key <= (others => '0'); + cbc_key_i.key_id <= KEY_ID1; + cbc_key_i.load_key <= '0'; + + cbc_sbld_i.act <= '0'; + cbc_sbld_i.wen <= '0'; + + case cbc_state is + when enc_init => + if cbc_key_o.busy = '0' then + cbc_state_next <= enc_keyload0; + end if; + + when enc_keyload0 => + cbc_key_i.load_key <= '1'; + cbc_key_i.key <= X"2b7e1516"; + cbc_state_next <= enc_keyload1; + when enc_keyload1 => + cbc_key_i.key <= X"28aed2a6"; + cbc_state_next <= enc_keyload2; + when enc_keyload2 => + cbc_key_i.key <= X"abf71588"; + cbc_state_next <= enc_keyload3; + when enc_keyload3 => + cbc_key_i.key <= X"09cf4f3c"; + if cbc_key_o.busy = '0' then + cbc_state_next <= enc_ivload0; + end if; + + when enc_ivload0 => + cbc_mode_i.load_iv <= '1'; + cbc_mode_i.din <= X"00010203"; + cbc_state_next <= enc_ivload1; + when enc_ivload1 => + cbc_mode_i.din <= X"04050607"; + cbc_state_next <= enc_ivload2; + when enc_ivload2 => + cbc_mode_i.din <= X"08090a0b"; + cbc_state_next <= enc_ivload3; + when enc_ivload3 => + cbc_mode_i.din <= X"0c0d0e0f"; + if cbc_mode_o.busy = '0' then + cbc_state_next <= enc_wait_block; + end if; + + when enc_wait_block => + if plain_block_in_rdy = '1' then + cbc_state_next <= enc_block_in0; + end if; + + when enc_block_in0 => + cbc_mode_i.start <= '1'; + cbc_mode_i.din <= std_logic_vector(plain_block_in(1)) & std_logic_vector(plain_block_in(0)); + cbc_state_next <= enc_block_in1; + when enc_block_in1 => + cbc_mode_i.din <= std_logic_vector(plain_block_in(3)) & std_logic_vector(plain_block_in(2)); + cbc_state_next <= enc_block_in2; + when enc_block_in2 => + cbc_mode_i.din <= std_logic_vector(plain_block_in(5)) & std_logic_vector(plain_block_in(4)); + cbc_state_next <= enc_block_in3; + when enc_block_in3 => + cbc_mode_i.din <= std_logic_vector(plain_block_in(7)) & std_logic_vector(plain_block_in(6)); + if cbc_mode_o.busy = '0' then + cbc_state_next <= enc_wait_block; + end if; + + when others => + cbc_state_next <= enc_wait_block; + + end case; + end process; + + proc_cbc_fsm_next: + process (rst, clk) + begin + if rst = '1' then + cbc_state <= enc_init; + elsif rising_edge(clk) then + cbc_state <= cbc_state_next; + end if; + end process; + + ------------------------------------------------------------------ + proc_plain_block_in: + process (rst, clk) + variable index : natural range 0 to 15; + variable dc_adj : unsigned(15 downto 0); + + begin + dc_adj := unsigned(resize(signed(cpu_pcmin_dc_adj_left), dc_adj'length)); + if rst = '1' then + index := 0; + elsif rising_edge(clk) then + plain_block_in_rdy <= '0'; + if pcm_in_data_we(left) = '1' then + if encrypt_audio = '1' then + plain_block_in(index) <= (rx_pcm_data(19 downto 4) and X"F000"); + else + plain_block_in(index) <= encryption_constant_plain; + end if; + if index < 7 then + index := index + 1; + else + index := 0; + plain_block_in_rdy <= '1'; + end if; + end if; + end if; + end process; + + ------------------------------------------------------------------ + proc_ecb_block_out: + process (rst, clk) + variable index : natural range 0 to 7; + variable write_index : natural range 0 to 7; + variable cipher : unsigned(31 downto 0); + begin + if rst = '1' then + index := 0; + write_index := 0; + elsif rising_edge(clk) then + if ecb_mode_o.valid = '1' then + cipher := unsigned(ecb_mode_o.cipher); + ecb_block_out(write_index+0) <= cipher(15 downto 0); + ecb_block_out(write_index+1) <= cipher(31 downto 16); + if write_index < 6 then + write_index := write_index + 2; + else + index := 0; + write_index := 0; + end if; + end if; + if pcm_request = '1' and sync_strobe(2) = '1' then + if index < 7 then + index := index + 1; + else + index := 0; + end if; + end if; + end if; + ecb_cipher_pcm <= "00" & ecb_block_out(index); + end process; + + ------------------------------------------------------------------ + proc_cbc_block_out: + process (rst, clk) + variable index : natural range 0 to 7; + variable write_index : natural range 0 to 7; + variable cipher : unsigned(31 downto 0); + variable cipher_rdy : std_logic; + begin + if rst = '1' then + index := 0; + write_index := 0; + cipher_rdy := '0'; + elsif rising_edge(clk) then + if cbc_mode_o.valid = '1' then + cipher := unsigned(cbc_mode_o.dout); + cbc_block_out(write_index+0) <= cipher(15 downto 0); + cbc_block_out(write_index+1) <= cipher(31 downto 16); + if write_index < 6 then + write_index := write_index + 2; + else + index := 0; + write_index := 0; + end if; + end if; + if pcm_request = '1' and sync_strobe(2) = '1' then + if index < 7 then + index := index + 1; + else + index := 0; + end if; + end if; + end if; + cbc_cipher_pcm <= "00" & cbc_block_out(index); + end process; + + ------------------------------------------------------------------ + host_din : process (acio_ready, sync_strobe, slot_valid, stat_addr, state, pcm_request, pcm_out_data) + variable request : unsigned(3 to 12); + variable rx_frame_valid : std_logic; + variable sync_frame, sync_status, sync_tx : std_logic; + + begin + request := GetRequest(stat_addr); + rx_frame_valid := slot_valid(0); + sync_frame := sync_strobe(0); + sync_status := sync_strobe(1); + sync_tx := sync_strobe(2); + + tx_pcm_we <= '0'; + tx_pcm_addr <= to_unsigned(3, tx_pcm_addr'length); + tx_pcm_data <= to_unsigned(0, tx_pcm_data'length); + + rx_pcm_addr <= to_unsigned(3, rx_pcm_addr'length); + + nextstate <= state; + pcm_active <= '0'; + pcm_request_set <= '0'; + pcm_request_ack <= '0'; + pcm_in_data_we <= (others => '0'); + + case state is + + when st_reset => + if rx_frame_valid = '1' and sync_status = '1' and acio_ready = '1' then + nextstate <= st_pcm_in; + end if; + + when st_pcm_in => + if rx_frame_valid = '1' and sync_frame = '1' then + nextstate <= st_pcm_in3; + end if; + + when st_pcm_in3 => + nextstate <= st_pcm_in4; + rx_pcm_addr <= to_unsigned(3, rx_pcm_addr'length); + if slot_valid(3) = '1' then + pcm_in_data_we(left) <= '1'; + end if; + + when st_pcm_in4 => + nextstate <= st_pcm_out; + rx_pcm_addr <= to_unsigned(4, rx_pcm_addr'length); + if slot_valid(4) = '1' then + pcm_in_data_we(right) <= '1'; + end if; + + when st_pcm_out => + pcm_active <= '1'; + if rx_frame_valid = '1' and sync_status = '1' then + if request(3) = '1' and request(4) = '1' then + pcm_request_set <= '1'; + end if; + end if; + if pcm_request = '1' and sync_tx = '1' then + nextstate <= st_pcm_out3; + end if; + + when st_pcm_out3 => + tx_pcm_data <= unsigned(pcm_out_data(left)) & "00"; + pcm_active <= '1'; + tx_pcm_addr <= to_unsigned(3, tx_pcm_addr'length); + tx_pcm_we <= '1'; + pcm_request_ack <= '1'; + nextstate <= st_pcm_out4; + + when st_pcm_out4 => + tx_pcm_data <= unsigned(pcm_out_data(right)) & "00"; + pcm_active <= '1'; + tx_pcm_addr <= to_unsigned(4, tx_pcm_addr'length); + tx_pcm_we <= '1'; + nextstate <= st_pcm_in; + + when others => + nextstate <= st_reset; + + end case; + + end process; + + proc_fsm_next: + process (rst, clk) + begin + if rst = '1' then + state <= st_reset; + elsif rising_edge(clk) then + state <= nextstate; + end if; + end process; + + ------------------------------------------------------------- + -- proc_pcm_in (stereo - for bypass) + ------------------------------------------------------------- + proc_pcm_in: + process (rst, clk, pcm_in_data_we, rx_pcm_data) + variable dc_adj : pcm_data_t; + begin + dc_adj(left) := resize(signed(cpu_pcmin_dc_adj_left), dc_adj(left)'length); + dc_adj(right) := resize(signed(cpu_pcmin_dc_adj_right), dc_adj(right)'length); + + if rst = '1' then + for i in pcm_in_data'range loop + dc_adj(i) := (others => '0'); + pcm_in_data(i) <= (others => '0'); + pcm_in_valid(i) <= '0'; + end loop; + elsif rising_edge(clk) then + for i in pcm_in_data'range loop + pcm_in_valid(i) <= '0'; + end loop; + for i in pcm_in_data'range loop + if pcm_in_data_we(i) = '1' then + pcm_in_valid(i) <= '1'; + pcm_in_data(i) <= dc_adj(i) + signed(rx_pcm_data(19 downto 2)); + end if; + end loop; + end if; + end process; + + ------------------------------------------------------------- + -- proc_pcmout_mode_mapper + ------------------------------------------------------------- + proc_pcmout_mode_mapper: + process (cpu_pcmmode_reg) + begin + case cpu_pcmmode_reg is + when X"00" => + pcmout_mode <= PCMOUT_PASSTHROUGH; + when X"01" => + pcmout_mode <= PCMOUT_CIPHER_ECB; + when X"02" => + pcmout_mode <= PCMOUT_CIPHER_CBC; + when others => + pcmout_mode <= PCMOUT_PASSTHROUGH; + end case; + end process; + + ------------------------------------------------------------- + -- proc_pcm_out_mux + ------------------------------------------------------------- + proc_pcm_out_mux: + process (clk) + begin + if rising_edge(clk) then + if pcm_request = '1' and sync_strobe(2) = '1' then + case pcmout_mode is + when PCMOUT_PASSTHROUGH => + pcm_out_data(left to right) <= pcm_in_data(left to right); + when PCMOUT_CIPHER_ECB => + pcm_out_data(left) <= signed(ecb_cipher_pcm); + pcm_out_data(right) <= signed(ecb_cipher_pcm); + when PCMOUT_CIPHER_CBC => + pcm_out_data(left) <= signed(cbc_cipher_pcm); + pcm_out_data(right) <= signed(cbc_cipher_pcm); + when others => + pcm_out_data(left to right) <= pcm_in_data(left to right); + end case; + end if; + end if; + end process; + + ------------------------------------------------------------- + -- proc_cpu_flags + ------------------------------------------------------------- + proc_cpu_stat_reg_control: + process (clk, sync_strobe, slot_valid) + variable rx_frame_valid : std_logic; + variable sync_frame, sync_status, sync_tx : std_logic; + begin + rx_frame_valid := slot_valid(0); + sync_frame := sync_strobe(0); + sync_status := sync_strobe(1); + sync_tx := sync_strobe(2); + + if rising_edge(clk) then + if rst = '1' then + cpu_cmd_ready <= '0'; + cpu_stat_ready <= '0'; + cpu_stat_addr <= (others => '0'); + cpu_stat_data <= (others => '0'); + else + cpu_cmd_we <= '0'; + if cpu_cmd_access = '1' then + cpu_cmd_ready <= '0'; + cpu_stat_ready <= '0'; + end if; + + if cpu_cmd_ready = '0' then + if sync_tx = '1' then + cpu_cmd_we <= '1'; + cpu_cmd_ready <= '1'; + end if; + end if; + + if sync_status = '1' and slot_valid(0 to 2) = "111" then + cpu_stat_ready <= '1'; + cpu_stat_addr <= stat_addr(19 downto 4); + cpu_stat_data <= stat_data(19 downto 4); + end if; + end if; + end if; + + end process; + + ------------------------------------------------------------- + -- proc_cpu_dout_reg + ------------------------------------------------------------- + proc_cpu_dout_reg: + process (clk) + variable addr : dmem_addr_t; + begin + if rising_edge(clk) then + if rst = '1' then + cpu_led_reg <= (others => '0'); + cpu_pcmmode_reg <= (others => '0'); + encrypt_audio <= '1'; + cpu_cmd_addr <= (others => '0'); + cpu_cmd_data <= (others => '0'); + cpu_lcd_out_reg <= (others => '0'); + cpu_pcmin_dc_adj_left <= (others => '0'); + cpu_pcmin_dc_adj_right <= (others => '0'); + encryption_constant_plain <= (others => '0'); + else + addr := cpu_addr; + cpu_cmd_access <= '0'; + cpu_lcd_we <= '0'; + if cpu_we = '1' and cpu_io_sel = '1' then + case addr is + when X"00" => + cpu_led_reg <= cpu_dout; + when X"01" => + cpu_pcmmode_reg <= cpu_dout; + when X"02" => + encrypt_audio <= cpu_dout(0); + when X"04" => + cpu_cmd_addr(low'range) <= cpu_dout; + when X"05" => + cpu_cmd_addr(high'range) <= cpu_dout; + when X"06" => + cpu_cmd_access <= '1'; + cpu_cmd_data(low'range) <= cpu_dout; + when X"07" => + cpu_cmd_data(high'range) <= cpu_dout; + when X"08" => + cpu_lcd_we <= '1'; + cpu_lcd_out_reg <= cpu_dout; + when X"0D" => + cpu_pcmin_dc_adj_left(low'range) <= cpu_dout; + when X"0E" => + cpu_pcmin_dc_adj_left(high'range) <= cpu_dout; + when X"0F" => + cpu_pcmin_dc_adj_right(low'range) <= cpu_dout; + when X"10" => + cpu_pcmin_dc_adj_right(high'range) <= cpu_dout; + when X"11" => + encryption_constant_plain(7 downto 0) <= cpu_dout; + when X"12" => + encryption_constant_plain(15 downto 8) <= cpu_dout; + when others => null; + end case; + end if; + end if; + end if; + end process; + + ------------------------------------------------------------- + -- proc_cpu_din_reg + ------------------------------------------------------------- + proc_cpu_din_reg: + process (clk, cpu_io_sel, xrom_data) + variable addr : dmem_addr_t; + begin + + if rising_edge(clk) then + addr := cpu_addr; + end if; + + if cpu_io_sel = '0' then + cpu_din <= xrom_data; + else + case addr is + when X"00" => + cpu_din <= cpu_led_reg; + when X"01" => + cpu_din <= cpu_pcmmode_reg; + when X"02" => + cpu_din <= "0000000" & encrypt_audio; + when X"04" => + cpu_din <= cpu_stat_addr(low'range); + when X"05" => + cpu_din <= cpu_stat_addr(high'range); + when X"06" => + cpu_din <= cpu_stat_data(low'range); + when X"07" => + cpu_din <= cpu_stat_data(high'range); + when X"08" => + cpu_din <= cpu_lcd_in_reg; + when X"0D" => + cpu_din <= cpu_pcmin_dc_adj_left(low'range); + when X"0E" => + cpu_din <= cpu_pcmin_dc_adj_left(high'range); + when X"0F" => + cpu_din <= cpu_pcmin_dc_adj_right(low'range); + when X"10" => + cpu_din <= cpu_pcmin_dc_adj_right(high'range); + when X"11" => + cpu_din <= encryption_constant_plain(7 downto 0); + when X"12" => + cpu_din <= encryption_constant_plain(15 downto 8); + when X"80" => + cpu_din <= cpu_btn_reg; + when X"81" => + cpu_din <= cpu_dip_reg; + when X"82" => + cpu_din <= dmem_data_t(pcm_in_data(left)(low'range)); + when X"83" => + cpu_din <= dmem_data_t(pcm_in_data(left)(high'range)); + when X"84" => + cpu_din <= dmem_data_t(pcm_in_data(right)(low'range)); + when X"85" => + cpu_din <= dmem_data_t(pcm_in_data(right)(high'range)); + when X"A0" => + cpu_din <= "0000" & ecb_mode_o.busy & cpu_stat_ready & cpu_cmd_ready & (pcm_active and acio_ready and slot_valid(0)); + when others => + if addr(0) = '0' then + cpu_din <= X"EF"; + else + cpu_din <= X"BE"; + end if; + end case; + end if; + + end process; + ------------------------------------------------------------- + proc_pcm_request: + process (clk, pcm_request_set, pcm_request_ack) + begin + if rising_edge(clk) then + if pcm_request_ack = '1' or rst = '1' then + pcm_request <= '0'; + elsif pcm_request_set = '1' then + pcm_request <= '1'; + end if; + end if; + end process; + + ------------------------------------------------------------------ + -- Instantiate the Unit Under Test (UUT) + inst_ac_io: ac_io PORT MAP( + rst => rst, + clk => clk, + ready => acio_ready, + sync_strobe => sync_strobe, + slot_valid => slot_valid, + stat_addr => stat_addr, + stat_data => stat_data, + rx_pcm_addr => rx_pcm_addr, + rx_pcm_data => rx_pcm_data, + cmd_addr => cmd_addr, + cmd_data => cmd_data, + cmd_we => cpu_cmd_we, + tx_pcm_addr => tx_pcm_addr, + tx_pcm_data => tx_pcm_data, + tx_pcm_we => tx_pcm_we, + ac_sdata_in => ac97_sdata_in, + ac_bit_clk => ac97_bit_clk, + ac_reset_n => ac_reset_n, + ac_sdata_out => ac97_sdata_out, + ac_ssync => ac_ssync + ); + + inst_cpu_embedded: cpu_embedded + PORT MAP( + rst => rst, + clk => clk, + ce => cpu_ce, + int_in => cpu_int_in, + int_ack => cpu_int_ack, + xmem_we => cpu_we, + xmem_re => cpu_re, + xmem_din => cpu_din, + xmem_dout => cpu_dout, + xmem_addr => cpu_addr, + io_sel => cpu_io_sel + ); + + inst_xrom: xrom + PORT MAP( + clk => clk, + ce => cpu_ce, + addr => cpu_addr, + dout => xrom_data + ); + + inst_lcd_port: lcd_port + PORT MAP( + rst => rst, + clk => clk, + we => cpu_lcd_we, + din => cpu_lcd_out_reg, + dout => cpu_lcd_in_reg, + lcd_d => sys_lcd_d, + lcd_e => sys_lcd_e, + lcd_rs => sys_lcd_rs, + lcd_rw => sys_lcd_rw + ); + + inst_ecb_128_encryption_core: ecb_128_encryption_core + port map ( + rst => rst, + clk => clk, + mode_i => ecb_mode_i, + mode_o => ecb_mode_o, + key_i => ecb_key_i, + key_o => ecb_key_o, + sbld_i => ecb_sbld_i + ); + + inst_cbc_128_encryption_core: cbc_128_encryption_core + port map ( + rst => rst, + clk => clk, + mode_i => cbc_mode_i, + mode_o => cbc_mode_o, + key_i => cbc_key_i, + key_o => cbc_key_o, + sbld_i => cbc_sbld_i + ); + + ------------------------------------------------------------------ + STARTUP_VIRTEX4_inst : STARTUP_VIRTEX4 + port map ( + EOS => started_up, -- End of Startup 1-bit output + CLK => open, -- Clock input for start-up sequence + GSR => '0', -- Global Set/Reset input (GSR cannot be used for the port name) + GTS => '0', -- Global 3-state input (GTS cannot be used for the port name) + USRCCLKO => '0', -- USRCCLKO 1-bit input + USRCCLKTS => '0', -- USRCCLKTS 1-bit input + USRDONEO => '0', -- USRDONEO 1-bit input + USRDONETS => '0' -- USRDONETS 1-bit input + ); + + ------------------------------------------------------------------ + +end Behavioral; + diff --git a/projects/messe_demo/src/lcd_port.vhd b/projects/messe_demo/src/lcd_port.vhd new file mode 100644 index 0000000..44dd8bf --- /dev/null +++ b/projects/messe_demo/src/lcd_port.vhd @@ -0,0 +1,66 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + + ------------------------------------------------------------------ +entity lcd_port is + Port ( + rst : in std_logic; + clk : in std_logic; + we : in std_logic; + din : in unsigned(7 downto 0); + dout : out unsigned(7 downto 0); + lcd_d : inout unsigned(3 downto 0); + lcd_e : out std_logic; + lcd_rs : out std_logic; + lcd_rw : out std_logic + ); + end lcd_port; + +architecture Behavioral of lcd_port is + + constant clcd_e : integer := 7; + constant clcd_rs : integer := 6; + constant clcd_rw : integer := 5; + + type lcd_t is record + d : unsigned(3 downto 0); + e : std_logic; + rs : std_logic; + rw : std_logic; + end record; + + ------------------------------------------------------------------ + begin + + proc_lcd_port: + process(rst, clk) + variable vlcd : lcd_t; + begin + if (rst = '1') then + dout <= (others => '0'); + vlcd.d := (others => '0'); + vlcd.e := '0'; + vlcd.rw := '1'; + vlcd.rs := '0'; + elsif rising_edge(clk) then + dout <= unsigned("0000" & lcd_d); + if we = '1' then + vlcd.d := din(3 downto 0); + vlcd.e := din(clcd_e); + vlcd.rs := din(clcd_rs); + vlcd.rw := din(clcd_rw); + end if; + end if; + if vlcd.rw = '0' then + lcd_d <= unsigned(vlcd.d); + else + lcd_d <= (others => 'Z'); + end if; + lcd_e <= vlcd.e; + lcd_rs <= vlcd.rs; + lcd_rw <= vlcd.rw; + end process; + ------------------------------------------------------------------ + +end Behavioral; diff --git a/projects/messe_demo/src/test_irom.vhdl b/projects/messe_demo/src/test_irom.vhdl new file mode 100644 index 0000000..2f7fe22 --- /dev/null +++ b/projects/messe_demo/src/test_irom.vhdl @@ -0,0 +1,562 @@ +------------------------------------------------------------------------- +-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL +-- This file: The ROM file for use in your VHDL design +-- +-- Copyright (C) 2007 J. Ahrensfeld +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- For questions and ideas, please contact the author at jens@jayfield.org +-- +-------------------------------------------------------------------------- + +LIBRARY ieee; +use IEEE.STD_LOGIC_1164.ALL; +USE ieee.numeric_std.ALL; + +library work; +use work.cpu_pkg.all; + +-- JASM_ROM_INSERT_HERE +ENTITY irom IS + Port ( + clk : in STD_LOGIC; + ce : in STD_LOGIC; + addr : in inst_addr_t; + dout : out inst_t + ); +END irom; + +ARCHITECTURE test OF irom IS + + type imem_rom_t is array (0 to 500) of inst_t; + + -- Assembled from test.jsm + constant imem_rom : imem_rom_t := + ( + "110000" & X"002", -- 0x000: JMP 0x002 + "110000" & X"0EA", -- 0x001: JMP 0x0EA + "000011" & X"000", -- 0x002: MOV R00, 0x00 + "000011" & X"021", -- 0x003: MOV R01, 0x02 + "001101" & X"040", -- 0x004: MOVC (0x04), R00 + "001101" & X"051", -- 0x005: MOVC (0x05), R01 + "000011" & X"000", -- 0x006: MOV R00, 0x00 + "100100" & X"000", -- 0x007: XOUT (0x00), R00 + "000011" & X"FF0", -- 0x008: MOV R00, 0xFF + "100100" & X"110", -- 0x009: XOUT (0x11), R00 + "000011" & X"3B0", -- 0x00A: MOV R00, 0x3B + "100100" & X"120", -- 0x00B: XOUT (0x12), R00 + "000011" & X"9C0", -- 0x00C: MOV R00, 0x9C + "100100" & X"130", -- 0x00D: XOUT (0x13), R00 + "000011" & X"010", -- 0x00E: MOV R00, 0x01 + "100100" & X"140", -- 0x00F: XOUT (0x14), R00 + "000011" & X"000", -- 0x010: MOV R00, 0x00 + "001101" & X"080", -- 0x011: MOVC (0x08), R00 + "001101" & X"090", -- 0x012: MOVC (0x09), R00 + "000011" & X"000", -- 0x013: MOV R00, 0x00 + "001101" & X"060", -- 0x014: MOVC (0x06), R00 + "000011" & X"040", -- 0x015: MOV R00, 0x04 + "001101" & X"070", -- 0x016: MOVC (0x07), R00 + "000011" & X"0A0", -- 0x017: MOV R00, 0x0A + "001101" & X"0A0", -- 0x018: MOVC (0x0A), R00 + "000011" & X"0C0", -- 0x019: MOV R00, 0x0C + "001101" & X"0B0", -- 0x01A: MOVC (0x0B), R00 + "111011" & X"177", -- 0x01B: CALL 0x177 + "000011" & X"010", -- 0x01C: MOV R00, 0x01 + "111011" & X"194", -- 0x01D: CALL 0x194 + "000011" & X"001", -- 0x01E: MOV R01, 0x00 + "111011" & X"199", -- 0x01F: CALL 0x199 + "000011" & X"C00", -- 0x020: MOV R00, 0xC0 + "111011" & X"194", -- 0x021: CALL 0x194 + "000011" & X"111", -- 0x022: MOV R01, 0x11 + "111011" & X"199", -- 0x023: CALL 0x199 + "111011" & X"142", -- 0x024: CALL 0x142 + "101000" & X"A00", -- 0x025: XIN R00, (0xA0) + "011001" & X"010", -- 0x026: AND R00, 0x01 + "110001" & X"025", -- 0x027: JZ 0x025 + "000011" & X"000", -- 0x028: MOV R00, 0x00 + "000011" & X"801", -- 0x029: MOV R01, 0x80 + "000011" & X"002", -- 0x02A: MOV R02, 0x00 + "000011" & X"003", -- 0x02B: MOV R03, 0x00 + "111011" & X"123", -- 0x02C: CALL 0x123 + "001101" & X"000", -- 0x02D: MOVC (0x00), R00 + "001101" & X"011", -- 0x02E: MOVC (0x01), R01 + "001101" & X"022", -- 0x02F: MOVC (0x02), R02 + "001101" & X"033", -- 0x030: MOVC (0x03), R03 + "000011" & X"000", -- 0x031: MOV R00, 0x00 + "000011" & X"A61", -- 0x032: MOV R01, 0xA6 + "000011" & X"002", -- 0x033: MOV R02, 0x00 + "000011" & X"003", -- 0x034: MOV R03, 0x00 + "111011" & X"123", -- 0x035: CALL 0x123 + "011001" & X"0F2", -- 0x036: AND R02, 0x0F + "001111" & X"0F2", -- 0x037: CMP R02, 0x0F + "111010" & X"031", -- 0x038: JNE 0x031 + "000011" & X"09F", -- 0x039: MOV R15, 0x09 + "000011" & X"A37", -- 0x03A: MOV R07, 0xA3 + "000011" & X"B58", -- 0x03B: MOV R08, 0xB5 + "000100" & X"070", -- 0x03C: MOVX R00, (R07) + "010001" & X"017", -- 0x03D: INC R07 + "000100" & X"071", -- 0x03E: MOVX R01, (R07) + "010001" & X"017", -- 0x03F: INC R07 + "000100" & X"082", -- 0x040: MOVX R02, (R08) + "010001" & X"018", -- 0x041: INC R08 + "000100" & X"083", -- 0x042: MOVX R03, (R08) + "010001" & X"018", -- 0x043: INC R08 + "111011" & X"123", -- 0x044: CALL 0x123 + "010101" & X"01F", -- 0x045: DEC R15 + "110010" & X"03C", -- 0x046: JNZ 0x03C + "111011" & X"0A5", -- 0x047: CALL 0x0A5 + "000011" & X"FF0", -- 0x048: MOV R00, 0xFF + "100100" & X"0E0", -- 0x049: XOUT (0x0E), R00 + "000011" & X"400", -- 0x04A: MOV R00, 0x40 + "100100" & X"0D0", -- 0x04B: XOUT (0x0D), R00 + "000011" & X"FF0", -- 0x04C: MOV R00, 0xFF + "100100" & X"100", -- 0x04D: XOUT (0x10), R00 + "000011" & X"400", -- 0x04E: MOV R00, 0x40 + "100100" & X"0F0", -- 0x04F: XOUT (0x0F), R00 + "000011" & X"070", -- 0x050: MOV R00, 0x07 + "100110" & X"030", -- 0x051: COUT (0x03), R00 + "001010" & X"080", -- 0x052: MOVC R00, (0x08) + "001111" & X"000", -- 0x053: TST R00 + "110010" & X"057", -- 0x054: JNZ 0x057 + "000011" & X"001", -- 0x055: MOV R01, 0x00 + "001101" & X"0C1", -- 0x056: MOVC (0x0C), R01 + "011001" & X"100", -- 0x057: AND R00, 0x10 + "110001" & X"091", -- 0x058: JZ 0x091 + "001010" & X"080", -- 0x059: MOVC R00, (0x08) + "001111" & X"140", -- 0x05A: CMP R00, 0x14 + "111001" & X"063", -- 0x05B: JEQ 0x063 + "001111" & X"110", -- 0x05C: CMP R00, 0x11 + "111001" & X"07A", -- 0x05D: JEQ 0x07A + "001010" & X"0C1", -- 0x05E: MOVC R01, (0x0C) + "001111" & X"001", -- 0x05F: TST R01 + "110010" & X"052", -- 0x060: JNZ 0x052 + "111011" & X"0A5", -- 0x061: CALL 0x0A5 + "110000" & X"052", -- 0x062: JMP 0x052 + "001010" & X"0A0", -- 0x063: MOVC R00, (0x0A) + "001111" & X"000", -- 0x064: CMP R00, 0x00 + "111001" & X"052", -- 0x065: JEQ 0x052 + "010101" & X"010", -- 0x066: DEC R00 + "001101" & X"0A0", -- 0x067: MOVC (0x0A), R00 + "111011" & X"0D6", -- 0x068: CALL 0x0D6 + "000011" & X"800", -- 0x069: MOV R00, 0x80 + "111011" & X"194", -- 0x06A: CALL 0x194 + "000011" & X"921", -- 0x06B: MOV R01, 0x92 + "111011" & X"199", -- 0x06C: CALL 0x199 + "000011" & X"800", -- 0x06D: MOV R00, 0x80 + "111011" & X"194", -- 0x06E: CALL 0x194 + "000011" & X"881", -- 0x06F: MOV R01, 0x88 + "111011" & X"199", -- 0x070: CALL 0x199 + "000011" & X"1F0", -- 0x071: MOV R00, 0x1F + "001010" & X"0A1", -- 0x072: MOVC R01, (0x0A) + "010100" & X"010", -- 0x073: SUB R00, R01 + "111011" & X"13D", -- 0x074: CALL 0x13D + "111011" & X"149", -- 0x075: CALL 0x149 + "111011" & X"149", -- 0x076: CALL 0x149 + "000011" & X"010", -- 0x077: MOV R00, 0x01 + "001101" & X"0C0", -- 0x078: MOVC (0x0C), R00 + "110000" & X"052", -- 0x079: JMP 0x052 + "001010" & X"0A0", -- 0x07A: MOVC R00, (0x0A) + "001111" & X"1F0", -- 0x07B: CMP R00, 0x1F + "111001" & X"052", -- 0x07C: JEQ 0x052 + "010001" & X"010", -- 0x07D: INC R00 + "001101" & X"0A0", -- 0x07E: MOVC (0x0A), R00 + "111011" & X"0A5", -- 0x07F: CALL 0x0A5 + "000011" & X"800", -- 0x080: MOV R00, 0x80 + "111011" & X"194", -- 0x081: CALL 0x194 + "000011" & X"921", -- 0x082: MOV R01, 0x92 + "111011" & X"199", -- 0x083: CALL 0x199 + "000011" & X"800", -- 0x084: MOV R00, 0x80 + "111011" & X"194", -- 0x085: CALL 0x194 + "000011" & X"881", -- 0x086: MOV R01, 0x88 + "111011" & X"199", -- 0x087: CALL 0x199 + "000011" & X"1F0", -- 0x088: MOV R00, 0x1F + "001010" & X"0A1", -- 0x089: MOVC R01, (0x0A) + "010100" & X"010", -- 0x08A: SUB R00, R01 + "111011" & X"13D", -- 0x08B: CALL 0x13D + "111011" & X"149", -- 0x08C: CALL 0x149 + "111011" & X"149", -- 0x08D: CALL 0x149 + "000011" & X"010", -- 0x08E: MOV R00, 0x01 + "001101" & X"0C0", -- 0x08F: MOVC (0x0C), R00 + "110000" & X"052", -- 0x090: JMP 0x052 + "001010" & X"080", -- 0x091: MOVC R00, (0x08) + "011001" & X"090", -- 0x092: AND R00, 0x09 + "110001" & X"09B", -- 0x093: JZ 0x09B + "000011" & X"011", -- 0x094: MOV R01, 0x01 + "011001" & X"010", -- 0x095: AND R00, 0x01 + "111010" & X"098", -- 0x096: JNE 0x098 + "000011" & X"001", -- 0x097: MOV R01, 0x00 + "100100" & X"021", -- 0x098: XOUT (0x02), R01 + "111011" & X"0B3", -- 0x099: CALL 0x0B3 + "110000" & X"052", -- 0x09A: JMP 0x052 + "001010" & X"080", -- 0x09B: MOVC R00, (0x08) + "011001" & X"060", -- 0x09C: AND R00, 0x06 + "110001" & X"0A4", -- 0x09D: JZ 0x0A4 + "000011" & X"011", -- 0x09E: MOV R01, 0x01 + "011001" & X"040", -- 0x09F: AND R00, 0x04 + "111010" & X"0A2", -- 0x0A0: JNE 0x0A2 + "000011" & X"001", -- 0x0A1: MOV R01, 0x00 + "100100" & X"021", -- 0x0A2: XOUT (0x02), R01 + "111011" & X"0C5", -- 0x0A3: CALL 0x0C5 + "110000" & X"052", -- 0x0A4: JMP 0x052 + "000011" & X"000", -- 0x0A5: MOV R00, 0x00 + "100100" & X"010", -- 0x0A6: XOUT (0x01), R00 + "000011" & X"060", -- 0x0A7: MOV R00, 0x06 + "100100" & X"000", -- 0x0A8: XOUT (0x00), R00 + "111011" & X"0D6", -- 0x0A9: CALL 0x0D6 + "000011" & X"800", -- 0x0AA: MOV R00, 0x80 + "111011" & X"194", -- 0x0AB: CALL 0x194 + "000011" & X"221", -- 0x0AC: MOV R01, 0x22 + "111011" & X"199", -- 0x0AD: CALL 0x199 + "000011" & X"C00", -- 0x0AE: MOV R00, 0xC0 + "111011" & X"194", -- 0x0AF: CALL 0x194 + "000011" & X"331", -- 0x0B0: MOV R01, 0x33 + "111011" & X"199", -- 0x0B1: CALL 0x199 + "111110" & X"000", -- 0x0B2: RET + "000011" & X"010", -- 0x0B3: MOV R00, 0x01 + "100100" & X"010", -- 0x0B4: XOUT (0x01), R00 + "000011" & X"080", -- 0x0B5: MOV R00, 0x08 + "100100" & X"000", -- 0x0B6: XOUT (0x00), R00 + "111011" & X"0E0", -- 0x0B7: CALL 0x0E0 + "000011" & X"800", -- 0x0B8: MOV R00, 0x80 + "111011" & X"194", -- 0x0B9: CALL 0x194 + "000011" & X"441", -- 0x0BA: MOV R01, 0x44 + "111011" & X"199", -- 0x0BB: CALL 0x199 + "000011" & X"661", -- 0x0BC: MOV R01, 0x66 + "101000" & X"020", -- 0x0BD: XIN R00, (0x02) + "011001" & X"010", -- 0x0BE: AND R00, 0x01 + "110010" & X"0C1", -- 0x0BF: JNZ 0x0C1 + "000011" & X"771", -- 0x0C0: MOV R01, 0x77 + "000011" & X"C00", -- 0x0C1: MOV R00, 0xC0 + "111011" & X"194", -- 0x0C2: CALL 0x194 + "111011" & X"199", -- 0x0C3: CALL 0x199 + "111110" & X"000", -- 0x0C4: RET + "000011" & X"020", -- 0x0C5: MOV R00, 0x02 + "100100" & X"010", -- 0x0C6: XOUT (0x01), R00 + "000011" & X"010", -- 0x0C7: MOV R00, 0x01 + "100100" & X"000", -- 0x0C8: XOUT (0x00), R00 + "111011" & X"0E0", -- 0x0C9: CALL 0x0E0 + "000011" & X"800", -- 0x0CA: MOV R00, 0x80 + "111011" & X"194", -- 0x0CB: CALL 0x194 + "000011" & X"551", -- 0x0CC: MOV R01, 0x55 + "111011" & X"199", -- 0x0CD: CALL 0x199 + "101000" & X"020", -- 0x0CE: XIN R00, (0x02) + "011001" & X"010", -- 0x0CF: AND R00, 0x01 + "110010" & X"0D2", -- 0x0D0: JNZ 0x0D2 + "000011" & X"771", -- 0x0D1: MOV R01, 0x77 + "000011" & X"C00", -- 0x0D2: MOV R00, 0xC0 + "111011" & X"194", -- 0x0D3: CALL 0x194 + "111011" & X"199", -- 0x0D4: CALL 0x199 + "111110" & X"000", -- 0x0D5: RET + "000011" & X"000", -- 0x0D6: MOV R00, 0x00 + "000011" & X"181", -- 0x0D7: MOV R01, 0x18 + "001010" & X"0A2", -- 0x0D8: MOVC R02, (0x0A) + "001010" & X"0A3", -- 0x0D9: MOVC R03, (0x0A) + "111011" & X"123", -- 0x0DA: CALL 0x123 + "001101" & X"000", -- 0x0DB: MOVC (0x00), R00 + "001101" & X"011", -- 0x0DC: MOVC (0x01), R01 + "001101" & X"022", -- 0x0DD: MOVC (0x02), R02 + "001101" & X"033", -- 0x0DE: MOVC (0x03), R03 + "111110" & X"000", -- 0x0DF: RET + "000011" & X"000", -- 0x0E0: MOV R00, 0x00 + "000011" & X"181", -- 0x0E1: MOV R01, 0x18 + "001010" & X"0B2", -- 0x0E2: MOVC R02, (0x0B) + "001010" & X"0B3", -- 0x0E3: MOVC R03, (0x0B) + "111011" & X"123", -- 0x0E4: CALL 0x123 + "001101" & X"000", -- 0x0E5: MOVC (0x00), R00 + "001101" & X"011", -- 0x0E6: MOVC (0x01), R01 + "001101" & X"022", -- 0x0E7: MOVC (0x02), R02 + "001101" & X"033", -- 0x0E8: MOVC (0x03), R03 + "111110" & X"000", -- 0x0E9: RET + "111100" & X"000", -- 0x0EA: PUSH R00 + "111100" & X"001", -- 0x0EB: PUSH R01 + "111100" & X"002", -- 0x0EC: PUSH R02 + "111100" & X"003", -- 0x0ED: PUSH R03 + "001010" & X"040", -- 0x0EE: MOVC R00, (0x04) + "001010" & X"051", -- 0x0EF: MOVC R01, (0x05) + "010101" & X"010", -- 0x0F0: DEC R00 + "010111" & X"001", -- 0x0F1: SUBC R01, 0x00 + "001101" & X"040", -- 0x0F2: MOVC (0x04), R00 + "001101" & X"051", -- 0x0F3: MOVC (0x05), R01 + "001111" & X"001", -- 0x0F4: TST R01 + "110010" & X"108", -- 0x0F5: JNZ 0x108 + "001111" & X"000", -- 0x0F6: TST R00 + "110010" & X"108", -- 0x0F7: JNZ 0x108 + "000011" & X"000", -- 0x0F8: MOV R00, 0x00 + "000011" & X"021", -- 0x0F9: MOV R01, 0x02 + "001101" & X"040", -- 0x0FA: MOVC (0x04), R00 + "001101" & X"051", -- 0x0FB: MOVC (0x05), R01 + "101000" & X"110", -- 0x0FC: XIN R00, (0x11) + "101000" & X"121", -- 0x0FD: XIN R01, (0x12) + "101000" & X"132", -- 0x0FE: XIN R02, (0x13) + "101000" & X"143", -- 0x0FF: XIN R03, (0x14) + "010001" & X"010", -- 0x100: INC R00 + "010011" & X"001", -- 0x101: ADDC R01, 0x00 + "010011" & X"002", -- 0x102: ADDC R02, 0x00 + "010011" & X"003", -- 0x103: ADDC R03, 0x00 + "100100" & X"110", -- 0x104: XOUT (0x11), R00 + "100100" & X"121", -- 0x105: XOUT (0x12), R01 + "100100" & X"132", -- 0x106: XOUT (0x13), R02 + "100100" & X"143", -- 0x107: XOUT (0x14), R03 + "101000" & X"800", -- 0x108: XIN R00, (0x80) + "001010" & X"071", -- 0x109: MOVC R01, (0x07) + "001010" & X"062", -- 0x10A: MOVC R02, (0x06) + "001111" & X"001", -- 0x10B: TST R01 + "110010" & X"10F", -- 0x10C: JNZ 0x10F + "001111" & X"002", -- 0x10D: TST R02 + "110001" & X"119", -- 0x10E: JZ 0x119 + "010101" & X"012", -- 0x10F: DEC R02 + "010111" & X"001", -- 0x110: SUBC R01, 0x00 + "001101" & X"071", -- 0x111: MOVC (0x07), R01 + "001101" & X"062", -- 0x112: MOVC (0x06), R02 + "001010" & X"091", -- 0x113: MOVC R01, (0x09) + "101000" & X"800", -- 0x114: XIN R00, (0x80) + "001101" & X"090", -- 0x115: MOVC (0x09), R00 + "001110" & X"010", -- 0x116: CMP R00, R01 + "111001" & X"11E", -- 0x117: JEQ 0x11E + "110000" & X"11A", -- 0x118: JMP 0x11A + "001101" & X"080", -- 0x119: MOVC (0x08), R00 + "000011" & X"041", -- 0x11A: MOV R01, 0x04 + "001101" & X"071", -- 0x11B: MOVC (0x07), R01 + "000011" & X"001", -- 0x11C: MOV R01, 0x00 + "001101" & X"061", -- 0x11D: MOVC (0x06), R01 + "111101" & X"003", -- 0x11E: POP R03 + "111101" & X"002", -- 0x11F: POP R02 + "111101" & X"001", -- 0x120: POP R01 + "111101" & X"000", -- 0x121: POP R00 + "111111" & X"000", -- 0x122: RETI + "111011" & X"131", -- 0x123: CALL 0x131 + "100100" & X"051", -- 0x124: XOUT (0x05), R01 + "100100" & X"040", -- 0x125: XOUT (0x04), R00 + "100100" & X"073", -- 0x126: XOUT (0x07), R03 + "100100" & X"062", -- 0x127: XOUT (0x06), R02 + "011001" & X"801", -- 0x128: AND R01, 0x80 + "110010" & X"12B", -- 0x129: JNZ 0x12B + "111110" & X"000", -- 0x12A: RET + "111011" & X"137", -- 0x12B: CALL 0x137 + "101000" & X"051", -- 0x12C: XIN R01, (0x05) + "101000" & X"040", -- 0x12D: XIN R00, (0x04) + "101000" & X"073", -- 0x12E: XIN R03, (0x07) + "101000" & X"062", -- 0x12F: XIN R02, (0x06) + "111110" & X"000", -- 0x130: RET + "111100" & X"000", -- 0x131: PUSH R00 + "101000" & X"A00", -- 0x132: XIN R00, (0xA0) + "011001" & X"020", -- 0x133: AND R00, 0x02 + "110001" & X"132", -- 0x134: JZ 0x132 + "111101" & X"000", -- 0x135: POP R00 + "111110" & X"000", -- 0x136: RET + "111100" & X"000", -- 0x137: PUSH R00 + "101000" & X"A00", -- 0x138: XIN R00, (0xA0) + "011001" & X"040", -- 0x139: AND R00, 0x04 + "110001" & X"138", -- 0x13A: JZ 0x138 + "111101" & X"000", -- 0x13B: POP R00 + "111110" & X"000", -- 0x13C: RET + "111011" & X"1EE", -- 0x13D: CALL 0x1EE + "111011" & X"1AB", -- 0x13E: CALL 0x1AB + "000010" & X"010", -- 0x13F: MOV R00, R01 + "111011" & X"1AB", -- 0x140: CALL 0x1AB + "111110" & X"000", -- 0x141: RET + "111100" & X"00F", -- 0x142: PUSH R15 + "000011" & X"0AF", -- 0x143: MOV R15, 0x0A + "111011" & X"149", -- 0x144: CALL 0x149 + "010101" & X"01F", -- 0x145: DEC R15 + "110010" & X"144", -- 0x146: JNZ 0x144 + "111101" & X"00F", -- 0x147: POP R15 + "111110" & X"000", -- 0x148: RET + "111100" & X"00F", -- 0x149: PUSH R15 + "000011" & X"0AF", -- 0x14A: MOV R15, 0x0A + "111011" & X"150", -- 0x14B: CALL 0x150 + "010101" & X"01F", -- 0x14C: DEC R15 + "110010" & X"14B", -- 0x14D: JNZ 0x14B + "111101" & X"00F", -- 0x14E: POP R15 + "111110" & X"000", -- 0x14F: RET + "111100" & X"00F", -- 0x150: PUSH R15 + "000011" & X"0AF", -- 0x151: MOV R15, 0x0A + "111011" & X"157", -- 0x152: CALL 0x157 + "010101" & X"01F", -- 0x153: DEC R15 + "110010" & X"152", -- 0x154: JNZ 0x152 + "111101" & X"00F", -- 0x155: POP R15 + "111110" & X"000", -- 0x156: RET + "111100" & X"00F", -- 0x157: PUSH R15 + "000011" & X"0AF", -- 0x158: MOV R15, 0x0A + "111011" & X"15E", -- 0x159: CALL 0x15E + "010101" & X"01F", -- 0x15A: DEC R15 + "110010" & X"159", -- 0x15B: JNZ 0x159 + "111101" & X"00F", -- 0x15C: POP R15 + "111110" & X"000", -- 0x15D: RET + "111100" & X"00F", -- 0x15E: PUSH R15 + "000011" & X"0AF", -- 0x15F: MOV R15, 0x0A + "111011" & X"165", -- 0x160: CALL 0x165 + "010101" & X"01F", -- 0x161: DEC R15 + "110010" & X"160", -- 0x162: JNZ 0x160 + "111101" & X"00F", -- 0x163: POP R15 + "111110" & X"000", -- 0x164: RET + "111100" & X"00F", -- 0x165: PUSH R15 + "000011" & X"63F", -- 0x166: MOV R15, 0x63 + "000000" & X"000", -- 0x167: NOP + "000000" & X"000", -- 0x168: NOP + "000000" & X"000", -- 0x169: NOP + "010101" & X"01F", -- 0x16A: DEC R15 + "110010" & X"167", -- 0x16B: JNZ 0x167 + "111101" & X"00F", -- 0x16C: POP R15 + "111110" & X"000", -- 0x16D: RET + "111100" & X"00F", -- 0x16E: PUSH R15 + "000011" & X"09F", -- 0x16F: MOV R15, 0x09 + "000000" & X"000", -- 0x170: NOP + "000000" & X"000", -- 0x171: NOP + "000000" & X"000", -- 0x172: NOP + "010101" & X"01F", -- 0x173: DEC R15 + "110010" & X"170", -- 0x174: JNZ 0x170 + "111101" & X"00F", -- 0x175: POP R15 + "111110" & X"000", -- 0x176: RET + "000011" & X"002", -- 0x177: MOV R02, 0x00 + "000011" & X"030", -- 0x178: MOV R00, 0x03 + "111011" & X"1C3", -- 0x179: CALL 0x1C3 + "111011" & X"150", -- 0x17A: CALL 0x150 + "000011" & X"002", -- 0x17B: MOV R02, 0x00 + "000011" & X"030", -- 0x17C: MOV R00, 0x03 + "111011" & X"1C3", -- 0x17D: CALL 0x1C3 + "111011" & X"150", -- 0x17E: CALL 0x150 + "000011" & X"002", -- 0x17F: MOV R02, 0x00 + "000011" & X"020", -- 0x180: MOV R00, 0x02 + "111011" & X"1C3", -- 0x181: CALL 0x1C3 + "111011" & X"157", -- 0x182: CALL 0x157 + "000011" & X"280", -- 0x183: MOV R00, 0x28 + "111011" & X"194", -- 0x184: CALL 0x194 + "000011" & X"0C0", -- 0x185: MOV R00, 0x0C + "111011" & X"194", -- 0x186: CALL 0x194 + "000011" & X"060", -- 0x187: MOV R00, 0x06 + "111011" & X"194", -- 0x188: CALL 0x194 + "000011" & X"010", -- 0x189: MOV R00, 0x01 + "111011" & X"194", -- 0x18A: CALL 0x194 + "111110" & X"000", -- 0x18B: RET + "111100" & X"000", -- 0x18C: PUSH R00 + "111011" & X"1B7", -- 0x18D: CALL 0x1B7 + "011001" & X"800", -- 0x18E: AND R00, 0x80 + "110001" & X"192", -- 0x18F: JZ 0x192 + "111011" & X"16E", -- 0x190: CALL 0x16E + "110000" & X"18D", -- 0x191: JMP 0x18D + "111101" & X"000", -- 0x192: POP R00 + "111110" & X"000", -- 0x193: RET + "111100" & X"002", -- 0x194: PUSH R02 + "000011" & X"002", -- 0x195: MOV R02, 0x00 + "111011" & X"1B0", -- 0x196: CALL 0x1B0 + "111101" & X"002", -- 0x197: POP R02 + "111110" & X"000", -- 0x198: RET + "111100" & X"000", -- 0x199: PUSH R00 + "000100" & X"010", -- 0x19A: MOVX R00, (R01) + "010001" & X"011", -- 0x19B: INC R01 + "001111" & X"000", -- 0x19C: TST R00 + "110001" & X"1A0", -- 0x19D: JZ 0x1A0 + "111011" & X"1AB", -- 0x19E: CALL 0x1AB + "110000" & X"19A", -- 0x19F: JMP 0x19A + "111101" & X"000", -- 0x1A0: POP R00 + "111110" & X"000", -- 0x1A1: RET + "111100" & X"000", -- 0x1A2: PUSH R00 + "001001" & X"010", -- 0x1A3: MOVC R00, (R01) + "010001" & X"011", -- 0x1A4: INC R01 + "001111" & X"000", -- 0x1A5: TST R00 + "110001" & X"1A9", -- 0x1A6: JZ 0x1A9 + "111011" & X"1AB", -- 0x1A7: CALL 0x1AB + "110000" & X"1A3", -- 0x1A8: JMP 0x1A3 + "111101" & X"000", -- 0x1A9: POP R00 + "111110" & X"000", -- 0x1AA: RET + "111100" & X"002", -- 0x1AB: PUSH R02 + "000011" & X"402", -- 0x1AC: MOV R02, 0x40 + "111011" & X"1B0", -- 0x1AD: CALL 0x1B0 + "111101" & X"002", -- 0x1AE: POP R02 + "111110" & X"000", -- 0x1AF: RET + "111011" & X"18C", -- 0x1B0: CALL 0x18C + "111100" & X"000", -- 0x1B1: PUSH R00 + "101010" & X"000", -- 0x1B2: SWAP R00 + "111011" & X"1C3", -- 0x1B3: CALL 0x1C3 + "111101" & X"000", -- 0x1B4: POP R00 + "111011" & X"1C3", -- 0x1B5: CALL 0x1C3 + "111110" & X"000", -- 0x1B6: RET + "111100" & X"002", -- 0x1B7: PUSH R02 + "000011" & X"002", -- 0x1B8: MOV R02, 0x00 + "111011" & X"1BC", -- 0x1B9: CALL 0x1BC + "111101" & X"002", -- 0x1BA: POP R02 + "111110" & X"000", -- 0x1BB: RET + "111011" & X"1D6", -- 0x1BC: CALL 0x1D6 + "101010" & X"000", -- 0x1BD: SWAP R00 + "111100" & X"000", -- 0x1BE: PUSH R00 + "111011" & X"1D6", -- 0x1BF: CALL 0x1D6 + "111101" & X"002", -- 0x1C0: POP R02 + "011010" & X"020", -- 0x1C1: OR R00, R02 + "111110" & X"000", -- 0x1C2: RET + "111100" & X"001", -- 0x1C3: PUSH R01 + "011001" & X"0F0", -- 0x1C4: AND R00, 0x0F + "000010" & X"001", -- 0x1C5: MOV R01, R00 + "011010" & X"021", -- 0x1C6: OR R01, R02 + "100100" & X"081", -- 0x1C7: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1C8: CALL 0x16E + "000010" & X"001", -- 0x1C9: MOV R01, R00 + "011010" & X"021", -- 0x1CA: OR R01, R02 + "011011" & X"801", -- 0x1CB: OR R01, 0x80 + "100100" & X"081", -- 0x1CC: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1CD: CALL 0x16E + "000010" & X"001", -- 0x1CE: MOV R01, R00 + "011010" & X"021", -- 0x1CF: OR R01, R02 + "100100" & X"081", -- 0x1D0: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1D1: CALL 0x16E + "011011" & X"201", -- 0x1D2: OR R01, 0x20 + "100100" & X"081", -- 0x1D3: XOUT (0x08), R01 + "111101" & X"001", -- 0x1D4: POP R01 + "111110" & X"000", -- 0x1D5: RET + "111100" & X"001", -- 0x1D6: PUSH R01 + "000011" & X"201", -- 0x1D7: MOV R01, 0x20 + "011010" & X"021", -- 0x1D8: OR R01, R02 + "100100" & X"081", -- 0x1D9: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1DA: CALL 0x16E + "000011" & X"201", -- 0x1DB: MOV R01, 0x20 + "011010" & X"021", -- 0x1DC: OR R01, R02 + "011011" & X"801", -- 0x1DD: OR R01, 0x80 + "100100" & X"081", -- 0x1DE: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1DF: CALL 0x16E + "101000" & X"080", -- 0x1E0: XIN R00, (0x08) + "011001" & X"0F0", -- 0x1E1: AND R00, 0x0F + "000011" & X"201", -- 0x1E2: MOV R01, 0x20 + "011010" & X"021", -- 0x1E3: OR R01, R02 + "100100" & X"081", -- 0x1E4: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1E5: CALL 0x16E + "111101" & X"001", -- 0x1E6: POP R01 + "111110" & X"000", -- 0x1E7: RET + "011001" & X"0F0", -- 0x1E8: AND R00, 0x0F + "001111" & X"0A0", -- 0x1E9: CMP R00, 0x0A + "110101" & X"1EC", -- 0x1EA: JLT 0x1EC + "010001" & X"070", -- 0x1EB: ADD R00, 0x07 + "010001" & X"300", -- 0x1EC: ADD R00, 0x30 + "111110" & X"000", -- 0x1ED: RET + "111100" & X"000", -- 0x1EE: PUSH R00 + "111011" & X"1E8", -- 0x1EF: CALL 0x1E8 + "000010" & X"001", -- 0x1F0: MOV R01, R00 + "111101" & X"000", -- 0x1F1: POP R00 + "101010" & X"000", -- 0x1F2: SWAP R00 + "111011" & X"1E8", -- 0x1F3: CALL 0x1E8 + "111110" & X"000" -- 0x1F4: RET + ); + +begin + +PROM_READ: + process(clk, ce) + begin + if rising_edge(clk) and ce = '1' then + dout <= imem_rom(to_integer(addr)); + end if; + end process; + +end test; + diff --git a/projects/messe_demo/src/test_irom_ld.vhdl b/projects/messe_demo/src/test_irom_ld.vhdl new file mode 100644 index 0000000..8dbc0ff --- /dev/null +++ b/projects/messe_demo/src/test_irom_ld.vhdl @@ -0,0 +1,1181 @@ +------------------------------------------------------------------------- +-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL +-- This file: loadable ROM +-- +-- Copyright (C) 2007 J. Ahrensfeld +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- For questions and ideas, please contact the author at jens@jayfield.org +-- +-------------------------------------------------------------------------- + +LIBRARY ieee; +use IEEE.STD_LOGIC_1164.ALL; +USE ieee.numeric_std.ALL; + +library UNISIM; +use UNISIM.VComponents.all; + +library work; +use work.cpu_pkg.all; + +ENTITY irom IS + Port ( + clk : in STD_LOGIC; + ce : in STD_LOGIC; + addr : in inst_addr_t; + dout : out inst_t + ); + +END irom; + +ARCHITECTURE loadable OF irom IS + + -- JASM_ROM_INSERT_HERE + + -- Assembled from test.jsm + type imem_rom_t is array (0 to 1023) of inst_t; + signal imem_rom : imem_rom_t := + ( + "110000" & X"002", -- 0x000: JMP 0x002 + "110000" & X"0EA", -- 0x001: JMP 0x0EA + "000011" & X"000", -- 0x002: MOV R00, 0x00 + "000011" & X"021", -- 0x003: MOV R01, 0x02 + "001101" & X"040", -- 0x004: MOVC (0x04), R00 + "001101" & X"051", -- 0x005: MOVC (0x05), R01 + "000011" & X"000", -- 0x006: MOV R00, 0x00 + "100100" & X"000", -- 0x007: XOUT (0x00), R00 + "000011" & X"FF0", -- 0x008: MOV R00, 0xFF + "100100" & X"110", -- 0x009: XOUT (0x11), R00 + "000011" & X"3B0", -- 0x00A: MOV R00, 0x3B + "100100" & X"120", -- 0x00B: XOUT (0x12), R00 + "000011" & X"9C0", -- 0x00C: MOV R00, 0x9C + "100100" & X"130", -- 0x00D: XOUT (0x13), R00 + "000011" & X"010", -- 0x00E: MOV R00, 0x01 + "100100" & X"140", -- 0x00F: XOUT (0x14), R00 + "000011" & X"000", -- 0x010: MOV R00, 0x00 + "001101" & X"080", -- 0x011: MOVC (0x08), R00 + "001101" & X"090", -- 0x012: MOVC (0x09), R00 + "000011" & X"000", -- 0x013: MOV R00, 0x00 + "001101" & X"060", -- 0x014: MOVC (0x06), R00 + "000011" & X"040", -- 0x015: MOV R00, 0x04 + "001101" & X"070", -- 0x016: MOVC (0x07), R00 + "000011" & X"0A0", -- 0x017: MOV R00, 0x0A + "001101" & X"0A0", -- 0x018: MOVC (0x0A), R00 + "000011" & X"0C0", -- 0x019: MOV R00, 0x0C + "001101" & X"0B0", -- 0x01A: MOVC (0x0B), R00 + "111011" & X"177", -- 0x01B: CALL 0x177 + "000011" & X"010", -- 0x01C: MOV R00, 0x01 + "111011" & X"194", -- 0x01D: CALL 0x194 + "000011" & X"001", -- 0x01E: MOV R01, 0x00 + "111011" & X"199", -- 0x01F: CALL 0x199 + "000011" & X"C00", -- 0x020: MOV R00, 0xC0 + "111011" & X"194", -- 0x021: CALL 0x194 + "000011" & X"111", -- 0x022: MOV R01, 0x11 + "111011" & X"199", -- 0x023: CALL 0x199 + "111011" & X"142", -- 0x024: CALL 0x142 + "101000" & X"A00", -- 0x025: XIN R00, (0xA0) + "011001" & X"010", -- 0x026: AND R00, 0x01 + "110001" & X"025", -- 0x027: JZ 0x025 + "000011" & X"000", -- 0x028: MOV R00, 0x00 + "000011" & X"801", -- 0x029: MOV R01, 0x80 + "000011" & X"002", -- 0x02A: MOV R02, 0x00 + "000011" & X"003", -- 0x02B: MOV R03, 0x00 + "111011" & X"123", -- 0x02C: CALL 0x123 + "001101" & X"000", -- 0x02D: MOVC (0x00), R00 + "001101" & X"011", -- 0x02E: MOVC (0x01), R01 + "001101" & X"022", -- 0x02F: MOVC (0x02), R02 + "001101" & X"033", -- 0x030: MOVC (0x03), R03 + "000011" & X"000", -- 0x031: MOV R00, 0x00 + "000011" & X"A61", -- 0x032: MOV R01, 0xA6 + "000011" & X"002", -- 0x033: MOV R02, 0x00 + "000011" & X"003", -- 0x034: MOV R03, 0x00 + "111011" & X"123", -- 0x035: CALL 0x123 + "011001" & X"0F2", -- 0x036: AND R02, 0x0F + "001111" & X"0F2", -- 0x037: CMP R02, 0x0F + "111010" & X"031", -- 0x038: JNE 0x031 + "000011" & X"09F", -- 0x039: MOV R15, 0x09 + "000011" & X"A37", -- 0x03A: MOV R07, 0xA3 + "000011" & X"B58", -- 0x03B: MOV R08, 0xB5 + "000100" & X"070", -- 0x03C: MOVX R00, (R07) + "010001" & X"017", -- 0x03D: INC R07 + "000100" & X"071", -- 0x03E: MOVX R01, (R07) + "010001" & X"017", -- 0x03F: INC R07 + "000100" & X"082", -- 0x040: MOVX R02, (R08) + "010001" & X"018", -- 0x041: INC R08 + "000100" & X"083", -- 0x042: MOVX R03, (R08) + "010001" & X"018", -- 0x043: INC R08 + "111011" & X"123", -- 0x044: CALL 0x123 + "010101" & X"01F", -- 0x045: DEC R15 + "110010" & X"03C", -- 0x046: JNZ 0x03C + "111011" & X"0A5", -- 0x047: CALL 0x0A5 + "000011" & X"FF0", -- 0x048: MOV R00, 0xFF + "100100" & X"0E0", -- 0x049: XOUT (0x0E), R00 + "000011" & X"400", -- 0x04A: MOV R00, 0x40 + "100100" & X"0D0", -- 0x04B: XOUT (0x0D), R00 + "000011" & X"FF0", -- 0x04C: MOV R00, 0xFF + "100100" & X"100", -- 0x04D: XOUT (0x10), R00 + "000011" & X"400", -- 0x04E: MOV R00, 0x40 + "100100" & X"0F0", -- 0x04F: XOUT (0x0F), R00 + "000011" & X"070", -- 0x050: MOV R00, 0x07 + "100110" & X"030", -- 0x051: COUT (0x03), R00 + "001010" & X"080", -- 0x052: MOVC R00, (0x08) + "001111" & X"000", -- 0x053: TST R00 + "110010" & X"057", -- 0x054: JNZ 0x057 + "000011" & X"001", -- 0x055: MOV R01, 0x00 + "001101" & X"0C1", -- 0x056: MOVC (0x0C), R01 + "011001" & X"100", -- 0x057: AND R00, 0x10 + "110001" & X"091", -- 0x058: JZ 0x091 + "001010" & X"080", -- 0x059: MOVC R00, (0x08) + "001111" & X"140", -- 0x05A: CMP R00, 0x14 + "111001" & X"063", -- 0x05B: JEQ 0x063 + "001111" & X"110", -- 0x05C: CMP R00, 0x11 + "111001" & X"07A", -- 0x05D: JEQ 0x07A + "001010" & X"0C1", -- 0x05E: MOVC R01, (0x0C) + "001111" & X"001", -- 0x05F: TST R01 + "110010" & X"052", -- 0x060: JNZ 0x052 + "111011" & X"0A5", -- 0x061: CALL 0x0A5 + "110000" & X"052", -- 0x062: JMP 0x052 + "001010" & X"0A0", -- 0x063: MOVC R00, (0x0A) + "001111" & X"000", -- 0x064: CMP R00, 0x00 + "111001" & X"052", -- 0x065: JEQ 0x052 + "010101" & X"010", -- 0x066: DEC R00 + "001101" & X"0A0", -- 0x067: MOVC (0x0A), R00 + "111011" & X"0D6", -- 0x068: CALL 0x0D6 + "000011" & X"800", -- 0x069: MOV R00, 0x80 + "111011" & X"194", -- 0x06A: CALL 0x194 + "000011" & X"921", -- 0x06B: MOV R01, 0x92 + "111011" & X"199", -- 0x06C: CALL 0x199 + "000011" & X"800", -- 0x06D: MOV R00, 0x80 + "111011" & X"194", -- 0x06E: CALL 0x194 + "000011" & X"881", -- 0x06F: MOV R01, 0x88 + "111011" & X"199", -- 0x070: CALL 0x199 + "000011" & X"1F0", -- 0x071: MOV R00, 0x1F + "001010" & X"0A1", -- 0x072: MOVC R01, (0x0A) + "010100" & X"010", -- 0x073: SUB R00, R01 + "111011" & X"13D", -- 0x074: CALL 0x13D + "111011" & X"149", -- 0x075: CALL 0x149 + "111011" & X"149", -- 0x076: CALL 0x149 + "000011" & X"010", -- 0x077: MOV R00, 0x01 + "001101" & X"0C0", -- 0x078: MOVC (0x0C), R00 + "110000" & X"052", -- 0x079: JMP 0x052 + "001010" & X"0A0", -- 0x07A: MOVC R00, (0x0A) + "001111" & X"1F0", -- 0x07B: CMP R00, 0x1F + "111001" & X"052", -- 0x07C: JEQ 0x052 + "010001" & X"010", -- 0x07D: INC R00 + "001101" & X"0A0", -- 0x07E: MOVC (0x0A), R00 + "111011" & X"0A5", -- 0x07F: CALL 0x0A5 + "000011" & X"800", -- 0x080: MOV R00, 0x80 + "111011" & X"194", -- 0x081: CALL 0x194 + "000011" & X"921", -- 0x082: MOV R01, 0x92 + "111011" & X"199", -- 0x083: CALL 0x199 + "000011" & X"800", -- 0x084: MOV R00, 0x80 + "111011" & X"194", -- 0x085: CALL 0x194 + "000011" & X"881", -- 0x086: MOV R01, 0x88 + "111011" & X"199", -- 0x087: CALL 0x199 + "000011" & X"1F0", -- 0x088: MOV R00, 0x1F + "001010" & X"0A1", -- 0x089: MOVC R01, (0x0A) + "010100" & X"010", -- 0x08A: SUB R00, R01 + "111011" & X"13D", -- 0x08B: CALL 0x13D + "111011" & X"149", -- 0x08C: CALL 0x149 + "111011" & X"149", -- 0x08D: CALL 0x149 + "000011" & X"010", -- 0x08E: MOV R00, 0x01 + "001101" & X"0C0", -- 0x08F: MOVC (0x0C), R00 + "110000" & X"052", -- 0x090: JMP 0x052 + "001010" & X"080", -- 0x091: MOVC R00, (0x08) + "011001" & X"090", -- 0x092: AND R00, 0x09 + "110001" & X"09B", -- 0x093: JZ 0x09B + "000011" & X"011", -- 0x094: MOV R01, 0x01 + "011001" & X"010", -- 0x095: AND R00, 0x01 + "111010" & X"098", -- 0x096: JNE 0x098 + "000011" & X"001", -- 0x097: MOV R01, 0x00 + "100100" & X"021", -- 0x098: XOUT (0x02), R01 + "111011" & X"0B3", -- 0x099: CALL 0x0B3 + "110000" & X"052", -- 0x09A: JMP 0x052 + "001010" & X"080", -- 0x09B: MOVC R00, (0x08) + "011001" & X"060", -- 0x09C: AND R00, 0x06 + "110001" & X"0A4", -- 0x09D: JZ 0x0A4 + "000011" & X"011", -- 0x09E: MOV R01, 0x01 + "011001" & X"040", -- 0x09F: AND R00, 0x04 + "111010" & X"0A2", -- 0x0A0: JNE 0x0A2 + "000011" & X"001", -- 0x0A1: MOV R01, 0x00 + "100100" & X"021", -- 0x0A2: XOUT (0x02), R01 + "111011" & X"0C5", -- 0x0A3: CALL 0x0C5 + "110000" & X"052", -- 0x0A4: JMP 0x052 + "000011" & X"000", -- 0x0A5: MOV R00, 0x00 + "100100" & X"010", -- 0x0A6: XOUT (0x01), R00 + "000011" & X"060", -- 0x0A7: MOV R00, 0x06 + "100100" & X"000", -- 0x0A8: XOUT (0x00), R00 + "111011" & X"0D6", -- 0x0A9: CALL 0x0D6 + "000011" & X"800", -- 0x0AA: MOV R00, 0x80 + "111011" & X"194", -- 0x0AB: CALL 0x194 + "000011" & X"221", -- 0x0AC: MOV R01, 0x22 + "111011" & X"199", -- 0x0AD: CALL 0x199 + "000011" & X"C00", -- 0x0AE: MOV R00, 0xC0 + "111011" & X"194", -- 0x0AF: CALL 0x194 + "000011" & X"331", -- 0x0B0: MOV R01, 0x33 + "111011" & X"199", -- 0x0B1: CALL 0x199 + "111110" & X"000", -- 0x0B2: RET + "000011" & X"010", -- 0x0B3: MOV R00, 0x01 + "100100" & X"010", -- 0x0B4: XOUT (0x01), R00 + "000011" & X"080", -- 0x0B5: MOV R00, 0x08 + "100100" & X"000", -- 0x0B6: XOUT (0x00), R00 + "111011" & X"0E0", -- 0x0B7: CALL 0x0E0 + "000011" & X"800", -- 0x0B8: MOV R00, 0x80 + "111011" & X"194", -- 0x0B9: CALL 0x194 + "000011" & X"441", -- 0x0BA: MOV R01, 0x44 + "111011" & X"199", -- 0x0BB: CALL 0x199 + "000011" & X"661", -- 0x0BC: MOV R01, 0x66 + "101000" & X"020", -- 0x0BD: XIN R00, (0x02) + "011001" & X"010", -- 0x0BE: AND R00, 0x01 + "110010" & X"0C1", -- 0x0BF: JNZ 0x0C1 + "000011" & X"771", -- 0x0C0: MOV R01, 0x77 + "000011" & X"C00", -- 0x0C1: MOV R00, 0xC0 + "111011" & X"194", -- 0x0C2: CALL 0x194 + "111011" & X"199", -- 0x0C3: CALL 0x199 + "111110" & X"000", -- 0x0C4: RET + "000011" & X"020", -- 0x0C5: MOV R00, 0x02 + "100100" & X"010", -- 0x0C6: XOUT (0x01), R00 + "000011" & X"010", -- 0x0C7: MOV R00, 0x01 + "100100" & X"000", -- 0x0C8: XOUT (0x00), R00 + "111011" & X"0E0", -- 0x0C9: CALL 0x0E0 + "000011" & X"800", -- 0x0CA: MOV R00, 0x80 + "111011" & X"194", -- 0x0CB: CALL 0x194 + "000011" & X"551", -- 0x0CC: MOV R01, 0x55 + "111011" & X"199", -- 0x0CD: CALL 0x199 + "101000" & X"020", -- 0x0CE: XIN R00, (0x02) + "011001" & X"010", -- 0x0CF: AND R00, 0x01 + "110010" & X"0D2", -- 0x0D0: JNZ 0x0D2 + "000011" & X"771", -- 0x0D1: MOV R01, 0x77 + "000011" & X"C00", -- 0x0D2: MOV R00, 0xC0 + "111011" & X"194", -- 0x0D3: CALL 0x194 + "111011" & X"199", -- 0x0D4: CALL 0x199 + "111110" & X"000", -- 0x0D5: RET + "000011" & X"000", -- 0x0D6: MOV R00, 0x00 + "000011" & X"181", -- 0x0D7: MOV R01, 0x18 + "001010" & X"0A2", -- 0x0D8: MOVC R02, (0x0A) + "001010" & X"0A3", -- 0x0D9: MOVC R03, (0x0A) + "111011" & X"123", -- 0x0DA: CALL 0x123 + "001101" & X"000", -- 0x0DB: MOVC (0x00), R00 + "001101" & X"011", -- 0x0DC: MOVC (0x01), R01 + "001101" & X"022", -- 0x0DD: MOVC (0x02), R02 + "001101" & X"033", -- 0x0DE: MOVC (0x03), R03 + "111110" & X"000", -- 0x0DF: RET + "000011" & X"000", -- 0x0E0: MOV R00, 0x00 + "000011" & X"181", -- 0x0E1: MOV R01, 0x18 + "001010" & X"0B2", -- 0x0E2: MOVC R02, (0x0B) + "001010" & X"0B3", -- 0x0E3: MOVC R03, (0x0B) + "111011" & X"123", -- 0x0E4: CALL 0x123 + "001101" & X"000", -- 0x0E5: MOVC (0x00), R00 + "001101" & X"011", -- 0x0E6: MOVC (0x01), R01 + "001101" & X"022", -- 0x0E7: MOVC (0x02), R02 + "001101" & X"033", -- 0x0E8: MOVC (0x03), R03 + "111110" & X"000", -- 0x0E9: RET + "111100" & X"000", -- 0x0EA: PUSH R00 + "111100" & X"001", -- 0x0EB: PUSH R01 + "111100" & X"002", -- 0x0EC: PUSH R02 + "111100" & X"003", -- 0x0ED: PUSH R03 + "001010" & X"040", -- 0x0EE: MOVC R00, (0x04) + "001010" & X"051", -- 0x0EF: MOVC R01, (0x05) + "010101" & X"010", -- 0x0F0: DEC R00 + "010111" & X"001", -- 0x0F1: SUBC R01, 0x00 + "001101" & X"040", -- 0x0F2: MOVC (0x04), R00 + "001101" & X"051", -- 0x0F3: MOVC (0x05), R01 + "001111" & X"001", -- 0x0F4: TST R01 + "110010" & X"108", -- 0x0F5: JNZ 0x108 + "001111" & X"000", -- 0x0F6: TST R00 + "110010" & X"108", -- 0x0F7: JNZ 0x108 + "000011" & X"000", -- 0x0F8: MOV R00, 0x00 + "000011" & X"021", -- 0x0F9: MOV R01, 0x02 + "001101" & X"040", -- 0x0FA: MOVC (0x04), R00 + "001101" & X"051", -- 0x0FB: MOVC (0x05), R01 + "101000" & X"110", -- 0x0FC: XIN R00, (0x11) + "101000" & X"121", -- 0x0FD: XIN R01, (0x12) + "101000" & X"132", -- 0x0FE: XIN R02, (0x13) + "101000" & X"143", -- 0x0FF: XIN R03, (0x14) + "010001" & X"010", -- 0x100: INC R00 + "010011" & X"001", -- 0x101: ADDC R01, 0x00 + "010011" & X"002", -- 0x102: ADDC R02, 0x00 + "010011" & X"003", -- 0x103: ADDC R03, 0x00 + "100100" & X"110", -- 0x104: XOUT (0x11), R00 + "100100" & X"121", -- 0x105: XOUT (0x12), R01 + "100100" & X"132", -- 0x106: XOUT (0x13), R02 + "100100" & X"143", -- 0x107: XOUT (0x14), R03 + "101000" & X"800", -- 0x108: XIN R00, (0x80) + "001010" & X"071", -- 0x109: MOVC R01, (0x07) + "001010" & X"062", -- 0x10A: MOVC R02, (0x06) + "001111" & X"001", -- 0x10B: TST R01 + "110010" & X"10F", -- 0x10C: JNZ 0x10F + "001111" & X"002", -- 0x10D: TST R02 + "110001" & X"119", -- 0x10E: JZ 0x119 + "010101" & X"012", -- 0x10F: DEC R02 + "010111" & X"001", -- 0x110: SUBC R01, 0x00 + "001101" & X"071", -- 0x111: MOVC (0x07), R01 + "001101" & X"062", -- 0x112: MOVC (0x06), R02 + "001010" & X"091", -- 0x113: MOVC R01, (0x09) + "101000" & X"800", -- 0x114: XIN R00, (0x80) + "001101" & X"090", -- 0x115: MOVC (0x09), R00 + "001110" & X"010", -- 0x116: CMP R00, R01 + "111001" & X"11E", -- 0x117: JEQ 0x11E + "110000" & X"11A", -- 0x118: JMP 0x11A + "001101" & X"080", -- 0x119: MOVC (0x08), R00 + "000011" & X"041", -- 0x11A: MOV R01, 0x04 + "001101" & X"071", -- 0x11B: MOVC (0x07), R01 + "000011" & X"001", -- 0x11C: MOV R01, 0x00 + "001101" & X"061", -- 0x11D: MOVC (0x06), R01 + "111101" & X"003", -- 0x11E: POP R03 + "111101" & X"002", -- 0x11F: POP R02 + "111101" & X"001", -- 0x120: POP R01 + "111101" & X"000", -- 0x121: POP R00 + "111111" & X"000", -- 0x122: RETI + "111011" & X"131", -- 0x123: CALL 0x131 + "100100" & X"051", -- 0x124: XOUT (0x05), R01 + "100100" & X"040", -- 0x125: XOUT (0x04), R00 + "100100" & X"073", -- 0x126: XOUT (0x07), R03 + "100100" & X"062", -- 0x127: XOUT (0x06), R02 + "011001" & X"801", -- 0x128: AND R01, 0x80 + "110010" & X"12B", -- 0x129: JNZ 0x12B + "111110" & X"000", -- 0x12A: RET + "111011" & X"137", -- 0x12B: CALL 0x137 + "101000" & X"051", -- 0x12C: XIN R01, (0x05) + "101000" & X"040", -- 0x12D: XIN R00, (0x04) + "101000" & X"073", -- 0x12E: XIN R03, (0x07) + "101000" & X"062", -- 0x12F: XIN R02, (0x06) + "111110" & X"000", -- 0x130: RET + "111100" & X"000", -- 0x131: PUSH R00 + "101000" & X"A00", -- 0x132: XIN R00, (0xA0) + "011001" & X"020", -- 0x133: AND R00, 0x02 + "110001" & X"132", -- 0x134: JZ 0x132 + "111101" & X"000", -- 0x135: POP R00 + "111110" & X"000", -- 0x136: RET + "111100" & X"000", -- 0x137: PUSH R00 + "101000" & X"A00", -- 0x138: XIN R00, (0xA0) + "011001" & X"040", -- 0x139: AND R00, 0x04 + "110001" & X"138", -- 0x13A: JZ 0x138 + "111101" & X"000", -- 0x13B: POP R00 + "111110" & X"000", -- 0x13C: RET + "111011" & X"1EE", -- 0x13D: CALL 0x1EE + "111011" & X"1AB", -- 0x13E: CALL 0x1AB + "000010" & X"010", -- 0x13F: MOV R00, R01 + "111011" & X"1AB", -- 0x140: CALL 0x1AB + "111110" & X"000", -- 0x141: RET + "111100" & X"00F", -- 0x142: PUSH R15 + "000011" & X"0AF", -- 0x143: MOV R15, 0x0A + "111011" & X"149", -- 0x144: CALL 0x149 + "010101" & X"01F", -- 0x145: DEC R15 + "110010" & X"144", -- 0x146: JNZ 0x144 + "111101" & X"00F", -- 0x147: POP R15 + "111110" & X"000", -- 0x148: RET + "111100" & X"00F", -- 0x149: PUSH R15 + "000011" & X"0AF", -- 0x14A: MOV R15, 0x0A + "111011" & X"150", -- 0x14B: CALL 0x150 + "010101" & X"01F", -- 0x14C: DEC R15 + "110010" & X"14B", -- 0x14D: JNZ 0x14B + "111101" & X"00F", -- 0x14E: POP R15 + "111110" & X"000", -- 0x14F: RET + "111100" & X"00F", -- 0x150: PUSH R15 + "000011" & X"0AF", -- 0x151: MOV R15, 0x0A + "111011" & X"157", -- 0x152: CALL 0x157 + "010101" & X"01F", -- 0x153: DEC R15 + "110010" & X"152", -- 0x154: JNZ 0x152 + "111101" & X"00F", -- 0x155: POP R15 + "111110" & X"000", -- 0x156: RET + "111100" & X"00F", -- 0x157: PUSH R15 + "000011" & X"0AF", -- 0x158: MOV R15, 0x0A + "111011" & X"15E", -- 0x159: CALL 0x15E + "010101" & X"01F", -- 0x15A: DEC R15 + "110010" & X"159", -- 0x15B: JNZ 0x159 + "111101" & X"00F", -- 0x15C: POP R15 + "111110" & X"000", -- 0x15D: RET + "111100" & X"00F", -- 0x15E: PUSH R15 + "000011" & X"0AF", -- 0x15F: MOV R15, 0x0A + "111011" & X"165", -- 0x160: CALL 0x165 + "010101" & X"01F", -- 0x161: DEC R15 + "110010" & X"160", -- 0x162: JNZ 0x160 + "111101" & X"00F", -- 0x163: POP R15 + "111110" & X"000", -- 0x164: RET + "111100" & X"00F", -- 0x165: PUSH R15 + "000011" & X"63F", -- 0x166: MOV R15, 0x63 + "000000" & X"000", -- 0x167: NOP + "000000" & X"000", -- 0x168: NOP + "000000" & X"000", -- 0x169: NOP + "010101" & X"01F", -- 0x16A: DEC R15 + "110010" & X"167", -- 0x16B: JNZ 0x167 + "111101" & X"00F", -- 0x16C: POP R15 + "111110" & X"000", -- 0x16D: RET + "111100" & X"00F", -- 0x16E: PUSH R15 + "000011" & X"09F", -- 0x16F: MOV R15, 0x09 + "000000" & X"000", -- 0x170: NOP + "000000" & X"000", -- 0x171: NOP + "000000" & X"000", -- 0x172: NOP + "010101" & X"01F", -- 0x173: DEC R15 + "110010" & X"170", -- 0x174: JNZ 0x170 + "111101" & X"00F", -- 0x175: POP R15 + "111110" & X"000", -- 0x176: RET + "000011" & X"002", -- 0x177: MOV R02, 0x00 + "000011" & X"030", -- 0x178: MOV R00, 0x03 + "111011" & X"1C3", -- 0x179: CALL 0x1C3 + "111011" & X"150", -- 0x17A: CALL 0x150 + "000011" & X"002", -- 0x17B: MOV R02, 0x00 + "000011" & X"030", -- 0x17C: MOV R00, 0x03 + "111011" & X"1C3", -- 0x17D: CALL 0x1C3 + "111011" & X"150", -- 0x17E: CALL 0x150 + "000011" & X"002", -- 0x17F: MOV R02, 0x00 + "000011" & X"020", -- 0x180: MOV R00, 0x02 + "111011" & X"1C3", -- 0x181: CALL 0x1C3 + "111011" & X"157", -- 0x182: CALL 0x157 + "000011" & X"280", -- 0x183: MOV R00, 0x28 + "111011" & X"194", -- 0x184: CALL 0x194 + "000011" & X"0C0", -- 0x185: MOV R00, 0x0C + "111011" & X"194", -- 0x186: CALL 0x194 + "000011" & X"060", -- 0x187: MOV R00, 0x06 + "111011" & X"194", -- 0x188: CALL 0x194 + "000011" & X"010", -- 0x189: MOV R00, 0x01 + "111011" & X"194", -- 0x18A: CALL 0x194 + "111110" & X"000", -- 0x18B: RET + "111100" & X"000", -- 0x18C: PUSH R00 + "111011" & X"1B7", -- 0x18D: CALL 0x1B7 + "011001" & X"800", -- 0x18E: AND R00, 0x80 + "110001" & X"192", -- 0x18F: JZ 0x192 + "111011" & X"16E", -- 0x190: CALL 0x16E + "110000" & X"18D", -- 0x191: JMP 0x18D + "111101" & X"000", -- 0x192: POP R00 + "111110" & X"000", -- 0x193: RET + "111100" & X"002", -- 0x194: PUSH R02 + "000011" & X"002", -- 0x195: MOV R02, 0x00 + "111011" & X"1B0", -- 0x196: CALL 0x1B0 + "111101" & X"002", -- 0x197: POP R02 + "111110" & X"000", -- 0x198: RET + "111100" & X"000", -- 0x199: PUSH R00 + "000100" & X"010", -- 0x19A: MOVX R00, (R01) + "010001" & X"011", -- 0x19B: INC R01 + "001111" & X"000", -- 0x19C: TST R00 + "110001" & X"1A0", -- 0x19D: JZ 0x1A0 + "111011" & X"1AB", -- 0x19E: CALL 0x1AB + "110000" & X"19A", -- 0x19F: JMP 0x19A + "111101" & X"000", -- 0x1A0: POP R00 + "111110" & X"000", -- 0x1A1: RET + "111100" & X"000", -- 0x1A2: PUSH R00 + "001001" & X"010", -- 0x1A3: MOVC R00, (R01) + "010001" & X"011", -- 0x1A4: INC R01 + "001111" & X"000", -- 0x1A5: TST R00 + "110001" & X"1A9", -- 0x1A6: JZ 0x1A9 + "111011" & X"1AB", -- 0x1A7: CALL 0x1AB + "110000" & X"1A3", -- 0x1A8: JMP 0x1A3 + "111101" & X"000", -- 0x1A9: POP R00 + "111110" & X"000", -- 0x1AA: RET + "111100" & X"002", -- 0x1AB: PUSH R02 + "000011" & X"402", -- 0x1AC: MOV R02, 0x40 + "111011" & X"1B0", -- 0x1AD: CALL 0x1B0 + "111101" & X"002", -- 0x1AE: POP R02 + "111110" & X"000", -- 0x1AF: RET + "111011" & X"18C", -- 0x1B0: CALL 0x18C + "111100" & X"000", -- 0x1B1: PUSH R00 + "101010" & X"000", -- 0x1B2: SWAP R00 + "111011" & X"1C3", -- 0x1B3: CALL 0x1C3 + "111101" & X"000", -- 0x1B4: POP R00 + "111011" & X"1C3", -- 0x1B5: CALL 0x1C3 + "111110" & X"000", -- 0x1B6: RET + "111100" & X"002", -- 0x1B7: PUSH R02 + "000011" & X"002", -- 0x1B8: MOV R02, 0x00 + "111011" & X"1BC", -- 0x1B9: CALL 0x1BC + "111101" & X"002", -- 0x1BA: POP R02 + "111110" & X"000", -- 0x1BB: RET + "111011" & X"1D6", -- 0x1BC: CALL 0x1D6 + "101010" & X"000", -- 0x1BD: SWAP R00 + "111100" & X"000", -- 0x1BE: PUSH R00 + "111011" & X"1D6", -- 0x1BF: CALL 0x1D6 + "111101" & X"002", -- 0x1C0: POP R02 + "011010" & X"020", -- 0x1C1: OR R00, R02 + "111110" & X"000", -- 0x1C2: RET + "111100" & X"001", -- 0x1C3: PUSH R01 + "011001" & X"0F0", -- 0x1C4: AND R00, 0x0F + "000010" & X"001", -- 0x1C5: MOV R01, R00 + "011010" & X"021", -- 0x1C6: OR R01, R02 + "100100" & X"081", -- 0x1C7: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1C8: CALL 0x16E + "000010" & X"001", -- 0x1C9: MOV R01, R00 + "011010" & X"021", -- 0x1CA: OR R01, R02 + "011011" & X"801", -- 0x1CB: OR R01, 0x80 + "100100" & X"081", -- 0x1CC: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1CD: CALL 0x16E + "000010" & X"001", -- 0x1CE: MOV R01, R00 + "011010" & X"021", -- 0x1CF: OR R01, R02 + "100100" & X"081", -- 0x1D0: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1D1: CALL 0x16E + "011011" & X"201", -- 0x1D2: OR R01, 0x20 + "100100" & X"081", -- 0x1D3: XOUT (0x08), R01 + "111101" & X"001", -- 0x1D4: POP R01 + "111110" & X"000", -- 0x1D5: RET + "111100" & X"001", -- 0x1D6: PUSH R01 + "000011" & X"201", -- 0x1D7: MOV R01, 0x20 + "011010" & X"021", -- 0x1D8: OR R01, R02 + "100100" & X"081", -- 0x1D9: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1DA: CALL 0x16E + "000011" & X"201", -- 0x1DB: MOV R01, 0x20 + "011010" & X"021", -- 0x1DC: OR R01, R02 + "011011" & X"801", -- 0x1DD: OR R01, 0x80 + "100100" & X"081", -- 0x1DE: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1DF: CALL 0x16E + "101000" & X"080", -- 0x1E0: XIN R00, (0x08) + "011001" & X"0F0", -- 0x1E1: AND R00, 0x0F + "000011" & X"201", -- 0x1E2: MOV R01, 0x20 + "011010" & X"021", -- 0x1E3: OR R01, R02 + "100100" & X"081", -- 0x1E4: XOUT (0x08), R01 + "111011" & X"16E", -- 0x1E5: CALL 0x16E + "111101" & X"001", -- 0x1E6: POP R01 + "111110" & X"000", -- 0x1E7: RET + "011001" & X"0F0", -- 0x1E8: AND R00, 0x0F + "001111" & X"0A0", -- 0x1E9: CMP R00, 0x0A + "110101" & X"1EC", -- 0x1EA: JLT 0x1EC + "010001" & X"070", -- 0x1EB: ADD R00, 0x07 + "010001" & X"300", -- 0x1EC: ADD R00, 0x30 + "111110" & X"000", -- 0x1ED: RET + "111100" & X"000", -- 0x1EE: PUSH R00 + "111011" & X"1E8", -- 0x1EF: CALL 0x1E8 + "000010" & X"001", -- 0x1F0: MOV R01, R00 + "111101" & X"000", -- 0x1F1: POP R00 + "101010" & X"000", -- 0x1F2: SWAP R00 + "111011" & X"1E8", -- 0x1F3: CALL 0x1E8 + "111110" & X"000", -- 0x1F4: RET + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000", + "000000" & X"000" + ); + + signal jtag_ld_clk : STD_LOGIC; + signal jtag_ld_we : STD_LOGIC; + signal jtag_ld_addr : inst_addr_t; + signal jtag_ld_dout : inst_t; + signal jtag_ld_din : inst_t; + signal bs_rst, bs_sel, bs_shift, bs_tdi, bs_tdo : std_logic; + signal bs_capture, bs_clk0, bs_clk1, bs_update0, bs_update1 : std_logic; + signal user_regi, user_rego : unsigned (31 downto 0); + constant id : unsigned (31 downto 0) := X"BABE" & X"BEEF"; + +begin + +-------------------------------------------------------------------------- +-- Virtex-4: JTAG Loader +-------------------------------------------------------------------------- + i00_BUFG : BUFG + port map + ( + O => bs_clk1, + I => bs_clk0 + ); + + i01_BUFG : BUFG + port map + ( + O => bs_update1, + I => bs_update0 + ); + + BSCAN_VIRTEX4_inst1 : BSCAN_VIRTEX4 + generic map + ( + JTAG_CHAIN => 1 -- Value to set BSCAN site of device. Possible values: (1,2,3 or 4) + ) + port map + ( + CAPTURE => bs_capture, -- CAPTURE output from TAP controller + DRCK => bs_clk0, -- Data register output for USER functions + RESET => bs_rst, -- Reset output from TAP controller + SEL => bs_sel, -- USER active output + SHIFT => bs_shift, -- SHIFT output from TAP controller + TDI => bs_tdi, -- TDI output from TAP controller + UPDATE => bs_update0, -- UPDATE output from TAP controller + TDO => bs_tdo -- Data input for USER function + ); + + jtag_ld_addr <= user_regi(user_regi'left downto user_regi'left-inst_addr_t'length+1); + jtag_ld_din <= user_regi(inst_t'length-1 downto 0); + jtag_ld_clk <= bs_update1; + jtag_ld_we <= bs_sel; + +sipo: + process (bs_rst, bs_clk1, bs_tdi, bs_shift) + begin + if bs_rst = '1' then + user_regi <= (others => '0'); + elsif rising_edge(bs_clk1) then + if bs_shift = '1' then + user_regi <= bs_tdi & user_regi(user_regi'left downto 1); + end if; + end if; + end process; + +piso: + process (bs_rst, bs_clk1, bs_shift, user_rego) + begin + bs_tdo <= user_rego(0); + if bs_rst = '1' then + user_rego <= (others => '0'); + elsif rising_edge(bs_clk1) then + if bs_shift = '1' then + user_rego <= user_rego(0) & user_rego(user_rego'left downto 1); + else + user_rego <= (user_rego'left downto inst_t'length => '0') & jtag_ld_dout; +-- user_rego <= id; + end if; + end if; + end process; + +-------------------------------------------------------------------------- +-- ROM Read/Write +-------------------------------------------------------------------------- +PROM_READ: + process(clk, ce) + begin + if rising_edge(clk) and ce = '1' then + dout <= imem_rom(to_integer(addr)); + end if; + end process; + +PROM_WRITE: + process(jtag_ld_clk, jtag_ld_we) + begin + if rising_edge(jtag_ld_clk) then + if jtag_ld_we = '1' then + imem_rom(to_integer(jtag_ld_addr)) <= jtag_ld_din; + else + jtag_ld_dout <= imem_rom(to_integer(jtag_ld_addr)); + end if; + end if; + end process; + +-------------------------------------------------------------------------- +end loadable; diff --git a/projects/messe_demo/src/test_xrom.vhdl b/projects/messe_demo/src/test_xrom.vhdl new file mode 100644 index 0000000..ba06c33 --- /dev/null +++ b/projects/messe_demo/src/test_xrom.vhdl @@ -0,0 +1,317 @@ +------------------------------------------------------------------------- +-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL +-- This file: The ROM file for use in your VHDL design +-- +-- Copyright (C) 2007 J. Ahrensfeld +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- For questions and ideas, please contact the author at jens@jayfield.org +-- +-------------------------------------------------------------------------- + +LIBRARY ieee; +use IEEE.STD_LOGIC_1164.ALL; +USE ieee.numeric_std.ALL; + +library work; +use work.cpu_pkg.all; + +-- JASM_ROM_INSERT_HERE +ENTITY xrom IS + Port ( + clk : in STD_LOGIC; + ce : in STD_LOGIC; + addr : in dmem_addr_t; + dout : out dmem_data_t + ); +END xrom; + +ARCHITECTURE test OF xrom IS + + type xmem_rom_t is array (0 to 255) of dmem_data_t; + + -- Assembled from test.jsm + constant xmem_rom : xmem_rom_t := + ( + X"44", -- 0x00 + X"53", -- 0x01 + X"49", -- 0x02 + X"20", -- 0x03 + X"47", -- 0x04 + X"6D", -- 0x05 + X"62", -- 0x06 + X"48", -- 0x07 + X"20", -- 0x08 + X"42", -- 0x09 + X"72", -- 0x0A + X"65", -- 0x0B + X"6D", -- 0x0C + X"65", -- 0x0D + X"6E", -- 0x0E + X"20", -- 0x0F + X"00", -- 0x10 + X"4F", -- 0x11 + X"63", -- 0x12 + X"74", -- 0x13 + X"6F", -- 0x14 + X"62", -- 0x15 + X"65", -- 0x16 + X"72", -- 0x17 + X"20", -- 0x18 + X"32", -- 0x19 + X"30", -- 0x1A + X"30", -- 0x1B + X"37", -- 0x1C + X"20", -- 0x1D + X"20", -- 0x1E + X"20", -- 0x1F + X"20", -- 0x20 + X"00", -- 0x21 + X"20", -- 0x22 + X"20", -- 0x23 + X"20", -- 0x24 + X"45", -- 0x25 + X"6E", -- 0x26 + X"63", -- 0x27 + X"72", -- 0x28 + X"79", -- 0x29 + X"70", -- 0x2A + X"74", -- 0x2B + X"69", -- 0x2C + X"6F", -- 0x2D + X"6E", -- 0x2E + X"20", -- 0x2F + X"20", -- 0x30 + X"20", -- 0x31 + X"00", -- 0x32 + X"20", -- 0x33 + X"20", -- 0x34 + X"20", -- 0x35 + X"20", -- 0x36 + X"20", -- 0x37 + X"42", -- 0x38 + X"79", -- 0x39 + X"70", -- 0x3A + X"61", -- 0x3B + X"73", -- 0x3C + X"73", -- 0x3D + X"20", -- 0x3E + X"20", -- 0x3F + X"20", -- 0x40 + X"20", -- 0x41 + X"20", -- 0x42 + X"00", -- 0x43 + X"45", -- 0x44 + X"43", -- 0x45 + X"42", -- 0x46 + X"2D", -- 0x47 + X"31", -- 0x48 + X"32", -- 0x49 + X"38", -- 0x4A + X"20", -- 0x4B + X"65", -- 0x4C + X"6E", -- 0x4D + X"63", -- 0x4E + X"72", -- 0x4F + X"79", -- 0x50 + X"70", -- 0x51 + X"74", -- 0x52 + X"2E", -- 0x53 + X"00", -- 0x54 + X"43", -- 0x55 + X"42", -- 0x56 + X"43", -- 0x57 + X"2D", -- 0x58 + X"31", -- 0x59 + X"32", -- 0x5A + X"38", -- 0x5B + X"20", -- 0x5C + X"65", -- 0x5D + X"6E", -- 0x5E + X"63", -- 0x5F + X"72", -- 0x60 + X"79", -- 0x61 + X"70", -- 0x62 + X"74", -- 0x63 + X"2E", -- 0x64 + X"00", -- 0x65 + X"20", -- 0x66 + X"20", -- 0x67 + X"20", -- 0x68 + X"41", -- 0x69 + X"75", -- 0x6A + X"64", -- 0x6B + X"69", -- 0x6C + X"6F", -- 0x6D + X"20", -- 0x6E + X"64", -- 0x6F + X"61", -- 0x70 + X"74", -- 0x71 + X"61", -- 0x72 + X"20", -- 0x73 + X"20", -- 0x74 + X"20", -- 0x75 + X"00", -- 0x76 + X"20", -- 0x77 + X"49", -- 0x78 + X"6E", -- 0x79 + X"63", -- 0x7A + X"72", -- 0x7B + X"65", -- 0x7C + X"6D", -- 0x7D + X"2E", -- 0x7E + X"20", -- 0x7F + X"62", -- 0x80 + X"6C", -- 0x81 + X"6F", -- 0x82 + X"63", -- 0x83 + X"6B", -- 0x84 + X"73", -- 0x85 + X"20", -- 0x86 + X"00", -- 0x87 + X"56", -- 0x88 + X"6F", -- 0x89 + X"6C", -- 0x8A + X"75", -- 0x8B + X"6D", -- 0x8C + X"65", -- 0x8D + X"20", -- 0x8E + X"3A", -- 0x8F + X"20", -- 0x90 + X"00", -- 0x91 + X"20", -- 0x92 + X"20", -- 0x93 + X"20", -- 0x94 + X"20", -- 0x95 + X"20", -- 0x96 + X"20", -- 0x97 + X"20", -- 0x98 + X"20", -- 0x99 + X"20", -- 0x9A + X"20", -- 0x9B + X"20", -- 0x9C + X"20", -- 0x9D + X"20", -- 0x9E + X"20", -- 0x9F + X"20", -- 0xA0 + X"20", -- 0xA1 + X"00", -- 0xA2 + X"00", -- 0xA3 + X"2A", -- 0xA4 + X"00", -- 0xA5 + X"1A", -- 0xA6 + X"00", -- 0xA7 + X"1C", -- 0xA8 + X"00", -- 0xA9 + X"2C", -- 0xAA + X"00", -- 0xAB + X"32", -- 0xAC + X"00", -- 0xAD + X"20", -- 0xAE + X"00", -- 0xAF + X"02", -- 0xB0 + X"00", -- 0xB1 + X"04", -- 0xB2 + X"00", -- 0xB3 + X"18", -- 0xB4 + X"01", -- 0xB5 + X"00", -- 0xB6 + X"04", -- 0xB7 + X"04", -- 0xB8 + X"00", -- 0xB9 + X"00", -- 0xBA + X"80", -- 0xBB + X"BB", -- 0xBC + X"80", -- 0xBD + X"BB", -- 0xBE + X"00", -- 0xBF + X"80", -- 0xC0 + X"00", -- 0xC1 + X"00", -- 0xC2 + X"00", -- 0xC3 + X"80", -- 0xC4 + X"0A", -- 0xC5 + X"0A", -- 0xC6 + X"00", -- 0xC7 + X"00", -- 0xC8 + X"00", -- 0xC9 + X"00", -- 0xCA + X"00", -- 0xCB + X"00", -- 0xCC + X"00", -- 0xCD + X"00", -- 0xCE + X"00", -- 0xCF + X"00", -- 0xD0 + X"00", -- 0xD1 + X"00", -- 0xD2 + X"00", -- 0xD3 + X"00", -- 0xD4 + X"00", -- 0xD5 + X"00", -- 0xD6 + X"00", -- 0xD7 + X"00", -- 0xD8 + X"00", -- 0xD9 + X"00", -- 0xDA + X"00", -- 0xDB + X"00", -- 0xDC + X"00", -- 0xDD + X"00", -- 0xDE + X"00", -- 0xDF + X"00", -- 0xE0 + X"00", -- 0xE1 + X"00", -- 0xE2 + X"00", -- 0xE3 + X"00", -- 0xE4 + X"00", -- 0xE5 + X"00", -- 0xE6 + X"00", -- 0xE7 + X"00", -- 0xE8 + X"00", -- 0xE9 + X"00", -- 0xEA + X"00", -- 0xEB + X"00", -- 0xEC + X"00", -- 0xED + X"00", -- 0xEE + X"00", -- 0xEF + X"00", -- 0xF0 + X"00", -- 0xF1 + X"00", -- 0xF2 + X"00", -- 0xF3 + X"00", -- 0xF4 + X"00", -- 0xF5 + X"00", -- 0xF6 + X"00", -- 0xF7 + X"00", -- 0xF8 + X"00", -- 0xF9 + X"00", -- 0xFA + X"00", -- 0xFB + X"00", -- 0xFC + X"00", -- 0xFD + X"00", -- 0xFE + X"00" -- 0xFF + ); + +begin + +PROM_READ: + process(clk, ce) + begin + if rising_edge(clk) and ce = '1' then + dout <= xmem_rom(to_integer(addr)); + end if; + end process; + +end test; + diff --git a/projects/messe_demo/src/test_xrom_ld.vhdl b/projects/messe_demo/src/test_xrom_ld.vhdl new file mode 100644 index 0000000..7d66fc9 --- /dev/null +++ b/projects/messe_demo/src/test_xrom_ld.vhdl @@ -0,0 +1,413 @@ +------------------------------------------------------------------------- +-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL +-- This file: loadable ROM +-- +-- Copyright (C) 2007 J. Ahrensfeld +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . +-- +-- For questions and ideas, please contact the author at jens@jayfield.org +-- +-------------------------------------------------------------------------- + +LIBRARY ieee; +use IEEE.STD_LOGIC_1164.ALL; +USE ieee.numeric_std.ALL; + +library UNISIM; +use UNISIM.VComponents.all; + +library work; +use work.cpu_pkg.all; + +ENTITY xrom IS + Port ( + clk : in STD_LOGIC; + ce : in STD_LOGIC; + addr : in dmem_addr_t; + dout : out dmem_data_t + ); + +END xrom; + +ARCHITECTURE loadable OF xrom IS + + -- JASM_ROM_INSERT_HERE + + -- Assembled from test.jsm + type xmem_rom_t is array (0 to 255) of dmem_data_t; + signal xmem_rom : xmem_rom_t := + ( + X"44", -- 0x00 + X"53", -- 0x01 + X"49", -- 0x02 + X"20", -- 0x03 + X"47", -- 0x04 + X"6D", -- 0x05 + X"62", -- 0x06 + X"48", -- 0x07 + X"20", -- 0x08 + X"42", -- 0x09 + X"72", -- 0x0A + X"65", -- 0x0B + X"6D", -- 0x0C + X"65", -- 0x0D + X"6E", -- 0x0E + X"20", -- 0x0F + X"00", -- 0x10 + X"4F", -- 0x11 + X"63", -- 0x12 + X"74", -- 0x13 + X"6F", -- 0x14 + X"62", -- 0x15 + X"65", -- 0x16 + X"72", -- 0x17 + X"20", -- 0x18 + X"32", -- 0x19 + X"30", -- 0x1A + X"30", -- 0x1B + X"37", -- 0x1C + X"20", -- 0x1D + X"20", -- 0x1E + X"20", -- 0x1F + X"20", -- 0x20 + X"00", -- 0x21 + X"20", -- 0x22 + X"20", -- 0x23 + X"20", -- 0x24 + X"45", -- 0x25 + X"6E", -- 0x26 + X"63", -- 0x27 + X"72", -- 0x28 + X"79", -- 0x29 + X"70", -- 0x2A + X"74", -- 0x2B + X"69", -- 0x2C + X"6F", -- 0x2D + X"6E", -- 0x2E + X"20", -- 0x2F + X"20", -- 0x30 + X"20", -- 0x31 + X"00", -- 0x32 + X"20", -- 0x33 + X"20", -- 0x34 + X"20", -- 0x35 + X"20", -- 0x36 + X"20", -- 0x37 + X"42", -- 0x38 + X"79", -- 0x39 + X"70", -- 0x3A + X"61", -- 0x3B + X"73", -- 0x3C + X"73", -- 0x3D + X"20", -- 0x3E + X"20", -- 0x3F + X"20", -- 0x40 + X"20", -- 0x41 + X"20", -- 0x42 + X"00", -- 0x43 + X"45", -- 0x44 + X"43", -- 0x45 + X"42", -- 0x46 + X"2D", -- 0x47 + X"31", -- 0x48 + X"32", -- 0x49 + X"38", -- 0x4A + X"20", -- 0x4B + X"65", -- 0x4C + X"6E", -- 0x4D + X"63", -- 0x4E + X"72", -- 0x4F + X"79", -- 0x50 + X"70", -- 0x51 + X"74", -- 0x52 + X"2E", -- 0x53 + X"00", -- 0x54 + X"43", -- 0x55 + X"42", -- 0x56 + X"43", -- 0x57 + X"2D", -- 0x58 + X"31", -- 0x59 + X"32", -- 0x5A + X"38", -- 0x5B + X"20", -- 0x5C + X"65", -- 0x5D + X"6E", -- 0x5E + X"63", -- 0x5F + X"72", -- 0x60 + X"79", -- 0x61 + X"70", -- 0x62 + X"74", -- 0x63 + X"2E", -- 0x64 + X"00", -- 0x65 + X"20", -- 0x66 + X"20", -- 0x67 + X"20", -- 0x68 + X"41", -- 0x69 + X"75", -- 0x6A + X"64", -- 0x6B + X"69", -- 0x6C + X"6F", -- 0x6D + X"20", -- 0x6E + X"64", -- 0x6F + X"61", -- 0x70 + X"74", -- 0x71 + X"61", -- 0x72 + X"20", -- 0x73 + X"20", -- 0x74 + X"20", -- 0x75 + X"00", -- 0x76 + X"20", -- 0x77 + X"49", -- 0x78 + X"6E", -- 0x79 + X"63", -- 0x7A + X"72", -- 0x7B + X"65", -- 0x7C + X"6D", -- 0x7D + X"2E", -- 0x7E + X"20", -- 0x7F + X"62", -- 0x80 + X"6C", -- 0x81 + X"6F", -- 0x82 + X"63", -- 0x83 + X"6B", -- 0x84 + X"73", -- 0x85 + X"20", -- 0x86 + X"00", -- 0x87 + X"56", -- 0x88 + X"6F", -- 0x89 + X"6C", -- 0x8A + X"75", -- 0x8B + X"6D", -- 0x8C + X"65", -- 0x8D + X"20", -- 0x8E + X"3A", -- 0x8F + X"20", -- 0x90 + X"00", -- 0x91 + X"20", -- 0x92 + X"20", -- 0x93 + X"20", -- 0x94 + X"20", -- 0x95 + X"20", -- 0x96 + X"20", -- 0x97 + X"20", -- 0x98 + X"20", -- 0x99 + X"20", -- 0x9A + X"20", -- 0x9B + X"20", -- 0x9C + X"20", -- 0x9D + X"20", -- 0x9E + X"20", -- 0x9F + X"20", -- 0xA0 + X"20", -- 0xA1 + X"00", -- 0xA2 + X"00", -- 0xA3 + X"2A", -- 0xA4 + X"00", -- 0xA5 + X"1A", -- 0xA6 + X"00", -- 0xA7 + X"1C", -- 0xA8 + X"00", -- 0xA9 + X"2C", -- 0xAA + X"00", -- 0xAB + X"32", -- 0xAC + X"00", -- 0xAD + X"20", -- 0xAE + X"00", -- 0xAF + X"02", -- 0xB0 + X"00", -- 0xB1 + X"04", -- 0xB2 + X"00", -- 0xB3 + X"18", -- 0xB4 + X"01", -- 0xB5 + X"00", -- 0xB6 + X"04", -- 0xB7 + X"04", -- 0xB8 + X"00", -- 0xB9 + X"00", -- 0xBA + X"80", -- 0xBB + X"BB", -- 0xBC + X"80", -- 0xBD + X"BB", -- 0xBE + X"00", -- 0xBF + X"80", -- 0xC0 + X"00", -- 0xC1 + X"00", -- 0xC2 + X"00", -- 0xC3 + X"80", -- 0xC4 + X"0A", -- 0xC5 + X"0A", -- 0xC6 + X"00", -- 0xC7 + X"00", -- 0xC8 + X"00", -- 0xC9 + X"00", -- 0xCA + X"00", -- 0xCB + X"00", -- 0xCC + X"00", -- 0xCD + X"00", -- 0xCE + X"00", -- 0xCF + X"00", -- 0xD0 + X"00", -- 0xD1 + X"00", -- 0xD2 + X"00", -- 0xD3 + X"00", -- 0xD4 + X"00", -- 0xD5 + X"00", -- 0xD6 + X"00", -- 0xD7 + X"00", -- 0xD8 + X"00", -- 0xD9 + X"00", -- 0xDA + X"00", -- 0xDB + X"00", -- 0xDC + X"00", -- 0xDD + X"00", -- 0xDE + X"00", -- 0xDF + X"00", -- 0xE0 + X"00", -- 0xE1 + X"00", -- 0xE2 + X"00", -- 0xE3 + X"00", -- 0xE4 + X"00", -- 0xE5 + X"00", -- 0xE6 + X"00", -- 0xE7 + X"00", -- 0xE8 + X"00", -- 0xE9 + X"00", -- 0xEA + X"00", -- 0xEB + X"00", -- 0xEC + X"00", -- 0xED + X"00", -- 0xEE + X"00", -- 0xEF + X"00", -- 0xF0 + X"00", -- 0xF1 + X"00", -- 0xF2 + X"00", -- 0xF3 + X"00", -- 0xF4 + X"00", -- 0xF5 + X"00", -- 0xF6 + X"00", -- 0xF7 + X"00", -- 0xF8 + X"00", -- 0xF9 + X"00", -- 0xFA + X"00", -- 0xFB + X"00", -- 0xFC + X"00", -- 0xFD + X"00", -- 0xFE + X"00" -- 0xFF + ); + + signal jtag_ld_clk : STD_LOGIC; + signal jtag_ld_we : STD_LOGIC; + signal jtag_ld_addr : dmem_addr_t; + signal jtag_ld_dout : dmem_data_t; + signal jtag_ld_din : dmem_data_t; + signal bs_rst, bs_sel, bs_shift, bs_tdi, bs_tdo : std_logic; + signal bs_capture, bs_clk0, bs_clk1, bs_update0, bs_update1 : std_logic; + signal user_regi, user_rego : unsigned (15 downto 0); + constant id : unsigned (15 downto 0) := X"BEEF"; + +begin + +-------------------------------------------------------------------------- +-- Virtex-4: JTAG Loader +-------------------------------------------------------------------------- + i00_BUFG : BUFG + port map + ( + O => bs_clk1, + I => bs_clk0 + ); + + i01_BUFG : BUFG + port map + ( + O => bs_update1, + I => bs_update0 + ); + + BSCAN_VIRTEX4_inst2 : BSCAN_VIRTEX4 + generic map + ( + JTAG_CHAIN => 2 -- Value to set BSCAN site of device. Possible values: (1,2,3 or 4) + ) + port map + ( + CAPTURE => bs_capture, -- CAPTURE output from TAP controller + DRCK => bs_clk0, -- Data register output for USER functions + RESET => bs_rst, -- Reset output from TAP controller + SEL => bs_sel, -- USER active output + SHIFT => bs_shift, -- SHIFT output from TAP controller + TDI => bs_tdi, -- TDI output from TAP controller + UPDATE => bs_update0, -- UPDATE output from TAP controller + TDO => bs_tdo -- Data input for USER function + ); + + jtag_ld_addr <= user_regi(user_regi'left downto user_regi'left-dmem_data_t'length+1); + jtag_ld_din <= user_regi(dmem_data_t'left downto 0); + jtag_ld_clk <= bs_update1; + jtag_ld_we <= bs_sel; + +sipo: + process (bs_rst, bs_clk1, bs_tdi, bs_shift) + begin + if bs_rst = '1' then + user_regi <= (others => '0'); + elsif rising_edge(bs_clk1) then + if bs_shift = '1' then + user_regi <= bs_tdi & user_regi(user_regi'left downto 1); + end if; + end if; + end process; + +piso: + process (bs_rst, bs_clk1, bs_shift, user_rego) + begin + bs_tdo <= user_rego(0); + if bs_rst = '1' then + user_rego <= (others => '0'); + elsif rising_edge(bs_clk1) then + if bs_shift = '1' then + user_rego <= user_rego(0) & user_rego(user_rego'left downto 1); + else + user_rego <= (user_rego'left downto dmem_data_t'length => '0') & jtag_ld_dout; +-- user_rego <= id; + end if; + end if; + end process; + +-------------------------------------------------------------------------- +-- ROM Read/Write +-------------------------------------------------------------------------- +PROM_READ: + process(clk, ce) + begin + if rising_edge(clk) and ce = '1' then + dout <= xmem_rom(to_integer(addr)); + end if; + end process; + +PROM_WRITE: + process(jtag_ld_clk, jtag_ld_we) + begin + if rising_edge(jtag_ld_clk) then + if jtag_ld_we = '1' then + xmem_rom(to_integer(jtag_ld_addr)) <= jtag_ld_din; + else + jtag_ld_dout <= xmem_rom(to_integer(jtag_ld_addr)); + end if; + end if; + end process; + +-------------------------------------------------------------------------- +end loadable; diff --git a/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.lso b/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.lso new file mode 100644 index 0000000..22de730 --- /dev/null +++ b/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.lso @@ -0,0 +1 @@ +work diff --git a/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.prj b/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.prj new file mode 100644 index 0000000..21d80ec --- /dev/null +++ b/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.prj @@ -0,0 +1,19 @@ +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_gf_2exp8_arith.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_definitions.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/tech_iface_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_row_ops.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_column_ops.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/engine_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_common.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/aux_funcs.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_encryption.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/tech_subkey_memory_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/tech_sbox_stage_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_128.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/encryption_engine.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_mode_encryption.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_core_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/CBC_128/cbc_128_encryption_core.vhd" diff --git a/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.xst b/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.xst new file mode 100644 index 0000000..866abdd --- /dev/null +++ b/projects/messe_demo/syn/ise81/aes_cbc/cbc_128_encryption_core.xst @@ -0,0 +1,55 @@ +set -tmpdir ./xst/projnav.tmp +set -xsthdpdir ./xst +run +-ifn cbc_128_encryption_core.prj +-ifmt mixed +-ofn cbc_128_encryption_core +-ofmt NGC +-p xc4vsx35-10-ff668 +-top cbc_128_encryption_core +-opt_mode Speed +-opt_level 1 +-iuc NO +-lso cbc_128_encryption_core.lso +-keep_hierarchy NO +-rtlview Yes +-glob_opt AllClockNets +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case maintain +-slice_utilization_ratio 100 +-dsp_utilization_ratio 100 +-verilog2001 YES +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style lut +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-mux_style Auto +-decoder_extract YES +-priority_extract YES +-shreg_extract YES +-shift_extract YES +-xor_collapse YES +-rom_style Auto +-mux_extract YES +-resource_sharing YES +-use_dsp48 auto +-iobuf NO +-max_fanout 500 +-bufg 32 +-bufr 24 +-register_duplication YES +-register_balancing No +-slice_packing YES +-optimize_primitives NO +-use_clock_enable Auto +-use_sync_set Auto +-use_sync_reset Auto +-iob auto +-equivalent_register_removal YES +-slice_utilization_ratio_maxmargin 5 diff --git a/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.lso b/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.lso new file mode 100644 index 0000000..22de730 --- /dev/null +++ b/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.lso @@ -0,0 +1 @@ +work diff --git a/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.prj b/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.prj new file mode 100644 index 0000000..3b42387 --- /dev/null +++ b/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.prj @@ -0,0 +1,19 @@ +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_gf_2exp8_arith.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_definitions.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/tech_iface_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_row_ops.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_column_ops.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/engine_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_common.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/dual_sbox_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/aux_funcs.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/aes_encryption.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/tech_subkey_memory_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/tech_sbox_stage_virtex2.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/key_schedule_128.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/encryption_engine.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_mode_encryption.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_core_iface.vhd" +vhdl work "W:/vhdl/projects/messe_demo/src/AES_32bit_datapath/enc/ECB_128/ecb_128_encryption_core.vhd" diff --git a/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.xst b/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.xst new file mode 100644 index 0000000..ff0fd61 --- /dev/null +++ b/projects/messe_demo/syn/ise81/aes_ecb/ecb_128_encryption_core.xst @@ -0,0 +1,55 @@ +set -tmpdir ./xst/projnav.tmp +set -xsthdpdir ./xst +run +-ifn ecb_128_encryption_core.prj +-ifmt mixed +-ofn ecb_128_encryption_core +-ofmt NGC +-p xc4vsx35-10-ff668 +-top ecb_128_encryption_core +-opt_mode Speed +-opt_level 1 +-iuc NO +-lso ecb_128_encryption_core.lso +-keep_hierarchy NO +-rtlview Yes +-glob_opt AllClockNets +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case maintain +-slice_utilization_ratio 100 +-dsp_utilization_ratio 100 +-verilog2001 YES +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style lut +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-mux_style Auto +-decoder_extract YES +-priority_extract YES +-shreg_extract YES +-shift_extract YES +-xor_collapse YES +-rom_style Auto +-mux_extract YES +-resource_sharing YES +-use_dsp48 auto +-iobuf NO +-max_fanout 500 +-bufg 32 +-bufr 24 +-register_duplication YES +-register_balancing No +-slice_packing YES +-optimize_primitives NO +-use_clock_enable Auto +-use_sync_set Auto +-use_sync_reset Auto +-iob auto +-equivalent_register_removal YES +-slice_utilization_ratio_maxmargin 5 diff --git a/projects/messe_demo/syn/ise91/project/messe_demo.lso b/projects/messe_demo/syn/ise91/project/messe_demo.lso new file mode 100644 index 0000000..22de730 --- /dev/null +++ b/projects/messe_demo/syn/ise91/project/messe_demo.lso @@ -0,0 +1 @@ +work diff --git a/projects/messe_demo/syn/ise91/project/messe_demo.prj b/projects/messe_demo/syn/ise91/project/messe_demo.prj new file mode 100644 index 0000000..6cd472a --- /dev/null +++ b/projects/messe_demo/syn/ise91/project/messe_demo.prj @@ -0,0 +1,18 @@ +vhdl work "../src/AES_32bit_datapath/aes_definitions.vhd" +vhdl work "../src/cpu_pkg.vhd" +vhdl work "../src/AES_32bit_datapath/enc/tech_iface_virtex2.vhd" +vhdl work "../src/ac97_ctrl/singleshot.vhd" +vhdl work "../src/AES_32bit_datapath/enc/engine_iface.vhd" +vhdl work "../src/test_irom_ld.vhdl" +vhdl work "../src/ac97_ctrl/ac_out.vhd" +vhdl work "../src/ac97_ctrl/ac_in.vhd" +vhdl work "../src/AES_32bit_datapath/enc/key_schedule_iface.vhd" +vhdl work "../src/AES_32bit_datapath/enc/ECB_128/ecb_mode_iface.vhd" +vhdl work "../src/AES_32bit_datapath/enc/CBC_128/cbc_mode_iface.vhd" +vhdl work "../src/test_xrom_ld.vhdl" +vhdl work "../src/lcd_port.vhd" +vhdl work "../src/cpu_embedded.vhd" +vhdl work "../src/ac97_ctrl/ac_io.vhd" +vhdl work "../src/AES_32bit_datapath/enc/ECB_128/ecb_core_iface.vhd" +vhdl work "../src/AES_32bit_datapath/enc/CBC_128/cbc_core_iface.vhd" +vhdl work "../src/demo_top.vhd" diff --git a/projects/messe_demo/syn/ise91/project/messe_demo.ut b/projects/messe_demo/syn/ise91/project/messe_demo.ut new file mode 100644 index 0000000..70c9397 --- /dev/null +++ b/projects/messe_demo/syn/ise91/project/messe_demo.ut @@ -0,0 +1,33 @@ +-w +-g DebugBitstream:No +-g Binary:no +-g CRC:Enable +-g ConfigRate:4 +-g CclkPin:PullUp +-g M0Pin:PullUp +-g M1Pin:PullUp +-g M2Pin:PullUp +-g ProgPin:PullUp +-g DonePin:PullUp +-g InitPin:Pullup +-g CsPin:Pullup +-g DinPin:Pullup +-g BusyPin:Pullup +-g RdWrPin:Pullup +-g TckPin:PullUp +-g TdiPin:PullUp +-g TdoPin:PullUp +-g TmsPin:PullUp +-g UnusedPin:PullDown +-g UserID:0xFFFFFFFF +-g DCIUpdateMode:AsRequired +-g StartUpClk:JtagClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Match_cycle:Auto +-g Security:None +-g DonePipe:No +-g DriveDone:No +-g Encrypt:No diff --git a/projects/messe_demo/syn/ise91/project/messe_demo.xst b/projects/messe_demo/syn/ise91/project/messe_demo.xst new file mode 100644 index 0000000..5f4b24e --- /dev/null +++ b/projects/messe_demo/syn/ise91/project/messe_demo.xst @@ -0,0 +1,59 @@ +set -tmpdir "./xst/projnav.tmp" +set -xsthdpdir "./xst" +run +-ifn messe_demo.prj +-ifmt mixed +-ofn messe_demo +-ofmt NGC +-p xc4vfx12-10-ff668 +-top messe_demo +-opt_mode Speed +-opt_level 1 +-power NO +-iuc NO +-lso messe_demo.lso +-keep_hierarchy NO +-rtlview Yes +-glob_opt AllClockNets +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case maintain +-slice_utilization_ratio 100 +-bram_utilization_ratio 100 +-dsp_utilization_ratio 100 +-verilog2001 YES +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style lut +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-mux_style Auto +-decoder_extract YES +-priority_extract YES +-shreg_extract NO +-shift_extract YES +-xor_collapse YES +-rom_style Auto +-auto_bram_packing NO +-mux_extract YES +-resource_sharing YES +-async_to_sync NO +-use_dsp48 auto +-iobuf YES +-max_fanout 500 +-bufg 32 +-bufr 16 +-register_duplication YES +-register_balancing No +-slice_packing YES +-optimize_primitives NO +-use_clock_enable Auto +-use_sync_set Auto +-use_sync_reset Auto +-iob auto +-equivalent_register_removal YES +-slice_utilization_ratio_maxmargin 5 diff --git a/projects/messe_demo/syn/ise91/project/messe_demo_vhdl.prj b/projects/messe_demo/syn/ise91/project/messe_demo_vhdl.prj new file mode 100644 index 0000000..ed73f4e --- /dev/null +++ b/projects/messe_demo/syn/ise91/project/messe_demo_vhdl.prj @@ -0,0 +1,18 @@ +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\aes_definitions.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\cpu_pkg.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\enc\tech_iface_virtex2.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\ac97_ctrl\singleshot.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\enc\engine_iface.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\test_irom_ld.vhdl" +vhdl work "W:\vhdl\projects\messe_demo\src\ac97_ctrl\ac_out.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\ac97_ctrl\ac_in.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\enc\key_schedule_iface.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\enc\ECB_128\ecb_mode_iface.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\enc\CBC_128\cbc_mode_iface.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\test_xrom_ld.vhdl" +vhdl work "W:\vhdl\projects\messe_demo\src\lcd_port.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\cpu_embedded.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\ac97_ctrl\ac_io.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\enc\ECB_128\ecb_core_iface.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\AES_32bit_datapath\enc\CBC_128\cbc_core_iface.vhd" +vhdl work "W:\vhdl\projects\messe_demo\src\demo_top.vhd" diff --git a/projects/messe_demo/syn/ise91/project/ml402.ucf b/projects/messe_demo/syn/ise91/project/ml402.ucf new file mode 100644 index 0000000..a781d82 --- /dev/null +++ b/projects/messe_demo/syn/ise91/project/ml402.ucf @@ -0,0 +1,97 @@ +#CONFIG STEPPING="ES"; + +# Bus clock nets +NET "sys_clk_in" TNM_NET = "sys_clk"; +NET "ac97_bit_clk" TNM_NET = "ac97_clk"; +TIMESPEC "TSSYSCLK" = PERIOD "sys_clk" 9.9 ns HIGH 50 %; +TIMESPEC "TSBITCLK" = PERIOD "ac97_clk" 80 ns HIGH 50 %; + +NET sys_clk_in LOC = AE14; +NET sys_clk_in IOSTANDARD = LVCMOS33; +NET sys_rst_n_in LOC = D6; +NET sys_rst_n_in PULLUP; +NET sys_rst_n_in TIG; + +//////////////////////////////////////////////////////////////////////////// +// AC97 Sound Controller +//////////////////////////////////////////////////////////////////////////// +NET ac97_bit_clk LOC = AE10; +NET ac97_bit_clk IOSTANDARD = LVCMOS33; +NET ac97_bit_clk PERIOD = 80; +NET ac97_sdata_in LOC = AD16; +NET ac97_sdata_in IOSTANDARD = LVCMOS33; +NET ac97_reset_n LOC = AD10; +NET ac97_reset_n IOSTANDARD = LVCMOS33; +NET ac97_reset_n TIG; +NET ac97_reset_n SLEW = SLOW; +NET ac97_sdata_out LOC = C8; +NET ac97_sdata_out SLEW = FAST; +NET ac97_sync LOC = D9; +NET ac97_sync SLEW = FAST; + +//////////////////////////////////////////////////////////////////////////// +// RS-232 +//////////////////////////////////////////////////////////////////////////// +NET sys_rx LOC = W2; +NET sys_rx IOSTANDARD = LVCMOS33; +NET sys_rx TIG; +NET "sys_tx" LOC = "W1"; +NET sys_tx IOSTANDARD = LVCMOS33; +NET "sys_tx" TIG; + +//////////////////////////////////////////////////////////////////////////// +// Buttons, LEDs, and DIP Switches +//////////////////////////////////////////////////////////////////////////// +# GPLED 0-3 +NET "sys_led<0>" LOC = "G5"; #GPLED0 +NET "sys_led<1>" LOC = "G6"; #GPLED1 +NET "sys_led<2>" LOC = "A11"; #GPLED2 +NET "sys_led<3>" LOC = "A12"; #GPLED3 +# North-East-South-West-Center LEDs +NET "sys_led<4>" LOC = "F9"; # W LED +NET "sys_led<5>" LOC = "E2"; # N LED +NET "sys_led<6>" LOC = "E10"; # E LED +NET "sys_led<7>" LOC = "A5"; # S LED +NET "sys_led<8>" LOC = "C6"; # C LED +NET "sys_led<*>" TIG; +NET "sys_led<*>" SLEW = SLOW; +NET "sys_led<*>" DRIVE = 2; +NET "sys_led<*>" TIG; +# North-East-South-West-Center Buttons +NET "sys_btn<0>" LOC = "E9"; # W Button +NET "sys_btn<1>" LOC = "E7"; # N Button +NET "sys_btn<2>" LOC = "F10"; # E Button +NET "sys_btn<3>" LOC = "A6"; # S Button +NET "sys_btn<4>" LOC = "B6"; # C Button +NET "sys_btn<*>" TIG; +# Dip Switches 1-8 +NET "sys_dip<7>" LOC = "U24"; # DIP SW 8 +NET "sys_dip<6>" LOC = "U25"; # DIP SW 7 +NET "sys_dip<5>" LOC = "V23"; # DIP SW 6 +NET "sys_dip<4>" LOC = "U23"; # DIP SW 5 +NET "sys_dip<3>" LOC = "U26"; # DIP SW 4 +NET "sys_dip<2>" LOC = "T26"; # DIP SW 3 +NET "sys_dip<1>" LOC = "R19"; # DIP SW 2 +NET "sys_dip<0>" LOC = "R20"; # DIP SW 1 +NET "sys_dip<*>" IOSTANDARD = LVCMOS33; +NET "sys_dip<*>" TIG; + +//////////////////////////////////////////////////////////////////////////// +// LCD +//////////////////////////////////////////////////////////////////////////// +NET sys_lcd_e LOC = AE13; # LCD_E +NET sys_lcd_e IOSTANDARD = LVCMOS33; +NET sys_lcd_e TIG; +NET sys_lcd_rs LOC = AC17; # LCD_RS +NET sys_lcd_rs IOSTANDARD = LVCMOS33; +NET sys_lcd_rs TIG; +NET sys_lcd_rw LOC = AB17; # LCD_RW +NET sys_lcd_rw IOSTANDARD = LVCMOS33; +NET sys_lcd_rw TIG; +NET sys_lcd_d<3> LOC = AF12; # LCD_DB7 +NET sys_lcd_d<2> LOC = AE12; # LCD_DB6 +NET sys_lcd_d<1> LOC = AC10; # LCD_DB5 +NET sys_lcd_d<0> LOC = AB10; # LCD_DB4 +NET sys_lcd_d<*> IOSTANDARD = LVCMOS33; +NET sys_lcd_d<*> TIG; +NET sys_lcd_d<*> PULLDOWN; diff --git a/projects/messe_demo/syn/ise91/project/ml403.ucf b/projects/messe_demo/syn/ise91/project/ml403.ucf new file mode 100644 index 0000000..190106b --- /dev/null +++ b/projects/messe_demo/syn/ise91/project/ml403.ucf @@ -0,0 +1,97 @@ +#CONFIG STEPPING="ES"; + +# Bus clock nets +NET "sys_clk_in" TNM_NET = "sys_clk"; +NET "ac97_bit_clk" TNM_NET = "ac97_clk"; +TIMESPEC "TSSYSCLK" = PERIOD "sys_clk" 9.9 ns HIGH 50 %; +TIMESPEC "TSBITCLK" = PERIOD "ac97_clk" 80 ns HIGH 50 %; + +NET sys_clk_in LOC = AE14; +NET sys_clk_in IOSTANDARD = LVCMOS33; +NET sys_rst_n_in LOC = D6; +NET sys_rst_n_in PULLUP; +NET sys_rst_n_in TIG; + +//////////////////////////////////////////////////////////////////////////// +// AC97 Sound Controller +//////////////////////////////////////////////////////////////////////////// +NET ac97_bit_clk LOC = AE10; +NET ac97_bit_clk IOSTANDARD = LVCMOS33; +NET ac97_bit_clk PERIOD = 80; +NET ac97_sdata_in LOC = AD16; +NET ac97_sdata_in IOSTANDARD = LVCMOS33; +NET ac97_reset_n LOC = AD10; +NET ac97_reset_n IOSTANDARD = LVCMOS33; +NET ac97_reset_n TIG; +NET ac97_reset_n SLEW = SLOW; +NET ac97_sdata_out LOC = C8; +NET ac97_sdata_out SLEW = FAST; +NET ac97_sync LOC = D9; +NET ac97_sync SLEW = FAST; + +//////////////////////////////////////////////////////////////////////////// +// RS-232 +//////////////////////////////////////////////////////////////////////////// +NET sys_rx LOC = W2; +NET sys_rx IOSTANDARD = LVCMOS33; +NET sys_rx TIG; +NET "sys_tx" LOC = "W1"; +NET sys_tx IOSTANDARD = LVCMOS33; +NET "sys_tx" TIG; + +//////////////////////////////////////////////////////////////////////////// +// Buttons, LEDs, and DIP Switches +//////////////////////////////////////////////////////////////////////////// +# GPLED 0-3 +NET "sys_led<0>" LOC = "G5"; #GPLED0 +NET "sys_led<1>" LOC = "G6"; #GPLED1 +NET "sys_led<2>" LOC = "A11"; #GPLED2 +NET "sys_led<3>" LOC = "A12"; #GPLED3 +# North-East-South-West-Center LEDs +NET "sys_led<4>" LOC = "F9"; # W LED +NET "sys_led<5>" LOC = "E2"; # N LED +NET "sys_led<6>" LOC = "E10"; # E LED +NET "sys_led<7>" LOC = "A5"; # S LED +NET "sys_led<8>" LOC = "C6"; # C LED +NET "sys_led<*>" TIG; +NET "sys_led<*>" SLEW = SLOW; +NET "sys_led<*>" DRIVE = 2; +NET "sys_led<*>" TIG; +# North-East-South-West-Center Buttons +NET "sys_btn<0>" LOC = "E9"; # W Button +NET "sys_btn<1>" LOC = "E7"; # N Button +NET "sys_btn<2>" LOC = "F10"; # E Button +NET "sys_btn<3>" LOC = "A6"; # S Button +NET "sys_btn<4>" LOC = "B6"; # C Button +NET "sys_btn<*>" TIG; +# Dip Switches 1-8 +#NET "sys_dip<7>" LOC = "U24"; # DIP SW 8 +#NET "sys_dip<6>" LOC = "U25"; # DIP SW 7 +#NET "sys_dip<5>" LOC = "V23"; # DIP SW 6 +#NET "sys_dip<4>" LOC = "U23"; # DIP SW 5 +#NET "sys_dip<3>" LOC = "U26"; # DIP SW 4 +#NET "sys_dip<2>" LOC = "T26"; # DIP SW 3 +#NET "sys_dip<1>" LOC = "R19"; # DIP SW 2 +#NET "sys_dip<0>" LOC = "R20"; # DIP SW 1 +#NET "sys_dip<*>" IOSTANDARD = LVCMOS33; +#NET "sys_dip<*>" TIG; + +//////////////////////////////////////////////////////////////////////////// +// LCD +//////////////////////////////////////////////////////////////////////////// +NET sys_lcd_e LOC = AE13; # LCD_E +NET sys_lcd_e IOSTANDARD = LVCMOS33; +NET sys_lcd_e TIG; +NET sys_lcd_rs LOC = AC17; # LCD_RS +NET sys_lcd_rs IOSTANDARD = LVCMOS33; +NET sys_lcd_rs TIG; +NET sys_lcd_rw LOC = AB17; # LCD_RW +NET sys_lcd_rw IOSTANDARD = LVCMOS33; +NET sys_lcd_rw TIG; +NET sys_lcd_d<3> LOC = AF12; # LCD_DB7 +NET sys_lcd_d<2> LOC = AE12; # LCD_DB6 +NET sys_lcd_d<1> LOC = AC10; # LCD_DB5 +NET sys_lcd_d<0> LOC = AB10; # LCD_DB4 +NET sys_lcd_d<*> IOSTANDARD = LVCMOS33; +NET sys_lcd_d<*> TIG; +NET sys_lcd_d<*> PULLDOWN;