From b4c88efb9238fb7578f6b736f3f640311c746a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petri=20J=C3=A4rvisalo?= Date: Mon, 29 Jul 2024 00:05:11 +0300 Subject: [PATCH] biisi optimoitu --- 4klang.asm | 174 ++++++++++++++------------------------------ 4klang.yml | 171 +++++++++++++++---------------------------- music/4k_sg_v3.xrns | Bin 25865 -> 24786 bytes 3 files changed, 113 insertions(+), 232 deletions(-) diff --git a/4klang.asm b/4klang.asm index c682422..456a434 100644 --- a/4klang.asm +++ b/4klang.asm @@ -76,7 +76,7 @@ global _su_render_song@4 _su_render_song@4: pushad ; Stack: edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr xor eax, eax - push 5792 ; Stack: VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr + push 1696 ; Stack: VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr push 1 ; Stack: RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr push eax ; Stack: GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr su_render_rowloop: ; loop through every row in the song @@ -85,8 +85,8 @@ su_render_rowloop: ; loop through every row in the song xor eax, eax ; ecx is the current sample within row su_render_sampleloop: ; loop through every sample in the row push eax ; Stack: Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr - push 126672 ; Stack: PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr ; does the next voice reuse the current opcodes? - push 17 ; Stack: VoicesRemain, PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr + push 31664 ; Stack: PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr ; does the next voice reuse the current opcodes? + push 15 ; Stack: VoicesRemain, PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr mov edx, dword su_synth_obj ; edx points to the synth object mov ebx, dword su_patch_opcodes ; COM points to vm code mov esi, dword su_patch_operands ; VAL points to unit params @@ -185,7 +185,7 @@ su_update_voices_nexttrack: pop edx ; edx=patrnrow add esi, 41 inc ebp - cmp ebp,su_synth_obj + 11 + cmp ebp,su_synth_obj + 10 jl su_update_voices_trackloop ret @@ -301,7 +301,6 @@ su_op_xch: section .su_op_filter code align=1 su_op_filter: lodsb ; load the flags to al - call su_effects_stereohelper fld dword [edx + 4] ; r x fld dword [edx]; f r x fmul st0, st0 ; f2 x (square the input so we never get negative and also have a smoother behaviour in the lower frequencies) @@ -323,14 +322,6 @@ su_op_filter: jz short su_op_filter_skiplowpass fadd dword [ebp] su_op_filter_skiplowpass: - test al, byte 0x20 - jz short su_op_filter_skipbandpass - fadd dword [ebp+8] -su_op_filter_skipbandpass: - test al, byte 0x10 - jz short su_op_filter_skiphighpass - fadd dword [ebp+4] -su_op_filter_skiphighpass: test al, byte 0x04 jz short su_op_filter_skipneghighpass fsub dword [ebp+4] @@ -346,14 +337,12 @@ su_op_filter_skipneghighpass: ;------------------------------------------------------------------------------- section .su_op_pan code align=1 su_op_pan: - jc su_op_pan_do ; this time, if this is mono op... - fld st0 ; ...we duplicate the mono into stereo first -su_op_pan_do: - fld dword [edx] ; p l r - fld1 ; 1 p l r - fsub st1 ; 1-p p l r - fmulp st2 ; p (1-p)*l r - fmulp st2 ; (1-p)*l p*r + fld dword [edx] ; p s + fmul st1 ; p*s s + fsub st1, st0 ; p*s s-p*s + ; Equal to + ; s*p s*(1-p) + fxch ; s*(1-p) s*p SHOULD PROBABLY DELETE, WHY BOTHER ret ;------------------------------------------------------------------------------- @@ -644,7 +633,6 @@ su_op_oscillat_normalized: test al, byte 0x80 jz short su_op_oscillat_not_sample fst dword [ebp] ; for samples, we store the phase without mod(p,1) - fadd dword [edx + 8] call su_oscillat_sample jmp su_op_oscillat_shaping ; skip the rest to avoid color phase normalization and colorloading su_op_oscillat_not_sample: @@ -654,22 +642,12 @@ su_op_oscillat_not_sample: fprem ; we actually computed mod(p+1,1) instead of mod(p,1) as the fprem takes mod fstp st1 ; towards zero fst dword [ebp] ; store back the updated phase - fadd dword [edx + 8] - fld1 ; this is a bit stupid, but we need to take mod(x,1) again after phase modulations - fadd st1, st0 ; as the actual oscillator functions expect x in [0,1] - fxch - fprem - fstp st1 fld dword [edx + 12] ; // c p ; every oscillator test included if needed test al, byte 0x40 jz short su_op_oscillat_notsine call su_oscillat_sine su_op_oscillat_notsine: - test al, byte 0x20 - jz short su_op_oscillat_not_trisaw - call su_oscillat_trisaw -su_op_oscillat_not_trisaw: su_op_oscillat_shaping: ; finally, shape the oscillator and apply gain fld dword [edx + 16] @@ -678,20 +656,6 @@ su_op_oscillat_gain: fmul dword [edx + 20] ret -section .su_oscillat_trisaw code align=1 -su_oscillat_trisaw: - fucomi st1 ; // c p - jnc short su_oscillat_trisaw_up - fld1 ; // 1 c p - fsubr st2, st0 ; // 1 c 1-p - fsubrp st1, st0 ; // 1-c 1-p -su_oscillat_trisaw_up: - fdivp st1, st0 ; // tp'/tc - fadd st0 ; // 2*'' - fld1 ; // 1 2*'' - fsubp st1, st0 ; // 2*''-1 - ret - section .su_oscillat_sine code align=1 su_oscillat_sine: fucomi st1 ; // c p @@ -817,19 +781,7 @@ su_power: ret -;------------------------------------------------------------------------------- -; DISTORT opcode: apply distortion on the signal -;------------------------------------------------------------------------------- -; Mono: x -> x*a/(1-a+(2*a-1)*abs(x)) where x is clamped first -; Stereo: l r -> l*a/(1-a+(2*a-1)*abs(l)) r*a/(1-a+(2*a-1)*abs(r)) -; This is placed here to be able to flow into waveshaper & also include -; wave shaper if needed by some other function; need to investigate the -; best way to do this -;------------------------------------------------------------------------------- -section .su_op_distort code align=1 -su_op_distort: - fld dword [edx] - +section .su_waveshaper code align=1 su_waveshaper: fld st0 ; a a x @@ -845,23 +797,6 @@ su_waveshaper: fmulp st1 ; x*a/(1-a+(2*a-1)*abs(x)) ret -;------------------------------------------------------------------------------- -; su_effects_stereohelper: moves the workspace to next, does the filtering for -; right channel (pulling the calling address from stack), rewinds the -; workspace and returns -;------------------------------------------------------------------------------- -section .su_effects_stereohelper code align=1 -su_effects_stereohelper: - jnc su_effects_stereohelper_mono ; carry is still the stereo bit - add ebp, 16 - fxch ; r l - call [esp] ; call whoever called me... - fxch ; l r - sub ebp, 16 ; move WRK back to where it was -su_effects_stereohelper_mono: - ret ; return to process l/mono sound - - section .su_clip code align=1 su_clip: fld1 ; 1 x a @@ -883,16 +818,15 @@ section .su_vm_jumptable data align=1 su_vm_jumptable: dd su_op_envelope dd su_op_oscillator - dd su_op_distort dd su_op_addp dd su_op_mulp dd su_op_xch - dd su_op_filter dd su_op_outaux dd su_op_pan dd su_op_delay dd su_op_send dd su_op_noise + dd su_op_filter dd su_op_in dd su_op_out @@ -903,16 +837,15 @@ section .su_vm_transformcounts data align=1 su_vm_transformcounts: db 5 db 6 - db 1 db 0 db 0 db 0 db 2 - db 2 db 1 db 4 db 1 db 2 + db 2 db 0 db 1 @@ -931,9 +864,9 @@ su_patterns: db 64,1,1,1,1,1,1,1,69,1,1,1,1,1,1,1 db 33,0,0,0,33,33,33,33,0,0,33,0,0,33,0,0 db 28,0,0,0,28,28,28,28,0,0,28,0,0,28,0,0 - db 26,1,1,1,26,26,26,28,0,0,28,0,0,28,0,0 + db 26,0,0,0,26,26,26,26,0,0,26,0,0,26,0,0 db 23,0,0,0,23,23,23,23,0,0,23,0,0,23,0,0 - db 28,1,1,1,28,28,28,30,0,0,30,0,0,30,0,0 + db 28,0,0,0,28,28,28,30,0,0,30,0,0,30,0,0 db 32,0,0,0,32,32,32,32,0,0,32,0,0,32,0,0 db 26,1,1,1,1,1,1,1,1,1,25,1,1,1,1,1 db 23,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 @@ -943,7 +876,7 @@ su_patterns: db 45,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 45,0,0,0,45,45,45,45,0,0,45,0,0,45,0,0 db 40,0,0,0,40,40,40,40,0,0,40,0,0,40,0,0 - db 38,0,0,0,38,38,38,40,0,0,40,0,0,40,0,0 + db 38,0,0,0,38,38,38,38,0,0,38,0,0,38,0,0 db 35,0,0,0,35,35,35,35,0,0,35,0,0,35,0,0 db 40,0,0,0,40,40,40,42,0,0,42,0,0,42,0,0 db 47,0,0,0,47,47,47,47,0,0,47,0,0,47,0,0 @@ -971,62 +904,66 @@ su_patterns: db 62,1,1,1,1,1,1,1,1,1,62,1,1,1,1,1 db 62,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 64,1,1,1,1,1,1,1,64,1,1,1,1,1,64,1 + db 33,1,1,1,33,33,33,33,1,1,33,1,1,33,1,1 + db 32,1,1,1,32,32,32,32,1,1,32,1,1,32,1,1 + db 30,1,1,1,30,30,30,30,1,1,30,1,1,30,1,1 db 50,1,1,1,50,1,1,1,50,1,1,1,50,1,1,1 db 52,1,1,1,52,1,1,1,52,1,1,1,52,1,1,1 - db 56,0,0,0,56,56,56,56,0,0,56,0,0,56,0,0 - db 54,0,0,0,54,54,54,54,0,0,54,0,0,54,0,0 + db 52,1,1,1,52,1,1,1,0,0,0,0,0,0,0,0 + db 45,1,1,1,45,45,45,45,1,1,45,1,1,45,1,1 + db 44,1,1,1,44,44,44,44,1,1,44,1,1,44,1,1 + db 42,1,1,1,42,42,42,42,1,1,42,1,1,42,1,1 db 62,1,1,1,62,1,1,1,62,1,1,1,62,1,1,1 db 64,1,1,1,64,1,1,1,64,1,1,1,64,1,1,1 + db 64,1,1,1,64,1,1,1,0,0,0,0,0,0,0,0 db 0,0,0,0,0,0,0,0,0,0,0,0,69,1,1,1 db 73,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 db 74,1,1,1,1,1,1,1,1,1,0,0,73,1,0,71 db 73,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 0,0,0,0,0,0,0,0,73,1,1,1,1,1,1,1 + db 1,1,1,1,0,0,0,0,73,1,1,1,1,1,1,1 db 81,1,1,1,1,1,1,1,1,1,1,1,83,1,1,1 db 85,1,1,1,1,1,1,1,83,1,1,1,1,1,1,81 db 80,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,0,0,0,0,78,1,1,1,1,1,1,80 + db 1,1,1,0,0,0,0,0,78,1,1,1,1,1,1,80 db 81,1,1,1,1,1,1,1,1,1,0,0,78,1,1,80 db 81,1,1,1,1,1,1,1,1,0,0,0,83,1,1,81 db 80,1,1,1,1,1,1,1,81,1,1,1,1,1,1,1 db 83,1,1,1,1,1,0,0,81,1,1,1,1,1,1,83 - db 85,1,1,1,1,1,1,1,0,0,0,0,85,83,85,86 - db 85,1,1,1,1,1,1,1,0,0,0,0,81,83,85,86 + db 85,1,1,1,1,1,1,1,0,0,0,0,85,1,1,83 + db 85,1,1,1,1,1,1,1,0,0,0,0,81,1,1,85 db 83,1,1,1,1,1,1,1,81,1,1,1,1,1,83,81 - db 80,1,1,1,1,1,1,1,76,78,80,83,80,81,83,88 + db 80,1,1,1,1,1,1,1,0,0,0,0,76,1,1,1 db 86,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,1,0,0,86,1,1,1,85,1,1,1 + db 1,1,1,1,0,0,0,0,86,1,1,1,85,1,1,1 db 83,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,0,0,0,83,1,1,1,88,1,1,1 - db 1,1,1,1,1,1,1,0,86,1,1,1,88,1,1,1 + db 1,1,1,1,0,0,0,0,83,1,1,1,88,1,1,1 + db 1,1,1,1,1,1,0,0,86,1,1,1,88,1,1,1 db 88,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,1,0,0,76,1,1,1,1,1,1,1 + db 1,1,1,1,0,0,0,0,76,1,1,1,1,1,1,1 db 81,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 - db 50,1,1,1,1,1,1,1,1,1,49,1,1,1,1,1 - db 47,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 38,1,1,1,1,1,1,1,1,1,49,1,1,1,1,1 - db 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 - db 60,1,1,1,60,1,1,1,60,1,1,1,60,1,1,1 - db 60,1,1,1,62,62,62,62,1,1,62,1,1,62,1,1 + db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 db 62,1,1,1,62,62,62,62,1,1,62,1,1,62,1,1 + db 62,1,1,1,62,1,1,1,62,1,1,1,62,1,62,62 + db 62,1,1,1,62,1,1,1,62,1,1,1,62,1,62,1 + db 62,1,1,1,62,1,1,1,1,1,1,1,1,1,1,1 + db 60,1,1,1,60,1,1,1,60,1,1,1,60,1,1,1 + db 60,1,1,1,60,1,1,1,1,1,1,1,1,1,1,1 ;------------------------------------------------------------------------------- ; Tracks ;------------------------------------------------------------------------------- section .su_tracks data align=1 su_tracks: - db 16,1,1,2,3,4,5,6,1,7,7,7,7,7,7,7,7,7,7,8,8,9,10,11,12,7,7,11,12,13,14,15,1,13,14,15,1,0,1,1,1 - db 17,1,1,1,1,1,18,1,1,19,19,19,19,19,19,19,19,19,19,20,20,21,22,23,24,19,19,23,24,25,26,27,1,25,26,27,1,0,1,1,1 - db 0,28,1,1,1,1,28,1,1,20,20,20,20,20,20,20,20,20,20,24,24,19,19,24,29,20,20,24,29,30,31,32,1,30,31,32,1,0,1,1,1 - db 0,1,33,1,1,1,33,1,1,34,34,34,34,34,34,34,34,34,34,29,29,35,35,29,36,34,34,29,36,37,38,39,1,37,38,39,1,0,1,1,1 - db 0,1,1,40,41,31,42,43,1,44,44,44,44,44,44,44,44,44,44,36,36,45,45,36,1,44,44,36,1,46,47,48,1,46,47,48,1,0,1,1,1 - db 0,1,1,1,1,1,1,1,1,7,7,7,7,7,7,7,7,7,7,29,29,35,35,29,29,19,19,29,29,49,49,50,50,49,49,50,50,0,1,1,1 - db 0,1,1,1,1,1,1,1,1,19,19,19,19,19,19,19,19,19,19,51,51,52,52,51,51,45,45,51,51,53,53,54,54,53,53,54,54,0,1,1,1 - db 0,1,1,1,1,1,1,1,1,1,1,1,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,72,76,77,78,79,80,1,1 - db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,81,82,27,1,83,82,27,84,1,1,1,1 - db 0,1,1,1,1,1,1,1,1,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,1,1,1,1 - db 0,1,1,1,1,1,1,1,1,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,0,1,1,1 + db 16,1,1,2,3,4,5,6,1,7,7,7,7,7,7,7,7,7,7,8,8,9,10,11,12,7,7,8,8,13,14,15,1,13,14,15,1,0,1,1,1 + db 17,1,1,1,1,1,18,1,1,19,19,19,19,19,19,19,19,19,19,20,20,21,22,23,24,19,19,20,20,25,26,27,1,25,26,27,1,0,1,1,1 + db 0,28,1,1,1,1,28,1,1,20,20,20,20,20,20,20,20,20,20,24,24,19,19,24,29,20,20,24,24,30,31,32,1,30,31,32,1,0,1,1,1 + db 0,1,33,1,1,1,33,1,1,34,34,34,34,34,34,34,34,34,34,29,29,35,35,29,36,34,34,29,29,37,38,39,1,37,38,39,1,0,1,1,1 + db 0,1,1,40,41,31,42,43,1,44,44,44,44,44,44,44,44,44,44,36,36,45,45,36,1,44,44,36,36,46,47,48,1,46,47,48,1,0,1,1,1 + db 0,1,1,1,1,1,1,1,1,49,49,49,49,49,49,49,49,49,49,50,50,51,51,50,50,49,49,50,50,52,52,53,53,52,52,53,54,1,1,1,1 + db 0,1,1,1,1,1,1,1,1,55,55,55,55,55,55,55,55,55,55,56,56,57,57,56,56,55,55,56,56,58,58,59,59,58,58,59,60,1,1,1,1 + db 0,1,1,1,1,1,1,1,1,1,1,1,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,78,82,83,84,85,86,1,1 + db 0,1,1,1,1,1,1,1,1,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,88,89,88,89,88,89,88,90,1,1,1,1 + db 0,1,1,1,1,1,1,1,1,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,92,1,1,1,1 ;------------------------------------------------------------------------------- ; Sample offsets ;------------------------------------------------------------------------------- @@ -1044,15 +981,12 @@ su_sample_offsets: dd 1622065 dw 1916 dw 76 - dd 1252819 - dw 6513 - dw 905 - dd 741926 - dw 1034 - dw 1 dd 560606 dw 4276 dw 1 + dd 741926 + dw 1034 + dw 1 ;------------------------------------------------------------------------------- ; Delay times @@ -1067,14 +1001,14 @@ su_delay_times: ;------------------------------------------------------------------------------- section .su_patch_opcodes data align=1 su_patch_opcodes: - db 2,4,4,6,8,10,2,4,4,6,12,8,10,15,17,0,2,4,4,8,14,10,18,21,17,0,3,5,11,19,21,17,2,4,10,22,0,2,4,4,8,4,14,8,10,14,18,17,0,2,4,10,18,17,0,2,4,10,2,24,10,14,14,8,18,17,0,27,21,29,0 + db 2,4,4,6,8,2,4,4,10,6,8,13,0,2,4,4,6,8,14,17,13,0,3,5,9,17,13,2,4,8,18,0,2,4,8,2,20,8,22,22,6,14,13,0,2,4,8,14,13,0,25,17,27,0 ;------------------------------------------------------------------------------- ; The parameters / inputs to each opcode ;------------------------------------------------------------------------------- section .su_patch_operands data align=1 su_patch_operands: - db 57,85,62,63,84,91,65,0,0,67,35,128,79,61,0,1,65,78,128,32,57,87,50,64,71,91,54,0,0,64,64,128,79,62,0,1,80,68,128,64,92,128,96,27,41,10,70,0,72,61,77,32,0,2,81,74,130,77,48,0,2,42,128,128,47,128,112,64,69,128,53,98,0,1,39,33,0,67,87,71,128,62,64,0,3,63,88,128,73,76,128,61,16,2,1,92,76,95,0,92,89,82,81,64,0,128,64,128,72,89,41,0,40,65,77,71,74,52,64,64,126,64,128,66,64,64,75,118,61,128,33,93,64,42,4,104,128,128,50,100,68,94,128,64,64,39,0,0,43,89,50,128,79,42,0,5,72,128,128,64,124,0,14,68,0,0,110,76,52,0,6,81,53,128,0,68,0,0,83,2,39,128,67,68,110,116,64,59,128,8,2,30,128,125,25,4,15,128 + db 57,82,62,63,128,91,65,0,0,67,41,129,79,63,0,1,65,62,129,57,87,50,64,100,91,54,0,0,64,64,129,79,62,0,1,64,78,129,18,19,31,70,0,66,76,77,31,0,2,64,128,130,89,48,0,2,64,97,130,75,28,128,59,86,0,1,20,32,25,64,88,64,112,62,64,0,3,64,47,129,84,128,37,18,2,1,56,53,91,0,92,89,82,82,64,0,128,64,128,72,80,41,0,0,68,0,0,90,76,52,0,4,81,53,128,0,68,0,0,83,2,39,128,67,68,110,116,64,59,77,56,0,43,89,50,103,79,42,0,5,72,128,128,64,72,0,2,33,128,123,14,4,15,90 ;------------------------------------------------------------------------------- ; Constants diff --git a/4klang.yml b/4klang.yml index 9073491..c344813 100644 --- a/4klang.yml +++ b/4klang.yml @@ -3,38 +3,35 @@ rowsperbeat: 4 score: tracks: - numvoices: 1 - order: [0, -1, -1, 1, 2, 3, 4, 5, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 9, 10, 11, 6, 6, 10, 11, 12, 13, 14, -1, 12, 13, 14, -1, 15, -1, -1, -1] - patterns: [[21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [52, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 62, 1, 64, 1, 65, 1, 1, 1, 67, 1, 1, 1], [69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 62], [64, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1], [33, 0, 1, 1, 33, 33, 33, 33, 0, 1, 33, 0, 1, 33, 0, 1], [28, 0, 1, 1, 28, 28, 28, 28, 0, 1, 28, 0, 1, 28, 0, 1], [26, 1, 1, 1, 26, 26, 26, 28, 0, 1, 28, 0, 1, 28, 0, 1], [23, 0, 1, 1, 23, 23, 23, 23, 0, 1, 23, 0, 1, 23, 0, 1], [28, 1, 1, 1, 28, 28, 28, 30, 0, 1, 30, 0, 1, 30, 0, 1], [32, 0, 1, 1, 32, 32, 32, 32, 0, 1, 32, 0, 1, 32, 0, 1], [26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1], [23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [28, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 32, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + order: [0, -1, -1, 1, 2, 3, 4, 5, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 9, 10, 11, 6, 6, 7, 7, 12, 13, 14, -1, 12, 13, 14, -1, 15, -1, -1, -1, -1] + patterns: [[21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [52, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 62, 1, 64, 1, 65, 1, 1, 1, 67, 1, 1, 1], [69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 62], [64, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1], [33, 0, 1, 1, 33, 33, 33, 33, 0, 1, 33, 0, 1, 33, 0, 1], [28, 0, 1, 1, 28, 28, 28, 28, 0, 1, 28, 0, 1, 28, 0, 1], [26, 0, 1, 1, 26, 26, 26, 26, 0, 1, 26, 0, 1, 26, 0, 1], [23, 0, 1, 1, 23, 23, 23, 23, 0, 1, 23, 0, 1, 23, 0, 1], [28, 0, 1, 1, 28, 28, 28, 30, 0, 1, 30, 0, 1, 30, 0, 1], [32, 0, 1, 1, 32, 32, 32, 32, 0, 1, 32, 0, 1, 32, 0, 1], [26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1], [23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [28, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 32, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [0, -1, -1, -1, -1, -1, 1, -1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 2, 2, 6, 7, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -1] - patterns: [[33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 40, 0, 1, 40, 0, 1], [38, 0, 1, 1, 38, 38, 38, 40, 0, 1, 40, 0, 1, 40, 0, 1], [35, 0, 1, 1, 35, 35, 35, 35, 0, 1, 35, 0, 1, 35, 0, 1], [40, 0, 1, 1, 40, 40, 40, 42, 0, 1, 42, 0, 1, 42, 0, 1], [47, 0, 1, 1, 47, 47, 47, 47, 0, 1, 47, 0, 1, 47, 0, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 1, 1, 1], [35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1, 44, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + order: [0, -1, -1, -1, -1, -1, 1, -1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 2, 2, 3, 3, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -1, -1] + patterns: [[33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 40, 0, 1, 40, 0, 1], [38, 0, 1, 1, 38, 38, 38, 38, 0, 1, 38, 0, 1, 38, 0, 1], [35, 0, 1, 1, 35, 35, 35, 35, 0, 1, 35, 0, 1, 35, 0, 1], [40, 0, 1, 1, 40, 40, 40, 42, 0, 1, 42, 0, 1, 42, 0, 1], [47, 0, 1, 1, 47, 47, 47, 47, 0, 1, 47, 0, 1, 47, 0, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 1, 1, 1], [35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1, 44, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, 0, -1, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 4, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -1] + order: [-1, 0, -1, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 2, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -1, -1] patterns: [[40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 40, 0, 1, 40, 0, 1], [47, 0, 1, 1, 47, 47, 47, 47, 0, 1, 47, 0, 1, 47, 0, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [44, 0, 1, 1, 44, 44, 44, 44, 0, 1, 44, 0, 1, 44, 0, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 1, 1, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [59, 1, 1, 1, 1, 1, 1, 1, 59, 1, 1, 1, 1, 1, 59, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, 0, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 4, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -1] + order: [-1, -1, 0, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 2, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -1, -1] patterns: [[49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [49, 0, 1, 1, 49, 49, 49, 49, 0, 1, 49, 0, 1, 49, 0, 1], [44, 0, 1, 1, 44, 44, 44, 44, 0, 1, 44, 0, 1, 44, 0, 1], [42, 0, 1, 1, 42, 42, 42, 42, 0, 1, 42, 0, 1, 42, 0, 1], [59, 0, 1, 1, 59, 59, 59, 59, 0, 1, 59, 0, 1, 59, 0, 1], [54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 1, 1, 1, 1, 1], [54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [56, 1, 1, 1, 1, 1, 1, 1, 56, 1, 1, 1, 1, 1, 56, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, 0, 1, 2, 3, 4, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, -1, 5, 5, 6, -1, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -1] + order: [-1, -1, -1, 0, 1, 2, 3, 4, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, -1, 5, 5, 6, 6, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -1, -1] patterns: [[64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 50, 1, 52, 1, 53, 1, 1, 1, 55, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 50], [52, 1, 1, 1, 1, 1, 1, 1, 57, 1, 1, 1, 1, 1, 1, 1], [52, 0, 1, 1, 52, 52, 52, 52, 0, 1, 52, 0, 1, 52, 0, 1], [59, 0, 1, 1, 59, 59, 59, 59, 0, 1, 59, 0, 1, 59, 0, 1], [57, 0, 1, 1, 57, 57, 57, 57, 0, 1, 57, 0, 1, 57, 0, 1], [62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 62, 1, 1, 1, 1, 1], [62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [64, 1, 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 1, 1, 64, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 2 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 4, 4, 5, 5, 4, 4, 5, 5, 6, -1, -1, -1] - patterns: [[33, 0, 1, 1, 33, 33, 33, 33, 0, 1, 33, 0, 1, 33, 0, 1], [44, 0, 1, 1, 44, 44, 44, 44, 0, 1, 44, 0, 1, 44, 0, 1], [42, 0, 1, 1, 42, 42, 42, 42, 0, 1, 42, 0, 1, 42, 0, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1], [52, 1, 1, 1, 52, 1, 1, 1, 52, 1, 1, 1, 52, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 3, 3, 4, 4, 3, 3, 4, 5, -1, -1, -1, -1, -1] + patterns: [[33, 1, 1, 1, 33, 33, 33, 33, 1, 1, 33, 1, 1, 33, 1, 1], [32, 1, 1, 1, 32, 32, 32, 32, 1, 1, 32, 1, 1, 32, 1, 1], [30, 1, 1, 1, 30, 30, 30, 30, 1, 1, 30, 1, 1, 30, 1, 1], [50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1], [52, 1, 1, 1, 52, 1, 1, 1, 52, 1, 1, 1, 52, 1, 1, 1], [52, 1, 1, 1, 52, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 2 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 4, 4, 5, 5, 4, 4, 5, 5, 6, -1, -1, -1] - patterns: [[45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [56, 0, 1, 1, 56, 56, 56, 56, 0, 1, 56, 0, 1, 56, 0, 1], [54, 0, 1, 1, 54, 54, 54, 54, 0, 1, 54, 0, 1, 54, 0, 1], [57, 0, 1, 1, 57, 57, 57, 57, 0, 1, 57, 0, 1, 57, 0, 1], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1], [64, 1, 1, 1, 64, 1, 1, 1, 64, 1, 1, 1, 64, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 3, 3, 4, 4, 3, 3, 4, 5, -1, -1, -1, -1, -1] + patterns: [[45, 1, 1, 1, 45, 45, 45, 45, 1, 1, 45, 1, 1, 45, 1, 1], [44, 1, 1, 1, 44, 44, 44, 44, 1, 1, 44, 1, 1, 44, 1, 1], [42, 1, 1, 1, 42, 42, 42, 42, 1, 1, 42, 1, 1, 42, 1, 1], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1], [64, 1, 1, 1, 64, 1, 1, 1, 64, 1, 1, 1, 64, 1, 1, 1], [64, 1, 1, 1, 64, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 3 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 17, 21, 22, 23, 24, 25, -1, -1] - patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 73, 1, 0, 71], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1], [85, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1, 1, 1, 1, 81], [80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 78, 1, 1, 1, 1, 1, 1, 80], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 78, 1, 1, 80], [81, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 83, 1, 1, 81], [80, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1], [83, 1, 1, 1, 1, 1, 0, 1, 81, 1, 1, 1, 1, 1, 1, 83], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 85, 83, 85, 86], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 81, 83, 85, 86], [83, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 83, 81], [80, 1, 1, 1, 1, 1, 1, 1, 76, 78, 80, 83, 80, 81, 83, 88], [86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 86, 1, 1, 1, 85, 1, 1, 1], [83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 0, 1, 1, 83, 1, 1, 1, 88, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 0, 86, 1, 1, 1, 88, 1, 1, 1], [88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 76, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]] - - numvoices: 2 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, 1, 2, 4, -1, -1, -1, -1] - patterns: [[50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1], [47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1, 44, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 17, 21, 22, 23, 24, 25, -1, -1, -1] + patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 73, 1, 0, 71], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1], [85, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1, 1, 1, 1, 81], [80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 0, 1, 1, 1, 1, 78, 1, 1, 1, 1, 1, 1, 80], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 78, 1, 1, 80], [81, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 83, 1, 1, 81], [80, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1], [83, 1, 1, 1, 1, 1, 0, 1, 81, 1, 1, 1, 1, 1, 1, 83], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 85, 1, 1, 83], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 81, 1, 1, 85], [83, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 83, 81], [80, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 76, 1, 1, 1], [86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 86, 1, 1, 1, 85, 1, 1, 1], [83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 83, 1, 1, 1, 88, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 86, 1, 1, 1, 88, 1, 1, 1], [88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 76, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1] - patterns: [[60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 1, 3, -1, -1, -1, -1, -1] + patterns: [[62, 1, 1, 1, 62, 62, 62, 62, 1, 1, 62, 1, 1, 62, 1, 1], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 62, 62], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 62, 1], [62, 1, 1, 1, 62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, -1, -1, -1] - patterns: [[60, 1, 1, 1, 62, 62, 62, 62, 1, 1, 62, 1, 1, 62, 1, 1], [62, 1, 1, 1, 62, 62, 62, 62, 1, 1, 62, 1, 1, 62, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1, -1, -1, -1, -1] + patterns: [[60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1], [60, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] rowsperpattern: 16 length: 41 patch: @@ -43,16 +40,13 @@ patch: units: - type: envelope id: 33 - parameters: {attack: 57, channel: 2, decay: 85, gain: 84, release: 63, stereo: 0, sustain: 62} + parameters: {attack: 57, channel: 2, decay: 82, gain: 128, release: 63, stereo: 0, sustain: 62} - type: oscillator id: 19 - parameters: {color: 65, damp: 64, detune: 65, dry: 128, feedback: 125, gain: 35, looplength: 9710, loopstart: 251, notetracking: 0, phase: 0, pregain: 40, samplestart: 1448797, shape: 67, stereo: 0, transpose: 91, type: 4, unison: 0} + parameters: {color: 65, damp: 64, detune: 65, dry: 128, feedback: 125, gain: 41, looplength: 9710, loopstart: 251, notetracking: 0, phase: 0, pregain: 40, samplestart: 1448797, shape: 67, stereo: 0, transpose: 91, type: 4, unison: 1} - type: oscillator id: 24 - parameters: {color: 69, detune: 61, gain: 78, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 65, stereo: 0, transpose: 79, type: 4, unison: 0} - - type: distort - id: 47 - parameters: {damp: 0, drive: 32, dry: 128, feedback: 96, notetracking: 2, pregain: 40, stereo: 0} + parameters: {color: 69, detune: 63, gain: 62, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 65, stereo: 0, transpose: 79, type: 4, unison: 1} - type: addp id: 20 parameters: {panning: 64, stereo: 0} @@ -60,16 +54,13 @@ patch: parameters: {auxgain: 64, outgain: 64, stereo: 0} - type: envelope id: 46 - parameters: {attack: 57, decay: 87, gain: 71, panning: 64, release: 64, stereo: 0, sustain: 50} + parameters: {attack: 57, decay: 87, gain: 100, panning: 64, release: 64, stereo: 0, sustain: 50} - type: oscillator id: 37 - parameters: {auxgain: 35, color: 64, detune: 54, gain: 64, looplength: 9710, loopstart: 251, outgain: 40, phase: 0, samplestart: 1448797, shape: 64, stereo: 0, transpose: 91, type: 4, unison: 0} + parameters: {auxgain: 35, color: 64, detune: 54, gain: 64, looplength: 9710, loopstart: 251, outgain: 40, phase: 0, samplestart: 1448797, shape: 64, stereo: 0, transpose: 91, type: 4, unison: 1} - type: oscillator id: 38 - parameters: {color: 128, detune: 62, gain: 68, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 80, stereo: 0, transpose: 79, type: 4, unison: 0} - - type: distort - id: 48 - parameters: {drive: 64, stereo: 0} + parameters: {color: 128, detune: 62, gain: 78, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 64, stereo: 0, transpose: 79, type: 4, unison: 1} - type: xch id: 41 parameters: {stereo: 0} @@ -79,134 +70,72 @@ patch: - type: mulp id: 35 parameters: {stereo: 0} - - type: filter - id: 45 - parameters: {bandpass: 1, frequency: 92, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 1} - type: outaux id: 23 - parameters: {auxgain: 41, outgain: 27, stereo: 1} + parameters: {auxgain: 19, outgain: 18, stereo: 1} - name: Pizzicato numvoices: 4 units: - type: envelope id: 1 - parameters: {attack: 10, channel: 2, decay: 70, gain: 61, release: 72, stereo: 0, sustain: 0} + parameters: {attack: 31, channel: 2, decay: 70, gain: 76, release: 66, stereo: 0, sustain: 0} - type: oscillator id: 2 - parameters: {color: 60, damp: 64, detune: 32, dry: 128, feedback: 125, gain: 74, looplength: 398, loopstart: 2073, notetracking: 0, phase: 0, pregain: 40, samplestart: 1034961, shape: 81, stereo: 0, transpose: 77, type: 4, unison: 2} + parameters: {color: 64, damp: 64, detune: 31, dry: 128, feedback: 125, gain: 128, looplength: 398, loopstart: 2073, notetracking: 0, phase: 0, pregain: 40, samplestart: 1034961, shape: 64, stereo: 0, transpose: 77, type: 4, unison: 2} - type: oscillator - parameters: {auxgain: 64, color: 64, detune: 48, gain: 128, looplength: 398, loopstart: 2073, outgain: 64, phase: 0, samplestart: 1034961, shape: 42, stereo: 0, transpose: 77, type: 4, unison: 0} + parameters: {auxgain: 64, color: 64, detune: 48, gain: 97, looplength: 398, loopstart: 2073, outgain: 64, phase: 0, samplestart: 1034961, shape: 64, stereo: 0, transpose: 89, type: 4, unison: 2} - type: addp id: 16 parameters: {stereo: 0} - - type: filter - id: 15 - parameters: {bandpass: 1, frequency: 47, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} - type: mulp id: 14 parameters: {bandpass: 0, frequency: 82, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} - - parameters: {} - type: pan id: 5 - parameters: {auxgain: 39, outgain: 58, panning: 64, stereo: 0} + parameters: {auxgain: 39, outgain: 58, panning: 75, stereo: 0} - type: delay id: 49 - parameters: {damp: 98, dry: 128, feedback: 53, notetracking: 0, pregain: 69, stereo: 1} + parameters: {damp: 86, dry: 128, feedback: 59, notetracking: 0, pregain: 28, stereo: 1} varargs: [5230, 4533] - type: outaux id: 6 - parameters: {auxgain: 33, outgain: 39, stereo: 1} + parameters: {auxgain: 32, outgain: 20, stereo: 1} - name: Trumpet numvoices: 3 units: - type: envelope id: 51 - parameters: {attack: 0, decay: 67, gain: 128, release: 71, stereo: 1, sustain: 87} + parameters: {attack: 25, decay: 64, gain: 112, release: 64, stereo: 1, sustain: 88} - type: oscillator id: 1037 - parameters: {color: 61, detune: 64, gain: 88, looplength: 76, loopstart: 1916, phase: 0, samplestart: 1622065, shape: 63, stereo: 1, transpose: 62, type: 4, unison: 0} + parameters: {color: 64, detune: 64, gain: 47, looplength: 76, loopstart: 1916, phase: 0, samplestart: 1622065, shape: 64, stereo: 1, transpose: 62, type: 4, unison: 1} - type: mulp id: 53 parameters: {stereo: 1} - - type: pan - id: 55 - parameters: {panning: 73, stereo: 1} - type: delay - parameters: {damp: 16, dry: 128, feedback: 61, notetracking: 2, pregain: 76, stereo: 1} + parameters: {damp: 18, dry: 128, feedback: 37, notetracking: 2, pregain: 84, stereo: 1} varargs: [48, 96] - type: outaux id: 56 - parameters: {auxgain: 76, outgain: 92, stereo: 1} + parameters: {auxgain: 53, outgain: 56, stereo: 1} - type: envelope id: 61 - parameters: {attack: 95, decay: 0, gain: 82, release: 89, stereo: 0, sustain: 92} + parameters: {attack: 91, decay: 0, gain: 82, release: 89, stereo: 0, sustain: 92} - type: oscillator id: 59 - parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 81, type: 0} + parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 82, type: 0, unison: 0} - type: mulp id: 62 parameters: {stereo: 0} - type: send id: 1038 - parameters: {amount: 89, port: 1, sendpop: 1, stereo: 0, target: 1037, unit: 0, voice: 0} - - name: Bass - numvoices: 2 - units: - - type: envelope - id: 21 - parameters: {attack: 40, decay: 65, gain: 74, release: 71, stereo: 0, sustain: 77} - - type: oscillator - id: 400 - parameters: {color: 126, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 52, type: 0, unison: 2} - - type: oscillator - id: 6 - parameters: {color: 118, detune: 64, gain: 128, lfo: 0, phase: 75, shape: 61, stereo: 0, transpose: 64, type: 1, unison: 1} - - type: addp - parameters: {stereo: 0} - - type: oscillator - id: 1033 - parameters: {color: 62, detune: 64, gain: 128, looplength: 905, loopstart: 6513, phase: 42, samplestart: 1252819, shape: 104, stereo: 0, transpose: 93, type: 4, unison: 0} - - type: filter - id: 1035 - parameters: {bandpass: 0, frequency: 50, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 100, stereo: 0} - - type: addp - id: 1032 - parameters: {stereo: 0} - - type: mulp - id: 22 - parameters: {stereo: 0} - - type: filter - parameters: {bandpass: 0, frequency: 94, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} - - type: pan - id: 18 - parameters: {panning: 64, stereo: 0} - - type: outaux - id: 19 - parameters: {auxgain: 0, outgain: 39, stereo: 1} - - name: kick - numvoices: 1 - units: - - type: envelope - id: 1039 - parameters: {attack: 0, decay: 43, gain: 128, release: 50, stereo: 0, sustain: 89} - - type: oscillator - id: 1040 - parameters: {color: 42, detune: 42, gain: 128, looplength: 1, loopstart: 1034, phase: 0, samplestart: 741926, shape: 72, stereo: 0, transpose: 79, type: 4} - - type: mulp - id: 1041 - parameters: {stereo: 0} - - type: pan - id: 1043 - parameters: {panning: 64, stereo: 0} - - type: outaux - id: 1044 - parameters: {auxgain: 0, outgain: 124, stereo: 1} + parameters: {amount: 80, port: 1, sendpop: 1, stereo: 0, target: 1037, unit: 0, voice: 0} - name: snare edm 2 (sample-st) comment: 'Suggested range: E-2 to C-3' numvoices: 1 units: - type: envelope - parameters: {attack: 14, decay: 68, gain: 110, release: 0, stereo: 0, sustain: 0} + parameters: {attack: 0, decay: 68, gain: 90, release: 0, stereo: 0, sustain: 0} - type: oscillator id: 200 parameters: {color: 48, detune: 52, gain: 53, lfo: 0, looplength: 1, loopstart: 4276, phase: 0, samplestart: 560606, shape: 81, stereo: 0, transpose: 76, type: 4} @@ -228,7 +157,25 @@ patch: - type: pan parameters: {panning: 59, stereo: 0} - type: outaux - parameters: {auxgain: 8, outgain: 128, stereo: 1} + parameters: {auxgain: 56, outgain: 77, stereo: 1} + - name: kick + numvoices: 1 + units: + - type: envelope + id: 1039 + parameters: {attack: 0, decay: 43, gain: 103, release: 50, stereo: 0, sustain: 89} + - type: oscillator + id: 1040 + parameters: {color: 42, detune: 42, gain: 128, looplength: 1, loopstart: 1034, phase: 0, samplestart: 741926, shape: 72, stereo: 0, transpose: 79, type: 4} + - type: mulp + id: 1041 + parameters: {stereo: 0} + - type: pan + id: 1043 + parameters: {panning: 64, stereo: 0} + - type: outaux + id: 1044 + parameters: {auxgain: 0, outgain: 72, stereo: 1} - name: Global numvoices: 1 units: @@ -237,8 +184,8 @@ patch: parameters: {channel: 2, stereo: 1} - type: delay id: 8 - parameters: {damp: 25, dry: 128, feedback: 125, notetracking: 0, pregain: 30, stereo: 1} + parameters: {damp: 14, dry: 128, feedback: 123, notetracking: 0, pregain: 33, stereo: 1} varargs: [1116, 1188, 1276, 1356, 1422, 1492, 1556, 1618, 1140, 1212, 1300, 1380, 1446, 1516, 1580, 1642] - type: out id: 9 - parameters: {gain: 128, stereo: 1} + parameters: {gain: 90, stereo: 1} diff --git a/music/4k_sg_v3.xrns b/music/4k_sg_v3.xrns index dc51f64ebd5cdaf7f2bb489a53f3b31a25eb83e2..f5eb463504e0d120df73afd53dfc390336dc5488 100644 GIT binary patch delta 15105 zcmbWe1ymf-wk?Xg1_xH|-Q_}w|@Tzlib zd*7!AyZ2hXtE$J6Ip;2@=n=@NZb(2)5gG;?0tx~FA_d}EcYy5H?}8r!!h!|?D&1&_+%4V1 z)EUU3DM8q?&VX359({_%!l5}b)5e-{Z}hb1UrMvO6I~Ve9e5&tp?><91T?&S$onwy zdRH*Z^u+hNCCb`qIAiHhxbJFSC`=1i@X~ogtD^ea{PbDQ0DD%wx_s)zV19p!W-2|k zE#gHp=M&C}2DU1z$};M1lAv^o4f08gl3|v2;1|hEh1YnV$tp$lR=#ttbaR4{`Z?}m ztQHR9k(4U-%wK7+-yb6Oh5#>A9ETG~ueN(RJsuj$DZ1(o@+Heen8rtvbN^54zBKE0 zgsjsgwAw5OIsuYCX{@=e-&j&o?=yu%t0M}^toE%6Ix|%E9qw99J7nzoac4UwsnL3|bRgGgiCY>w6(kOS2ys%W{#Fk8j-(D%FaqFAyQv=+$>crQV2~pqT z(!T3OaxcISSoh^38nK|)QHA?js-C9N0eyu&z*lW^aItP{8y8_1`X|h2b|(B0ReWW) zH~izb1gokJMRN{n)ygLQ6pu)A?J5!BgF5j!E}Cp%Y3(>^A1-IQonGj(CW0&>20APpkSS8?bH?$QmFDK z%{+rQ+7#J06ka7&hNB6a%RxQmAgvgx?<#>> zDiadY!;P9d-l>`kXf#%$>iQyN@`wIo{{$-#rG(&1xJWop(n$x{2$18+WX>IBy^UnW z=iBa{h*qKtIhU2!M3JC7BJQ48rf-+`s%suqX@E5S-gh14U)*>TFXC#FJ zorz*?q1`v9a=)a`fB|Owbk;C&AU4@5j)#1w_a!KePi*Naf1SNNEo10~A3xrb!rVgt zjVAT46IGdzX|YV;x1onZA#q06Q(B4YWQn1+9!E##=u}WOj5Lu|O;b|nE`+^kW zBr>A{?+Z@4;+xw>Dx2P9sn_Jfc4qn(Q~6{-ei$@sFqM~oP1f+!*YNF4)_9>Vx@|0+ zMpaaJOmlB-qRw{Eohk$5t^M?;?jxvM-kD@V2!hEC@2LL`$`9c(@nmD|)QG-Rp}MYl6AX7bi%dIxNfR*x2{XOHGzX)VEB z@d$)2QKr)MDt-(IzjrE0!DGo3Avxff{W^|rEmp8b?NlDeWeZmWJU+b8v$9lIiaa=# zwDFw0@dJPs-`_6>#rO_ff%rBGYcB{T)E{)!wc+f`UTEg?qwqV&)EADaj`xuT-)*&$ zyQsf|Q;;WAjTfWrm0;#1(RuasWu%m>@@lYdF?FXM<-TlyK^e1yt{aWBqjPY9Gdd7B zPi3Y|9XoQU?c5IyH-7TZaQA4Tvvb^A-Xh|9n+e3rs4hLI?WXEBzP8ylZ&i9%YVb6f zyTLcK(U?~5oG$cwms`s{rknUZTjroObzOEk&VGkO{<()7GHLt9t?yy`^oH!??<&dOq>cG2z=Y4P1!6+?n)|zRasT zjbZ_n=N_3o#wat;oki&Hup4}CkUNJ~_v(1Y0?t#0m=i~r)omi`zQw0}iI~D=X7ILk zlShN(I3J}b2qr$7FjkG9WJr2@r(81JIi(&jQ#{OiSSK>o`rh~@KRkf#Rod}_olsT| zCRnq&$3HlKi1t(kYA4%<`;B-m#+(_Pm9qw*9!)+?<(l{&rOH^mx6bgy0jEr{N~Vo) z#dp^tH2>UVAF_3vvrEe%L~*6+wyLuy46ZgA+riMf%0plROVC~3e*CaaNL{&MoC(?1 zimFQMdefp8VjgMWo0)wbxk#C=q-Hreoi@k7ttI1y0k3u7w`pr>WDe_hp5+)8J&qm# zy@$=f3aGM`o)bSVmN?`)*O~rT9L5>|S}T)HL@# zEkd0BO!H>)droDU0cyv`HoX-ZBp(0F>RzmJs>armY11TB!!;q&$@D|>&Hie-!If=- zQU=2n#1a8b7|**L#!-1rEGyAI(UZt5;9Zlx7~+_DyP-1t$k57Z?P65JyVLPh@^cy; zIg*{XE2>$0lP(B`M{R>yA@&*vrZgJq7w7o~`X_T;_fsDqlig=eH#r!`MxQhbAN z&aO?1AR#HASBHy4G`P$kwhVbc%}Q3SUdy`0h|nbGnkFb+d2Je=seJnQTbO zk3Wr^GhXz@S4O!_3gWGZ*8`LT^Dw%7t3QNJ9`DKN;KfOwUmZ_O*VoVbLBad1&Qd3( zM!)F{%&>Jr2|PBQ(J(q%d|Kb>e|@MvTGqZi?A-2msHZJzm^!+vxboDu<54Ktu`+6H z>u|VA4z(;_Fq(-tN$d7F`0gsK3B1?XX&1Gp*H+f~&D+G9m|ROWaWmxiE!6M4gSM86I$zH`c2us38i?R_D0{eF_yl=a9wXTh?`>)4rV*a$A?2Fv`^S*A~W z{%B#_viYyIZNsW+ooefYHiJN!moIHgKb0?XtTLW-%+K^*9Xi(TtJ%ob-UELArO4Tl zOE!SIK)dnsTm8x#k4i(jnN_4~-y@!*m*;wVy6p^Ghey2fN}8D&iN+VJ7e`@~WpjeI z(FRkc+PQJtx%5_RVW;f8+vUdhuv72o-7jtHR~anyB?J|L`S&;J8u9Th$|6Xt^U%R@ zlW=+uOWeD~lr`*UiIv@@vcMn;r~7D|osx@5f=~N|mqwz!Qh0*T3YQMG>cEe=;q>Hn z0yn#aG7G_w%<@`p-2Ke@)$6-;POhglmAQJHacXpwv!xrni*_EBrj6$f@n1j+=`tuH zRj`+$Ba|cdn0H?6`l~y(zD45qg-#7=HhzaJw=(-LF_Ud$yvG4Pz~0InfR5U;)gQt} zW_M^~vGT2oi^rewaRr-$+On7nSulP$xzXyr*vOH&9wu@JzuUB4>D)2i24Ocn;ZsYw z{HId}0^(^*1M>)Ip4}ItC+nulDRyFk-HsiCOOphf)kLSA&vJuW`{`D8(*~ac89xPn z5uP^~BfJ!z{i34h2z317F4<4FU9BfsYts4s;^ZWR(%2JOF(_>1nCMfwU_P`=+9`{} z>BZYRHS=4>FCAZ0!GR)I7N)5we7vSWgvL(6W5MTOMN4byre3t7JRp2TNC90(WKnLr zNLD6gEf~NjX2EZ#*NUk3lu2XswcuE}KKqtCw-jQeQO_Dm2-M}6W*&T+`tlL=N##Z` z_kNM?z+EZ6Q9krGVm%*6MzEayl8Uh2|6?Yv6WYsX)>C#5H>GzU-Ws?M@6V8!k4s;f zaTXLq=w#(J_ z>Qb#vOmD_(KM4T!7ALsN=gwQy*i%lQ)8}!{hfY1mc*An{BRb2&T@Z=EMb!H1Z(Hk& zQp-b|8ybbfWtjg3D>pYD?*%tefHV8`N2+>moa)+3K|4uz-hhlUL(WQ7%dLbcLY%$3!F6 z`|V)!^2$F8>CwRePRbf1^2I#<&ttx765qM+kD*%ejk&Rj0_3YAy_A%Fp#M4FQF%g_HW43|(TEmZ>b`DCvnyiIyik}U$kDY#! zTUzs9O#++@X$U7UPaeaRG`Uqw4`YHiQw?QJL&lR%$PTrUnb(hLOK%H`V(ynJe<};F zRIH#o+7&aIdPE zY!Yhs*_}~RqXidHW3!JVj+kE^`X*AB0@=AxD64<=7GV+G@W0LwEYI?HJ*lradgsW?s_x z!~8e;bDk5cuE2I+B)bET3~Kt%`WzKIN|dqN@3uMIUf(A++nM?7(4KA#*UUGczrN)g z2>Z&N<`pL}6zExHWoP~Vd0$xl4yUtpLUe`_`R7Es{zG6(xk!_RN4cxROl$RZDw7k? za$O@Fv8Yyw7>eAGOCVEOzbs(Y>nCxu2FRiVhfaYy!Umi+%{g4ppK&$Mc7%N=1ZjRb zVZxt!e~%XpANWREW?Xd>0sU3ce5OTW;Qb)ub3iUt4bj^;l>&E#?e<@!-=AbS zKk|fkC-=`px>ttJv-rpsEzT?Uj_jX{2%juZ3~`3dBfO9lNo0EFnXUedZDgyO%iO!s%OSN|G;h7OE^6dfYb@k!McO1tV2>1r!uH* zOiCZON^;hZpPjo4A2mjfayo6_E;Y}X{YC%5;qu~$^L{SjcS|*6;%#d5qRjE9jrAhG zT#B=A>ICzC8dh_Rjfe?{lpHjMfSv~Fq&@B0%hWtwg(5{Nce`msS4&6U+0p7W5nSkS zg+3G0ffwd`?FZhbL!@FHiB9Uuiz&aMLt><+Nd1^cA8H*%?axl~NU9f1q4GNos)HIr z-`d0PtGZFUE8k^YC!>(sv_=HONcxXTMzStlg+BebZT5Xes-4gD z42z_`Vv@l(`L>Tw~4jaSonorr^+Jw`l2VQ9Kd__&gzUJj{BSn z@+DHV^la5@=l0S!t*z8&F75>Nj9RfGpO(BNOt*|&UO4Ei-m>U@S^lG(Z(uO#pD~pm zD{5=>@?mcIiQNDFP4oHS_6Sd48RD#g=*bqYDPgBpv?FS+G0)KB&gEO5Tw|>Oj@8O~ zhO7IHr|e&(-8SzDv2%d~&iaw5k0&gA#dyRxh)ji_uTPHZT7KA%G5(azwXbqW85_2R zsncV5C&SW_2|r~*=YO1H{nJGFxDhr`Z%yd?^-Dvg_2*QXyeHSm{p!n$^{*=1>-CB% zX`u%vU$b4e(P!=OT}&=LM0R#EdQOjQ^cx!-(5(jRcxY}&HbP;6aL5hDixpvoT%;{z zg)_dB&K8I(vjpL9*JgIPG^Uj*}nd%XI9h z`%bE&%r$kVu&%nucX(^lC9-agw63@jtECr4yyqhiAAO_UgR}7E8VCJN+Qv1K$YL}K z2Q8y&_d-k72TOT?UwJ2S&4}C+rJ=o~ohm!=L>~V(B0#a&d;21;%a%K`>*|x#oPJh$ zg2Bkd$j|q!5|ikTcAJXW#m^QuE1!%57z$vJBebew`{s0SsAAfdlCIZg z-*vEWoDIe^H^I^jR@Q14zly@zjr=6>vnnT=NDa5Wba???Kj%R#fi*C-gY@jki6ukU zJWYLA$lO^pm*4v*a<`CFAo>xfM2TW-V?@~aZs_C975lwRj$iQ)-osUNnZ5|a8)jY1 zWvY|4QBsQU${*_7BtL{662`=uX5NXinqTBTKF6XpkPj`$MsR9YM}Ac;jX&{svTO4< ze%SG2+^OdUQnYBpYk4GIrHVlf*piGqSI&t4ZcI3kuAV`Ow`dJ9TTSoJ?^LC=o-;2F zz1`wV?lxuIXqK#%9a}RWy~WuGN;b-yD#^hqG@kRG!M4~s+_T)8_&#lvq|w0-?X&a0 zr9L;pHmXXG;8_rB+CF|xM?3FFiY8vB`61M7>iO{tU>)^xQX1BH;8oS3yj-Q2@#5^h zSH9FSG40Rd%sVmC*pIh`Q6s0Usm3KzAss1Rixw6dZ|WyW2aftktXOYBOl*hUv%F5X^%jk*nmSHP$@R zW|^kBTt1_6NL~G|v%Qh>>vO`4(c%~RpK!QLt;y-6^LIo)-tl{lXzqFyBKp6d$bM{9 zA4$!5^)Vlwjc6t^=&anqc|Y7JGbiQp_%7eoolmV?q0xDsNf?b|w+lKo#C>*^53*0SBp99R119sEb;iy9SuaebEP z8;xy*3Lf6;`^8EE)2Vbk23|$cO4} z^-3mCz+Y-xPvzskVtL@^Q&{8LH^vBjB{IyhypeN0%wSwdGnzPv__`G3B!2?owOk-^ zi)9}R{ouA4xGeP4I%Y)cNi`||;B>)YI3Lr&yPX^0=O=MqeiW7%jcVC@dEc9EnX%I# zI$H1liP5E>aUrl6eG5kls14}c*>yW)Ni+VXi@k!|a|5-f;4Ye@X1V92Z$${i7i|x5 zx|8bFTbz;`8BIQ0{A92zN3OE!=wp--(Q>~oQF~-sAKjY+ln(Y|Yw|lak2yN-C z;vS{S$SOJt{L+aYc6H|>w=K~Nw8I-v2g(Obk~PZjZ7lv~Jhdrs^=`S~&UVo$7usV! zZ_?)1x!8XQav2*J{>VBN%b&C3`S{X7^OZMcZgiR9OFcCvvGm=*C&?<|f;ZQ_0_6tp zQ+{oXCZ9;>J88ATCk==yIyFp3_GDF*Oanu+v{Jcv!Y-@T*r?fm@;yt+0GY%^lsI1Q z%_iQqnHO6fBRH;s!{Z`*jMuyDyE)_*>Em6qFFl!uL`986x1>lX)H`k*^KlFAssSFW z)xs9m9(4(WH$PPWh+9C``V1|@!yR6rKIbhC{qmWe?E9QU6tZ7J1Y0?eG4|$9 zmXY4M9~3)#*#^L>jYe+$XP^p0u}BYK46~mEyP#%E$33l`hS-C>G0j zf_EO(#nwxF&FZDsqddxE2d3TE;^ZM3*>?l;$n5n`qYf>!kE@=e1@Nl0%w4yOQGbHf zw7fk0yZ+qOhXuhR=(^W!dQ)I%w4CGk#;VE7M#9S@HlpNbYtb4If48y1xXMNoa}yWa z?^4Uh@^-L)vssr2H+IX+#egZ{|K=1;itU#+U?RDV?a!`WI5%OKceHeFJI7-#~3W_%;+ zN!5J9s?jB7m)rQsICAgE^v<9p+s7JDq9g2ebRK*+WhuJ$6HFgWabLR;tJnwE zFTx^bwmYj|U($BCY4)9-jXm@T>07hpUQ!Eg{F|P->e1RNxfX%OKqDv9TgZwAc+r9MA1sMw(i=k9 z7-~E zgVshEKVYBS^MT_?CCb6NsRF$Mi-acM;ab6K`oTnBnqPDdUR|3iyNKHDlPr6NM)QX+61%0b<@;;F1;~wBfRExR_Nn=5nL30f;3<9cL%HKT`1~eu^SBD7oOPgs zztM5gQ|Y*owVYLcGlQ^ALV!DfW6EbdWr z-HNZ{23+j-nUtKG))b>lyFfm3c|nI6(=m=WArGoG>o-qk8{leV`5 zlMeGWO-3f2GDJ6ax;aA|4hsvD@hL*2qyQ8YA_5gzQjpj`CT4yn*!Tz*WJ$q%6)0hk zyuHcH9#06W{7|$(Z&~m%^u1}$?sChNuCBuxs+8PSw@6pbb5PACD^#7DNgvsCs>3X<@_Lg)icoiE(#wkq_wk61==?rLswB* zheRj0NXx}He>47gUK4^#S$tnd`J;Fj?euZ?dir^#oX*hsjJL^b`OgQFTwb)@m(LA* zq68OXlS$7_smc}%@_S9$<3+&Z9%G#f;n}v=G>fj&)sN|^JD_s)K>bN85+hg4>ndpa z&)7NU3f-T|rK{38p%!B|QVCa*9%o`Ge@(2M(fVtcwWqO;sHOgEEnXSP`iaraU$tE8 z>vp%K-|4*eM%46vf9`1O7xlcBA8$cv+i`|2{z4J09~$0?cejAuwu}u>d=F(isF}y~ z|HH%=hEL1|rRvR9j79MgDk0uJR_^(NBgFd09sgAPGo{sZp*{bj%&%g8R)XHiA@BP| zYR4RoU<+jbo+!{!t5cAV}ZR-e5$Wn4^G{IDc&!%ibC1lE4E+JbmgNO-OM6`S=ASd7X79aQbs#m%K#x1I14LSY|L~oTpSxK%TdoUA-Iaorp zU~`?HxP5P?LN(HSk?qsiYKk}78KP>JU&w9P53C=w-m1W#oOR)DkPUNopw?dEs>923 zr&h(1ORGH>FGi}6941=%x-PYW$fxcc)zKCGrsH>XT_N@lI&byP9qAK;Gn%1jSDP~r z9foE%-bjY?PQ>7+&M=R(xxS##Yr*DF0QU88{i(drIgr6ZWoy$?&x?EaVZLCvucGF# zs`=RF7El)Q<*3r`uVAzjq^)Ya){8Ohzx2FW(!uc)DirRmszxX$95CDewIX!XztY^~ zAYN9JR_`+&yQ{l`L`r{rZJ+t+T^NE!apy*9o6)}4JYkK)>t(%15hZA<#5oT-+ky@&?Wd*i9sv1S^bgu6*Sj6~>|2yK{+$~di`ATG zt6nT)P13M-9M!XFM35V{mZ5`%9vsA(1gevRQhSDmFL~%NH}<|XcAs?-kM9TWR>(*T zo{8d_D*apvggQ%O$aztGlp5;yZg~|Oggi>VnF`yba_}ju>%zMG*TW#&x#8q-5-!8# z(gQv5!yhVxHb*X6HMyWJ3y+Qy7ca)ziUwoN>}Z;Jj~pMioO|0v)|=mBAyGGg{-FY9 zRt32xp7#pgLm!%@nr^2SfJJvrEz84UpZjUyN8L4;a{7bD#@NpFwrXoVjABD_G^(UC zGBaiE_!S}Uo>bnk`$J=8xS>rgLF`e0hZ7)FDH56{Q~0hwlIXR^1{p7q{z?92FV>^d zo>=x!OahWs$d5`41rN@fpY2D*S+~JiklGS@@|>%ak=FgC(~DJ}jp&DqyUU#Rsng_0 zBhY=Arf}$=MbLg1;YKspx7b;e)v}T=vYBms(l4?|XgtSL?Q*}SwcOdeo)V|C4|D-2 zVoEZ|LEI=vvjhZo1bH$lNG@_J7cn@GL+5}UqR0-{Q(5~Sx~P1zm^VuJdy$IxuxRuJ z7^EW@MZMJV6p@AMPr;=^@P#h@y6iojy^&_0&BH$5EpG>s8`0a;qC8UYOJesM7toAk09%EW zQLfUhz0TmQJ!IekR|TaLTn_rs&HF5!@&OOCrwwBjWA$r2j#+iOIl9H?u&W5r3++p# zM$&3JW%nbyt(+6+b>`715PCI0^f4tPYzVQCx6o_fo;swm>zzq?&7uO7elTciT8{%& zW5QUYy>A~5!L+*o4P=l*ARnL}5DVy&L&Wmmh*{zP<77#T4D@2Y<_R#4p#$w?F3q@7 z+iH(7#*E#XT_`2#^3a@FX1mzw8`zxIU>nmE$~iWZO0AdCHqX{uIvyr?fZ0|mFG6QV zP7JlWG#I~&+13OOv;;-17uhz6TWro`{>K^ZNIgJ<&LcreNtXqU#6>~|iGmp^Z3Y8} z2*q)Ty6yti`!PmNH=yRhlWJ?3c8JfT=ACg|UJ@L3{)!U@=om;O%)QAim2`EndAh>@E$MdkX2S3`7a@|t zE#U8zeNeox0GtxDZ=`C?grJOU#+N&*Q-YF%Q*eR{O3ds>R~#fS^8{}vg3vz^e?&Ak z;(J!o%}FgHTG^9Ulfc3VU+MT@^*6Y742agB{m#ua2All+q&O@ zk^nv-kN|_^CFv{aOAEU06ro$5GcPD}ydd8pwOaGibkxyjsGPobvQo#;o)x-f)X`&9 zPP&2tMk}@EFFK>3)t#l{{VI;?(AuETgM7v_AYW6d_=Y3M#~GwQ(}lABmYZ&Q4E1l+ zA;R0xv5@GNL0|swAP$%Wg-LBVf`bhD0^x1y&5vqdgZ}v`-EzCNECSdmm}3$Y1zLxF zD&xMMmk+Hj(^4fOKKN$eTSq`9+iiv)K2s!|W`=*zM`oEOXbDDbPv|NNpM|N52yuo# zGB7AmEZfZ)r}=Q91?l#ENO_kw`|nC9P@NM4^g3V1`F9s2;}A9s5u6atek~%^>WtRH zb4X?ogNqtuTY9n$k_@42$o;!5du0(Jum=uwsT*1&ls@Pj3rP0i0(;=FE+Bb~v&%wx zjDrJ@1zK|n>KfCa=x@i(+l-Q$uM1+L5H77edS2%EUFe?3v_dt^M=toPx3|M>On#`wRUSI=nloE&-?~pmh4J zmvBKn;ZgWsQOboWElS*5(wkHR)1c3Y9h|P~2{KUlC9N4}M0<(+$T-6&!Rh#?J^3$; z0{%B3_1|Mu%=AxpHrdf4-YQgZlT0+VCrA0f5$ zV&uPtG1x<(6zF8LmJ%_srJ@E)-R4}Nprs^d64bJ~$e>U#_wcr0;G%{~-K<@pBzO6` zgZ3fvp(AyGJ|lrqikpuzuKWWmF$)C(0-zyEIA&q1hM_8^OB<8UERo_S9a{SMD+r#{ z`bhrf;cJvIC=KBhH(+Ekb;XHUFi#Nfi^5n92VoOhb|r>iKRDzwY9U~v$gWhAM07h2 z9>quiQ^!ATDOD>vGjsri{qYnx;I@fb2n8_&$Or1D;7ZV?+^9eUsA~j+DQ-Ya1Nshs zk*tqIgB9e-kueZ{`-kcjR=kK7yH*y{&&0|pU0hz=h&`0z=7$-a^zpqk>bH5O2sk#9MwWAAnV}h%z$(?F-*U|XTz>Vhk~Y} zidpDA44sXnxcM80NF>;QekhCiC@d)P*Le;DEd^Q!idsH&6xwm-?>J@5N4iUhMZ940 z5uvWz`sN_=5eVNA{lvGywrB+HyMPw zC+Dy4q+E*-UcRguk8ttxkCMe zz@z_yAA@~kGKlj*9KQhOcn~b&{2R9;bV-1yCUX28LYEnctMuTe01zln30gENAc3_+ zuwSIJ+px}xfyUFgF?IdK2au|4GR}Ik5-r&^L%JHFZ!Zo8b(0&?sB=sPr%8m)336|g z{tQ(xD8qjlhzfzrQJoTs`$xVE6i5f4jzavChAe^zjMPF6kX-2_b&`p~7b!b#8D-R> z>HrJvtS)CHPIeq?4au-L{4d`%#g5QUMbzE=Tm zq=-`DuYAGcFnAQ>>;s4>7$4R5#y4RiMqNT6Cn2TaJyjeo^mA67ZY`UI;)mR*nlMO@ zY5KRQF7SRHy6VsZP*jcOlt!*gA;4ln$d~^|*fbxR{)?KQ=X7>W@7iRk1~;;ab%?6U z{$$JY_3se`8c>GtZ)OWe97i0BC@g0GBj+x^SN<{{wa$M?`6?i|E7#|jNE^l*cIy&h zg!#8|>#4vRpwJ7Hz)c;nfBsWk8tCPThTUtcpfOw}{ z14Mm?y8kZqwBLXv2b6yJ*gw;a4^{I|X#!RAS4ak5MF3zx$f!()D&*ajTOS}^UOd_>!r7v0xLXzSP-m^;)89ebcp4A8pN4DF@IZ|QasNkmH@L9#FKBp z0uZe8{`NNw^vs_S0t?h6ZoVH6!=)6&=cqa^3~a1_Roo+~G58_Eac8$lfpg4m}O6s{9^WuC6=)mW@K6GaHWik0<8 z<)Yv23n{d-w3_Zz2d8qXv7A$nj^5hFd)hnvKcZ2YrV6iNC5MG!@n}>!PBEpF&5j0$%sRBbk?K^!9g`0oz44)XNMD60le zA8Nt;1a8fVVYaw8N2p9BBcD>fX~O4y*2h(^-s2a6`p1~wH?=xMM(aK1i@%S~=+QR% z)-pTlvXD+IyNO&@t00~so-s6^yUuTL!FpH@XgS3GOX=aG+SVX8$7yB|i8k_X|Fe2q zQ-;?=*z+hC-W0XK2->P;P=o20yuH_oQA__nODeGaZ<6Z&Nl^j+?Y8f_``@>H@cLp9 z>HJ}uD_x@mRw{of01iX}_?R>hO{MZ+xQF`&-s@p}Sk9M$`MUuGqr<;QzH}IZ`$ry} z9%!$PR&ByN@>$luS353`OaVd?=rjF@7c3qU6z2==4Pt^qiZ|~_D>`}^`!bGT#Vp=vaE~yiQenb?CE)16hc2F5a#R+)5rDd~7z(R>aBNM2( z)a$Bm*7Dn{UxlAvjK3q(iDNtb`0PSJ2topayY|(HJ^Oxb|0p5)kRiY(jMF2Ff^}fd z280HpkUZZ&VDR}H2n>|9{~y7CMExINaQE4GPk)#H2W8aYqjw#M7Vf~bP|^oih0p^k z0aoZm)Wv|pIzdzr1Ox-+Jqe!wCIL|XmI86V3iPOp?rK}qFGdg&fbtpsUkd=c@jn*; z*#7@j0KmU#ga2dSzucWoZ0unzdoBp<+=>)v_vx-ZI$wNw9`sU$+)tgaKLz#wUQsZ< z(Zn(o=WhBum*1yGN7{)As{Z#8I4ZL@FSCq2_GyT1)6vtB1%${x(?eGK1$7l$u+T2z&3Us z#tBIjo;V~90NZUUTV<&uuodS*>)i%n%+TOma>wp>%7qaHPI48fDc8d}sK*lD!pu?kz z5<-fYaT$rgd*s=vQh9;#=BrBZzUO~C>gn$OzmkgBr+O52LVr3-l_G_GGy*uN6_Oo= zZoczTwrf(DoTo0~-?b$$4sOiq=m3vxR%Nj^!R>qexi{$Exm;|$)(N1!&J8xXTJL#;5h&cs17fHp zek7o9-#S2WcQ&QL81$mrVz7yILFmjA(O^4!pjK6N&vG}nT1_M%1Apf=4`{T?VdZva zu;FfE~fBlTIm*8^h-L^c?VxC8@!4>XtiU%KOZf&!}FGP~M_b15Zb1$X7G+Ltl&X(I7 z4vFciu8sT69>5C>d2>EV6p{AYFra>7Au?;U*j(j#qd6ZD#uY6 z(zbaF2a0=nS1_0$;Vc~9c0IL+G2YA%8m)E{gAuKE00)JyFGjNB?*OixfRH$sD4a-L zmniN=6A0CH@S;tOqnrQ;BC~$-Iqx6EB}oha8B^U^6MC zvCwMs6hy06-jv$5u`b8iS8Cn`QIhM#j0NsOLWy^aEf%*SI|I1 z3=RlFBk;7$p!W!iVf6@;!Qu)3>u&2PIXPUhppsYK!IARqG`5o0z91PK=mv2R z9_TIj0BxH1gTxFm{z?0ZeT=KMRv>VjYDSAg#qiI2wHVN{$O&(Wm`{nBA883qULW`g z$||}8&tH`+E1gWYHhl#$F!)}H4r0E>eOCmc{cAfJm8=}WqkpJ0=4vreL{A2$7L4zq)b46t=&enHbdX-q^ z0h`(~K4u=`lKvdf)LM{f4rTrL`&_vit``ZdoRwJ-%w|!YSy6qTEES^m#oX(OCr&Cx6xrjFG*dw1c zKM(S}k-_R6AA@uEzl5>P@*e3o)Zrzd^q@ljrdc3FFqCG226f)B>jcAG$D`qXp>T44 zvGfZ6k0(w+50`?UI88ASp@rm4`6_~4pDxl!jrN}(LQOHSpyLO-+@NSmqo^Suz`x4i zL;wDefkr$5&{L|W4$k(LQl{>vtn!X-?yepVmX7Xhf6tndE<*8EO%WCjd;k>aRSSAY IHUV4zA0){hy#N3J delta 16136 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 SQCWZ|vE2*{LBay^fd2~w@!$0T