'**************************************************************** '* Name : Bello_Pulse2.BAS * '* Author : Godfried-Willem RAES * '* Notice : Copyleft (c) 2015 Logosoft Public Domain * '* Date : 07.04.2015 * '* Version : 1.2 * '* Notes : Based Bello_Pulse_1 board * '**************************************************************** '08.06.2013: PIC: 18F2525 On MidiHub board, 1 relay, 7 out's '20.03.2015: This code should have two main loops: powerdown_loop and active_loop '21.03.2015: powerdown loop added. '26.03.2015: mapping for the puls board '31.03.2015: Further development of firmware ' this is the model for pulse board 1 ' serving 220V, 110V and 24V bells ' Tested on the led test board under GMT and firmware uploaded. '31.03.2015: Mapping adapted to board 2 ' all bells on this board work on 12V '01.04.2015: Tested on the robot, note 77 burned out... ' no bug here... ' the non-playing note 81 was a typing error here though. '02.04.2015: New version uploaded. '07.04.2015: individual velo scaling lookups added. ' This is on the limit of variable space for this pic '13.04.2015: Keypressure settings reset on powerdown added Include "18F2525.inc" 'version for the Bello board. (40MHz) 'Include "18F2520.inc" 'also possible. (40MHz) 'Include "18F25K20.inc" 'for test & debug on an Amicus board. (64MHz) ' Mapping defines for midi-events on pin outputs and inputs: $define Out_12 PORTC.5 ' 81 $define Out_11 PORTC.4 ' 80 $define Out_10 PORTC.3 ' 79 $define Out_9 PORTC.2 ' 78 can pwm $define Out_8 PORTC.1 ' 77 can pwm $define Out_7 PORTC.0 ' 76 $define Out_6 PORTA.5 ' 75 $define Out_5 PORTA.4 ' 74 $define Out_4 PORTA.3 ' 73 nc $define Out_3 PORTA.2 ' 72 nc $define Out_2 PORTA.1 ' 71 $define Out_1 PORTA.0 ' 70 $define Green_Led PORTB.2 ' on board square green LED 'red LED for debug: $define Debug_Led PORTB.5 ' for testing - red led - watchdog ' configure the input and output pins: Clear SSPCON1.5 'RC3 must be available for I/O TRISA = %01000000 'bits set to 0 are output, 1 = input TRISB = %11100000 TRISC = %11000000 'RC1 en RC2 zijn pwm outputs and must be set to output 'RC6 en RC7 zijn USART I/O and must be set to input 'constant definitions: 'initialisations for the midi input parser: Symbol Midichannel = 13 ' Balmec channel Symbol NoteOff_Status = 128 + Midichannel ' 2 bytes follow Symbol NoteOn_Status = 144 + Midichannel Symbol Keypres_Status = 160 + Midichannel ' 2 bytes follow Symbol Control_Status = 176 + Midichannel Symbol ProgChange_Status = 192 + Midichannel ' 1 byte message Symbol Aftertouch_Status = 208 + Midichannel ' 1 byte follows Symbol Pitchbend_Status = 224 + Midichannel ' lsb msb follow 'application specific constants Symbol NrTasks = 12 ' maximum 16 'Symbol fPWM = PWMminF * 4 ' in avoidance of audible artifacts ' not used in this code Symbol note1 = 70 'steel dome Symbol note2 = 71 ' inox Symbol note3 = 58 ' so far unmounted ' was 72, changed 05.04.2015 note 72 is now on board1, out5 Symbol note4 = 73 ' unmounted, we use the Siemens bell for this note Symbol note5 = 74 ' Friedland dome Symbol note6 = 75 ' Friedland Symbol note7 = 76 ' Funke Symbol note8 = 77 ' Funke with Black Knight solenoid Symbol note9 = 78 ' Friedland Symbol note10 = 79 ' inox Symbol note11 = 80 ' Funke with green dome Symbol note12 = 81 ' Funke dome ' Setup the USART Declare Hserial_Baud = 31250 ' Set baud rate for the USART to MIDI specs. Declare Hserial_TXSTA = 0x24 ' instead of the normal 0x20 - ?? 0x24 Declare All_Digital = True ' Declare Hserial_Clear = On ' should clear on errors. Bytes get lost of course... ' Create variables Dim Cnt As Dword System Dim CntHw As Cnt.Word1 'used in the timer0 interrupt, to create a 32 bit timer Dim CntLw As TMR0L.Word 'this is the trick to read both TMR0L and TMR0H 'it makes Cntlw the low word of cnt 'We still have to copy the contents of Lw to Cnt ' Dim Tim3 As TMR3L.Word Dim Bytein As Byte System ' midi byte read from buffer Dim StBit As Bytein.7 ' highest bit of ByteIn Dim i As Byte System ' general purpose counter ' midi variables Dim statusbyte As Byte System Dim noteUit As Byte System ' note off + release value Dim release As Byte System Dim noteAan As Byte System ' note on + release value Dim velo As Byte System Dim notePres As Byte System ' note pressure + pressure value Dim pres As Byte System Dim Ctrl As Byte System ' continuous controller + value Dim value As Byte System Dim prog As Byte System ' program change + program-byte ' Dim aft As Byte System ' channel aftertouch ' Dim pblsb As Byte System ' pitch bend lsb ' Dim pbmsb As Byte System ' pitch bend msb Dim veltim As Dword System ' 32 bit velo Dim VelFlags As Word System ' bits 0 - 15 used as flags for active timers Dim CC66 As Byte System ' global on/off switch Dim st As Byte System Dim b1 As Byte System Dim b2 As Byte System Dim Notes As Word System ' bits used as flags Dim Rate_0 As Word System Dim Rate_1 As Word System ' set with keypressure Dim Rate_2 As Word System Dim Rate_3 As Word System Dim Rate_4 As Word System Dim Rate_5 As Word System Dim Rate_6 As Word System Dim Rate_7 As Word System Dim Rate_8 As Word System Dim Rate_9 As Word System Dim Rate_10 As Word System Dim Rate_11 As Word System ' Dim Rate_12 As Word System ' Dim pw1 As Byte System ' PwmLite1 ' Dim pw2 As Byte System '----------------------------------------------------------------------------------------- ' Load the USART Interrupt handler And buffer read subroutines into memory 'Include "ADC.inc" ' Load the ADC macros into the program - used in the IRQ include. Include "Propeller_Irq.inc" ' our own version for UART And Timer0/3 Interrupt 'Include "Timers.inc" ' required for velo support with timed pulses and periods. 'framework for a multitasker: Dim Task_rsi[NrTasks] As Word 'task reschedule interval (period), if 0 the task is not active 'max. value limited to 65535. For longer periods, it will have to 'become dword!!! Dim Velmsb[NrTasks] As Word 'the application for velo-timers, is in fact just a one-shot task Dim VelLsb[NrTasks] As Word Dim Permsb[NrTasks] As Word Dim PerLsb[NrTasks] As Word Dim Dur[128] As Word ' duration lookup for repetitions 'Dim Vels[128] As Word ' velocity lookup table Dim Vels0[128] As Word Dim Vels1[128] As Word Dim Vels2[128] As Word Dim Vels3[128] As Word Dim Vels4[128] As Word Dim Vels5[128] As Word Dim Vels6[128] As Word Dim Vels7[128] As Word Dim Vels8[128] As Word Dim Vels9[128] As Word Dim Vels10[128] As Word Dim Vels11[128] As Word 'DeclareDwordArray(TimeVals , NrTasks) 'alternative using the macro's. [not yet used] ' assigning values syntax: DwordArray Timvals,[i], value ' reading values syntax: value = DwordArray TimVals,[i] 'make sure we initialize the used pins on start up: 'fault?: there should be no executable statements outside the main program. Low Green_Led Low Out_1 Low Out_2 Low Out_3 Low Out_4 Low Out_5 Low Out_6 Low Out_7 Low Out_8 Low Out_9 Low Out_10 Low Out_11 Low Out_12 Low Debug_Led Clear Rate_0 Clear Rate_1 Clear Rate_2 Clear Rate_3 Clear Rate_4 Clear Rate_5 Clear Rate_6 Clear Rate_7 Clear Rate_8 Clear Rate_9 Clear Rate_10 Clear Rate_11 'HPWM 2, 0, fPWM ' connected to RC1 'HPWM 1, 0, fPWM ' connected to RC2 Clear CC66 GoSub Dur_Lookup ' repetitions periods GoSub Vels_Lookup '----------------------------------------------------------------------------------------- ' Main program starts here MAIN: High Debug_Led DelayMS 50 ' wait for stability Low Debug_Led Clear VelFlags Clear Notes Init_Usart_Interrupt ' Initiate the USART serial buffer interrupt ' this procedure is in the include file Clear_Serial_Buffer ' Clear the serial buffer and reset its pointers ' in the include as well ' Configure Timer0 for: ' Clear TMR0L and TMR0H registers ' Interrupt on Timer0 overflow ' 16-bit operation ' Internal clock source 40MHz ' 1:256 Prescaler : thus 40MHz / 256 = 156.250kHz ' Opentimer0 (Timer_INT_On & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256) in macro file. Clear T1CON Clear IntConBits_T0IF ' clear interrupt flag Set INTCONBITS_T0IE ' enable interrupt on overflow T0CON = %10000111 ' bit 7 = enable/disable ' bit 6 = 1=8 bit, 0=16 bit ' bit 5 = 1 pin input, 0= Internal Clk0 ' bit 4 = HL or LH transition when bit5 =1 ' bit 3 = 1= bypass prescaler, 0= input from prescaler ' bit 2-0 = prescaler select: 111= 1:256 ' Setup the High priorities for the interrupts ' open and start timer3 for sampling: Clear T3CON Clear PIR2BITS_TMR3IF ' clear IRQ flag Set PIE2BITS_TMR3IE ' irq on ' Clear Tim3 ' Clear TMR3L And TMR3H registers Set RCONbits_IPEN ' Enable priority interrupts Clear IPR2bits_TMR3IP ' Set Timer3 as a low priority interrupt source ' we can also set T3Con in one instruction as: T3CON = %10110000 ' oef, now it works... ' bit 7 = 16 bit mode ' bit 6,3 = 0, 0 ' bit 5,4 = 1:8 prescale ' bit 2 = 0 ' bit 1 = 0 Internal clock = Fosc/4 ' bit 0 : 1= enable timer 3, 0= disable set to 0 for Whisper! ' maximum count = 52.42ms, 1 tick =0.8uS, lowest freq.=19Hz ' wait for controller 66 to get set: 'GoTo Sleep_Loop ' this is not working ' start the main program loop: (it starts here as soon as CC66 ON is received). LOOP: ' Create an infinite loop Bytein = HRSIn ' Read data from the serial buffer, with no timeout ' Start the midi parser. Midi_Parse: If Bytein > Control_Status Then ' here higher statusses are not implemented. If Bytein > 253 Then '254 = midiclock, 255= reset 'midiclock can interrupt all other msg's... '255 had to be intercepted since thats what we 'get when no new byte flows in (?) GoTo Check_Timers 'throw away... Else Clear statusbyte 'reset the status byte GoTo Check_Timers 'throw away End If EndIf If StBit =1 Then 'should be faster than If Bytein > 127 Then 'status byte received, bit 7 is set Clear statusbyte 'if on another channel, the statusbyte needs a reset Select Bytein 'eqv to Select case ByteIn Case NoteOff_Status statusbyte = Bytein Set noteUit '= 255 'reset value. Cannot be 0 !!! Set release '= 255 '0 is a valid midi note! Case NoteOn_Status statusbyte = Bytein Set noteAan '= 255 Set velo '= 255 Case Keypres_Status ' used for note repetition speed statusbyte = Bytein Set notePres '= 255 Set pres '= 255 Case Control_Status ' only 66 and 123 statusbyte = Bytein Set Ctrl '= 255 Set value '= 255 ' Case ProgChange_Status ' statusbyte = Bytein ' prog = 255 ' Case Aftertouch_Status ' statusbyte = Bytein ' aft = 255 ' Case Pitchbend_Status ' statusbyte = Bytein ' pblsb = 255 ' pbmsb = 255 End Select Else 'midi byte is 7 bits Select statusbyte Case 0 'not a message for this channel GoTo Check_Timers 'disregard Case NoteOff_Status If noteUit = 255 Then noteUit = Bytein Else 'release = Bytein 'message complete, so we can do the action... Select noteUit Case note1 Clear VelFlags.0 Clear Out_1 Clear Notes.0 Case note2 Clear VelFlags.1 Clear Out_2 Clear Notes.1 Case note3 Clear VelFlags.2 Clear Out_3 Clear Notes.2 Case note4 Clear VelFlags.3 Clear Out_4 Clear Notes.3 Case note5 Clear VelFlags.4 Clear Out_5 Clear Notes.4 Case note6 Clear VelFlags.5 Clear Out_6 Clear Notes.5 Case note7 Clear VelFlags.6 Clear Out_7 Clear Notes.6 Case note8 Clear VelFlags.7 Clear Out_8 Clear Notes.7 Case note9 Clear VelFlags.8 ' = Velflags1.0 Clear Out_9 Clear Notes.8 Case note10 Clear VelFlags.9 ' = Velflags1.1 Clear Out_10 Clear Notes.9 Case note11 Clear VelFlags.10 ' = Velflags1.2 Clear Out_11 Clear Notes.10 Case note12 Clear VelFlags.11 ' = Velflags1.3 Clear Out_12 Clear Notes.11 End Select Set noteUit '= 255 'reset EndIf GoTo Check_Timers Case NoteOn_Status If noteAan = 255 Then noteAan = Bytein Else velo = Bytein If velo = 0 Then Select noteAan Case note1 Clear VelFlags.0 Clear Out_1 ' 70 Clear Notes.0 Case note2 Clear VelFlags.1 Clear Out_2 Clear Notes.1 Case note3 Clear VelFlags.2 Clear Out_3 Clear Notes.2 Case note4 Clear VelFlags.3 Clear Out_4 Clear Notes.3 Case note5 Clear VelFlags.4 Clear Out_5 Clear Notes.4 Case note6 Clear VelFlags.5 Clear Out_6 Clear Notes.5 Case note7 Clear VelFlags.6 Clear Out_7 Clear Notes.6 Case note8 Clear VelFlags.7 Clear Out_8 Clear Notes.7 Case note9 Clear VelFlags.8 ' = Velflags1.0 Clear Out_9 Clear Notes.8 Case note10 Clear VelFlags.9 ' = Velflags1.1 Clear Out_10 Clear Notes.9 Case note11 ' nout mounted yet Clear VelFlags.10 ' = Velflags1.2 Clear Out_11 Clear Notes.10 Case note12 Clear VelFlags.11 ' = Velflags1.3 Clear Out_12 Clear Notes.11 End Select Set noteAan '= 255 'reset !!! GoTo Check_Timers 'jump out EndIf Select noteAan Case note1 'hier moeten we een pulse timer starten, duur evenredig met velo 'na afloop van de puls moet een wachttimer ingeschakeld worden 'voor zover een repeat speed is ingesteld met keypressure ' na de wachttijd moet een nieuwe puls gegeven worden met de bestaande velo ' note off schakelt de repeats uiteraard uit. If Rate_0 > 0 Then Set Notes.0 ' set flag only if note is to be repeated. Set VelFlags.0 Cnt.Word0 = CntLw 'read timer ' stroke duration should never be larger than 16ms (= 60Hz bell) Task_rsi[0] = Vels0[velo] ' use lookup veltim = Cnt + Task_rsi[0] 'add the period duration Velmsb[0] = veltim.Word1 VelLsb[0] = veltim.Word0 Set Out_1 Case note2 If Rate_1 > 0 Then Set Notes.1 ' set flag only if note is to be repeated. Set VelFlags.1 Cnt.Word0 = CntLw 'read timer ' stroke duration should never be larger than 16ms (= 60Hz bell) Task_rsi[1] = Vels1[velo] ' use lookup veltim = Cnt + Task_rsi[1] 'add the period duration Velmsb[1] = veltim.Word1 VelLsb[1] = veltim.Word0 Set Out_2 Case note3 If Rate_2 > 0 Then Set Notes.2 ' set flag only if note is to be repeated. Set VelFlags.2 Cnt.Word0 = CntLw 'read timer Task_rsi[2] = Vels2[velo] ' use lookup veltim = Cnt + Task_rsi[2] 'add the period duration Velmsb[2] = veltim.Word1 VelLsb[2] = veltim.Word0 Set Out_3 Case note4 If Rate_3 > 0 Then Set Notes.3 ' set flag only if note is to be repeated. Set VelFlags.3 Cnt.Word0 = CntLw 'read timer Task_rsi[3] = Vels3[velo] ' use lookup veltim = Cnt + Task_rsi[3] 'add the period duration Velmsb[3] = veltim.Word1 VelLsb[3] = veltim.Word0 Set Out_4 Case note5 If Rate_4 > 0 Then Set Notes.4 ' set flag only if note is to be repeated. Set VelFlags.4 Cnt.Word0 = CntLw 'read timer Task_rsi[4] = Vels4[velo] ' use lookup veltim = Cnt + Task_rsi[4] 'add the period duration Velmsb[4] = veltim.Word1 VelLsb[4] = veltim.Word0 Set Out_5 Case note6 If Rate_5 > 0 Then Set Notes.5 ' set flag only if note is to be repeated. Set VelFlags.5 Cnt.Word0 = CntLw 'read timer Task_rsi[5] = Vels5[velo] ' use lookup veltim = Cnt + Task_rsi[5] 'add the period duration Velmsb[5] = veltim.Word1 VelLsb[5] = veltim.Word0 Set Out_6 Case note7 If Rate_6 > 0 Then Set Notes.6 ' set flag only if note is to be repeated. Set VelFlags.6 Cnt.Word0 = CntLw 'read timer Task_rsi[6] = Vels6[velo] ' use lookup veltim = Cnt + Task_rsi[6] 'add the period duration Velmsb[6] = veltim.Word1 VelLsb[6] = veltim.Word0 Set Out_7 Case note8 If Rate_7 > 0 Then Set Notes.7 ' set flag only if note is to be repeated. Set VelFlags.7 Cnt.Word0 = CntLw 'read timer Task_rsi[7] = Vels7[velo] ' use lookup veltim = Cnt + Task_rsi[7] 'add the period duration Velmsb[7] = veltim.Word1 VelLsb[7] = veltim.Word0 Set Out_8 Case note9 If Rate_8 > 0 Then Set Notes.8 ' set flag only if note is to be repeated. Set VelFlags.8 Cnt.Word0 = CntLw 'read timer Task_rsi[8] = Vels8[velo] ' use lookup veltim = Cnt + Task_rsi[8] 'add the period duration Velmsb[8] = veltim.Word1 VelLsb[8] = veltim.Word0 Set Out_9 Case note10 If Rate_9 > 0 Then Set Notes.9 ' set flag only if note is to be repeated. Set VelFlags.9 Cnt.Word0 = CntLw 'read timer Task_rsi[9] = Vels9[velo] ' use lookup veltim = Cnt + Task_rsi[9] 'add the period duration Velmsb[9] = veltim.Word1 VelLsb[9] = veltim.Word0 Set Out_10 Case note11 If Rate_10 > 0 Then Set Notes.10 ' set flag only if note is to be repeated. Set VelFlags.10 Cnt.Word0 = CntLw 'read timer Task_rsi[10] = Vels10[velo] ' use lookup veltim = Cnt + Task_rsi[10] 'add the period duration Velmsb[10] = veltim.Word1 VelLsb[10] = veltim.Word0 Set Out_11 Case note12 If Rate_11 > 0 Then Set Notes.11 ' set flag only if note is to be repeated. Set VelFlags.11 Cnt.Word0 = CntLw 'read timer Task_rsi[11] = Vels11[velo] ' use lookup veltim = Cnt + Task_rsi[11] 'add the period duration Velmsb[11] = veltim.Word1 VelLsb[11] = veltim.Word0 Set Out_12 End Select Set noteAan '= 255 'reset EndIf GoTo Check_Timers Case Keypres_Status 'used for note repetition speed modulation If notePres = 255 Then notePres = Bytein Else pres = Bytein GoSub KeyPres EndIf GoTo Check_Timers Case Control_Status 'this is where the action takes place for controllers If Ctrl = 255 Then Ctrl = Bytein Else value = Bytein GoSub Controller EndIf 'if CC66 > 0 then ' GoTo Check_Timers 'else ' Goto Sleep_Loop 'endif End Select EndIf Check_Timers: ' here we check the Task counters and compare them with the 32 bit cnt value ' using the Velflags word variable: If VelFlags.0 = 1 Then veltim.Word1 = Velmsb[0] veltim.Word0 = VelLsb[0] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note 61 Clear Out_1 Clear VelFlags.0 ' stop the pulse timer 'IF repeats are set, than, start a new timer for the wait time If Notes.0 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_0 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_0 Permsb[0] = veltim.Word1 PerLsb[0] = veltim.Word0 Else Clear Notes.0 ' no repeats End If EndIf EndIf Else If Notes.0 = 1 Then ' the velflags.0 bit must be off at this time veltim.Word1 = Permsb[0] veltim.Word0 = PerLsb[0] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note 51 /73 ' restart the velo pulse timer Set VelFlags.0 'Cnt.Word0 = CntLw 'read timer 'Task_rsi[0] = Vels[velo] stored already as we are repeating a note veltim = Cnt + Task_rsi[0] 'add the pulse duration Velmsb[0] = veltim.Word1 VelLsb[0] = veltim.Word0 Set Out_1 EndIf Else Clear Out_1 EndIf EndIf If VelFlags.1 = 1 Then veltim.Word1 = Velmsb[1] veltim.Word0 = VelLsb[1] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then ' was GoSub Task1 'note 62 Clear Out_2 ' bij terugslag bellen ontstaat pas nu de klank Clear VelFlags.1 ' stop the pulse timer If Notes.1 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_1 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_1 Permsb[1] = veltim.Word1 PerLsb[1] = veltim.Word0 Else Clear Notes.1 ' no repeats End If EndIf End If Else If Notes.1 = 1 Then veltim.Word1 = Permsb[1] veltim.Word0 = PerLsb[1] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note 62 Set VelFlags.1 veltim = Cnt + Task_rsi[1] 'add the pulse duration Velmsb[1] = veltim.Word1 VelLsb[1] = veltim.Word0 Set Out_2 EndIf Else Clear Out_2 EndIf EndIf If VelFlags.2 = 1 Then veltim.Word1 = Velmsb[2] veltim.Word0 = VelLsb[2] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then ' was GoSub Task2 'note 63 Clear Out_3 ' bij terugslag bellen ontstaat pas nu de klank Clear VelFlags.2 ' stop the pulse timer If Notes.2 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_2 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_2 Permsb[2] = veltim.Word1 PerLsb[2] = veltim.Word0 Else Clear Notes.2 ' no repeats End If EndIf End If Else If Notes.2 = 1 Then veltim.Word1 = Permsb[2] veltim.Word0 = PerLsb[2] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note 63 Set VelFlags.2 veltim = Cnt + Task_rsi[2] 'add the pulse duration Velmsb[2] = veltim.Word1 VelLsb[2] = veltim.Word0 Set Out_3 EndIf Else Clear Out_3 EndIf EndIf If VelFlags.3 = 1 Then veltim.Word1 = Velmsb[3] veltim.Word0 = VelLsb[3] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then ' was GoSub Task3 'note 64 Clear Out_4 ' bij terugslag bellen ontstaat pas nu de klank Clear VelFlags.3 ' stop the pulse timer If Notes.3 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_3 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_3 Permsb[3] = veltim.Word1 PerLsb[3] = veltim.Word0 Else Clear Notes.3 ' no repeats End If EndIf EndIf Else If Notes.3 = 1 Then veltim.Word1 = Permsb[3] veltim.Word0 = PerLsb[3] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note 64 Set VelFlags.3 veltim = Cnt + Task_rsi[3] 'add the pulse duration Velmsb[3] = veltim.Word1 VelLsb[3] = veltim.Word0 Set Out_4 EndIf Else Clear Out_4 EndIf EndIf If VelFlags.4 = 1 Then veltim.Word1 = Velmsb[4] veltim.Word0 = VelLsb[4] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'GoSub Task4 'note 66 Clear Out_5 ' bij terugslag bellen ontstaat pas nu de klank Clear VelFlags.4 ' stop the pulse timer If Notes.4 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_4 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_4 Permsb[4] = veltim.Word1 PerLsb[4] = veltim.Word0 Else Clear Notes.4 ' no repeats End If EndIf EndIf Else If Notes.4 = 1 Then veltim.Word1 = Permsb[4] veltim.Word0 = PerLsb[4] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note 64 Set VelFlags.4 veltim = Cnt + Task_rsi[4] 'add the pulse duration Velmsb[4] = veltim.Word1 VelLsb[4] = veltim.Word0 Set Out_5 EndIf Else Clear Out_5 EndIf EndIf If VelFlags.5 = 1 Then veltim.Word1 = Velmsb[5] veltim.Word0 = VelLsb[5] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then Clear Out_6 Clear VelFlags.5 ' stop the pulse timer If Notes.5 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_5 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_5 Permsb[5] = veltim.Word1 PerLsb[5] = veltim.Word0 Else Clear Notes.5 ' no repeats End If EndIf EndIf Else If Notes.5 = 1 Then veltim.Word1 = Permsb[5] veltim.Word0 = PerLsb[5] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note 64 Set VelFlags.5 veltim = Cnt + Task_rsi[5] 'add the pulse duration Velmsb[5] = veltim.Word1 VelLsb[5] = veltim.Word0 Set Out_6 EndIf Else Clear Out_6 EndIf EndIf If VelFlags.6 = 1 Then veltim.Word1 = Velmsb[6] veltim.Word0 = VelLsb[6] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then Clear Out_7 Clear VelFlags.6 ' stop the pulse timer If Notes.6 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_6 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_6 Permsb[6] = veltim.Word1 PerLsb[6] = veltim.Word0 Else Clear Notes.6 ' no repeats End If EndIf EndIf Else If Notes.6 = 1 Then veltim.Word1 = Permsb[6] veltim.Word0 = PerLsb[6] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note Set VelFlags.6 veltim = Cnt + Task_rsi[6] 'add the pulse duration Velmsb[6] = veltim.Word1 VelLsb[6] = veltim.Word0 Set Out_7 EndIf Else Clear Out_7 EndIf EndIf If VelFlags.7 = 1 Then veltim.Word1 = Velmsb[7] veltim.Word0 = VelLsb[7] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then Clear Out_8 Clear VelFlags.7 ' stop the pulse timer If Notes.7 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_7 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_7 Permsb[7] = veltim.Word1 PerLsb[7] = veltim.Word0 Else Clear Notes.7 ' no repeats End If EndIf EndIf Else If Notes.7 = 1 Then veltim.Word1 = Permsb[7] veltim.Word0 = PerLsb[7] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note Set VelFlags.7 veltim = Cnt + Task_rsi[7] 'add the pulse duration Velmsb[7] = veltim.Word1 VelLsb[7] = veltim.Word0 Set Out_8 EndIf Else Clear Out_8 EndIf EndIf If VelFlags.8 = 1 Then veltim.Word1 = Velmsb[8] veltim.Word0 = VelLsb[8] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then Clear Out_9 Clear VelFlags.8 ' stop the pulse timer If Notes.8 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_8 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_8 Permsb[8] = veltim.Word1 PerLsb[8] = veltim.Word0 Else Clear Notes.8 ' no repeats End If EndIf EndIf Else If Notes.8 = 1 Then veltim.Word1 = Permsb[8] veltim.Word0 = PerLsb[8] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note Set VelFlags.8 veltim = Cnt + Task_rsi[8] 'add the pulse duration Velmsb[8] = veltim.Word1 VelLsb[8] = veltim.Word0 Set Out_9 EndIf Else Clear Out_9 EndIf EndIf If VelFlags.9 = 1 Then veltim.Word1 = Velmsb[9] veltim.Word0 = VelLsb[9] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then Clear Out_10 Clear VelFlags.9 ' stop the pulse timer If Notes.9 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_9 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_9 Permsb[9] = veltim.Word1 PerLsb[9] = veltim.Word0 Else Clear Notes.9 ' no repeats End If EndIf EndIf Else If Notes.9 = 1 Then veltim.Word1 = Permsb[9] veltim.Word0 = PerLsb[9] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note Set VelFlags.9 veltim = Cnt + Task_rsi[9] 'add the pulse duration Velmsb[9] = veltim.Word1 VelLsb[9] = veltim.Word0 Set Out_10 EndIf Else Clear Out_10 EndIf EndIf If VelFlags.10 = 1 Then veltim.Word1 = Velmsb[10] veltim.Word0 = VelLsb[10] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then Clear Out_11 Clear VelFlags.10 ' stop the pulse timer If Notes.10 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_10 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_10 Permsb[10] = veltim.Word1 PerLsb[10] = veltim.Word0 Else Clear Notes.10 ' no repeats End If EndIf EndIf Else If Notes.10 = 1 Then veltim.Word1 = Permsb[10] veltim.Word0 = PerLsb[10] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note Set VelFlags.10 veltim = Cnt + Task_rsi[10] 'add the pulse duration Velmsb[10] = veltim.Word1 VelLsb[10] = veltim.Word0 Set Out_11 EndIf Else Clear Out_11 EndIf EndIf If VelFlags.11 = 1 Then veltim.Word1 = Velmsb[11] veltim.Word0 = VelLsb[11] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then Clear Out_12 Clear VelFlags.11 ' stop the pulse timer If Notes.11 = 1 Then ' zoniet zouden we hier nooit mogen terecht komen... If Rate_11 > 0 Then Cnt.Word0 = CntLw veltim = Cnt + Rate_11 Permsb[11] = veltim.Word1 PerLsb[11] = veltim.Word0 Else Clear Notes.11 ' no repeats End If EndIf EndIf Else If Notes.11 = 1 Then veltim.Word1 = Permsb[11] veltim.Word0 = PerLsb[11] Cnt.Word0 = CntLw 'read counter If Cnt >= veltim Then 'note Set VelFlags.11 veltim = Cnt + Task_rsi[11] 'add the pulse duration Velmsb[11] = veltim.Word1 VelLsb[11] = veltim.Word0 Set Out_12 EndIf Else Clear Out_12 EndIf EndIf If VelFlags + Notes = 0 Then If CntHw > 0xFF Then Clear CntHw Low PORTA Clear Out_7 Clear Out_8 Clear Out_9 Clear Out_10 Clear Out_11 Clear Out_12 EndIf EndIf GoTo LOOP ' end of the main loop KeyPres: 'the note to which the pressure should be applied is passed in NotePres, the value in Pres 'here we use it for note repeats '20.08.2013: coding modified such that the repetition period is only refreshed after the previous ' timer flip over. ' Thus we can make smoother accel. and decel. Select notePres Case note1 If pres > 0 Then Rate_0 = Dur[pres] Else Clear Rate_0 EndIf Case note2 If pres > 0 Then Rate_1 = Dur[pres] Else Clear Rate_1 EndIf Case note3 If pres > 0 Then Rate_2 = Dur[pres] Else Clear Rate_2 EndIf Case note4 If pres > 0 Then Rate_3 = Dur[pres] Else Clear Rate_3 EndIf Case note5 If pres > 0 Then Rate_4 = Dur[pres] Else Clear Rate_4 EndIf Case note6 If pres > 0 Then Rate_5 = Dur[pres] Else Clear Rate_5 EndIf Case note7 If pres > 0 Then Rate_6 = Dur[pres] Else Clear Rate_6 EndIf Case note8 If pres > 0 Then Rate_7 = Dur[pres] Else Clear Rate_7 EndIf Case note9 If pres > 0 Then Rate_8 = Dur[pres] Else Clear Rate_8 EndIf Case note10 If pres > 0 Then Rate_9 = Dur[pres] Else Clear Rate_9 EndIf Case note11 If pres > 0 Then Rate_10 = Dur[pres] Else Clear Rate_10 EndIf Case note12 If pres > 0 Then Rate_11 = Dur[pres] Else Clear Rate_11 EndIf End Select Set notePres '= 255 Return 'ProgChange: ' Set prog '= 255 'this is not realy required 'Return 'Pitchbend: ' 'only implemented on dsPIC based robots ' Set pblsb '= 255 'Return 'Aftertouch: ' 'this is the channel aftertouch, affecting all notes ' Set aft '= 255 'not mandatory 'Return Controller: Select Ctrl Case 66 'on/off for the robot If value = 0 Then GoSub PowerDown 'GoTo Sleep_Loop ' disregarding any other midi messages ' does not work from within a gosub Else Set Green_Led Set CC66 EndIf Case 123 GoSub AllNotesOff End Select Set Ctrl '= 255 'mandatory reset Return AllNotesOff: Clear VelFlags Clear Notes Clear Out_1 Clear Out_2 Clear Out_3 Clear Out_4 Clear Out_5 Clear Out_6 Clear Out_7 Clear Out_8 Clear Out_9 Clear Out_10 Clear Out_11 Clear Out_12 Return PowerDown: Clear VelFlags 'stop all running timers Clear Notes Clear Green_Led Clear Out_1 Clear Out_2 Clear Out_3 Clear Out_4 Clear Out_5 Clear Out_6 Clear Out_7 Clear Out_8 Clear Out_9 Clear Out_10 Clear Out_11 Clear Out_12 Clear Rate_0 Clear Rate_1 Clear Rate_2 Clear Rate_3 Clear Rate_4 Clear Rate_5 Clear Rate_6 Clear Rate_7 Clear Rate_8 Clear Rate_9 Clear Rate_10 Clear Rate_11 Clear CC66 Return Sleep_Loop: ' the program enters this loop when CC66 is OFF. ' In this state it only listens to CC66 becoming set. ' Create an infinite loop Bytein = HRSIn ' Read data from the serial buffer, with no timeout ' Start the midi parser. 'Midi_Parse: If Bytein > Control_Status Then ' here higher statusses are not implemented. If Bytein > 253 Then '254 = midiclock, 255= reset 'midiclock can interrupt all other msg's... '255 had to be intercepted since thats what we 'get when no new byte flows in (?) Else Clear statusbyte 'reset the status byte EndIf EndIf If StBit =1 Then 'should be faster than If Bytein > 127 Then 'status byte received, bit 7 is set Clear statusbyte 'if on another channel, the statusbyte needs a reset Select Bytein 'eqv to Select case ByteIn Case Control_Status ' only 123 statusbyte = Bytein Set Ctrl '= 255 Set value '= 255 End Select Else 'midi byte is 7 bits Select statusbyte Case Control_Status 'this is where the action takes place for controllers If Ctrl = 255 Then Ctrl = Bytein Else value = Bytein If value > 0 Then If Ctrl = 66 Then Set Green_Led Set CC66 GoTo LOOP 'exit sleep modo in power down and perform the main program EndIf EndIf EndIf End Select End Select EndIf GoTo Sleep_Loop Dur_Lookup: '31.03.2015: for these bells a good range would be fastest = 30 Hz, slowest = 1 Hz 'hence: ' Dur[1] = 39930 ' = 1Hz or MM60 ' For i = 2 To 127 ' Dur[i] = Dur[i-1] - 304 ' Next i Dur[1]= 41667 ' freq= .999992000063999 Dur[2]= 39065 ' freq= 1.06659840436879 Dur[3]= 37826 ' freq= 1.1015350993144 Dur[4]= 36626 ' freq= 1.13762536631537 Dur[5]= 35464 ' freq= 1.17490036844876 Dur[6]= 34339 ' freq= 1.21339196443305 Dur[7]= 33249 ' freq= 1.25317052141919 Dur[8]= 32195 ' freq= 1.29419682145261 Dur[9]= 31173 ' freq= 1.3366267817235 Dur[10]= 30184 ' freq= 1.38042229878964 Dur[11]= 29227 ' freq= 1.42562242675152 Dur[12]= 28299 ' freq= 1.47237240420745 Dur[13]= 27402 ' freq= 1.52057027467581 Dur[14]= 26532 ' freq= 1.57043067490829 Dur[15]= 25691 ' freq= 1.62183903571938 Dur[16]= 24876 ' freq= 1.67497454038699 Dur[17]= 24086 ' freq= 1.72991225885023 Dur[18]= 23322 ' freq= 1.78658205414058 Dur[19]= 22582 ' freq= 1.84512738759484 Dur[20]= 21866 ' freq= 1.90554590078966 Dur[21]= 21172 ' freq= 1.96800806096102 Dur[22]= 20501 ' freq= 2.03242118270653 Dur[23]= 19850 ' freq= 2.09907640638119 Dur[24]= 19220 ' freq= 2.16788067984738 Dur[25]= 18611 ' freq= 2.23881933623484 Dur[26]= 18020 ' freq= 2.31224565297817 Dur[27]= 17449 ' freq= 2.38791143714062 Dur[28]= 16895 ' freq= 2.4662128834961 Dur[29]= 16359 ' freq= 2.54701795138252 Dur[30]= 15840 ' freq= 2.63047138047138 Dur[31]= 15338 ' freq= 2.71656452384057 Dur[32]= 14851 ' freq= 2.80564720669764 Dur[33]= 14380 ' freq= 2.89754288363468 Dur[34]= 13924 ' freq= 2.99243512400651 Dur[35]= 13482 ' freq= 3.09054047371804 Dur[36]= 13054 ' freq= 3.19186966957765 Dur[37]= 12640 ' freq= 3.2964135021097 Dur[38]= 12239 ' freq= 3.40441757224174 Dur[39]= 11851 ' freq= 3.51587770370995 Dur[40]= 11475 ' freq= 3.63108206245461 Dur[41]= 11111 ' freq= 3.750037500375 Dur[42]= 10758 ' freq= 3.87308669517258 Dur[43]= 10417 ' freq= 3.99987200409587 Dur[44]= 10086 ' freq= 4.13113887236433 Dur[45]= 9766 ' freq= 4.26650283295788 Dur[46]= 9457 ' freq= 4.40590744069648 Dur[47]= 9157 ' freq= 4.55025299406647 Dur[48]= 8866 ' freq= 4.69960147379502 Dur[49]= 8585 ' freq= 4.8534265191225 Dur[50]= 8313 ' freq= 5.01222984081158 Dur[51]= 8049 ' freq= 5.17662649604506 Dur[52]= 7793 ' freq= 5.34667864322683 Dur[53]= 7546 ' freq= 5.52168919515858 Dur[54]= 7307 ' freq= 5.70229460334839 Dur[55]= 7075 ' freq= 5.88928150765606 Dur[56]= 6851 ' freq= 6.08183720138179 Dur[57]= 6633 ' freq= 6.28172269963315 Dur[58]= 6423 ' freq= 6.48710363796772 Dur[59]= 6219 ' freq= 6.69989816154794 Dur[60]= 6022 ' freq= 6.91907450459426 Dur[61]= 5831 ' freq= 7.14571542902875 Dur[62]= 5646 ' freq= 7.37985594521195 Dur[63]= 5467 ' freq= 7.62148649472593 Dur[64]= 5293 ' freq= 7.87203224384407 Dur[65]= 5125 ' freq= 8.13008130081301 Dur[66]= 4963 ' freq= 8.39545973537511 Dur[67]= 4805 ' freq= 8.67152271938952 Dur[68]= 4653 ' freq= 8.95479618883874 Dur[69]= 4505 ' freq= 9.24898261191269 Dur[70]= 4362 ' freq= 9.55219318355494 Dur[71]= 4224 ' freq= 9.86426767676768 Dur[72]= 4090 ' freq= 10.1874490627547 Dur[73]= 3960 ' freq= 10.5218855218855 Dur[74]= 3834 ' freq= 10.867675186924 Dur[75]= 3713 ' freq= 11.2218331986713 Dur[76]= 3595 ' freq= 11.5901715345387 Dur[77]= 3481 ' freq= 11.969740496026 Dur[78]= 3371 ' freq= 12.3603282903194 Dur[79]= 3264 ' freq= 12.765522875817 Dur[80]= 3160 ' freq= 13.1856540084388 Dur[81]= 3060 ' freq= 13.6165577342048 Dur[82]= 2963 ' freq= 14.0623242209472 Dur[83]= 2869 ' freq= 14.523062623446 Dur[84]= 2778 ' freq= 14.9988000959923 Dur[85]= 2690 ' freq= 15.4894671623296 Dur[86]= 2604 ' freq= 16.0010240655402 Dur[87]= 2522 ' freq= 16.5212794078773 Dur[88]= 2442 ' freq= 17.0625170625171 Dur[89]= 2364 ' freq= 17.6254935138184 Dur[90]= 2289 ' freq= 18.202999854376 Dur[91]= 2217 ' freq= 18.7941662907833 Dur[92]= 2146 ' freq= 19.4159676918298 Dur[93]= 2078 ' freq= 20.0513314084055 Dur[94]= 2012 ' freq= 20.7090788601723 Dur[95]= 1948 ' freq= 21.3894592744695 Dur[96]= 1887 ' freq= 22.0809044338456 Dur[97]= 1827 ' freq= 22.8060572888159 Dur[98]= 1769 ' freq= 23.5537968720558 Dur[99]= 1713 ' freq= 24.3237984043588 Dur[100]= 1658 ' freq= 25.1306795335746 Dur[101]= 1606 ' freq= 25.9443752594438 Dur[102]= 1555 ' freq= 26.7952840300107 Dur[103]= 1505 ' freq= 27.6854928017719 Dur[104]= 1458 ' freq= 28.5779606767261 Dur[105]= 1411 ' freq= 29.5298842428538 Dur[106]= 1367 ' freq= 30.480370641307 Dur[107]= 1323 ' freq= 31.4940791131267 Dur[108]= 1281 ' freq= 32.5266718709342 Dur[109]= 1241 ' freq= 33.5750738651625 Dur[110]= 1201 ' freq= 34.6933111296142 Dur[111]= 1163 ' freq= 35.8268844941244 Dur[112]= 1126 ' freq= 37.00414446418 Dur[113]= 1091 ' freq= 38.1912618392912 Dur[114]= 1056 ' freq= 39.4570707070707 Dur[115]= 1022 ' freq= 40.7697325505545 Dur[116]= 990 ' freq= 42.0875420875421 Dur[117]= 959 ' freq= 43.4480361487661 Dur[118]= 928 ' freq= 44.8994252873563 Dur[119]= 899 ' freq= 46.347793845013 Dur[120]= 870 ' freq= 47.8927203065134 Dur[121]= 843 ' freq= 49.4266508501384 Dur[122]= 816 ' freq= 51.062091503268 Dur[123]= 790 ' freq= 52.7426160337553 Dur[124]= 765 ' freq= 54.4662309368192 Dur[125]= 741 ' freq= 56.2303193882141 Dur[126]= 717 ' freq= 58.1125058112506 Dur[127]= 694 ' freq= 60.0384245917387 Return Vels_Lookup: ' lookup table for the velocity controlled pulse durations ' if we state that the longest pulse (for fortissimo) should not exceed 16ms (=666 24us units) ' and we set the minimum pulse duration at 1ms (=42 24us units) then we can calculate the lookup ' as follows: ' Vels[1] = 42 ' minimum velocity 1ms ' For i = 2 To 127 ' Vels[i] = Vels[i-1] + 5 ' Next i ' Velocity lookup tables for board 2 ' after measurements 07.04.2015 gwr. ' Noot= 70 Output= 1 Vels0[1]= 76 Vels0[2]= 79 Vels0[3]= 81 Vels0[4]= 83 Vels0[5]= 85 Vels0[6]= 87 Vels0[7]= 90 Vels0[8]= 92 Vels0[9]= 94 Vels0[10]= 96 Vels0[11]= 98 Vels0[12]= 101 Vels0[13]= 103 Vels0[14]= 105 Vels0[15]= 107 Vels0[16]= 109 Vels0[17]= 112 Vels0[18]= 114 Vels0[19]= 116 Vels0[20]= 118 Vels0[21]= 120 Vels0[22]= 123 Vels0[23]= 125 Vels0[24]= 127 Vels0[25]= 129 Vels0[26]= 132 Vels0[27]= 134 Vels0[28]= 136 Vels0[29]= 138 Vels0[30]= 140 Vels0[31]= 143 Vels0[32]= 145 Vels0[33]= 147 Vels0[34]= 149 Vels0[35]= 151 Vels0[36]= 154 Vels0[37]= 156 Vels0[38]= 158 Vels0[39]= 160 Vels0[40]= 162 Vels0[41]= 165 Vels0[42]= 167 Vels0[43]= 169 Vels0[44]= 171 Vels0[45]= 173 Vels0[46]= 176 Vels0[47]= 178 Vels0[48]= 180 Vels0[49]= 182 Vels0[50]= 184 Vels0[51]= 187 Vels0[52]= 189 Vels0[53]= 191 Vels0[54]= 193 Vels0[55]= 195 Vels0[56]= 198 Vels0[57]= 200 Vels0[58]= 202 Vels0[59]= 204 Vels0[60]= 207 Vels0[61]= 209 Vels0[62]= 211 Vels0[63]= 213 Vels0[64]= 215 Vels0[65]= 218 Vels0[66]= 220 Vels0[67]= 222 Vels0[68]= 224 Vels0[69]= 226 Vels0[70]= 229 Vels0[71]= 231 Vels0[72]= 233 Vels0[73]= 235 Vels0[74]= 237 Vels0[75]= 240 Vels0[76]= 242 Vels0[77]= 244 Vels0[78]= 246 Vels0[79]= 248 Vels0[80]= 251 Vels0[81]= 253 Vels0[82]= 255 Vels0[83]= 257 Vels0[84]= 259 Vels0[85]= 262 Vels0[86]= 264 Vels0[87]= 266 Vels0[88]= 268 Vels0[89]= 270 Vels0[90]= 273 Vels0[91]= 275 Vels0[92]= 277 Vels0[93]= 279 Vels0[94]= 281 Vels0[95]= 284 Vels0[96]= 286 Vels0[97]= 288 Vels0[98]= 290 Vels0[99]= 293 Vels0[100]= 295 Vels0[101]= 297 Vels0[102]= 299 Vels0[103]= 301 Vels0[104]= 304 Vels0[105]= 306 Vels0[106]= 308 Vels0[107]= 310 Vels0[108]= 312 Vels0[109]= 315 Vels0[110]= 317 Vels0[111]= 319 Vels0[112]= 321 Vels0[113]= 323 Vels0[114]= 326 Vels0[115]= 328 Vels0[116]= 330 Vels0[117]= 332 Vels0[118]= 334 Vels0[119]= 337 Vels0[120]= 339 Vels0[121]= 341 Vels0[122]= 343 Vels0[123]= 345 Vels0[124]= 348 Vels0[125]= 350 Vels0[126]= 352 Vels0[127]= 354 ' Noot= 71 Output= 2 Vels1[1]= 62 Vels1[2]= 64 Vels1[3]= 66 Vels1[4]= 69 Vels1[5]= 71 Vels1[6]= 73 Vels1[7]= 76 Vels1[8]= 78 Vels1[9]= 80 Vels1[10]= 83 Vels1[11]= 85 Vels1[12]= 87 Vels1[13]= 90 Vels1[14]= 92 Vels1[15]= 94 Vels1[16]= 96 Vels1[17]= 99 Vels1[18]= 101 Vels1[19]= 103 Vels1[20]= 106 Vels1[21]= 108 Vels1[22]= 110 Vels1[23]= 113 Vels1[24]= 115 Vels1[25]= 117 Vels1[26]= 120 Vels1[27]= 122 Vels1[28]= 124 Vels1[29]= 127 Vels1[30]= 129 Vels1[31]= 131 Vels1[32]= 134 Vels1[33]= 136 Vels1[34]= 138 Vels1[35]= 141 Vels1[36]= 143 Vels1[37]= 145 Vels1[38]= 148 Vels1[39]= 150 Vels1[40]= 152 Vels1[41]= 155 Vels1[42]= 157 Vels1[43]= 159 Vels1[44]= 161 Vels1[45]= 164 Vels1[46]= 166 Vels1[47]= 168 Vels1[48]= 171 Vels1[49]= 173 Vels1[50]= 175 Vels1[51]= 178 Vels1[52]= 180 Vels1[53]= 182 Vels1[54]= 185 Vels1[55]= 187 Vels1[56]= 189 Vels1[57]= 192 Vels1[58]= 194 Vels1[59]= 196 Vels1[60]= 199 Vels1[61]= 201 Vels1[62]= 203 Vels1[63]= 206 Vels1[64]= 208 Vels1[65]= 210 Vels1[66]= 213 Vels1[67]= 215 Vels1[68]= 217 Vels1[69]= 220 Vels1[70]= 222 Vels1[71]= 224 Vels1[72]= 226 Vels1[73]= 229 Vels1[74]= 231 Vels1[75]= 233 Vels1[76]= 236 Vels1[77]= 238 Vels1[78]= 240 Vels1[79]= 243 Vels1[80]= 245 Vels1[81]= 247 Vels1[82]= 250 Vels1[83]= 252 Vels1[84]= 254 Vels1[85]= 257 Vels1[86]= 259 Vels1[87]= 261 Vels1[88]= 264 Vels1[89]= 266 Vels1[90]= 268 Vels1[91]= 271 Vels1[92]= 273 Vels1[93]= 275 Vels1[94]= 278 Vels1[95]= 280 Vels1[96]= 282 Vels1[97]= 284 Vels1[98]= 287 Vels1[99]= 289 Vels1[100]= 291 Vels1[101]= 294 Vels1[102]= 296 Vels1[103]= 298 Vels1[104]= 301 Vels1[105]= 303 Vels1[106]= 305 Vels1[107]= 308 Vels1[108]= 310 Vels1[109]= 312 Vels1[110]= 315 Vels1[111]= 317 Vels1[112]= 319 Vels1[113]= 322 Vels1[114]= 324 Vels1[115]= 326 Vels1[116]= 329 Vels1[117]= 331 Vels1[118]= 333 Vels1[119]= 336 Vels1[120]= 338 Vels1[121]= 340 Vels1[122]= 343 Vels1[123]= 345 Vels1[124]= 347 Vels1[125]= 349 Vels1[126]= 352 Vels1[127]= 354 ' Noot= 74 Output= 5 Vels4[1]= 71 Vels4[2]= 74 Vels4[3]= 76 Vels4[4]= 78 Vels4[5]= 80 Vels4[6]= 83 Vels4[7]= 85 Vels4[8]= 87 Vels4[9]= 89 Vels4[10]= 92 Vels4[11]= 94 Vels4[12]= 96 Vels4[13]= 98 Vels4[14]= 101 Vels4[15]= 103 Vels4[16]= 105 Vels4[17]= 107 Vels4[18]= 110 Vels4[19]= 112 Vels4[20]= 114 Vels4[21]= 116 Vels4[22]= 119 Vels4[23]= 121 Vels4[24]= 123 Vels4[25]= 125 Vels4[26]= 128 Vels4[27]= 130 Vels4[28]= 132 Vels4[29]= 134 Vels4[30]= 137 Vels4[31]= 139 Vels4[32]= 141 Vels4[33]= 143 Vels4[34]= 146 Vels4[35]= 148 Vels4[36]= 150 Vels4[37]= 152 Vels4[38]= 155 Vels4[39]= 157 Vels4[40]= 159 Vels4[41]= 161 Vels4[42]= 163 Vels4[43]= 166 Vels4[44]= 168 Vels4[45]= 170 Vels4[46]= 172 Vels4[47]= 175 Vels4[48]= 177 Vels4[49]= 179 Vels4[50]= 181 Vels4[51]= 184 Vels4[52]= 186 Vels4[53]= 188 Vels4[54]= 190 Vels4[55]= 193 Vels4[56]= 195 Vels4[57]= 197 Vels4[58]= 199 Vels4[59]= 202 Vels4[60]= 204 Vels4[61]= 206 Vels4[62]= 208 Vels4[63]= 211 Vels4[64]= 213 Vels4[65]= 215 Vels4[66]= 217 Vels4[67]= 220 Vels4[68]= 222 Vels4[69]= 224 Vels4[70]= 226 Vels4[71]= 229 Vels4[72]= 231 Vels4[73]= 233 Vels4[74]= 235 Vels4[75]= 238 Vels4[76]= 240 Vels4[77]= 242 Vels4[78]= 244 Vels4[79]= 247 Vels4[80]= 249 Vels4[81]= 251 Vels4[82]= 253 Vels4[83]= 255 Vels4[84]= 258 Vels4[85]= 260 Vels4[86]= 262 Vels4[87]= 264 Vels4[88]= 267 Vels4[89]= 269 Vels4[90]= 271 Vels4[91]= 273 Vels4[92]= 276 Vels4[93]= 278 Vels4[94]= 280 Vels4[95]= 282 Vels4[96]= 285 Vels4[97]= 287 Vels4[98]= 289 Vels4[99]= 291 Vels4[100]= 294 Vels4[101]= 296 Vels4[102]= 298 Vels4[103]= 300 Vels4[104]= 303 Vels4[105]= 305 Vels4[106]= 307 Vels4[107]= 309 Vels4[108]= 312 Vels4[109]= 314 Vels4[110]= 316 Vels4[111]= 318 Vels4[112]= 321 Vels4[113]= 323 Vels4[114]= 325 Vels4[115]= 327 Vels4[116]= 330 Vels4[117]= 332 Vels4[118]= 334 Vels4[119]= 336 Vels4[120]= 339 Vels4[121]= 341 Vels4[122]= 343 Vels4[123]= 345 Vels4[124]= 347 Vels4[125]= 350 Vels4[126]= 352 Vels4[127]= 354 ' Noot= 75 Output= 6 Vels5[1]= 71 Vels5[2]= 74 Vels5[3]= 76 Vels5[4]= 78 Vels5[5]= 80 Vels5[6]= 82 Vels5[7]= 84 Vels5[8]= 86 Vels5[9]= 88 Vels5[10]= 90 Vels5[11]= 92 Vels5[12]= 94 Vels5[13]= 97 Vels5[14]= 99 Vels5[15]= 101 Vels5[16]= 103 Vels5[17]= 105 Vels5[18]= 107 Vels5[19]= 109 Vels5[20]= 111 Vels5[21]= 113 Vels5[22]= 115 Vels5[23]= 117 Vels5[24]= 120 Vels5[25]= 122 Vels5[26]= 124 Vels5[27]= 126 Vels5[28]= 128 Vels5[29]= 130 Vels5[30]= 132 Vels5[31]= 134 Vels5[32]= 136 Vels5[33]= 138 Vels5[34]= 140 Vels5[35]= 143 Vels5[36]= 145 Vels5[37]= 147 Vels5[38]= 149 Vels5[39]= 151 Vels5[40]= 153 Vels5[41]= 155 Vels5[42]= 157 Vels5[43]= 159 Vels5[44]= 161 Vels5[45]= 163 Vels5[46]= 165 Vels5[47]= 168 Vels5[48]= 170 Vels5[49]= 172 Vels5[50]= 174 Vels5[51]= 176 Vels5[52]= 178 Vels5[53]= 180 Vels5[54]= 182 Vels5[55]= 184 Vels5[56]= 186 Vels5[57]= 188 Vels5[58]= 191 Vels5[59]= 193 Vels5[60]= 195 Vels5[61]= 197 Vels5[62]= 199 Vels5[63]= 201 Vels5[64]= 203 Vels5[65]= 205 Vels5[66]= 207 Vels5[67]= 209 Vels5[68]= 211 Vels5[69]= 214 Vels5[70]= 216 Vels5[71]= 218 Vels5[72]= 220 Vels5[73]= 222 Vels5[74]= 224 Vels5[75]= 226 Vels5[76]= 228 Vels5[77]= 230 Vels5[78]= 232 Vels5[79]= 234 Vels5[80]= 237 Vels5[81]= 239 Vels5[82]= 241 Vels5[83]= 243 Vels5[84]= 245 Vels5[85]= 247 Vels5[86]= 249 Vels5[87]= 251 Vels5[88]= 253 Vels5[89]= 255 Vels5[90]= 257 Vels5[91]= 260 Vels5[92]= 262 Vels5[93]= 264 Vels5[94]= 266 Vels5[95]= 268 Vels5[96]= 270 Vels5[97]= 272 Vels5[98]= 274 Vels5[99]= 276 Vels5[100]= 278 Vels5[101]= 280 Vels5[102]= 282 Vels5[103]= 285 Vels5[104]= 287 Vels5[105]= 289 Vels5[106]= 291 Vels5[107]= 293 Vels5[108]= 295 Vels5[109]= 297 Vels5[110]= 299 Vels5[111]= 301 Vels5[112]= 303 Vels5[113]= 305 Vels5[114]= 308 Vels5[115]= 310 Vels5[116]= 312 Vels5[117]= 314 Vels5[118]= 316 Vels5[119]= 318 Vels5[120]= 320 Vels5[121]= 322 Vels5[122]= 324 Vels5[123]= 326 Vels5[124]= 328 Vels5[125]= 331 Vels5[126]= 333 Vels5[127]= 335 ' Noot= 76 Output= 7 Vels6[1]= 145 Vels6[2]= 146 Vels6[3]= 148 Vels6[4]= 149 Vels6[5]= 150 Vels6[6]= 152 Vels6[7]= 153 Vels6[8]= 154 Vels6[9]= 155 Vels6[10]= 157 Vels6[11]= 158 Vels6[12]= 159 Vels6[13]= 161 Vels6[14]= 162 Vels6[15]= 163 Vels6[16]= 164 Vels6[17]= 166 Vels6[18]= 167 Vels6[19]= 168 Vels6[20]= 169 Vels6[21]= 171 Vels6[22]= 172 Vels6[23]= 173 Vels6[24]= 175 Vels6[25]= 176 Vels6[26]= 177 Vels6[27]= 178 Vels6[28]= 180 Vels6[29]= 181 Vels6[30]= 182 Vels6[31]= 183 Vels6[32]= 185 Vels6[33]= 186 Vels6[34]= 187 Vels6[35]= 189 Vels6[36]= 190 Vels6[37]= 191 Vels6[38]= 192 Vels6[39]= 194 Vels6[40]= 195 Vels6[41]= 196 Vels6[42]= 198 Vels6[43]= 199 Vels6[44]= 200 Vels6[45]= 201 Vels6[46]= 203 Vels6[47]= 204 Vels6[48]= 205 Vels6[49]= 206 Vels6[50]= 208 Vels6[51]= 209 Vels6[52]= 210 Vels6[53]= 212 Vels6[54]= 213 Vels6[55]= 214 Vels6[56]= 215 Vels6[57]= 217 Vels6[58]= 218 Vels6[59]= 219 Vels6[60]= 221 Vels6[61]= 222 Vels6[62]= 223 Vels6[63]= 224 Vels6[64]= 226 Vels6[65]= 227 Vels6[66]= 228 Vels6[67]= 229 Vels6[68]= 231 Vels6[69]= 232 Vels6[70]= 233 Vels6[71]= 235 Vels6[72]= 236 Vels6[73]= 237 Vels6[74]= 238 Vels6[75]= 240 Vels6[76]= 241 Vels6[77]= 242 Vels6[78]= 243 Vels6[79]= 245 Vels6[80]= 246 Vels6[81]= 247 Vels6[82]= 249 Vels6[83]= 250 Vels6[84]= 251 Vels6[85]= 252 Vels6[86]= 254 Vels6[87]= 255 Vels6[88]= 256 Vels6[89]= 258 Vels6[90]= 259 Vels6[91]= 260 Vels6[92]= 261 Vels6[93]= 263 Vels6[94]= 264 Vels6[95]= 265 Vels6[96]= 266 Vels6[97]= 268 Vels6[98]= 269 Vels6[99]= 270 Vels6[100]= 272 Vels6[101]= 273 Vels6[102]= 274 Vels6[103]= 275 Vels6[104]= 277 Vels6[105]= 278 Vels6[106]= 279 Vels6[107]= 281 Vels6[108]= 282 Vels6[109]= 283 Vels6[110]= 284 Vels6[111]= 286 Vels6[112]= 287 Vels6[113]= 288 Vels6[114]= 289 Vels6[115]= 291 Vels6[116]= 292 Vels6[117]= 293 Vels6[118]= 295 Vels6[119]= 296 Vels6[120]= 297 Vels6[121]= 298 Vels6[122]= 300 Vels6[123]= 301 Vels6[124]= 302 Vels6[125]= 303 Vels6[126]= 305 Vels6[127]= 306 ' Noot= 77 Output= 8 Vels7[1]= 165 Vels7[2]= 166 Vels7[3]= 168 Vels7[4]= 169 Vels7[5]= 171 Vels7[6]= 172 Vels7[7]= 174 Vels7[8]= 175 Vels7[9]= 177 Vels7[10]= 178 Vels7[11]= 180 Vels7[12]= 181 Vels7[13]= 183 Vels7[14]= 184 Vels7[15]= 186 Vels7[16]= 187 Vels7[17]= 189 Vels7[18]= 190 Vels7[19]= 192 Vels7[20]= 194 Vels7[21]= 195 Vels7[22]= 197 Vels7[23]= 198 Vels7[24]= 200 Vels7[25]= 201 Vels7[26]= 203 Vels7[27]= 204 Vels7[28]= 206 Vels7[29]= 207 Vels7[30]= 209 Vels7[31]= 210 Vels7[32]= 212 Vels7[33]= 213 Vels7[34]= 215 Vels7[35]= 216 Vels7[36]= 218 Vels7[37]= 219 Vels7[38]= 221 Vels7[39]= 222 Vels7[40]= 224 Vels7[41]= 225 Vels7[42]= 227 Vels7[43]= 228 Vels7[44]= 230 Vels7[45]= 231 Vels7[46]= 233 Vels7[47]= 234 Vels7[48]= 236 Vels7[49]= 237 Vels7[50]= 239 Vels7[51]= 240 Vels7[52]= 242 Vels7[53]= 243 Vels7[54]= 245 Vels7[55]= 246 Vels7[56]= 248 Vels7[57]= 249 Vels7[58]= 251 Vels7[59]= 252 Vels7[60]= 254 Vels7[61]= 255 Vels7[62]= 257 Vels7[63]= 258 Vels7[64]= 260 Vels7[65]= 261 Vels7[66]= 263 Vels7[67]= 264 Vels7[68]= 266 Vels7[69]= 267 Vels7[70]= 269 Vels7[71]= 270 Vels7[72]= 272 Vels7[73]= 273 Vels7[74]= 275 Vels7[75]= 276 Vels7[76]= 278 Vels7[77]= 280 Vels7[78]= 281 Vels7[79]= 283 Vels7[80]= 284 Vels7[81]= 286 Vels7[82]= 287 Vels7[83]= 289 Vels7[84]= 290 Vels7[85]= 292 Vels7[86]= 293 Vels7[87]= 295 Vels7[88]= 296 Vels7[89]= 298 Vels7[90]= 299 Vels7[91]= 301 Vels7[92]= 302 Vels7[93]= 304 Vels7[94]= 305 Vels7[95]= 307 Vels7[96]= 308 Vels7[97]= 310 Vels7[98]= 311 Vels7[99]= 313 Vels7[100]= 314 Vels7[101]= 316 Vels7[102]= 317 Vels7[103]= 319 Vels7[104]= 320 Vels7[105]= 322 Vels7[106]= 323 Vels7[107]= 325 Vels7[108]= 326 Vels7[109]= 328 Vels7[110]= 329 Vels7[111]= 331 Vels7[112]= 332 Vels7[113]= 334 Vels7[114]= 335 Vels7[115]= 337 Vels7[116]= 338 Vels7[117]= 340 Vels7[118]= 341 Vels7[119]= 343 Vels7[120]= 344 Vels7[121]= 346 Vels7[122]= 347 Vels7[123]= 349 Vels7[124]= 350 Vels7[125]= 352 Vels7[126]= 353 Vels7[127]= 355 ' Noot= 78 Output= 9 Vels8[1]= 91 Vels8[2]= 93 Vels8[3]= 95 Vels8[4]= 96 Vels8[5]= 98 Vels8[6]= 100 Vels8[7]= 102 Vels8[8]= 103 Vels8[9]= 105 Vels8[10]= 107 Vels8[11]= 109 Vels8[12]= 110 Vels8[13]= 112 Vels8[14]= 114 Vels8[15]= 116 Vels8[16]= 117 Vels8[17]= 119 Vels8[18]= 121 Vels8[19]= 122 Vels8[20]= 124 Vels8[21]= 126 Vels8[22]= 128 Vels8[23]= 129 Vels8[24]= 131 Vels8[25]= 133 Vels8[26]= 135 Vels8[27]= 136 Vels8[28]= 138 Vels8[29]= 140 Vels8[30]= 142 Vels8[31]= 143 Vels8[32]= 145 Vels8[33]= 147 Vels8[34]= 149 Vels8[35]= 150 Vels8[36]= 152 Vels8[37]= 154 Vels8[38]= 156 Vels8[39]= 157 Vels8[40]= 159 Vels8[41]= 161 Vels8[42]= 163 Vels8[43]= 164 Vels8[44]= 166 Vels8[45]= 168 Vels8[46]= 169 Vels8[47]= 171 Vels8[48]= 173 Vels8[49]= 175 Vels8[50]= 176 Vels8[51]= 178 Vels8[52]= 180 Vels8[53]= 182 Vels8[54]= 183 Vels8[55]= 185 Vels8[56]= 187 Vels8[57]= 189 Vels8[58]= 190 Vels8[59]= 192 Vels8[60]= 194 Vels8[61]= 196 Vels8[62]= 197 Vels8[63]= 199 Vels8[64]= 201 Vels8[65]= 203 Vels8[66]= 204 Vels8[67]= 206 Vels8[68]= 208 Vels8[69]= 210 Vels8[70]= 211 Vels8[71]= 213 Vels8[72]= 215 Vels8[73]= 216 Vels8[74]= 218 Vels8[75]= 220 Vels8[76]= 222 Vels8[77]= 223 Vels8[78]= 225 Vels8[79]= 227 Vels8[80]= 229 Vels8[81]= 230 Vels8[82]= 232 Vels8[83]= 234 Vels8[84]= 236 Vels8[85]= 237 Vels8[86]= 239 Vels8[87]= 241 Vels8[88]= 243 Vels8[89]= 244 Vels8[90]= 246 Vels8[91]= 248 Vels8[92]= 250 Vels8[93]= 251 Vels8[94]= 253 Vels8[95]= 255 Vels8[96]= 257 Vels8[97]= 258 Vels8[98]= 260 Vels8[99]= 262 Vels8[100]= 263 Vels8[101]= 265 Vels8[102]= 267 Vels8[103]= 269 Vels8[104]= 270 Vels8[105]= 272 Vels8[106]= 274 Vels8[107]= 276 Vels8[108]= 277 Vels8[109]= 279 Vels8[110]= 281 Vels8[111]= 283 Vels8[112]= 284 Vels8[113]= 286 Vels8[114]= 288 Vels8[115]= 290 Vels8[116]= 291 Vels8[117]= 293 Vels8[118]= 295 Vels8[119]= 297 Vels8[120]= 298 Vels8[121]= 300 Vels8[122]= 302 Vels8[123]= 304 Vels8[124]= 305 Vels8[125]= 307 Vels8[126]= 309 Vels8[127]= 310 ' Noot= 79 Output= 10 Vels9[1]= 67 Vels9[2]= 68 Vels9[3]= 70 Vels9[4]= 71 Vels9[5]= 73 Vels9[6]= 74 Vels9[7]= 76 Vels9[8]= 77 Vels9[9]= 79 Vels9[10]= 80 Vels9[11]= 82 Vels9[12]= 84 Vels9[13]= 85 Vels9[14]= 87 Vels9[15]= 88 Vels9[16]= 90 Vels9[17]= 91 Vels9[18]= 93 Vels9[19]= 94 Vels9[20]= 96 Vels9[21]= 98 Vels9[22]= 99 Vels9[23]= 101 Vels9[24]= 102 Vels9[25]= 104 Vels9[26]= 105 Vels9[27]= 107 Vels9[28]= 108 Vels9[29]= 110 Vels9[30]= 111 Vels9[31]= 113 Vels9[32]= 115 Vels9[33]= 116 Vels9[34]= 118 Vels9[35]= 119 Vels9[36]= 121 Vels9[37]= 122 Vels9[38]= 124 Vels9[39]= 125 Vels9[40]= 127 Vels9[41]= 128 Vels9[42]= 130 Vels9[43]= 132 Vels9[44]= 133 Vels9[45]= 135 Vels9[46]= 136 Vels9[47]= 138 Vels9[48]= 139 Vels9[49]= 141 Vels9[50]= 142 Vels9[51]= 144 Vels9[52]= 145 Vels9[53]= 147 Vels9[54]= 149 Vels9[55]= 150 Vels9[56]= 152 Vels9[57]= 153 Vels9[58]= 155 Vels9[59]= 156 Vels9[60]= 158 Vels9[61]= 159 Vels9[62]= 161 Vels9[63]= 163 Vels9[64]= 164 Vels9[65]= 166 Vels9[66]= 167 Vels9[67]= 169 Vels9[68]= 170 Vels9[69]= 172 Vels9[70]= 173 Vels9[71]= 175 Vels9[72]= 176 Vels9[73]= 178 Vels9[74]= 180 Vels9[75]= 181 Vels9[76]= 183 Vels9[77]= 184 Vels9[78]= 186 Vels9[79]= 187 Vels9[80]= 189 Vels9[81]= 190 Vels9[82]= 192 Vels9[83]= 193 Vels9[84]= 195 Vels9[85]= 197 Vels9[86]= 198 Vels9[87]= 200 Vels9[88]= 201 Vels9[89]= 203 Vels9[90]= 204 Vels9[91]= 206 Vels9[92]= 207 Vels9[93]= 209 Vels9[94]= 210 Vels9[95]= 212 Vels9[96]= 214 Vels9[97]= 215 Vels9[98]= 217 Vels9[99]= 218 Vels9[100]= 220 Vels9[101]= 221 Vels9[102]= 223 Vels9[103]= 224 Vels9[104]= 226 Vels9[105]= 228 Vels9[106]= 229 Vels9[107]= 231 Vels9[108]= 232 Vels9[109]= 234 Vels9[110]= 235 Vels9[111]= 237 Vels9[112]= 238 Vels9[113]= 240 Vels9[114]= 241 Vels9[115]= 243 Vels9[116]= 245 Vels9[117]= 246 Vels9[118]= 248 Vels9[119]= 249 Vels9[120]= 251 Vels9[121]= 252 Vels9[122]= 254 Vels9[123]= 255 Vels9[124]= 257 Vels9[125]= 258 Vels9[126]= 260 Vels9[127]= 262 ' Noot= 80 Output= 11 Vels10[1]= 150 Vels10[2]= 151 Vels10[3]= 153 Vels10[4]= 154 Vels10[5]= 155 Vels10[6]= 156 Vels10[7]= 158 Vels10[8]= 159 Vels10[9]= 160 Vels10[10]= 162 Vels10[11]= 163 Vels10[12]= 164 Vels10[13]= 165 Vels10[14]= 167 Vels10[15]= 168 Vels10[16]= 169 Vels10[17]= 171 Vels10[18]= 172 Vels10[19]= 173 Vels10[20]= 174 Vels10[21]= 176 Vels10[22]= 177 Vels10[23]= 178 Vels10[24]= 179 Vels10[25]= 181 Vels10[26]= 182 Vels10[27]= 183 Vels10[28]= 185 Vels10[29]= 186 Vels10[30]= 187 Vels10[31]= 188 Vels10[32]= 190 Vels10[33]= 191 Vels10[34]= 192 Vels10[35]= 194 Vels10[36]= 195 Vels10[37]= 196 Vels10[38]= 197 Vels10[39]= 199 Vels10[40]= 200 Vels10[41]= 201 Vels10[42]= 202 Vels10[43]= 204 Vels10[44]= 205 Vels10[45]= 206 Vels10[46]= 208 Vels10[47]= 209 Vels10[48]= 210 Vels10[49]= 211 Vels10[50]= 213 Vels10[51]= 214 Vels10[52]= 215 Vels10[53]= 216 Vels10[54]= 218 Vels10[55]= 219 Vels10[56]= 220 Vels10[57]= 222 Vels10[58]= 223 Vels10[59]= 224 Vels10[60]= 225 Vels10[61]= 227 Vels10[62]= 228 Vels10[63]= 229 Vels10[64]= 231 Vels10[65]= 232 Vels10[66]= 233 Vels10[67]= 234 Vels10[68]= 236 Vels10[69]= 237 Vels10[70]= 238 Vels10[71]= 239 Vels10[72]= 241 Vels10[73]= 242 Vels10[74]= 243 Vels10[75]= 245 Vels10[76]= 246 Vels10[77]= 247 Vels10[78]= 248 Vels10[79]= 250 Vels10[80]= 251 Vels10[81]= 252 Vels10[82]= 254 Vels10[83]= 255 Vels10[84]= 256 Vels10[85]= 257 Vels10[86]= 259 Vels10[87]= 260 Vels10[88]= 261 Vels10[89]= 262 Vels10[90]= 264 Vels10[91]= 265 Vels10[92]= 266 Vels10[93]= 268 Vels10[94]= 269 Vels10[95]= 270 Vels10[96]= 271 Vels10[97]= 273 Vels10[98]= 274 Vels10[99]= 275 Vels10[100]= 276 Vels10[101]= 278 Vels10[102]= 279 Vels10[103]= 280 Vels10[104]= 282 Vels10[105]= 283 Vels10[106]= 284 Vels10[107]= 285 Vels10[108]= 287 Vels10[109]= 288 Vels10[110]= 289 Vels10[111]= 291 Vels10[112]= 292 Vels10[113]= 293 Vels10[114]= 294 Vels10[115]= 296 Vels10[116]= 297 Vels10[117]= 298 Vels10[118]= 299 Vels10[119]= 301 Vels10[120]= 302 Vels10[121]= 303 Vels10[122]= 305 Vels10[123]= 306 Vels10[124]= 307 Vels10[125]= 308 Vels10[126]= 310 Vels10[127]= 311 ' Noot= 81 Output= 12 Vels11[1]= 76 Vels11[2]= 78 Vels11[3]= 80 Vels11[4]= 82 Vels11[5]= 84 Vels11[6]= 86 Vels11[7]= 88 Vels11[8]= 90 Vels11[9]= 92 Vels11[10]= 93 Vels11[11]= 95 Vels11[12]= 97 Vels11[13]= 99 Vels11[14]= 101 Vels11[15]= 103 Vels11[16]= 105 Vels11[17]= 107 Vels11[18]= 109 Vels11[19]= 111 Vels11[20]= 112 Vels11[21]= 114 Vels11[22]= 116 Vels11[23]= 118 Vels11[24]= 120 Vels11[25]= 122 Vels11[26]= 124 Vels11[27]= 126 Vels11[28]= 128 Vels11[29]= 129 Vels11[30]= 131 Vels11[31]= 133 Vels11[32]= 135 Vels11[33]= 137 Vels11[34]= 139 Vels11[35]= 141 Vels11[36]= 143 Vels11[37]= 145 Vels11[38]= 147 Vels11[39]= 148 Vels11[40]= 150 Vels11[41]= 152 Vels11[42]= 154 Vels11[43]= 156 Vels11[44]= 158 Vels11[45]= 160 Vels11[46]= 162 Vels11[47]= 164 Vels11[48]= 165 Vels11[49]= 167 Vels11[50]= 169 Vels11[51]= 171 Vels11[52]= 173 Vels11[53]= 175 Vels11[54]= 177 Vels11[55]= 179 Vels11[56]= 181 Vels11[57]= 183 Vels11[58]= 184 Vels11[59]= 186 Vels11[60]= 188 Vels11[61]= 190 Vels11[62]= 192 Vels11[63]= 194 Vels11[64]= 196 Vels11[65]= 198 Vels11[66]= 200 Vels11[67]= 202 Vels11[68]= 203 Vels11[69]= 205 Vels11[70]= 207 Vels11[71]= 209 Vels11[72]= 211 Vels11[73]= 213 Vels11[74]= 215 Vels11[75]= 217 Vels11[76]= 219 Vels11[77]= 220 Vels11[78]= 222 Vels11[79]= 224 Vels11[80]= 226 Vels11[81]= 228 Vels11[82]= 230 Vels11[83]= 232 Vels11[84]= 234 Vels11[85]= 236 Vels11[86]= 238 Vels11[87]= 239 Vels11[88]= 241 Vels11[89]= 243 Vels11[90]= 245 Vels11[91]= 247 Vels11[92]= 249 Vels11[93]= 251 Vels11[94]= 253 Vels11[95]= 255 Vels11[96]= 256 Vels11[97]= 258 Vels11[98]= 260 Vels11[99]= 262 Vels11[100]= 264 Vels11[101]= 266 Vels11[102]= 268 Vels11[103]= 270 Vels11[104]= 272 Vels11[105]= 274 Vels11[106]= 275 Vels11[107]= 277 Vels11[108]= 279 Vels11[109]= 281 Vels11[110]= 283 Vels11[111]= 285 Vels11[112]= 287 Vels11[113]= 289 Vels11[114]= 291 Vels11[115]= 293 Vels11[116]= 294 Vels11[117]= 296 Vels11[118]= 298 Vels11[119]= 300 Vels11[120]= 302 Vels11[121]= 304 Vels11[122]= 306 Vels11[123]= 308 Vels11[124]= 310 Vels11[125]= 311 Vels11[126]= 313 Vels11[127]= 315 Return '[EOF]