瀏覽代碼

Updated to lastest SoLoud.

Added Ay sound support.
Brucey 5 年之前
父節點
當前提交
a87dcc43b4
共有 68 個文件被更改,包括 2955 次插入13373 次删除
  1. 1 0
      modloader.mod/common.bmx
  2. 31 19
      modloader.mod/modloader.bmx
  3. 6 0
      modloader.mod/openmptloader.cpp
  4. 33 2
      soloud.mod/common.bmx
  5. 334 110
      soloud.mod/soloud.bmx
  6. 37 0
      soloud.mod/soloud/.gitignore
  7. 3 0
      soloud.mod/soloud/.gitmodules
  8. 0 13
      soloud.mod/soloud/build/genie.lua
  9. 49 1
      soloud.mod/soloud/contrib/src.cmake
  10. 140 0
      soloud.mod/soloud/demos/megademo/ay.cpp
  11. 5 2
      soloud.mod/soloud/demos/megademo/filterfolio.cpp
  12. 47 32
      soloud.mod/soloud/demos/megademo/main.cpp
  13. 14 1
      soloud.mod/soloud/demos/megademo/multimusic.cpp
  14. 1 1
      soloud.mod/soloud/demos/megademo/space.cpp
  15. 2 2
      soloud.mod/soloud/demos/megademo/tedsid.cpp
  16. 3 3
      soloud.mod/soloud/demos/piano/main.cpp
  17. 1 1
      soloud.mod/soloud/demos/piano/soloud_padsynth.cpp
  18. 3 1
      soloud.mod/soloud/docsrc/intro.mmd
  19. 70 0
      soloud.mod/soloud/include/soloud_ay.h
  20. 37 2
      soloud.mod/soloud/include/soloud_c.h
  21. 82 0
      soloud.mod/soloud/include/soloud_eqfilter.h
  22. 10 1
      soloud.mod/soloud/include/soloud_fftfilter.h
  23. 4 6
      soloud.mod/soloud/include/soloud_tedsid.h
  24. 2 0
      soloud.mod/soloud/include/soloud_vizsn.h
  25. 115 0
      soloud.mod/soloud/include/zx7decompress.h
  26. 135 0
      soloud.mod/soloud/src/audiosource/ay/chipplayer.cpp
  27. 41 0
      soloud.mod/soloud/src/audiosource/ay/chipplayer.h
  28. 2 0
      soloud.mod/soloud/src/audiosource/ay/readme.txt
  29. 75 0
      soloud.mod/soloud/src/audiosource/ay/sndbuffer.cpp
  30. 86 0
      soloud.mod/soloud/src/audiosource/ay/sndbuffer.h
  31. 244 0
      soloud.mod/soloud/src/audiosource/ay/sndchip.cpp
  32. 141 0
      soloud.mod/soloud/src/audiosource/ay/sndchip.h
  33. 208 0
      soloud.mod/soloud/src/audiosource/ay/sndrender.cpp
  34. 63 0
      soloud.mod/soloud/src/audiosource/ay/sndrender.h
  35. 187 0
      soloud.mod/soloud/src/audiosource/ay/soloud_ay.cpp
  36. 2 2
      soloud.mod/soloud/src/audiosource/tedsid/sid.cpp
  37. 71 98
      soloud.mod/soloud/src/audiosource/tedsid/soloud_tedsid.cpp
  38. 11 4
      soloud.mod/soloud/src/audiosource/vizsn/soloud_vizsn.cpp
  39. 32 2
      soloud.mod/soloud/src/c_api/soloud.def
  40. 209 12
      soloud.mod/soloud/src/c_api/soloud_c.cpp
  41. 2 0
      soloud.mod/soloud/src/core/soloud.cpp
  42. 5 1
      soloud.mod/soloud/src/core/soloud_queue.cpp
  43. 3 1
      soloud.mod/soloud/src/filter/soloud_bassboostfilter.cpp
  44. 136 0
      soloud.mod/soloud/src/filter/soloud_eqfilter.cpp
  45. 188 48
      soloud.mod/soloud/src/filter/soloud_fftfilter.cpp
  46. 31 97
      soloud.mod/soloud/src/tools/codegen/main.cpp
  47. 7 2
      soloud.mod/soloud/src/tools/sanity/sanity.cpp
  48. 0 100
      soloud.mod/soloud/src/tools/tedsid2dump/cbmtune.cpp
  49. 0 105
      soloud.mod/soloud/src/tools/tedsid2dump/cbmtune.h
  50. 0 4508
      soloud.mod/soloud/src/tools/tedsid2dump/cpu.cpp
  51. 0 141
      soloud.mod/soloud/src/tools/tedsid2dump/cpu.h
  52. 0 331
      soloud.mod/soloud/src/tools/tedsid2dump/cpu7501asm.h
  53. 0 227
      soloud.mod/soloud/src/tools/tedsid2dump/main.cpp
  54. 0 12
      soloud.mod/soloud/src/tools/tedsid2dump/mem.h
  55. 0 59
      soloud.mod/soloud/src/tools/tedsid2dump/psid.h
  56. 0 1
      soloud.mod/soloud/src/tools/tedsid2dump/readme.txt
  57. 0 4129
      soloud.mod/soloud/src/tools/tedsid2dump/roms.h
  58. 0 625
      soloud.mod/soloud/src/tools/tedsid2dump/sid.cpp
  59. 0 179
      soloud.mod/soloud/src/tools/tedsid2dump/sid.h
  60. 0 1382
      soloud.mod/soloud/src/tools/tedsid2dump/tedmem.cpp
  61. 0 205
      soloud.mod/soloud/src/tools/tedsid2dump/tedmem.h
  62. 0 553
      soloud.mod/soloud/src/tools/tedsid2dump/tedplay.cpp
  63. 0 32
      soloud.mod/soloud/src/tools/tedsid2dump/tedplay.h
  64. 0 262
      soloud.mod/soloud/src/tools/tedsid2dump/tedsound.cpp
  65. 0 39
      soloud.mod/soloud/src/tools/tedsid2dump/types.h
  66. 9 0
      soloud.mod/source.bmx
  67. 19 1
      soloudaudio.mod/soloudaudio.bmx
  68. 18 18
      soloudaudiosdl.mod/soloudaudiosdl.bmx

+ 1 - 0
modloader.mod/common.bmx

@@ -41,6 +41,7 @@ Extern
 	Function Openmpt_loadFile:Int(aOpenmpt:Byte Ptr, aFile:Byte Ptr)
 	Function Openmpt_setVolume(aOpenmpt:Byte Ptr, aVolume:Float)
 	Function Openmpt_setLooping(aOpenmpt:Byte Ptr, aLoop:Int)
+	Function Openmpt_setAutoStop(aOpenmpt:Byte Ptr, aAutoStop:Int)
 	Function Openmpt_set3dMinMaxDistance(aOpenmpt:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function Openmpt_set3dAttenuation(aOpenmpt:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function Openmpt_set3dDopplerFactor(aOpenmpt:Byte Ptr, aDopplerFactor:Float)

+ 31 - 19
modloader.mod/modloader.bmx

@@ -21,6 +21,9 @@
 '
 SuperStrict
 
+Rem
+bbdoc: Mod music loader.
+End Rem
 Module Audio.modloader
 
 Import Audio.SoloudAudio
@@ -29,7 +32,9 @@ Import "common.bmx"
 
 
 Rem
-bbdoc: 
+bbdoc: Audio source for Openmpt supported music.
+about: Formats include 669, amf, ams, dbm, digi, dmf, dsm, far, gdm, ice, imf, it, itp, j2b, m15,
+mdl, med, mid, mo3, mod, mptm, mt2, mtm, okt, plm, psm, ptm, s3m, stm, ult, umx, wow and xm.
 End Rem
 Type TSLOpenmpt Extends TSLLoadableAudioSource
 
@@ -40,7 +45,7 @@ Type TSLOpenmpt Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method Load:Int(filename:String)
+	Method Load:Int(filename:String) Override
 		Local s:Byte Ptr = filename.ToUTF8String()
 		Local res:Int = Openmpt_load(asPtr, s)
 		MemFree(s)
@@ -50,14 +55,14 @@ Type TSLOpenmpt Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True)
+	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True) Override
 		Return Openmpt_loadMemEx(asPtr, data, dataLen, copy, takeOwnership)
 	End Method
 
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadStream:Int(stream:TStream)
+	Method loadStream:Int(stream:TStream) Override
 		Local sf:TStreamFile = New TStreamFile.Create(stream)
 		Return Openmpt_LoadFile(asPtr, sf.filePtr)
 	End Method
@@ -65,35 +70,42 @@ Type TSLOpenmpt Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: Sets default volume for instances.
 	End Rem
-	Method setVolume(volume:Float)
+	Method setVolume(volume:Float) Override
 		Openmpt_setVolume(asPtr, volume)
 	End Method
 	
 	Rem
 	bbdoc: Sets the looping of the instances created from this audio source.
 	End Rem
-	Method setLooping(loop:Int)
+	Method setLooping(loop:Int) Override
 		Openmpt_setLooping(asPtr, loop)
 	End Method
 
+	Rem
+	bbdoc: Set whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		Openmpt_setAutoStop(asPtr, autoStop)
+	End Method
+
 	Rem
 	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
 	End Rem
-	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float)
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
 		Openmpt_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
 	End Method
 	
 	Rem
 	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
 	End Rem
-	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float)
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
 		Openmpt_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
 	End Method
 
 	Rem
 	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
 	End Rem
-	Method set3dDopplerFactor(dopplerFactor:Float)
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
 		Openmpt_set3dDopplerFactor(asPtr, dopplerFactor)
 	End Method
 
@@ -101,21 +113,21 @@ Type TSLOpenmpt Extends TSLLoadableAudioSource
 	bbdoc: Enables 3d processing.
 	about: Implicitly set by play3d calls.
 	End Rem
-	Method set3dListenerRelative(listenerRelative:Int)
+	Method set3dListenerRelative(listenerRelative:Int) Override
 		Openmpt_set3dListenerRelative(asPtr, listenerRelative)
 	End Method
 
 	Rem
 	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
 	End Rem
-	Method set3dDistanceDelay(distanceDelay:Int)
+	Method set3dDistanceDelay(distanceDelay:Int) Override
 		Openmpt_set3dListenerRelative(asPtr, distanceDelay)
 	End Method
 
 	Rem
 	bbdoc: Enables delaying the start of the sound based on the distance.
 	End Rem
-	Method set3dCollider(collider:TSLAudioCollider)
+	Method set3dCollider(collider:TSLAudioCollider) Override
 		' TODO
 	End Method
 
@@ -123,7 +135,7 @@ Type TSLOpenmpt Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom 3d audio collider.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int)
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
 		' TODO
 	End Method
 
@@ -131,14 +143,14 @@ Type TSLOpenmpt Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom attenuator.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dAttenuator(attenuator:TSLAudioAttenuator)
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Sets behavior for inaudible sounds.
 	End Rem
-	Method setInaudibleBehavior(mustTick:Int, kill:Int)
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
 		Openmpt_setInaudibleBehavior(asPtr, mustTick, kill)
 	End Method
 
@@ -146,18 +158,18 @@ Type TSLOpenmpt Extends TSLLoadableAudioSource
 	bbdoc: Sets filter.
 	about: Set to NULL to clear the filter.
 	End Rem
-	Method setFilter(filterId:Int, filter:TSLFilter)
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Stops all instances of this audio source.
 	End Rem
-	Method stop()
+	Method stop() Override
 		Openmpt_stop(asPtr)
 	End Method
 
-	Method destroy()
+	Method destroy() Override
 		If asPtr Then
 			Openmpt_destroy(asPtr)
 			asPtr = Null
@@ -174,7 +186,7 @@ New TSoloudModLoader(1)
 
 Type TSoloudModLoader Extends TAudioSourceLoader
 
-	Method LoadAudioSource:TSLLoadableAudioSource( stream:TStream )
+	Method LoadAudioSource:TSLLoadableAudioSource( stream:TStream ) Override
 		Local sound:TSLLoadableAudioSource = New TSLOpenmpt
 		If sound.loadStream(stream) = SO_NO_ERROR Then
 			Return sound

+ 6 - 0
modloader.mod/openmptloader.cpp

@@ -79,6 +79,12 @@ void Openmpt_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Openmpt_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Openmpt * cl = (Openmpt *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Openmpt_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Openmpt * cl = (Openmpt *)aClassPtr;

+ 33 - 2
soloud.mod/common.bmx

@@ -74,6 +74,8 @@ Extern
 	Function Soloud_getMaxActiveVoiceCount:Int(aSoloud:Byte Ptr)
 	Function Soloud_getLooping:Int(aSoloud:Byte Ptr, aVoiceHandle:Int)
 	Function Soloud_setLooping(aSoloud:Byte Ptr, aVoiceHandle:Int, aLooping:Int)
+	Function Soloud_getAutoStop:Int(aSoloud:Byte Ptr, aVoiceHandle:Int)
+	Function Soloud_setAutoStop(aSoloud:Byte Ptr, aVoiceHandle:Int, aAutoStop:Int)
 	Function Soloud_setMaxActiveVoiceCount:Int(aSoloud:Byte Ptr, aVoiceCount:Int)
 	Function Soloud_setInaudibleBehavior(aSoloud:Byte Ptr, aVoiceHandle:Int, aMustTick:Int, aKill:Int)
 	Function Soloud_setGlobalVolume(aSoloud:Byte Ptr, aVolume:Float)
@@ -162,6 +164,7 @@ Extern
 	Function Bus_getWave:Float Ptr(aBus:Byte Ptr)
 	Function Bus_setVolume(aBus:Byte Ptr, aVolume:Float)
 	Function Bus_setLooping(aBus:Byte Ptr, aLoop:Int)
+	Function Bus_setAutoStop(aBus:Byte Ptr, aAutoStop:Int)
 	Function Bus_set3dMinMaxDistance(aBus:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function Bus_set3dAttenuation(aBus:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function Bus_set3dDopplerFactor(aBus:Byte Ptr, aDopplerFactor:Float)
@@ -194,6 +197,7 @@ Extern
 	Function Speech_setText:Int(aSpeech:Byte Ptr, aText:Byte Ptr)
 	Function Speech_setVolume(aSpeech:Byte Ptr, aVolume:Float)
 	Function Speech_setLooping(aSpeech:Byte Ptr, aLoop:Int)
+	Function Speech_setAutoStop(aSpeech:Byte Ptr, aAutoStop:Int)
 	Function Speech_set3dMinMaxDistance(aSpeech:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function Speech_set3dAttenuation(aSpeech:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function Speech_set3dDopplerFactor(aSpeech:Byte Ptr, aDopplerFactor:Float)
@@ -216,6 +220,7 @@ Extern
 	Function Wav_getLength:Double(aWav:Byte Ptr)
 	Function Wav_setVolume(aWav:Byte Ptr, aVolume:Float)
 	Function Wav_setLooping(aWav:Byte Ptr, aLoop:Int)
+	Function Wav_setAutoStop(aWav:Byte Ptr, aAutoStop:Int)
 	Function Wav_set3dMinMaxDistance(aWav:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function Wav_set3dAttenuation(aWav:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function Wav_set3dDopplerFactor(aWav:Byte Ptr, aDopplerFactor:Float)
@@ -240,6 +245,7 @@ Extern
 	Function WavStream_getLength:Double(aWavStream:Byte Ptr)
 	Function WavStream_setVolume(aWavStream:Byte Ptr, aVolume:Float)
 	Function WavStream_setLooping(aWavStream:Byte Ptr, aLoop:Int)
+	Function WavStream_setAutoStop(aWavStream:Byte Ptr, aAutoStop:Int)
 	Function WavStream_set3dMinMaxDistance(aWavStream:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function WavStream_set3dAttenuation(aWavStream:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function WavStream_set3dDopplerFactor(aWavStream:Byte Ptr, aDopplerFactor:Float)
@@ -269,6 +275,7 @@ Extern
 	Function Sfxr_loadPreset:Int(aSfxr:Byte Ptr, aPresetNo:Int, aRandSeed:Int)
 	Function Sfxr_setVolume(aSfxr:Byte Ptr, aVolume:Float)
 	Function Sfxr_setLooping(aSfxr:Byte Ptr, aLoop:Int)
+	Function Sfxr_setAutoStop(aSfxr:Byte Ptr, aAutoStop:Int)
 	Function Sfxr_set3dMinMaxDistance(aSfxr:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function Sfxr_set3dAttenuation(aSfxr:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function Sfxr_set3dDopplerFactor(aSfxr:Byte Ptr, aDopplerFactor:Float)
@@ -303,6 +310,7 @@ Extern
 	Function Monotone_loadFile:Int(aMonotone:Byte Ptr, aFile:Byte Ptr)
 	Function Monotone_setVolume(aMonotone:Byte Ptr, aVolume:Float)
 	Function Monotone_setLooping(aMonotone:Byte Ptr, aLoop:Int)
+	Function Monotone_setAutoStop(aMonotone:Byte Ptr, aAutoStop:Int)
 	Function Monotone_set3dMinMaxDistance(aMonotone:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function Monotone_set3dAttenuation(aMonotone:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function Monotone_set3dDopplerFactor(aMonotone:Byte Ptr, aDopplerFactor:Float)
@@ -319,13 +327,12 @@ Extern
 	Function TedSid_destroy(aTedSid:Byte Ptr)
 	Function TedSid_create:Byte Ptr()
 	Function TedSid_load:Int(aTedSid:Byte Ptr, aFilename:Byte Ptr)
-	Function TedSid_loadToMem:Int(aTedSid:Byte Ptr, aFilename:Byte Ptr)
 	Function TedSid_loadMem:Int(aTedSid:Byte Ptr, aMem:Byte Ptr, aLength:Int)
 	Function TedSid_loadMemEx:Int(aTedSid:Byte Ptr, aMem:Byte Ptr, aLength:Int, aCopy:Int, aTakeOwnership:Int)
-	Function TedSid_loadFileToMem:Int(aTedSid:Byte Ptr, aFile:Byte Ptr)
 	Function TedSid_loadFile:Int(aTedSid:Byte Ptr, aFile:Byte Ptr)
 	Function TedSid_setVolume(aTedSid:Byte Ptr, aVolume:Float)
 	Function TedSid_setLooping(aTedSid:Byte Ptr, aLoop:Int)
+	Function TedSid_setAutoStop(aTedSid:Byte Ptr, aAutoStop:Int)
 	Function TedSid_set3dMinMaxDistance(aTedSid:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
 	Function TedSid_set3dAttenuation(aTedSid:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
 	Function TedSid_set3dDopplerFactor(aTedSid:Byte Ptr, aDopplerFactor:Float)
@@ -338,6 +345,30 @@ Extern
 	Function TedSid_setFilter(aTedSid:Byte Ptr, aFilterId:Int, aFilter:Byte Ptr)
 	Function TedSid_stop(aTedSid:Byte Ptr)
 
+	' Ay
+	Function Ay_destroy(aAy:Byte Ptr)
+	Function Ay_create:Byte Ptr()
+	Function Ay_setParams:Int(aAy:Byte Ptr, aHardwareChannels:Int)
+	Function Ay_setParamsEx:Int(aAy:Byte Ptr, aHardwareChannels:Int, aWaveform:Int)
+	Function Ay_load:Int(aAy:Byte Ptr, aFilename:Byte Ptr)
+	Function Ay_loadMem:Int(aAy:Byte Ptr, aMem:Byte Ptr, aLength:Int)
+	Function Ay_loadMemEx:Int(aAy:Byte Ptr, aMem:Byte Ptr, aLength:Int, aCopy:Int, aTakeOwnership:Int)
+	Function Ay_loadFile:Int(aAy:Byte Ptr, aFile:Byte Ptr)
+	Function Ay_setVolume(aAy:Byte Ptr, aVolume:Float)
+	Function Ay_setLooping(aAy:Byte Ptr, aLoop:Int)
+	Function Ay_setAutoStop(aAy:Byte Ptr, aAutoStop:Int)
+	Function Ay_set3dMinMaxDistance(aAy:Byte Ptr, aMinDistance:Float, aMaxDistance:Float)
+	Function Ay_set3dAttenuation(aAy:Byte Ptr, aAttenuationModel:Int, aAttenuationRolloffFactor:Float)
+	Function Ay_set3dDopplerFactor(aAy:Byte Ptr, aDopplerFactor:Float)
+	Function Ay_set3dListenerRelative(aAy:Byte Ptr, aListenerRelative:Int)
+	Function Ay_set3dDistanceDelay(aAy:Byte Ptr, aDistanceDelay:Int)
+	Function Ay_set3dCollider(aAy:Byte Ptr, aCollider:Byte Ptr)
+	Function Ay_set3dColliderEx(aAy:Byte Ptr, aCollider:Byte Ptr, aUserData:Int)
+	Function Ay_set3dAttenuator(aAy:Byte Ptr, aAttenuator:Byte Ptr)
+	Function Ay_setInaudibleBehavior(aAy:Byte Ptr, aMustTick:Int, aKill:Int)
+	Function Ay_setFilter(aAy:Byte Ptr, aFilterId:Int, aFilter:Byte Ptr)
+	Function Ay_stop(aAy:Byte Ptr)
+
 
 	Function bmx_soloud_streamfile_new:Byte Ptr(obj:Object)
 	Function bmx_soloud_streamfile_free(handle:Byte Ptr)

+ 334 - 110
soloud.mod/soloud.bmx

@@ -22,15 +22,18 @@
 SuperStrict
 
 Rem
-bbdoc: 
+bbdoc: SoLoud audio.
 End Rem
 Module Audio.SoLoud
 
-ModuleInfo "Version: 1.01"
+ModuleInfo "Version: 1.02"
 ModuleInfo "License: zlib/libpng"
 ModuleInfo "Copyright: SoLoud - 2013-2020 Jari Komppa"
 ModuleInfo "Copyright: Wrapper - 2016-2020 Bruce A Henderson"
 
+ModuleInfo "History: 1.02"
+ModuleInfo "History: Update to latest SoLoud."
+ModuleInfo "History: Added TSLAy audio source."
 ModuleInfo "History: 1.01"
 ModuleInfo "History: Update to latest SoLoud."
 ModuleInfo "History: Refactored drivers. SDL and miniaudio now available as backends."
@@ -53,7 +56,7 @@ Import "file.bmx"
 Import "common.bmx"
 
 Rem
-bbdoc: 
+bbdoc: An instance of the Soloud player.
 End Rem
 Type TSoloud
 
@@ -281,10 +284,27 @@ Type TSoloud
 	Method getLooping:Int(voiceHandle:Int)
 		Return Soloud_getLooping(slPtr, voiceHandle)
 	End Method
-	
+
+	Rem
+	bbdoc: Sets voice's loop state.
+	End Rem
 	Method setLooping(voiceHandle:Int, looping:Int)
 		Soloud_setLooping(slPtr, voiceHandle, looping)
 	End Method
+
+	Rem
+	bbdoc: Queries whether a voice is set to auto-stop when it ends.
+	End Rem
+	Method getAutoStop:Int(voiceHandle:Int)
+		Return Soloud_getAutoStop(slPtr, voiceHandle)
+	End Method
+	
+	Rem
+	bbdoc: Sets whether sound should auto-stop when it ends.
+	End Rem
+	Method setAutoStop(voiceHandle:Int, autoStop:Int)
+		Soloud_setAutoStop(slPtr, voiceHandle, autoStop)
+	End Method
 	
 	Rem
 	bbdoc: Sets current maximum active voice setting.
@@ -514,7 +534,7 @@ Type TSoloud
 End Type
 
 Rem
-bbdoc: 
+bbdoc: Base type for audio sources.
 End Rem
 Type TSLAudioSource Abstract
 
@@ -524,6 +544,7 @@ Type TSLAudioSource Abstract
 
 	Method setVolume(volume:Float) Abstract
 	Method setLooping(loop:Int) Abstract
+	Method setAutoStop(autoStop:Int) Abstract
 	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Abstract
 	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Abstract
 	Method set3dDopplerFactor(dopplerFactor:Float) Abstract
@@ -551,7 +572,7 @@ Type TSLLoadableAudioSource Extends TSLAudioSource
 End Type
 
 Rem
-bbdoc: 
+bbdoc: Audio source for a Klatt-style formant speech synthesizer.
 End Rem
 Type TSLSpeech Extends TSLAudioSource
 
@@ -571,35 +592,42 @@ Type TSLSpeech Extends TSLAudioSource
 	Rem
 	bbdoc: Sets default volume for instances.
 	End Rem
-	Method setVolume(volume:Float)
+	Method setVolume(volume:Float) Override
 		Speech_setVolume(asPtr, volume)
 	End Method
 	
 	Rem
 	bbdoc: Sets the looping of the instances created from this audio source.
 	End Rem
-	Method setLooping(loop:Int)
+	Method setLooping(loop:Int) Override
 		Speech_setLooping(asPtr, loop)
 	End Method
 
+	Rem
+	bbdoc: Sets whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		Speech_setAutoStop(asPtr, autoStop)
+	End Method
+	
 	Rem
 	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
 	End Rem
-	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float)
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
 		Speech_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
 	End Method
 	
 	Rem
 	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
 	End Rem
-	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float)
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
 		Speech_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
 	End Method
 
 	Rem
 	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
 	End Rem
-	Method set3dDopplerFactor(dopplerFactor:Float)
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
 		Speech_set3dDopplerFactor(asPtr, dopplerFactor)
 	End Method
 
@@ -607,21 +635,21 @@ Type TSLSpeech Extends TSLAudioSource
 	bbdoc: Enables 3d processing.
 	about: Implicitly set by play3d calls.
 	End Rem
-	Method set3dListenerRelative(listenerRelative:Int)
+	Method set3dListenerRelative(listenerRelative:Int) Override
 		Speech_set3dListenerRelative(asPtr, listenerRelative)
 	End Method
 
 	Rem
 	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
 	End Rem
-	Method set3dDistanceDelay(distanceDelay:Int)
+	Method set3dDistanceDelay(distanceDelay:Int) Override
 		Speech_set3dListenerRelative(asPtr, distanceDelay)
 	End Method
 
 	Rem
 	bbdoc: Enables delaying the start of the sound based on the distance.
 	End Rem
-	Method set3dCollider(collider:TSLAudioCollider)
+	Method set3dCollider(collider:TSLAudioCollider) Override
 		' TODO
 	End Method
 
@@ -629,7 +657,7 @@ Type TSLSpeech Extends TSLAudioSource
 	bbdoc: Sets a custom 3d audio collider.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int)
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
 		' TODO
 	End Method
 
@@ -637,14 +665,14 @@ Type TSLSpeech Extends TSLAudioSource
 	bbdoc: Sets a custom attenuator.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dAttenuator(attenuator:TSLAudioAttenuator)
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Sets behavior for inaudible sounds.
 	End Rem
-	Method setInaudibleBehavior(mustTick:Int, kill:Int)
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
 		Speech_setInaudibleBehavior(asPtr, mustTick, kill)
 	End Method
 
@@ -652,19 +680,19 @@ Type TSLSpeech Extends TSLAudioSource
 	bbdoc: Sets filter.
 	about: Set to NULL to clear the filter.
 	End Rem
-	Method setFilter(filterId:Int, filter:TSLFilter)
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Stops all instances of this audio source.
 	End Rem
-	Method stop()
+	Method stop() Override
 		Speech_stop(asPtr)
 	End Method
 
 
-	Method destroy()
+	Method destroy() Override
 		If asPtr Then
 			Speech_destroy(asPtr)
 			asPtr = Null
@@ -678,7 +706,13 @@ Type TSLSpeech Extends TSLAudioSource
 End Type
 
 Rem
-bbdoc: 
+bbdoc: Audio source for wave sound effects.
+about: The source files may be in various RIFF WAV file formats, FLAC, MP3 or Ogg Vorbis files.
+The sounds are loaded and converted to float samples, which means that every second of a 44100Hz stereo sound takes about 350kB of memory.
+The good side is, after loading, the use of these samples are very lightweight, as their processing is mostly just a memory copy.
+
+For lengthy samples like background music, you may want to use #TSLWavStream instead.
+The Wav is all about speed, and always decodes the whole sample into memory at load time.
 End Rem
 Type TSLWav Extends TSLLoadableAudioSource
 
@@ -696,7 +730,7 @@ Type TSLWav Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method Load:Int(filename:String)
+	Method Load:Int(filename:String) Override
 		Local s:Byte Ptr = filename.ToUTF8String()
 		Local res:Int = Wav_load(asPtr, s)
 		MemFree(s)
@@ -706,14 +740,14 @@ Type TSLWav Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True)
+	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True) Override
 		Return Wav_loadMemEx(asPtr, data, dataLen, copy, takeOwnership)
 	End Method
 
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadStream:Int(stream:TStream)
+	Method loadStream:Int(stream:TStream) Override
 		Local sf:TStreamFile = New TStreamFile.Create(stream)
 		Local res:Int = Wav_loadFile(asPtr, sf.filePtr)
 		'sf.Free()
@@ -723,35 +757,42 @@ Type TSLWav Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: Sets default volume for instances.
 	End Rem
-	Method setVolume(volume:Float)
+	Method setVolume(volume:Float) Override
 		Wav_setVolume(asPtr, volume)
 	End Method
 	
 	Rem
 	bbdoc: Sets the looping of the instances created from this audio source.
 	End Rem
-	Method setLooping(loop:Int)
+	Method setLooping(loop:Int) Override
 		Wav_setLooping(asPtr, loop)
 	End Method
 
+	Rem
+	bbdoc: Sets whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		Wav_setAutoStop(asPtr, autoStop)
+	End Method
+
 	Rem
 	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
 	End Rem
-	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float)
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
 		Wav_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
 	End Method
 	
 	Rem
 	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
 	End Rem
-	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float)
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
 		Wav_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
 	End Method
 
 	Rem
 	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
 	End Rem
-	Method set3dDopplerFactor(dopplerFactor:Float)
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
 		Wav_set3dDopplerFactor(asPtr, dopplerFactor)
 	End Method
 
@@ -759,21 +800,21 @@ Type TSLWav Extends TSLLoadableAudioSource
 	bbdoc: Enables 3d processing.
 	about: Implicitly set by play3d calls.
 	End Rem
-	Method set3dListenerRelative(listenerRelative:Int)
+	Method set3dListenerRelative(listenerRelative:Int) Override
 		Wav_set3dListenerRelative(asPtr, listenerRelative)
 	End Method
 
 	Rem
 	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
 	End Rem
-	Method set3dDistanceDelay(distanceDelay:Int)
+	Method set3dDistanceDelay(distanceDelay:Int) Override
 		Speech_set3dListenerRelative(asPtr, distanceDelay)
 	End Method
 
 	Rem
 	bbdoc: Enables delaying the start of the sound based on the distance.
 	End Rem
-	Method set3dCollider(collider:TSLAudioCollider)
+	Method set3dCollider(collider:TSLAudioCollider) Override
 		' TODO
 	End Method
 
@@ -781,7 +822,7 @@ Type TSLWav Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom 3d audio collider.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int)
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
 		' TODO
 	End Method
 
@@ -789,14 +830,14 @@ Type TSLWav Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom attenuator.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dAttenuator(attenuator:TSLAudioAttenuator)
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Sets behavior for inaudible sounds.
 	End Rem
-	Method setInaudibleBehavior(mustTick:Int, kill:Int)
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
 		Wav_setInaudibleBehavior(asPtr, mustTick, kill)
 	End Method
 
@@ -804,18 +845,18 @@ Type TSLWav Extends TSLLoadableAudioSource
 	bbdoc: Sets filter.
 	about: Set to NULL to clear the filter.
 	End Rem
-	Method setFilter(filterId:Int, filter:TSLFilter)
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Stops all instances of this audio source.
 	End Rem
-	Method stop()
+	Method stop() Override
 		Wav_stop(asPtr)
 	End Method
 
-	Method destroy()
+	Method destroy() Override
 		If asPtr Then
 			Wav_destroy(asPtr)
 			asPtr = Null
@@ -829,7 +870,11 @@ Type TSLWav Extends TSLLoadableAudioSource
 End Type
 
 Rem
-bbdoc: 
+bbdoc: Audio source for streamed wave sounds.
+about: The source files may be in various RIFF WAV file formats, FLAC, MP3 or Ogg Vorbis files.
+The sounds are loaded in pieces while they are playing, which takes more processing power than playing samples from memory, but they require much less memory.
+
+For short or often used samples, you may want to use #TSLWav instead.
 End Rem
 Type TSLWavStream Extends TSLLoadableAudioSource
 
@@ -840,7 +885,7 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method Load:Int(filename:String)
+	Method Load:Int(filename:String) Override
 		Local s:Byte Ptr = filename.ToUTF8String()
 		Local res:Int = WavStream_load(asPtr, s)
 		MemFree(s)
@@ -857,14 +902,14 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True)
+	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True) Override
 		Return WavStream_loadMemEx(asPtr, data, dataLen, copy, takeOwnership)
 	End Method
 
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadStream:Int(stream:TStream)
+	Method loadStream:Int(stream:TStream) Override
 		Local sf:TStreamFile = New TStreamFile.Create(stream)
 		Return WavStream_loadFile(asPtr, sf.filePtr)
 	End Method
@@ -872,35 +917,42 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: Sets default volume for instances.
 	End Rem
-	Method setVolume(volume:Float)
+	Method setVolume(volume:Float) Override
 		WavStream_setVolume(asPtr, volume)
 	End Method
 	
 	Rem
 	bbdoc: Sets the looping of the instances created from this audio source.
 	End Rem
-	Method setLooping(loop:Int)
+	Method setLooping(loop:Int) Override
 		WavStream_setLooping(asPtr, loop)
 	End Method
 
+	Rem
+	bbdoc: Sets whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		WavStream_setAutoStop(asPtr, autoStop)
+	End Method
+
 	Rem
 	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
 	End Rem
-	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float)
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
 		WavStream_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
 	End Method
 	
 	Rem
 	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
 	End Rem
-	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float)
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
 		WavStream_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
 	End Method
 
 	Rem
 	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
 	End Rem
-	Method set3dDopplerFactor(dopplerFactor:Float)
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
 		WavStream_set3dDopplerFactor(asPtr, dopplerFactor)
 	End Method
 
@@ -908,21 +960,21 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 	bbdoc: Enables 3d processing.
 	about: Implicitly set by play3d calls.
 	End Rem
-	Method set3dListenerRelative(listenerRelative:Int)
+	Method set3dListenerRelative(listenerRelative:Int) Override
 		WavStream_set3dListenerRelative(asPtr, listenerRelative)
 	End Method
 
 	Rem
 	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
 	End Rem
-	Method set3dDistanceDelay(distanceDelay:Int)
+	Method set3dDistanceDelay(distanceDelay:Int) Override
 		WavStream_set3dListenerRelative(asPtr, distanceDelay)
 	End Method
 
 	Rem
 	bbdoc: Enables delaying the start of the sound based on the distance.
 	End Rem
-	Method set3dCollider(collider:TSLAudioCollider)
+	Method set3dCollider(collider:TSLAudioCollider) Override
 		' TODO
 	End Method
 
@@ -930,7 +982,7 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom 3d audio collider.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int)
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
 		' TODO
 	End Method
 
@@ -938,14 +990,14 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom attenuator.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dAttenuator(attenuator:TSLAudioAttenuator)
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Sets behavior for inaudible sounds.
 	End Rem
-	Method setInaudibleBehavior(mustTick:Int, kill:Int)
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
 		WavStream_setInaudibleBehavior(asPtr, mustTick, kill)
 	End Method
 
@@ -953,18 +1005,18 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 	bbdoc: Sets filter.
 	about: Set to NULL to clear the filter.
 	End Rem
-	Method setFilter(filterId:Int, filter:TSLFilter)
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Stops all instances of this audio source.
 	End Rem
-	Method stop()
+	Method stop() Override
 		WavStream_stop(asPtr)
 	End Method
 
-	Method destroy()
+	Method destroy() Override
 		If asPtr Then
 			WavStream_destroy(asPtr)
 			asPtr = Null
@@ -978,7 +1030,7 @@ Type TSLWavStream Extends TSLLoadableAudioSource
 End Type
 
 Rem
-bbdoc: 
+bbdoc: Audio source for the sfxr sound effect synthesizer.
 End Rem
 Type TSLSfxr Extends TSLLoadableAudioSource
 
@@ -989,7 +1041,7 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method Load:Int(filename:String)
+	Method Load:Int(filename:String) Override
 		Local s:Byte Ptr = filename.ToUTF8String()
 		Local res:Int = Sfxr_loadParams(asPtr, s)
 		MemFree(s)
@@ -999,14 +1051,14 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True)
+	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True) Override
 		Return Sfxr_loadParamsMemEx(asPtr, data, dataLen, copy, takeOwnership)
 	End Method
 
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadStream:Int(stream:TStream)
+	Method loadStream:Int(stream:TStream) Override
 		Local sf:TStreamFile = New TStreamFile.Create(stream)
 		Local res:Int = Sfxr_loadParamsFile(asPtr, sf.filePtr)
 		sf.Free()
@@ -1016,35 +1068,42 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: Sets default volume for instances.
 	End Rem
-	Method setVolume(volume:Float)
+	Method setVolume(volume:Float) Override
 		Sfxr_setVolume(asPtr, volume)
 	End Method
 	
 	Rem
 	bbdoc: Sets the looping of the instances created from this audio source.
 	End Rem
-	Method setLooping(loop:Int)
+	Method setLooping(loop:Int) Override
 		Sfxr_setLooping(asPtr, loop)
 	End Method
 
+	Rem
+	bbdoc: Sets whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		Sfxr_setAutoStop(asPtr, autoStop)
+	End Method
+
 	Rem
 	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
 	End Rem
-	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float)
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
 		Sfxr_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
 	End Method
 	
 	Rem
 	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
 	End Rem
-	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float)
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
 		Sfxr_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
 	End Method
 
 	Rem
 	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
 	End Rem
-	Method set3dDopplerFactor(dopplerFactor:Float)
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
 		Sfxr_set3dDopplerFactor(asPtr, dopplerFactor)
 	End Method
 
@@ -1052,21 +1111,21 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 	bbdoc: Enables 3d processing.
 	about: Implicitly set by play3d calls.
 	End Rem
-	Method set3dListenerRelative(listenerRelative:Int)
+	Method set3dListenerRelative(listenerRelative:Int) Override
 		Sfxr_set3dListenerRelative(asPtr, listenerRelative)
 	End Method
 
 	Rem
 	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
 	End Rem
-	Method set3dDistanceDelay(distanceDelay:Int)
+	Method set3dDistanceDelay(distanceDelay:Int) Override
 		Sfxr_set3dListenerRelative(asPtr, distanceDelay)
 	End Method
 
 	Rem
 	bbdoc: Enables delaying the start of the sound based on the distance.
 	End Rem
-	Method set3dCollider(collider:TSLAudioCollider)
+	Method set3dCollider(collider:TSLAudioCollider) Override
 		' TODO
 	End Method
 
@@ -1074,7 +1133,7 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom 3d audio collider.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int)
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
 		' TODO
 	End Method
 
@@ -1082,14 +1141,14 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom attenuator.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dAttenuator(attenuator:TSLAudioAttenuator)
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Sets behavior for inaudible sounds.
 	End Rem
-	Method setInaudibleBehavior(mustTick:Int, kill:Int)
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
 		Sfxr_setInaudibleBehavior(asPtr, mustTick, kill)
 	End Method
 
@@ -1097,18 +1156,18 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 	bbdoc: Sets filter.
 	about: Set to NULL to clear the filter.
 	End Rem
-	Method setFilter(filterId:Int, filter:TSLFilter)
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Stops all instances of this audio source.
 	End Rem
-	Method stop()
+	Method stop() Override
 		Sfxr_stop(asPtr)
 	End Method
 
-	Method destroy()
+	Method destroy() Override
 		If asPtr Then
 			Sfxr_destroy(asPtr)
 			asPtr = Null
@@ -1122,7 +1181,8 @@ Type TSLSfxr Extends TSLLoadableAudioSource
 End Type
 
 Rem
-bbdoc: 
+bbdoc: Audio source for MONOTONE tracker songs.
+about: See https://github.com/MobyGamer/MONOTONE
 End Rem
 Type TSLMonotone Extends TSLLoadableAudioSource
 
@@ -1133,7 +1193,7 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method Load:Int(filename:String)
+	Method Load:Int(filename:String) Override
 		Local s:Byte Ptr = filename.ToUTF8String()
 		Local res:Int = Monotone_load(asPtr, s)
 		MemFree(s)
@@ -1143,14 +1203,14 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True)
+	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True) Override
 		Return Monotone_loadMemEx(asPtr, data, dataLen, copy, takeOwnership)
 	End Method
 
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadStream:Int(stream:TStream)
+	Method loadStream:Int(stream:TStream) Override
 		Local sf:TStreamFile = New TStreamFile.Create(stream)
 		Return Monotone_LoadFile(asPtr, sf.filePtr)
 	End Method
@@ -1158,35 +1218,42 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: Sets default volume for instances.
 	End Rem
-	Method setVolume(volume:Float)
+	Method setVolume(volume:Float) Override
 		Monotone_setVolume(asPtr, volume)
 	End Method
 	
 	Rem
 	bbdoc: Sets the looping of the instances created from this audio source.
 	End Rem
-	Method setLooping(loop:Int)
+	Method setLooping(loop:Int) Override
 		Monotone_setLooping(asPtr, loop)
 	End Method
 
+	Rem
+	bbdoc: Sets whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		Monotone_setAutoStop(asPtr, autoStop)
+	End Method
+
 	Rem
 	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
 	End Rem
-	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float)
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
 		Monotone_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
 	End Method
 	
 	Rem
 	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
 	End Rem
-	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float)
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
 		Monotone_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
 	End Method
 
 	Rem
 	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
 	End Rem
-	Method set3dDopplerFactor(dopplerFactor:Float)
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
 		Monotone_set3dDopplerFactor(asPtr, dopplerFactor)
 	End Method
 
@@ -1194,21 +1261,21 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 	bbdoc: Enables 3d processing.
 	about: Implicitly set by play3d calls.
 	End Rem
-	Method set3dListenerRelative(listenerRelative:Int)
+	Method set3dListenerRelative(listenerRelative:Int) Override
 		Monotone_set3dListenerRelative(asPtr, listenerRelative)
 	End Method
 
 	Rem
 	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
 	End Rem
-	Method set3dDistanceDelay(distanceDelay:Int)
+	Method set3dDistanceDelay(distanceDelay:Int) Override
 		Monotone_set3dListenerRelative(asPtr, distanceDelay)
 	End Method
 
 	Rem
 	bbdoc: Enables delaying the start of the sound based on the distance.
 	End Rem
-	Method set3dCollider(collider:TSLAudioCollider)
+	Method set3dCollider(collider:TSLAudioCollider) Override
 		' TODO
 	End Method
 
@@ -1216,7 +1283,7 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom 3d audio collider.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int)
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
 		' TODO
 	End Method
 
@@ -1224,14 +1291,14 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom attenuator.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dAttenuator(attenuator:TSLAudioAttenuator)
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Sets behavior for inaudible sounds.
 	End Rem
-	Method setInaudibleBehavior(mustTick:Int, kill:Int)
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
 		Monotone_setInaudibleBehavior(asPtr, mustTick, kill)
 	End Method
 
@@ -1239,18 +1306,18 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 	bbdoc: Sets filter.
 	about: Set to NULL to clear the filter.
 	End Rem
-	Method setFilter(filterId:Int, filter:TSLFilter)
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Stops all instances of this audio source.
 	End Rem
-	Method stop()
+	Method stop() Override
 		Monotone_stop(asPtr)
 	End Method
 
-	Method destroy()
+	Method destroy() Override
 		If asPtr Then
 			Monotone_destroy(asPtr)
 			asPtr = Null
@@ -1264,7 +1331,7 @@ Type TSLMonotone Extends TSLLoadableAudioSource
 End Type
 
 Rem
-bbdoc: 
+bbdoc: Audio source for TED and SID soundchip register write dumps.
 End Rem
 Type TSLTedSid Extends TSLLoadableAudioSource
 
@@ -1275,7 +1342,7 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method Load:Int(filename:String)
+	Method Load:Int(filename:String) Override
 		Local s:Byte Ptr = filename.ToUTF8String()
 		Local res:Int = TedSid_load(asPtr, s)
 		MemFree(s)
@@ -1285,14 +1352,14 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True)
+	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True) Override
 		Return TedSid_loadMemEx(asPtr, data, dataLen, copy, takeOwnership)
 	End Method
 
 	Rem
 	bbdoc: 
 	End Rem
-	Method loadStream:Int(stream:TStream)
+	Method loadStream:Int(stream:TStream) Override
 		Local sf:TStreamFile = New TStreamFile.Create(stream)
 		Return TedSid_LoadFile(asPtr, sf.filePtr)
 	End Method
@@ -1300,35 +1367,42 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 	Rem
 	bbdoc: Sets default volume for instances.
 	End Rem
-	Method setVolume(volume:Float)
+	Method setVolume(volume:Float) Override
 		TedSid_setVolume(asPtr, volume)
 	End Method
 	
 	Rem
 	bbdoc: Sets the looping of the instances created from this audio source.
 	End Rem
-	Method setLooping(loop:Int)
+	Method setLooping(loop:Int) Override
 		TedSid_setLooping(asPtr, loop)
 	End Method
 
+	Rem
+	bbdoc: Sets whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		TedSid_setAutoStop(asPtr, autoStop)
+	End Method
+
 	Rem
 	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
 	End Rem
-	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float)
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
 		TedSid_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
 	End Method
 	
 	Rem
 	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
 	End Rem
-	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float)
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
 		TedSid_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
 	End Method
 
 	Rem
 	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
 	End Rem
-	Method set3dDopplerFactor(dopplerFactor:Float)
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
 		TedSid_set3dDopplerFactor(asPtr, dopplerFactor)
 	End Method
 
@@ -1336,21 +1410,21 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 	bbdoc: Enables 3d processing.
 	about: Implicitly set by play3d calls.
 	End Rem
-	Method set3dListenerRelative(listenerRelative:Int)
+	Method set3dListenerRelative(listenerRelative:Int) Override
 		TedSid_set3dListenerRelative(asPtr, listenerRelative)
 	End Method
 
 	Rem
 	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
 	End Rem
-	Method set3dDistanceDelay(distanceDelay:Int)
+	Method set3dDistanceDelay(distanceDelay:Int) Override
 		TedSid_set3dListenerRelative(asPtr, distanceDelay)
 	End Method
 
 	Rem
 	bbdoc: Enables delaying the start of the sound based on the distance.
 	End Rem
-	Method set3dCollider(collider:TSLAudioCollider)
+	Method set3dCollider(collider:TSLAudioCollider) Override
 		' TODO
 	End Method
 
@@ -1358,7 +1432,7 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom 3d audio collider.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int)
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
 		' TODO
 	End Method
 
@@ -1366,14 +1440,14 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 	bbdoc: Sets a custom attenuator.
 	about: Set to Null to disable.
 	End Rem
-	Method set3dAttenuator(attenuator:TSLAudioAttenuator)
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Sets behavior for inaudible sounds.
 	End Rem
-	Method setInaudibleBehavior(mustTick:Int, kill:Int)
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
 		TedSid_setInaudibleBehavior(asPtr, mustTick, kill)
 	End Method
 
@@ -1381,18 +1455,18 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 	bbdoc: Sets filter.
 	about: Set to NULL to clear the filter.
 	End Rem
-	Method setFilter(filterId:Int, filter:TSLFilter)
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
 		' TODO
 	End Method
 
 	Rem
 	bbdoc: Stops all instances of this audio source.
 	End Rem
-	Method stop()
+	Method stop() Override
 		TedSid_stop(asPtr)
 	End Method
 
-	Method destroy()
+	Method destroy() Override
 		If asPtr Then
 			TedSid_destroy(asPtr)
 			asPtr = Null
@@ -1406,6 +1480,156 @@ Type TSLTedSid Extends TSLLoadableAudioSource
 End Type
 
 
+Rem
+bbdoc: Audio source for AY files in ZAK format.
+about: For converting to ZAK, see https://github.com/jarikomppa/zak
+End Rem
+Type TSLAy Extends TSLLoadableAudioSource
+
+	Method New()
+		asPtr = Ay_create()
+	End Method
+	
+	Rem
+	bbdoc: 
+	End Rem
+	Method Load:Int(filename:String) Override
+		Local s:Byte Ptr = filename.ToUTF8String()
+		Local res:Int = Ay_load(asPtr, s)
+		MemFree(s)
+		Return res
+	End Method
+	
+	Rem
+	bbdoc: 
+	End Rem
+	Method loadMem:Int(data:Byte Ptr, dataLen:Int, copy:Int = False, takeOwnership:Int = True) Override
+		Return Ay_loadMemEx(asPtr, data, dataLen, copy, takeOwnership)
+	End Method
+
+	Rem
+	bbdoc: 
+	End Rem
+	Method loadStream:Int(stream:TStream) Override
+		Local sf:TStreamFile = New TStreamFile.Create(stream)
+		Return Ay_LoadFile(asPtr, sf.filePtr)
+	End Method
+
+	Rem
+	bbdoc: Sets default volume for instances.
+	End Rem
+	Method setVolume(volume:Float) Override
+		Ay_setVolume(asPtr, volume)
+	End Method
+	
+	Rem
+	bbdoc: Sets the looping of the instances created from this audio source.
+	End Rem
+	Method setLooping(loop:Int) Override
+		Ay_setLooping(asPtr, loop)
+	End Method
+
+	Rem
+	bbdoc: Sets whether audio should auto-stop when it ends or not.
+	End Rem
+	Method setAutoStop(autoStop:Int) Override
+		Ay_setAutoStop(asPtr, autoStop)
+	End Method
+
+	Rem
+	bbdoc: Sets the minimum and maximum distances for 3d audio source (closer to min distance = max vol)
+	End Rem
+	Method set3dMinMaxDistance(minDistance:Float, maxDistance:Float) Override
+		Ay_set3dMinMaxDistance(asPtr, minDistance, maxDistance)
+	End Method
+	
+	Rem
+	bbdoc: Sets attenuation model and rolloff factor for 3d audio source.
+	End Rem
+	Method set3dAttenuation(attenuationModel:Int, attenuationRolloffFactor:Float) Override
+		Ay_set3dAttenuation(asPtr, attenuationModel, attenuationRolloffFactor)
+	End Method
+
+	Rem
+	bbdoc: Sets doppler factor to reduce or enhance doppler effect, default = 1.0
+	End Rem
+	Method set3dDopplerFactor(dopplerFactor:Float) Override
+		Ay_set3dDopplerFactor(asPtr, dopplerFactor)
+	End Method
+
+	Rem
+	bbdoc: Enables 3d processing.
+	about: Implicitly set by play3d calls.
+	End Rem
+	Method set3dListenerRelative(listenerRelative:Int) Override
+		Ay_set3dListenerRelative(asPtr, listenerRelative)
+	End Method
+
+	Rem
+	bbdoc: Sets the coordinates for this audio source to be relative to listener's coordinates.
+	End Rem
+	Method set3dDistanceDelay(distanceDelay:Int) Override
+		Ay_set3dListenerRelative(asPtr, distanceDelay)
+	End Method
+
+	Rem
+	bbdoc: Enables delaying the start of the sound based on the distance.
+	End Rem
+	Method set3dCollider(collider:TSLAudioCollider) Override
+		' TODO
+	End Method
+
+	Rem
+	bbdoc: Sets a custom 3d audio collider.
+	about: Set to Null to disable.
+	End Rem
+	Method set3dColliderEx(collider:TSLAudioCollider, userData:Int) Override
+		' TODO
+	End Method
+
+	Rem
+	bbdoc: Sets a custom attenuator.
+	about: Set to Null to disable.
+	End Rem
+	Method set3dAttenuator(attenuator:TSLAudioAttenuator) Override
+		' TODO
+	End Method
+
+	Rem
+	bbdoc: Sets behavior for inaudible sounds.
+	End Rem
+	Method setInaudibleBehavior(mustTick:Int, kill:Int) Override
+		Ay_setInaudibleBehavior(asPtr, mustTick, kill)
+	End Method
+
+	Rem
+	bbdoc: Sets filter.
+	about: Set to NULL to clear the filter.
+	End Rem
+	Method setFilter(filterId:Int, filter:TSLFilter) Override
+		' TODO
+	End Method
+
+	Rem
+	bbdoc: Stops all instances of this audio source.
+	End Rem
+	Method stop() Override
+		Ay_stop(asPtr)
+	End Method
+
+	Method destroy() Override
+		If asPtr Then
+			Ay_destroy(asPtr)
+			asPtr = Null
+		End If
+	End Method
+
+	Method Delete()
+		destroy()
+	End Method
+
+End Type
+
 Type TSLAudioCollider
 End Type
 

+ 37 - 0
soloud.mod/soloud/.gitignore

@@ -0,0 +1,37 @@
+Debug/
+_UpgradeReport_Files/
+*.ipch
+*.opensdf
+*.sdf
+*.old
+*.filters
+build/
+*.aux
+*.out
+*.gz
+*.toc
+*.o
+incoming/
+experiments/
+scripts/*.log
+lib/*
+rel/*
+doc/*
+bin/audio/
+bin/
+lib/*.ilk
+lib/*.lib
+lib/*.dll
+out/
+*.pyc
+*.exp
+docsrc/xelatex_output.txt
+docsrc/kindlegen_output.txt
+*.idb
+*.pdb
+docsrc/20*
+glue/*
+scripts/soloud_codegen.py
+glue/rpgmaker_soloud.rb
+*.lastcodeanalysissucceeded
+*.bak

+ 3 - 0
soloud.mod/soloud/.gitmodules

@@ -0,0 +1,3 @@
+[submodule "ext/libmodplug"]
+	path = ext/libmodplug
+	url = https://github.com/jarikomppa/libmodplug.git

+ 0 - 13
soloud.mod/soloud/build/genie.lua

@@ -848,19 +848,6 @@ end
 
 -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
 
-if (WITH_TOOLS == 1) then
-
-	project "tedsid2dump"
-		kind "ConsoleApp"
-		language "C++"
-		files {
-		  "../src/tools/tedsid2dump/**.cpp"
-		}
-		targetname "tedsid2dump"
-end
-
--- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
-
 if (WITH_TOOLS == 1) then
 
 	project "resamplerlab"

+ 49 - 1
soloud.mod/soloud/contrib/src.cmake

@@ -9,6 +9,7 @@ set (LINK_LIBRARIES)
 set (TARGET_HEADERS
 	${HEADER_PATH}/soloud.h
 	${HEADER_PATH}/soloud_audiosource.h
+	${HEADER_PATH}/soloud_ay.h
 	${HEADER_PATH}/soloud_bassboostfilter.h
 	${HEADER_PATH}/soloud_biquadresonantfilter.h
 	${HEADER_PATH}/soloud_bus.h
@@ -24,9 +25,12 @@ set (TARGET_HEADERS
 	${HEADER_PATH}/soloud_file_hack_on.h
 	${HEADER_PATH}/soloud_filter.h
 	${HEADER_PATH}/soloud_flangerfilter.h
+	${HEADER_PATH}/soloud_freeverbfilter.h
 	${HEADER_PATH}/soloud_internal.h
 	${HEADER_PATH}/soloud_lofifilter.h
+	${HEADER_PATH}/soloud_misc.h
 	${HEADER_PATH}/soloud_monotone.h
+	${HEADER_PATH}/soloud_noise.h
 	${HEADER_PATH}/soloud_openmpt.h
 	${HEADER_PATH}/soloud_queue.h
 	${HEADER_PATH}/soloud_robotizefilter.h
@@ -61,6 +65,7 @@ set (CORE_SOURCES
 	${CORE_PATH}/soloud_fft_lut.cpp
 	${CORE_PATH}/soloud_file.cpp
 	${CORE_PATH}/soloud_filter.cpp
+	${CORE_PATH}/soloud_misc.cpp
 	${CORE_PATH}/soloud_queue.cpp
 	${CORE_PATH}/soloud_thread.cpp
 )
@@ -69,28 +74,70 @@ set (CORE_SOURCES
 # Audiosources
 set (AUDIOSOURCES_PATH ${SOURCE_PATH}/audiosource)
 set (AUDIOSOURCES_SOURCES
+	# ay
+	${AUDIOSOURCES_PATH}/ay/chipplayer.cpp
+	${AUDIOSOURCES_PATH}/ay/chipplayer.h
+	${AUDIOSOURCES_PATH}/ay/readme.txt
+	${AUDIOSOURCES_PATH}/ay/sndbuffer.cpp
+	${AUDIOSOURCES_PATH}/ay/sndbuffer.h
+	${AUDIOSOURCES_PATH}/ay/sndchip.cpp
+	${AUDIOSOURCES_PATH}/ay/sndchip.h
+	${AUDIOSOURCES_PATH}/ay/sndrender.cpp
+	${AUDIOSOURCES_PATH}/ay/sndrender.h
+	${AUDIOSOURCES_PATH}/ay/soloud_ay.cpp
+
+	# monotone
 	${AUDIOSOURCES_PATH}/monotone/soloud_monotone.cpp
+
+	# noise
+	${AUDIOSOURCES_PATH}/noise/soloud_noise.cpp
+
+	# openmpt
 	${AUDIOSOURCES_PATH}/openmpt/soloud_openmpt.cpp
 	${AUDIOSOURCES_PATH}/openmpt/soloud_openmpt_dll.c
+
+	# sfxr
 	${AUDIOSOURCES_PATH}/sfxr/soloud_sfxr.cpp
+
+	# speech
+	${AUDIOSOURCES_PATH}/speech/Elements.def
 	${AUDIOSOURCES_PATH}/speech/darray.cpp
+	${AUDIOSOURCES_PATH}/speech/darray.h
 	${AUDIOSOURCES_PATH}/speech/klatt.cpp
+	${AUDIOSOURCES_PATH}/speech/klatt.h
 	${AUDIOSOURCES_PATH}/speech/resonator.cpp
+	${AUDIOSOURCES_PATH}/speech/resonator.h
 	${AUDIOSOURCES_PATH}/speech/soloud_speech.cpp
 	${AUDIOSOURCES_PATH}/speech/tts.cpp
+	${AUDIOSOURCES_PATH}/speech/tts.h
+
+	# tedsid
 	${AUDIOSOURCES_PATH}/tedsid/sid.cpp
+	${AUDIOSOURCES_PATH}/tedsid/sid.h
 	${AUDIOSOURCES_PATH}/tedsid/soloud_tedsid.cpp
 	${AUDIOSOURCES_PATH}/tedsid/ted.cpp
+	${AUDIOSOURCES_PATH}/tedsid/ted.h
+
+	# vic
 	${AUDIOSOURCES_PATH}/vic/soloud_vic.cpp
+
+	# vizsn
 	${AUDIOSOURCES_PATH}/vizsn/soloud_vizsn.cpp
+
+	# wav
+	${AUDIOSOURCES_PATH}/wav/dr_flac.h
 	${AUDIOSOURCES_PATH}/wav/dr_impl.cpp
+	${AUDIOSOURCES_PATH}/wav/dr_mp3.h
+	${AUDIOSOURCES_PATH}/wav/dr_wav.h
 	${AUDIOSOURCES_PATH}/wav/soloud_wav.cpp
 	${AUDIOSOURCES_PATH}/wav/soloud_wavstream.cpp
 	${AUDIOSOURCES_PATH}/wav/stb_vorbis.c
+	${AUDIOSOURCES_PATH}/wav/stb_vorbis.h
 )
 
 
 # Backends
+# TODO: Other backends
 set (BACKENDS_PATH ${SOURCE_PATH}/backend)
 set (BACKENDS_SOURCES)
 
@@ -191,6 +238,7 @@ set (FILTERS_SOURCES
 	${FILTERS_PATH}/soloud_echofilter.cpp
 	${FILTERS_PATH}/soloud_fftfilter.cpp
 	${FILTERS_PATH}/soloud_flangerfilter.cpp
+	${FILTERS_PATH}/soloud_freeverbfilter.cpp
 	${FILTERS_PATH}/soloud_lofifilter.cpp
 	${FILTERS_PATH}/soloud_robotizefilter.cpp
 	${FILTERS_PATH}/soloud_waveshaperfilter.cpp
@@ -200,7 +248,7 @@ set (FILTERS_SOURCES
 # All together
 source_group ("Includes"		FILES ${TARGET_HEADERS})
 source_group ("Core"			FILES ${CORE_SOURCES})
-source_group ("Audiosources"		FILES ${AUDIOSOURCES_SOURCES})
+source_group ("Audiosources"	FILES ${AUDIOSOURCES_SOURCES})
 source_group ("Backends"		FILES ${BACKENDS_SOURCES})
 source_group ("Filters"			FILES ${FILTERS_SOURCES})
 

+ 140 - 0
soloud.mod/soloud/demos/megademo/ay.cpp

@@ -0,0 +1,140 @@
+/*
+SoLoud audio engine
+Copyright (c) 2020 Jari Komppa
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+   1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+
+   2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+
+   3. This notice may not be removed or altered from any source
+   distribution.
+*/
+
+#include <stdlib.h>
+#include <math.h>
+#include <stdio.h>
+
+#include "imgui.h"
+#include "soloud_demo_framework.h"
+
+#include "soloud.h"
+#include "soloud_ay.h"
+#include "soloud_biquadresonantfilter.h"
+#include "soloud_echofilter.h"
+#include "soloud_dcremovalfilter.h"
+#include "soloud_bassboostfilter.h"
+
+namespace ay
+{
+
+	SoLoud::Soloud gSoloud;
+	SoLoud::Ay gMusic;
+	SoLoud::BiquadResonantFilter gBiquad;
+	SoLoud::EchoFilter gEcho;
+	SoLoud::DCRemovalFilter gDCRemoval;
+	SoLoud::BassboostFilter gBassboost;
+	int gMusichandle;
+
+	// Entry point
+	int DemoEntry(int argc, char *argv[])
+	{
+		gMusic.load("audio/adversary.pt3_2ay.zak");
+
+		gEcho.setParams(0.2f, 0.5f, 0.05f);
+		gBiquad.setParams(SoLoud::BiquadResonantFilter::LOWPASS, 4000, 2);
+
+		gMusic.setLooping(1);
+
+		gSoloud.setGlobalFilter(0, &gBiquad);
+		gSoloud.setGlobalFilter(1, &gBassboost);
+		gSoloud.setGlobalFilter(2, &gEcho);
+		gSoloud.setGlobalFilter(3, &gDCRemoval);
+
+		gSoloud.init(SoLoud::Soloud::CLIP_ROUNDOFF | SoLoud::Soloud::ENABLE_VISUALIZATION);
+
+		gMusichandle = gSoloud.play(gMusic);
+		return 0;
+	}
+
+	float filter_param0[4] = { 0, 0, 0, 0 };
+	float filter_param1[4] = { 1000, 2, 0, 0 };
+	float filter_param2[4] = { 2, 0,  0, 0 };
+
+	void DemoMainloop()
+	{
+		gSoloud.setFilterParameter(0, 0, 0, filter_param0[0]);
+		gSoloud.setFilterParameter(0, 0, 2, filter_param1[0]);
+		gSoloud.setFilterParameter(0, 0, 3, filter_param2[0]);
+
+		gSoloud.setFilterParameter(0, 1, 0, filter_param0[1]);
+		gSoloud.setFilterParameter(0, 1, 1, filter_param1[1]);
+
+		gSoloud.setFilterParameter(0, 2, 0, filter_param0[2]);
+
+		gSoloud.setFilterParameter(0, 3, 0, filter_param0[3]);
+
+
+		DemoUpdateStart();
+
+		float *buf = gSoloud.getWave();
+		float *fft = gSoloud.calcFFT();
+
+		ONCE(ImGui::SetNextWindowPos(ImVec2(500, 20)));
+		ImGui::Begin("Output");
+		ImGui::PlotLines("##Wave", buf, 256, 0, "Wave", -1, 1, ImVec2(264, 80));
+		ImGui::PlotHistogram("##FFT", fft, 256 / 2, 0, "FFT", 0, 10, ImVec2(264, 80), 8);
+		float ayregs[32];
+		int i;
+		for (i = 0; i < 32; i++)
+			ayregs[i] = gSoloud.getInfo(gMusichandle, i);
+		ImGui::PlotHistogram("##AY", ayregs, 32, 0, "", 0, 0xff, ImVec2(264, 80), 4);
+
+		ImGui::Text("AY1: %02X %02X %02X %02X %02X %02X %02X %02X", (int)ayregs[0], (int)ayregs[1], (int)ayregs[2], (int)ayregs[3], (int)ayregs[4], (int)ayregs[5], (int)ayregs[6], (int)ayregs[7]);
+		ImGui::Text("     %02X %02X %02X %02X %02X %02X", (int)ayregs[8], (int)ayregs[9], (int)ayregs[10], (int)ayregs[11], (int)ayregs[12], (int)ayregs[13]);
+		ImGui::Text("AY2: %02X %02X %02X %02X %02X %02X %02X %02X", (int)ayregs[16], (int)ayregs[17], (int)ayregs[18], (int)ayregs[19], (int)ayregs[20], (int)ayregs[21], (int)ayregs[22], (int)ayregs[23]);
+		ImGui::Text("     %02X %02X %02X %02X %02X %02X", (int)ayregs[24], (int)ayregs[25], (int)ayregs[26], (int)ayregs[27], (int)ayregs[28], (int)ayregs[29]);
+
+		ImGui::End();
+
+		ONCE(ImGui::SetNextWindowPos(ImVec2(20, 20)));
+		ImGui::Begin("Control");
+		ImGui::Text("Biquad filter (lowpass)");
+		ImGui::SliderFloat("Wet##4", &filter_param0[0], 0, 1);
+		ImGui::SliderFloat("Frequency##4", &filter_param1[0], 0, 8000);
+		ImGui::SliderFloat("Resonance##4", &filter_param2[0], 1, 20);
+		ImGui::Separator();
+		ImGui::Text("Bassboost filter");
+		ImGui::SliderFloat("Wet##2", &filter_param0[1], 0, 1);
+		ImGui::SliderFloat("Boost##2", &filter_param1[1], 0, 11);
+		ImGui::Separator();
+		ImGui::Text("Echo filter");
+		ImGui::SliderFloat("Wet##3", &filter_param0[2], 0, 1);
+		ImGui::Separator();
+		ImGui::Text("DC removal filter");
+		ImGui::SliderFloat("Wet##1", &filter_param0[3], 0, 1);
+		ImGui::End();
+		DemoUpdateEnd();
+	}
+}
+
+int DemoEntry_ay(int argc, char *argv[])
+{
+	return ay::DemoEntry(argc, argv);
+}
+
+void DemoMainloop_ay()
+{
+	return ay::DemoMainloop();
+}

+ 5 - 2
soloud.mod/soloud/demos/megademo/filterfolio.cpp

@@ -45,6 +45,7 @@ freely, subject to the following restrictions:
 #include "soloud_lofifilter.h"
 #include "soloud_robotizefilter.h"
 #include "soloud_waveshaperfilter.h"
+#include "soloud_eqfilter.h"
 
 namespace filterfolio
 {
@@ -53,7 +54,7 @@ namespace filterfolio
 	SoLoud::Speech gSpeech;
 	SoLoud::WavStream gMusic1, gMusic2, gMusic3;
 	int gMusichandle1, gMusichandle2, gMusichandle3;
-	SoLoud::Filter *gFilter[10];
+	SoLoud::Filter *gFilter[11];
 	SoLoud::Noise gNoise;
 	int gNoisehandle;
 
@@ -90,6 +91,7 @@ namespace filterfolio
 		gFilter[7] = new SoLoud::LofiFilter;
 		gFilter[8] = new SoLoud::RobotizeFilter;
 		gFilter[9] = new SoLoud::WaveShaperFilter;
+		gFilter[10] = new SoLoud::EqFilter;
 
 		gSpeech.setText("My banana is yellow");
 
@@ -214,7 +216,8 @@ namespace filterfolio
 				"FreeverbFilter\x00"
 				"LofiFilter\x00"
 				"RobotizeFilter\x00"
-				"WaveShaperFilter\x00\x00"))
+				"WaveShaperFilter\x00"
+				"EqFilter\x00\x00"))
 			{
 				if (gFilterSelect[filterindex])
 					gSoloud.setGlobalFilter(filterindex, gFilter[gFilterSelect[filterindex] - 1]);

+ 47 - 32
soloud.mod/soloud/demos/megademo/main.cpp

@@ -64,6 +64,8 @@ extern void DemoMainloop_annex();
 extern int DemoEntry_annex(int argc, char* argv[]);
 extern void DemoMainloop_filterfolio();
 extern int DemoEntry_filterfolio(int argc, char* argv[]);
+extern void DemoMainloop_ay();
+extern int DemoEntry_ay(int argc, char* argv[]);
 
 void DemoMainloop()
 {
@@ -74,8 +76,8 @@ void DemoMainloop_megademo()
 {
 	DemoUpdateStart();
 
-	ONCE(ImGui::SetNextWindowPos(ImVec2(20, 0)));
-	ImGui::Begin("Select sub-demo to run");
+	ONCE(ImGui::SetNextWindowPos(ImVec2(400, 0)));
+	ImGui::Begin("Or some of these");
 
 	if (ImGui::Button("Multimusic"))
 	{
@@ -83,7 +85,7 @@ void DemoMainloop_megademo()
 		DemoMainloopPtr = DemoMainloop_multimusic;
 	}
 	ImGui::Text("Multimusic demo plays multiple music tracks\n"
-		        "with interactive options to fade between them.");
+		"with interactive options to fade between them.");
 
 	ImGui::Separator();
 
@@ -93,10 +95,51 @@ void DemoMainloop_megademo()
 		DemoMainloopPtr = DemoMainloop_monotone;
 	}
 	ImGui::Text("Monotone demo plays a \"monotone\" tracker song\n"
-		        "with various interative options and filters.");
+		"with various interative options and filters.");
+
+	ImGui::Separator();
+	if (ImGui::Button("tedsid"))
+	{
+		DemoEntry_tedsid(gArgc, gArgv);
+		DemoMainloopPtr = DemoMainloop_tedsid;
+	}
+	ImGui::Text("tedsid demonstrates the MOS TED and SID\n"
+		"synthesis engines.");
+
+	ImGui::Separator();
+	if (ImGui::Button("wavformats"))
+	{
+		DemoEntry_wavformats(gArgc, gArgv);
+		DemoMainloopPtr = DemoMainloop_wavformats;
+	}
+	ImGui::Text("wavformats test plays files with\n"
+		"all sorts of wave file formats.");
 
 	ImGui::Separator();
 
+	if (ImGui::Button("speakers"))
+	{
+		DemoEntry_speakers(gArgc, gArgv);
+		DemoMainloopPtr = DemoMainloop_speakers;
+	}
+	ImGui::Text("speakers test plays single sounds\n"
+		"through surround speakers.\n");
+
+	ImGui::Separator();
+
+	if (ImGui::Button("ay"))
+	{
+		DemoEntry_ay(gArgc, gArgv);
+		DemoMainloopPtr = DemoMainloop_ay;
+	}
+	ImGui::Text("ay demonstrates the AY-3-8912 synthesis\n"
+		"engine (zx spectrum 128k music).");
+
+	ImGui::End();
+
+	ONCE(ImGui::SetNextWindowPos(ImVec2(20, 0)));
+	ImGui::Begin("Select sub-demo to run");
+
 	if (ImGui::Button("Mixbusses"))
 	{
 		DemoEntry_mixbusses(gArgc, gArgv);
@@ -160,15 +203,6 @@ void DemoMainloop_megademo()
 
 	ImGui::Separator();
 
-	if (ImGui::Button("tedsid"))
-	{
-		DemoEntry_tedsid(gArgc, gArgv);
-		DemoMainloopPtr = DemoMainloop_tedsid;
-	}
-	ImGui::Text("tedsid demonstrates the MOS TED and SID\n"
-	            "synthesis engines.");
-
-	ImGui::Separator();
 
 	if (ImGui::Button("virtualvoices"))
 	{
@@ -181,25 +215,6 @@ void DemoMainloop_megademo()
 
 	ImGui::Separator();
 
-	if (ImGui::Button("wavformats"))
-	{
-		DemoEntry_wavformats(gArgc, gArgv);
-		DemoMainloopPtr = DemoMainloop_wavformats;
-	}
-	ImGui::Text("wavformats test plays files with\n"
-				"all sorts of wave file formats.");
-
-	ImGui::Separator();
-
-	if (ImGui::Button("speakers"))
-	{
-		DemoEntry_speakers(gArgc, gArgv);
-		DemoMainloopPtr = DemoMainloop_speakers;
-	}
-	ImGui::Text("speakers test plays single sounds\n"
-				"through surround speakers.\n");
-
-	ImGui::Separator();
 
 	if (ImGui::Button("thebutton"))
 	{

+ 14 - 1
soloud.mod/soloud/demos/megademo/multimusic.cpp

@@ -79,7 +79,7 @@ namespace multimusic
 		ImGui::Text("Music1 volume    : %d%%", (int)floor(gSoloud.getVolume(gMusichandle1) * 100));
 		ImGui::Text("Music2 volume    : %d%%", (int)floor(gSoloud.getVolume(gMusichandle2) * 100));
 		ImGui::Text("Music rel. speed : %d%%", (int)floor(gSoloud.getRelativePlaySpeed(gMusichandle2) * 100));
-		ImGui::Text("Music position   : %d%%", (int)floor(gSoloud.getStreamPosition(gMusichandle2) * 100 / gMusic1.getLength()));
+		ImGui::Text("Music position   : %d%% (%3.3fs/%3.3fs)", (int)floor(gSoloud.getStreamPosition(gMusichandle2) * 100 / gMusic1.getLength()), gSoloud.getStreamPosition(gMusichandle2), gMusic1.getLength());
 		ImGui::Text("Active voices    : %d", gSoloud.getActiveVoiceCount());
 		ImGui::End();
 
@@ -117,6 +117,19 @@ namespace multimusic
 			gSoloud.fadeRelativePlaySpeed(gMusichandle2, 1.5f, 5);
 		}
 
+		if (ImGui::Button("Main resampler pointsample"))
+		{
+			gSoloud.setMainResampler(SoLoud::Soloud::RESAMPLER_POINT);
+		}
+		if (ImGui::Button("Main resampler linear"))
+		{
+			gSoloud.setMainResampler(SoLoud::Soloud::RESAMPLER_LINEAR);
+		}
+		if (ImGui::Button("Main resampler catmullrom"))
+		{
+			gSoloud.setMainResampler(SoLoud::Soloud::RESAMPLER_CATMULLROM);
+		}
+
 		ImGui::Separator();
 
 		if (ImGui::Button("Play random SFXR preset EXPLOSION"))

+ 1 - 1
soloud.mod/soloud/demos/megademo/space.cpp

@@ -145,7 +145,7 @@ namespace space
 			"parts of the audio pipeline.";
 		char temp[512];
 		int i = 0;
-		while (s[i] && i < (tick - gTickofs) / 70)
+		while (i < (tick - gTickofs) / 70 && s[i])
 		{
 			temp[i] = s[i];
 			i++;

+ 2 - 2
soloud.mod/soloud/demos/megademo/tedsid.cpp

@@ -50,8 +50,8 @@ namespace tedsid
 	// Entry point
 	int DemoEntry(int argc, char *argv[])
 	{
-		gMusic1.load("audio/Modulation.sid.dump");
-		gMusic2.load("audio/ted_storm.prg.dump");
+		gMusic1.load("audio/Angel_Project.sid_sid.zak");
+		gMusic2.load("audio/ted_storm.prg_ted.zak");
 
 		gEcho.setParams(0.2f, 0.5f, 0.05f);
 		gBiquad.setParams(SoLoud::BiquadResonantFilter::LOWPASS, 4000, 2);

+ 3 - 3
soloud.mod/soloud/demos/piano/main.cpp

@@ -73,7 +73,7 @@ RtMidiIn *midi = NULL;
 void plonk(float rel, float vol = 0x50)
 {
 	int i = 0;
-	while (gPlonked[i].mHandle != 0 && i < 128) i++;
+	while (i < 128 && gPlonked[i].mHandle != 0) i++;
 	if (i == 128) return;
 
 	vol = (vol + 10) / (float)(0x7f + 10);
@@ -102,7 +102,7 @@ void plonk(float rel, float vol = 0x50)
 void unplonk(float rel)
 {
 	int i = 0;
-	while (gPlonked[i].mRel != rel &&i < 128) i++;
+	while (i < 128 && gPlonked[i].mRel != rel) i++;
 	if (i == 128) return;
 	gSoloud.fadeVolume(gPlonked[i].mHandle, 0, gRelease);
 	gSoloud.scheduleStop(gPlonked[i].mHandle, gRelease);
@@ -112,7 +112,7 @@ void unplonk(float rel)
 void replonk(float vol = 0x50)
 {
 	int i = 0;
-	while (gPlonked[i].mHandle != 0 && i < 128) i++;
+	while (i < 128 && gPlonked[i].mHandle != 0) i++;
 	if (i == 128) return;
 
 	vol = (vol + 10) / (float)(0x7f + 10);

+ 1 - 1
soloud.mod/soloud/demos/piano/soloud_padsynth.cpp

@@ -37,7 +37,7 @@ class PADsynth {
 		number_harmonics - the number of harmonics that are computed */
 	PADsynth(int aSampleCount, float aSamplerate, int aHarmonicsCount);
 
-	~PADsynth();
+	virtual ~PADsynth();
 
 	/* set the amplitude of the n'th harmonic */
 	void setharmonic(int n,float value);

+ 3 - 1
soloud.mod/soloud/docsrc/intro.mmd

@@ -100,10 +100,12 @@ specialized SSE optimizations. It contains no hand-written assembly.
 It definitely doesn't come with the support you get from a commercial
 library.
 
-While softare using SoLoud has already shipped on all current-gen
+While software using SoLoud has already shipped on all current-gen
 consoles (as of 2018), the backends needed for those are not included
 with SoLoud due to SDK license issues. New backends are easy to write,
 however. 
 
 If you're planning to make a multi-million budgeted console game, this
 library is (probably) not for you. Feel free to try it though :-)
+
+Apparently it did ship as part of SNES Mini..

+ 70 - 0
soloud.mod/soloud/include/soloud_ay.h

@@ -0,0 +1,70 @@
+/*
+AY module for SoLoud audio engine
+Copyright (c) 2020 Jari Komppa
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+   1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+
+   2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+
+   3. This notice may not be removed or altered from any source
+   distribution.
+*/
+
+#ifndef AY_H
+#define AY_H
+
+#include "soloud.h"
+
+class ChipPlayer;
+
+namespace SoLoud
+{
+    class Ay;
+	class File;
+	class AyInstance : public AudioSourceInstance
+	{
+	public:
+		Ay *mParent;
+		ChipPlayer *mChip;
+		int mPos;
+
+		AyInstance(Ay *aParent);
+		~AyInstance();
+		virtual unsigned int getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize);
+		virtual bool hasEnded();
+		virtual result rewind();
+		virtual float getInfo(unsigned int aInfoKey);
+	};
+
+	class Ay : public AudioSource
+	{
+	public:
+		bool mYm;
+		int mChipspeed;
+		int mCpuspeed;
+		int mLooppos;
+		int mLength;
+		unsigned short* mOps;
+	public:
+		Ay();
+		~Ay();
+		result load(const char *aFilename);
+		result loadFile(File *aFile);
+		result loadMem(const unsigned char* aMem, unsigned int aLength, bool aCopy, bool aTakeOwnership);
+		virtual AudioSourceInstance *createInstance();
+	};
+};
+
+#endif

+ 37 - 2
soloud.mod/soloud/include/soloud_c.h

@@ -132,6 +132,7 @@ enum SOLOUD_ENUMS
 typedef void * AlignedFloatBuffer;
 typedef void * TinyAlignedFloatBuffer;
 typedef void * Soloud;
+typedef void * Ay;
 typedef void * AudioCollider;
 typedef void * AudioAttenuator;
 typedef void * AudioSource;
@@ -214,9 +215,11 @@ unsigned int Soloud_getMainResampler(Soloud * aSoloud);
 float Soloud_getGlobalVolume(Soloud * aSoloud);
 unsigned int Soloud_getMaxActiveVoiceCount(Soloud * aSoloud);
 int Soloud_getLooping(Soloud * aSoloud, unsigned int aVoiceHandle);
+int Soloud_getAutoStop(Soloud * aSoloud, unsigned int aVoiceHandle);
 double Soloud_getLoopPoint(Soloud * aSoloud, unsigned int aVoiceHandle);
 void Soloud_setLoopPoint(Soloud * aSoloud, unsigned int aVoiceHandle, double aLoopPoint);
 void Soloud_setLooping(Soloud * aSoloud, unsigned int aVoiceHandle, int aLooping);
+void Soloud_setAutoStop(Soloud * aSoloud, unsigned int aVoiceHandle, int aAutoStop);
 int Soloud_setMaxActiveVoiceCount(Soloud * aSoloud, unsigned int aVoiceCount);
 void Soloud_setInaudibleBehavior(Soloud * aSoloud, unsigned int aVoiceHandle, int aMustTick, int aKill);
 void Soloud_setGlobalVolume(Soloud * aSoloud, float aVolume);
@@ -273,6 +276,28 @@ void Soloud_set3dSourceDopplerFactor(Soloud * aSoloud, unsigned int aVoiceHandle
 void Soloud_mix(Soloud * aSoloud, float * aBuffer, unsigned int aSamples);
 void Soloud_mixSigned16(Soloud * aSoloud, short * aBuffer, unsigned int aSamples);
 
+/*
+ * Ay
+ */
+void Ay_destroy(Ay * aAy);
+Ay * Ay_create();
+void Ay_setVolume(Ay * aAy, float aVolume);
+void Ay_setLooping(Ay * aAy, int aLoop);
+void Ay_setAutoStop(Ay * aAy, int aAutoStop);
+void Ay_set3dMinMaxDistance(Ay * aAy, float aMinDistance, float aMaxDistance);
+void Ay_set3dAttenuation(Ay * aAy, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
+void Ay_set3dDopplerFactor(Ay * aAy, float aDopplerFactor);
+void Ay_set3dListenerRelative(Ay * aAy, int aListenerRelative);
+void Ay_set3dDistanceDelay(Ay * aAy, int aDistanceDelay);
+void Ay_set3dCollider(Ay * aAy, AudioCollider * aCollider);
+void Ay_set3dColliderEx(Ay * aAy, AudioCollider * aCollider, int aUserData /* = 0 */);
+void Ay_set3dAttenuator(Ay * aAy, AudioAttenuator * aAttenuator);
+void Ay_setInaudibleBehavior(Ay * aAy, int aMustTick, int aKill);
+void Ay_setLoopPoint(Ay * aAy, double aLoopPoint);
+double Ay_getLoopPoint(Ay * aAy);
+void Ay_setFilter(Ay * aAy, unsigned int aFilterId, Filter * aFilter);
+void Ay_stop(Ay * aAy);
+
 /*
  * BassboostFilter
  */
@@ -322,6 +347,7 @@ unsigned int Bus_getResampler(Bus * aBus);
 void Bus_setResampler(Bus * aBus, unsigned int aResampler);
 void Bus_setVolume(Bus * aBus, float aVolume);
 void Bus_setLooping(Bus * aBus, int aLoop);
+void Bus_setAutoStop(Bus * aBus, int aAutoStop);
 void Bus_set3dMinMaxDistance(Bus * aBus, float aMinDistance, float aMaxDistance);
 void Bus_set3dAttenuation(Bus * aBus, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Bus_set3dDopplerFactor(Bus * aBus, float aDopplerFactor);
@@ -421,6 +447,7 @@ int Monotone_loadMemEx(Monotone * aMonotone, const unsigned char * aMem, unsigne
 int Monotone_loadFile(Monotone * aMonotone, File * aFile);
 void Monotone_setVolume(Monotone * aMonotone, float aVolume);
 void Monotone_setLooping(Monotone * aMonotone, int aLoop);
+void Monotone_setAutoStop(Monotone * aMonotone, int aAutoStop);
 void Monotone_set3dMinMaxDistance(Monotone * aMonotone, float aMinDistance, float aMaxDistance);
 void Monotone_set3dAttenuation(Monotone * aMonotone, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Monotone_set3dDopplerFactor(Monotone * aMonotone, float aDopplerFactor);
@@ -444,6 +471,7 @@ void Noise_setOctaveScale(Noise * aNoise, float aOct0, float aOct1, float aOct2,
 void Noise_setType(Noise * aNoise, int aType);
 void Noise_setVolume(Noise * aNoise, float aVolume);
 void Noise_setLooping(Noise * aNoise, int aLoop);
+void Noise_setAutoStop(Noise * aNoise, int aAutoStop);
 void Noise_set3dMinMaxDistance(Noise * aNoise, float aMinDistance, float aMaxDistance);
 void Noise_set3dAttenuation(Noise * aNoise, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Noise_set3dDopplerFactor(Noise * aNoise, float aDopplerFactor);
@@ -469,6 +497,7 @@ int Openmpt_loadMemEx(Openmpt * aOpenmpt, const unsigned char * aMem, unsigned i
 int Openmpt_loadFile(Openmpt * aOpenmpt, File * aFile);
 void Openmpt_setVolume(Openmpt * aOpenmpt, float aVolume);
 void Openmpt_setLooping(Openmpt * aOpenmpt, int aLoop);
+void Openmpt_setAutoStop(Openmpt * aOpenmpt, int aAutoStop);
 void Openmpt_set3dMinMaxDistance(Openmpt * aOpenmpt, float aMinDistance, float aMaxDistance);
 void Openmpt_set3dAttenuation(Openmpt * aOpenmpt, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Openmpt_set3dDopplerFactor(Openmpt * aOpenmpt, float aDopplerFactor);
@@ -496,6 +525,7 @@ int Queue_setParams(Queue * aQueue, float aSamplerate);
 int Queue_setParamsEx(Queue * aQueue, float aSamplerate, unsigned int aChannels /* = 2 */);
 void Queue_setVolume(Queue * aQueue, float aVolume);
 void Queue_setLooping(Queue * aQueue, int aLoop);
+void Queue_setAutoStop(Queue * aQueue, int aAutoStop);
 void Queue_set3dMinMaxDistance(Queue * aQueue, float aMinDistance, float aMaxDistance);
 void Queue_set3dAttenuation(Queue * aQueue, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Queue_set3dDopplerFactor(Queue * aQueue, float aDopplerFactor);
@@ -535,6 +565,7 @@ int Sfxr_loadParamsFile(Sfxr * aSfxr, File * aFile);
 int Sfxr_loadPreset(Sfxr * aSfxr, int aPresetNo, int aRandSeed);
 void Sfxr_setVolume(Sfxr * aSfxr, float aVolume);
 void Sfxr_setLooping(Sfxr * aSfxr, int aLoop);
+void Sfxr_setAutoStop(Sfxr * aSfxr, int aAutoStop);
 void Sfxr_set3dMinMaxDistance(Sfxr * aSfxr, float aMinDistance, float aMaxDistance);
 void Sfxr_set3dAttenuation(Sfxr * aSfxr, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Sfxr_set3dDopplerFactor(Sfxr * aSfxr, float aDopplerFactor);
@@ -559,6 +590,7 @@ int Speech_setParams(Speech * aSpeech);
 int Speech_setParamsEx(Speech * aSpeech, unsigned int aBaseFrequency /* = 1330 */, float aBaseSpeed /* = 10.0f */, float aBaseDeclination /* = 0.5f */, int aBaseWaveform /* = KW_TRIANGLE */);
 void Speech_setVolume(Speech * aSpeech, float aVolume);
 void Speech_setLooping(Speech * aSpeech, int aLoop);
+void Speech_setAutoStop(Speech * aSpeech, int aAutoStop);
 void Speech_set3dMinMaxDistance(Speech * aSpeech, float aMinDistance, float aMaxDistance);
 void Speech_set3dAttenuation(Speech * aSpeech, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Speech_set3dDopplerFactor(Speech * aSpeech, float aDopplerFactor);
@@ -579,13 +611,12 @@ void Speech_stop(Speech * aSpeech);
 void TedSid_destroy(TedSid * aTedSid);
 TedSid * TedSid_create();
 int TedSid_load(TedSid * aTedSid, const char * aFilename);
-int TedSid_loadToMem(TedSid * aTedSid, const char * aFilename);
 int TedSid_loadMem(TedSid * aTedSid, const unsigned char * aMem, unsigned int aLength);
 int TedSid_loadMemEx(TedSid * aTedSid, const unsigned char * aMem, unsigned int aLength, int aCopy /* = false */, int aTakeOwnership /* = true */);
-int TedSid_loadFileToMem(TedSid * aTedSid, File * aFile);
 int TedSid_loadFile(TedSid * aTedSid, File * aFile);
 void TedSid_setVolume(TedSid * aTedSid, float aVolume);
 void TedSid_setLooping(TedSid * aTedSid, int aLoop);
+void TedSid_setAutoStop(TedSid * aTedSid, int aAutoStop);
 void TedSid_set3dMinMaxDistance(TedSid * aTedSid, float aMinDistance, float aMaxDistance);
 void TedSid_set3dAttenuation(TedSid * aTedSid, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void TedSid_set3dDopplerFactor(TedSid * aTedSid, float aDopplerFactor);
@@ -611,6 +642,7 @@ void Vic_setRegister(Vic * aVic, int reg, unsigned char value);
 unsigned char Vic_getRegister(Vic * aVic, int reg);
 void Vic_setVolume(Vic * aVic, float aVolume);
 void Vic_setLooping(Vic * aVic, int aLoop);
+void Vic_setAutoStop(Vic * aVic, int aAutoStop);
 void Vic_set3dMinMaxDistance(Vic * aVic, float aMinDistance, float aMaxDistance);
 void Vic_set3dAttenuation(Vic * aVic, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Vic_set3dDopplerFactor(Vic * aVic, float aDopplerFactor);
@@ -633,6 +665,7 @@ Vizsn * Vizsn_create();
 void Vizsn_setText(Vizsn * aVizsn, char * aText);
 void Vizsn_setVolume(Vizsn * aVizsn, float aVolume);
 void Vizsn_setLooping(Vizsn * aVizsn, int aLoop);
+void Vizsn_setAutoStop(Vizsn * aVizsn, int aAutoStop);
 void Vizsn_set3dMinMaxDistance(Vizsn * aVizsn, float aMinDistance, float aMaxDistance);
 void Vizsn_set3dAttenuation(Vizsn * aVizsn, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Vizsn_set3dDopplerFactor(Vizsn * aVizsn, float aDopplerFactor);
@@ -665,6 +698,7 @@ int Wav_loadRawWaveEx(Wav * aWav, float * aMem, unsigned int aLength, float aSam
 double Wav_getLength(Wav * aWav);
 void Wav_setVolume(Wav * aWav, float aVolume);
 void Wav_setLooping(Wav * aWav, int aLoop);
+void Wav_setAutoStop(Wav * aWav, int aAutoStop);
 void Wav_set3dMinMaxDistance(Wav * aWav, float aMinDistance, float aMaxDistance);
 void Wav_set3dAttenuation(Wav * aWav, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void Wav_set3dDopplerFactor(Wav * aWav, float aDopplerFactor);
@@ -705,6 +739,7 @@ int WavStream_loadFileToMem(WavStream * aWavStream, File * aFile);
 double WavStream_getLength(WavStream * aWavStream);
 void WavStream_setVolume(WavStream * aWavStream, float aVolume);
 void WavStream_setLooping(WavStream * aWavStream, int aLoop);
+void WavStream_setAutoStop(WavStream * aWavStream, int aAutoStop);
 void WavStream_set3dMinMaxDistance(WavStream * aWavStream, float aMinDistance, float aMaxDistance);
 void WavStream_set3dAttenuation(WavStream * aWavStream, unsigned int aAttenuationModel, float aAttenuationRolloffFactor);
 void WavStream_set3dDopplerFactor(WavStream * aWavStream, float aDopplerFactor);

+ 82 - 0
soloud.mod/soloud/include/soloud_eqfilter.h

@@ -0,0 +1,82 @@
+/*
+SoLoud audio engine
+Copyright (c) 2013-2020 Jari Komppa
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+   1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+
+   2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+
+   3. This notice may not be removed or altered from any source
+   distribution.
+*/
+
+#ifndef SOLOUD_EQFILTER_H
+#define SOLOUD_EQFILTER_H
+
+#include "soloud.h"
+#include "soloud_fftfilter.h"
+
+namespace SoLoud
+{
+	class EqFilter;
+
+	class EqFilterInstance : public FFTFilterInstance
+	{
+		enum FILTERATTRIBUTE
+		{
+			WET = 0,
+			BAND1 = 1,
+			BAND2 = 2,
+			BAND3 = 3,
+			BAND4 = 4,
+			BAND5 = 5,
+			BAND6 = 6,
+			BAND7 = 7,
+			BAND8 = 8
+		};
+		EqFilter *mParent;
+	public:
+		virtual void fftFilterChannel(float *aFFTBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
+		EqFilterInstance(EqFilter *aParent);
+	};
+
+	class EqFilter : public FFTFilter
+	{
+	public:
+		enum FILTERATTRIBUTE
+		{
+			WET = 0,
+			BAND1 = 1,
+			BAND2 = 2,
+			BAND3 = 3,
+			BAND4 = 4,
+			BAND5 = 5,
+			BAND6 = 6,
+			BAND7 = 7,
+			BAND8 = 8
+		};
+		virtual int getParamCount();
+		virtual const char* getParamName(unsigned int aParamIndex);
+		virtual unsigned int getParamType(unsigned int aParamIndex);
+		virtual float getParamMax(unsigned int aParamIndex);
+		virtual float getParamMin(unsigned int aParamIndex);
+		float mVolume[8];
+		result setParam(unsigned int aBand, float aVolume);
+		virtual FilterInstance *createInstance();
+		EqFilter();
+	};
+}
+
+#endif

+ 10 - 1
soloud.mod/soloud/include/soloud_fftfilter.h

@@ -36,7 +36,11 @@ namespace SoLoud
 		float *mTemp;
 		float *mInputBuffer;
 		float *mMixBuffer;
-		unsigned int mOffset[MAX_CHANNELS];
+		float *mLastPhase;
+		float *mSumPhase;
+		unsigned int mInputOffset[MAX_CHANNELS];
+		unsigned int mMixOffset[MAX_CHANNELS];
+		unsigned int mReadOffset[MAX_CHANNELS];
 		FFTFilter *mParent;
 	public:
 		virtual void fftFilterChannel(float *aFFTBuffer, unsigned int aSamples, float aSamplerate, time aTime, unsigned int aChannel, unsigned int aChannels);
@@ -44,6 +48,11 @@ namespace SoLoud
 		virtual ~FFTFilterInstance();
 		FFTFilterInstance(FFTFilter *aParent);
 		FFTFilterInstance();
+		void comp2MagPhase(float* aFFTBuffer, unsigned int aSamples);
+		void magPhase2MagFreq(float* aFFTBuffer, unsigned int aSamples, float aSamplerate, unsigned int aChannel);
+		void magFreq2MagPhase(float* aFFTBuffer, unsigned int aSamples, float aSamplerate, unsigned int aChannel);
+		void magPhase2Comp(float* aFFTBuffer, unsigned int aSamples);
+		void init();
 	};
 
 	class FFTFilter : public Filter

+ 4 - 6
soloud.mod/soloud/include/soloud_tedsid.h

@@ -40,9 +40,8 @@ namespace SoLoud
 		TedSid *mParent;		
 		SIDsound *mSID;
 		TED *mTED;
+		int mPos;
 		unsigned int mSampleCount;
-		int mNextReg;
-		int mNextVal;
 		int mRegValues[128];
 	public:
 
@@ -57,15 +56,14 @@ namespace SoLoud
 	class TedSid : public AudioSource
 	{
 	public:
-		File *mFile;
+		int mLooppos;
+		int mLength;
+		unsigned short* mOps;
 		int mModel;
-		bool mFileOwned;
 		TedSid();
 		~TedSid();
 		result load(const char *aFilename);
-		result loadToMem(const char *aFilename);
 		result loadMem(const unsigned char *aMem, unsigned int aLength, bool aCopy = false, bool aTakeOwnership = true);
-		result loadFileToMem(File *aFile);
 		result loadFile(File *aFile);
 		virtual AudioSourceInstance *createInstance();
 	};

+ 2 - 0
soloud.mod/soloud/include/soloud_vizsn.h

@@ -26,6 +26,7 @@ namespace SoLoud
 
 		float resonate(float i);
 		float antiresonate(float i);
+		VizsnResonator();
 	};
 
 	struct VizsnBank
@@ -33,6 +34,7 @@ namespace SoLoud
 		VizsnResonator r[10];
 		float pitch;
 		float frica, voice, aspir, bypas, breth;
+		VizsnBank();
 	};
 
 	class VizsnInstance : public AudioSourceInstance

+ 115 - 0
soloud.mod/soloud/include/zx7decompress.h

@@ -0,0 +1,115 @@
+/*
+ * zx7 decompress by Jari Komppa, under public domain / unlicense
+ *
+ * Heavily based on zx7 decompressor by Einar Saukas. 
+ * Einar Saukas requests that you mention the use of dx7, but
+ * this is not enforced by any way.
+ *
+ * Note that compressor has a different license!
+ */
+
+#ifndef ZX7DECOMPRESS_H
+#define ZX7DECOMPRESS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct zx7_io
+{
+    unsigned char* input_data;
+    unsigned char* output_data;
+    size_t input_index;
+    size_t output_index;
+    int bit_mask;
+    int bit_value;
+};
+
+static int zx7_read_byte(struct zx7_io *io) {
+    return io->input_data[io->input_index++];
+}
+
+static int zx7_read_bit(struct zx7_io *io) {
+    io->bit_mask >>= 1;
+    if (io->bit_mask == 0) {
+        io->bit_mask = 128;
+        io->bit_value = zx7_read_byte(io);
+    }
+    return io->bit_value & io->bit_mask ? 1 : 0;
+}
+
+static int zx7_read_elias_gamma(struct zx7_io *io) {
+    int i = 0;
+    int value = 0;
+
+    while (!zx7_read_bit(io)) {
+        i++;
+    }
+    if (i > 15) {
+        return -1;
+    }
+    value = 1;
+    while (i--) {
+        value = value << 1 | zx7_read_bit(io);
+    }
+    return value;
+}
+
+static int zx7_read_offset(struct zx7_io *io) {
+    int value = 0;
+    int i = 0;
+
+    value = zx7_read_byte(io);
+    if (value < 128) {
+        return value;
+    } else {
+        i = zx7_read_bit(io);
+        i = i << 1 | zx7_read_bit(io);
+        i = i << 1 | zx7_read_bit(io);
+        i = i << 1 | zx7_read_bit(io);
+        return (value & 127 | i << 7) + 128;
+    }
+}
+
+static void zx7_write_byte(struct zx7_io *io, int value) {
+    io->output_data[io->output_index++] = value;
+}
+
+static void zx7_write_bytes(struct zx7_io *io, int offset, int length) {
+    int i;
+    while (length-- > 0) {
+        i = io->output_index - offset;
+        zx7_write_byte(io, io->output_data[i]);
+    }
+}
+
+static int zx7_decompress(unsigned char *input_data, unsigned char *output_data) {
+    struct zx7_io io;
+    int length;
+
+    io.input_data = input_data;
+    io.output_data = output_data;
+    io.input_index = 0;
+    io.output_index = 0;
+    io.bit_mask = 0;
+    io.bit_value = 0;
+
+    zx7_write_byte(&io, zx7_read_byte(&io));
+    while (1) {
+        if (!zx7_read_bit(&io)) {
+            zx7_write_byte(&io, zx7_read_byte(&io));
+        } else {
+            length = zx7_read_elias_gamma(&io) + 1;
+            if (length == 0) {
+                return io.input_index;
+            }
+            zx7_write_bytes(&io, zx7_read_offset(&io) + 1, length);
+        }
+    }
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ZX7DECOMPRESS_H

+ 135 - 0
soloud.mod/soloud/src/audiosource/ay/chipplayer.cpp

@@ -0,0 +1,135 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <memory.h>
+#include <malloc.h>
+#include "chipplayer.h"
+#include "soloud_file.h"
+#include "soloud_ay.h"
+
+ChipPlayer::ChipPlayer(SoLoud::AyInstance *aInstance)
+	: buffer(8192), chip(buffer), chip2(buffer), mInstance(aInstance)
+{
+	playtick = 0;
+	playpos = 0;
+	system_clock_rate = 0;
+	ticks_per_buffer = 0;
+
+	//set_timings(SNDR_DEFAULT_SYSTICK_RATE * 40 / 17, SNDR_DEFAULT_AY_RATE * 20 / 17, SNDR_DEFAULT_SAMPLE_RATE);
+	set_timings(aInstance->mParent->mCpuspeed, aInstance->mParent->mChipspeed, SNDR_DEFAULT_SAMPLE_RATE);
+	//set_volumes(SNDCHIP::CHIP_YM, 0x7FFF, SNDR_VOL_YM, SNDR_PAN_ABC);
+	if (aInstance->mParent->mYm)
+		set_volumes(SNDCHIP::CHIP_YM, 0x7FFF, SNDR_VOL_YM, SNDR_PAN_ABC);
+	else
+		set_volumes(SNDCHIP::CHIP_AY, 0x7FFF, SNDR_VOL_AY, SNDR_PAN_ABC);
+}
+
+ChipPlayer::~ChipPlayer()
+{
+}
+
+unsigned ChipPlayer::get_time(unsigned tick)
+{
+	return (unsigned)((tick * 1000) / system_clock_rate);
+}
+
+
+
+
+void ChipPlayer::set_timings(unsigned aSystem_clock_rate, unsigned chip_clock_rate, unsigned sample_rate)
+{
+	ChipPlayer::system_clock_rate = aSystem_clock_rate;
+	ticks_per_buffer = (unsigned)((long long)system_clock_rate * (buffer.size - 20) / sample_rate);
+	ticks_per_buffer /= 2; // for safety
+	chip.set_timings(system_clock_rate, chip_clock_rate, sample_rate);
+	chip2.set_timings(system_clock_rate, chip_clock_rate, sample_rate);
+	playtick = 0; playpos = 0;
+	buffer.reset();
+}
+
+const int VOL_DIV = 2; // mixer just adds samples. to avoid overflow, we lower volume then revert back with saturation
+
+void ChipPlayer::set_volumes(SNDCHIP::CHIP_TYPE t, unsigned global_vol, const SNDCHIP_VOLTAB *vt, const SNDCHIP_PANTAB *pt)
+{
+	chip.set_chip(t);
+	chip.set_volumes(global_vol / VOL_DIV, vt, pt);
+	chip2.set_chip(t);
+	chip2.set_volumes(global_vol / VOL_DIV, vt, pt);
+}
+
+inline int _min(int a, int b) { return (a < b) ? a : b; }
+
+unsigned ChipPlayer::play(float *dst, unsigned need_samples)
+{
+	unsigned stride = need_samples;
+	while (need_samples)
+	{
+		// read from buffer
+		buffer.count_start();
+		buffer.count(chip);
+		buffer.count(chip2);
+		unsigned ready = buffer.count_end();
+		unsigned from_buffer = _min(ready, need_samples);
+
+		for (unsigned i = 0; i < from_buffer; i++)
+		{
+			// normalize (volume divided by 4)
+			SNDSAMPLE& s = buffer.buffer[(buffer.read_position + i) & (buffer.size - 1)];
+			//*dst++ = s;
+			int l = VOL_DIV * (int)s.ch.left;
+			//if (l > 0x7FFF) l = 0x7FFF;
+			//if (l < -0x7FFF) l = -0x7FFF;
+			int r = VOL_DIV * (int)s.ch.right;
+			//if (r > 0x7FFF) r = 0x7FFF;
+			//if (r < -0x7FFF) r = -0x7FFF;
+			*dst = l / (float)0x7fff;
+			*(dst + stride) = r / (float)0x7fff;
+			dst++;
+		}
+		buffer.samples_read(from_buffer);
+
+		need_samples -= from_buffer;
+		if (!need_samples) return stride;
+
+		if (mInstance->mPos >= mInstance->mParent->mLength)
+			return stride - need_samples;
+
+		// render to buffer
+		chip.start_frame();
+		chip2.start_frame();
+
+		unsigned frame_tick = playtick;
+		while ((unsigned)(playtick - frame_tick) < ticks_per_buffer)
+		{
+
+			unsigned short rd;
+			do
+			{
+				rd = mInstance->mParent->mOps[mInstance->mPos/2];
+				mInstance->mPos += 2;
+				if (rd & 0x8000)
+				{
+					playtick += rd ^ 0x8000;
+				}
+			} while ((rd & 0x8000) && !(mInstance->mPos >= mInstance->mParent->mLength));
+			
+			if (mInstance->mPos >= mInstance->mParent->mLength)
+				break;
+
+			unsigned char reg = rd >> 8;
+			unsigned char val = rd & 0xff;
+
+			unsigned ts = (unsigned)(playtick - frame_tick);
+			if (reg & 0x10) {
+				chip2.select(reg & 0x0F);
+				chip2.write(ts, val);
+			}
+			else {
+				chip.select(reg);
+				chip.write(ts, val);
+			}
+		}
+		chip.end_frame((unsigned)(playtick - frame_tick));
+		chip2.end_frame((unsigned)(playtick - frame_tick));
+	}
+	return stride;
+}

+ 41 - 0
soloud.mod/soloud/src/audiosource/ay/chipplayer.h

@@ -0,0 +1,41 @@
+#ifndef _CHIPPLAYER_H_INCLUDED
+#define _CHIPPLAYER_H_INCLUDED
+
+#include "sndchip.h"
+
+namespace SoLoud
+{
+    class AyInstance;
+}
+
+class ChipPlayer
+{
+ public:
+
+   // play next song chunk to buffer
+   unsigned play(float *dst, unsigned need_samples);
+
+   // for internal use by ChipSong class
+   void set_timings(unsigned system_clock_rate, unsigned chip_clock_rate, unsigned sample_rate);
+   void set_volumes(SNDCHIP::CHIP_TYPE t, unsigned global_vol, const SNDCHIP_VOLTAB *vt, const SNDCHIP_PANTAB *pt);
+
+   ChipPlayer(SoLoud::AyInstance *aInstance);
+   ~ChipPlayer();
+
+ //private:
+   SoLoud::AyInstance *mInstance;
+   SNDBUFFER buffer;
+   SNDCHIP chip;
+   SNDCHIP chip2;
+
+
+   unsigned locate(unsigned tick);
+   unsigned playtick;
+   unsigned playpos;
+   unsigned system_clock_rate;
+   unsigned ticks_per_buffer;
+
+   unsigned get_time(unsigned tick);
+};
+
+#endif // _CHIPPLAYER_H_INCLUDED

+ 2 - 0
soloud.mod/soloud/src/audiosource/ay/readme.txt

@@ -0,0 +1,2 @@
+The AY sound support is based on public domain zxssk library
+"created under public domain license by SMT, jan.2006"

+ 75 - 0
soloud.mod/soloud/src/audiosource/ay/sndbuffer.cpp

@@ -0,0 +1,75 @@
+#include "sndbuffer.h"
+#include "sndrender.h"
+
+#include "malloc.h"
+#include "memory.h"
+
+SNDBUFFER::SNDBUFFER(unsigned aSize) {
+        read_position = 0;
+        samples_ready = 0;
+        // size must be power of 2 for faster calc cyclic position: pos = (pos+1) & (size-1)
+        if (aSize & (aSize-1)) {
+                unsigned i = 1;
+                while (i < aSize) i *= 2;                
+                aSize = i;
+        }
+        SNDBUFFER::size = aSize;
+        buffer = (SNDSAMPLE*)malloc(aSize * sizeof(SNDSAMPLE));
+        reset();
+}
+
+SNDBUFFER::~SNDBUFFER()
+{
+        free(buffer);
+}
+
+void SNDBUFFER::reset()
+{
+        read_position = 0;
+        memset(buffer, 0, size * sizeof(SNDSAMPLE));
+}
+
+void SNDBUFFER::get_buffers(bufptr_t& pos1, unsigned& size1, bufptr_t& pos2, unsigned& size2, unsigned count)
+{
+        pos1 = read_position;
+        pos2 = 0;
+        size1 = size - read_position;
+        if (count < size1) {
+                size1 = count;
+                size2 = 0;
+        } else {
+                size2 = count-size1;
+        }
+}
+
+void SNDBUFFER::samples_read(unsigned count)
+{
+        unsigned size1, size2, pos1, pos2;
+        get_buffers(pos1, size1, pos2, size2, count);
+        memset(buffer + pos1, 0, size1 * sizeof(SNDSAMPLE));
+        if (size2) {
+                memset(buffer + pos2, 0, size2 * sizeof(SNDSAMPLE));
+        }
+        read_position = (read_position + count) & (size-1);
+}
+
+void SNDBUFFER::count_start()
+{
+        samples_ready = size;
+}
+
+unsigned SNDBUFFER::count_single(const SNDRENDER& render)
+{
+        return (render.dstpos - read_position) & (size-1);
+}
+
+void SNDBUFFER::count(const SNDRENDER& render)
+{
+        unsigned samples = count_single(render);
+        if (samples < samples_ready) samples_ready = samples;
+}
+
+unsigned SNDBUFFER::count_end()
+{
+        return samples_ready;
+}

+ 86 - 0
soloud.mod/soloud/src/audiosource/ay/sndbuffer.h

@@ -0,0 +1,86 @@
+#pragma once
+
+union SNDSAMPLE
+{
+        unsigned sample; // left/right channels in low/high WORDs
+        struct { unsigned short left, right; } ch; // or left/right separately
+};
+
+typedef unsigned bufptr_t;
+class SNDRENDER;
+
+class SNDBUFFER
+{
+public:
+        SNDBUFFER(unsigned size);
+        ~SNDBUFFER();
+
+        void reset();
+
+        SNDSAMPLE* buffer;
+        bufptr_t size;
+
+        void count_start();
+        void count(const SNDRENDER& render);
+        unsigned count_end();
+
+        unsigned count_single(const SNDRENDER& render);
+        void get_buffers(bufptr_t& pos1, unsigned& size1, bufptr_t& pos2, unsigned& size2, unsigned count);
+
+        // can read some samples starting from here, use count_start(), count(), count_end() to detect count of samples ready
+        bufptr_t read_position;
+
+        // called when application read `counts` samples from `read_position`
+        // SNDBUFFER needs to zero buffer under read samples to continue mixing
+        void samples_read(unsigned count);
+
+private:
+        unsigned samples_ready;
+};
+
+
+
+
+#if 0 // USAGE EXAMPLE
+
+  #include "sndrender/*.h"
+
+  SNDBUFFER buf(4096);
+  SNDCHIP ay1(buf), ay2(buf);
+  SNDRENDER beeper(buf);
+
+  // global emulation loop
+  for (;;) {
+     ay1.start_frame();
+     ay2.start_frame();
+     beeper.start_frame();
+
+     // Z80 emulation before INT
+     for (int t = 0; t < 71680; t++) {
+        ay1.select(0);
+        ay1.write(t, t % 100);
+        ay2.select(3);
+        ay2.write(t, t % 100);
+        beeper.update(t, t % 4000, t % 400);
+     }
+     ay1.end_frame(t);
+     ay2.end_frame(t);
+     beeper.end_frame(t);
+
+     buf.count_start();
+     buf.count(ay1);
+     buf.count(ay2);
+     buf.count(beeper);
+     unsigned n_samples = buf.count_end();
+
+     bufptr_t pos1, pos2;
+     unsigned size1, size2;
+     buf.get_buffers(pos1, size1, pos2, size2, n_samples);
+
+     wav_play(buf.buffer+pos1, size1);
+     wav_play(buf.buffer+pos2, size2);
+     buf.samples_read(n_samples);
+  }
+
+#endif
+

+ 244 - 0
soloud.mod/soloud/src/audiosource/ay/sndchip.cpp

@@ -0,0 +1,244 @@
+/*
+   YM-2149F emulator for Unreal Speccy project
+   created under public domain license by SMT, jan.2006
+*/
+
+#include <string.h>
+#include "sndchip.h"
+
+void SNDCHIP::render(AYOUT *src, unsigned srclen, unsigned clk_ticks)
+{
+        start_frame();
+        for (unsigned index = 0; index < srclen; index++) {
+                // if (src[index].timestamp > clk_ticks) continue; // wrong input data leads to crash
+                select(src[index].reg_num);
+                write(src[index].timestamp, src[index].reg_value);
+        }
+        end_frame(clk_ticks);
+}
+
+
+const unsigned MULT_C_1 = 14; // fixed point precision for 'system tick -> ay tick'
+// b = 1+ln2(max_ay_tick/8) = 1+ln2(max_ay_fq/8 / min_intfq) = 1+ln2(10000000/(10*8)) = 17.9
+// assert(b+MULT_C_1 <= 32)
+
+void SNDCHIP::start_frame()
+{
+        r13_reloaded = 0;
+        SNDRENDER::start_frame();
+}
+
+void SNDCHIP::end_frame(unsigned clk_ticks)
+{
+        // adjusting 't' with whole history will fix accumulation of rounding errors
+
+        unsigned end_chip_tick = ((passed_clk_ticks + (long long)clk_ticks) * chip_clock_rate) / system_clock_rate;
+
+        flush( (unsigned) (end_chip_tick - passed_chip_ticks) );
+        SNDRENDER::end_frame(t);
+
+        passed_clk_ticks += clk_ticks;
+        passed_chip_ticks += t; t = 0;
+}
+
+void SNDCHIP::flush(unsigned chiptick)
+{
+   while (t < chiptick) {
+      t++;
+      if (++ta >= fa) ta = 0, bitA ^= -1;
+      if (++tb >= fb) tb = 0, bitB ^= -1;
+      if (++tc >= fc) tc = 0, bitC ^= -1;
+      if (++tn >= fn)
+         tn = 0,
+         ns = (ns*2+1) ^ (((ns>>16)^(ns>>13)) & 1),
+         bitN = 0 - ((ns >> 16) & 1);
+      if (++te >= fe) {
+         te = 0, env += denv;
+         if (env & ~31) {
+            unsigned mask = (1<<r.env);
+            if (mask & ((1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<9)|(1<<15)))
+               env = denv = 0;
+            else if (mask & ((1<<8)|(1<<12)))
+               env &= 31;
+            else if (mask & ((1<<10)|(1<<14)))
+               denv = -(int)denv, env = env + denv;
+            else env = 31, denv = 0; //11,13
+         }
+      }
+
+      unsigned en, l, r;
+
+      en = ((ea & env) | va) & ((bitA | bit0) & (bitN | bit3));
+      l  = vols[0][en]; r  = vols[1][en];
+
+      en = ((eb & env) | vb) & ((bitB | bit1) & (bitN | bit4));
+      l += vols[2][en]; r += vols[3][en];
+
+      en = ((ec & env) | vc) & ((bitC | bit2) & (bitN | bit5));
+      l += vols[4][en]; r += vols[5][en];
+
+      if ((l ^ SNDRENDER::mix_l) | (r ^ SNDRENDER::mix_r)) // similar check inside update()
+         update(t, l, r);
+   }
+}
+
+void SNDCHIP::select(unsigned char nreg)
+{
+        if (chiptype == CHIP_AY) nreg &= 0x0F;
+        activereg = nreg;
+}
+
+void SNDCHIP::write(unsigned timestamp, unsigned char val)
+{
+   if (activereg >= 0x10) return;
+
+   if ((1 << activereg) & ((1<<1)|(1<<3)|(1<<5)|(1<<13))) val &= 0x0F;
+   if ((1 << activereg) & ((1<<6)|(1<<8)|(1<<9)|(1<<10))) val &= 0x1F;
+
+   if (activereg != 13 && reg[activereg] == val) return;
+
+   reg[activereg] = val;
+
+
+   if (timestamp) flush((timestamp * mult_const) >> MULT_C_1); // cputick * ( (chip_clock_rate/8) / system_clock_rate );
+
+   switch (activereg) {
+      case 0:
+      case 1:
+         fa = r.fA;
+         break;
+      case 2:
+      case 3:
+         fb = r.fB;
+         break;
+      case 4:
+      case 5:
+         fc = r.fC;
+         break;
+      case 6:
+         fn = val*2;
+         break;
+      case 7:
+         bit0 = 0 - ((val>>0) & 1);
+         bit1 = 0 - ((val>>1) & 1);
+         bit2 = 0 - ((val>>2) & 1);
+         bit3 = 0 - ((val>>3) & 1);
+         bit4 = 0 - ((val>>4) & 1);
+         bit5 = 0 - ((val>>5) & 1);
+         break;
+      case 8:
+         ea = (val & 0x10)? -1 : 0;
+         va = ((val & 0x0F)*2+1) & ~ea;
+         break;
+      case 9:
+         eb = (val & 0x10)? -1 : 0;
+         vb = ((val & 0x0F)*2+1) & ~eb;
+         break;
+      case 10:
+         ec = (val & 0x10)? -1 : 0;
+         vc = ((val & 0x0F)*2+1) & ~ec;
+         break;
+      case 11:
+      case 12:
+         fe = r.envT;
+         break;
+      case 13:
+         r13_reloaded = 1;
+         te = 0;
+         if (r.env & 4) env = 0, denv = 1; // attack
+         else env = 31, denv = -1; // decay
+         break;
+   }
+}
+
+unsigned char SNDCHIP::read()
+{
+   if (activereg >= 0x10) return 0xFF;
+   return reg[activereg & 0x0F];
+}
+
+void SNDCHIP::set_timings(unsigned system_clock_rate, unsigned chip_clock_rate, unsigned sample_rate)
+{
+        chip_clock_rate /= 8;
+
+        SNDCHIP::system_clock_rate = system_clock_rate;
+        SNDCHIP::chip_clock_rate = chip_clock_rate;
+
+		mult_const = (unsigned)(((long long)chip_clock_rate << MULT_C_1) / system_clock_rate);
+        SNDRENDER::set_timings(chip_clock_rate, sample_rate);
+        passed_chip_ticks = passed_clk_ticks = 0;
+        t = 0; ns = 0xFFFF;
+        apply_regs();
+}
+
+void SNDCHIP::set_volumes(unsigned global_vol, const SNDCHIP_VOLTAB *voltab, const SNDCHIP_PANTAB *stereo)
+{
+        for (int j = 0; j < 6; j++)
+                for (int i = 0; i < 32; i++)
+                        vols[j][i] = (unsigned) (((long long)global_vol * voltab->v[i] * stereo->raw[j])/(65535*100*3));
+        memcpy(&defvoltab, voltab, sizeof(SNDCHIP_VOLTAB));
+        memcpy(&defpantab, stereo, sizeof(SNDCHIP_PANTAB));
+}
+
+void SNDCHIP::set_volume(unsigned global_vol)
+{
+        set_volumes(global_vol, &defvoltab, &defpantab);
+}
+
+void SNDCHIP::reset(unsigned timestamp)
+{
+        for (int i = 0; i < 14; i++) reg[i] = 0;
+        apply_regs(timestamp);
+}
+
+void SNDCHIP::apply_regs(unsigned timestamp)
+{
+        for (unsigned char r = 0; r < 16; r++) {
+                select(r); unsigned char p = reg[r];
+                /* clr cached values */
+                write(timestamp, p ^ 1); write(timestamp, p);
+        }
+}
+
+SNDCHIP::SNDCHIP(SNDBUFFER& buffer)
+                : SNDRENDER(buffer)
+{
+        bitA = bitB = bitC = 0;
+        set_timings(SNDR_DEFAULT_SYSTICK_RATE, SNDR_DEFAULT_AY_RATE, SNDR_DEFAULT_SAMPLE_RATE);
+        set_chip(CHIP_YM);
+        set_volumes(0x7FFF, SNDR_VOL_YM, SNDR_PAN_ABC);
+        reset();
+}
+
+// corresponds enum CHIP_TYPE
+const char * const ay_chips[] = { "AY-3-8910", "YM2149F" };
+
+
+const SNDCHIP_VOLTAB SNDR_VOL_AY_S =
+{ { 0x0000,0x0000,0x0340,0x0340,0x04C0,0x04C0,0x06F2,0x06F2,0x0A44,0x0A44,0x0F13,0x0F13,0x1510,0x1510,0x227E,0x227E,
+    0x289F,0x289F,0x414E,0x414E,0x5B21,0x5B21,0x7258,0x7258,0x905E,0x905E,0xB550,0xB550,0xD7A0,0xD7A0,0xFFFF,0xFFFF } };
+
+const SNDCHIP_VOLTAB SNDR_VOL_YM_S =
+{ { 0x0000,0x0000,0x00EF,0x01D0,0x0290,0x032A,0x03EE,0x04D2,0x0611,0x0782,0x0912,0x0A36,0x0C31,0x0EB6,0x1130,0x13A0,
+    0x1751,0x1BF5,0x20E2,0x2594,0x2CA1,0x357F,0x3E45,0x475E,0x5502,0x6620,0x7730,0x8844,0xA1D2,0xC102,0xE0A2,0xFFFF } };
+
+const SNDCHIP_PANTAB SNDR_PAN_MONO_S =
+{ 100,100, 100,100, 100,100 };
+
+const SNDCHIP_PANTAB SNDR_PAN_ABC_S =
+{ 100,10,  66,66,   10,100 };
+
+const SNDCHIP_PANTAB SNDR_PAN_ACB_S =
+{ 100,10,  10,100,  66,66 };
+
+const SNDCHIP_PANTAB SNDR_PAN_BAC_S =
+{ 66,66,   100,10,  10,100 };
+
+const SNDCHIP_PANTAB SNDR_PAN_BCA_S =
+{ 10,100,  100,10,  66,66 };
+
+const SNDCHIP_PANTAB SNDR_PAN_CAB_S =
+{ 66,66,   10,100,  100,10 };
+
+const SNDCHIP_PANTAB SNDR_PAN_CBA_S =
+{ 10,100,  66,66,   100,10 };

+ 141 - 0
soloud.mod/soloud/src/audiosource/ay/sndchip.h

@@ -0,0 +1,141 @@
+/*
+   YM-2149F emulator for Unreal Speccy project
+   created under public domain license by SMT, jan.2006
+*/
+
+
+#ifndef _SNDCHIP_H_INCLUDED
+#define _SNDCHIP_H_INCLUDED
+
+#include "sndrender.h"
+
+const unsigned SNDR_DEFAULT_AY_RATE = 1774400; // original ZX-Spectrum soundchip clock fq
+
+struct AYOUT;
+
+// output volumes (#0000-#FFFF) for given envelope state or R8-R10 value
+// AY chip has only 16 different volume values, so v[0]=v[1], v[2]=v[3], ...
+struct SNDCHIP_VOLTAB
+{
+   unsigned v[32];
+};
+
+// generator's channel panning, % (0-100)
+struct SNDCHIP_PANTAB
+{
+   unsigned raw[6];
+   // structured as 'struct { unsigned left, right; } chan[3]';
+};
+
+
+extern const char * const ay_chips[];
+
+#ifdef __GNUC__
+#pragma pack(push,1)
+#else
+#pragma pack(push)
+#pragma pack(1) // envelope period (envT, R13-R14) has invalid word alignment
+#endif
+struct AYREGS
+{
+   unsigned short fA, fB, fC;
+   unsigned char noise, mix;
+   unsigned char vA, vB, vC;
+   unsigned short envT;
+   unsigned char env;
+   unsigned char portA, portB;
+};
+#pragma pack(pop)
+
+class SNDCHIP : public SNDRENDER
+{
+
+ public:
+
+   enum CHIP_TYPE { CHIP_AY, CHIP_YM, CHIP_MAX };
+   static const char *get_chipname(CHIP_TYPE i) { return ay_chips[i]; }
+
+   void set_chip(CHIP_TYPE type) { chiptype = type; }
+   void set_timings(unsigned system_clock_rate, unsigned chip_clock_rate, unsigned sample_rate);
+   void set_volumes(unsigned global_vol, const SNDCHIP_VOLTAB *voltab, const SNDCHIP_PANTAB *stereo);
+   void set_volume(unsigned global_vol);
+
+   void reset(unsigned timestamp = 0); // call with default parameter, when context outside start_frame/end_frame block
+
+   // 'render' is a function that converts array of register writes into PCM-buffer
+   void render(AYOUT *src, unsigned srclen, unsigned clk_ticks);
+
+   // set of functions that fills buffer in emulation progress
+   void start_frame();
+   void select(unsigned char nreg);
+   void write(unsigned timestamp, unsigned char val);
+   unsigned char read();
+   void end_frame(unsigned clk_ticks);
+
+   SNDCHIP(SNDBUFFER&);
+
+   // for monitoring, chip can't report this values
+   unsigned char get_activereg() { return activereg; }
+   unsigned char get_r13_reloaded() { return r13_reloaded; }
+   unsigned char get_reg(unsigned nreg) { return reg[nreg]; }
+   unsigned get_env() { return env; }
+
+ private:
+
+   unsigned t, ta, tb, tc, tn, te, env, denv;
+   unsigned bitA, bitB, bitC, bitN, ns;
+   unsigned bit0, bit1, bit2, bit3, bit4, bit5;
+   unsigned ea, eb, ec, va, vb, vc;
+   unsigned fa, fb, fc, fn, fe;
+   unsigned mult_const;
+
+   unsigned char activereg, r13_reloaded;
+
+   unsigned vols[6][32];
+   CHIP_TYPE chiptype;
+
+   union {
+      unsigned char reg[16];
+      struct AYREGS r;
+   };
+
+   unsigned chip_clock_rate, system_clock_rate;
+   unsigned passed_chip_ticks, passed_clk_ticks;
+   void flush(unsigned chiptick);
+   void apply_regs(unsigned timestamp = 0);
+
+   SNDCHIP_VOLTAB defvoltab;
+   SNDCHIP_PANTAB defpantab;
+};
+
+struct AYOUT
+{
+   unsigned timestamp; // in system ticks
+   unsigned char reg_num;
+   unsigned char reg_value;
+   unsigned char res1, res2; // padding
+};
+
+extern const SNDCHIP_VOLTAB SNDR_VOL_AY_S;
+extern const SNDCHIP_VOLTAB SNDR_VOL_YM_S;
+extern const SNDCHIP_PANTAB SNDR_PAN_MONO_S;
+extern const SNDCHIP_PANTAB SNDR_PAN_ABC_S;
+extern const SNDCHIP_PANTAB SNDR_PAN_ACB_S;
+extern const SNDCHIP_PANTAB SNDR_PAN_BAC_S;
+extern const SNDCHIP_PANTAB SNDR_PAN_BCA_S;
+extern const SNDCHIP_PANTAB SNDR_PAN_CAB_S;
+extern const SNDCHIP_PANTAB SNDR_PAN_CBA_S;
+
+// used as parameters to SNDCHIP::set_volumes(),
+// if application don't want to override defaults
+const SNDCHIP_VOLTAB * const SNDR_VOL_AY = &SNDR_VOL_AY_S;
+const SNDCHIP_VOLTAB * const SNDR_VOL_YM = &SNDR_VOL_YM_S;
+const SNDCHIP_PANTAB * const SNDR_PAN_MONO = &SNDR_PAN_MONO_S;
+const SNDCHIP_PANTAB * const SNDR_PAN_ABC = &SNDR_PAN_ABC_S;
+const SNDCHIP_PANTAB * const SNDR_PAN_ACB = &SNDR_PAN_ACB_S;
+const SNDCHIP_PANTAB * const SNDR_PAN_BAC = &SNDR_PAN_BAC_S;
+const SNDCHIP_PANTAB * const SNDR_PAN_BCA = &SNDR_PAN_BCA_S;
+const SNDCHIP_PANTAB * const SNDR_PAN_CAB = &SNDR_PAN_CAB_S;
+const SNDCHIP_PANTAB * const SNDR_PAN_CBA = &SNDR_PAN_CBA_S;
+
+#endif // _SNDCHIP_H_INCLUDED

+ 208 - 0
soloud.mod/soloud/src/audiosource/ay/sndrender.cpp

@@ -0,0 +1,208 @@
+/*
+   sound resampling core for Unreal Speccy project
+   created under public domain license by SMT, jan.2006
+*/
+
+#include "sndrender.h"
+
+void SNDRENDER::render(SNDOUT *src, unsigned srclen, unsigned sys_ticks)
+{
+        start_frame();
+        for (unsigned index = 0; index < srclen; index++) {
+                // if (src[index].timestamp > sys_ticks) continue; // wrong input data leads to crash
+                update(src[index].timestamp, src[index].newvalue.ch.left, src[index].newvalue.ch.right);
+        }
+        end_frame(sys_ticks);
+}
+
+const unsigned TICK_FF = 6;            // oversampling ratio: 2^6 = 64
+const unsigned TICK_F = (1<<TICK_FF);
+
+const unsigned MULT_C = 12;   // fixed point precision for 'system tick -> sound tick'
+// b = 1+ln2(max_sndtick) = 1+ln2((max_sndfq*TICK_F)/min_intfq) = 1+ln2(48000*64/10) ~= 19.2;
+// assert(b+MULT_C <= 32)
+
+
+void SNDRENDER::start_frame()
+{
+        dst_start = dstpos;
+        base_tick = tick;
+}
+
+void SNDRENDER::update(unsigned sys_tick, unsigned l, unsigned r)
+{
+        if (!((l ^ mix_l) | (r ^ mix_r))) return;
+
+        unsigned endtick = (sys_tick * mult_const) >> MULT_C; // = sys_tick * (sample_rate*TICK_F) / sys_clock_rate
+        flush(base_tick + endtick);
+        mix_l = l, mix_r = r;
+}
+
+void SNDRENDER::end_frame(unsigned endframe_sys_tick)
+{
+        // adjusting 'endframe_sys_tick' with whole history will fix accumulation of rounding errors
+        //uint64_t endtick = ((passed_sys_ticks + endframe_sys_tick) * mult_const) >> MULT_C;
+        unsigned endtick = ((passed_sys_ticks + endframe_sys_tick) * (long long)sample_rate * TICK_F) / sys_clock_rate;
+        flush( (unsigned) (endtick - passed_snd_ticks) );
+
+        // update global system_tick counter
+        passed_sys_ticks += endframe_sys_tick;
+
+        // shorten tick to avoid overflow
+        unsigned ready_samples = dstpos - dst_start;
+        if ((int)ready_samples < 0) ready_samples += bufsize;
+        tick -= (ready_samples << TICK_FF);
+        passed_snd_ticks += (ready_samples << TICK_FF);
+}
+
+void SNDRENDER::set_timings(unsigned aSys_clock_rate, unsigned aSample_rate)
+{
+        SNDRENDER::sys_clock_rate = aSys_clock_rate;
+        SNDRENDER::sample_rate = aSample_rate;
+
+        tick = 0; dstpos = dst_start = 0;
+        passed_snd_ticks = passed_sys_ticks = 0;
+
+        mult_const = (unsigned) (((long long)aSample_rate << (MULT_C+TICK_FF)) / aSys_clock_rate);
+        // sndbuffer.reset(); // must be done globally - avoid many renders to do many resets
+}
+
+static unsigned filter_diff[TICK_F*2];
+const double filter_sum_full = 1.0, filter_sum_half = 0.5;
+const unsigned filter_sum_full_u = (unsigned)(filter_sum_full * 0x10000),
+               filter_sum_half_u = (unsigned)(filter_sum_half * 0x10000);
+
+// main rendering routine
+// TICK_F snd_ticks is one output sample. FIR filter used to calculate output samples from snd_ticks
+void SNDRENDER::flush(unsigned endtick)
+{
+        unsigned scale;
+        if (!((endtick ^ tick) & ~(TICK_F-1))) {
+
+                scale = filter_diff[(endtick & (TICK_F-1)) + TICK_F] - filter_diff[(tick & (TICK_F-1)) + TICK_F];
+                s2_l += mix_l * scale;
+                s2_r += mix_r * scale;
+
+                scale = filter_diff[endtick & (TICK_F-1)] - filter_diff[tick & (TICK_F-1)];
+                s1_l += mix_l * scale;
+                s1_r += mix_r * scale;
+
+                tick = endtick;
+
+        } else {
+                scale = filter_sum_full_u - filter_diff[(tick & (TICK_F-1)) + TICK_F];
+
+                unsigned sample_value = ((mix_l*scale + s2_l) >> 16) +
+                                          ((mix_r*scale + s2_r) & 0xFFFF0000);
+
+                // don't bother of overflow here. render at low volume and normalize later
+                buffer[dstpos].sample += sample_value;
+                dstpos = (dstpos+1) & (bufsize-1);
+
+                scale = filter_sum_half_u - filter_diff[tick & (TICK_F-1)];
+                s2_l = s1_l + mix_l * scale;
+                s2_r = s1_r + mix_r * scale;
+
+                tick = (tick | (TICK_F-1))+1;
+
+                if ((endtick ^ tick) & ~(TICK_F-1)) {
+                        // assume filter_coeff is symmetric
+                        unsigned val_l = mix_l * filter_sum_half_u;
+                        unsigned val_r = mix_r * filter_sum_half_u;
+                        do {
+                                unsigned sample_value = ((s2_l + val_l) >> 16) +
+                                                          ((s2_r + val_r) & 0xFFFF0000); // save s2+val
+
+                                buffer[dstpos].sample += sample_value;
+                                dstpos = (dstpos+1) & (bufsize-1);
+
+                                tick += TICK_F;
+                                s2_l = val_l, s2_r = val_r; // s2=s1, s1=0;
+
+                        } while ((endtick ^ tick) & ~(TICK_F-1));
+                }
+
+                tick = endtick;
+
+                scale = filter_diff[(endtick & (TICK_F-1)) + TICK_F] - filter_sum_half_u;
+                s2_l += mix_l * scale;
+                s2_r += mix_r * scale;
+
+                scale = filter_diff[endtick & (TICK_F-1)];
+                s1_l = mix_l * scale;
+                s1_r = mix_r * scale;
+        }
+}
+
+const double filter_coeff[TICK_F*2] =
+{
+   // filter designed with Matlab's DSP toolbox
+   0.000797243121022152, 0.000815206499600866, 0.000844792477531490, 0.000886460636664257,
+   0.000940630171246217, 0.001007677515787512, 0.001087934129054332, 0.001181684445143001,
+   0.001289164001921830, 0.001410557756409498, 0.001545998595893740, 0.001695566052785407,
+   0.001859285230354019, 0.002037125945605404, 0.002229002094643918, 0.002434771244914945,
+   0.002654234457752337, 0.002887136343664226, 0.003133165351783907, 0.003391954293894633,
+   0.003663081102412781, 0.003946069820687711, 0.004240391822953223, 0.004545467260249598,
+   0.004860666727631453, 0.005185313146989532, 0.005518683858848785, 0.005860012915564928,
+   0.006208493567431684, 0.006563280932335042, 0.006923494838753613, 0.007288222831108771,
+   0.007656523325719262, 0.008027428904915214, 0.008399949736219575, 0.008773077102914008,
+   0.009145787031773989, 0.009517044003286715, 0.009885804729257883, 0.010251021982371376,
+   0.010611648461991030, 0.010966640680287394, 0.011314962852635887, 0.011655590776166550,
+   0.011987515680350414, 0.012309748033583185, 0.012621321289873522, 0.012921295559959939,
+   0.013208761191466523, 0.013482842243062109, 0.013742699838008606, 0.013987535382970279,
+   0.014216593638504731, 0.014429165628265581, 0.014624591374614174, 0.014802262449059521,
+   0.014961624326719471, 0.015102178534818147, 0.015223484586101132, 0.015325161688957322,
+   0.015406890226980602, 0.015468413001680802, 0.015509536233058410, 0.015530130313785910,
+   0.015530130313785910, 0.015509536233058410, 0.015468413001680802, 0.015406890226980602,
+   0.015325161688957322, 0.015223484586101132, 0.015102178534818147, 0.014961624326719471,
+   0.014802262449059521, 0.014624591374614174, 0.014429165628265581, 0.014216593638504731,
+   0.013987535382970279, 0.013742699838008606, 0.013482842243062109, 0.013208761191466523,
+   0.012921295559959939, 0.012621321289873522, 0.012309748033583185, 0.011987515680350414,
+   0.011655590776166550, 0.011314962852635887, 0.010966640680287394, 0.010611648461991030,
+   0.010251021982371376, 0.009885804729257883, 0.009517044003286715, 0.009145787031773989,
+   0.008773077102914008, 0.008399949736219575, 0.008027428904915214, 0.007656523325719262,
+   0.007288222831108771, 0.006923494838753613, 0.006563280932335042, 0.006208493567431684,
+   0.005860012915564928, 0.005518683858848785, 0.005185313146989532, 0.004860666727631453,
+   0.004545467260249598, 0.004240391822953223, 0.003946069820687711, 0.003663081102412781,
+   0.003391954293894633, 0.003133165351783907, 0.002887136343664226, 0.002654234457752337,
+   0.002434771244914945, 0.002229002094643918, 0.002037125945605404, 0.001859285230354019,
+   0.001695566052785407, 0.001545998595893740, 0.001410557756409498, 0.001289164001921830,
+   0.001181684445143001, 0.001087934129054332, 0.001007677515787512, 0.000940630171246217,
+   0.000886460636664257, 0.000844792477531490, 0.000815206499600866, 0.000797243121022152
+};
+
+void init_diff()
+{
+        double sum = 0;
+        for (int i = 0; i < TICK_F*2; i++) {
+                filter_diff[i] = (int)(sum * 0x10000);
+                sum += filter_coeff[i];
+        }
+}
+
+SNDRENDER::SNDRENDER(SNDBUFFER& _sndbuffer)
+                : sndbuffer(_sndbuffer), buffer(_sndbuffer.buffer), bufsize(_sndbuffer.size)
+{
+        tick = 0;
+        base_tick = 0;
+        s1_l = 0;
+        s1_r = 0;
+        s2_l = 0;
+        s2_r = 0;
+        mix_l = 0;
+        mix_r = 0;
+
+        sys_clock_rate = 0;
+        sample_rate = 0;
+        passed_sys_ticks = 0; 
+        passed_snd_ticks = 0;
+        mult_const = 0;
+
+        set_timings(SNDR_DEFAULT_SYSTICK_RATE, SNDR_DEFAULT_SAMPLE_RATE);
+
+        static char diff_ready = 0;
+        if (!diff_ready) {
+                init_diff();
+                diff_ready = 1;
+        }
+}

+ 63 - 0
soloud.mod/soloud/src/audiosource/ay/sndrender.h

@@ -0,0 +1,63 @@
+/*
+   sound resampling core for Unreal Speccy project
+   created under public domain license by SMT, jan.2006
+*/
+
+#pragma once
+
+#include "sndbuffer.h"
+
+struct SNDOUT;
+
+const unsigned SNDR_DEFAULT_SYSTICK_RATE = 3500000; // ZX-Spectrum Z80 clock
+const unsigned SNDR_DEFAULT_SAMPLE_RATE = 44100;
+
+class SNDRENDER
+{
+public:
+        SNDRENDER(SNDBUFFER& sndbuffer);
+
+        void set_timings(unsigned sys_clock_rate, unsigned sample_rate);
+
+        // 'render' is a function that converts array of DAC inputs into PCM-buffer
+        void render(SNDOUT *src, unsigned srclen, unsigned sys_ticks);
+
+        // set of functions that fills buffer in emulation progress:
+
+        // when called, we assume that sys_tick reset to 0
+        void start_frame();
+        // system writes to DAC at given sys_tick
+        void update(unsigned sys_tick, unsigned l, unsigned r);
+        // emulate non-changed DAC value until end of frame
+        void end_frame(unsigned endframe_sys_tick);
+
+protected:
+
+        friend class SNDBUFFER; // access to dstpos in count()
+        SNDBUFFER& sndbuffer;
+
+        unsigned mix_l, mix_r; // current L/R volume values
+        bufptr_t dstpos; // write position
+        bufptr_t dst_start; // write position at start of frame. used to track count of samples in frame
+
+private:
+        // local copies of sndbuffer params (for speed)
+        SNDSAMPLE* buffer;
+        unsigned bufsize;
+
+        unsigned tick, base_tick;
+        unsigned s1_l, s1_r;
+        unsigned s2_l, s2_r;
+
+        unsigned sys_clock_rate, sample_rate;
+        unsigned passed_sys_ticks, passed_snd_ticks;
+        unsigned mult_const;
+
+        void flush(unsigned endtick);
+};
+
+struct SNDOUT
+{
+        unsigned timestamp; // in 'system clock' ticks
+        SNDSAMPLE newvalue;
+};

+ 187 - 0
soloud.mod/soloud/src/audiosource/ay/soloud_ay.cpp

@@ -0,0 +1,187 @@
+/*
+AY module for SoLoud audio engine
+Copyright (c) 2020 Jari Komppa
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+   1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+
+   2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+
+   3. This notice may not be removed or altered from any source
+   distribution.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include "sndbuffer.h"
+#include "sndrender.h"
+#include "sndchip.h"
+#include "chipplayer.h"
+#include "soloud_ay.h"
+#include "soloud_file.h"
+#include "zx7decompress.h"
+
+
+namespace SoLoud
+{
+
+	AyInstance::AyInstance(Ay *aParent)
+	{
+		mPos = 0;
+		mParent = aParent;
+		mChip = new ChipPlayer(this);
+	}
+
+	unsigned int AyInstance::getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int /*aBufferSize*/)
+	{
+		int samples = mChip->play(aBuffer, aSamplesToRead);
+		return samples;
+	}
+	
+	bool AyInstance::hasEnded()
+	{
+		return mParent->mLength <= mPos;
+	}
+
+	result AyInstance::rewind()
+	{
+		mPos = 0;
+		return SO_NO_ERROR;
+	}
+
+	float AyInstance::getInfo(unsigned int aInfoKey)
+	{
+		if ((aInfoKey & 0xf) <= 13)
+		{
+			if (aInfoKey < 0x10)
+				return mChip->chip.get_reg(aInfoKey);
+			if (aInfoKey & 0x10)
+				return mChip->chip2.get_reg(aInfoKey & 0xf);
+		}
+		return 0;
+	}
+
+	AyInstance::~AyInstance()
+	{
+		delete mChip;
+	}
+
+	Ay::Ay()
+	{
+		mBaseSamplerate = 44100;
+		mChannels = 2;
+		mOps = 0;
+		mYm = false;
+		mChipspeed = 1774400;
+		mCpuspeed = 50;
+		mLooppos = 0;
+		mLength = 0;
+	}
+
+	Ay::~Ay()
+	{
+		stop();
+		delete[] mOps;
+	}
+
+	result Ay::loadMem(const unsigned char *aMem, unsigned int aLength, bool aCopy, bool aTakeOwnership)
+	{
+		if (!aMem || aLength == 0)
+			return INVALID_PARAMETER;
+		MemoryFile *mf = new MemoryFile;
+		if (!mf)
+			return OUT_OF_MEMORY;
+		int res = mf->openMem(aMem, aLength, aCopy, aTakeOwnership);
+		if (res != SO_NO_ERROR)
+		{
+			delete mf;
+			return res;
+		}
+		res = loadFile(mf);
+		delete mf;
+		return res;
+	}
+
+	result Ay::load(const char *aFilename)
+	{
+		if (!aFilename)
+			return INVALID_PARAMETER;
+		DiskFile *df = new DiskFile;
+		if (!df) return OUT_OF_MEMORY;
+		int res = df->open(aFilename);
+		if (res != SO_NO_ERROR)
+		{
+			delete df;
+			return res;
+		}
+		res = loadFile(df);
+
+		delete df;
+		return res;
+	}
+
+	result Ay::loadFile(File *aFile)
+	{
+		if (aFile == NULL)
+			return INVALID_PARAMETER;
+		// Expect a file wih header and at least one reg write
+		if (aFile->length() < 34) return FILE_LOAD_FAILED;
+
+		aFile->seek(0);
+		if (aFile->read32() != 'PIHC') return FILE_LOAD_FAILED; // CHIP
+		if (aFile->read32() != 'ENUT') return FILE_LOAD_FAILED; // TUNE
+		int dataofs = aFile->read16();
+		int chiptype = aFile->read8();
+		// check if this file is for AY / YM, turbosound or turbosound next
+		if (!(chiptype == 1 || chiptype == 2 || chiptype == 3)) return FILE_LOAD_FAILED;
+		int flags = aFile->read8();
+		int kchunks = aFile->read16();
+		int lastchunk = aFile->read16();
+		mLength = (kchunks - 1) * 1024 + lastchunk;
+		mLooppos = aFile->read16() * 1024 + aFile->read16();
+		mCpuspeed = aFile->read32();
+		mChipspeed = aFile->read32();
+		mYm = false;
+		if (flags & 64) mYm = true;
+		mOps = new unsigned short[mLength];
+		aFile->seek(dataofs);
+		if (flags & 1)
+		{
+			// uncompressed
+			aFile->read((unsigned char*)mOps, mLength);
+		}
+		else
+		{
+			// compressed
+			int len = aFile->length() - dataofs;
+			unsigned char* buf = new unsigned char[len];
+			aFile->read(buf, len);
+			int bufofs = 0;
+			for (int i = 0; i < kchunks; i++)
+			{
+				bufofs += zx7_decompress(buf + bufofs, ((unsigned char*)mOps) + i * 1024);
+			}
+			delete[] buf;
+		}
+		return SO_NO_ERROR;
+	}
+
+	AudioSourceInstance * Ay::createInstance() 
+	{
+		return new AyInstance(this);
+	}
+
+};

+ 2 - 2
soloud.mod/soloud/src/audiosource/tedsid/sid.cpp

@@ -97,7 +97,7 @@ void SIDsound::setModel(unsigned int model)
 					(20163.0 - 1315.0) * x + 1315.0;
 			}
 			dcWave = 0x380;
-			dcMixer = -0xFFF*0xFF/18 >> 7;
+			dcMixer = -454; // gcc and msvc agree that "-0xFFF * 0xFF / 18 >> 7" turns into -454;
 			dcVoice = 0x800*0xFF;
 			break;
 
@@ -111,7 +111,7 @@ void SIDsound::setModel(unsigned int model)
 					* (18000.0 - 4600.0) + 4600.0;
 			}
 			dcWave = 0x380;
-			dcMixer = -0xFFF*0xFF/18 >> 7;
+			dcMixer = -454; // gcc and msvc agree that "-0xFFF * 0xFF / 18 >> 7" turns into -454;
 			dcVoice = 0x800*0xFF;
 			break;
 	}

+ 71 - 98
soloud.mod/soloud/src/audiosource/tedsid/soloud_tedsid.cpp

@@ -1,6 +1,6 @@
 /*
 TED/SID module for SoLoud audio engine
-Copyright (c) 2015 Jari Komppa
+Copyright (c) 2015-2020 Jari Komppa
 
 This software is provided 'as-is', without any express or implied
 warranty. In no event will the authors be held liable for any damages
@@ -30,6 +30,7 @@ freely, subject to the following restrictions:
 #include "ted.h"
 #include "soloud_tedsid.h"
 #include "soloud_file.h"
+#include "zx7decompress.h"
 
 namespace SoLoud
 {
@@ -46,11 +47,11 @@ namespace SoLoud
 		mTED = new TED();
 		mTED->oscillatorInit();
 
-		mNextReg = 100; // NOP
-		mNextVal = 0;
 		int i;
 		for (i = 0; i < 128; i++)
 			mRegValues[i] = 0;
+
+		mPos = 0;
 	}
 
 	unsigned int TedSidInstance::getAudio(float *aBuffer, unsigned int aSamplesToRead, unsigned int /*aBufferSize*/)
@@ -71,33 +72,33 @@ namespace SoLoud
 	
 	void TedSidInstance::tick()
 	{
-	    if (mParent->mFile == 0)
+	    if (mParent->mOps == 0)
 	        return;
 
 		while (mSampleCount == 0)
 		{
-			mRegValues[mNextReg] = mNextVal;
-			if (mNextReg < 64)
+			unsigned short op = mParent->mOps[mPos / 2];
+			mPos += 2;
+			if (mPos >= mParent->mLength) mPos = mParent->mLooppos;
+			if (op & 0x8000)
 			{
-				mSID->write(mNextReg, (unsigned char)mNextVal);
+				mSampleCount = op & 0x7fff;
 			}
 			else
-			if (mNextReg < 64 + 5)
-			{
-				mTED->writeSoundReg(mNextReg - 64, (unsigned char)mNextVal);
-			}
-//			mSampleCount = mParent->mFile->read16();
-			mNextVal = mParent->mFile->read8();
-			mNextReg = mParent->mFile->read8();
-			if (mNextReg & 0x80)
 			{
-				// timestamp!
-				mSampleCount = ((int)(mNextReg & 0x7f) << 8) | mNextVal;
-				mNextVal = mParent->mFile->read8();
-				mNextReg = mParent->mFile->read8();
+				int reg = (op >> 8) & 0xff;
+				int val = op & 0xff;
+				mRegValues[reg] = val;
+				if (reg < 64)
+				{
+					mSID->write(reg, val);
+				}
+				else
+				if (reg < 64 + 5)
+				{
+					mTED->writeSoundReg(reg - 64, val);
+				}
 			}
-			if (mParent->mFile->eof())
-				mParent->mFile->seek(8);
 		}
 	}
 
@@ -121,16 +122,17 @@ namespace SoLoud
 	{
 		mBaseSamplerate = TED_SOUND_CLOCK;
 		mChannels = 1;
-		mFile = 0;
-		mFileOwned = false;
+		mOps = 0;
 		mModel = 0;
+		mLength = 0;
+		mLooppos = 0;
 	}
 
 	TedSid::~TedSid()
 	{
 		stop();
-		if (mFileOwned)
-			delete mFile;
+		delete[] mOps;
+		mOps = 0;
 	}
 
 	result TedSid::loadMem(const unsigned char *aMem, unsigned int aLength, bool aCopy, bool aTakeOwnership)
@@ -147,14 +149,8 @@ namespace SoLoud
 			return res;
 		}
 		res = loadFile(mf);
-		if (res != SO_NO_ERROR)
-		{
-			delete mf;
-			return res;
-		}
-		mFileOwned = aCopy || aTakeOwnership;
-
-		return SO_NO_ERROR;
+		delete mf;
+		return res;
 	}
 
 	result TedSid::load(const char *aFilename)
@@ -170,80 +166,57 @@ namespace SoLoud
 			return res;
 		}
 		res = loadFile(df);
-		if (res != SO_NO_ERROR)
-		{
-			delete df;
-			return res;
-		}
-		mFileOwned = true;				
-		return SO_NO_ERROR;
-	}
-
-	result TedSid::loadToMem(const char *aFilename)
-	{
-		if (!aFilename)
-			return INVALID_PARAMETER;
-		MemoryFile *mf = new MemoryFile;
-		if (!mf) return OUT_OF_MEMORY;
-		int res = mf->openToMem(aFilename);
-		if (res != SO_NO_ERROR)
-		{
-			delete mf;
-			return res;
-		}
-		res = loadFile(mf);
-		if (res != SO_NO_ERROR)
-		{
-			delete mf;
-			return res;
-		}
-		mFileOwned = true;
-		return SO_NO_ERROR;
-	}
-
-	result TedSid::loadFileToMem(File *aFile)
-	{
-		if (!aFile)
-			return INVALID_PARAMETER;
-		MemoryFile *mf = new MemoryFile;
-		if (!mf) return OUT_OF_MEMORY;
-		int res = mf->openFileToMem(aFile);
-		if (res != SO_NO_ERROR)
-		{
-			delete mf;
-			return res;
-		}
-		res = loadFile(mf);
-		if (res != SO_NO_ERROR)
-		{
-			delete mf;
-			return res;
-		}
-		mFileOwned = true;
-		return SO_NO_ERROR;
+		delete df;
+		return res;
 	}
 
 	result TedSid::loadFile(File *aFile)
 	{
 		if (aFile == NULL)
 			return INVALID_PARAMETER;
-		if (mFileOwned)
-			delete mFile;
+		delete[] mOps;
+		mOps = 0;
 		// Expect a file wih header and at least one reg write
-		if (aFile->length() < 4+4+2+2) return FILE_LOAD_FAILED;
+		if (aFile->length() < 34) return FILE_LOAD_FAILED;
 
 		aFile->seek(0);
-		if (aFile->read8() != 'D') return FILE_LOAD_FAILED;
-		if (aFile->read8() != 'u') return FILE_LOAD_FAILED;
-		if (aFile->read8() != 'm') return FILE_LOAD_FAILED;
-		if (aFile->read8() != 'p') return FILE_LOAD_FAILED;
-		if (aFile->read8() != 0) return FILE_LOAD_FAILED;
-		mModel = aFile->read8();
-		aFile->seek(8);
-
-		mFile = aFile;
-		mFileOwned = false;
-
+		if (aFile->read32() != 'PIHC') return FILE_LOAD_FAILED; // CHIP
+		if (aFile->read32() != 'ENUT') return FILE_LOAD_FAILED; // TUNE
+		int dataofs = aFile->read16();
+		int chiptype = aFile->read8();
+		// check if this file is for sid, ted, or combination of several
+		if (!(chiptype == 0 || chiptype == 4 || chiptype == 5 || chiptype == 6)) return FILE_LOAD_FAILED;
+		int flags = aFile->read8();
+		int kchunks = aFile->read16();
+		int lastchunk = aFile->read16();
+		mLength = (kchunks - 1) * 1024 + lastchunk;
+		mLooppos = aFile->read16() * 1024 + aFile->read16();
+		aFile->read32(); // cpuspeed
+		aFile->read32(); // chipspeed
+		if ((mFlags & (16 | 32)) ==  0) mModel = SID6581;
+		if ((mFlags & (16 | 32)) == 16) mModel = SID8580;
+		if ((mFlags & (16 | 32)) == 32) mModel = SID8580DB;
+		if ((mFlags & (16 | 32)) == 48) mModel = SID6581R1;
+		mOps = new unsigned short[mLength];
+		aFile->seek(dataofs);
+		if (flags & 1)
+		{
+			// uncompressed
+			aFile->read((unsigned char*)mOps, mLength);
+		}
+		else
+		{
+			// compressed
+			int len = aFile->length() - dataofs;
+			unsigned char* buf = new unsigned char[len];
+			aFile->read(buf, len);
+			int bufofs = 0;
+			for (int i = 0; i < kchunks; i++)
+			{
+				bufofs += zx7_decompress(buf + bufofs, ((unsigned char*)mOps) + i * 1024);
+			}
+			delete[] buf;
+		}
 
 		return SO_NO_ERROR;
 	}

+ 11 - 4
soloud.mod/soloud/src/audiosource/vizsn/soloud_vizsn.cpp

@@ -190,6 +190,9 @@ static const char keyz[] =
 
 namespace SoLoud
 {
+	VizsnResonator::VizsnResonator() : a(0), b(0), c(0), p1(0), p2(0) {}
+	VizsnBank::VizsnBank() : pitch(0), frica(0), voice(0), aspir(0), bypas(0), breth(0) {}
+
 	float VizsnResonator::resonate(float i)
 	{
 		float x = (a * i) + (b * p1) + (c * p2);
@@ -219,6 +222,10 @@ namespace SoLoud
 		mB = 100;
 		mOrgv = -1;
 		mGlotlast = 0;
+		mNper = 0;
+		mNmod = 0;
+		mNopen = 0;
+		memset(mBuf, 0, sizeof(float) * 2048);
 	}
 
 	VizsnInstance::~VizsnInstance()
@@ -431,11 +438,11 @@ namespace SoLoud
 				/* v */
 				const float *v = voo[aP - 8];
 
-				aB->voice = *v++;
+				/*aB->voice = *v++; */ v++;
 				aB->aspir = *v++;
 				aB->frica = *v++;
 				aB->bypas = *v++;
-				aB->breth = *v++;
+				/*aB->breth = *v++; */ v++;
 
 				int j;
 				for (j = 0; j < 10; j++)
@@ -515,8 +522,8 @@ namespace SoLoud
 		for (i = 0; i < len; i++)
 		{
 			int c = mText[i + 1];
-			if (c == '\x84' || c == -124) c = '{'; // ä
-			if (c == '\x94' || c == -108) c = '|'; // ö
+			if (c == '\x84') c = '{'; // ä
+			if (c == '\x94') c = '|'; // ö
 			if (c >= 'a' && c <= '|')
 			{
 				mText[i + 1] = keyz[c - 'a'];

+ 32 - 2
soloud.mod/soloud/src/c_api/soloud.def

@@ -49,9 +49,11 @@ EXPORTS
 	Soloud_getGlobalVolume
 	Soloud_getMaxActiveVoiceCount
 	Soloud_getLooping
+	Soloud_getAutoStop
 	Soloud_getLoopPoint
 	Soloud_setLoopPoint
 	Soloud_setLooping
+	Soloud_setAutoStop
 	Soloud_setMaxActiveVoiceCount
 	Soloud_setInaudibleBehavior
 	Soloud_setGlobalVolume
@@ -107,6 +109,24 @@ EXPORTS
 	Soloud_set3dSourceDopplerFactor
 	Soloud_mix
 	Soloud_mixSigned16
+	Ay_destroy
+	Ay_create
+	Ay_setVolume
+	Ay_setLooping
+	Ay_setAutoStop
+	Ay_set3dMinMaxDistance
+	Ay_set3dAttenuation
+	Ay_set3dDopplerFactor
+	Ay_set3dListenerRelative
+	Ay_set3dDistanceDelay
+	Ay_set3dCollider
+	Ay_set3dColliderEx
+	Ay_set3dAttenuator
+	Ay_setInaudibleBehavior
+	Ay_setLoopPoint
+	Ay_getLoopPoint
+	Ay_setFilter
+	Ay_stop
 	BassboostFilter_destroy
 	BassboostFilter_getParamCount
 	BassboostFilter_getParamName
@@ -145,6 +165,7 @@ EXPORTS
 	Bus_setResampler
 	Bus_setVolume
 	Bus_setLooping
+	Bus_setAutoStop
 	Bus_set3dMinMaxDistance
 	Bus_set3dAttenuation
 	Bus_set3dDopplerFactor
@@ -216,6 +237,7 @@ EXPORTS
 	Monotone_loadFile
 	Monotone_setVolume
 	Monotone_setLooping
+	Monotone_setAutoStop
 	Monotone_set3dMinMaxDistance
 	Monotone_set3dAttenuation
 	Monotone_set3dDopplerFactor
@@ -235,6 +257,7 @@ EXPORTS
 	Noise_setType
 	Noise_setVolume
 	Noise_setLooping
+	Noise_setAutoStop
 	Noise_set3dMinMaxDistance
 	Noise_set3dAttenuation
 	Noise_set3dDopplerFactor
@@ -256,6 +279,7 @@ EXPORTS
 	Openmpt_loadFile
 	Openmpt_setVolume
 	Openmpt_setLooping
+	Openmpt_setAutoStop
 	Openmpt_set3dMinMaxDistance
 	Openmpt_set3dAttenuation
 	Openmpt_set3dDopplerFactor
@@ -279,6 +303,7 @@ EXPORTS
 	Queue_setParamsEx
 	Queue_setVolume
 	Queue_setLooping
+	Queue_setAutoStop
 	Queue_set3dMinMaxDistance
 	Queue_set3dAttenuation
 	Queue_set3dDopplerFactor
@@ -310,6 +335,7 @@ EXPORTS
 	Sfxr_loadPreset
 	Sfxr_setVolume
 	Sfxr_setLooping
+	Sfxr_setAutoStop
 	Sfxr_set3dMinMaxDistance
 	Sfxr_set3dAttenuation
 	Sfxr_set3dDopplerFactor
@@ -330,6 +356,7 @@ EXPORTS
 	Speech_setParamsEx
 	Speech_setVolume
 	Speech_setLooping
+	Speech_setAutoStop
 	Speech_set3dMinMaxDistance
 	Speech_set3dAttenuation
 	Speech_set3dDopplerFactor
@@ -346,13 +373,12 @@ EXPORTS
 	TedSid_destroy
 	TedSid_create
 	TedSid_load
-	TedSid_loadToMem
 	TedSid_loadMem
 	TedSid_loadMemEx
-	TedSid_loadFileToMem
 	TedSid_loadFile
 	TedSid_setVolume
 	TedSid_setLooping
+	TedSid_setAutoStop
 	TedSid_set3dMinMaxDistance
 	TedSid_set3dAttenuation
 	TedSid_set3dDopplerFactor
@@ -374,6 +400,7 @@ EXPORTS
 	Vic_getRegister
 	Vic_setVolume
 	Vic_setLooping
+	Vic_setAutoStop
 	Vic_set3dMinMaxDistance
 	Vic_set3dAttenuation
 	Vic_set3dDopplerFactor
@@ -392,6 +419,7 @@ EXPORTS
 	Vizsn_setText
 	Vizsn_setVolume
 	Vizsn_setLooping
+	Vizsn_setAutoStop
 	Vizsn_set3dMinMaxDistance
 	Vizsn_set3dAttenuation
 	Vizsn_set3dDopplerFactor
@@ -420,6 +448,7 @@ EXPORTS
 	Wav_getLength
 	Wav_setVolume
 	Wav_setLooping
+	Wav_setAutoStop
 	Wav_set3dMinMaxDistance
 	Wav_set3dAttenuation
 	Wav_set3dDopplerFactor
@@ -452,6 +481,7 @@ EXPORTS
 	WavStream_getLength
 	WavStream_setVolume
 	WavStream_setLooping
+	WavStream_setAutoStop
 	WavStream_set3dMinMaxDistance
 	WavStream_set3dAttenuation
 	WavStream_set3dDopplerFactor

+ 209 - 12
soloud.mod/soloud/src/c_api/soloud_c.cpp

@@ -30,6 +30,7 @@ freely, subject to the following restrictions:
 /* SoLoud C-Api Code Generator (c)2013-2020 Jari Komppa http://iki.fi/sol/ */
 
 #include "../include/soloud.h"
+#include "../include/soloud_ay.h"
 #include "../include/soloud_audiosource.h"
 #include "../include/soloud_bassboostfilter.h"
 #include "../include/soloud_biquadresonantfilter.h"
@@ -360,6 +361,12 @@ int Soloud_getLooping(void * aClassPtr, unsigned int aVoiceHandle)
 	return cl->getLooping(aVoiceHandle);
 }
 
+int Soloud_getAutoStop(void * aClassPtr, unsigned int aVoiceHandle)
+{
+	Soloud * cl = (Soloud *)aClassPtr;
+	return cl->getAutoStop(aVoiceHandle);
+}
+
 double Soloud_getLoopPoint(void * aClassPtr, unsigned int aVoiceHandle)
 {
 	Soloud * cl = (Soloud *)aClassPtr;
@@ -378,6 +385,12 @@ void Soloud_setLooping(void * aClassPtr, unsigned int aVoiceHandle, int aLooping
 	cl->setLooping(aVoiceHandle, !!aLooping);
 }
 
+void Soloud_setAutoStop(void * aClassPtr, unsigned int aVoiceHandle, int aAutoStop)
+{
+	Soloud * cl = (Soloud *)aClassPtr;
+	cl->setAutoStop(aVoiceHandle, !!aAutoStop);
+}
+
 int Soloud_setMaxActiveVoiceCount(void * aClassPtr, unsigned int aVoiceCount)
 {
 	Soloud * cl = (Soloud *)aClassPtr;
@@ -708,6 +721,136 @@ void Soloud_mixSigned16(void * aClassPtr, short * aBuffer, unsigned int aSamples
 	cl->mixSigned16(aBuffer, aSamples);
 }
 
+void Ay_destroy(void * aClassPtr)
+{
+  delete (Ay *)aClassPtr;
+}
+
+void * Ay_create()
+{
+  return (void *)new Ay;
+}
+
+int Ay_load(void * aClassPtr, const char * aFilename)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	return cl->load(aFilename);
+}
+
+int Ay_loadMem(void * aClassPtr, const unsigned char * aMem, unsigned int aLength)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	return cl->loadMem(aMem, aLength, false, true);
+}
+
+int Ay_loadMemEx(void * aClassPtr, const unsigned char * aMem, unsigned int aLength, int aCopy, int aTakeOwnership)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	return cl->loadMem(aMem, aLength, !!aCopy, !!aTakeOwnership);
+}
+
+int Ay_loadFile(void * aClassPtr, File * aFile)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	return cl->loadFile(aFile);
+}
+
+void Ay_setVolume(void * aClassPtr, float aVolume)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->setVolume(aVolume);
+}
+
+void Ay_setLooping(void * aClassPtr, int aLoop)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->setLooping(!!aLoop);
+}
+
+void Ay_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
+void Ay_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dMinMaxDistance(aMinDistance, aMaxDistance);
+}
+
+void Ay_set3dAttenuation(void * aClassPtr, unsigned int aAttenuationModel, float aAttenuationRolloffFactor)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dAttenuation(aAttenuationModel, aAttenuationRolloffFactor);
+}
+
+void Ay_set3dDopplerFactor(void * aClassPtr, float aDopplerFactor)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dDopplerFactor(aDopplerFactor);
+}
+
+void Ay_set3dListenerRelative(void * aClassPtr, int aListenerRelative)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dListenerRelative(!!aListenerRelative);
+}
+
+void Ay_set3dDistanceDelay(void * aClassPtr, int aDistanceDelay)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dDistanceDelay(!!aDistanceDelay);
+}
+
+void Ay_set3dCollider(void * aClassPtr, AudioCollider * aCollider)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dCollider(aCollider);
+}
+
+void Ay_set3dColliderEx(void * aClassPtr, AudioCollider * aCollider, int aUserData)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dCollider(aCollider, aUserData);
+}
+
+void Ay_set3dAttenuator(void * aClassPtr, AudioAttenuator * aAttenuator)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->set3dAttenuator(aAttenuator);
+}
+
+void Ay_setInaudibleBehavior(void * aClassPtr, int aMustTick, int aKill)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->setInaudibleBehavior(!!aMustTick, !!aKill);
+}
+
+void Ay_setLoopPoint(void * aClassPtr, double aLoopPoint)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->setLoopPoint(aLoopPoint);
+}
+
+double Ay_getLoopPoint(void * aClassPtr)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	return cl->getLoopPoint();
+}
+
+void Ay_setFilter(void * aClassPtr, unsigned int aFilterId, Filter * aFilter)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->setFilter(aFilterId, aFilter);
+}
+
+void Ay_stop(void * aClassPtr)
+{
+	Ay * cl = (Ay *)aClassPtr;
+	cl->stop();
+}
+
 void BassboostFilter_destroy(void * aClassPtr)
 {
   delete (BassboostFilter *)aClassPtr;
@@ -930,6 +1073,12 @@ void Bus_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Bus_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Bus * cl = (Bus *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Bus_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Bus * cl = (Bus *)aClassPtr;
@@ -1342,6 +1491,12 @@ void Monotone_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Monotone_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Monotone * cl = (Monotone *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Monotone_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Monotone * cl = (Monotone *)aClassPtr;
@@ -1454,6 +1609,12 @@ void Noise_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Noise_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Noise * cl = (Noise *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Noise_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Noise * cl = (Noise *)aClassPtr;
@@ -1590,6 +1751,12 @@ void Queue_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Queue_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Queue * cl = (Queue *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Queue_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Queue * cl = (Queue *)aClassPtr;
@@ -1772,6 +1939,12 @@ void Sfxr_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Sfxr_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Sfxr * cl = (Sfxr *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Sfxr_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Sfxr * cl = (Sfxr *)aClassPtr;
@@ -1890,6 +2063,12 @@ void Speech_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Speech_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Speech * cl = (Speech *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Speech_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Speech * cl = (Speech *)aClassPtr;
@@ -1984,12 +2163,6 @@ int TedSid_load(void * aClassPtr, const char * aFilename)
 	return cl->load(aFilename);
 }
 
-int TedSid_loadToMem(void * aClassPtr, const char * aFilename)
-{
-	TedSid * cl = (TedSid *)aClassPtr;
-	return cl->loadToMem(aFilename);
-}
-
 int TedSid_loadMem(void * aClassPtr, const unsigned char * aMem, unsigned int aLength)
 {
 	TedSid * cl = (TedSid *)aClassPtr;
@@ -2002,12 +2175,6 @@ int TedSid_loadMemEx(void * aClassPtr, const unsigned char * aMem, unsigned int
 	return cl->loadMem(aMem, aLength, !!aCopy, !!aTakeOwnership);
 }
 
-int TedSid_loadFileToMem(void * aClassPtr, File * aFile)
-{
-	TedSid * cl = (TedSid *)aClassPtr;
-	return cl->loadFileToMem(aFile);
-}
-
 int TedSid_loadFile(void * aClassPtr, File * aFile)
 {
 	TedSid * cl = (TedSid *)aClassPtr;
@@ -2026,6 +2193,12 @@ void TedSid_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void TedSid_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	TedSid * cl = (TedSid *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void TedSid_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	TedSid * cl = (TedSid *)aClassPtr;
@@ -2150,6 +2323,12 @@ void Vic_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Vic_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Vic * cl = (Vic *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Vic_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Vic * cl = (Vic *)aClassPtr;
@@ -2256,6 +2435,12 @@ void Vizsn_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Vizsn_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Vizsn * cl = (Vizsn *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Vizsn_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Vizsn * cl = (Vizsn *)aClassPtr;
@@ -2422,6 +2607,12 @@ void Wav_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void Wav_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	Wav * cl = (Wav *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void Wav_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	Wav * cl = (Wav *)aClassPtr;
@@ -2610,6 +2801,12 @@ void WavStream_setLooping(void * aClassPtr, int aLoop)
 	cl->setLooping(!!aLoop);
 }
 
+void WavStream_setAutoStop(void * aClassPtr, int aAutoStop)
+{
+	WavStream * cl = (WavStream *)aClassPtr;
+	cl->setAutoStop(!!aAutoStop);
+}
+
 void WavStream_set3dMinMaxDistance(void * aClassPtr, float aMinDistance, float aMaxDistance)
 {
 	WavStream * cl = (WavStream *)aClassPtr;

+ 2 - 0
soloud.mod/soloud/src/core/soloud.cpp

@@ -1030,9 +1030,11 @@ namespace SoLoud
 
 	void panAndExpand(AudioSourceInstance *aVoice, float *aBuffer, unsigned int aSamplesToRead, unsigned int aBufferSize, float *aScratch, unsigned int aChannels)
 	{
+#ifdef SOLOUD_SSE_INTRINSICS
 		SOLOUD_ASSERT(((size_t)aBuffer & 0xf) == 0);
 		SOLOUD_ASSERT(((size_t)aScratch & 0xf) == 0);
 		SOLOUD_ASSERT(((size_t)aBufferSize & 0xf) == 0);
+#endif
 		float pan[MAX_CHANNELS]; // current speaker volume
 		float pand[MAX_CHANNELS]; // destination speaker volume
 		float pani[MAX_CHANNELS]; // speaker volume increment per sample

+ 5 - 1
soloud.mod/soloud/src/core/soloud_queue.cpp

@@ -144,6 +144,10 @@ namespace SoLoud
 
 	unsigned int Queue::getQueueCount()
 	{
+		if (!mSoloud)
+		{
+			return 0;
+		}
 		unsigned int count;
 		mSoloud->lockAudioMutex_internal();
 		count = mCount;
@@ -153,7 +157,7 @@ namespace SoLoud
 
 	bool Queue::isCurrentlyPlaying(AudioSource &aSound)
 	{
-		if (mCount == 0 || aSound.mAudioSourceID == 0)
+		if (mSoloud == 0 || mCount == 0 || aSound.mAudioSourceID == 0)
 			return false;
 		mSoloud->lockAudioMutex_internal();
 		bool res = mSource[mReadIndex]->mAudioSourceID == aSound.mAudioSourceID;

+ 3 - 1
soloud.mod/soloud/src/filter/soloud_bassboostfilter.cpp

@@ -38,11 +38,13 @@ namespace SoLoud
 
 	void BassboostFilterInstance::fftFilterChannel(float *aFFTBuffer, unsigned int /*aSamples*/, float /*aSamplerate*/, time /*aTime*/, unsigned int /*aChannel*/, unsigned int /*aChannels*/)
 	{
+		comp2MagPhase(aFFTBuffer, 2);
 		unsigned int i;
 		for (i = 0; i < 2; i++)
 		{
-			aFFTBuffer[i*2+1] *= mParam[BOOST];
+			aFFTBuffer[i*2] *= mParam[BOOST];
 		}
+		magPhase2Comp(aFFTBuffer, 2);
 	}
 
 	result BassboostFilter::setParams(float aBoost)

+ 136 - 0
soloud.mod/soloud/src/filter/soloud_eqfilter.cpp

@@ -0,0 +1,136 @@
+/*
+SoLoud audio engine
+Copyright (c) 2013-2020 Jari Komppa
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+   1. The origin of this software must not be misrepresented; you must not
+   claim that you wrote the original software. If you use this software
+   in a product, an acknowledgment in the product documentation would be
+   appreciated but is not required.
+
+   2. Altered source versions must be plainly marked as such, and must not be
+   misrepresented as being the original software.
+
+   3. This notice may not be removed or altered from any source
+   distribution.
+*/
+
+#include <string.h>
+#include "soloud.h"
+#include "soloud_eqfilter.h"
+
+
+namespace SoLoud
+{
+	EqFilterInstance::EqFilterInstance(EqFilter *aParent)
+	{
+		mParent = aParent;
+		initParams(9);
+		mParam[BAND1] = aParent->mVolume[BAND1 - BAND1];
+		mParam[BAND2] = aParent->mVolume[BAND2 - BAND1];
+		mParam[BAND3] = aParent->mVolume[BAND3 - BAND1];
+		mParam[BAND4] = aParent->mVolume[BAND4 - BAND1];
+		mParam[BAND5] = aParent->mVolume[BAND5 - BAND1];
+		mParam[BAND6] = aParent->mVolume[BAND6 - BAND1];
+		mParam[BAND7] = aParent->mVolume[BAND7 - BAND1];
+		mParam[BAND8] = aParent->mVolume[BAND8 - BAND1];
+	}
+
+	static float catmullrom(float t, float p0, float p1, float p2, float p3)
+	{
+		return 0.5f * (
+			(2 * p1) +
+			(-p0 + p2) * t +
+			(2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t +
+			(-p0 + 3 * p1 - 3 * p2 + p3) * t * t * t
+			);
+	}
+
+
+	void EqFilterInstance::fftFilterChannel(float *aFFTBuffer, unsigned int aSamples, float /*aSamplerate*/, time /*aTime*/, unsigned int /*aChannel*/, unsigned int /*aChannels*/)
+	{
+		comp2MagPhase(aFFTBuffer, aSamples / 2);
+		unsigned int p;		
+		for (p = 0; p < aSamples / 2; p++)
+		{
+			int i = (int)floor(sqrt(p / (float)(aSamples / 2)) * (aSamples / 2));
+			int p2 = (i / (aSamples / 16));
+			int p1 = p2 - 1;
+			int p0 = p1 - 1;
+			int p3 = p2 + 1;
+			if (p1 < 0) p1 = 0;
+			if (p0 < 0) p0 = 0;
+			if (p3 > 7) p3 = 7;
+			float v = (i % (aSamples / 16)) / (float)(aSamples / 16);
+			aFFTBuffer[p * 2] *= catmullrom(v, mParam[p0 + 1], mParam[p1 + 1], mParam[p2 + 1], mParam[p3 + 1]);
+		}
+		memset(aFFTBuffer + aSamples, 0, sizeof(float) * aSamples);
+		magPhase2Comp(aFFTBuffer, aSamples / 2);
+	}
+
+	result EqFilter::setParam(unsigned int aBand, float aVolume)
+	{
+		if (aBand < BAND1 || aBand > BAND8) return INVALID_PARAMETER;
+		if (aVolume < getParamMin(BAND1) || aVolume > getParamMax(BAND1))
+			return INVALID_PARAMETER;
+
+		mVolume[aBand - BAND1] = aVolume;
+		return SO_NO_ERROR;
+	}
+
+	int EqFilter::getParamCount()
+	{
+		return 9;
+	}
+
+	const char* EqFilter::getParamName(unsigned int aParamIndex)
+	{
+		switch (aParamIndex)
+		{
+		case BAND1: return "Band 1";
+		case BAND2: return "Band 2";
+		case BAND3: return "Band 3";
+		case BAND4: return "Band 4";
+		case BAND5: return "Band 5";
+		case BAND6: return "Band 6";
+		case BAND7: return "Band 7";
+		case BAND8: return "Band 8";
+		}
+		return "Wet";
+	}
+
+	unsigned int EqFilter::getParamType(unsigned int aParamIndex)
+	{
+		return FLOAT_PARAM;
+	}
+
+	float EqFilter::getParamMax(unsigned int aParamIndex)
+	{
+		if (aParamIndex == 0)
+			return 1;
+		return 4;
+	}
+
+	float EqFilter::getParamMin(unsigned int aParamIndex)
+	{
+		return 0;
+	}
+
+	EqFilter::EqFilter()
+	{
+		for (int i = 0; i < 8; i++)
+			mVolume[i] = 1;
+	}
+
+	FilterInstance *EqFilter::createInstance()
+	{
+		return new EqFilterInstance(this);
+	}
+}

+ 188 - 48
soloud.mod/soloud/src/filter/soloud_fftfilter.cpp

@@ -22,6 +22,19 @@ freely, subject to the following restrictions:
    distribution.
 */
 
+/*
+* Transformations largely based on smbPitchShift.cpp
+* COPYRIGHT 1999-2015 Stephan M. Bernsee <s.bernsee [AT] zynaptiq [DOT] com>
+* http://blogs.zynaptiq.com/bernsee
+* The Wide Open License (WOL)
+*
+* Permission to use, copy, modify, distribute and sell this software and its
+* documentation for any purpose is hereby granted without fee, provided that
+* the above copyright notice and this license appear in all source copies.
+* THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF
+* ANY KIND. See http://www.dspguru.com/wol.htm for more information.
+*/
+
 #include <string.h>
 #include "soloud.h"
 #include "soloud_fftfilter.h"
@@ -30,26 +43,38 @@ freely, subject to the following restrictions:
 
 namespace SoLoud
 {
-	FFTFilterInstance::FFTFilterInstance()
+
+#define STFT_WINDOW_SIZE 256 // must be power of two
+#define	STFT_WINDOW_HALF (STFT_WINDOW_SIZE / 2)
+#define STFT_WINDOW_TWICE (STFT_WINDOW_SIZE * 2)
+
+	void FFTFilterInstance::init()
 	{
-		mParent = 0;
 		mInputBuffer = 0;
 		mMixBuffer = 0;
 		mTemp = 0;
+		mLastPhase = 0;
+		mSumPhase = 0;
+		mParent = 0;
 		int i;
 		for (i = 0; i < MAX_CHANNELS; i++)
-			mOffset[i] = 0;
+		{
+			mInputOffset[i] = STFT_WINDOW_SIZE;
+			mMixOffset[i] = STFT_WINDOW_HALF;
+			mReadOffset[i] = 0;
+		}
+	}
+
+	// Needed for subclasses
+	FFTFilterInstance::FFTFilterInstance()
+	{
+		init();
 	}
 
 	FFTFilterInstance::FFTFilterInstance(FFTFilter *aParent)
 	{
+		init();
 		mParent = aParent;
-		mInputBuffer = 0;
-		mMixBuffer = 0;
-		mTemp = 0;
-		int i;
-		for (i = 0; i < MAX_CHANNELS; i++)
-			mOffset[i] = 0;
 		initParams(1);
 	}
 
@@ -60,76 +85,191 @@ namespace SoLoud
 			updateParams(aTime);
 		}
 
+		// Chicken-egg problem: we don't know channel count before this. 
+		// Could allocate max_channels but that would potentially waste a lot of memory.
 		if (mInputBuffer == 0)
 		{
-			mInputBuffer = new float[512 * aChannels];
-			mMixBuffer = new float[512 * aChannels];
-			mTemp = new float[256];
-			memset(mInputBuffer, 0x2f, sizeof(float) * 512 * aChannels);
-			memset(mMixBuffer, 0, sizeof(float) * 512 * aChannels);
+			mInputBuffer = new float[STFT_WINDOW_TWICE * aChannels];
+			mMixBuffer = new float[STFT_WINDOW_TWICE * aChannels];
+			mTemp = new float[STFT_WINDOW_SIZE];
+			mLastPhase = new float[STFT_WINDOW_SIZE * aChannels];
+			mSumPhase = new float[STFT_WINDOW_SIZE * aChannels];
+			memset(mInputBuffer, 0, sizeof(float) * STFT_WINDOW_TWICE * aChannels);
+			memset(mMixBuffer, 0, sizeof(float) * STFT_WINDOW_TWICE * aChannels);
+			memset(mLastPhase, 0, sizeof(float) * STFT_WINDOW_SIZE * aChannels);
+			memset(mSumPhase, 0, sizeof(float) * STFT_WINDOW_SIZE * aChannels);
 		}
 
-		float * b = mTemp;
-
 		int i;
 		unsigned int ofs = 0;
-		unsigned int chofs = 512 * aChannel;
-		unsigned int bofs = mOffset[aChannel];
-		
+		unsigned int chofs = STFT_WINDOW_TWICE * aChannel;
+		unsigned int inputofs = mInputOffset[aChannel];
+		unsigned int mixofs = mMixOffset[aChannel];
+		unsigned int readofs = mReadOffset[aChannel];
+
 		while (ofs < aSamples)
 		{
-			for (i = 0; i < 128; i++)
+			int samples = STFT_WINDOW_HALF - (inputofs & (STFT_WINDOW_HALF - 1));
+			if (ofs + samples > aSamples) samples = aSamples - ofs;
+			for (i = 0; i < samples; i++)
 			{
-				mInputBuffer[chofs + ((bofs + i + 128) & 511)] = aBuffer[ofs + i];
-				mMixBuffer[chofs + ((bofs + i + 128) & 511)] = 0;
+				mInputBuffer[chofs + ((inputofs + STFT_WINDOW_HALF) & (STFT_WINDOW_TWICE - 1))] = aBuffer[ofs + i];
+				mMixBuffer[chofs + ((inputofs + STFT_WINDOW_HALF) & (STFT_WINDOW_TWICE - 1))] = 0;
+				inputofs++;
 			}
-			
-			for (i = 0; i < 256; i++)
+						
+			if ((inputofs & (STFT_WINDOW_HALF - 1)) == 0)
 			{
-				b[i] = mInputBuffer[chofs + ((bofs + i) & 511)];
-			}
-			FFT::fft256(b);
+				for (i = 0; i < STFT_WINDOW_SIZE; i++)
+				{
+					mTemp[i] = mInputBuffer[chofs + ((inputofs + STFT_WINDOW_TWICE - STFT_WINDOW_HALF + i) & (STFT_WINDOW_TWICE - 1))];
+				}
+				
+				FFT::fft(mTemp, STFT_WINDOW_SIZE);
 
-			// do magic
-			fftFilterChannel(b, 128, aSamplerate, aTime, aChannel, aChannels);
-			
-			FFT::ifft256(b);
+				// do magic
+				fftFilterChannel(mTemp, STFT_WINDOW_HALF, aSamplerate, aTime, aChannel, aChannels);
 
-			for (i = 0; i < 256; i++)
-			{
-				mMixBuffer[chofs + ((bofs + i) & 511)] += b[i] * (128 - abs(128 - i)) * (1.0f / 128.0f);
-			}			
+				FFT::ifft(mTemp, STFT_WINDOW_SIZE);
+				
+				for (i = 0; i < STFT_WINDOW_SIZE; i++)
+				{
+					//mMixBuffer[chofs + (mixofs & (STFT_WINDOW_TWICE - 1))] = mTemp[i];
+					mMixBuffer[chofs + (mixofs & (STFT_WINDOW_TWICE - 1))] += mTemp[i] * ((float)STFT_WINDOW_HALF - abs(STFT_WINDOW_HALF - i)) * (1.0f / (float)STFT_WINDOW_HALF);
+					mixofs++;					
+				}
+				mixofs -= STFT_WINDOW_HALF;
+			}
 			
-			for (i = 0; i < 128; i++)
+			for (i = 0; i < samples; i++)
 			{
-				aBuffer[ofs + i] += (mMixBuffer[chofs + ((bofs + i) & 511)] - aBuffer[ofs + i]) * mParam[0];
+				aBuffer[ofs + i] += (mMixBuffer[chofs + (readofs & (STFT_WINDOW_TWICE - 1))] - aBuffer[ofs + i]) * mParam[0];
+				readofs++;
 			}
-			ofs += 128;
-			bofs += 128;
+			
+			ofs += samples;
 		}
-		mOffset[aChannel] = bofs;
+		mInputOffset[aChannel] = inputofs;
+		mReadOffset[aChannel] = readofs;
+		mMixOffset[aChannel] = mixofs;
 	}
 
-	void FFTFilterInstance::fftFilterChannel(float *aFFTBuffer, unsigned int aSamples, float /*aSamplerate*/, time /*aTime*/, unsigned int /*aChannel*/, unsigned int /*aChannels*/)
+	void FFTFilterInstance::comp2MagPhase(float* aFFTBuffer, unsigned int aSamples)
 	{
-		unsigned int i;
-		for (i = 4; i < aSamples; i++)
+		for (unsigned int i = 0; i < aSamples; i++)
 		{
-			aFFTBuffer[(i - 4) * 2] = aFFTBuffer[i * 2];
-			aFFTBuffer[(i - 4) * 2 + 1] = aFFTBuffer[i * 2 + 1];
+			float re = aFFTBuffer[i * 2];
+			float im = aFFTBuffer[i * 2 + 1];
+			aFFTBuffer[i * 2] = (float)sqrt(re * re + im * im) * 2;
+			aFFTBuffer[i * 2 + 1] = (float)atan2(im, re);
 		}
-		for (i = 0; i < 4; i++)
+	}
+
+	void FFTFilterInstance::magPhase2MagFreq(float* aFFTBuffer, unsigned int aSamples, float aSamplerate, unsigned int aChannel)
+	{
+		float stepsize = aSamples / aSamplerate;
+		float expct = (stepsize / aSamples) * 2.0f * (float)M_PI;
+		float freqPerBin = aSamplerate / aSamples;
+		for (unsigned int i = 0; i < aSamples; i++)
 		{
-			aFFTBuffer[(aSamples - 4) * 2 + i * 2] = 0;
-			aFFTBuffer[(aSamples - 4) * 2 + i * 2 + 1] = 0;
+			float mag = aFFTBuffer[i * 2];
+			float pha = aFFTBuffer[i * 2 + 1];
+
+			/* compute phase difference */
+			float freq = pha - mLastPhase[i + aChannel * STFT_WINDOW_SIZE];
+			mLastPhase[i + aChannel * STFT_WINDOW_SIZE] = pha;
+
+			/* subtract expected phase difference */
+			freq -= (float)i * expct;
+
+			/* map delta phase into +/- Pi interval */
+			int qpd = (int)floor(freq / M_PI);
+			if (qpd >= 0) qpd += qpd & 1;
+			else qpd -= qpd & 1;
+			freq -= (float)M_PI * (float)qpd;
+
+			/* get deviation from bin frequency from the +/- Pi interval */
+			freq = aSamples * freq / (2.0f * (float)M_PI);
+
+			/* compute the k-th partials' true frequency */
+			freq = (float)i * freqPerBin + freq * freqPerBin;
+
+			/* store magnitude and true frequency in analysis arrays */
+			aFFTBuffer[i * 2 + 1] = freq;
+		}
+	}
+
+	void FFTFilterInstance::magFreq2MagPhase(float* aFFTBuffer, unsigned int aSamples, float aSamplerate, unsigned int aChannel)
+	{
+		float stepsize = aSamples / aSamplerate;
+		float expct = (stepsize / aSamples) * 2.0f * (float)M_PI;
+		float freqPerBin = aSamplerate / aSamples;
+		for (unsigned int i = 0; i < aSamples; i++)
+		{
+			/* get magnitude and true frequency from synthesis arrays */
+			float mag = aFFTBuffer[i * 2];
+			float freq = aFFTBuffer[i * 2 + 1];
+
+			/* subtract bin mid frequency */
+			freq -= (float)i * freqPerBin;
+
+			/* get bin deviation from freq deviation */
+			freq /= freqPerBin;
+
+			/* take osamp into account */
+			freq = (freq / aSamples) * (float)M_PI * 2.0f;
+
+			/* add the overlap phase advance back in */
+			freq += (float)i * expct;
+
+			/* accumulate delta phase to get bin phase */
+			
+			mSumPhase[i + aChannel * STFT_WINDOW_SIZE] += freq;
+			aFFTBuffer[i * 2 + 1] = mSumPhase[i + aChannel * STFT_WINDOW_SIZE];
 		}
 	}
 
+	void FFTFilterInstance::magPhase2Comp(float* aFFTBuffer, unsigned int aSamples)
+	{
+		for (unsigned int i = 0; i < aSamples; i++)
+		{
+			float mag = aFFTBuffer[i * 2];
+			float pha = aFFTBuffer[i * 2 + 1];
+			aFFTBuffer[i * 2] = (float)cos(pha) * mag;
+			aFFTBuffer[i * 2 + 1] = (float)sin(pha) * mag;
+		}
+	}
+
+	void FFTFilterInstance::fftFilterChannel(float *aFFTBuffer, unsigned int aSamples, float aSamplerate, time /*aTime*/, unsigned int aChannel, unsigned int /*aChannels*/)
+	{
+		comp2MagPhase(aFFTBuffer, aSamples);
+		magPhase2MagFreq(aFFTBuffer, aSamples, aSamplerate, aChannel);
+		
+		float t[STFT_WINDOW_TWICE];
+		memcpy(t, aFFTBuffer, sizeof(float) * aSamples);
+		memset(aFFTBuffer, 0, sizeof(float) * aSamples * 2);
+
+		for (unsigned int i = 0; i < aSamples / 4; i++)
+		{
+			unsigned int d = i * 2;
+			if (d < aSamples / 4)
+			{
+				aFFTBuffer[d * 2] += t[i * 2];
+				aFFTBuffer[d * 2 + 1] = t[i * 2 + 1] * 2;
+			}
+		}
+
+		magFreq2MagPhase(aFFTBuffer, aSamples, aSamplerate, aChannel);
+		magPhase2Comp(aFFTBuffer, aSamples);
+	}
+
 	FFTFilterInstance::~FFTFilterInstance()
 	{
 		delete[] mTemp;
 		delete[] mInputBuffer;
 		delete[] mMixBuffer;
+		delete[] mLastPhase;
+		delete[] mSumPhase;
 	}
 
 	FFTFilter::FFTFilter()

+ 31 - 97
soloud.mod/soloud/src/tools/codegen/main.cpp

@@ -40,6 +40,7 @@ using namespace std;
 char *gIncludeFile[] =
 {
 	"../include/soloud.h",
+	"../include/soloud_ay.h",
 	"../include/soloud_audiosource.h",
 	"../include/soloud_bassboostfilter.h",
 	"../include/soloud_biquadresonantfilter.h",
@@ -736,46 +737,22 @@ void emit_cppend(FILE * f)
 void emit_func(FILE * f, int aClass, int aMethod)
 {
 	int i;
-	int initfunc = 0;
 	Class *c = gClass[aClass];
 	Method *m = c->mMethod[aMethod];
 
-	if (c->mName == "Soloud" && m->mFuncName.find("_init") != string::npos)
-	{
-		// Init function, needs "a bit" of special handling.
-		initfunc = 1;
-		string fn = OUTDIR "soloud_c_" + m->mFuncName.substr(0, m->mFuncName.find_first_of('_')) + ".cpp";
-		f = fopen(fn.c_str(), "w");
-		fileheader(f);
-		emit_cppstart(f);
-	}
-
-	if (initfunc)
-	{
-		fprintf(f, 
-			"%s %s_%s(", 
-			m->mRetType.c_str(), 
-			c->mName.c_str(), 
-			m->mFuncName.c_str());
-	}
-	else
-	{
-		fprintf(f, 
-			"%s %s_%s(void * aClassPtr", 
-			m->mRetType.c_str(), 
-			c->mName.c_str(), 
-			m->mFuncName.c_str());
-	}
+	fprintf(f, 
+		"%s %s_%s(void * aClassPtr", 
+		m->mRetType.c_str(), 
+		c->mName.c_str(), 
+		m->mFuncName.c_str());
 
 	int had_defaults = 0;
 	for (i = 0; i < (signed)m->mParmName.size(); i++)
 	{
 		if (m->mParmValue[i] == "")
 		{
-			if (!(i == 0 && initfunc))
-				fprintf(f, ", ");
 			fprintf(f, 
-				"%s %s",
+				", %s %s",
 				m->mParmType[i].c_str(),
 				m->mParmName[i].c_str());
 		}
@@ -785,27 +762,15 @@ void emit_func(FILE * f, int aClass, int aMethod)
 		}
 	}
 	
-	if (initfunc)
-	{
-		fprintf(f, 
-			")\n"
-			"{\n"
-			"\t%s%s(",
-			(m->mRetType == "void")?"":"return ",
-			m->mFuncName.c_str());
-	}
-	else
-	{
-		fprintf(f, 
-			")\n"
-			"{\n"
-			"\t%s * cl = (%s *)aClassPtr;\n"
-			"\t%scl->%s(",
-			c->mName.c_str(),
-			c->mName.c_str(),
-			(m->mRetType == "void")?"":"return ",
-			m->mFuncName.c_str());
-	}
+	fprintf(f, 
+		")\n"
+		"{\n"
+		"\t%s * cl = (%s *)aClassPtr;\n"
+		"\t%scl->%s(",
+		c->mName.c_str(),
+		c->mName.c_str(),
+		(m->mRetType == "void")?"":"return ",
+		m->mFuncName.c_str());
 
 	for (i = 0; i < (signed)m->mParmName.size(); i++)
 	{
@@ -828,53 +793,28 @@ void emit_func(FILE * f, int aClass, int aMethod)
 
 	if (had_defaults)
 	{
-		if (initfunc)
-		{
-			fprintf(f, 
-				"%s %s_%sEx(", 
-				m->mRetType.c_str(), 
-				c->mName.c_str(), 
-				m->mFuncName.c_str());
-		}
-		else
-		{
-			fprintf(f, 
-				"%s %s_%sEx(void * aClassPtr", 
-				m->mRetType.c_str(), 
-				c->mName.c_str(), 
-				m->mFuncName.c_str());
-		}
+		fprintf(f, 
+			"%s %s_%sEx(void * aClassPtr", 
+			m->mRetType.c_str(), 
+			c->mName.c_str(), 
+			m->mFuncName.c_str());
 		for (i =0; i < (signed)m->mParmName.size(); i++)
 		{
-			if (!(i == 0 && initfunc))
-				fprintf(f, ", ");
 			fprintf(f, 
-				"%s %s",
+				", %s %s",
 				m->mParmType[i].c_str(),
 				m->mParmName[i].c_str());
 		}
 		
-		if (initfunc)
-		{
-			fprintf(f, 
-				")\n"
-				"{\n"
-				"\t%s%s(",
-				(m->mRetType == "void")?"":"return ",
-				m->mFuncName.c_str());
-		}
-		else
-		{
-			fprintf(f, 
-				")\n"
-				"{\n"
-				"\t%s * cl = (%s *)aClassPtr;\n"
-				"\t%scl->%s(",
-				c->mName.c_str(),
-				c->mName.c_str(),
-				(m->mRetType == "void")?"":"return ",
-				m->mFuncName.c_str());
-		}
+		fprintf(f, 
+			")\n"
+			"{\n"
+			"\t%s * cl = (%s *)aClassPtr;\n"
+			"\t%scl->%s(",
+			c->mName.c_str(),
+			c->mName.c_str(),
+			(m->mRetType == "void")?"":"return ",
+			m->mFuncName.c_str());
 
 		for (i = 0; i < (signed)m->mParmName.size(); i++)
 		{
@@ -892,12 +832,6 @@ void emit_func(FILE * f, int aClass, int aMethod)
 			"}\n"
 			"\n");
 	}
-
-	if (initfunc)
-	{
-		emit_cppend(f);
-		fclose(f);
-	}
 }
 
 

+ 7 - 2
soloud.mod/soloud/src/tools/sanity/sanity.cpp

@@ -232,9 +232,14 @@ void testMisc()
 	int b = prg.rand();
 	CHECK(a == b);
 	a = 0;
+	int prev = prg.rand();
 	for (b = 0; b < 100; b++)
-		if (prg.rand() != prg.rand())
+	{
+		int next = prg.rand();
+		if (prev != next)
 			a = 1;
+		prev = next;
+	}
 	CHECK(a == 1);
 
 	soloud.deinit();
@@ -1552,7 +1557,7 @@ int main(int parc, char ** pars)
 	testFilters();
 	testCore();
 	testSpeech();
-//	testSpeedThings();
+	testSpeedThings();
 //	testMixer();
 	printf("\n%d tests, %d error(s) ", tests, errorcount);
 	if (!lastknownwrite && errorcount)

+ 0 - 100
soloud.mod/soloud/src/tools/tedsid2dump/cbmtune.cpp

@@ -1,100 +0,0 @@
-#include <string>
-#include <cstring>
-#include <cstdio>
-#include <iostream>
-#include "psid.h"
-#include "cbmtune.h"
-
-using namespace std;
-
-CbmTune::CbmTune(void) : bufferPtr(0), buffer(0)
-{
-	playAddress = 0;
-	file = 0;
-	flen = 0;
-	dataIndex = 0;
-	initAddress = 0;
-	loadAddress = 0;
-	dumpLength = 0;
-}
-
-CbmTune::~CbmTune(void)
-{
-	if (buffer) {
-		delete buffer;
-	}
-}
-
-int CbmTune::parse(char *fName)
-{
-	unsigned int i;
-	file = (FILE *) 0;
-
-	if (!fName)
-		return 2;
-
-	try {
-		file = fopen(fName, "rb");
-		fseek(file, 0, SEEK_END);
-		flen = ftell(file);
-		fseek(file, 0, SEEK_SET);
-		buffer = new unsigned char[flen + 1];
-		bufferPtr = buffer;
-		size_t r = fread(bufferPtr, 1, flen, file);
-	} catch(char *str) {
-		cerr << "Error opening " << fName << endl;
-		cerr << "    exception: " << str << endl;
-		return 1;
-	}
-	// check for magic
-	if (strncmp((const char *)(bufferPtr), "CBM8M", 5))
-		return 2;
-	//
-	dataIndex = CBM8M_HDR_STRINGS
-		 + (unsigned int) (strlen(getReleaseDate()) + strlen(getAuthor()) + strlen(getName()) + 3);
-	if (bufferPtr[CBM8M_HDR_FIELDS] & CBM8M_FIELD_SUBTUNES)
-		dataIndex += 1;
-	if (bufferPtr[CBM8M_HDR_FIELDS] & CBM8M_FIELD_DEFAULT)
-		dataIndex += 1;
-	unsigned int stunes = getNrOfSubtunes() + 1;
-	unsigned int subTuneFieldOffset = dataIndex;
-	dataIndex += stunes;
-	// subtune field enum
-	for (i = 0; i < stunes; i++) {
-		if (bufferPtr[subTuneFieldOffset + i] & 2) {
-			dataIndex += 1;
-		}
-	}
-	// read binary config
-	unsigned int config = bufferPtr[dataIndex];
-	dataIndex += 1;
-	// read binary header desc flag
-	unsigned int binField = bufferPtr[dataIndex];
-	dataIndex += 1;
-	// get and store binary dump length
-	dumpLength = *((unsigned short *) (bufferPtr + dataIndex));
-	dataIndex += 2;
-	// optional init address is provided
-	if (binField & 1) {
-		initAddress = *((unsigned short *) (bufferPtr + dataIndex));
-		dataIndex += 2;
-	} else {
-		initAddress = 0xe2ea;
-	}
-	// optional play address is provided
-	if (binField & 2) {
-		playAddress = *((unsigned short *) (bufferPtr + dataIndex));
-		dataIndex += 2;
-	} else {
-		playAddress = 0;
-	}
-	loadAddress = *((unsigned short *) (bufferPtr + dataIndex));
-	dataIndex += 2;
-	if (!playAddress) playAddress = 0; //loadAddress;
-	return 0;
-}
-
-void CbmTune::getPsidHeader(PsidHeader &ph)
-{
-
-}

+ 0 - 105
soloud.mod/soloud/src/tools/tedsid2dump/cbmtune.h

@@ -1,105 +0,0 @@
-#pragma once
-
-#include <cstdlib>
-#include <cstring>
-
-enum Cbm8header {
-	CBM8M_HDR_MAGIC = 0,
-	CBM8M_HDR_VERSION = 5,
-	CBM8M_HDR_PLATFORM,
-	CBM8M_HDR_HWFLAGS,
-	CBM8M_HDR_FIELDS,
-	CBM8M_HDR_STRINGS
-};
-
-enum Cbm8fields {
-	CBM8M_FIELD_SUBTUNES = 1 << 0,
-	CBM8M_FIELD_DEFAULT = 1 << 1,
-	CBM8M_FIELD_BINDUMPS = 1 << 2,
-	CBM8M_FIELD_COMMENT = 1 << 3
-};
-
-enum Cbm8binDumpHdr {
-	CBM8M_BIN_HW_FLAGS = 0,
-	CBM8M_BIN_FIELDS,
-	CBM8M_BIN_LENGTH,
-	CBM8M_BIN_INIT_ADDRESS,
-	CBM8M_BIN_INIT_ADDRESS_HI,
-	CBM8M_BIN_PLAY_ADDRESS,
-	CBM8M_BIN_PLAY_ADDRESS_HI,
-	CBM8M_BIN_AREA_UNUSED,
-	CBM8M_BIN_AREA_UNUSED_HI,
-	CBM8M_BIN_DATA
-};
-
-class CbmTune
-{
-public:
-	CbmTune(void);
-	virtual ~CbmTune(void);
-	int parse(char *fName);
-	void getPsidHeader(PsidHeader &ph);
-	virtual char *getName() {
-		return (char *) bufferPtr + CBM8M_HDR_STRINGS;
-	}
-	virtual char *getAuthor() {
-		return (char *) bufferPtr + CBM8M_HDR_STRINGS + strlen(getName()) + 1;
-	}
-	virtual char *getReleaseDate() {
-		return (char *) bufferPtr + CBM8M_HDR_STRINGS
-			+ strlen(getAuthor()) + strlen(getName()) + 2;
-	}
-	virtual unsigned int getNrOfSubtunes() {
-		if (bufferPtr[CBM8M_HDR_FIELDS] & CBM8M_FIELD_SUBTUNES)
-			return bufferPtr[CBM8M_HDR_STRINGS
-				+ strlen(getReleaseDate()) + strlen(getAuthor()) + strlen(getName()) + 3];
-		else
-			return 0;
-	}
-	virtual unsigned int getDefaultSubtune() {
-		if (bufferPtr[CBM8M_HDR_FIELDS] & CBM8M_FIELD_DEFAULT)
-			return bufferPtr[CBM8M_HDR_FIELDS
-				+ 1
-				+ strlen(getReleaseDate()) + strlen(getAuthor()) + strlen(getName()) + 3];
-		else
-			return 0;
-	}
-	//virtual char *getComment() {
-	//	if (bufferPtr[CBM8M_HDR_FIELDS] & CBM8M_FIELD_COMMENT)
-	//		return (char *) bufferPtr + CBM8M_HDR_FIELDS
-	//			+ getNrOfSubtunes()
-	//			+ strlen(getReleaseDate()) + strlen(getAuthor()) + strlen(getName()) + 3];
-	//	else
-	//		return "";
-	//}
-	virtual unsigned short getInitAddress(unsigned int nr) {
-		//return *((unsigned short *) (bufferPtr + dataIndex + 4));
-		return initAddress;
-	}
-	virtual unsigned short getPlayAddress(unsigned int nr) {
-		//return *((unsigned short *) (bufferPtr + dataIndex + 2));
-		return playAddress;
-	}
-	virtual unsigned short getDumpLength(unsigned int nr) {
-		return dumpLength;
-	}
-	virtual unsigned short getLoadAddress(unsigned int nr) {
-		//return *((unsigned short *) (bufferPtr + dataIndex + 4));
-		return loadAddress;
-	}
-	virtual unsigned char *getBinaryData(unsigned int nr) {
-		//return (bufferPtr + dataIndex + 6);
-		return (bufferPtr + dataIndex );
-	}
-
-protected:
-	FILE *file;
-	size_t flen;
-	unsigned char *buffer;
-	unsigned char *bufferPtr;
-	unsigned int dataIndex;
-	unsigned int initAddress;
-	unsigned int playAddress;
-	unsigned int loadAddress;
-	unsigned int dumpLength;
-};

+ 0 - 4508
soloud.mod/soloud/src/tools/tedsid2dump/cpu.cpp

@@ -1,4508 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <memory.h>
-#include "cpu.h"
-#include "tedmem.h"
-
-//#define CPU_STATS 
-#ifdef CPU_STATS 
-#include "Cpu7501asm.h"
-#endif
-
-// this one is much quicker
-#define push(VALUE) (stack[SP--]=(VALUE))
-#define pull() (stack[SP])
-
-bool CPU::bp_active = false;
-bool CPU::bp_reached = false;
-const unsigned int CPU::nr_of_bps = 11;
-static unsigned int stats[255];
-
-CPU::CPU( MemoryHandler *memhandler, unsigned char *irqreg, unsigned char *cpustack ) : mem(memhandler), irq_register(irqreg), stack(cpustack)
-{
-	irq_sequence = 0;
-	IRQcount = 0;
-	cpu_jammed = false;
-	PC = 0xFFFF;
-	for( int i=0; i<nr_of_bps; i++) {
-		bp[i].address = 0x10000;
-		bp[i].enabled = false;
-		bp[i].slot_free = true;
-	}
-	nr_activebps = 0;
-	currins = 0;
-	nextins = 0;
-	farins = 0;
-	SP = 0;
-	ST = 0;
-	AC = 0;
-	X = 0;
-	Y = 0;
-	cycle = 0;
-	ptr = 0;
-	memset( stats, 0, sizeof(stats));
-}
-
-unsigned int CPU::getcins()
-{ 
-	// currins is set to 0x00 when in IRQ so we have to re-fetch the opcode
-	// this is only used for debugging & co.
-	return (currins==0) ?  mem->Read((PC-1)&0xFFFF) : currins&0xFF;
-};
-
-bool CPU::saveshot(void *CPUdump)
-{
-	FILE *img = (FILE *) CPUdump;
-
-	fwrite(&currins,sizeof(currins),1,img);
-	fwrite(&nextins,sizeof(nextins),1,img);
-	fwrite(&ptr,sizeof(ptr),1,img);
-	fwrite(&PC,sizeof(PC),1,img);
-	fwrite(&cycle,sizeof(cycle),1,img);
-	fwrite(&SP,sizeof(SP),1,img);
-  	fwrite(&ST,sizeof(ST),1,img);
-   	fwrite(&AC,sizeof(AC),1,img);
-   	fwrite(&X,sizeof(X),1,img);
-   	fwrite(&Y,sizeof(Y),1,img);
-	return true;
-}
-
-bool CPU::loadshot(void *CPUdump)
-{
-	FILE *img = (FILE *) CPUdump;
-
-	fread(&currins,sizeof(currins),1,img);
-	fread(&nextins,sizeof(nextins),1,img);
-	fread(&ptr,sizeof(ptr),1,img);
-   	fread(&PC,sizeof(PC),1,img);
-	PC &= 0xFFFF;
-	fread(&cycle,sizeof(cycle),1,img);
-   	fread(&SP,sizeof(SP),1,img);
-  	fread(&ST,sizeof(ST),1,img);
-   	fread(&AC,sizeof(AC),1,img);
-   	fread(&X,sizeof(X),1,img);
-   	fread(&Y,sizeof(Y),1,img);
-	return true;
-}
-
-// reset keeps all except for PC
-void CPU::Reset()
-{
-	ST=0x24;
-	softreset();
-	IRQcount = cycle = 0;
-	irq_sequence = 0;
-}
-
-void CPU::softreset()
-{
-	// clear the BRK flag
-	ST&=0xEF;
-	setPC(mem->Read(0xFFFC)|(mem->Read(0xFFFD)<<8));
-}
-
-void CPU::setPC(unsigned int addr)
-{
-	PC=addr;
-	cycle=0;
-}
-
-inline void CPU::DoCompare(unsigned char reg, unsigned char value)
-{
-	ST = (ST & 0xFE) | ( value<=reg);
-	SETFLAGS_ZN( reg - value);
-}
-
-void CPU::process()
-{
-	if (IRQcount || ((*irq_register)&0x80 ) && !irq_sequence && !(ST&0x04))
-		IRQcount++;
-
-	if (!cycle) {		// in the first cycle the CPU fetches the opcode
-		if (IRQcount>=3 && currins != 0x58) {
-			IRQcount = 0;
-			if (!(ST&0x04) || currins == 0x78) { //  
-				irq_sequence = 0x10; // this is 0x10 to match the B flag later
-				currins = 0x00;	 // we could use BRK for the IRQ routine!
-				cycle = 1;
-				return;
-			}
-		}
-		currins=mem->Read(PC);				// fetch opcode
-		nextins=mem->Read(PC+1);			// prefetch next opcode/operand
-		cycle = 1;							// increment the CPU cycle counter
-#ifdef CPU_STATS
-		stats[currins]++;
-		static FILE *f = fopen("disasm.txt", "a");
-		//unsigned char t = mem->Read(PC+1);
-		if (f)
-		{
-			fprintf(f, ". %04X %s", PC, ins[currins].name);
-			int i = 1;
-			while (i < typlen[ins[currins].type]) {
-				fprintf(f, " %02X", mem->Read(PC+i++));
-			}
-			fprintf(f, "\n");
-			fflush(f);
-		}
-#endif
-		PC=(PC+1)&0xFFFF;
-	}
-	else 
-
-	switch (currins){
-		case 0xea : // NOP
-			cycle=0;
-			break;
-
-		case 0x18 : // CLC
-			ST&=0xFE;
-			cycle=0;
-			break;
-
-		case 0x38 : // SEC
-			ST|=0x01;
-			cycle=0;
-			break;
-
-		case 0x58 : // CLI
-			ST&=0xFB;
-			cycle=0;
-			break;
-
-		case 0x78 : // SEI
-			ST|=0x04;
-			cycle=0;
-			// actually, IRQ can still occur right after the SEI instruction
-			// some programs (like Castle Master) rely on it.
-			// Therefore startIRQ is not set to 0 here.
-			//IRQcount = 0;
-			break; 
-
-		case 0xb8 : // CLV
-			// This has to be more generic because the drive byte ready
-			// line is connected to the V flag pin on the disk drive CPU
-			ClearVFlag();
-			cycle=0;
-			break;
-
-		case 0xD8 : // CLD
-			ST&=0xF7;
-			cycle=0;
-			break;
-
-		case 0xF8 : // SED
-			ST|=0x08;
-			cycle=0;
-			break;
-
-		// branch functions (conditional jumps )
-
-		case 0x10 : // BPL
-			switch(cycle++) {
-				case 1: PC++;
-						if ((ST&0x80))
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x30 : // BMI
-			switch(cycle++) {
-				case 1: PC++;
-						if (!(ST&0x80))
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x50 : // BVC
-			switch(cycle++) {
-				// This has to be more generic because the drive byte ready
-				// line is connected to the V flag pin on the disk drive CPU
-				case 1: PC++;
-						if (CheckVFlag())
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x70 : // BVS
-			switch(cycle++) {
-				// This has to be more generic because the drive byte ready
-				// line is connected to the V flag pin on the disk drive CPU
-				case 1: PC++;
-						if (!(CheckVFlag()))
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x90 : // BCC
-			switch(cycle++) {
-				case 1: PC++;
-						if (ST&0x01)
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB0 : // BCS
-			switch(cycle++) {
-				case 1: PC++;
-						if (!(ST&0x01))
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD0 : // BNE
-			switch(cycle++) {
-				case 1: PC++;
-						if (ST&0x02)
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF0 : // BEQ
-			switch(cycle++) {
-				case 1: PC++;
-						if (!(ST&0x02))
-							cycle=0;
-						break;
-				case 2: if (!(((PC&0xFF)+(signed char) nextins)&0xFF00)) {
-							PC+=(signed char) nextins;
-							cycle=0;
-						};
-						break;
-				case 3: PC+=(signed char) nextins;
-						cycle=0;
-						break;
-			};
-			break;
-
-		// manipulating index registers
-
-		case 0x88 : // DEY
-			--Y;
-			SETFLAGS_ZN(Y);
-			cycle=0;
-			break;
-
-		case 0xC8 : // INY
-			++Y;
-			SETFLAGS_ZN(Y);
-			cycle=0;
-			break;
-
-		case 0xCA : // DEX
-			--X;
-			SETFLAGS_ZN(X);
-			cycle=0;
-			break;
-
-		case 0xE8 : // INX
-			++X;
-			SETFLAGS_ZN(X);
-			cycle=0;
-			break;
-
-		case 0x00 : // BRK
-			switch (cycle++) {
-				case 1: if (!irq_sequence)
-							PC++;
-						break;
-				case 2: push(PC>>8);
-						break;
-				case 3: push(PC&0xFF);
-						break;
-				case 4: // BRK pushes the status register to the stack with the B bit set
-						// IRQ can still occur on BRK before saving the flags
-						// if (!(ST&0x04)) irq_sequence = 0x10;
-						push((ST|0x30)&~irq_sequence);
-						// and then masks the interrupt bit
-						ST|=0x04;
-						break;
-				case 5: break;
-				case 6: PC=mem->Read(0xFFFE)|(mem->Read(0xFFFF)<<8);
-						irq_sequence = 0x0;
-						cycle=0;
-						break;
-			};
-			break;
-
-		/*case 0x00 : // BRK
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: push(PC>>8);
-						break;
-				case 3: push(PC&0xFF);
-						break;
-				case 4: // BRK pushes the status register to the stack with the B bit set
-						// IRQ can still occur on BRK before saving the flags
-						// if (!(ST&0x04)) irq_sequence = 0x10;
-						push((ST|0x30));
-						// and then masks the interrupt bit
-						ST|=0x04;
-						break;
-				case 5: break;
-				case 6: PC=mem->Read(0xFFFE)|(mem->Read(0xFFFF)<<8);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x100 : // IRQ - pseudo opcode
-			switch (cycle++) {
-				case 1: break;
-				case 2: push(PC>>8);
-						break;
-				case 3: push(PC&0xFF);
-						break;
-				case 4: push((ST|0x20)&0xEF);
-						// and then masks the interrupt bit
-						ST|=0x04;
-						break;
-				case 5: break;
-				case 6: PC=mem->Read(0xFFFE)|(mem->Read(0xFFFF)<<8);
-						//irq_sequence = 0x0;
-						cycle=0;
-						break;
-			};
-			break;*/
-
-		case 0x40 : // RTI
-			switch (cycle++) {
-				case 1: //PC++;
-						break;
-				case 2: //PC++;
-						SP++;
-						break;
-				case 3: // the B flag is already always cleared
-						ST=pull();//&0xEF;
-						SP++;
-						break;
-				case 4: PC=pull();
-						SP++;
-						break;
-				case 5: PC|=pull()<<8;
-						//ST&=0xFB;
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x60 : // RTS
-			switch (cycle++) {
-				case 1: //PC++;
-						break;
-				case 2: //PC++;
-						SP++;
-						break;
-				case 3: PC=pull();
-						SP++;
-						break;
-				case 4: PC|=pull()<<8;
-						break;
-				case 5: PC++;
-						cycle=0;
-						break;
-			};
-			break;
-
-		// stack operations
-
-		case 0x08 : // PHP
-			if (cycle++==2) {
-				// the PHP always pushes the status with the B flag set... 
-				//ST = (ST&0xBF)|CheckVFlag();
-				push(ST|0x30);
-				cycle=0;
-			};
-			break;
-
-		case 0x28 : // PLP
-			if (cycle++==3) {
-				SP++;
-				ST=(pull() /*&0xEF*/);//|(0x20);
-				cycle=0;
-			};
-			break;
-
-		case 0x48 : // PHA
-			if (cycle++==2) {
-				push(AC);
-				cycle=0;
-			};
-			break;
-
-		case 0x68 : // PLA
-			if (cycle++==3) {
-				SP++;
-				AC=pull();
-				SETFLAGS_ZN(AC);
-				cycle=0;
-			};
-			break;
-
-		// inter-register operations
-
-		case 0x8A : // TXA
-			AC=X;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0xAA : // TAX
-			X=AC;
-			SETFLAGS_ZN(X);
-			cycle=0;
-			break;
-
-		case 0x98 : // TYA
-			AC=Y;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0xA8 : // TAY
-			Y=AC;
-			SETFLAGS_ZN(Y);
-			cycle=0;
-			break;
-
-		case 0x9A : // TXS
-			SP=X;
-			cycle=0;
-			break;
-
-		case 0xBA : // TSX
-			X=SP;
-			SETFLAGS_ZN(X);
-			cycle=0;
-			break;
-
-		// subroutine & unconditional jump
-
-		case 0x20 : // JSR
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: // unknown
-					break;
-				case 3: push(PC>>8);
-					break;
-				case 4: push(PC&0xFF);
-					break;
-				case 5: PC=ptr=nextins|(mem->Read(PC)<<8);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x4C : // JMP $0000
-			if (cycle++==2) {
-				PC=nextins|(mem->Read(PC+1)<<8);
-				cycle=0;
-			};
-			break;
-
-		case 0x6C : // JMP ($0000)
-			if (cycle++==4) {
-				ptr=nextins|(mem->Read(PC+1)<<8);
-				// instruction does not handle page crossing
-				PC=mem->Read(ptr)|(mem->Read( ptr&0xFF00 | (ptr+1)&0xFF) << 8);
-				cycle=0;
-			};
-			break;
-
- 		// Accumulator operations with immediate addressing
-
-		case 0x09 : // ORA #$00
-			PC++;
-			AC|=nextins;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x29 : // AND #$00
-			PC++;
-			AC&=nextins;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x49 : // EOR #$00
-			PC++;
-			AC^=nextins;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x69 : // ADC #$00
-			PC++;
-			ADC(nextins);
-			cycle=0;
-			break;
-
-		case 0xC9 : // CMP #$00
-			PC++;
-			DoCompare(AC,nextins);
-			cycle=0;
-			break;
-
-		case 0xE9 : // SBC #$00
-			PC++;
-			SBC(nextins);
-			cycle=0;
-			break;
-
-		// rotations
-
-		case 0x0A : // ASL
-			AC&0x80 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-			AC<<=1;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x2A : // ROL
-			nextins=(AC<<1)|(ST&0x01);
-			AC&0x80 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-			AC=nextins;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x4A : // LSR
-			AC&0x01 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-			AC=AC>>1;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x6A : // ROR
-			nextins=(AC>>1)|((ST&0x01)<<7);
-			AC&0x01 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-			AC=nextins;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		// loads
-
-		case 0xA0 : // LDY
-			PC++;
-			Y=nextins;
-			SETFLAGS_ZN(Y);
-			cycle=0;
-			break;
-
-		case 0xA2 : // LDX
-			PC++;
-			X=nextins;
-			SETFLAGS_ZN(X);
-			cycle=0;
-			break;
-
-		case 0xA9 : // LDA
-			PC++;
-			AC=nextins;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		// comparisons with immediate addressing
-
-		case 0xC0 : // CPY
-			PC++;
-			DoCompare(Y,nextins);
-			cycle=0;
-			break;
-
-		case 0xE0 : // CPX
-			PC++;
-			DoCompare(X,nextins);
-			cycle=0;
-			break;
-
-		// BIT tests with accumulator
-
-		case 0x24 : // BIT $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins=mem->Read(nextins);
-						ST = (ST&0x3D) 
-						| (nextins&0xC0) 
-						| (((AC&nextins)==0)<<1);
-						/*if (!(ST&0x40))
-							ClearVFlag();*/
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x2C : // BIT $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						ST = (ST&0x3D) 
-						| (nextins&0xC0) 
-						| (((AC&nextins)==0)<<1);
-						/*if (!(ST&0x40))
-							ClearVFlag();*/
-						cycle=0;
-						break;
-			};
-			break;
-
-		// Read instructions with absolute addressing
-
-		case 0x0D : // ORA $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: AC|=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x2D : // AND $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: AC&=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-			};
-			break;
-
-		case 0x4D : // EOR $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: AC^=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x6D : // ADC $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3:	ADC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x99 : // STA $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3:	break;
-				case 4: mem->Write(ptr+Y,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xAC : // LDY $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: Y=mem->Read(ptr);
-						SETFLAGS_ZN(Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xCC : // CPY $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: DoCompare(Y,mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xEC : // CPX $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: DoCompare(X,mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xAD : // LDA $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: AC=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xCD : // CMP $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: DoCompare(AC,mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xED : // SBC $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: SBC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x0E : // ASL $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						break;
-				case 4:	mem->Write(ptr,nextins);
-						(nextins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						nextins<<=1;
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x1E : // ASL $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: ptr+=X;
-						break;
-				case 4:	nextins=mem->Read(ptr);
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						(nextins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						nextins<<=1;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x2E : // ROL $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: farins=mem->Read(ptr);
-						nextins=(farins<<1)|(ST&0x01);
-						break;
-				case 4:	mem->Write(ptr,farins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x3E : // ROL $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: ptr+=X;
-						break;
-				case 4:	farins=mem->Read(ptr);
-						nextins=(farins<<1)|(ST&0x01);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5:	mem->Write(ptr,farins);
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x4E : // LSR $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						(nextins&0x01) ? ST|=0x01 : ST&=0xFE;; // the Carry flag
-						break;
-				case 4:	mem->Write(ptr,nextins);
-						nextins=nextins>>1;
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x5E : // LSR $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: ptr+=X;
-						break;
-				case 4:	nextins=mem->Read(ptr);
-						(nextins&0x01) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						nextins>>=1;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x6E : // ROR $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: farins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,farins);
-						nextins=(farins>>1)|((ST&0x01)<<7);
-						(farins&0x01) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x7E : // ROR $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: ptr+=X;
-						break;
-				case 4: farins=mem->Read(ptr);
-						nextins=(farins>>1)|((ST&0x01)<<7);
-						(farins&0x01) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5: mem->Write(ptr,farins);
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xAE : // LDX $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: X=mem->Read(ptr);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xCE : // DEC $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						--nextins;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xDE : // DEC $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: ptr+=X;
-						break;
-				case 4: nextins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,nextins);
-						--nextins;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xEE : // INC $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						++nextins;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xFE : // INC $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: ptr+=X;
-						break;
-				case 4: nextins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,nextins);
-						++nextins;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		// zero page indexed with X or Y
-
-		case 0x94 : // STY $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: mem->Write(nextins,Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x95 : // STA $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: mem->Write(nextins,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x96 : // STX $00,Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=Y;
-						break;
-				case 3: mem->Write(nextins,X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB4 : // LDY $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: Y=mem->Read(nextins);
-						SETFLAGS_ZN(Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB5 : // LDA $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: AC=mem->Read(nextins);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB6 : // LDX $00,Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=Y;
-						break;
-				case 3: X=mem->Read(nextins);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD5 : // CMP $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: DoCompare(AC,mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x15 : // ORA $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: AC|=(mem->Read(nextins));
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x35 : // AND $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: AC&=(mem->Read(nextins));
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x16 : // ASL $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: farins=mem->Read(nextins);
-						break;
-				case 4: mem->Write(nextins,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x36 : // ROL $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						ptr=nextins;
-						break;
-				case 3: farins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,farins);
-						nextins=(farins<<1)|((ST&0x01));
-						farins&0x80 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		// absolute addressing indexed with X or Y
-
-		case 0x19 : // ORA $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							AC|=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						}
-						break;
-				case 4: AC|=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x39 : // AND $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							AC&=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						}
-						break;
-				case 4: AC&=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x59 : // EOR $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							AC^=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						}
-						break;
-				case 4: AC^=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x79 : // ADC $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							ADC(mem->Read(ptr));
-							cycle=0;
-						}
-						break;
-				case 4: ADC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB9 : // LDA $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							AC=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						}
-						break;
-				case 4: AC=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x1D : // ORA $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							AC|=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						};
-						break;
-				case 4: AC|=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x3D : // AND $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							AC&=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						};
-						break;
-				case 4: AC&=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x5D : // EOR $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							AC^=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						};
-						break;
-				case 4: AC^=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x7D : // ADC $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							ADC(mem->Read(ptr));
-							cycle=0;
-						};
-						break;
-				case 4: ADC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xBC : // LDY $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							Y=mem->Read(ptr);
-							SETFLAGS_ZN(Y);
-							cycle=0;
-						};
-						break;
-				case 4: Y=mem->Read(ptr);
-						SETFLAGS_ZN(Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xBD : // LDA $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							AC=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						};
-						break;
-				case 4: AC=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xBE : // LDX $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							X=mem->Read(ptr);
-							SETFLAGS_ZN(X);
-							cycle=0;
-						};
-						break;
-				case 4: X=mem->Read(ptr);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD9 : // CMP $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: if (nextins+Y<0x100){
-							DoCompare(AC,mem->Read(ptr+Y));
-							cycle=0;
-						};
-						break;
-				case 4: DoCompare(AC,mem->Read(ptr+Y));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF9 : // SBC $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100){
-							SBC(mem->Read(ptr));
-							cycle=0;
-						};
-						break;
-				case 4: SBC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xDD : // CMP $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							DoCompare(AC,mem->Read(ptr+X));
-							cycle=0;
-						};
-						break;
-				case 4: DoCompare(AC,mem->Read(ptr+X));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xFD : // SBC $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: if (nextins+X<0x100) {
-							SBC(mem->Read(ptr));
-							cycle=0;
-						};
-						break;
-				case 4: SBC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		// zero page operations
-
-		case 0xA4 : // LDY $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: Y=mem->Read(nextins);
-						SETFLAGS_ZN(Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xC4 : // CPY $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: DoCompare(Y,mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x05 : // ORA $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2:	AC|=mem->Read(nextins);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x55 : // EOR $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: AC^=mem->Read(nextins);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x65 : // ADC $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ADC(mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x75 : // ADC $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ADC(mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xA5 : // LDA $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: AC=mem->Read(nextins);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xC5 : // CMP $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: DoCompare(AC,mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE5 : // SBC $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: SBC(mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF5 : // SBC $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: SBC(mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x06 : // ASL $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: farins=mem->Read(nextins);
-						farins&0x80 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 3: mem->Write(nextins,farins);
-						farins<<=1;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x26 : // ROL $00
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins;
-						break;
-				case 2: farins=mem->Read(ptr);
-						nextins=(farins<<1)|(ST&0x01);
-						break;
-				case 3: mem->Write(ptr,farins);
-						farins&0x80 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 4: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x25 : // AND $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: AC&=mem->Read(nextins);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x45 : // EOR $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: AC^=mem->Read(nextins);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x46 : // LSR $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: farins=mem->Read(nextins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 3: mem->Write(nextins,farins);
-						farins>>=1;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x56 : // LSR $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: farins=mem->Read(nextins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 4: mem->Write(nextins,farins);
-						farins>>=1;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x66 : // ROR $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=nextins;
-						farins=mem->Read(ptr);
-						nextins=(farins>>1)|((ST&0x01)<<7);
-						break;
-				case 3: mem->Write(ptr,farins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 4: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x76 : // ROR $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						ptr=nextins;
-						break;
-				case 3: farins=mem->Read(ptr);
-						nextins=(farins>>1)|((ST&0x01)<<7);
-						break;
-				case 4: mem->Write(ptr,farins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xA6 : // LDX $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: X=mem->Read(nextins);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xC6 : // DEC $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: farins=mem->Read(nextins);
-						break;
-				case 3: mem->Write(nextins,farins);
-						--farins;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE4 : // CPX $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: DoCompare(X,mem->Read(nextins));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE6 : // INC $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: farins=mem->Read(nextins);
-						break;
-				case 3: mem->Write(nextins,farins);
-						++farins;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD6 : // DEC $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: farins=mem->Read(nextins);
-						break;
-				case 4: mem->Write(nextins,farins);
-						--farins;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF6 : // INC $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: farins=mem->Read(nextins);
-						break;
-				case 4: mem->Write(nextins,farins);
-						++farins;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		// indexed indirect
-
-		case 0x01 : // ORA ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: AC|=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x21 : // AND ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: AC&=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x41 : // EOR ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: AC^=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x61 : // ADC ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: ADC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x81 : // STA ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: mem->Write(ptr,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xA1 : // LDA ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: AC=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xC1 : // CMP ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: DoCompare(AC,mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE1 : // SBC ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins++);
-						break;
-				case 4: ptr|=(mem->Read(nextins)<<8);
-						break;
-				case 5: SBC(mem->Read(ptr));
-						cycle=0;
-						break;
-			};
-			break;
-
-		// indirect indexed
-
-		case 0x11 : // ORA ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							AC|=mem->Read(ptr+Y);
-							cycle=0;
-							SETFLAGS_ZN(AC);
-						}
-						break;
-				case 5: AC|=mem->Read(ptr+Y);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x31 : // AND ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							AC&=mem->Read(ptr+Y);
-							cycle=0;
-							SETFLAGS_ZN(AC);
-						}
-						break;
-				case 5: AC&=mem->Read(ptr+Y);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x51 : // EOR ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							AC^=mem->Read(ptr+Y);
-							cycle=0;
-							SETFLAGS_ZN(AC);
-						}
-						break;
-				case 5: AC^=mem->Read(ptr+Y);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x71 : // ADC ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							ADC(mem->Read(ptr+Y));
-							cycle=0;
-						};
-						break;
-				case 5: ADC(mem->Read(ptr+Y));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x91 : // STA ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: break;
-				case 5: mem->Write(ptr+Y,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB1 : // LDA ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							AC=mem->Read(ptr+Y);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						}
-						break;
-				case 5: AC=mem->Read(ptr+Y);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD1 : // CMP ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							DoCompare(AC,mem->Read(ptr+Y));
-							cycle=0;
-						}
-						break;
-				case 5: DoCompare(AC,mem->Read(ptr+Y));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF1 : // SBC ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							SBC(mem->Read(ptr+Y));
-							cycle=0;
-						};
-						break;
-				case 5: SBC(mem->Read(ptr+Y));
-						cycle=0;
-						break;
-			};
-			break;
-
-		// storage functions
-
-		case 0x84 : // STY $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: mem->Write(nextins,Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x85 : // STA $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: mem->Write(nextins,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x86 : // STX $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: mem->Write(nextins,X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x8C : // STY $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: mem->Write(ptr,Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x8D : // STA $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: mem->Write(ptr,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x8E : // STX $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: mem->Write(ptr,X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x9D : // STA $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: break;
-				case 4: mem->Write(ptr+X,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		//----------------
-		// illegal opcodes
-		//----------------
-
-		case 0x03 : // ASO/SLO ($00,X) : A <- (M << 1) \/ A
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=(mem->Read(nextins+1)<<8);
-						break;
-				case 5: farins=mem->Read(ptr);
-						break;
-				case 6: mem->Write(ptr,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						break;
-				case 7: mem->Write(ptr,farins);
-						AC|=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x07 : // ASO/SLO $00		: A <- (M << 1) \/ A
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins;
-						break;
-				case 2: nextins=mem->Read(ptr);
-						break;
-				case 3: mem->Write(ptr,nextins);
-						(nextins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						nextins<<=1;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						AC|=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x0B : // ANN/ANC #$00
-		case 0x2B : // ANN/ANC #$00
-			PC++;
-			AC&=nextins;
-			(AC&0x80) ? ST|=0x01 : ST&=0xFE;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x0C : // NOP $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: cycle=0;
-						break;
-			};
-			break;
-
-		case 0x0F : // ASO/SLO $0000		: A <- (M << 1) \/ A
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						(nextins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						nextins<<=1;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						AC|=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x13 : // ASO/SLO ($00),Y		: A <- (M << 1) \/ A
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=(mem->Read(nextins+1)<<8);
-						break;
-				case 4: break;
-				case 5: farins=mem->Read(ptr+Y);
-						break;
-				case 6: mem->Write(ptr+Y,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						break;
-				case 7: mem->Write(ptr+Y,farins);
-						AC|=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x14 : // NOP $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: break;
-				case 3: cycle=0;
-						break;
-			};
-			break;
-
-		case 0x17 : // ASO/SLO $00,X		: A <- (M << 1) \/ A
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=(nextins+X)&0xFF;
-						break;
-				case 3: farins = mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						break;
-				case 5: mem->Write(ptr,farins);
-						AC|=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x80 : // NOP #$00
-		case 0x82 : // NOP #$00
-		case 0x89 : // NOP #$00
-		case 0xC2 : // NOP #$00
-		case 0xE2 : // NOP #$00
-			PC++;
-		case 0x1A : // NOP
-		case 0x3A : // NOP
-		case 0x5A : // NOP
-		case 0x7A : // NOP
-		case 0xDA : // NOP
-		case 0xFA : // NOP
-			cycle=0;
-			break;
-
-		case 0x1B : // ASO/SLO $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: break;
-				case 4:	farins=mem->Read(ptr);
-						break;
-				case 5:	mem->Write(ptr,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						AC|=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x1C : // NOP $0000,X
-		case 0x3C : // NOP $0000,X
-		case 0x5C : // NOP $0000,X
-		case 0x7C : // NOP $0000,X
-		case 0xDC : // NOP $0000,X
-		case 0xFC : // NOP $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: if (nextins+X<0x100)
-							cycle=0;
-						break;
-				case 4: cycle=0;
-						break;
-			};
-			break;
-
-		case 0x1F : // ASO/SLO $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						ptr+=X;
-						break;
-				case 3: break;
-				case 4:	farins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						AC|=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x23 : // RAN/RLA ($00,X) - ROL memory, AND accu, result into acc
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=(mem->Read(nextins+1)<<8);
-						farins=mem->Read(ptr);
-						break;
-				case 5: nextins=(farins<<1)|(ST&0x01);
-						mem->Write(ptr,nextins);
-						break;
-				case 6:	(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 7: AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x27 : // RAN/RLA $00 -		A <- (M << 1) /\ (A)
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins;
-						break;
-				case 2: farins=mem->Read(ptr);
-						break;
-				case 3: mem->Write(ptr,farins);
-						nextins=(farins<<1)|(ST&0x01);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x2F : // RAN/RLA $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: farins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr, farins);
-						nextins=(farins<<1)|(ST&0x01);
-						break;
-				case 5: mem->Write(ptr,nextins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x33 : // RAN/RLA ($00),Y -	A <- (M << 1) /\ (A) - not 100%
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: break;
-				case 5: farins=mem->Read(ptr+Y);
-						nextins=(farins<<1)|(ST&0x01);
-						break;
-				case 6: mem->Write(ptr+Y,farins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 7: mem->Write(ptr+Y,nextins);
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x34 : // NOP $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: break;
-				case 3: cycle=0;
-						break;
-			};
-			break;
-
-		case 0x37 : // RAN/RLA $00,X -			A <- (M << 1) /\ (A)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						ptr=nextins;
-						break;
-				case 3: farins=mem->Read(ptr);
-						nextins=(farins<<1)|(ST&0x01);
-						break;
-				case 4: mem->Write(ptr,farins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5: mem->Write(ptr,nextins);
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x3B : // RAN/RLA $0000,Y -	A <- (M << 1) /\ (A)
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: break;
-				case 4:	farins=mem->Read(ptr+Y);
-						break;
-				case 5:	mem->Write(ptr+Y,farins);
-						nextins=(farins<<1)|(ST&0x01);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 6: mem->Write(ptr+Y,nextins);
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x3F : // RAN/RLA $0000,X 
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: break;
-				case 4: farins=mem->Read(ptr);
-						nextins=(farins<<1)|(ST&0x01);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5: mem->Write(ptr,farins);
-						break;
-				case 6: mem->Write(ptr,nextins);
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x43 : // LSE/SRE ($00,X) -	A <- (M >> 1) ^ A
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=(mem->Read(nextins+1)<<8);
-						break;
-				case 5: nextins=mem->Read(ptr)>>1;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						break;
-				case 7: AC^=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x47 : // LSE/SRE $00 -		A <- (M >> 1) \-/ A
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins;
-						break;
-				case 2: nextins=mem->Read(ptr);
-						break;
-				case 3: mem->Write(ptr,nextins);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						nextins>>=1;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						AC^=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;			
-
-		case 0x4B : // ANL/ASR #$00
-			PC++;
-			AC=(AC&nextins);
-			(AC&0x01) ? ST|=0x01 : ST&=0xFE;
-			AC>>=1;
-			SETFLAGS_ZN(AC);
-			cycle=0;
-			break;
-
-		case 0x4F : // LSE/SRE $0000 - A <- (M >> 1) \-/ A
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						nextins>>=1;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						AC^=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x53 : // LSE/SRE ($00),Y -	A <- (M >> 1) \-/ A	 - not 100%
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: break;
-				case 5: nextins=mem->Read(ptr+Y);
-						break;
-				case 6: mem->Write(ptr+Y,nextins);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						nextins>>=1;
-						break;
-				case 7: mem->Write(ptr+Y,nextins);
-						AC^=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x54 : // NOP $00,X
-			switch (cycle++) {
-				case 1: break;
-				case 2: PC++;
-						break;
-				case 3: cycle=0;
-						break;
-			};
-			break;
-
-		case 0x57 : // LSE/SRE $00,X -			A <- (M >> 1) \-/ A	 - not 100%
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=nextins;
-						nextins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						nextins>>=1;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						AC^=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x5B : // LSE/SRE $0000,Y -	A <- (M >> 1) \-/ A                    
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: break;
-				case 4: farins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,farins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE;
-						farins>>=1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						AC^=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			}
-			break;
-
-		case 0x5F : // LSE/SRE $0000,X -	A <- (M >> 1) \-/ A
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						ptr+=X;
-						break;
-				case 3: break;
-				case 4: farins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,farins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE;
-						farins>>=1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						AC^=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x63 : // RAD/RRA ($00,X) - ROR memory, ADC accu, result into accu
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=(mem->Read(nextins+1)<<8);
-						break;
-				case 5: nextins=mem->Read(ptr);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						break;
-				case 6: nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 7: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x04 : // NOP $00
-		case 0x44 : // NOP $00
-		case 0x64 : // NOP $00
-			if (cycle++==2) {
-				PC++;
-				cycle=0;
-			};
-			break;
-
-		case 0x67 : // RAD/RRA $00
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins;
-						break;
-				case 2: nextins=mem->Read(ptr);
-						break;
-				case 3: mem->Write(ptr,nextins);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 4: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		// this instruction's decimal mode is not good at all!!!
-		case 0x6B : // ARR $00
-			switch (cycle++) {
-				case 1: PC++;
-						AC&=nextins;
-						break;
-				case 2: AC=(AC>>1)&((ST&0x01)<<7);
-						SETFLAGS_ZN(AC);
-						(AC&0x40) ? ST|=0x01 : ST&=0xFE;
-						(AC&0x40)^((AC&0x20)<<1) ? SetVFlag() : ClearVFlag();
-						cycle=0;
-						//add_to_log("ARR encountered. %i",ST&0x01);
-						break;
-			};
-			break;
-
-		case 0x6F : // RAD/RRA $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 5: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x73 : // RAD/RRA ($00),Y -	A <- (M >> 1) + (A) + C 
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: break;
-				case 5: nextins=mem->Read(ptr+Y);
-						break;
-				case 6: mem->Write(ptr+Y,nextins);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 7: mem->Write(ptr+Y,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x74 : // NOP $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: break;
-				case 3: cycle=0;
-						break;
-			};
-			break;
-
-		case 0x77 : // RAD/RRA $00,X -	A <- (M >> 1) + (A) + C  - not good yet!!!!!!
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						ptr=nextins;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						break;
-				case 4: nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 5: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x7B : // RAD/RRA $0000,Y -	A <- (M >> 1) + (A) + C   - not good yet!!!!!!
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: break;
-				case 4: nextins=mem->Read(ptr);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						break;
-				case 6: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			}
-			break;
-
-		case 0x7F : // RAD/RRA $8000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: break;
-				case 4: nextins=mem->Read(ptr);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						break;
-				case 5: mem->Write(ptr, nextins);
-						break;
-				case 6: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			}
-			break;
-
-		case 0x83 : // AXX/SAX ($00,X) -	M <- (A) /\ (X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=(mem->Read(nextins+1)<<8);
-						break;
-				case 5: mem->Write(ptr,AC&X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x87 : // AAX/AXR/SAX $00 - M <- (A) /\ (X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: mem->Write(nextins,AC&X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x8B : // TAN/ANE/XAA $00 -	M <-[(A)/\$EE] \/ (X)/\(M)
-			switch (cycle++) {
-				case 1: PC++;
-						//mem->Write(nextins,(AC&0xEE)|(X&mem->Read(nextins)));
-						AC=X&nextins&(AC|0xEE);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x8F : // AAX/SAX $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: mem->Write(ptr,AC&X);
-						cycle=0;
-						break;
-			};
-			break;
-/*
-        SHA $93,$9F     Store (A & X & (ADDR_HI + 1))
-        SHX $9E         Store (X & (ADDR_HI + 1))
-        SHY $9C         Store (Y & (ADDR_HI + 1))
-        SHS $9B         SHA and TXS, where X is replaced by (A & X).
-
-                        Note: The value to be stored is copied also
-                        to ADDR_HI if page boundary is crossed.
-*/
-		case 0x93 : // AXI/SHA ($00),Y		(A) /\ (X) /\ (PCH+1) vagy 0000,X ki tudja???
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: break;
-				case 5: mem->Write(ptr+Y,AC&X&(nextins+1));//check this!
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x97 : // AXY/SAX $00,Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=Y;
-						break;
-				case 3: mem->Write(nextins,AC&X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x9B : // AXS/SHS $0000,Y	- X <- (A) /\ (X), S <- (X) _plus_  M <- (X) /\ (PCH+1)
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						ptr+=Y;
-						break;
-				case 3: SP=AC&X;
-						break;
-				case 4: //mem->Write(ptr,AC&X&mem->Read(ptr+1)+1);
-						mem->Write(ptr+Y,SP&(nextins+1));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x9C : // AYI/SHY $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: break;
-				case 4: //mem->Write(ptr,AC&Y&(((ptr+X)>>8)+1));
-						if (nextins+X<256) {
-							mem->Write(ptr+X,Y&(nextins+1));
-						}
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x9E : // SXI/SHX $0000,Y		(X) /\ (((PC+Y)>>8)+1) vagy mi???
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: break;
-				case 4: //mem->Write(ptr,X&(((ptr+Y)>>8)+1));
-						if (nextins+Y<256) {
-							mem->Write(ptr+Y,X&(nextins+1));
-						}
-						cycle=0;
-						break;
-			};
-			break;
-
-		// huh...????
-		case 0x9F : // AXI/SHA $0000,Y		(A) /\ (X) /\ (((PC+Y)>>8)+1) vagy mi???
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: break;
-				case 4: mem->Write(ptr+Y,AC&X&(nextins+1));
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xA3 : // LDT/LAX ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 5: X=AC=mem->Read(ptr);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xA7 : // LDT/LAX $00
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=nextins;
-						break;
-				case 3: X=AC=mem->Read(ptr);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xAB : // ANX/LXA #$00
-			switch (cycle++) {
-				case 1: PC++;
-						X=AC=(nextins&(AC|0xEE));
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xAF : // LDT/LAX $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: X=AC=mem->Read(ptr);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB3 : // LDT/LAX ($00),Y
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: if ((ptr&0x00FF)+Y<0x100) {
-							X=AC=mem->Read(ptr+Y);
-							SETFLAGS_ZN(X);
-							cycle=0;
-						}
-						break;
-				case 5: X=AC=mem->Read(ptr+Y);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xB7 : // LDT/LAX $00,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: X=AC=mem->Read(nextins);
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xBB : // LAE/TSA Stack-Pointer AND with memory, TSX, TXA
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: PC++;
-						ptr+=Y;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							SP&=mem->Read(ptr);
-							AC=X=SP;
-							SETFLAGS_ZN(X);
-							cycle=0;
-						}
-						break;
-				case 4: SP&=mem->Read(ptr);
-						AC=X=SP;
-						SETFLAGS_ZN(X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xBF : // LDT/LAX $0000,Y
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: if (nextins+Y<0x100) {
-							AC=X=mem->Read(ptr);
-							SETFLAGS_ZN(AC);
-							cycle=0;
-						}
-						break;
-				case 4: AC=X=mem->Read(ptr);
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xC3 : // DEM/DCP ($00,X)
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 5: nextins=mem->Read(ptr)-1;
-						break;
-				case 6: break;
-				case 7: mem->Write(ptr,nextins);
-						(AC>=nextins) ? ST|=0x01: ST&=0xFE;
-						farins=AC-nextins;
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xC7 : // DEM/DCP $00
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins;
-						break;
-				case 2: nextins=mem->Read(ptr);
-						break;
-				case 3: mem->Write(ptr,nextins);
-						nextins -= 1;
-						break;
-				case 4:	mem->Write(ptr,nextins);
-						(AC>=nextins) ? ST|=0x01 : ST&=0xFE;
-						nextins=AC-nextins;
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xCB : // AXS/XAS/SBX -	X <- (X)/\(A) - M
-			PC++;
-			((X&AC) >= nextins) ? ST|=0x01 : ST&=0xFE;
-			X = (X&AC) - nextins;
-			SETFLAGS_ZN(X);
-			cycle=0;
-			break;
-
-		case 0xCF : // DEM/DCP $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: farins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,farins);
-						farins -= 1;
-						break;
-				case 5: mem->Write(ptr,farins);
-						(AC>=farins) ? ST|=0x01 : ST&=0xFE;
-						farins=AC-farins;
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD3 : // DEM/DCP ($00),Y - DEC memory, CMP memory
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: break;
-				case 5: farins=mem->Read(ptr+Y);
-						break;
-				case 6: mem->Write(ptr+Y,farins);
-						farins -= 1;
-						break;
-				case 7: mem->Write(ptr+Y,farins);
-						DoCompare(AC,farins);	
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD4 : // NOP $0000,X
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: break;
-				case 3: cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD7 : // DEM/DCP $00,X -	M <- (M)-1, (A-M) -> NZC
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						ptr=nextins;
-						break;
-				case 3: nextins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,nextins);
-						nextins-=1;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						(AC>=nextins) ? ST|=0x01 : ST&=0xFE;
-						nextins=AC-nextins;
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xDB : // DEM/DCP $0000,Y : M <- (M)-1, (A-M) -> NZC
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: break;
-				case 4: farins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,farins);
-						farins -= 1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						(AC>=farins) ? ST|=0x01 : ST&=0xFE;
-						farins=AC-farins;
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xDF : // DEM/DCP $0000,X : M <- (M)-1, (A-M) -> NZC
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=X;
-						PC++;
-						break;
-				case 3: break;
-				case 4: farins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,farins);
-						farins -= 1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						(AC>=farins) ? ST|=0x01 : ST&=0xFE;
-						farins=AC-farins;
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE3 : // INB/ISB ($00,X) -	M <- (M) + 1, A <- (A) - M - C
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: ptr=mem->Read(nextins);
-						break;
-				case 4: ptr|=(mem->Read(nextins+1)<<8);
-						break;
-				case 5: nextins=mem->Read(ptr);
-						break;
-				case 6: mem->Write(ptr,nextins);
-						nextins += 1;
-						break;
-				case 7: mem->Write(ptr,nextins);
-						SBC(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE7 : // INB/ISB $00 -	M <- (M) + 1, A <- (A) - M - C
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins;
-						break;
-				case 2: nextins=mem->Read(ptr);
-						break;
-				case 3: mem->Write(ptr,nextins);
-						nextins += 1;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						SBC(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xEB : // SBC #$00 - illegal version
-			PC++;
-			SBC(nextins);
-			cycle=0;
-			break;
-
-		case 0xEF : // INB/ISB $0000
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						break;
-				case 3: farins=mem->Read(ptr);
-						break;
-				case 4: mem->Write(ptr,farins);
-						farins += 1;
-						break;
-				case 5: mem->Write(ptr,farins);
-						SBC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF3 : // INB/ISB ($00),Y - increase and subtract from AC
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: ptr=mem->Read(nextins);
-						break;
-				case 3: ptr|=mem->Read(nextins+1)<<8;
-						break;
-				case 4: break;
-				case 5: farins=mem->Read(ptr+Y);
-						break;
-				case 6: mem->Write(ptr+Y,farins);
-						farins+=1;
-						break;
-				case 7: mem->Write(ptr+Y,farins);
-						SBC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF4 : // NOP $60,X
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: break;
-				case 3: cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF7 : // INB/ISB $00,X -	M <- (M) + 1, A <- (A) - M - C
-			switch (cycle++) {
-				case 1: PC++;
-						break;
-				case 2: nextins+=X;
-						break;
-				case 3: farins=mem->Read(nextins);
-						break;
-				case 4: mem->Write(nextins,farins);
-						farins += 1;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SBC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xFB : // INB/ISB $0000,Y - increase and subtract from AC
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: ptr+=Y;
-						PC++;
-						break;
-				case 3: break;
-				case 4: farins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,farins);
-						farins += 1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						SBC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xFF : // INB/ISB $0000,X - increase and subtract from AC
-			switch (cycle++) {
-				case 1: PC++;
-						ptr=nextins|(mem->Read(PC)<<8);
-						break;
-				case 2: PC++;
-						ptr+=X;
-						break;
-				case 3: break;
-				case 4: farins=mem->Read(ptr);
-						break;
-				case 5: mem->Write(ptr,farins);
-						farins += 1;
-						break;
-				case 6: mem->Write(ptr,farins);
-						SBC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x02 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x12 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x22 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x32 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x42 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x52 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x62 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x72 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0x92 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0xB2 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0xD2 : // ABS, JAM, KIL or whatever - jams the machine
-		case 0xF2 : // ABS, JAM, KIL or whatever - jams the machine
-			cycle = 0;
-			PC = (PC-1)&0xFFFF;
-			bp_reached = bp_active = cpu_jammed = true;
-			//printf("CPU jammed\n");
-			//exit(-1);
-			
-			break;
-
-		default : cycle=1; // can't happen!
-	};
-	/*if ((*irq_register)&0x80 && cycle && !irq_sequence)
-		IRQcount = 1;*/
-};
-
-// in these cycles, only write operations are allowed for the CPU
-void CPU::stopcycle()
-{
-	//unsigned int old_cycle = cycle;
-
-	switch (currins) {
-
-		case 0x00 : // BRK
-			switch (cycle) {
-				case 2: push(PC>>8);
-						cycle++;
-						break;
-				case 3: push(PC&0xFF);
-						cycle++;
-						break;
-				case 4: // BRK pushes the status register to the stack with the B bit set
-						// if not an IRQ
-						push((ST|0x30)&~irq_sequence);
-						//push(ST&0xEF);
-						// and then masks the interrupt bit
-						ST|=0x04;
-						cycle++;
-						break;
-			};
-			break;
-
-		/*case 0x100 : // IRQ
-			switch (cycle) {
-				case 2: push(PC>>8);
-						cycle++;
-						break;
-				case 3: push(PC&0xFF);
-						cycle++;
-						break;
-				case 4: push((ST|0x20)&0xEF);
-						// and then masks the interrupt bit
-						ST|=0x04;
-						cycle++;
-						break;
-			}
-			break;
-
-		case 0x00 : // BRK
-			switch (cycle) {
-				case 2: push(PC>>8);
-						cycle++;
-						break;
-				case 3: push(PC&0xFF);
-						cycle++;
-						break;
-				case 4: // BRK pushes the status register to the stack with the B bit set
-						// if not an IRQ
-						push((ST|0x30));
-						// and then masks the interrupt bit
-						ST|=0x04;
-						cycle++;
-						break;
-			};
-			break;*/
-
-		case 0x08 : // PHP
-			if (cycle==2) {
-				// the PHP always pushes the status with the B flag set... 
-				push(ST|0x30);
-				cycle=0;
-			};
-			break;
-
-		case 0x48 : // PHA
-			if (cycle==2) {
-				push(AC);
-				cycle=0;
-			};
-			break;
-
-		case 0x20 : // JSR
-			switch (cycle) {
-				case 3: push(PC>>8);
-					cycle++;
-					break;
-				case 4: push(PC&0xFF);
-					cycle++;
-					break;
-			};
-			break;
-
-		case 0x06 : // ASL $00
-			switch (cycle) {
-				case 3: mem->Write(nextins,farins);
-						farins<<=1;
-						++cycle;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x07 : // ASO/SLO $00		: A <- (M << 1) \/ A
-			switch (cycle) {
-				case 3: mem->Write(ptr,nextins);
-						(nextins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						nextins<<=1;
-						cycle++;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						AC|=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x0E : // ASL $0000
-			switch (cycle) {
-				case 4:	mem->Write(ptr,nextins);
-						(nextins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						nextins<<=1;
-						++cycle;
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x0F : // ASO/SLO $0000		: A <- (M << 1) \/ A
-			switch (cycle) {
-				case 4: mem->Write(ptr,nextins);
-						(nextins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						nextins<<=1;
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						AC|=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x16 : // ASL $00,X
-			switch (cycle) {
-				case 4: mem->Write(nextins,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						++cycle;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x17 : // ASO/SLO $00,X		: A <- (M << 1) \/ A
-			switch (cycle) {
-				case 4: mem->Write(ptr,farins);
-						(farins)&0x80 ? ST|=0x01 : ST&=0xFE;
-						farins<<=1;
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,farins);
-						AC|=farins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x1E : // ASL $0000,X
-			switch (cycle) {
-				case 5:	mem->Write(ptr,nextins);
-						(nextins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						nextins<<=1;
-						++cycle;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x26 : // ROL $00
-			switch (cycle) {
-				case 3: mem->Write(ptr,farins);
-						farins&0x80 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						++cycle;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x27 : // RAN/RLA $00 -		A <- (M << 1) /\ (A)
-			switch (cycle) {
-				case 3: mem->Write(ptr,farins);
-						nextins=(farins<<1)|(ST&0x01);
-						cycle++;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x2E : // ROL $0000
-			switch (cycle) {
-				case 4:	mem->Write(ptr,farins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						++cycle;
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x2F : // RAN/RLA $0000
-			switch (cycle) {
-				case 4: mem->Write(ptr, farins);
-						nextins=(farins<<1)|(ST&0x01);
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x36 : // ROL $00,X
-			switch (cycle) {
-				case 4: mem->Write(ptr,farins);
-						nextins=(farins<<1)|((ST&0x01));
-						farins&0x80 ? ST|=0x01 : ST&=0xFE;
-						++cycle;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x37 : // RAN/RLA $00,X -			A <- (M << 1) /\ (A)
-			switch (cycle) {
-				case 4: mem->Write(ptr,farins);
-						(farins&0x80) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						AC&=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x3E : // ROL $0000,X
-			switch (cycle) {
-				case 5:	mem->Write(ptr,farins);
-						++cycle;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x46 : // LSR $00
-			switch (cycle) {
-				case 3: mem->Write(nextins,farins);
-						farins>>=1;
-						++cycle;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x47 : // LSE/SRE $00 -		A <- (M >> 1) \-/ A
-			switch (cycle) {
-				case 3: mem->Write(ptr,nextins);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						nextins>>=1;
-						cycle++;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						AC^=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;	
-
-		case 0x4E : // LSR $0000
-			switch (cycle) {
-				case 4:	mem->Write(ptr,nextins);
-						nextins=nextins>>1;
-						++cycle;
-						break;
-				case 5:	mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x4F : // LSE/SRE $0000 - A <- (M >> 1) \-/ A
-			switch (cycle) {
-				case 4: mem->Write(ptr,nextins);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						nextins>>=1;
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						AC^=nextins;
-						SETFLAGS_ZN(AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x56 : // LSR $00,X
-			switch (cycle) {
-				case 4: mem->Write(nextins,farins);
-						farins>>=1;
-						++cycle;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x5E : // LSR $0000,X
-			switch (cycle) {
-				case 5:	mem->Write(ptr,nextins);
-						nextins>>=1;
-						++cycle;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x66 : // ROR $00
-			switch (cycle) {
-				case 3: mem->Write(ptr,farins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						++cycle;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x67 : // RAD/RRA $00
-			switch (cycle) {
-				case 3: mem->Write(ptr,nextins);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						cycle++;
-						break;
-				case 4: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x6E : // ROR $0000
-			switch (cycle) {
-				case 4: mem->Write(ptr,farins);
-						nextins=(farins>>1)|((ST&0x01)<<7);
-						(farins&0x01) ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						++cycle;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x6F : // RAD/RRA $0000
-			switch (cycle) {
-				case 4: mem->Write(ptr,nextins);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x73 : // RAD/RRA ($00),Y -	A <- (M >> 1) + (A) + C 
-			switch (cycle) {
-				case 6: mem->Write(ptr+Y,nextins);
-						farins=(nextins>>1)|((ST&0x01)<<7);
-						nextins&0x01 ? ST|=0x01 : ST&=0xFE;
-						cycle++;
-						break;
-				case 7: mem->Write(ptr+Y,farins);
-						ADC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x76 : // ROR $00,X
-			switch (cycle) {
-				case 4: mem->Write(ptr,farins);
-						farins&0x01 ? ST|=0x01 : ST&=0xFE; // the Carry flag
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x7E : // ROR $0000,X
-			switch (cycle) {
-				case 5: mem->Write(ptr,farins);
-						++cycle;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		// indexed indirect
-
-		case 0x81 : // STA ($00,X)
-			if (cycle==5) {
-				mem->Write(ptr,AC);
-				cycle=0;
-			};
-			break;
-
-		case 0x83 : // AXX/SAX ($00,X) -	M <- (A) /\ (X)
-			if (cycle==5) {
-				mem->Write(ptr,nextins);
-				cycle=0;
-			};
-			break;
-
-		case 0x84 : // STY $00
-			if (cycle==2) {
-				mem->Write(nextins,Y);
-				cycle=0;
-			};
-			break;
-
-		case 0x85 : // STA $00
-			if (cycle==2) {
-				mem->Write(nextins,AC);
-				cycle=0;
-			};
-			break;
-
-		case 0x86 : // STX $00
-			if (cycle==2) {
-				mem->Write(nextins,X);
-				cycle=0;
-			};
-			break;
-
-		case 0x87 : // AAX/AXR/SAX $00 - M <- (A) /\ (X)
-			if (cycle==2) {
-				mem->Write(nextins,AC&X);
-				cycle=0;
-			};
-			break;
-
-		case 0x8C : // STY $0000
-			if (cycle==3) {
-				mem->Write(ptr,Y);
-				cycle=0;
-			};
-			break;
-
-		case 0x8D : // STA $0000
-			if (cycle==3) {
-				mem->Write(ptr,AC);
-				cycle=0;
-			};
-			break;
-
-		case 0x8E : // STX $0000
-			if (cycle==3) {
-				mem->Write(ptr,X);
-				cycle=0;
-			};
-			break;
-
-		case 0x8F : // AAX/SAX $0000
-			if (cycle==3) {
-				mem->Write(ptr,AC&X);
-				cycle=0;
-			};
-			break;
-
-		// indirect indexed
-
-		case 0x91 : // STA ($00),Y
-			if (cycle==5) {
-				mem->Write(ptr+Y,AC);
-				cycle=0;
-			};
-			break;
-
-		// zero page indexed with X or Y
-
-		case 0x94 : // STY $00,X
-			switch (cycle) {
-				case 3: mem->Write(nextins,Y);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x95 : // STA $00,X
-			switch (cycle) {
-				case 3: mem->Write(nextins,AC);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x96 : // STX $00,Y
-			switch (cycle) {
-				case 3: mem->Write(nextins,X);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0x97 : // AXY/SAX $00,Y
-			if (cycle==3) {
-				mem->Write(nextins,AC&X);
-				cycle=0;
-			};
-			break;
-
-		case 0x99 : // STA $0000,Y
-			if (cycle==4) {
-				mem->Write(ptr+Y,AC);
-				cycle=0;
-			};
-			break;
-
-		case 0x9C : // AYI/SHY $0000,X
-			if (cycle==4) {
-				if (nextins+X<256)
-					mem->Write(ptr+X,Y&(nextins+1));
-				cycle=0;
-			};
-			break;
-
-		case 0x9D : // STA $0000,X
-			if (cycle==4) {
-				mem->Write(ptr+X,AC);
-				cycle=0;
-			};
-			break;
-
-		case 0xC6 : // DEC $00
-			switch (cycle) {
-				case 3: mem->Write(nextins,farins);
-						--farins;
-						++cycle;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xC7 : // DEM/DCP $00
-			switch (cycle) {
-				case 3: mem->Write(ptr,nextins);
-						nextins -= 1;
-						cycle++;
-						break;
-				case 4:	mem->Write(ptr,nextins);
-						(AC>=nextins) ? ST|=0x01 : ST&=0xFE;
-						nextins=AC-nextins;
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xCE : // DEC $0000
-			switch (cycle) {
-				case 4: mem->Write(ptr,nextins);
-						--nextins;
-						++cycle;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xCF : // DEM/DCP $0000
-			switch (cycle) {
-				case 4: mem->Write(ptr,farins);
-						farins -= 1;
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,farins);
-						(AC>=farins) ? ST|=0x01 : ST&=0xFE;
-						farins=AC-farins;
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD6 : // DEC $00,X
-			switch (cycle) {
-				case 4: mem->Write(nextins,farins);
-						--farins;
-						++cycle;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xD7 : // DEM/DCP $00,X -	M <- (M)-1, (A-M) -> NZC
-			switch (cycle) {
-				case 4: mem->Write(ptr,nextins);
-						nextins-=1;
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						(AC>=nextins) ? ST|=0x01 : ST&=0xFE;
-						nextins=AC-nextins;
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xDE : // DEC $0000,X
-			switch (cycle) {
-				case 5: mem->Write(ptr,nextins);
-						--nextins;
-						++cycle;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE6 : // INC $00
-			switch (cycle) {
-				case 3: mem->Write(nextins,farins);
-						++farins;
-						++cycle;
-						break;
-				case 4: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xE7 : // INB/ISB $00 -	M <- (M) + 1, A <- (A) - M - C
-			switch (cycle) {
-				case 3: mem->Write(ptr,nextins);
-						nextins += 1;
-						cycle++;
-						break;
-				case 4: mem->Write(ptr,nextins);
-						SBC(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xEE : // INC $0000
-			switch (cycle) {
-				case 4: mem->Write(ptr,nextins);
-						++nextins;
-						++cycle;
-						break;
-				case 5: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xEF : // INB/ISB $0000 - should be here but BAG protector won't work!
-			switch (cycle) {
-				case 4: mem->Write(ptr,farins);
-						farins += 1;
-						cycle++;
-						break;
-				case 5: mem->Write(ptr,farins);
-						SBC(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xF6 : // INC $00,X
-			switch (cycle) {
-				case 4: mem->Write(nextins,farins);
-						++farins;
-						++cycle;
-						break;
-				case 5: mem->Write(nextins,farins);
-						SETFLAGS_ZN(farins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xFE : // INC $0000,X
-			switch (cycle) {
-				case 5: mem->Write(ptr,nextins);
-						++nextins;
-						++cycle;
-						break;
-				case 6: mem->Write(ptr,nextins);
-						SETFLAGS_ZN(nextins);
-						cycle=0;
-						break;
-			};
-			break;
-
-		case 0xFF : // INB/ISB $0000,X - increase and subtract from AC
-			switch (cycle) {
-				case 5: mem->Write(ptr,farins);
-						farins += 1;
-						cycle++;
-						break;
-				case 6: mem->Write(ptr,farins);
-						SBC(farins);
-						cycle=0;
-						break;
-				default:
-					return;
-			};
-			break;
-	}
-	if ((IRQcount || (!irq_sequence && (*irq_register)&0x80)) )
-		IRQcount++;
-}
-
-
-/*
-void CPU::_stopcycle()
-{
-	switch (currins) {
-
-	case 0:
-		if (cycle>1 && cycle<5)
-			process();
-		break;
-
-	case 0x20:
-		if (cycle==3 || cycle==4)
-			process();
-		break;
-
-	default:
-		switch (write_cycles[currins]) {
-			case 2:
-				break;
-			case 1:
-				break;
-			default:
-				break;
-		}
-		break;
-	}
-}*/
-
-CPU::~CPU()
-{
-}
-
-

+ 0 - 141
soloud.mod/soloud/src/tools/tedsid2dump/cpu.h

@@ -1,141 +0,0 @@
-#ifndef _CPU_H
-#define _CPU_H
-
-#define SETFLAGS_ZN(VALUE) ST = (ST&0x7D)|(((VALUE)==0)<<1)|((VALUE)&0x80)
-
-#include "mem.h"
-
-class TED;
-
-class CPU {
-	protected:
-		//unsigned int currins;
-		unsigned char currins;
-		unsigned char nextins;
-		unsigned char farins;
-		unsigned int  ptr;
-		unsigned int  PC;
-		unsigned char  SP;
-						   // 76543210
-		unsigned int  ST; // NV1BDIZC
-		unsigned char  AC;
-		unsigned char  X;
-		unsigned char  Y;
-		void ADC(const unsigned char value);
-		void SBC(const unsigned char value);
-		void DoCompare(unsigned char reg, unsigned char value);
-		unsigned int cycle;
-		unsigned int IRQcount;
-		unsigned char *irq_register;
-		unsigned char *stack;
-		unsigned char irq_sequence;
-		MemoryHandler *mem;
-		virtual unsigned char CheckVFlag() { return (ST&0x40); };
-		inline virtual void ClearVFlag() { ST&=0xBF; };
-		inline void SetVFlag() { ST|=0x40; };
-
-	public:
-		CPU(MemoryHandler *memhandler, unsigned char *irqreg, unsigned char *cpustack);
-		virtual ~CPU();
-		void Reset(void);
-		void softreset(void);
-		void setPC(unsigned int addr);
-		void setST(unsigned char st) { ST = st; };
-		void process();
-		void stopcycle();
-		
-		unsigned int getPC() { return PC; };
-		unsigned int getSP() { return SP; };
-		unsigned int getST() { return ST; };
-		unsigned int getAC() { return AC; };
-		unsigned int getX() { return X; };
-		unsigned int getY() { return Y; };
-		unsigned int getnextins() { return nextins; };
-		unsigned int getptr() { return ptr; };
-		unsigned int getcycle() { return cycle; };
-		unsigned int getcins();
-
-		bool saveshot(void *cpudump);
-		bool loadshot(void *cpudump);
-		// breakpoint variables
-		static bool bp_active;
-		static bool bp_reached;
-		struct {
-  			unsigned int address;
-  			bool enabled;
-  			bool slot_free;  			
-		} bp[11];
-		unsigned int nr_activebps;
-		bool cpu_jammed;
-		static const unsigned int nr_of_bps;	
-};
-
-inline void CPU::ADC(const unsigned char value)
-{
-	if (ST&0x08) {
-		unsigned int bin_adc = AC + value + (ST&0x01);
-		unsigned char AL, AH;
-
-		AL=(AC&0x0F) + (value & 0x0F) + (ST&0x01);
-		AH=(AC >> 4) + (value >> 4 ) ;
-		// fix lower nybble
-		if (AL>9) {
-			AL+=6;
-			AH++;
-		}
-		// zero bit depends on the normal ADC...
-		(bin_adc)&0xFF ? ST&=0xFD : ST|=0x02;
-		// negative flag also...
-		( AH & 0x08 ) ? ST|=0x80 : ST&=0x7F; 
-		// V flag
-		((((AH << 4) ^ AC) & 0x80) && !((AC ^ value) & 0x80)) ? SetVFlag() : ClearVFlag();
-		// fix upper nybble
-		if (AH>9) 
-			AH+=6;
-		// set the Carry if the decimal add has an overflow
-		(AH > 0x0f) ? ST|=0x01 : ST&=0xFE;
-		// calculate new AC value
-		AC = (AH<<4)|(AL & 0x0F);
-	} else {
-		unsigned int bin_adc = AC + value + (ST&0x01);
-		(bin_adc>=0x100) ? ST|=0x01 : ST&=0xFE;
-		(!((AC ^ value) & 0x80) && ((AC ^ bin_adc) & 0x80) ) ? SetVFlag() : ClearVFlag();
-		AC=(unsigned char) bin_adc;
-		SETFLAGS_ZN(AC);
-	}
-}
-
-inline void CPU::SBC(const unsigned char value)
-{
-	if (ST&0x08) { // if in decimal mode
-		unsigned int bin_sbc = (AC - value - (1-(ST&0x01)));
-		unsigned int dec_sbc = (AC & 0x0F) - (value & 0x0F) - (1-(ST&0x01));
-		// Calculate the upper nybble.
-		// fix upper nybble
-		if (dec_sbc&0x10)
-			dec_sbc = ((dec_sbc-6)&0x0F) | ((AC&0xF0) - (value&0xF0) - 0x10);
-		else
-			dec_sbc = (dec_sbc&0x0F) | ((AC&0xF0) - (value&0xF0));
-		
-		if (dec_sbc&0x100)
-			dec_sbc-= 0x60;
-
-		// all flags depend on the normal SBC...
-		(bin_sbc<0x100) ? ST|=0x01 : ST&=0xFE ; // carry flag
-		SETFLAGS_ZN( bin_sbc & 0xFF );
-		((AC^bin_sbc)&0x80 && (AC^value)&0x80 ) ? SetVFlag() : ClearVFlag(); // V flag
-
-		AC=(unsigned char) dec_sbc;
-
-	} else {
-		unsigned int bin_sbc = (AC - value - (1-(ST&0x01)));
-		(bin_sbc<0x100) ? ST|=0x01 : ST&=0xFE;
-		(((AC ^ value) & 0x80) && ((AC ^ bin_sbc) & 0x80) ) ? SetVFlag() : ClearVFlag();
-		AC=(unsigned char) bin_sbc;
-		SETFLAGS_ZN(AC);
-	}
-}
-
-
-
-#endif // _CPU_H

+ 0 - 331
soloud.mod/soloud/src/tools/tedsid2dump/cpu7501asm.h

@@ -1,331 +0,0 @@
-#pragma once
-
-enum  { // AsmAdressingMode
-	AM_UNKNOWN = 0,
-	AM_IMPLIED,
-	AM_IMMEDIATE,
-	AM_ABSOLUTE,
-	AM_INDIRECT,
-	AM_ZP,
-	AM_ZPIX,
-	AM_ZPIY,
-	AM_ABSOLUTEIX,
-	AM_ABSOLUTEIY,
-	AM_INDIRECTINDEXED,
-	AM_INDEXEDINDIRECT,
-	AM_RELATIVE
-};
-
-typedef struct INSTR
-{
-  char name[4];
-  unsigned int  type;
-  int  cycles;
-  unsigned char ext;
-  unsigned char iclass;
-} instructions;
-
-/*
-   types :   1 - one-unsigned char instruction - eg.: nop
-             2 - two-unsigned char instruction eg.: lda #$20
-             3 - three-unsigned char instruction eg.: jmp $2000
-             4 - three-unsigned char indirect instruction eg.: jmp ($2000)
-             5 - two-unsigned char zero slap eg.: lda $50
-             6 - two-unsigned char zero slap X indexed eg.: lda $60,x
-             7 - two-unsigned char zero slap Y indexed eg.: ldx $70,y
-             8 - three-unsigned char X indexed eg.: sta $8000,x
-             9 - three-unsigned char Y indexed eg.: sta $8000,y
-            10 - two-unsigned char zero slap Y, indexed eg.: lda ($a0),Y
-            11 - two-unsigned char zero slap X, indexed eg.: lda ($b0,X)
-            12 - two-unsigned char relative jump eg.: beq $c000
-
-	  ext :   0 - regular assembler instruction mnemonic
-    		1 - extended assembler instruction mnemonic
-    		2 - not an assembly instruction
-
-	class : 0 - special BRK,JAM,NOP : nothing affected
-			1 - affects PC
-			2 - affects A only
-			3 - affects X only
-			4 - affects Y only
-			5 - affects memory
-
-			9 - not dealt with
-*/
-
-const int typlen[13]={0,1,2,3,3,2,2,2,3,3,2,2,2};
-
-/* 6510,7510 assembler instructions */
-const instructions ins[256] =
-						{ {"BRK", AM_IMPLIED,7,0,0},   // 00 - BRK
-                          {"ORA",11,6,0,3},   // 01 - ORA ($B0,X)
-                          {"ABS", AM_IMPLIED,2,1,0},   //*02 - ABS
-                          {"SLO",11,8,1,9},   //*03 - SLO ($B0,X)
-                          {"NOP", 5,3,1,0},   //*04 - NOP $50
-                          {"ORA", 5,3,0,2},   // 05 - ORA $50
-                          {"ASL", 5,5,0,5},   // 06 - ASL $50
-                          {"SLO", 5,5,1,9},   //*07 - SLO $50
-                          {"PHP", AM_IMPLIED,3,0,9},   // 08
-                          {"ORA", AM_IMMEDIATE,2,0,2},   // 09 - ORA #$20
-                          {"ASL", AM_IMPLIED,2,0,2},   // 0A - ASL
-                          {"ANC", AM_IMMEDIATE,2,1,9},   //*0B - ANC #$20
-                          {"NOP", 3,4,1,0},   //*0C - NOP $3000
-                          {"ORA", 3,4,0,2},   // 0D - ORA $3000
-                          {"ASL", 3,6,0,5},   // 0E - ASL $3000
-                          {"SLO", 3,6,1,9},   //*0F - SLO $3000
-
-                          {"BPL",12,4,0,9},   // 10 - BPL $C000 / add +1 if branch on same page, +2 othervise
-                          {"ORA",10,6,0,2},   // 11 - ORA ($A0),Y
-                          {"ABS", AM_IMPLIED,2,1,1},   //*12 - ABS
-                          {"SLO",10,9,1,9},   //*13 - SLO ($A0),Y
-                          {"NOP", 6,4,1,0},   //*14 - NOP $60,X
-                          {"ORA", 6,4,0,2},   // 15 - ORA $60,X
-                          {"ASL", 6,6,0,5},   // 16 - ASL $60,X
-                          {"SLO", 6,6,1,9},   //*17 - SLO $60,X
-                          {"CLC", AM_IMPLIED,2,0,9},   // 18 - CLC
-                          {"ORA", 9,5,0,2},   // 19 - ORA $9000,Y / Add +1 on page crossing
-                          {"NOP", AM_IMPLIED,2,1,0},   //*1A - NOP
-                          {"SLO", 9,8,1,9},   //*1B - SLO $9000,Y
-                          {"NOP", 8,5,1,0},   //*1C - NOP $8000,X
-                          {"ORA", 8,5,0,2},   // 1D - ORA $8000,X / Add +1 on page crossing
-                          {"ASL", 8,7,0,5},   // 1E - ASL $8000,X
-                          {"SLO", 8,8,1,9},   //*1F - SLO $8000,X
-
-                          {"JSR", 3,6,0,9},   // 20 - JSR $3000
-                          {"AND",11,6,0,9},   // 21 - AND ($B0,X)
-                          {"ABS", AM_IMPLIED,2,1,1},   //*22 - ABS
-                          {"RLA",11,8,1,9},   //*23 - RLA ($B0,X)
-                          {"BIT", 5,3,0,7},   // 24 - BIT $50
-                          {"AND", 5,3,0,2},   // 25 - AND $50
-                          {"ROL", 5,5,0,5},   // 26 - ROL $50
-                          {"RLA", 5,5,1,9},   //*27 - RLA $50
-                          {"PLP", AM_IMPLIED,4,0,9},   // 28 - PLP
-                          {"AND", AM_IMMEDIATE,2,0,2},   // 29 - AND #$20
-                          {"ROL", AM_IMPLIED,2,0,2},   // 2A - ROL
-                          {"ANC", AM_IMMEDIATE,2,1,9},   //*2B - ANC #$20
-                          {"BIT", 3,4,0,7},   // 2C - BIT $3000
-                          {"AND", 3,4,0,2},   // 2D - AND $3000
-                          {"ROL", 3,6,0,5},   // 2E - ROL $3000
-                          {"RLA", 3,6,1,9},   //*2F - RLA $3000
-
-                          {"BMI",12,4,0,9},   // 30 - BPL $C000 / add +1 if branch on same page, +2 othervise
-                          {"AND",10,6,0,2},   // 31 - AND ($A0),Y
-                          {"ABS", AM_IMPLIED,2,1,1},   //*32 - ABS
-                          {"RLA",10,9,1,9},   //*33 - RLA ($A0),Y
-                          {"NOP", 6,4,1,0},   //*34 - NOP $60,X
-                          {"AND", 6,4,0,9},   // 35 - AND $60,X
-                          {"ROL", 6,6,0,5},   // 36 - ROL $60,X
-                          {"RLA", 6,6,1,9},   //*37 - RLA $60,X
-                          {"SEC", AM_IMPLIED,2,0,9},   // 38 - SEC
-                          {"AND", 9,5,0,9},   // 39 - AND $9000,Y / add +1 if page boundary is crossed
-                          {"NOP", AM_IMPLIED,2,1,0},   //*3A - NOP
-                          {"RLA", 9,8,1,9},   //*3B - RLA $9000,Y
-                          {"NOP", 8,5,1,0},   //*3C - NOP $8000,X
-                          {"AND", 8,5,0,9},   // 3D - AND $8000,X / add +1 if page boundary is crossed
-                          {"ROL", 8,7,0,5},   // 3E - ROL $8000,X
-                          {"RLA", 8,8,1,9},   //*3F - RLA $8000,X
-
-                          {"RTI", AM_IMPLIED,6,0,9},   // 40 - RTI
-                          {"EOR",11,6,0,2},   // 41 - EOR ($B0,X)
-                          {"ABS", AM_IMPLIED,2,1,1},   //*42 - ABS
-                          {"SRE",11,8,1,9},   //*43 - SRE ($B0,X)
-                          {"NOP", 5,3,1,0},   //*44 - NOP $50
-                          {"EOR", 5,3,0,2},   // 45 - EOR $50
-                          {"LSR", 5,5,0,5},   // 46 - LSR $50
-                          {"SRE", 5,5,1,9},   //*47 - SRE $50
-                          {"PHA", AM_IMPLIED,3,0,9},   // 48 - PHA
-                          {"EOR", AM_IMMEDIATE,2,0,2},   // 49 - EOR #$20
-                          {"LSR", AM_IMPLIED,2,0,2},   // 4A - LSR
-                          {"ANL", AM_IMMEDIATE,2,1,9},   //*4B - ANL #$20
-                          {"JMP", 3,3,0,9},   // 4C - JMP $3000
-                          {"EOR", 3,4,0,9},   // 4D - EOR $3000
-                          {"LSR", 3,6,0,5},   // 4E - LSR $3000
-                          {"SRE", 3,6,1,9},   //*4F - SRE $3000
-
-                          {"BVC",12,4,0,9},   // 50 - BVC $C000 / add +1 if branch on same page, +2 othervise
-                          {"EOR",10,6,0,9},   // 51 - EOR ($A0),Y / add +1 if page boundary is crossed
-                          {"ABS", AM_IMPLIED,2,1,1},   //*52 - ABS
-                          {"SRE",10,9,1,9},   //*53 - SRE ($A0),Y
-                          {"NOP", 6,4,1,0},   //*54 - NOP $60,X
-                          {"EOR", 6,4,0,9},   // 55 - EOR $60,X
-                          {"LSR", 6,6,0,5},   // 56 - LSR $60,X
-                          {"SRE", 6,6,1,9},   //*57 - SRE $60,X
-                          {"CLI", AM_IMPLIED,2,0,9},   // 58 - CLI
-                          {"EOR", 9,5,0,2},   // 59 - EOR $9000,Y / add +1 if page boundary is crossed
-                          {"NOP", AM_IMPLIED,2,1,0},   //*5A - NOP
-                          {"SRE", 9,8,1,9},   //*5B - SRE $9000,Y
-                          {"NOP", 8,5,1,0},   //*5C - NOP $8000,X
-                          {"EOR", 8,5,0,2},   // 5D - EOR $8000,X / add +1 if page boundary is crossed
-                          {"LSR", 8,7,0,5},   // 5E - LSR $8000,X
-                          {"SRE", 8,8,1,9},   //*5F - SRE $8000,X
-
-                          {"RTS", AM_IMPLIED,6,0,9},   // 60 - RTS
-                          {"ADC",11,6,0,2},   // 61 - ADC ($B0,X)
-                          {"ABS", AM_IMPLIED,2,1,1},   //*62 - ABS
-                          {"RRA",11,8,1,9},   //*63 - RRA ($B0,X)
-                          {"NOP", 5,3,1,0},   //*64 - NOP $50
-                          {"ADC", 5,3,0,2},   // 65 - ADC $50
-                          {"ROR", 5,5,0,5},   // 66 - ROR $50
-                          {"RRA", 5,5,1,9},   //*67 - RRA $50
-                          {"PLA", AM_IMPLIED,4,0,2},   // 68 - PLA
-                          {"ADC", AM_IMMEDIATE,2,0,2},   // 69 - ADC #$20
-                          {"ROR", AM_IMPLIED,2,0,2},   // 6A - ROR
-                          {"ARR", 2,5,1,9},   // 6B - ARR $00
-                          {"JMP", 4,5,0,9},   // 6C - JMP ($4000)
-                          {"ADC", 3,4,0,2},   // 6D - ADC $3000
-                          {"ROR", 3,6,0,5},   // 6E - ROR $3000
-                          {"RRA", 3,6,1,9},   //*6F - RRA $3000
-
-                          {"BVS",12,4,0,9},   // 70 - BVS $C000 / add +1 if branch on same page, +2 othervise
-                          {"ADC",10,6,0,2},   // 71 - ADC ($A0),X / add +1 if page boundary is crossed
-                          {"ABS", AM_IMPLIED,2,1,1},   //*72 - ABS
-                          {"RRA",10,9,1,9},   //*73 - RRA ($A0),Y
-                          {"NOP", 6,4,1,0},   //*74 - NOP $60,X
-                          {"ADC", 6,4,0,2},   // 75 - ADC $60,X
-                          {"ROR", 6,6,0,5},   // 76 - ROR $60,X
-                          {"RRA", 6,6,1,9},   //*77 - RRA $60,X
-                          {"SEI", AM_IMPLIED,2,0,9},   // 78 - SEI
-                          {"ADC", 9,5,0,2},   // 79 - ADC $9000,Y / add +1 if page boundary is crossed
-                          {"NOP", AM_IMPLIED,2,1,0},   //*7A - NOP
-                          {"RRA", 9,8,1,9},   //*7B - RRA $9000,Y
-                          {"NOP", 8,5,1,0},   //*7C - NOP $8000,X
-                          {"ADC", 8,5,0,2},   // 7D - ADC $8000,X / add +1 if page boundary is crossed
-                          {"ROR", 8,7,0,5},   // 7E - ROR $8000,X
-                          {"RRA", 8,8,1,9},   //*7F - RRA $8000,X
-
-                          {"NOP", AM_IMMEDIATE,2,1,0},   //*80 - NOP #$00
-                          {"STA",11,6,0,5},   // 81 - STA ($B0,X)
-                          {"NOP", AM_IMMEDIATE,2,1,0},   //*82 - NOP ($B0,X)
-                          {"AXX",11,8,1,9},   //*83 - AXX ($B0,X)
-                          {"STY", 5,3,0,5},   // 84 - STY $50
-                          {"STA", 5,3,0,5},   // 85 - STA $50
-                          {"STX", 5,3,0,5},   // 86 - STX $50
-                          {"SAX", 5,5,1,9},   //*87 - AXR $50
-                          {"DEY", AM_IMPLIED,2,0,4},   // 88 - DEY
-                          {"NOP", AM_IMMEDIATE,2,1,0},   //*89 - NOP #$20
-                          {"TXA", AM_IMPLIED,2,0,2},   // 8A - TXA
-                          {"XAA", AM_IMMEDIATE,2,1,9},   //*8B - TAN #$20
-                          {"STY", 3,4,0,5},   // 8C - STY $3000
-                          {"STA", 3,4,0,5},   // 8D - STA $3000
-                          {"STX", 3,4,0,5},   // 8E - STX $3000
-                          {"SAX", 3,4,1,9},   //*8F - SAX $3000
-
-                          {"BCC",12,4,0,9},   // 90 - BNE $C000 / add +1 if branch on same page, +2 othervise
-                          {"STA",10,6,0,5},   // 91 - STA ($A0),Y
-                          {"ABS", AM_IMPLIED,2,1,9},   //*92 - ABS
-                          {"AHX",10,7,1,9},   //*93 - AXI ($A0),Y - hmm????????????????
-                          {"STY", 6,4,0,5},   // 94 - STY $60,X
-                          {"STA", 6,4,0,5},   // 95 - STA $60,X
-                          {"STX", 7,4,0,5},   // 96 - STX $70,Y
-                          {"AXY", 7,4,1,9},   //*97 - AXY $70,X
-                          {"TYA", AM_IMPLIED,2,0,2},   // 98 - TYA
-                          {"STA", 9,5,0,5},   // 99 - STA $9000,Y
-                          {"TXS", AM_IMPLIED,2,0,9},   // 9A - TXS
-                          {"TAS", 9,6,1,9},   //*9B - AXS $9000,Y
-                          {"SHY", 9,4,1,9},   //*9C - AYI/SHY $0000,X
-                          {"STA", 8,5,0,5},   // 9D - STA $8000,X
-                          {"SHX", 9,4,1,9},   //*9E - SXI/SHX $0000,Y
-                          {"AHX", 9,4,1,9},   //*9F - AXI/SHA $0000,Y
-
-                          {"LDY", AM_IMMEDIATE,2,0,4},   // A0 - LDY #$20
-                          {"LDA",11,6,0,2},   // A1 - LDA ($B0,X)
-                          {"LDX", AM_IMMEDIATE,2,0,3},   // A2 - LDX #$20
-                          {"LAX",11,6,1,6},   //*A3 - LAX ($B0,X)
-                          {"LDY", 5,3,0,4},   // A4 - LDY $50
-                          {"LDA", 5,3,0,2},   // A5 - LDA $50
-                          {"LDX", 5,3,0,3},   // A6 - LDX $50
-                          {"LAX", 5,3,1,6},   //*A7 - LAX $50
-                          {"TAY", AM_IMPLIED,2,0,4},   // A8 - TAY
-                          {"LDA", AM_IMMEDIATE,2,0,2},   // A9 - LDA #$20
-                          {"TAX", AM_IMPLIED,2,0,3},   // AA - TAX
-                          {"ANX", AM_IMMEDIATE,2,1,9},   //*AB - ANX #$20
-                          {"LDY", 3,4,0,4},   // AC - LDY $3000
-                          {"LDA", 3,4,0,2},   // AD - LDA $3000
-                          {"LDX", 3,4,0,3},   // AE - LDX $3000
-                          {"LAX", 3,4,1,6},   //*AF - LAX $3000
-
-                          {"BCS",12,4,0,9},   // B0 - BCS $C000 / add +1 if branch on same page, +2 othervise
-                          {"LDA",10,6,0,2},   // B1 - LDA ($A0),Y / add +1 if page boundary is crossed
-                          {"ABS", AM_IMPLIED,2,1,1},   //*B2 - ABS
-                          {"LAX",10,6,1,6},   //*B3 - LAX ($A0),Y
-                          {"LDY", 6,4,0,4},   // B4 - LDY $60,X
-                          {"LDA", 6,4,0,2},   // B5 - LDA $60,X
-                          {"LDX", 7,4,0,3},   // B6 - LDX $70,Y
-                          {"LAX", 7,4,1,6},   //*B7 - LAX $70,X
-                          {"CLV", AM_IMPLIED,2,0,9},   // B8 - CLV
-                          {"LDA", 9,5,0,2},   // B9 - LDA $9000,X / add +1 if page boundary is crossed
-                          {"TSX", AM_IMPLIED,2,0,9},   // BA - TSX
-                          {"TSA", 8,5,1,9},   //*BB - TSA $8000,X or Y???
-                          {"LDY", 8,5,0,4},   // BC - LDY $8000,X / add +1 if page boundary is crossed
-                          {"LDA", 8,5,0,2},   // BD - LDA $8000,X / add +1 if page boundary is crossed
-                          {"LDX", 9,5,0,3},   // BE - LDX $9000,Y / add +1 if page boundary is crossed
-                          {"LAX", 9,5,1,6},   //*BF - LAX $9000,Y
-
-                          {"CPY", AM_IMMEDIATE,2,0,9},   // C0 - CPY #$20
-                          {"CMP",11,6,0,7},   // C1 - CMP ($B0,X)
-                          {"NOP",11,2,1,0},   //*C2 - NOP ($B0,X)
-                          {"DCP",11,8,1,9},   //*C3 - DCP ($B0,X)
-                          {"CPY", 5,3,0,9},   // C4 - CPY $50
-                          {"CMP", 5,3,0,7},   // C5 - CMP $50
-                          {"DEC", 5,5,0,5},   // C6 - DEC $50
-                          {"DCP", 5,5,1,9},   //*C7 - DCP $50
-                          {"INY", AM_IMPLIED,2,0,4},   // C8 - INY
-                          {"CMP", AM_IMMEDIATE,2,0,9},   // C9 - CMP #$20
-                          {"DEX", AM_IMPLIED,2,0,3},   // CA - DEX
-                          {"XAS", AM_IMMEDIATE,2,1,9},   //*CB - XAS #$20
-                          {"CPY", 3,4,0,9},   // CC - CPY $3000
-                          {"CMP", 3,4,0,7},   // CD - CMP $3000
-                          {"DEC", 3,6,0,5},   // CE - DEC $3000
-                          {"DCP", 3,6,1,9},   //*CF - DCP $3000
-
-                          {"BNE",12,4,0,9},   // D0 - BNE $C000 / add +1 if branch on same page, +2 othervise
-                          {"CMP",10,6,0,7},   // D1 - CMP ($A0),Y / add +1 if page boundary is crossed
-                          {"ABS", AM_IMPLIED,2,1,1},   //*D2 - ABS
-                          {"DCP",10,9,1,9},   //*D3 - DCP ($A0),Y
-                          {"NOP", 6,4,1,0},   //*D4 - NOP $60,X
-                          {"CMP", 6,4,0,7},   // D5 - CMP $60,X
-                          {"DEC", 6,6,0,5},   // D6 - DEC $60,X
-                          {"DCP", 7,6,1,9},   //*D7 - DCP $70,X or Y??
-                          {"CLD", AM_IMPLIED,2,0,9},   // D8 - CLD
-                          {"CMP", 9,5,0,7},   // D9 - CMP $9000,Y / add +1 if page boundary is crossed
-                          {"NOP", AM_IMPLIED,2,1,0},   //*DA - NOP
-                          {"DCP", 9,8,0,9},   //*DB - DCP $9000,Y
-                          {"NOP", 8,5,1,0},   //*DC - NOP $8000,X
-                          {"CMP", 8,5,0,7},   // DD - CMP $8000,X / add +1 if page boundary is crossed
-                          {"DEC", 8,7,0,5},   // DE - DEC $8000,X
-                          {"DCP", 8,8,1,9},   //*DF - DCP $8000,X
-
-                          {"CPX", AM_IMMEDIATE,2,0,9},   // E0 - CPX #$20
-                          {"SBC",11,6,0,2},   // E1 - SBC ($B0,X)
-                          {"NOP",11,2,1,0},   //*E2 - NOP ($B0,X)
-                          {"ISC",11,8,1,9},   //*E3 - ISC ($B0,X)
-                          {"CPX", 5,3,0,9},   // E4 - CPX $50
-                          {"SBC", 5,3,0,2},   // E5 - SBC $50
-                          {"INC", 5,5,0,5},   // E6 - INC $50
-                          {"ISC", 5,5,1,9},   //*E7 - ISC $50
-                          {"INX", AM_IMPLIED,2,0,3},   // E8 - INX
-                          {"SBC", AM_IMMEDIATE,2,0,2},   // E9 - SBC #$20
-                          {"NOP", AM_IMPLIED,2,0,0},   // EA - NOP
-                          {"SBC", AM_IMMEDIATE,2,1,2},   //*EB - SBC #$20
-                          {"CPX", 3,4,0,9},   // EC - CPX $3000
-                          {"SBC", 3,4,0,2},   // ED - SBC $3000
-                          {"INC", 3,6,0,5},   // EE - INC $3000
-                          {"ISC", 3,6,1,9},   //*EF - ISC $3000
-
-                          {"BEQ",12,4,0,9},   // F0 - BEQ $C000 / add +1 if branch on same page, +2 othervise
-                          {"SBC",10,6,0,2},   // F1 - SBC ($A0),Y
-                          {"ABS", AM_IMPLIED,2,1,1},   //*F2 - ABS
-                          {"ISC",10,9,1,9},   //*F3 - ISC ($A0),Y
-                          {"NOP", 6,4,1,0},   //*F4 - NOP $60,X
-                          {"SBC", 6,5,0,2},   // F5 - SBC $60,X / add +1 if page boundary is crossed
-                          {"INC", 6,6,0,5},   // F6 - INC $60,X
-                          {"ISC", 6,6,1,9},   //*F7 - ISC $60,X
-                          {"SED", AM_IMPLIED,2,0,9},   // F8 - SED
-                          {"SBC", 9,5,0,2},   // F9 - SBC $9000,Y / +1 on boundary crossing
-                          {"NOP", AM_IMPLIED,2,1,0},   //*FA - NOP
-                          {"ISC", 9,8,1,9},   //*FB - ISC $9000,Y
-                          {"NOP", 8,5,1,0},   //*FC - NOP $8000,X
-                          {"SBC", 8,5,0,2},   // FD - SBC $8000,X / add +1 if page boundary is crossed
-                          {"INC", 8,7,0,5},   // FE - INC $8000,X
-                          {"ISC", 8,8,1,9},   //*FF - ISC $8000,X
-                        };

+ 0 - 227
soloud.mod/soloud/src/tools/tedsid2dump/main.cpp

@@ -1,227 +0,0 @@
-#include <iostream>
-#include "psid.h"
-#include "tedmem.h"
-#include "tedplay.h"
-
-using namespace std;
-
-
-static void printHeader()
-{
-	printf("TedSid2Dump - TED / SID register write dumper for SoLoud\nCopyright 2015 Jari Komppa\n"
-		"Based on tedplay - a (mostly) Commodore 264 family media player\nCopyright 2012 Attila Grosz\n"
-		"\n");
-}
-
-static void printUsage()
-{
-	printf("Usage:\n"
-		"tedsid2dump filename msecs [-s speed] [-m sid model] [-t tune number] [-i]\n\n"
-		"Where:\n"
-		"-s 1-6, song speed. 3 = single, 5 = double. Default 3\n"
-		"-m model 0:6581 1:8580 2:8580DB 3:6581R1. Default 1\n"
-		"-t the number of sub-tune to play. Default 1\n"
-		"-i Show information and quit\n"
-		"-q Quantize timestamps by 1000 ticks\n\n"
-		"Example:\n"
-		"tedsid2dump foobar.sid 60000 -s 5 -m 0 -t 1\n\n");		
-// s = setplaybackSpeed(3);// 5);// 3);
-// m = setModel
-// t = ~psidChangeTrack
-}
-
-extern void process(int ticks);
-FILE * outfile = NULL;
-int oldregs[1024] = {
-	-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, -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, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
-};
-int lasttime = 0;
-int currtime = 0;
-int firstwrite = 1;
-int quantize = 0;
-int regwrites = 0;
-
-void storeregwrite(int reg, int value)
-{
-	if (!outfile)
-		return;
-	if (oldregs[reg] != value)
-	{
-		oldregs[reg] = value;
-		int timedelta = currtime - lasttime;
-		// skip start silence
-		if (firstwrite)
-		{
-			timedelta = 0;
-		}
-		while (timedelta > 0x7fff)
-		{
-			// If we have a long delay, write NOPs
-			unsigned short stimedelta = 0xffff;
-			fwrite(&stimedelta, 1, 2, outfile);
-			unsigned char a = 100; // nop
-			fwrite(&a, 1, 1, outfile);
-			a = 0;
-			fwrite(&a, 1, 1, outfile);
-			timedelta -= 0x7fff;
-		}
-		if (timedelta > 1000*quantize || firstwrite)
-		{
-			unsigned short stimedelta = timedelta | 0x8000;
-			fwrite(&stimedelta, 1, 2, outfile);
-			lasttime = currtime;
-		}
-		fwrite(&value, 1, 1, outfile);
-		unsigned char a = reg;
-		fwrite(&a, 1, 1, outfile);
-		regwrites++;
-		firstwrite = 0;
-	}
-}
-
-extern int selected_model;
-
-int main(int argc, char *argv[])
-{
-	printHeader();
-    if (argc < 3) {
-        printUsage();
-        return -1;
-    }
-	
-	char * fn = NULL; // first non- '-' param
-	int msec = 0; // second non- '-' param
-	int speed = 3;
-	int model = -1;
-	int tune = 1;
-	int info = 0;
-
-	int i;
-	for (i = 1; i < argc; i++)
-	{
-		char *s = argv[i];
-		if (s[0] == '-')
-		{
-			switch (s[1])
-			{
-			case 's':
-			case 'S':
-				i++;
-				speed = atoi(argv[i]);
-				if (speed <= 0)
-				{
-					printf("Error: invalid speed number.\n");
-					return -1;
-				}
-				break;
-			case 'm':
-			case 'M':
-				i++;
-				model = atoi(argv[i]);
-				if (model <= 0)
-				{
-					printf("Error: invalid model number.\n");
-					return -1;
-				}
-				break;
-			case 't':
-			case 'T':
-				i++;
-				tune = atoi(argv[i]);
-				if (tune <= 0)
-				{
-					printf("Error: invalid tune number.\n");
-					return -1;
-				}
-				break;
-			case 'i':
-			case 'I':
-				info = 1;			
-				break;
-			case 'q':
-			case 'Q':
-				quantize = 1;
-				break;
-			}
-		}
-		else
-		{
-			if (fn == NULL)
-			{
-				fn = s;
-				FILE * f = fopen(s, "rb");
-				if (!f)
-				{
-					printf("Error: %s not found. Run without parameters for help.\n", s);
-					return -1;
-				}
-				fclose(f);
-			}
-			else
-			{
-				msec = atoi(s);
-				if (msec <= 0)
-				{
-					printf("Error: Milliseconds <= 0. Run without parameters for help.\n");
-					return -1;
-				}
-			}
-		}
-	}
-
-	if (fn == NULL)
-	{
-		printf("Error: No filename given. Run without parameters for help.\n");
-		return -1;
-	}
-
-	char outfilename[2048];
-	sprintf(outfilename, "%s.dump", fn);
-
-	int outputMilliseconds = msec;
-
-	machineInit();
-	int retval = tedplayMain(fn, model);
-	if (0 == retval) 
-	{
-		printPsidInfo(getPsidHeader());
-		if (info)
-		{
-			return 0;
-		}
-		tedPlaySetSpeed(speed);
-		int i;
-		for (i = 1; i < tune; i++)
-			psidChangeTrack(1);
-		
-		outfile = fopen(outfilename, "wb");
-		fputc('D', outfile);
-		fputc('u', outfile);
-		fputc('m', outfile);
-		fputc('p', outfile);
-		fputc(0, outfile);
-		fputc(selected_model, outfile);
-		fputc(0, outfile);
-		fputc(0, outfile);
-
-		for (i = 0; i < outputMilliseconds; i++)
-		{
-			if (i % 1000 == 0 || i == outputMilliseconds-1)
-			printf("\rRendering %02d:%02d (%3.1f%%)", (i+1) / (60 * 1000), ((i+1) / 1000) % 60, ((i+1)*100.0f)/outputMilliseconds);
-			process(TED_SOUND_CLOCK / 1000); // 1 ms
-		}
-		fclose(outfile);
-		printf("\n%d regwrites written to %s\n", regwrites, outfilename);
-		printf("\nAll done.\n");
-		tedplayClose();
-	}
-
-    return retval;
-}

+ 0 - 12
soloud.mod/soloud/src/tools/tedsid2dump/mem.h

@@ -1,12 +0,0 @@
-#ifndef _MEM_H
-#define _MEM_H
-
-// Abstract Memory handler superclass for all memory handler objects
-class MemoryHandler {
-public:
-	virtual void Write(unsigned int addr, unsigned char data) = 0;
-	virtual unsigned char Read(unsigned int addr) = 0;
-	virtual void Reset() = 0;
-};
-
-#endif // _MEM_H

+ 0 - 59
soloud.mod/soloud/src/tools/tedsid2dump/psid.h

@@ -1,59 +0,0 @@
-#pragma once
-
-// Minimum and maximum header length
-const int PSID_MIN_HEADER_LENGTH = 118;		// Version 1
-const int PSID_MAX_HEADER_LENGTH = 124;		// Version 2
-
-// Offsets of fields in header (all fields big-endian)
-enum {
-	PSID_ID = 0,			// 'PSID'
-	PSID_VERSION = 4,		// 1 or 2
-	PSID_LENGTH = 6,		// Header length
-	PSID_START = 8,			// C64 load address
-	PSID_INIT = 10,			// C64 init routine address
-	PSID_MAIN = 12,			// C64 replay routine address
-	PSID_NUMBER = 14,		// Number of subsongs
-	PSID_DEFSONG = 16,		// Main subsong number
-	PSID_SPEED = 18,		// Speed flags (1 bit/song)
-	PSID_NAME = 22,			// Module name (ISO Latin1 character set)
-	PSID_AUTHOR = 54,		// Author name (dto.)
-	PSID_COPYRIGHT = 86,	// Copyright info (dto.)
-	PSID_FLAGS = 118,		// Flags (only in version 2 header)
-	PSID_RESERVED = 120
-};
-
-struct PsidHeader {
-	std::string fileName;
-	unsigned int tracks;
-	unsigned int initAddress;
-	unsigned int replayAddress;
-	unsigned int loadAddress;
-	unsigned int defaultTune;
-	char title[512];
-	char author[512];
-	char copyright[512];
-	char model[32];
-	unsigned int type;
-	std::string typeName;
-	unsigned int version;
-	unsigned int current;
-	unsigned char *playerCode;
-	unsigned int *playerLength;
-};
-
-// Read 16-bit quantity from PSID header
-inline unsigned short readPsid16(const unsigned char *p, int offset)
-{
-	return (p[offset] << 8) | p[offset + 1];
-}
-
-// Read 32-bit quantity from PSID header
-inline unsigned int readPsid32(const unsigned char *p, int offset)
-{
-	return (p[offset] << 24) | (p[offset + 1] << 16) | (p[offset + 2] << 8) | p[offset + 3];
-}
-
-extern bool psidChangeTrack(int direction);
-extern void printPsidInfo(PsidHeader &psidHdr_);
-extern PsidHeader &getPsidHeader();
-extern void getPsidProperties(PsidHeader &psidHdr_, char *text);

+ 0 - 1
soloud.mod/soloud/src/tools/tedsid2dump/readme.txt

@@ -1 +0,0 @@
-The TED / SID support is based on tedplay (c) 2012 Attila Grosz, used under Unlicense http://unlicense.org/

+ 0 - 4129
soloud.mod/soloud/src/tools/tedsid2dump/roms.h

@@ -1,4129 +0,0 @@
-/*
-
-  BASIC ROM image of the Commodore 264 family.
-  Located at $8000-$BFFF.
-
-*/
-
-unsigned char basic[]={
-0x4c,
-0x19, 0x80, 0x4c, 0xa, 0x80, 0x0, 0x43, 0x42, 0x4d, 0x20, 0xcc, 0xff, 0x20, 0xd8, 0x8a, 0x85,
-0x13, 0x20, 0xc9, 0xc7, 0x58, 0x4c, 0x7e, 0x86, 0x20, 0x17, 0x81, 0x20, 0x2e, 0x80, 0x20, 0xc2,
-0x80, 0x20, 0xf4, 0xfc, 0xa2, 0xfb, 0x9a, 0xd0, 0xec, 0x71, 0x98, 0x71, 0x94, 0xa9, 0x4c, 0x85,
-0x54, 0x8d, 0x0, 0x5, 0xa9, 0x1c, 0xa0, 0x99, 0x8d, 0x1, 0x5, 0x8c, 0x2, 0x5, 0xa2, 0x3,
-0xbd, 0x2a, 0x80, 0x9d, 0xf2, 0x2, 0xca, 0x10, 0xf7, 0xa2, 0x32, 0xbd, 0x22, 0x81, 0x9d, 0x72,
-0x4, 0xca, 0xd0, 0xf7, 0x86, 0x68, 0x86, 0x13, 0x86, 0x18, 0x8e, 0xeb, 0x2, 0x8e, 0x0, 0x10,
-0x8a, 0xa2, 0x3, 0x95, 0x72, 0x9d, 0xe5, 0x2, 0xca, 0xd0, 0xf8, 0xea, 0x8e, 0x3, 0x5, 0xe8,
-0x8e, 0xfd, 0x1, 0x8e, 0xfc, 0x1, 0xae, 0x3b, 0x5, 0x86, 0x86, 0xa2, 0x36, 0x86, 0x85, 0xa2,
-0x19, 0x86, 0x16, 0xa2, 0x1, 0xa0, 0x10, 0x86, 0x2b, 0x84, 0x2c, 0xa2, 0x5, 0x86, 0x22, 0xa9,
-0xd0, 0x8d, 0xe4, 0x2, 0xa2, 0x2, 0xbd, 0x32, 0x5, 0x95, 0x36, 0x95, 0x32, 0xca, 0xd0, 0xf6,
-0xa0, 0x0, 0xb9, 0x47, 0x81, 0x9d, 0xa5, 0x4, 0xe8, 0xc8, 0xc0, 0xb, 0x90, 0xf4, 0xa4, 0x22,
-0xb9, 0xbc, 0x80, 0x9d, 0x9f, 0x4, 0xc6, 0x22, 0x10, 0xe6, 0x60, 0x64, 0x5f, 0x6f, 0x24, 0x22,
-0x3b, 0xa5, 0x2b, 0xa4, 0x2c, 0x20, 0x23, 0x89, 0x20, 0x4f, 0xff, 0x93, 0xd, 0x20, 0x43, 0x4f,
-0x4d, 0x4d, 0x4f, 0x44, 0x4f, 0x52, 0x45, 0x20, 0x42, 0x41, 0x53, 0x49, 0x43, 0x20, 0x56, 0x33,
-0x2e, 0x35, 0x20, 0x0, 0xa5, 0x37, 0x38, 0xe5, 0x2b, 0xaa, 0xa5, 0x38, 0xe5, 0x2c, 0x20, 0x5f,
-0xa4, 0x20, 0x4f, 0xff, 0x20, 0x42, 0x59, 0x54, 0x45, 0x53, 0x20, 0x46, 0x52, 0x45, 0x45, 0xd,
-0x0, 0x4c, 0x7b, 0x8a, 0x86, 0x86, 0x12, 0x87, 0x56, 0x89, 0x6e, 0x8b, 0xd6, 0x8b, 0x17, 0x94,
-0x6a, 0x89, 0x88, 0x8b, 0x8b, 0x8c, 0xa2, 0x11, 0xbd, 0x5, 0x81, 0x9d, 0x0, 0x3, 0xca, 0x10,
-0xf7, 0x60, 0xe6, 0x3b, 0xd0, 0x2, 0xe6, 0x3c, 0x78, 0x8d, 0x3f, 0xff, 0xa0, 0x0, 0xb1, 0x3b,
-0x8d, 0x3e, 0xff, 0x58, 0xc9, 0x3a, 0xb0, 0xa, 0xc9, 0x20, 0xf0, 0xe6, 0x38, 0xe9, 0x30, 0x38,
-0xe9, 0xd0, 0x60, 0x8d, 0x9c, 0x4, 0x78, 0x8d, 0x3f, 0xff, 0xb1, 0x0, 0x8d, 0x3e, 0xff, 0x58,
-0x60, 0x0, 0x0, 0x0, 0xa9, 0x43, 0xd0, 0x32, 0xa9, 0x4e, 0xd0, 0x2e, 0xa9, 0x14, 0xd0, 0x2a,
-0xa9, 0x47, 0xd0, 0x26, 0xa9, 0x4e, 0xd0, 0x22, 0xa9, 0x5c, 0xd0, 0x1e, 0xa9, 0x5f, 0xd0, 0x1a,
-0xa9, 0x3d, 0xd0, 0x16, 0xa9, 0x57, 0xd0, 0x12, 0xa9, 0x59, 0xd0, 0xe, 0xa9, 0x62, 0xd0, 0xa,
-0xa9, 0x50, 0xd0, 0x6, 0xa9, 0x6c, 0xd0, 0x2, 0xa9, 0x5a, 0x4c, 0x94, 0x4, 0x45, 0x4e, 0xc4,
-0x46, 0x4f, 0xd2, 0x4e, 0x45, 0x58, 0xd4, 0x44, 0x41, 0x54, 0xc1, 0x49, 0x4e, 0x50, 0x55, 0x54,
-0xa3, 0x49, 0x4e, 0x50, 0x55, 0xd4, 0x44, 0x49, 0xcd, 0x52, 0x45, 0x41, 0xc4, 0x4c, 0x45, 0xd4,
-0x47, 0x4f, 0x54, 0xcf, 0x52, 0x55, 0xce, 0x49, 0xc6, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0xc5,
-0x47, 0x4f, 0x53, 0x55, 0xc2, 0x52, 0x45, 0x54, 0x55, 0x52, 0xce, 0x52, 0x45, 0xcd, 0x53, 0x54,
-0x4f, 0xd0, 0x4f, 0xce, 0x57, 0x41, 0x49, 0xd4, 0x4c, 0x4f, 0x41, 0xc4, 0x53, 0x41, 0x56, 0xc5,
-0x56, 0x45, 0x52, 0x49, 0x46, 0xd9, 0x44, 0x45, 0xc6, 0x50, 0x4f, 0x4b, 0xc5, 0x50, 0x52, 0x49,
-0x4e, 0x54, 0xa3, 0x50, 0x52, 0x49, 0x4e, 0xd4, 0x43, 0x4f, 0x4e, 0xd4, 0x4c, 0x49, 0x53, 0xd4,
-0x43, 0x4c, 0xd2, 0x43, 0x4d, 0xc4, 0x53, 0x59, 0xd3, 0x4f, 0x50, 0x45, 0xce, 0x43, 0x4c, 0x4f,
-0x53, 0xc5, 0x47, 0x45, 0xd4, 0x4e, 0x45, 0xd7, 0x54, 0x41, 0x42, 0xa8, 0x54, 0xcf, 0x46, 0xce,
-0x53, 0x50, 0x43, 0xa8, 0x54, 0x48, 0x45, 0xce, 0x4e, 0x4f, 0xd4, 0x53, 0x54, 0x45, 0xd0, 0xab,
-0xad, 0xaa, 0xaf, 0xde, 0x41, 0x4e, 0xc4, 0x4f, 0xd2, 0xbe, 0xbd, 0xbc, 0x53, 0x47, 0xce, 0x49,
-0x4e, 0xd4, 0x41, 0x42, 0xd3, 0x55, 0x53, 0xd2, 0x46, 0x52, 0xc5, 0x50, 0x4f, 0xd3, 0x53, 0x51,
-0xd2, 0x52, 0x4e, 0xc4, 0x4c, 0x4f, 0xc7, 0x45, 0x58, 0xd0, 0x43, 0x4f, 0xd3, 0x53, 0x49, 0xce,
-0x54, 0x41, 0xce, 0x41, 0x54, 0xce, 0x50, 0x45, 0x45, 0xcb, 0x4c, 0x45, 0xce, 0x53, 0x54, 0x52,
-0xa4, 0x56, 0x41, 0xcc, 0x41, 0x53, 0xc3, 0x43, 0x48, 0x52, 0xa4, 0x4c, 0x45, 0x46, 0x54, 0xa4,
-0x52, 0x49, 0x47, 0x48, 0x54, 0xa4, 0x4d, 0x49, 0x44, 0xa4, 0x47, 0xcf, 0x52, 0x47, 0xd2, 0x52,
-0x43, 0x4c, 0xd2, 0x52, 0x4c, 0x55, 0xcd, 0x4a, 0x4f, 0xd9, 0x52, 0x44, 0x4f, 0xd4, 0x44, 0x45,
-0xc3, 0x48, 0x45, 0x58, 0xa4, 0x45, 0x52, 0x52, 0xa4, 0x49, 0x4e, 0x53, 0x54, 0xd2, 0x45, 0x4c,
-0x53, 0xc5, 0x52, 0x45, 0x53, 0x55, 0x4d, 0xc5, 0x54, 0x52, 0x41, 0xd0, 0x54, 0x52, 0x4f, 0xce,
-0x54, 0x52, 0x4f, 0x46, 0xc6, 0x53, 0x4f, 0x55, 0x4e, 0xc4, 0x56, 0x4f, 0xcc, 0x41, 0x55, 0x54,
-0xcf, 0x50, 0x55, 0x44, 0x45, 0xc6, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0xc3, 0x50, 0x41, 0x49,
-0x4e, 0xd4, 0x43, 0x48, 0x41, 0xd2, 0x42, 0x4f, 0xd8, 0x43, 0x49, 0x52, 0x43, 0x4c, 0xc5, 0x47,
-0x53, 0x48, 0x41, 0x50, 0xc5, 0x53, 0x53, 0x48, 0x41, 0x50, 0xc5, 0x44, 0x52, 0x41, 0xd7, 0x4c,
-0x4f, 0x43, 0x41, 0x54, 0xc5, 0x43, 0x4f, 0x4c, 0x4f, 0xd2, 0x53, 0x43, 0x4e, 0x43, 0x4c, 0xd2,
-0x53, 0x43, 0x41, 0x4c, 0xc5, 0x48, 0x45, 0x4c, 0xd0, 0x44, 0xcf, 0x4c, 0x4f, 0x4f, 0xd0, 0x45,
-0x58, 0x49, 0xd4, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x4f, 0x52, 0xd9, 0x44, 0x53, 0x41, 0x56,
-0xc5, 0x44, 0x4c, 0x4f, 0x41, 0xc4, 0x48, 0x45, 0x41, 0x44, 0x45, 0xd2, 0x53, 0x43, 0x52, 0x41,
-0x54, 0x43, 0xc8, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0xd4, 0x43, 0x4f, 0x50, 0xd9, 0x52, 0x45,
-0x4e, 0x41, 0x4d, 0xc5, 0x42, 0x41, 0x43, 0x4b, 0x55, 0xd0, 0x44, 0x45, 0x4c, 0x45, 0x54, 0xc5,
-0x52, 0x45, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0xd2, 0x4b, 0x45, 0xd9, 0x4d, 0x4f, 0x4e, 0x49, 0x54,
-0x4f, 0xd2, 0x55, 0x53, 0x49, 0x4e, 0xc7, 0x55, 0x4e, 0x54, 0x49, 0xcc, 0x57, 0x48, 0x49, 0x4c,
-0xc5, 0x0, 0xd9, 0x8c, 0xc9, 0xad, 0x93, 0x92, 0xaf, 0x8d, 0xed, 0x90, 0x7, 0x91, 0x9a, 0x96,
-0x4e, 0x91, 0x7b, 0x8e, 0x4c, 0x8d, 0xbb, 0x8b, 0xe0, 0x8d, 0x99, 0x8c, 0x2b, 0x8d, 0x82, 0x8d,
-0xa, 0x8e, 0xd7, 0x8c, 0x1a, 0x8e, 0x69, 0x9e, 0xf2, 0xa7, 0xdd, 0xa7, 0xef, 0xa7, 0x9c, 0x9a,
-0x11, 0x9e, 0xdf, 0x8f, 0xff, 0x8f, 0x2, 0x8d, 0xfe, 0x8a, 0x97, 0x8a, 0xe5, 0x8f, 0xb4, 0xa7,
-0x4c, 0xa8, 0x59, 0xa8, 0xb7, 0x90, 0x78, 0x8a, 0xa, 0x8e, 0x3f, 0xb4, 0x2a, 0xb4, 0x51, 0xb6,
-0x54, 0xb6, 0x48, 0xb8, 0xbc, 0xb8, 0xcc, 0xb6, 0x43, 0xb5, 0xc2, 0xc5, 0xd0, 0xb8, 0xd3, 0xb9,
-0xe1, 0xba, 0x1d, 0xc0, 0x34, 0xbd, 0x28, 0xbe, 0xd8, 0xc4, 0xe, 0xc5, 0x19, 0xc5, 0x66, 0xc5,
-0xb7, 0xc5, 0xe7, 0xb6, 0x56, 0xb5, 0x2, 0xb6, 0xab, 0xb5, 0xbb, 0xc8, 0x40, 0xc9, 0x50, 0xc9,
-0x67, 0xc9, 0x9b, 0xc9, 0xcb, 0xc9, 0xd9, 0xc9, 0xf3, 0xc9, 0xff, 0xc9, 0x59, 0xae, 0x8e, 0xab,
-0x28, 0xb7, 0x51, 0xff, 0xbe, 0xa2, 0x58, 0xa3, 0xdd, 0xa2, 0x0, 0x5, 0x62, 0x9a, 0x7d, 0x9a,
-0xe4, 0xa5, 0x7, 0xa7, 0x1e, 0xa0, 0x60, 0xa6, 0x70, 0xaa, 0x77, 0xaa, 0xc0, 0xaa, 0x1a, 0xab,
-0xfa, 0x9d, 0x61, 0x9d, 0x66, 0x9b, 0x93, 0x9d, 0x70, 0x9d, 0xbb, 0x9c, 0xcf, 0x9c, 0x3, 0x9d,
-0x15, 0x9d, 0x79, 0xbf, 0x85, 0xbf, 0x87, 0xbf, 0xc1, 0xbf, 0xfd, 0xbf, 0x1b, 0x9e, 0x7, 0xb5,
-0xbe, 0xb4, 0x79, 0x9d, 0x9e, 0x79, 0x86, 0x9e, 0x7b, 0x7a, 0xa0, 0x7b, 0x96, 0xa1, 0x7f, 0xed,
-0xa5, 0x50, 0xfa, 0x95, 0x46, 0xf7, 0x95, 0x7d, 0x26, 0xa6, 0x5a, 0x64, 0x94, 0x64, 0x27, 0x96,
-0x54, 0x4f, 0x4f, 0x20, 0x4d, 0x41, 0x4e, 0x59, 0x20, 0x46, 0x49, 0x4c, 0x45, 0xd3, 0x46, 0x49,
-0x4c, 0x45, 0x20, 0x4f, 0x50, 0x45, 0xce, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x4e, 0x4f, 0x54, 0x20,
-0x4f, 0x50, 0x45, 0xce, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x46, 0x4f, 0x55,
-0x4e, 0xc4, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x50, 0x52, 0x45,
-0x53, 0x45, 0x4e, 0xd4, 0x4e, 0x4f, 0x54, 0x20, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x20, 0x46, 0x49,
-0x4c, 0xc5, 0x4e, 0x4f, 0x54, 0x20, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x20, 0x46, 0x49, 0x4c,
-0xc5, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x4e, 0x41,
-0x4d, 0xc5, 0x49, 0x4c, 0x4c, 0x45, 0x47, 0x41, 0x4c, 0x20, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45,
-0x20, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0xd2, 0x4e, 0x45, 0x58, 0x54, 0x20, 0x57, 0x49, 0x54, 0x48,
-0x4f, 0x55, 0x54, 0x20, 0x46, 0x4f, 0xd2, 0x53, 0x59, 0x4e, 0x54, 0x41, 0xd8, 0x52, 0x45, 0x54,
-0x55, 0x52, 0x4e, 0x20, 0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x20, 0x47, 0x4f, 0x53, 0x55,
-0xc2, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, 0x20, 0x44, 0x41, 0x54, 0xc1, 0x49, 0x4c, 0x4c, 0x45,
-0x47, 0x41, 0x4c, 0x20, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x49, 0x54, 0xd9, 0x4f, 0x56, 0x45, 0x52,
-0x46, 0x4c, 0x4f, 0xd7, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, 0x20, 0x4d, 0x45, 0x4d, 0x4f, 0x52,
-0xd9, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x27, 0x44, 0x20, 0x53, 0x54, 0x41, 0x54, 0x45, 0x4d, 0x45,
-0x4e, 0xd4, 0x42, 0x41, 0x44, 0x20, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0xd4, 0x52,
-0x45, 0x44, 0x49, 0x4d, 0x27, 0x44, 0x20, 0x41, 0x52, 0x52, 0x41, 0xd9, 0x44, 0x49, 0x56, 0x49,
-0x53, 0x49, 0x4f, 0x4e, 0x20, 0x42, 0x59, 0x20, 0x5a, 0x45, 0x52, 0xcf, 0x49, 0x4c, 0x4c, 0x45,
-0x47, 0x41, 0x4c, 0x20, 0x44, 0x49, 0x52, 0x45, 0x43, 0xd4, 0x54, 0x59, 0x50, 0x45, 0x20, 0x4d,
-0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0xc8, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x20, 0x54, 0x4f,
-0x4f, 0x20, 0x4c, 0x4f, 0x4e, 0xc7, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x44, 0x41, 0x54, 0xc1, 0x46,
-0x4f, 0x52, 0x4d, 0x55, 0x4c, 0x41, 0x20, 0x54, 0x4f, 0x4f, 0x20, 0x43, 0x4f, 0x4d, 0x50, 0x4c,
-0x45, 0xd8, 0x43, 0x41, 0x4e, 0x27, 0x54, 0x20, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0xc5,
-0x55, 0x4e, 0x44, 0x45, 0x46, 0x27, 0x44, 0x20, 0x46, 0x55, 0x4e, 0x43, 0x54, 0x49, 0x4f, 0xce,
-0x56, 0x45, 0x52, 0x49, 0x46, 0xd9, 0x4c, 0x4f, 0x41, 0xc4, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x0,
-0xa0, 0x43, 0x41, 0x4e, 0x27, 0x54, 0x20, 0x52, 0x45, 0x53, 0x55, 0x4d, 0xc5, 0x4c, 0x4f, 0x4f,
-0x50, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x46, 0x4f, 0x55, 0x4e, 0xc4, 0x4c, 0x4f, 0x4f, 0x50, 0x20,
-0x57, 0x49, 0x54, 0x48, 0x4f, 0x55, 0x54, 0x20, 0x44, 0xcf, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54,
-0x20, 0x4d, 0x4f, 0x44, 0x45, 0x20, 0x4f, 0x4e, 0x4c, 0xd9, 0x4e, 0x4f, 0x20, 0x47, 0x52, 0x41,
-0x50, 0x48, 0x49, 0x43, 0x53, 0x20, 0x41, 0x52, 0x45, 0xc1, 0x42, 0x41, 0x44, 0x20, 0x44, 0x49,
-0x53, 0xcb, 0xaa, 0xa0, 0x0, 0xa9, 0x71, 0x85, 0x24, 0xa9, 0x84, 0x85, 0x25, 0xca, 0x30, 0x1c,
-0xb1, 0x24, 0x48, 0xe6, 0x24, 0xd0, 0x2, 0xe6, 0x25, 0x68, 0x10, 0xf4, 0x30, 0xef, 0x20, 0x4f,
-0xff, 0xd, 0xa, 0x52, 0x45, 0x41, 0x44, 0x59, 0x2e, 0xd, 0xa, 0x0, 0x60, 0xa2, 0x80, 0x2c,
-0xa2, 0x10, 0x6c, 0x0, 0x3, 0x8a, 0x30, 0x7a, 0x8e, 0xef, 0x4, 0x24, 0x81, 0x10, 0x35, 0xa0,
-0x1, 0xb9, 0x39, 0x0, 0x99, 0xf0, 0x4, 0xb9, 0x5b, 0x2, 0x99, 0xf5, 0x4, 0x88, 0x10, 0xf1,
-0xe0, 0x11, 0xf0, 0x20, 0xac, 0xf3, 0x4, 0xc8, 0xf0, 0x1a, 0x88, 0x84, 0x15, 0x8c, 0xf4, 0x4,
-0xac, 0xf2, 0x4, 0x84, 0x14, 0xa2, 0xff, 0x8e, 0xf3, 0x4, 0xae, 0xf7, 0x4, 0x9a, 0x20, 0x69,
-0x8d, 0x4c, 0xdc, 0x8b, 0xca, 0x8a, 0x48, 0xa9, 0x0, 0x85, 0x83, 0x20, 0xc9, 0xc7, 0x68, 0x20,
-0x53, 0x86, 0x20, 0xcc, 0xff, 0xa9, 0x0, 0x85, 0x13, 0x20, 0x3e, 0x90, 0x20, 0xb0, 0x90, 0xa0,
-0x0, 0xb1, 0x24, 0x48, 0x29, 0x7f, 0x20, 0xb2, 0x90, 0xc8, 0x68, 0x10, 0xf4, 0x20, 0xd8, 0x8a,
-0x20, 0x4f, 0xff, 0x20, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, 0xa4, 0x3a, 0xc8, 0xf0, 0x3, 0x20,
-0x53, 0xa4, 0x20, 0x6f, 0x86, 0xa9, 0x80, 0x20, 0x90, 0xff, 0xa9, 0x0, 0x85, 0x81, 0x6c, 0x2,
-0x3, 0xa2, 0xff, 0x86, 0x3a, 0x20, 0x5a, 0x88, 0x86, 0x3b, 0x84, 0x3c, 0x20, 0x73, 0x4, 0xaa,
-0xf0, 0xec, 0x90, 0x9, 0x20, 0x53, 0x89, 0x20, 0x79, 0x4, 0x4c, 0xd9, 0x8b, 0x20, 0x3e, 0x8e,
-0x20, 0x53, 0x89, 0x84, 0xb, 0x20, 0x3d, 0x8a, 0x90, 0x4a, 0xa0, 0x1, 0x20, 0xd1, 0x4, 0x85,
-0x23, 0xa5, 0x2d, 0x85, 0x22, 0xa5, 0x60, 0x85, 0x25, 0x88, 0x20, 0xd1, 0x4, 0x18, 0xe5, 0x5f,
-0x49, 0xff, 0x18, 0x65, 0x2d, 0x85, 0x2d, 0x85, 0x24, 0xa5, 0x2e, 0x69, 0xff, 0x85, 0x2e, 0xe5,
-0x60, 0xaa, 0x38, 0xa5, 0x5f, 0xe5, 0x2d, 0xa8, 0xb0, 0x3, 0xe8, 0xc6, 0x25, 0x18, 0x65, 0x22,
-0x90, 0x3, 0xc6, 0x23, 0x18, 0x20, 0xb0, 0x4, 0x91, 0x24, 0xc8, 0xd0, 0xf8, 0xe6, 0x23, 0xe6,
-0x25, 0xca, 0xd0, 0xf1, 0x20, 0x9a, 0x8a, 0x20, 0x18, 0x88, 0xa0, 0x0, 0x20, 0xa5, 0x4, 0xf0,
-0x8f, 0x18, 0xa5, 0x2d, 0xa4, 0x2e, 0x85, 0x5a, 0x84, 0x5b, 0x65, 0xb, 0x90, 0x1, 0xc8, 0x18,
-0x69, 0x4, 0x90, 0x1, 0xc8, 0x85, 0x58, 0x84, 0x59, 0x20, 0xc0, 0x88, 0xa0, 0x0, 0xa9, 0x1,
-0x91, 0x5f, 0xc8, 0x91, 0x5f, 0xc8, 0xa5, 0x14, 0x91, 0x5f, 0xa5, 0x15, 0xc8, 0x91, 0x5f, 0xc8,
-0x98, 0x18, 0x65, 0x5f, 0x85, 0x5f, 0x90, 0x2, 0xe6, 0x60, 0xa5, 0x31, 0xa4, 0x32, 0x85, 0x2d,
-0x84, 0x2e, 0xa4, 0xb, 0x88, 0x20, 0xa5, 0x4, 0x91, 0x5f, 0x88, 0x10, 0xf8, 0x20, 0x18, 0x88,
-0x20, 0x93, 0x8a, 0xa5, 0x73, 0x5, 0x74, 0xf0, 0x2b, 0xa5, 0x14, 0x18, 0x65, 0x73, 0x85, 0x63,
-0xa5, 0x15, 0x65, 0x74, 0x85, 0x62, 0xa2, 0x90, 0x38, 0x20, 0xce, 0xa2, 0x20, 0x6f, 0xa4, 0xa2,
-0x0, 0xbd, 0x1, 0x1, 0xf0, 0x6, 0x9d, 0x27, 0x5, 0xe8, 0xd0, 0xf5, 0xa9, 0x1d, 0x9d, 0x27,
-0x5, 0xe8, 0x86, 0xef, 0x4c, 0xf, 0x87, 0xa5, 0x2b, 0xa4, 0x2c, 0x85, 0x22, 0x84, 0x23, 0x18,
-0xa0, 0x0, 0x20, 0xb0, 0x4, 0xd0, 0x6, 0xc8, 0x20, 0xb0, 0x4, 0xf0, 0x2b, 0xa0, 0x4, 0xc8,
-0x20, 0xb0, 0x4, 0xd0, 0xfa, 0xc8, 0x98, 0x65, 0x22, 0xaa, 0xa0, 0x0, 0x91, 0x22, 0x98, 0x65,
-0x23, 0xc8, 0x91, 0x22, 0x86, 0x22, 0x85, 0x23, 0x90, 0xd6, 0x18, 0xa5, 0x22, 0xa4, 0x23, 0x69,
-0x2, 0x90, 0x1, 0xc8, 0x85, 0x2d, 0x84, 0x2e, 0x60, 0xa2, 0x0, 0x20, 0x91, 0xa7, 0xc9, 0xd,
-0xf0, 0xb, 0x9d, 0x0, 0x2, 0xe8, 0xe0, 0x59, 0x90, 0xf1, 0x4c, 0x4c, 0xcc, 0x4c, 0x31, 0x90,
-0x20, 0x60, 0xa7, 0xa5, 0x3d, 0xc9, 0xb0, 0xd0, 0x6, 0xa5, 0x3e, 0xc9, 0x7, 0xf0, 0x3d, 0xa0,
-0x0, 0xa5, 0x2, 0xc9, 0x81, 0xd0, 0x1b, 0xd1, 0x3d, 0xd0, 0x33, 0xa0, 0x2, 0xa5, 0x4a, 0xc9,
-0xff, 0xf0, 0x2b, 0xd1, 0x3d, 0xd0, 0x7, 0x88, 0xa5, 0x49, 0xd1, 0x3d, 0xf0, 0x20, 0xa2, 0x12,
-0xd0, 0xe, 0xb1, 0x3d, 0xc5, 0x2, 0xf0, 0x16, 0xa2, 0x12, 0xc9, 0x81, 0xf0, 0x2, 0xa2, 0x5,
-0x8a, 0x18, 0x65, 0x3d, 0x85, 0x3d, 0x90, 0xbb, 0xe6, 0x3e, 0xd0, 0xb7, 0xa0, 0x1, 0x60, 0x20,
-0x23, 0x89, 0x85, 0x31, 0x84, 0x32, 0x38, 0xa5, 0x5a, 0xe5, 0x5f, 0x85, 0x22, 0xa8, 0xa5, 0x5b,
-0xe5, 0x60, 0xaa, 0xe8, 0x98, 0xf0, 0x25, 0xa5, 0x5a, 0x38, 0xe5, 0x22, 0x85, 0x5a, 0xb0, 0x3,
-0xc6, 0x5b, 0x38, 0xa5, 0x58, 0xe5, 0x22, 0x85, 0x58, 0xb0, 0x9, 0xc6, 0x59, 0x90, 0x5, 0x20,
-0x89, 0x81, 0x91, 0x58, 0x88, 0xd0, 0xf8, 0x20, 0x89, 0x81, 0x91, 0x58, 0xc6, 0x5b, 0xc6, 0x59,
-0xca, 0xd0, 0xf1, 0x60, 0x8c, 0xf4, 0x7, 0x38, 0xa5, 0x7c, 0xed, 0xf4, 0x7, 0x85, 0x7c, 0xa5,
-0x7d, 0xe9, 0x0, 0x85, 0x7d, 0xc9, 0x6, 0x90, 0x36, 0xd0, 0x6, 0xa5, 0x7c, 0xc9, 0xec, 0x90,
-0x2e, 0x60, 0xc4, 0x34, 0x90, 0x28, 0xd0, 0x4, 0xc5, 0x33, 0x90, 0x22, 0x48, 0xa2, 0x9, 0x98,
-0x48, 0xb5, 0x57, 0xca, 0x10, 0xfa, 0x20, 0x54, 0xa9, 0xa2, 0xf7, 0x68, 0x95, 0x61, 0xe8, 0x30,
-0xfa, 0x68, 0xa8, 0x68, 0xc4, 0x34, 0x90, 0x6, 0xd0, 0x5, 0xc5, 0x33, 0xb0, 0x1, 0x60, 0x4c,
-0x81, 0x86, 0x6c, 0x4, 0x3, 0xa5, 0x3b, 0x48, 0xa5, 0x3c, 0x48, 0x20, 0x79, 0x4, 0x4c, 0x65,
-0x89, 0x20, 0x73, 0x4, 0x90, 0xfb, 0x6c, 0xc, 0x3, 0x90, 0x68, 0xc9, 0x0, 0xf0, 0x55, 0xc9,
-0x3a, 0xf0, 0xee, 0xc9, 0x3f, 0xd0, 0x4, 0xa9, 0x99, 0xd0, 0x2e, 0xc9, 0x80, 0x90, 0xb, 0xc9,
-0xff, 0xf0, 0xde, 0xa0, 0x1, 0x20, 0xea, 0x89, 0xf0, 0xd1, 0xc9, 0x22, 0xd0, 0xd, 0x20, 0x73,
-0x4, 0xc9, 0x0, 0xf0, 0x2f, 0xc9, 0x22, 0xf0, 0xc8, 0xd0, 0xf3, 0x20, 0x3, 0x8a, 0x90, 0xc1,
-0xc0, 0x0, 0xf0, 0x3, 0x20, 0xea, 0x89, 0xa5, 0xb, 0xa0, 0x0, 0x91, 0x3b, 0xc9, 0x8f, 0xf0,
-0xd, 0xc9, 0x83, 0xd0, 0xac, 0x20, 0x73, 0x4, 0x20, 0xb0, 0x8d, 0x4c, 0x5c, 0x89, 0x20, 0x73,
-0x4, 0x20, 0xb, 0x8e, 0xa6, 0x3b, 0x68, 0x85, 0x3c, 0x68, 0x85, 0x3b, 0x38, 0x8a, 0xe5, 0x3b,
-0xa8, 0xc8, 0x60, 0x48, 0x88, 0x88, 0x20, 0xea, 0x89, 0xa0, 0x0, 0xa9, 0xfe, 0x91, 0x3b, 0xc8,
-0x68, 0x91, 0x3b, 0x20, 0x73, 0x4, 0x4c, 0x62, 0x89, 0x18, 0x98, 0x65, 0x3b, 0x85, 0x22, 0xa5,
-0x3c, 0x69, 0x0, 0x85, 0x23, 0xa0, 0x0, 0x20, 0xb0, 0x4, 0x91, 0x3b, 0xc8, 0xc9, 0x0, 0xd0,
-0xf6, 0x60, 0xa9, 0x81, 0xa0, 0x8e, 0x85, 0x23, 0x84, 0x22, 0xa0, 0x0, 0x84, 0xb, 0x88, 0xc8,
-0x20, 0xa5, 0x4, 0x38, 0xf1, 0x22, 0xf0, 0xf7, 0xc9, 0x80, 0xf0, 0x1b, 0xb1, 0x22, 0x30, 0x3,
-0xc8, 0xd0, 0xf9, 0xc8, 0xe6, 0xb, 0x18, 0x98, 0x65, 0x22, 0x85, 0x22, 0x90, 0x2, 0xe6, 0x23,
-0x18, 0xa0, 0x0, 0xb1, 0x22, 0xd0, 0xd9, 0x5, 0xb, 0x85, 0xb, 0x60, 0xa5, 0x2b, 0xa6, 0x2c,
-0xa0, 0x1, 0x85, 0x5f, 0x86, 0x60, 0x20, 0xd1, 0x4, 0xf0, 0x2b, 0xc8, 0xc8, 0x20, 0xd1, 0x4,
-0x85, 0x78, 0xa5, 0x15, 0xc5, 0x78, 0x90, 0x1f, 0xf0, 0x3, 0x88, 0xd0, 0xe, 0x88, 0x20, 0xd1,
-0x4, 0x85, 0x78, 0xa5, 0x14, 0xc5, 0x78, 0x90, 0xe, 0xf0, 0xc, 0x88, 0x20, 0xd1, 0x4, 0xaa,
-0x88, 0x20, 0xd1, 0x4, 0xb0, 0xca, 0x18, 0x60, 0xd0, 0xfd, 0xa9, 0x0, 0xa8, 0x91, 0x2b, 0xc8,
-0x91, 0x2b, 0x8d, 0xeb, 0x2, 0xa5, 0x2b, 0x18, 0x69, 0x2, 0x85, 0x2d, 0xa5, 0x2c, 0x69, 0x0,
-0x85, 0x2e, 0x20, 0xf1, 0x8a, 0xa9, 0x0, 0xd0, 0x52, 0x20, 0xe7, 0xff, 0xa0, 0x0, 0x84, 0x79,
-0x88, 0x8c, 0xf3, 0x4, 0x8c, 0xf0, 0x4, 0x8c, 0xf1, 0x4, 0x8c, 0xef, 0x4, 0xa5, 0x37, 0xa4,
-0x38, 0x85, 0x33, 0x84, 0x34, 0xa9, 0xb0, 0xa0, 0x7, 0x85, 0x7c, 0x84, 0x7d, 0xa5, 0x2d, 0xa4,
-0x2e, 0x85, 0x2f, 0x84, 0x30, 0x85, 0x31, 0x84, 0x32, 0xa2, 0x3, 0xbd, 0xed, 0x8a, 0x9d, 0xe7,
-0x4, 0xca, 0x10, 0xf7, 0x20, 0xb1, 0x8c, 0xa2, 0x19, 0x86, 0x16, 0x68, 0xa8, 0x68, 0xa2, 0xfa,
-0x9a, 0x48, 0x98, 0x48, 0xa9, 0x0, 0x8d, 0x5c, 0x2, 0x85, 0x10, 0x60, 0x20, 0x2c, 0x2e, 0x24,
-0x18, 0xa5, 0x2b, 0x69, 0xff, 0x85, 0x3b, 0xa5, 0x2c, 0x69, 0xff, 0x85, 0x3c, 0x60, 0x20, 0xca,
-0xae, 0xa0, 0x1, 0x20, 0xd1, 0x4, 0xd0, 0x6, 0x88, 0x20, 0xd1, 0x4, 0xf0, 0x2e, 0x20, 0xc0,
-0x8c, 0x20, 0x3e, 0x90, 0xa0, 0x2, 0x20, 0xd1, 0x4, 0xaa, 0xc8, 0x20, 0xd1, 0x4, 0xc5, 0x15,
-0xd0, 0x4, 0xe4, 0x14, 0xf0, 0x2, 0xb0, 0x14, 0x20, 0x40, 0x8b, 0xa0, 0x0, 0x20, 0xd1, 0x4,
-0xaa, 0xc8, 0x20, 0xd1, 0x4, 0x86, 0x5f, 0x85, 0x60, 0x4c, 0x2, 0x8b, 0x4c, 0x3e, 0x90, 0xa0,
-0x3, 0x84, 0x49, 0x84, 0xf, 0x20, 0x5f, 0xa4, 0xa9, 0x20, 0xa4, 0x49, 0x29, 0x7f, 0x20, 0xb2,
-0x90, 0xc9, 0x22, 0xd0, 0x6, 0xa5, 0xf, 0x49, 0xff, 0x85, 0xf, 0xc8, 0xf0, 0xde, 0x24, 0x53,
-0x10, 0x3, 0x20, 0xc, 0xb7, 0x20, 0xd1, 0x4, 0xf0, 0x50, 0x6c, 0x6, 0x3, 0x10, 0xdf, 0xc9,
-0xff, 0xf0, 0xdb, 0x24, 0xf, 0x30, 0xd7, 0xc9, 0xfe, 0xd0, 0x17, 0xc8, 0x20, 0xd1, 0x4, 0xf0,
-0xc, 0x84, 0x49, 0x38, 0x6c, 0xe, 0x3, 0xb0, 0xc5, 0xa0, 0x0, 0xf0, 0x24, 0x88, 0xa9, 0xfe,
-0xd0, 0xbc, 0xaa, 0x84, 0x49, 0xa0, 0x81, 0x84, 0x23, 0xa0, 0x8e, 0x84, 0x22, 0xa0, 0x0, 0xca,
-0x10, 0xf, 0xb1, 0x22, 0x48, 0xe6, 0x22, 0xd0, 0x2, 0xe6, 0x23, 0x68, 0x10, 0xf4, 0x30, 0xef,
-0xc8, 0xb1, 0x22, 0x30, 0x95, 0x20, 0xb2, 0x90, 0xd0, 0xf6, 0x60, 0xd0, 0x6, 0x20, 0x20, 0x8d,
-0x4c, 0x93, 0x8a, 0x20, 0x9a, 0x8a, 0x20, 0x79, 0x4, 0x20, 0x4d, 0x8d, 0x20, 0x20, 0x8d, 0x4c,
-0xdc, 0x8b, 0x6c, 0x8, 0x3, 0x20, 0x73, 0x4, 0x20, 0x25, 0x8c, 0x20, 0xc0, 0x8c, 0x24, 0x81,
-0x10, 0x7, 0x20, 0x1a, 0x8c, 0xba, 0x8e, 0xf7, 0x4, 0xa0, 0x0, 0x20, 0xa5, 0x4, 0xf0, 0x3,
-0x4c, 0x93, 0x8c, 0x24, 0x81, 0x10, 0x1f, 0xa0, 0x2, 0x20, 0xa5, 0x4, 0xf0, 0x18, 0xc8, 0x20,
-0xa5, 0x4, 0x85, 0x39, 0xc8, 0x20, 0xa5, 0x4, 0x85, 0x3a, 0x98, 0x18, 0x65, 0x3b, 0x85, 0x3b,
-0x90, 0xc0, 0xe6, 0x3c, 0xd0, 0xbc, 0x4c, 0x7e, 0x86, 0xa5, 0x3b, 0xa4, 0x3c, 0x8d, 0x5b, 0x2,
-0x8c, 0x5c, 0x2, 0x60, 0xf0, 0xfd, 0x2c, 0xeb, 0x2, 0x10, 0x13, 0x24, 0x81, 0x10, 0xf, 0x48,
-0xa9, 0x5b, 0x20, 0xb2, 0x90, 0x20, 0x5b, 0xa4, 0xa9, 0x5d, 0x20, 0xb2, 0x90, 0x68, 0xc9, 0xfe,
-0xf0, 0x3f, 0xc9, 0xcb, 0xf0, 0x2d, 0xc9, 0xca, 0xf0, 0x20, 0xc9, 0xfb, 0xb0, 0x3e, 0xc9, 0xa3,
-0x90, 0x6, 0xc9, 0xd5, 0x90, 0x36, 0xe9, 0x32, 0x38, 0xe9, 0x80, 0x90, 0x32, 0xa, 0xa8, 0xb9,
-0x84, 0x83, 0x48, 0xb9, 0x83, 0x83, 0x48, 0x4c, 0x73, 0x4, 0xa9, 0xb6, 0x48, 0xa9, 0x5a, 0x48,
-0x4c, 0x73, 0x4, 0x20, 0x73, 0x4, 0xc9, 0xa4, 0xd0, 0x12, 0x20, 0x73, 0x4, 0x4c, 0x4d, 0x8d,
-0x0, 0x20, 0x73, 0x4, 0xf0, 0x6, 0x38, 0x6c, 0x10, 0x3, 0x90, 0xe4, 0x4c, 0xa1, 0x94, 0x4c,
-0x7c, 0x8e, 0xc9, 0x3a, 0xd0, 0xf6, 0x4c, 0xd3, 0x8b, 0xf0, 0x15, 0x20, 0xe1, 0x9d, 0x84, 0x14,
-0x85, 0x15, 0x20, 0x3d, 0x8a, 0xb0, 0x3, 0x4c, 0x8f, 0x8d, 0xa5, 0x5f, 0xa4, 0x60, 0xb0, 0x5,
-0x38, 0xa5, 0x2b, 0xa4, 0x2c, 0xe9, 0x1, 0xb0, 0x1, 0x88, 0x85, 0x41, 0x84, 0x42, 0x60, 0x20,
-0xe1, 0xff, 0xd0, 0xfa, 0x8, 0xac, 0xf3, 0x4, 0xc8, 0xf0, 0xb, 0x20, 0xe1, 0xff, 0xf0, 0xfb,
-0x28, 0xa2, 0x1e, 0x4c, 0x83, 0x86, 0x28, 0xb0, 0x1, 0x18, 0xd0, 0xe2, 0x24, 0x81, 0x10, 0xd,
-0x20, 0x1a, 0x8c, 0xa5, 0x39, 0xa4, 0x3a, 0x8d, 0x59, 0x2, 0x8c, 0x5a, 0x2, 0x68, 0x68, 0x90,
-0xe, 0x20, 0x4f, 0xff, 0xd, 0xa, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x0, 0x4c, 0xfb, 0x86, 0x4c,
-0x7e, 0x86, 0xd0, 0xba, 0xa2, 0x1a, 0xac, 0x5c, 0x2, 0xd0, 0x3, 0x4c, 0x83, 0x86, 0xad, 0x5b,
-0x2, 0x85, 0x3b, 0x84, 0x3c, 0xad, 0x59, 0x2, 0xac, 0x5a, 0x2, 0x85, 0x39, 0x84, 0x3a, 0xa9,
-0x80, 0x85, 0x81, 0xa, 0x85, 0x73, 0x85, 0x74, 0x4c, 0x90, 0xff, 0xa0, 0x5, 0x20, 0x5, 0x89,
-0x88, 0xa5, 0x3c, 0x91, 0x7c, 0x88, 0xa5, 0x3b, 0x91, 0x7c, 0x88, 0xa5, 0x3a, 0x91, 0x7c, 0x88,
-0xa5, 0x39, 0x91, 0x7c, 0x88, 0xa9, 0x8d, 0x91, 0x7c, 0x20, 0x79, 0x4, 0x20, 0x3e, 0x8e, 0x20,
-0xc1, 0x8d, 0x38, 0xa5, 0x39, 0xe5, 0x14, 0xa5, 0x3a, 0xe5, 0x15, 0xb0, 0xb, 0x98, 0x38, 0x65,
-0x3b, 0xa6, 0x3c, 0x90, 0x7, 0xe8, 0xb0, 0x4, 0xa5, 0x2b, 0xa6, 0x2c, 0x20, 0x41, 0x8a, 0x90,
-0x1d, 0xa5, 0x5f, 0xe9, 0x1, 0x85, 0x3b, 0xa5, 0x60, 0xe9, 0x0, 0x85, 0x3c, 0x24, 0x81, 0x10,
-0x9e, 0x60, 0xa9, 0x8d, 0x85, 0x2, 0x20, 0x71, 0x88, 0xf0, 0x8, 0xa2, 0xc, 0x2c, 0xa2, 0x11,
-0x4c, 0x83, 0x86, 0x20, 0x69, 0xa7, 0xa0, 0x5, 0x20, 0x72, 0xa7, 0x88, 0xb1, 0x3d, 0x85, 0x3c,
-0x88, 0xb1, 0x3d, 0x85, 0x3b, 0x88, 0xb1, 0x3d, 0x20, 0x7f, 0xcd, 0xb1, 0x3d, 0x85, 0x39, 0x20,
-0xbe, 0x8d, 0x98, 0x18, 0x65, 0x3b, 0x85, 0x3b, 0x90, 0x2, 0xe6, 0x3c, 0x60, 0xa2, 0x3a, 0x2c,
-0xa2, 0x0, 0x86, 0x7, 0xa0, 0x0, 0x84, 0x8, 0xa5, 0x8, 0xa6, 0x7, 0x85, 0x7, 0x86, 0x8,
-0x20, 0xa5, 0x4, 0xf0, 0xe7, 0xc5, 0x8, 0xf0, 0xe3, 0xc8, 0xc9, 0x22, 0xd0, 0xf2, 0xf0, 0xe8,
-0x20, 0x2c, 0x93, 0x20, 0x79, 0x4, 0xc9, 0x89, 0xf0, 0x5, 0xa9, 0xa7, 0x20, 0x93, 0x94, 0xa5,
-0x61, 0xd0, 0x1c, 0x20, 0xb0, 0x8d, 0xa0, 0x0, 0x20, 0xa5, 0x4, 0xf0, 0xd, 0x20, 0x73, 0x4,
-0xc9, 0xd5, 0xd0, 0xef, 0x20, 0x73, 0x4, 0x4c, 0x10, 0x8e, 0x20, 0xc1, 0x8d, 0xf0, 0xa3, 0x20,
-0x79, 0x4, 0xb0, 0x3, 0x4c, 0x4d, 0x8d, 0x4c, 0x25, 0x8c, 0x20, 0x84, 0x9d, 0x48, 0xc9, 0x8d,
-0xf0, 0x7, 0xc9, 0x89, 0xf0, 0x3, 0x4c, 0xa1, 0x94, 0xc6, 0x65, 0xd0, 0x4, 0x68, 0x4c, 0x3f,
-0x8c, 0x20, 0x73, 0x4, 0x20, 0x3e, 0x8e, 0xc9, 0x2c, 0xf0, 0xee, 0x68, 0x60, 0xa2, 0x0, 0x86,
-0x8, 0x86, 0x14, 0x86, 0x15, 0xb0, 0xf5, 0xe6, 0x8, 0xe9, 0x2f, 0x85, 0x7, 0xa5, 0x15, 0x85,
-0x22, 0xc9, 0x19, 0xb0, 0xcd, 0xa5, 0x14, 0xa, 0x26, 0x22, 0xa, 0x26, 0x22, 0x65, 0x14, 0x85,
-0x14, 0xa5, 0x22, 0x65, 0x15, 0x85, 0x15, 0x6, 0x14, 0x26, 0x15, 0xa5, 0x14, 0x65, 0x7, 0x85,
-0x14, 0x90, 0x2, 0xe6, 0x15, 0x20, 0x73, 0x4, 0x4c, 0x46, 0x8e, 0x20, 0xa5, 0x96, 0x85, 0x49,
-0x84, 0x4a, 0xa9, 0xb2, 0x20, 0x93, 0x94, 0xa5, 0xe, 0x48, 0xa5, 0xd, 0x48, 0x20, 0x2c, 0x93,
-0x68, 0x2a, 0x20, 0x1b, 0x93, 0xd0, 0x18, 0x68, 0x10, 0x12, 0x20, 0xa0, 0xa2, 0x20, 0x86, 0x98,
-0xa0, 0x0, 0xa5, 0x64, 0x91, 0x49, 0xc8, 0xa5, 0x65, 0x91, 0x49, 0x60, 0x4c, 0x55, 0xa2, 0x68,
-0xa4, 0x4a, 0xc0, 0x4, 0xd0, 0x72, 0x20, 0x4e, 0x9c, 0xc9, 0x6, 0xd0, 0x3e, 0xa0, 0x0, 0x84,
-0x61, 0x84, 0x66, 0x84, 0x71, 0x20, 0xf4, 0x8e, 0x20, 0x62, 0xa1, 0xe6, 0x71, 0xa4, 0x71, 0x20,
-0xf4, 0x8e, 0x20, 0x91, 0xa2, 0xaa, 0xf0, 0x5, 0xe8, 0x8a, 0x20, 0x6d, 0xa1, 0xa4, 0x71, 0xc8,
-0xc0, 0x6, 0xd0, 0xdf, 0x20, 0x62, 0xa1, 0x20, 0x27, 0xa3, 0xa6, 0x64, 0xa4, 0x63, 0xa5, 0x65,
-0x4c, 0xdb, 0xff, 0x20, 0xb0, 0x4, 0x20, 0x85, 0x4, 0x90, 0x3, 0x4c, 0x1c, 0x99, 0xe9, 0x2f,
-0x4c, 0xa, 0xa4, 0x68, 0xc8, 0xc5, 0x34, 0x90, 0x18, 0xd0, 0x8, 0x88, 0x20, 0xdc, 0x4, 0xc5,
-0x33, 0x90, 0xe, 0xa4, 0x65, 0xc4, 0x2e, 0x90, 0x8, 0xd0, 0x24, 0xa5, 0x64, 0xc5, 0x2d, 0xb0,
-0x1e, 0xa5, 0x64, 0xa4, 0x65, 0x4c, 0x5e, 0x8f, 0xa0, 0x2, 0x20, 0xdc, 0x4, 0xc5, 0x7b, 0xd0,
-0xd4, 0x48, 0x88, 0x20, 0xdc, 0x4, 0xc5, 0x7a, 0xd0, 0xc9, 0xa5, 0x79, 0xf0, 0xc5, 0x68, 0xa0,
-0x0, 0x20, 0xdc, 0x4, 0x20, 0x54, 0x9b, 0xa5, 0x50, 0xa4, 0x51, 0x85, 0x6f, 0x84, 0x70, 0x20,
-0x1b, 0x9c, 0xa5, 0x6f, 0xa4, 0x70, 0x20, 0xaa, 0x9c, 0xa9, 0x61, 0xa0, 0x0, 0x85, 0x50, 0x84,
-0x51, 0x85, 0x22, 0x84, 0x23, 0x20, 0xaa, 0x9c, 0x20, 0x9c, 0x8f, 0x90, 0xb, 0xa0, 0x0, 0xa5,
-0x49, 0x91, 0x22, 0xc8, 0xa5, 0x4a, 0x91, 0x22, 0xa5, 0x49, 0x85, 0x22, 0xa5, 0x4a, 0x85, 0x23,
-0x20, 0x9c, 0x8f, 0x90, 0x9, 0x88, 0xa9, 0xff, 0x91, 0x22, 0x88, 0x8a, 0x91, 0x22, 0xa0, 0x2,
-0xa9, 0x50, 0x20, 0x94, 0x4, 0x91, 0x49, 0x88, 0x10, 0xf6, 0x60, 0xa0, 0x0, 0x20, 0xb0, 0x4,
-0x48, 0xf0, 0x39, 0xc8, 0x20, 0xb0, 0x4, 0xaa, 0xc8, 0x20, 0xb0, 0x4, 0xc5, 0x38, 0x90, 0x6,
-0xd0, 0x2a, 0xe4, 0x37, 0xb0, 0x26, 0x20, 0xb0, 0x4, 0xc5, 0x34, 0x90, 0x1f, 0xd0, 0x4, 0xe4,
-0x33, 0x90, 0x19, 0xc5, 0x7b, 0xd0, 0x4, 0xe4, 0x7a, 0xf0, 0x11, 0x86, 0x22, 0x85, 0x23, 0x68,
-0xaa, 0x18, 0x65, 0x22, 0x85, 0x22, 0x90, 0x2, 0xe6, 0x23, 0x38, 0x60, 0x68, 0x18, 0x60, 0x20,
-0xe6, 0x8f, 0x4c, 0xfe, 0x90, 0x20, 0x84, 0x9d, 0xf0, 0x5, 0xa9, 0x2c, 0x20, 0x93, 0x94, 0x8,
-0x86, 0x13, 0x20, 0x97, 0xa7, 0x28, 0x4c, 0x0, 0x90, 0x20, 0x8b, 0x90, 0x20, 0x79, 0x4, 0xf0,
-0x3c, 0xc9, 0xfb, 0xd0, 0x3, 0x4c, 0xf7, 0xae, 0xf0, 0x43, 0xc9, 0xa3, 0xf0, 0x50, 0xc9, 0xa6,
-0x18, 0xf0, 0x4b, 0xc9, 0x2c, 0xf0, 0x37, 0xc9, 0x3b, 0xf0, 0x5e, 0x20, 0x2c, 0x93, 0x24, 0xd,
-0x30, 0xd7, 0x20, 0x6f, 0xa4, 0x20, 0x74, 0x9b, 0x20, 0x8b, 0x90, 0x20, 0xa6, 0x90, 0xd0, 0xcc,
-0xa9, 0x0, 0x9d, 0x0, 0x2, 0xa2, 0xff, 0xa0, 0x1, 0xa5, 0x13, 0xd0, 0x10, 0xa9, 0xd, 0x20,
-0xb2, 0x90, 0x24, 0x13, 0x10, 0x5, 0xa9, 0xa, 0x20, 0xb2, 0x90, 0x49, 0xff, 0x60, 0x38, 0x20,
-0xf0, 0xff, 0x98, 0x38, 0xe9, 0xa, 0xb0, 0xfc, 0x49, 0xff, 0x69, 0x1, 0xd0, 0x16, 0x8, 0x38,
-0x20, 0xf0, 0xff, 0x84, 0x9, 0x20, 0x81, 0x9d, 0xc9, 0x29, 0xd0, 0x13, 0x28, 0x90, 0x6, 0x8a,
-0xe5, 0x9, 0x90, 0x5, 0xaa, 0xe8, 0xca, 0xd0, 0x9, 0x20, 0x73, 0x4, 0x4c, 0x9, 0x90, 0x4c,
-0xa1, 0x94, 0x20, 0xa6, 0x90, 0xd0, 0xef, 0x20, 0x74, 0x9b, 0x20, 0x4e, 0x9c, 0xaa, 0xa0, 0x0,
-0xe8, 0xca, 0xf0, 0xb9, 0x20, 0xb0, 0x4, 0x20, 0xb2, 0x90, 0xc8, 0xc9, 0xd, 0xd0, 0xf2, 0x20,
-0x4c, 0x90, 0x4c, 0x92, 0x90, 0xa5, 0x13, 0xf0, 0x3, 0xa9, 0x20, 0x2c, 0xa9, 0x1d, 0x2c, 0xa9,
-0x3f, 0x20, 0x8b, 0xa7, 0x29, 0xff, 0x60, 0x20, 0x86, 0x9a, 0x85, 0x80, 0xc9, 0x23, 0xf0, 0xa,
-0xc9, 0xf9, 0xd0, 0x16, 0x20, 0x73, 0x4, 0x4c, 0xdb, 0x90, 0x20, 0x73, 0x4, 0x20, 0x84, 0x9d,
-0xa9, 0x2c, 0x20, 0x93, 0x94, 0x86, 0x13, 0x20, 0xa6, 0xa7, 0xa2, 0x1, 0xa0, 0x2, 0xa9, 0x0,
-0x8d, 0x1, 0x2, 0xa9, 0x40, 0x20, 0x58, 0x91, 0xa6, 0x13, 0xd0, 0x13, 0x60, 0x20, 0x84, 0x9d,
-0xa9, 0x2c, 0x20, 0x93, 0x94, 0x86, 0x13, 0x20, 0xa6, 0xa7, 0x20, 0x17, 0x91, 0xa5, 0x13, 0x20,
-0xcc, 0xff, 0xa2, 0x0, 0x86, 0x13, 0x60, 0xc9, 0x22, 0xd0, 0xb, 0x20, 0x4e, 0x94, 0xa9, 0x3b,
-0x20, 0x93, 0x94, 0x20, 0x8b, 0x90, 0x20, 0x86, 0x9a, 0xa9, 0x2c, 0x8d, 0xff, 0x1, 0x20, 0x42,
-0x91, 0xa5, 0x13, 0xf0, 0xd, 0x20, 0xb7, 0xff, 0x29, 0x2, 0xf0, 0x6, 0x20, 0xfe, 0x90, 0x4c,
-0xb0, 0x8d, 0xad, 0x0, 0x2, 0xd0, 0x1e, 0xa5, 0x13, 0xd0, 0xe3, 0x20, 0xbe, 0x8d, 0x4c, 0xb3,
-0x8d, 0xa5, 0x13, 0xd0, 0x6, 0x20, 0xb0, 0x90, 0x20, 0xaa, 0x90, 0x4c, 0x5a, 0x88, 0xa6, 0x41,
-0xa4, 0x42, 0xa9, 0x98, 0x2c, 0xa9, 0x0, 0x85, 0x11, 0x86, 0x43, 0x84, 0x44, 0x20, 0xa5, 0x96,
-0x85, 0x49, 0x84, 0x4a, 0xa2, 0x1, 0xb5, 0x3b, 0x95, 0x4b, 0xb5, 0x43, 0x95, 0x3b, 0xca, 0x10,
-0xf5, 0x20, 0x79, 0x4, 0xd0, 0x31, 0x24, 0x11, 0x50, 0x1a, 0xa5, 0x80, 0xc9, 0xf9, 0xd0, 0x8,
-0x20, 0xaf, 0xa7, 0xaa, 0xf0, 0xfa, 0xd0, 0x3, 0x20, 0xaf, 0xa7, 0x8d, 0x0, 0x2, 0xa2, 0xff,
-0xa0, 0x1, 0xd0, 0xf, 0x10, 0x3, 0x4c, 0x40, 0x92, 0xa5, 0x13, 0xd0, 0x3, 0x20, 0xb0, 0x90,
-0x20, 0x42, 0x91, 0x86, 0x3b, 0x84, 0x3c, 0x20, 0x73, 0x4, 0x24, 0xd, 0x10, 0x31, 0x24, 0x11,
-0x50, 0x9, 0xe8, 0x86, 0x3b, 0xa9, 0x0, 0x85, 0x7, 0xf0, 0xc, 0x85, 0x7, 0xc9, 0x22, 0xf0,
-0x7, 0xa9, 0x3a, 0x85, 0x7, 0xa9, 0x2c, 0x18, 0x85, 0x8, 0xa5, 0x3b, 0xa4, 0x3c, 0x69, 0x0,
-0x90, 0x1, 0xc8, 0x20, 0x7a, 0x9b, 0x20, 0xc6, 0x9d, 0x20, 0xb1, 0x8e, 0x4c, 0xe8, 0x91, 0x20,
-0x7f, 0xa3, 0xa5, 0xe, 0x20, 0x99, 0x8e, 0x20, 0x79, 0x4, 0xf0, 0x3b, 0xc9, 0x2c, 0xf0, 0x37,
-0xa5, 0x11, 0xf0, 0xa, 0x30, 0x4, 0xa6, 0x13, 0xd0, 0x8, 0xa2, 0x16, 0xd0, 0x6, 0xa5, 0x13,
-0xf0, 0x5, 0xa2, 0x18, 0x4c, 0x83, 0x86, 0x20, 0x4f, 0xff, 0x3f, 0x52, 0x45, 0x44, 0x4f, 0x20,
-0x46, 0x52, 0x4f, 0x4d, 0x20, 0x53, 0x54, 0x41, 0x52, 0x54, 0xd, 0x0, 0xad, 0x5b, 0x2, 0xac,
-0x5c, 0x2, 0x85, 0x3b, 0x84, 0x3c, 0x60, 0xa2, 0x1, 0xb5, 0x3b, 0x95, 0x43, 0xb5, 0x4b, 0x95,
-0x3b, 0xca, 0x10, 0xf5, 0x20, 0x79, 0x4, 0xf0, 0x30, 0x20, 0x91, 0x94, 0x4c, 0x5e, 0x91, 0x20,
-0xbe, 0x8d, 0xc8, 0xaa, 0xd0, 0x15, 0xa2, 0xd, 0xc8, 0x20, 0xa5, 0x4, 0xf0, 0x6c, 0xc8, 0x20,
-0xa5, 0x4, 0x85, 0x3f, 0xc8, 0x20, 0xa5, 0x4, 0xc8, 0x85, 0x40, 0x20, 0xb3, 0x8d, 0x20, 0x79,
-0x4, 0xaa, 0xe0, 0x83, 0xd0, 0xd9, 0x4c, 0xa8, 0x91, 0xa5, 0x43, 0xa4, 0x44, 0xa6, 0x11, 0x10,
-0x3, 0x4c, 0xbb, 0x8c, 0xa0, 0x0, 0x20, 0x55, 0x81, 0xf0, 0x17, 0xa5, 0x13, 0xd0, 0x13, 0x20,
-0x4f, 0xff, 0x3f, 0x45, 0x58, 0x54, 0x52, 0x41, 0x20, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44,
-0xd, 0x0, 0x60, 0xd0, 0x13, 0xa0, 0xff, 0xd0, 0x14, 0xa0, 0x12, 0x20, 0x72, 0xa7, 0x20, 0x79,
-0x4, 0xc9, 0x2c, 0xd0, 0x6d, 0x20, 0x73, 0x4, 0x20, 0xa5, 0x96, 0x85, 0x49, 0x84, 0x4a, 0xa0,
-0x81, 0x84, 0x2, 0x20, 0x71, 0x88, 0xf0, 0x5, 0xa2, 0xa, 0x4c, 0x83, 0x86, 0x20, 0x69, 0xa7,
-0xa5, 0x3d, 0x18, 0x69, 0x3, 0xa4, 0x3e, 0x90, 0x1, 0xc8, 0x20, 0x1f, 0xa2, 0xa0, 0x8, 0xb1,
-0x3d, 0x85, 0x66, 0xa0, 0x1, 0xb1, 0x3d, 0x48, 0xaa, 0xc8, 0xb1, 0x3d, 0x48, 0xa8, 0x8a, 0x20,
-0x9b, 0x9e, 0x68, 0xa8, 0x68, 0xaa, 0x20, 0x59, 0xa2, 0xa5, 0x3d, 0x18, 0x69, 0x9, 0xa4, 0x3e,
-0x90, 0x1, 0xc8, 0x20, 0xe0, 0xa2, 0xa0, 0x8, 0x38, 0xf1, 0x3d, 0xf0, 0x9c, 0xa0, 0x11, 0xb1,
-0x3d, 0x85, 0x3b, 0x88, 0xb1, 0x3d, 0x85, 0x3c, 0x88, 0xb1, 0x3d, 0x85, 0x3a, 0x88, 0xb1, 0x3d,
-0x85, 0x39, 0x60, 0x20, 0x2c, 0x93, 0x18, 0x90, 0x1, 0x38, 0x24, 0xd, 0x30, 0x3, 0xb0, 0x3,
-0x60, 0xb0, 0xfd, 0xa2, 0x16, 0x2c, 0xa2, 0x19, 0x4c, 0x83, 0x86, 0xa6, 0x3b, 0xd0, 0x2, 0xc6,
-0x3c, 0xc6, 0x3b, 0xa2, 0x0, 0x24, 0x48, 0x8a, 0x48, 0xba, 0xe0, 0x28, 0x90, 0xe8, 0x20, 0x14,
-0x94, 0xa9, 0x0, 0x85, 0x4d, 0x20, 0x79, 0x4, 0x38, 0xe9, 0xb1, 0x90, 0x17, 0xc9, 0x3, 0xb0,
-0x13, 0xc9, 0x1, 0x2a, 0x49, 0x1, 0x45, 0x4d, 0xc5, 0x4d, 0x90, 0x61, 0x85, 0x4d, 0x20, 0x73,
-0x4, 0x4c, 0x49, 0x93, 0xa6, 0x4d, 0xd0, 0x2c, 0xb0, 0x7e, 0x69, 0x7, 0x90, 0x7a, 0x65, 0xd,
-0xd0, 0x3, 0x4c, 0xda, 0x9b, 0x69, 0xff, 0x85, 0x22, 0xa, 0x65, 0x22, 0xa8, 0x68, 0xd9, 0x53,
-0x84, 0xb0, 0x6a, 0x20, 0x17, 0x93, 0x48, 0x20, 0xae, 0x93, 0x68, 0xa4, 0x4b, 0x10, 0x17, 0xaa,
-0xf0, 0x59, 0xd0, 0x62, 0x46, 0xd, 0x8a, 0x2a, 0xa6, 0x3b, 0xd0, 0x2, 0xc6, 0x3c, 0xc6, 0x3b,
-0xa0, 0x1b, 0x85, 0x4d, 0xd0, 0xd7, 0xd9, 0x53, 0x84, 0xb0, 0x4b, 0x90, 0xd9, 0xb9, 0x55, 0x84,
-0x48, 0xb9, 0x54, 0x84, 0x48, 0x20, 0xc1, 0x93, 0xa5, 0x4d, 0x4c, 0x37, 0x93, 0x4c, 0xa1, 0x94,
-0xa5, 0x66, 0xbe, 0x53, 0x84, 0xa8, 0x18, 0x68, 0x69, 0x1, 0x85, 0x22, 0x68, 0x69, 0x0, 0x85,
-0x23, 0x98, 0x48, 0x20, 0xa0, 0xa2, 0xa5, 0x65, 0x48, 0xa5, 0x64, 0x48, 0xa5, 0x63, 0x48, 0xa5,
-0x62, 0x48, 0xa5, 0x61, 0x48, 0x6c, 0x22, 0x0, 0xa0, 0xff, 0x68, 0xf0, 0x23, 0xc9, 0x64, 0xf0,
-0x3, 0x20, 0x17, 0x93, 0x84, 0x4b, 0x68, 0x4a, 0x85, 0x12, 0x68, 0x85, 0x69, 0x68, 0x85, 0x6a,
-0x68, 0x85, 0x6b, 0x68, 0x85, 0x6c, 0x68, 0x85, 0x6d, 0x68, 0x85, 0x6e, 0x45, 0x66, 0x85, 0x6f,
-0xa5, 0x61, 0x60, 0x6c, 0xa, 0x3, 0xa9, 0x0, 0x85, 0xd, 0x20, 0x73, 0x4, 0xb0, 0x3, 0x4c,
-0x7f, 0xa3, 0x20, 0x3a, 0x97, 0x90, 0x3, 0x4c, 0xad, 0x94, 0xc9, 0xff, 0xd0, 0xf, 0xa9, 0x39,
-0xa0, 0x94, 0x20, 0x21, 0xa2, 0x4c, 0x73, 0x4, 0x82, 0x49, 0xf, 0xda, 0xa1, 0xc9, 0x2e, 0xf0,
-0xde, 0xc9, 0xab, 0xf0, 0x60, 0xc9, 0xaa, 0xf0, 0xd1, 0xc9, 0x22, 0xd0, 0xf, 0xa5, 0x3b, 0xa4,
-0x3c, 0x69, 0x0, 0x90, 0x1, 0xc8, 0x20, 0x74, 0x9b, 0x4c, 0xc6, 0x9d, 0xc9, 0xa8, 0xd0, 0x16,
-0xa0, 0x18, 0xd0, 0x43, 0x20, 0x86, 0x98, 0xa5, 0x65, 0x49, 0xff, 0xa8, 0xa5, 0x64, 0x49, 0xff,
-0x20, 0x92, 0x9a, 0x4c, 0xc9, 0xa2, 0xc9, 0xa5, 0xd0, 0x3, 0x4c, 0xde, 0x9a, 0xc9, 0xb4, 0x90,
-0x3, 0x4c, 0x99, 0x95, 0x20, 0x8e, 0x94, 0x20, 0x2c, 0x93, 0xa9, 0x29, 0x2c, 0xa9, 0x28, 0x2c,
-0xa9, 0x2c, 0xa0, 0x0, 0x85, 0x78, 0x20, 0xa5, 0x4, 0xc5, 0x78, 0xd0, 0x3, 0x4c, 0x73, 0x4,
-0xa2, 0xb, 0x4c, 0x83, 0x86, 0xa0, 0x15, 0x68, 0x68, 0x4c, 0x88, 0x93, 0x20, 0xa5, 0x96, 0x85,
-0x64, 0x84, 0x65, 0xa6, 0x45, 0xa4, 0x46, 0xa5, 0xd, 0xf0, 0x45, 0xa9, 0x0, 0x85, 0x70, 0xe0,
-0x54, 0xd0, 0x24, 0xc0, 0xc9, 0xd0, 0x76, 0xa5, 0x64, 0xc9, 0xa2, 0xd0, 0x70, 0xa5, 0x65, 0xc9,
-0x4, 0xd0, 0x6a, 0x20, 0x31, 0x95, 0x84, 0x5e, 0x88, 0x84, 0x71, 0xa0, 0x6, 0x84, 0x5d, 0xa0,
-0x24, 0x20, 0xfa, 0xa4, 0x4c, 0x70, 0x9b, 0xe0, 0x44, 0xd0, 0x52, 0xc0, 0xd3, 0xd0, 0x4e, 0x20,
-0xfa, 0x94, 0xa5, 0x7a, 0xa4, 0x7b, 0x4c, 0x74, 0x9b, 0xa5, 0x79, 0xd0, 0x40, 0x4c, 0xcf, 0xcc,
-0x24, 0xe, 0x10, 0xf, 0xa0, 0x0, 0x20, 0xdc, 0x4, 0xaa, 0xc8, 0x20, 0xdc, 0x4, 0xa8, 0x8a,
-0x4c, 0x71, 0x94, 0xa5, 0x65, 0xc9, 0x4, 0xd0, 0x78, 0xa5, 0x64, 0xc9, 0xa2, 0xd0, 0x72, 0xe0,
-0x54, 0xd0, 0x1b, 0xc0, 0x49, 0xd0, 0x6a, 0x20, 0x31, 0x95, 0x98, 0xa2, 0xa0, 0x4c, 0xd4, 0xa2,
-0x20, 0xde, 0xff, 0x86, 0x64, 0x84, 0x63, 0x85, 0x65, 0xa0, 0x0, 0x84, 0x62, 0x60, 0xe0, 0x53,
-0xd0, 0xa, 0xc0, 0x54, 0xd0, 0x4b, 0x20, 0xb7, 0xff, 0x4c, 0xc1, 0xa2, 0xe0, 0x44, 0xd0, 0x26,
-0xc0, 0x53, 0xd0, 0x3d, 0x20, 0xfa, 0x94, 0xa0, 0x0, 0xa9, 0x7a, 0x20, 0x94, 0x4, 0x29, 0xf,
-0xa, 0x85, 0xf, 0xa, 0xa, 0x65, 0xf, 0x85, 0xf, 0xc8, 0xa9, 0x7a, 0x20, 0x94, 0x4, 0x29,
-0xf, 0x65, 0xf, 0x4c, 0xc1, 0xa2, 0xe0, 0x45, 0xd0, 0x17, 0xc0, 0x52, 0xf0, 0xd, 0xc0, 0x4c,
-0xd0, 0xf, 0xad, 0xf1, 0x4, 0xac, 0xf0, 0x4, 0x4c, 0x76, 0x9a, 0xad, 0xef, 0x4, 0x4c, 0xc1,
-0xa2, 0xa5, 0x64, 0xa4, 0x65, 0x4c, 0x1f, 0xa2, 0xc9, 0xd5, 0xb0, 0x58, 0xc9, 0xcb, 0x90, 0x2,
-0xe9, 0x1, 0x48, 0xaa, 0x20, 0x73, 0x4, 0xe0, 0xd3, 0xf0, 0x8, 0xe0, 0xcb, 0xb0, 0x29, 0xe0,
-0xc8, 0x90, 0x25, 0x20, 0x8e, 0x94, 0x20, 0x2c, 0x93, 0x20, 0x91, 0x94, 0x20, 0x1a, 0x93, 0x68,
-0xc9, 0xd3, 0xf0, 0x2d, 0xaa, 0xa5, 0x65, 0x48, 0xa5, 0x64, 0x48, 0x8a, 0x48, 0x20, 0x84, 0x9d,
-0x68, 0xa8, 0x8a, 0x48, 0x98, 0x4c, 0xdd, 0x95, 0x20, 0x85, 0x94, 0x68, 0x38, 0xe9, 0xb4, 0xa,
-0xa8, 0xb9, 0x16, 0x84, 0x85, 0x56, 0xb9, 0x15, 0x84, 0x85, 0x55, 0x20, 0x54, 0x0, 0x4c, 0x17,
-0x93, 0x4c, 0x86, 0xb3, 0x4c, 0xa1, 0x94, 0xa0, 0xff, 0x2c, 0xa0, 0x0, 0x84, 0xb, 0x20, 0x86,
-0x98, 0xa5, 0x64, 0x45, 0xb, 0x85, 0x7, 0xa5, 0x65, 0x45, 0xb, 0x85, 0x8, 0x20, 0x81, 0xa2,
-0x20, 0x86, 0x98, 0xa5, 0x65, 0x45, 0xb, 0x25, 0x8, 0x45, 0xb, 0xa8, 0xa5, 0x64, 0x45, 0xb,
-0x25, 0x7, 0x45, 0xb, 0x4c, 0x71, 0x94, 0x20, 0x1b, 0x93, 0xb0, 0x13, 0xa5, 0x6e, 0x9, 0x7f,
-0x25, 0x6a, 0x85, 0x6a, 0xa9, 0x69, 0xa0, 0x0, 0x20, 0xe0, 0xa2, 0xaa, 0x4c, 0x73, 0x96, 0xa9,
-0x0, 0x85, 0xd, 0xc6, 0x4d, 0x20, 0x4e, 0x9c, 0x85, 0x61, 0x86, 0x62, 0x84, 0x63, 0xa5, 0x6c,
-0xa4, 0x6d, 0x20, 0x52, 0x9c, 0x86, 0x6c, 0x84, 0x6d, 0xaa, 0x38, 0xe5, 0x61, 0xf0, 0x8, 0xa9,
-0x1, 0x90, 0x4, 0xa6, 0x61, 0xa9, 0xff, 0x85, 0x66, 0xa0, 0xff, 0xe8, 0xc8, 0xca, 0xd0, 0x7,
-0xa6, 0x66, 0x30, 0x17, 0x18, 0x90, 0x14, 0x20, 0x85, 0x81, 0x48, 0x20, 0x7d, 0x81, 0x85, 0x78,
-0x68, 0xc5, 0x78, 0xf0, 0xe7, 0xa2, 0xff, 0xb0, 0x2, 0xa2, 0x1, 0xe8, 0x8a, 0x2a, 0x25, 0x12,
-0xf0, 0x2, 0xa9, 0xff, 0x4c, 0xc1, 0xa2, 0x20, 0x91, 0x94, 0xaa, 0x20, 0xaa, 0x96, 0x20, 0x79,
-0x4, 0xd0, 0xf4, 0x60, 0xa2, 0x0, 0x20, 0x79, 0x4, 0x86, 0xc, 0x85, 0x45, 0x20, 0x79, 0x4,
-0x20, 0x3a, 0x97, 0xb0, 0x3, 0x4c, 0xa1, 0x94, 0xa2, 0x0, 0x86, 0xd, 0x86, 0xe, 0x20, 0x73,
-0x4, 0x90, 0x5, 0x20, 0x3a, 0x97, 0x90, 0xb, 0xaa, 0x20, 0x73, 0x4, 0x90, 0xfb, 0x20, 0x3a,
-0x97, 0xb0, 0xf6, 0xc9, 0x24, 0xd0, 0x6, 0xa9, 0xff, 0x85, 0xd, 0xd0, 0x10, 0xc9, 0x25, 0xd0,
-0x13, 0xa5, 0x10, 0xd0, 0xd0, 0xa9, 0x80, 0x85, 0xe, 0x5, 0x45, 0x85, 0x45, 0x8a, 0x9, 0x80,
-0xaa, 0x20, 0x73, 0x4, 0x86, 0x46, 0x38, 0x5, 0x10, 0xe9, 0x28, 0xd0, 0x3, 0x4c, 0x9b, 0x98,
-0xa0, 0x0, 0x84, 0x10, 0xa5, 0x2d, 0xa6, 0x2e, 0x86, 0x60, 0x85, 0x5f, 0xe4, 0x30, 0xd0, 0x4,
-0xc5, 0x2f, 0xf0, 0x2f, 0x20, 0xd1, 0x4, 0x85, 0x78, 0xa5, 0x45, 0xc5, 0x78, 0xd0, 0x10, 0xc8,
-0x20, 0xd1, 0x4, 0x85, 0x78, 0xa5, 0x46, 0xc5, 0x78, 0xd0, 0x3, 0x4c, 0x4c, 0x98, 0x88, 0x18,
-0xa5, 0x5f, 0x69, 0x7, 0x90, 0xd4, 0xe8, 0xd0, 0xcf, 0xc9, 0x41, 0x90, 0x5, 0xe9, 0x5b, 0x38,
-0xe9, 0xa5, 0x60, 0x68, 0x48, 0xc9, 0xaf, 0xd0, 0x2a, 0xa9, 0xa2, 0xa0, 0x4, 0x60, 0xc0, 0xc9,
-0xf0, 0xf7, 0xc0, 0x49, 0xd0, 0x31, 0xf0, 0x18, 0xc0, 0xd3, 0xf0, 0x14, 0xc0, 0x53, 0xd0, 0x27,
-0xf0, 0xe, 0xc0, 0x54, 0xd0, 0x21, 0xf0, 0x8, 0xc0, 0x52, 0xf0, 0x4, 0xc0, 0x4c, 0xd0, 0x17,
-0x4c, 0xa1, 0x94, 0xa5, 0x45, 0xa4, 0x46, 0xc9, 0x54, 0xf0, 0xd3, 0xc9, 0x53, 0xf0, 0xe3, 0xc9,
-0x45, 0xf0, 0xe5, 0xc9, 0x44, 0xf0, 0xd1, 0xa5, 0x2f, 0xa4, 0x30, 0x85, 0x5f, 0x84, 0x60, 0xa5,
-0x31, 0xa4, 0x32, 0x85, 0x5a, 0x84, 0x5b, 0x18, 0x69, 0x7, 0x90, 0x1, 0xc8, 0x85, 0x58, 0x84,
-0x59, 0x20, 0xc0, 0x88, 0xa5, 0x58, 0xa4, 0x59, 0xc8, 0x85, 0x2f, 0x84, 0x30, 0x85, 0x58, 0x84,
-0x59, 0xa5, 0x58, 0xa6, 0x59, 0xe4, 0x32, 0xd0, 0x6, 0xc5, 0x31, 0xd0, 0x2, 0xf0, 0x78, 0x85,
-0x22, 0x86, 0x23, 0xa0, 0x0, 0x20, 0xb0, 0x4, 0xaa, 0xc8, 0x20, 0xb0, 0x4, 0x8, 0xc8, 0x20,
-0xb0, 0x4, 0x65, 0x58, 0x85, 0x58, 0xc8, 0x20, 0xb0, 0x4, 0x65, 0x59, 0x85, 0x59, 0x28, 0x10,
-0xd0, 0x8a, 0x30, 0xcd, 0xc8, 0x20, 0xb0, 0x4, 0xa0, 0x0, 0xa, 0x69, 0x5, 0x65, 0x22, 0x85,
-0x22, 0x90, 0x2, 0xe6, 0x23, 0xa6, 0x23, 0xe4, 0x59, 0xd0, 0x4, 0xc5, 0x58, 0xf0, 0xb6, 0xa0,
-0x0, 0x20, 0xb0, 0x4, 0xf0, 0x24, 0x85, 0x78, 0xc8, 0x20, 0xb0, 0x4, 0x18, 0x65, 0x78, 0x85,
-0x5a, 0xc8, 0x20, 0xb0, 0x4, 0x69, 0x0, 0x85, 0x5b, 0xa0, 0x0, 0x20, 0x89, 0x81, 0x69, 0x7,
-0x91, 0x5a, 0xc8, 0x20, 0x89, 0x81, 0x69, 0x0, 0x91, 0x5a, 0xa9, 0x3, 0x18, 0x65, 0x22, 0x85,
-0x22, 0x90, 0xc2, 0xe6, 0x23, 0xd0, 0xbe, 0xa0, 0x0, 0xa5, 0x45, 0x91, 0x5f, 0xc8, 0xa5, 0x46,
-0x91, 0x5f, 0xa9, 0x0, 0xc8, 0x91, 0x5f, 0xc0, 0x6, 0xd0, 0xf9, 0xa5, 0x5f, 0x18, 0x69, 0x2,
-0xa4, 0x60, 0x90, 0x1, 0xc8, 0x85, 0x47, 0x84, 0x48, 0x60, 0xa5, 0xb, 0xa, 0x69, 0x5, 0x65,
-0x5f, 0xa4, 0x60, 0x90, 0x1, 0xc8, 0x85, 0x58, 0x84, 0x59, 0x60, 0x90, 0x80, 0x0, 0x0, 0x0,
-0x20, 0x86, 0x98, 0xa5, 0x64, 0xa4, 0x65, 0x60, 0x20, 0x73, 0x4, 0x20, 0x2c, 0x93, 0x20, 0x17,
-0x93, 0xa5, 0x66, 0x30, 0xd, 0xa5, 0x61, 0xc9, 0x90, 0x90, 0xc, 0xa9, 0x6c, 0xa0, 0x98, 0x20,
-0xe0, 0xa2, 0xd0, 0x3, 0x4c, 0x1c, 0x99, 0x4c, 0x27, 0xa3, 0xa5, 0xc, 0x5, 0xe, 0x48, 0xa5,
-0xd, 0x48, 0xa0, 0x0, 0x98, 0x48, 0xa5, 0x46, 0x48, 0xa5, 0x45, 0x48, 0x20, 0x79, 0x98, 0x68,
-0x85, 0x45, 0x68, 0x85, 0x46, 0x68, 0xa8, 0xba, 0xbd, 0x2, 0x1, 0x48, 0xbd, 0x1, 0x1, 0x48,
-0xa5, 0x64, 0x9d, 0x2, 0x1, 0xa5, 0x65, 0x9d, 0x1, 0x1, 0xc8, 0x84, 0xb, 0x20, 0x79, 0x4,
-0xa4, 0xb, 0xc9, 0x2c, 0xf0, 0xce, 0x20, 0x8b, 0x94, 0x68, 0x85, 0xd, 0x68, 0x85, 0xe, 0x29,
-0x7f, 0x85, 0xc, 0xa6, 0x2f, 0xa5, 0x30, 0x86, 0x5f, 0x85, 0x60, 0xc5, 0x32, 0xd0, 0x4, 0xe4,
-0x31, 0xf0, 0x46, 0xa0, 0x0, 0x20, 0xd1, 0x4, 0xc8, 0xc5, 0x45, 0xd0, 0xb, 0x20, 0xd1, 0x4,
-0x85, 0x78, 0xa5, 0x46, 0xc5, 0x78, 0xf0, 0x18, 0xc8, 0x20, 0xd1, 0x4, 0x18, 0x65, 0x5f, 0xaa,
-0xc8, 0x20, 0xd1, 0x4, 0x65, 0x60, 0x90, 0xcf, 0xa2, 0x12, 0x2c, 0xa2, 0xe, 0x4c, 0x83, 0x86,
-0xa2, 0x13, 0xa5, 0xc, 0xd0, 0xf7, 0x20, 0x5b, 0x98, 0xa0, 0x4, 0x20, 0xd1, 0x4, 0x85, 0x78,
-0xa5, 0xb, 0xc5, 0x78, 0xd0, 0xe2, 0x4c, 0xc3, 0x99, 0x20, 0x5b, 0x98, 0x20, 0x23, 0x89, 0xa0,
-0x0, 0x84, 0x72, 0xa2, 0x5, 0xa5, 0x45, 0x91, 0x5f, 0x10, 0x1, 0xca, 0xc8, 0xa5, 0x46, 0x91,
-0x5f, 0x10, 0x2, 0xca, 0xca, 0x86, 0x71, 0xa5, 0xb, 0xc8, 0xc8, 0xc8, 0x91, 0x5f, 0xa2, 0xb,
-0xa9, 0x0, 0x24, 0xc, 0x50, 0x8, 0x68, 0x18, 0x69, 0x1, 0xaa, 0x68, 0x69, 0x0, 0xc8, 0x91,
-0x5f, 0xc8, 0x8a, 0x91, 0x5f, 0x20, 0x2f, 0x9a, 0x86, 0x71, 0x85, 0x72, 0xa4, 0x22, 0xc6, 0xb,
-0xd0, 0xdc, 0x65, 0x59, 0xb0, 0x67, 0x85, 0x59, 0xa8, 0x8a, 0x65, 0x58, 0x90, 0x3, 0xc8, 0xf0,
-0x5c, 0x20, 0x23, 0x89, 0x85, 0x31, 0x84, 0x32, 0xa9, 0x0, 0xe6, 0x72, 0xa4, 0x71, 0xf0, 0x5,
-0x88, 0x91, 0x58, 0xd0, 0xfb, 0xc6, 0x59, 0xc6, 0x72, 0xd0, 0xf5, 0xe6, 0x59, 0x38, 0xa5, 0x31,
-0xe5, 0x5f, 0xa0, 0x2, 0x91, 0x5f, 0xa5, 0x32, 0xc8, 0xe5, 0x60, 0x91, 0x5f, 0xa5, 0xc, 0xd0,
-0x6c, 0xc8, 0x20, 0xd1, 0x4, 0x85, 0xb, 0xa9, 0x0, 0x85, 0x71, 0x85, 0x72, 0xc8, 0x68, 0xaa,
-0x85, 0x64, 0x20, 0xd1, 0x4, 0x85, 0x78, 0x68, 0x85, 0x65, 0xc5, 0x78, 0x90, 0x12, 0xd0, 0xa,
-0xc8, 0x20, 0xd1, 0x4, 0x85, 0x78, 0xe4, 0x78, 0x90, 0x7, 0x4c, 0x19, 0x99, 0x4c, 0x81, 0x86,
-0xc8, 0xa5, 0x72, 0x5, 0x71, 0x18, 0xf0, 0xa, 0x20, 0x2f, 0x9a, 0x8a, 0x65, 0x64, 0xaa, 0x98,
-0xa4, 0x22, 0x65, 0x65, 0x86, 0x71, 0xc6, 0xb, 0xd0, 0xc1, 0x85, 0x72, 0xa2, 0x5, 0xa5, 0x45,
-0x10, 0x1, 0xca, 0xa5, 0x46, 0x10, 0x2, 0xca, 0xca, 0x86, 0x28, 0xa9, 0x0, 0x20, 0x3a, 0x9a,
-0x8a, 0x65, 0x58, 0x85, 0x47, 0x98, 0x65, 0x59, 0x85, 0x48, 0xa8, 0xa5, 0x47, 0x60, 0x84, 0x22,
-0x20, 0xd1, 0x4, 0x85, 0x28, 0x88, 0x20, 0xd1, 0x4, 0x85, 0x29, 0xa9, 0x10, 0x85, 0x5d, 0xa2,
-0x0, 0xa0, 0x0, 0x8a, 0xa, 0xaa, 0x98, 0x2a, 0xa8, 0xb0, 0xa2, 0x6, 0x71, 0x26, 0x72, 0x90,
-0xb, 0x18, 0x8a, 0x65, 0x28, 0xaa, 0x98, 0x65, 0x29, 0xa8, 0xb0, 0x91, 0xc6, 0x5d, 0xd0, 0xe3,
-0x60, 0xa5, 0xd, 0xf0, 0x3, 0x20, 0x4e, 0x9c, 0x20, 0x54, 0xa9, 0x38, 0xa5, 0x33, 0xe5, 0x31,
-0xa8, 0xa5, 0x34, 0xe5, 0x32, 0x20, 0x92, 0x9a, 0x38, 0x4c, 0xce, 0xa2, 0x38, 0x20, 0xf0, 0xff,
-0xa9, 0x0, 0x4c, 0x71, 0x94, 0x24, 0x81, 0x30, 0xa4, 0xa2, 0x15, 0x2c, 0xa2, 0x1b, 0x4c, 0x83,
-0x86, 0xa2, 0x0, 0x86, 0xd, 0x85, 0x62, 0x84, 0x63, 0xa2, 0x90, 0x60, 0x20, 0xcb, 0x9a, 0x20,
-0x86, 0x9a, 0x20, 0x8e, 0x94, 0xa9, 0x80, 0x85, 0x10, 0x20, 0xa5, 0x96, 0x20, 0x17, 0x93, 0x20,
-0x8b, 0x94, 0xa9, 0xb2, 0x20, 0x93, 0x94, 0x48, 0xa5, 0x48, 0x48, 0xa5, 0x47, 0x48, 0xa5, 0x3c,
-0x48, 0xa5, 0x3b, 0x48, 0x20, 0xb0, 0x8d, 0x4c, 0x3e, 0x9b, 0xa9, 0xa5, 0x20, 0x93, 0x94, 0x9,
-0x80, 0x85, 0x10, 0x20, 0xac, 0x96, 0x85, 0x4e, 0x84, 0x4f, 0x4c, 0x17, 0x93, 0x20, 0xcb, 0x9a,
-0xa5, 0x4f, 0x48, 0xa5, 0x4e, 0x48, 0x20, 0x85, 0x94, 0x20, 0x17, 0x93, 0x68, 0x85, 0x4e, 0x68,
-0x85, 0x4f, 0xa0, 0x2, 0x20, 0x59, 0x81, 0x85, 0x47, 0xaa, 0xc8, 0x20, 0x59, 0x81, 0xf0, 0x8c,
-0x85, 0x48, 0xc8, 0x20, 0x61, 0x81, 0x48, 0x88, 0x10, 0xf9, 0xa4, 0x48, 0x20, 0x59, 0xa2, 0xa5,
-0x3c, 0x48, 0xa5, 0x3b, 0x48, 0x20, 0x59, 0x81, 0x85, 0x3b, 0xc8, 0x20, 0x59, 0x81, 0x85, 0x3c,
-0xa5, 0x48, 0x48, 0xa5, 0x47, 0x48, 0x20, 0x14, 0x93, 0x68, 0x85, 0x4e, 0x68, 0x85, 0x4f, 0x20,
-0x79, 0x4, 0xf0, 0x3, 0x4c, 0xa1, 0x94, 0x68, 0x85, 0x3b, 0x68, 0x85, 0x3c, 0xa0, 0x0, 0x68,
-0x91, 0x4e, 0x68, 0xc8, 0x91, 0x4e, 0x68, 0xc8, 0x91, 0x4e, 0x68, 0xc8, 0x91, 0x4e, 0x68, 0xc8,
-0x91, 0x4e, 0x60, 0xa6, 0x64, 0xa4, 0x65, 0x86, 0x50, 0x84, 0x51, 0x20, 0x6, 0xa9, 0x86, 0x62,
-0x84, 0x63, 0x85, 0x61, 0x60, 0x20, 0x17, 0x93, 0xa0, 0x0, 0x20, 0x71, 0xa4, 0x68, 0x68, 0xa9,
-0xff, 0xa0, 0x0, 0xa2, 0x22, 0x86, 0x7, 0x86, 0x8, 0x85, 0x6f, 0x84, 0x70, 0x85, 0x62, 0x84,
-0x63, 0xa0, 0xff, 0xc8, 0x20, 0xc6, 0x4, 0xf0, 0xc, 0xc5, 0x7, 0xf0, 0x4, 0xc5, 0x8, 0xd0,
-0xf2, 0xc9, 0x22, 0xf0, 0x1, 0x18, 0x84, 0x61, 0x98, 0x65, 0x6f, 0x85, 0x71, 0xa6, 0x70, 0x90,
-0x1, 0xe8, 0x86, 0x72, 0x98, 0x20, 0x54, 0x9b, 0xa6, 0x6f, 0xa4, 0x70, 0x20, 0x2c, 0x9c, 0xa6,
-0x16, 0xe0, 0x22, 0xd0, 0x5, 0xa2, 0x19, 0x4c, 0x83, 0x86, 0xa5, 0x61, 0x95, 0x0, 0xa5, 0x62,
-0x95, 0x1, 0xa5, 0x63, 0x95, 0x2, 0xa0, 0x0, 0x86, 0x64, 0x84, 0x65, 0x84, 0x70, 0x88, 0x84,
-0xd, 0x86, 0x17, 0xe8, 0xe8, 0xe8, 0x86, 0x16, 0x60, 0xa5, 0x65, 0x48, 0xa5, 0x64, 0x48, 0x20,
-0x14, 0x94, 0x20, 0x1a, 0x93, 0x68, 0x85, 0x6f, 0x68, 0x85, 0x70, 0xa0, 0x0, 0x20, 0xc6, 0x4,
-0x85, 0x78, 0x20, 0xdc, 0x4, 0x18, 0x65, 0x78, 0x90, 0x3, 0x4c, 0x4c, 0xcc, 0x20, 0x54, 0x9b,
-0x20, 0x1b, 0x9c, 0xa5, 0x50, 0xa4, 0x51, 0x20, 0x52, 0x9c, 0x20, 0x30, 0x9c, 0xa5, 0x6f, 0xa4,
-0x70, 0x20, 0x52, 0x9c, 0x20, 0xb0, 0x9b, 0x4c, 0x46, 0x93, 0xa0, 0x0, 0x20, 0xc6, 0x4, 0x48,
-0xc8, 0x20, 0xc6, 0x4, 0xaa, 0xc8, 0x20, 0xc6, 0x4, 0xa8, 0x68, 0x86, 0x22, 0x84, 0x23, 0xa8,
-0xf0, 0xb, 0x48, 0x88, 0x20, 0xb0, 0x4, 0x91, 0x35, 0x98, 0xd0, 0xf7, 0x68, 0x18, 0x65, 0x35,
-0x85, 0x35, 0x90, 0x2, 0xe6, 0x36, 0x60, 0x20, 0x2c, 0x93, 0x20, 0x1a, 0x93, 0xa5, 0x64, 0xa4,
-0x65, 0x85, 0x22, 0x84, 0x23, 0x20, 0xaa, 0x9c, 0xd0, 0x39, 0x20, 0x9c, 0x8f, 0x90, 0x34, 0x88,
-0xa9, 0xff, 0x91, 0x22, 0x88, 0x8a, 0x91, 0x22, 0x48, 0x49, 0xff, 0x38, 0x65, 0x22, 0xa4, 0x23,
-0xb0, 0x1, 0x88, 0x85, 0x22, 0x84, 0x23, 0xaa, 0x68, 0xc4, 0x34, 0xd0, 0x3c, 0xe4, 0x33, 0xd0,
-0x38, 0x48, 0x38, 0x65, 0x33, 0x85, 0x33, 0x90, 0x2, 0xe6, 0x34, 0xe6, 0x33, 0xd0, 0x2, 0xe6,
-0x34, 0x68, 0x60, 0xa0, 0x0, 0x20, 0xb0, 0x4, 0x48, 0xc8, 0x20, 0xb0, 0x4, 0xaa, 0xc8, 0x20,
-0xb0, 0x4, 0xa8, 0x86, 0x22, 0x84, 0x23, 0x68, 0x60, 0xc4, 0x18, 0xd0, 0xc, 0xc5, 0x17, 0xd0,
-0x8, 0x85, 0x16, 0xe9, 0x3, 0x85, 0x17, 0xa0, 0x0, 0x60, 0x20, 0x87, 0x9d, 0x8a, 0x48, 0xa9,
-0x1, 0x20, 0x5c, 0x9b, 0x68, 0xa0, 0x0, 0x91, 0x62, 0x68, 0x68, 0x4c, 0xb0, 0x9b, 0x20, 0x46,
-0x9d, 0x48, 0x20, 0x81, 0x81, 0x85, 0x78, 0x68, 0xc5, 0x78, 0x98, 0x90, 0x5, 0x20, 0x81, 0x81,
-0xaa, 0x98, 0x48, 0x8a, 0x48, 0x20, 0x5c, 0x9b, 0xa5, 0x50, 0xa4, 0x51, 0x20, 0x52, 0x9c, 0x68,
-0xa8, 0x68, 0x18, 0x65, 0x22, 0x85, 0x22, 0x90, 0x2, 0xe6, 0x23, 0x98, 0x20, 0x30, 0x9c, 0x4c,
-0xb0, 0x9b, 0x20, 0x46, 0x9d, 0x48, 0x20, 0x81, 0x81, 0x85, 0x78, 0x68, 0x18, 0xe5, 0x78, 0x49,
-0xff, 0x4c, 0xdc, 0x9c, 0xa9, 0xff, 0x85, 0x65, 0x20, 0x79, 0x4, 0xc9, 0x29, 0xf0, 0x6, 0x20,
-0x91, 0x94, 0x20, 0x84, 0x9d, 0x20, 0x46, 0x9d, 0xf0, 0x53, 0xca, 0x8a, 0x48, 0xa2, 0x0, 0x48,
-0x20, 0x81, 0x81, 0x85, 0x78, 0x68, 0x18, 0xe5, 0x78, 0xb0, 0xa8, 0x49, 0xff, 0xc5, 0x65, 0x90,
-0xa3, 0xa5, 0x65, 0xb0, 0x9f, 0x20, 0x8b, 0x94, 0x68, 0xa8, 0x68, 0x85, 0x55, 0x68, 0x68, 0x68,
-0xaa, 0x68, 0x85, 0x50, 0x68, 0x85, 0x51, 0xa5, 0x55, 0x48, 0x98, 0x48, 0xa0, 0x0, 0x8a, 0x60,
-0x20, 0x67, 0x9d, 0x4c, 0x81, 0x9a, 0x20, 0x4b, 0x9c, 0xa2, 0x0, 0x86, 0xd, 0xa8, 0x60, 0x20,
-0x67, 0x9d, 0xf0, 0x6, 0xa0, 0x0, 0x20, 0xb0, 0x4, 0xa8, 0x4c, 0x81, 0x9a, 0x4c, 0x1c, 0x99,
-0x20, 0x73, 0x4, 0x20, 0x14, 0x93, 0x20, 0x7f, 0x98, 0xa6, 0x64, 0xd0, 0xf0, 0xa6, 0x65, 0x4c,
-0x79, 0x4, 0x20, 0x67, 0x9d, 0xf0, 0x37, 0xa6, 0x3b, 0xa4, 0x3c, 0x86, 0x71, 0x84, 0x72, 0xa6,
-0x22, 0x86, 0x3b, 0x18, 0x65, 0x22, 0x85, 0x24, 0xa6, 0x23, 0x86, 0x3c, 0x90, 0x1, 0xe8, 0x86,
-0x25, 0xa0, 0x0, 0x20, 0xbb, 0x4, 0x48, 0x98, 0x91, 0x24, 0x20, 0x79, 0x4, 0x20, 0x7f, 0xa3,
-0x68, 0xa0, 0x0, 0x91, 0x24, 0xa6, 0x71, 0xa4, 0x72, 0x86, 0x3b, 0x84, 0x3c, 0x60, 0x4c, 0x2b,
-0x9f, 0x20, 0x14, 0x93, 0x20, 0xe4, 0x9d, 0x20, 0x91, 0x94, 0x4c, 0x84, 0x9d, 0x20, 0x91, 0x94,
-0x20, 0x14, 0x93, 0xa5, 0x66, 0x30, 0x96, 0xa5, 0x61, 0xc9, 0x91, 0xb0, 0x90, 0x20, 0x27, 0xa3,
-0xa5, 0x64, 0xa4, 0x65, 0x84, 0x14, 0x85, 0x15, 0x60, 0xa5, 0x15, 0x48, 0xa5, 0x14, 0x48, 0x20,
-0xe4, 0x9d, 0xa0, 0x0, 0x20, 0x5d, 0x81, 0xa8, 0x68, 0x85, 0x14, 0x68, 0x85, 0x15, 0x4c, 0x81,
-0x9a, 0x20, 0xd2, 0x9d, 0x8a, 0xa0, 0x0, 0x91, 0x14, 0x60, 0x20, 0x67, 0x9d, 0x85, 0x24, 0xa0,
-0x0, 0x84, 0x25, 0x84, 0x71, 0x84, 0x72, 0xc4, 0x24, 0xf0, 0x34, 0x20, 0xb0, 0x4, 0xc8, 0xc9,
-0x20, 0xf0, 0xf4, 0xe6, 0x25, 0xa6, 0x25, 0xe0, 0x5, 0xf0, 0x2b, 0xc9, 0x30, 0x90, 0x27, 0xc9,
-0x3a, 0x90, 0xa, 0xc9, 0x41, 0x90, 0x1f, 0xc9, 0x47, 0xb0, 0x1b, 0xe9, 0x7, 0xe9, 0x2f, 0xa,
-0xa, 0xa, 0xa, 0xa2, 0x4, 0xa, 0x26, 0x71, 0x26, 0x72, 0xca, 0xd0, 0xf8, 0xf0, 0xc8, 0xa4,
-0x71, 0xa5, 0x72, 0x4c, 0x76, 0x9a, 0x4c, 0x1c, 0x99, 0x20, 0xd2, 0x9d, 0x86, 0x49, 0xa2, 0x0,
-0x20, 0x79, 0x4, 0xf0, 0x3, 0x20, 0xd8, 0x9d, 0x86, 0x4a, 0xa0, 0x0, 0x20, 0x5d, 0x81, 0x45,
-0x4a, 0x25, 0x49, 0xf0, 0xf7, 0x60, 0xa5, 0x66, 0x49, 0xff, 0x85, 0x66, 0x45, 0x6e, 0x85, 0x6f,
-0xa5, 0x61, 0x4c, 0x9e, 0x9e, 0x20, 0xcd, 0x9f, 0x90, 0x3c, 0x20, 0x7, 0xa1, 0xd0, 0x3, 0x4c,
-0x81, 0xa2, 0xa6, 0x70, 0x86, 0x56, 0xa2, 0x69, 0xa5, 0x69, 0xa8, 0xf0, 0xd8, 0x38, 0xe5, 0x61,
-0xf0, 0x24, 0x90, 0x12, 0x84, 0x61, 0xa4, 0x6e, 0x84, 0x66, 0x49, 0xff, 0x69, 0x0, 0xa0, 0x0,
-0x84, 0x56, 0xa2, 0x61, 0xd0, 0x4, 0xa0, 0x0, 0x84, 0x70, 0xc9, 0xf9, 0x30, 0xc7, 0xa8, 0xa5,
-0x70, 0x56, 0x1, 0x20, 0xe4, 0x9f, 0x24, 0x6f, 0x10, 0x57, 0xa0, 0x61, 0xe0, 0x69, 0xf0, 0x2,
-0xa0, 0x69, 0x38, 0x49, 0xff, 0x65, 0x56, 0x85, 0x70, 0xb9, 0x4, 0x0, 0xf5, 0x4, 0x85, 0x65,
-0xb9, 0x3, 0x0, 0xf5, 0x3, 0x85, 0x64, 0xb9, 0x2, 0x0, 0xf5, 0x2, 0x85, 0x63, 0xb9, 0x1,
-0x0, 0xf5, 0x1, 0x85, 0x62, 0xb0, 0x3, 0x20, 0x7b, 0x9f, 0xa0, 0x0, 0x98, 0x18, 0xa6, 0x62,
-0xd0, 0x4a, 0xa6, 0x63, 0x86, 0x62, 0xa6, 0x64, 0x86, 0x63, 0xa6, 0x65, 0x86, 0x64, 0xa6, 0x70,
-0x86, 0x65, 0x84, 0x70, 0x69, 0x8, 0xc9, 0x20, 0xd0, 0xe4, 0xa9, 0x0, 0x85, 0x61, 0x85, 0x66,
-0x60, 0x65, 0x56, 0x85, 0x70, 0xa5, 0x65, 0x65, 0x6d, 0x85, 0x65, 0xa5, 0x64, 0x65, 0x6c, 0x85,
-0x64, 0xa5, 0x63, 0x65, 0x6b, 0x85, 0x63, 0xa5, 0x62, 0x65, 0x6a, 0x85, 0x62, 0x4c, 0x6a, 0x9f,
-0x69, 0x1, 0x6, 0x70, 0x26, 0x65, 0x26, 0x64, 0x26, 0x63, 0x26, 0x62, 0x10, 0xf2, 0x38, 0xe5,
-0x61, 0xb0, 0xc7, 0x49, 0xff, 0x69, 0x1, 0x85, 0x61, 0x90, 0xe, 0xe6, 0x61, 0xf0, 0x42, 0x66,
-0x62, 0x66, 0x63, 0x66, 0x64, 0x66, 0x65, 0x66, 0x70, 0x60, 0xa5, 0x66, 0x49, 0xff, 0x85, 0x66,
-0xa5, 0x62, 0x49, 0xff, 0x85, 0x62, 0xa5, 0x63, 0x49, 0xff, 0x85, 0x63, 0xa5, 0x64, 0x49, 0xff,
-0x85, 0x64, 0xa5, 0x65, 0x49, 0xff, 0x85, 0x65, 0xa5, 0x70, 0x49, 0xff, 0x85, 0x70, 0xe6, 0x70,
-0xd0, 0xe, 0xe6, 0x65, 0xd0, 0xa, 0xe6, 0x64, 0xd0, 0x6, 0xe6, 0x63, 0xd0, 0x2, 0xe6, 0x62,
-0x60, 0xa2, 0xf, 0x4c, 0x83, 0x86, 0xa2, 0x25, 0xb4, 0x4, 0x84, 0x70, 0xb4, 0x3, 0x94, 0x4,
-0xb4, 0x2, 0x94, 0x3, 0xb4, 0x1, 0x94, 0x2, 0xa4, 0x68, 0x94, 0x1, 0x69, 0x8, 0x30, 0xe8,
-0xf0, 0xe6, 0xe9, 0x8, 0xa8, 0xa5, 0x70, 0xb0, 0x14, 0x16, 0x1, 0x90, 0x2, 0xf6, 0x1, 0x76,
-0x1, 0x76, 0x1, 0x76, 0x2, 0x76, 0x3, 0x76, 0x4, 0x6a, 0xc8, 0xd0, 0xec, 0x18, 0x60, 0x81,
-0x0, 0x0, 0x0, 0x0, 0x3, 0x7f, 0x5e, 0x56, 0xcb, 0x79, 0x80, 0x13, 0x9b, 0xb, 0x64, 0x80,
-0x76, 0x38, 0x93, 0x16, 0x82, 0x38, 0xaa, 0x3b, 0x20, 0x80, 0x35, 0x4, 0xf3, 0x34, 0x81, 0x35,
-0x4, 0xf3, 0x34, 0x80, 0x80, 0x0, 0x0, 0x0, 0x80, 0x31, 0x72, 0x17, 0xf8, 0x20, 0xb0, 0xa2,
-0xf0, 0x2, 0x10, 0x3, 0x4c, 0x1c, 0x99, 0xa5, 0x61, 0xe9, 0x7f, 0x48, 0xa9, 0x80, 0x85, 0x61,
-0xa9, 0xa, 0xa0, 0xa0, 0x20, 0x66, 0xa0, 0xa9, 0xf, 0xa0, 0xa0, 0x20, 0x72, 0xa0, 0xa9, 0xf0,
-0xa0, 0x9f, 0x20, 0x6c, 0xa0, 0xa9, 0xf5, 0xa0, 0x9f, 0x20, 0xb3, 0xa6, 0xa9, 0x14, 0xa0, 0xa0,
-0x20, 0x66, 0xa0, 0x68, 0x20, 0xa, 0xa4, 0xa9, 0x19, 0xa0, 0xa0, 0x20, 0xdc, 0xa0, 0x4c, 0x7b,
-0xa0, 0xa9, 0xa3, 0xa0, 0xa5, 0x20, 0xdc, 0xa0, 0x4c, 0x9e, 0x9e, 0x20, 0xdc, 0xa0, 0x4c, 0x87,
-0x9e, 0x20, 0xdc, 0xa0, 0x4c, 0x97, 0xa1, 0x20, 0x7, 0xa1, 0xd0, 0x3, 0x4c, 0xdb, 0xa0, 0x20,
-0x37, 0xa1, 0xa9, 0x0, 0x85, 0x26, 0x85, 0x27, 0x85, 0x28, 0x85, 0x29, 0xa5, 0x70, 0x20, 0xa9,
-0xa0, 0xa5, 0x65, 0x20, 0xa9, 0xa0, 0xa5, 0x64, 0x20, 0xa9, 0xa0, 0xa5, 0x63, 0x20, 0xa9, 0xa0,
-0xa5, 0x62, 0x20, 0xae, 0xa0, 0x4c, 0xc, 0xa2, 0xd0, 0x3, 0x4c, 0xb7, 0x9f, 0x4a, 0x9, 0x80,
-0xa8, 0x90, 0x19, 0x18, 0xa5, 0x29, 0x65, 0x6d, 0x85, 0x29, 0xa5, 0x28, 0x65, 0x6c, 0x85, 0x28,
-0xa5, 0x27, 0x65, 0x6b, 0x85, 0x27, 0xa5, 0x26, 0x65, 0x6a, 0x85, 0x26, 0x66, 0x26, 0x66, 0x27,
-0x66, 0x28, 0x66, 0x29, 0x66, 0x70, 0x98, 0x4a, 0xd0, 0xd6, 0x60, 0x85, 0x22, 0x84, 0x23, 0xa0,
-0x4, 0xb1, 0x22, 0x85, 0x6d, 0x88, 0xb1, 0x22, 0x85, 0x6c, 0x88, 0xb1, 0x22, 0x85, 0x6b, 0x88,
-0xb1, 0x22, 0x85, 0x6e, 0x45, 0x66, 0x85, 0x6f, 0xa5, 0x6e, 0x9, 0x80, 0x85, 0x6a, 0x88, 0xb1,
-0x22, 0x85, 0x69, 0xa5, 0x61, 0x60, 0x85, 0x22, 0x84, 0x23, 0xa0, 0x4, 0x20, 0xb0, 0x4, 0x85,
-0x6d, 0x88, 0x20, 0xb0, 0x4, 0x85, 0x6c, 0x88, 0x20, 0xb0, 0x4, 0x85, 0x6b, 0x88, 0x20, 0xb0,
-0x4, 0x85, 0x6e, 0x45, 0x66, 0x85, 0x6f, 0xa5, 0x6e, 0x9, 0x80, 0x85, 0x6a, 0x88, 0x20, 0xb0,
-0x4, 0x85, 0x69, 0xa5, 0x61, 0x60, 0xa5, 0x69, 0xf0, 0x1f, 0x18, 0x65, 0x61, 0x90, 0x4, 0x30,
-0x1d, 0x18, 0x2c, 0x10, 0x14, 0x69, 0x80, 0x85, 0x61, 0xd0, 0x3, 0x4c, 0x2f, 0x9f, 0xa5, 0x6f,
-0x85, 0x66, 0x60, 0xa5, 0x66, 0x49, 0xff, 0x30, 0x5, 0x68, 0x68, 0x4c, 0x2b, 0x9f, 0x4c, 0xb2,
-0x9f, 0x20, 0x91, 0xa2, 0xaa, 0xf0, 0x10, 0x18, 0x69, 0x2, 0xb0, 0xf2, 0xa2, 0x0, 0x86, 0x6f,
-0x20, 0xab, 0x9e, 0xe6, 0x61, 0xf0, 0xe7, 0x60, 0x84, 0x20, 0x0, 0x0, 0x0, 0xa2, 0x14, 0x4c,
-0x83, 0x86, 0x20, 0x91, 0xa2, 0xa9, 0x79, 0xa0, 0xa1, 0xa2, 0x0, 0x86, 0x6f, 0x20, 0x21, 0xa2,
-0x4c, 0x97, 0xa1, 0x20, 0x7, 0xa1, 0xf0, 0xe5, 0x20, 0xa0, 0xa2, 0xa9, 0x0, 0x38, 0xe5, 0x61,
-0x85, 0x61, 0x20, 0x37, 0xa1, 0xe6, 0x61, 0xf0, 0xb5, 0xa2, 0xfc, 0xa9, 0x1, 0xa4, 0x6a, 0xc4,
-0x62, 0xd0, 0x10, 0xa4, 0x6b, 0xc4, 0x63, 0xd0, 0xa, 0xa4, 0x6c, 0xc4, 0x64, 0xd0, 0x4, 0xa4,
-0x6d, 0xc4, 0x65, 0x8, 0x2a, 0x90, 0x9, 0xe8, 0x95, 0x29, 0xf0, 0x32, 0x10, 0x34, 0xa9, 0x1,
-0x28, 0xb0, 0xe, 0x6, 0x6d, 0x26, 0x6c, 0x26, 0x6b, 0x26, 0x6a, 0xb0, 0xe6, 0x30, 0xce, 0x10,
-0xe2, 0xa8, 0xa5, 0x6d, 0xe5, 0x65, 0x85, 0x6d, 0xa5, 0x6c, 0xe5, 0x64, 0x85, 0x6c, 0xa5, 0x6b,
-0xe5, 0x63, 0x85, 0x6b, 0xa5, 0x6a, 0xe5, 0x62, 0x85, 0x6a, 0x98, 0x4c, 0xd4, 0xa1, 0xa9, 0x40,
-0xd0, 0xce, 0xa, 0xa, 0xa, 0xa, 0xa, 0xa, 0x85, 0x70, 0x28, 0xa5, 0x26, 0x85, 0x62, 0xa5,
-0x27, 0x85, 0x63, 0xa5, 0x28, 0x85, 0x64, 0xa5, 0x29, 0x85, 0x65, 0x4c, 0xb, 0x9f, 0x18, 0x24,
-0x38, 0x85, 0x22, 0x84, 0x23, 0xa0, 0x4, 0x20, 0x20, 0xa3, 0x85, 0x65, 0x88, 0x20, 0x20, 0xa3,
-0x85, 0x64, 0x88, 0x20, 0x20, 0xa3, 0x85, 0x63, 0x88, 0x20, 0x20, 0xa3, 0x85, 0x66, 0x9, 0x80,
-0x85, 0x62, 0x88, 0x20, 0x20, 0xa3, 0x85, 0x61, 0x84, 0x70, 0x60, 0xa2, 0x5c, 0x2c, 0xa2, 0x57,
-0xa0, 0x0, 0xf0, 0x4, 0xa6, 0x49, 0xa4, 0x4a, 0x20, 0xa0, 0xa2, 0x86, 0x22, 0x84, 0x23, 0xa0,
-0x4, 0xa5, 0x65, 0x91, 0x22, 0x88, 0xa5, 0x64, 0x91, 0x22, 0x88, 0xa5, 0x63, 0x91, 0x22, 0x88,
-0xa5, 0x66, 0x9, 0x7f, 0x25, 0x62, 0x91, 0x22, 0x88, 0xa5, 0x61, 0x91, 0x22, 0x84, 0x70, 0x60,
-0xa5, 0x6e, 0x85, 0x66, 0xa2, 0x5, 0xb5, 0x68, 0x95, 0x60, 0xca, 0xd0, 0xf9, 0x86, 0x70, 0x60,
-0x20, 0xa0, 0xa2, 0xa2, 0x6, 0xb5, 0x60, 0x95, 0x68, 0xca, 0xd0, 0xf9, 0x86, 0x70, 0x60, 0xa5,
-0x61, 0xf0, 0xfb, 0x6, 0x70, 0x90, 0xf7, 0x20, 0xa3, 0x9f, 0xd0, 0xf2, 0x4c, 0x6c, 0x9f, 0xa5,
-0x61, 0xf0, 0x9, 0xa5, 0x66, 0x2a, 0xa9, 0xff, 0xb0, 0x2, 0xa9, 0x1, 0x60, 0x20, 0xb0, 0xa2,
-0x85, 0x62, 0xa9, 0x0, 0x85, 0x63, 0xa2, 0x88, 0xa5, 0x62, 0x49, 0xff, 0x2a, 0xa9, 0x0, 0x85,
-0x65, 0x85, 0x64, 0x86, 0x61, 0x85, 0x70, 0x85, 0x66, 0x4c, 0x6, 0x9f, 0x46, 0x66, 0x60, 0x85,
-0x24, 0x84, 0x25, 0xa0, 0x0, 0xb1, 0x24, 0xc8, 0xaa, 0xf0, 0xc4, 0xb1, 0x24, 0x45, 0x66, 0x30,
-0xc2, 0xe4, 0x61, 0xd0, 0x21, 0xb1, 0x24, 0x9, 0x80, 0xc5, 0x62, 0xd0, 0x19, 0xc8, 0xb1, 0x24,
-0xc5, 0x63, 0xd0, 0x12, 0xc8, 0xb1, 0x24, 0xc5, 0x64, 0xd0, 0xb, 0xc8, 0xa9, 0x7f, 0xc5, 0x70,
-0xb1, 0x24, 0xe5, 0x65, 0xf0, 0x2f, 0xa5, 0x66, 0x90, 0x2, 0x49, 0xff, 0x4c, 0xb6, 0xa2, 0xb1,
-0x22, 0xb0, 0x22, 0x4c, 0xb0, 0x4, 0xa5, 0x61, 0xf0, 0x4a, 0x38, 0xe9, 0xa0, 0x24, 0x66, 0x10,
-0x9, 0xaa, 0xa9, 0xff, 0x85, 0x68, 0x20, 0x81, 0x9f, 0x8a, 0xa2, 0x61, 0xc9, 0xf9, 0x10, 0x6,
-0x20, 0xcd, 0x9f, 0x84, 0x68, 0x60, 0xa8, 0xa5, 0x66, 0x29, 0x80, 0x46, 0x62, 0x5, 0x62, 0x85,
-0x62, 0x20, 0xe4, 0x9f, 0x84, 0x68, 0x60, 0xa5, 0x61, 0xc9, 0xa0, 0xb0, 0x20, 0x20, 0x27, 0xa3,
-0x84, 0x70, 0xa5, 0x66, 0x84, 0x66, 0x49, 0x80, 0x2a, 0xa9, 0xa0, 0x85, 0x61, 0xa5, 0x65, 0x85,
-0x7, 0x4c, 0x6, 0x9f, 0x85, 0x62, 0x85, 0x63, 0x85, 0x64, 0x85, 0x65, 0xa8, 0x60, 0xa0, 0x0,
-0xa2, 0xa, 0x94, 0x5d, 0xca, 0x10, 0xfb, 0x90, 0xf, 0xc9, 0x2d, 0xd0, 0x4, 0x86, 0x67, 0xf0,
-0x4, 0xc9, 0x2b, 0xd0, 0x5, 0x20, 0x73, 0x4, 0x90, 0x5b, 0xc9, 0x2e, 0xf0, 0x2e, 0xc9, 0x45,
-0xd0, 0x30, 0x20, 0x73, 0x4, 0x90, 0x17, 0xc9, 0xab, 0xf0, 0xe, 0xc9, 0x2d, 0xf0, 0xa, 0xc9,
-0xaa, 0xf0, 0x8, 0xc9, 0x2b, 0xf0, 0x4, 0xd0, 0x7, 0x66, 0x60, 0x20, 0x73, 0x4, 0x90, 0x5c,
-0x24, 0x60, 0x10, 0xe, 0xa9, 0x0, 0x38, 0xe5, 0x5e, 0x4c, 0xd5, 0xa3, 0x66, 0x5f, 0x24, 0x5f,
-0x50, 0xc3, 0xa5, 0x5e, 0x38, 0xe5, 0x5d, 0x85, 0x5e, 0xf0, 0x12, 0x10, 0x9, 0x20, 0x83, 0xa1,
-0xe6, 0x5e, 0xd0, 0xf9, 0xf0, 0x7, 0x20, 0x62, 0xa1, 0xc6, 0x5e, 0xd0, 0xf9, 0xa5, 0x67, 0x30,
-0x1, 0x60, 0x4c, 0x27, 0xa6, 0x48, 0x24, 0x5f, 0x10, 0x2, 0xe6, 0x5d, 0x20, 0x62, 0xa1, 0x68,
-0x38, 0xe9, 0x30, 0x20, 0xa, 0xa4, 0x4c, 0x96, 0xa3, 0x48, 0x20, 0x91, 0xa2, 0x68, 0x20, 0xc1,
-0xa2, 0xa5, 0x6e, 0x45, 0x66, 0x85, 0x6f, 0xa6, 0x61, 0x4c, 0x9e, 0x9e, 0xa5, 0x5e, 0xc9, 0xa,
-0x90, 0x9, 0xa9, 0x64, 0x24, 0x60, 0x30, 0x16, 0x4c, 0xb2, 0x9f, 0xa, 0xa, 0x18, 0x65, 0x5e,
-0xa, 0x18, 0xa0, 0x0, 0x85, 0x78, 0x20, 0xa5, 0x4, 0x65, 0x78, 0x38, 0xe9, 0x30, 0x85, 0x5e,
-0x4c, 0xbc, 0xa3, 0x9b, 0x3e, 0xbc, 0x1f, 0xfd, 0x9e, 0x6e, 0x6b, 0x27, 0xfd, 0x9e, 0x6e, 0x6b,
-0x28, 0x0, 0x20, 0x4f, 0xff, 0x20, 0x49, 0x4e, 0x20, 0x0, 0xa5, 0x3a, 0xa6, 0x39, 0x85, 0x62,
-0x86, 0x63, 0xa2, 0x90, 0x38, 0x20, 0xce, 0xa2, 0x20, 0x71, 0xa4, 0x4c, 0x88, 0x90, 0xa0, 0x1,
-0xa9, 0x20, 0x24, 0x66, 0x10, 0x2, 0xa9, 0x2d, 0x99, 0xff, 0x0, 0x85, 0x66, 0x84, 0x71, 0xc8,
-0xa9, 0x30, 0xa6, 0x61, 0xd0, 0x3, 0x4c, 0x96, 0xa5, 0xa9, 0x0, 0xe0, 0x80, 0xf0, 0x2, 0xb0,
-0x9, 0xa9, 0x4e, 0xa0, 0xa4, 0x20, 0x5c, 0xa0, 0xa9, 0xf7, 0x85, 0x5d, 0xa9, 0x49, 0xa0, 0xa4,
-0x20, 0xe0, 0xa2, 0xf0, 0x1e, 0x10, 0x12, 0xa9, 0x44, 0xa0, 0xa4, 0x20, 0xe0, 0xa2, 0xf0, 0x2,
-0x10, 0xe, 0x20, 0x62, 0xa1, 0xc6, 0x5d, 0xd0, 0xee, 0x20, 0x83, 0xa1, 0xe6, 0x5d, 0xd0, 0xdc,
-0x20, 0x62, 0xa0, 0x20, 0x27, 0xa3, 0xa2, 0x1, 0xa5, 0x5d, 0x18, 0x69, 0xa, 0x30, 0x9, 0xc9,
-0xb, 0xb0, 0x6, 0x69, 0xff, 0xaa, 0xa9, 0x2, 0x38, 0xe9, 0x2, 0x85, 0x5e, 0x86, 0x5d, 0x8a,
-0xf0, 0x2, 0x10, 0x13, 0xa4, 0x71, 0xa9, 0x2e, 0xc8, 0x99, 0xff, 0x0, 0x8a, 0xf0, 0x6, 0xa9,
-0x30, 0xc8, 0x99, 0xff, 0x0, 0x84, 0x71, 0xa0, 0x0, 0xa2, 0x80, 0xa5, 0x65, 0x18, 0x79, 0xab,
-0xa5, 0x85, 0x65, 0xa5, 0x64, 0x79, 0xaa, 0xa5, 0x85, 0x64, 0xa5, 0x63, 0x79, 0xa9, 0xa5, 0x85,
-0x63, 0xa5, 0x62, 0x79, 0xa8, 0xa5, 0x85, 0x62, 0xe8, 0xb0, 0x4, 0x10, 0xde, 0x30, 0x2, 0x30,
-0xda, 0x8a, 0x90, 0x4, 0x49, 0xff, 0x69, 0xa, 0x69, 0x2f, 0xc8, 0xc8, 0xc8, 0xc8, 0x84, 0x47,
-0xa4, 0x71, 0xc8, 0xaa, 0x29, 0x7f, 0x99, 0xff, 0x0, 0xc6, 0x5d, 0xd0, 0x6, 0xa9, 0x2e, 0xc8,
-0x99, 0xff, 0x0, 0x84, 0x71, 0xa4, 0x47, 0x8a, 0x49, 0xff, 0x29, 0x80, 0xaa, 0xc0, 0x24, 0xf0,
-0x4, 0xc0, 0x3c, 0xd0, 0xa6, 0xa4, 0x71, 0xb9, 0xff, 0x0, 0x88, 0xc9, 0x30, 0xf0, 0xf8, 0xc9,
-0x2e, 0xf0, 0x1, 0xc8, 0xa9, 0x2b, 0xa6, 0x5e, 0xf0, 0x2e, 0x10, 0x8, 0xa9, 0x0, 0x38, 0xe5,
-0x5e, 0xaa, 0xa9, 0x2d, 0x99, 0x1, 0x1, 0xa9, 0x45, 0x99, 0x0, 0x1, 0x8a, 0xa2, 0x2f, 0x38,
-0xe8, 0xe9, 0xa, 0xb0, 0xfb, 0x69, 0x3a, 0x99, 0x3, 0x1, 0x8a, 0x99, 0x2, 0x1, 0xa9, 0x0,
-0x99, 0x4, 0x1, 0xf0, 0x8, 0x99, 0xff, 0x0, 0xa9, 0x0, 0x99, 0x0, 0x1, 0xa9, 0x0, 0xa0,
-0x1, 0x60, 0x80, 0x0, 0x0, 0x0, 0x0, 0xfa, 0xa, 0x1f, 0x0, 0x0, 0x98, 0x96, 0x80, 0xff,
-0xf0, 0xbd, 0xc0, 0x0, 0x1, 0x86, 0xa0, 0xff, 0xff, 0xd8, 0xf0, 0x0, 0x0, 0x3, 0xe8, 0xff,
-0xff, 0xff, 0x9c, 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xa, 0x80, 0x0,
-0x3, 0x4b, 0xc0, 0xff, 0xff, 0x73, 0x60, 0x0, 0x0, 0xe, 0x10, 0xff, 0xff, 0xfd, 0xa8, 0x0,
-0x0, 0x0, 0x3c, 0x20, 0x91, 0xa2, 0xa9, 0xa3, 0xa0, 0xa5, 0x20, 0x21, 0xa2, 0xf0, 0x70, 0xa5,
-0x69, 0xd0, 0x3, 0x4c, 0x2d, 0x9f, 0xa2, 0x4e, 0xa0, 0x0, 0x20, 0x59, 0xa2, 0xa5, 0x6e, 0x10,
-0xf, 0x20, 0x58, 0xa3, 0xa9, 0x4e, 0xa0, 0x0, 0x20, 0xe0, 0xa2, 0xd0, 0x3, 0x98, 0xa4, 0x7,
-0x20, 0x83, 0xa2, 0x98, 0x48, 0x20, 0x1e, 0xa0, 0xa9, 0x4e, 0xa0, 0x0, 0x20, 0x78, 0xa0, 0x20,
-0x60, 0xa6, 0x68, 0x4a, 0x90, 0xa, 0xa5, 0x61, 0xf0, 0x6, 0xa5, 0x66, 0x49, 0xff, 0x85, 0x66,
-0x60, 0x81, 0x38, 0xaa, 0x3b, 0x29, 0x7, 0x71, 0x34, 0x58, 0x3e, 0x56, 0x74, 0x16, 0x7e, 0xb3,
-0x1b, 0x77, 0x2f, 0xee, 0xe3, 0x85, 0x7a, 0x1d, 0x84, 0x1c, 0x2a, 0x7c, 0x63, 0x59, 0x58, 0xa,
-0x7e, 0x75, 0xfd, 0xe7, 0xc6, 0x80, 0x31, 0x72, 0x18, 0x10, 0x81, 0x0, 0x0, 0x0, 0x0, 0xa9,
-0x32, 0xa0, 0xa6, 0x20, 0x5c, 0xa0, 0xa5, 0x70, 0x69, 0x50, 0x90, 0x3, 0x20, 0xa8, 0xa2, 0x85,
-0x56, 0x20, 0x94, 0xa2, 0xa5, 0x61, 0xc9, 0x88, 0x90, 0x3, 0x20, 0x54, 0xa1, 0x20, 0x58, 0xa3,
-0xa5, 0x7, 0x18, 0x69, 0x81, 0xf0, 0xf3, 0x38, 0xe9, 0x1, 0x48, 0xa2, 0x5, 0xb5, 0x69, 0xb4,
-0x61, 0x95, 0x61, 0x94, 0x69, 0xca, 0x10, 0xf5, 0xa5, 0x56, 0x85, 0x70, 0x20, 0x87, 0x9e, 0x20,
-0x27, 0xa6, 0xa9, 0x37, 0xa0, 0xa6, 0x20, 0xc9, 0xa6, 0xa9, 0x0, 0x85, 0x6f, 0x68, 0x20, 0x39,
-0xa1, 0x60, 0x85, 0x71, 0x84, 0x72, 0x20, 0x4f, 0xa2, 0xa9, 0x57, 0x20, 0x78, 0xa0, 0x20, 0xcd,
-0xa6, 0xa9, 0x57, 0xa0, 0x0, 0x4c, 0x78, 0xa0, 0x85, 0x71, 0x84, 0x72, 0x20, 0x4c, 0xa2, 0xb1,
-0x71, 0x85, 0x67, 0xa4, 0x71, 0xc8, 0x98, 0xd0, 0x2, 0xe6, 0x72, 0x85, 0x71, 0xa4, 0x72, 0x20,
-0x5c, 0xa0, 0xa5, 0x71, 0xa4, 0x72, 0x18, 0x69, 0x5, 0x90, 0x1, 0xc8, 0x85, 0x71, 0x84, 0x72,
-0x20, 0x66, 0xa0, 0xa9, 0x5c, 0xa0, 0x0, 0xc6, 0x67, 0xd0, 0xe4, 0x60, 0x98, 0x35, 0x44, 0x7a,
-0x0, 0x68, 0x28, 0xb1, 0x46, 0x0, 0x20, 0xb0, 0xa2, 0x30, 0x2e, 0xd0, 0x17, 0xad, 0x0, 0xff,
-0x85, 0x62, 0xad, 0x1, 0xff, 0x85, 0x64, 0xad, 0x2, 0xff, 0x85, 0x63, 0xad, 0x3, 0xff, 0x85,
-0x65, 0x4c, 0x4a, 0xa7, 0xa9, 0x3, 0xa0, 0x5, 0x20, 0x21, 0xa2, 0xa9, 0xfd, 0xa0, 0xa6, 0x20,
-0x5c, 0xa0, 0xa9, 0x2, 0xa0, 0xa7, 0x20, 0x66, 0xa0, 0xa6, 0x65, 0xa5, 0x62, 0x85, 0x65, 0x86,
-0x62, 0xa6, 0x63, 0xa5, 0x64, 0x85, 0x63, 0x86, 0x64, 0xa9, 0x0, 0x85, 0x66, 0xa5, 0x61, 0x85,
-0x70, 0xa9, 0x80, 0x85, 0x61, 0x20, 0xb, 0x9f, 0xa2, 0x3, 0xa0, 0x5, 0x4c, 0x59, 0xa2, 0xa5,
-0x7c, 0x85, 0x3d, 0xa5, 0x7d, 0x85, 0x3e, 0x60, 0xa5, 0x3d, 0x85, 0x7c, 0xa5, 0x3e, 0x85, 0x7d,
-0x60, 0x98, 0x18, 0x65, 0x7c, 0x85, 0x7c, 0x90, 0x2, 0xe6, 0x7d, 0x60, 0xaa, 0xd0, 0x2, 0xa2,
-0x1e, 0x4c, 0x83, 0x86, 0x20, 0xc0, 0xff, 0xb0, 0xf3, 0x60, 0x20, 0xd2, 0xff, 0xb0, 0xed, 0x60,
-0x20, 0xcf, 0xff, 0xb0, 0xe7, 0x60, 0x48, 0x20, 0xc9, 0xff, 0x20, 0xf8, 0xa8, 0xaa, 0x68, 0x90,
-0x3, 0x8a, 0xb0, 0xd8, 0x60, 0x20, 0xc6, 0xff, 0x20, 0xf8, 0xa8, 0xb0, 0xcf, 0x60, 0x20, 0xe4,
-0xff, 0xb0, 0xc9, 0x60, 0x20, 0xe1, 0x9d, 0xa9, 0xa7, 0x48, 0xa9, 0xce, 0x48, 0xad, 0xf5, 0x7,
-0x48, 0xad, 0xf2, 0x7, 0xae, 0xf3, 0x7, 0xac, 0xf4, 0x7, 0x28, 0x6c, 0x14, 0x0, 0x8, 0x8d,
-0xf2, 0x7, 0x8e, 0xf3, 0x7, 0x8c, 0xf4, 0x7, 0x68, 0x8d, 0xf5, 0x7, 0x60, 0x20, 0x6b, 0xa8,
-0xa6, 0x2d, 0xa4, 0x2e, 0xa9, 0x2b, 0x20, 0xd8, 0xff, 0x20, 0xf8, 0xa8, 0xb0, 0x8e, 0x60, 0xa9,
-0x1, 0x2c, 0xa9, 0x0, 0x85, 0xa, 0x20, 0x6b, 0xa8, 0xa5, 0xa, 0xa6, 0x2b, 0xa4, 0x2c, 0x20,
-0xd5, 0xff, 0x8, 0x20, 0xf8, 0xa8, 0x28, 0xb0, 0x5e, 0xa5, 0xa, 0xf0, 0x16, 0xa2, 0x1c, 0x20,
-0xb7, 0xff, 0x29, 0x10, 0xd0, 0x16, 0x24, 0x81, 0x30, 0x8, 0x20, 0x4f, 0xff, 0xd, 0x4f, 0x4b,
-0xd, 0x0, 0x60, 0x20, 0xb7, 0xff, 0x29, 0xbf, 0xf0, 0x5, 0xa2, 0x1d, 0x4c, 0x83, 0x86, 0x24,
-0x81, 0x30, 0x10, 0x86, 0x2d, 0x84, 0x2e, 0x20, 0x6f, 0x86, 0x20, 0x18, 0x88, 0x20, 0x93, 0x8a,
-0x4c, 0xf, 0x87, 0x20, 0xf1, 0x8a, 0x20, 0x18, 0x88, 0x4c, 0xd5, 0x8a, 0x20, 0xb0, 0xa8, 0x18,
-0x20, 0x85, 0xa7, 0x20, 0xf8, 0xa8, 0xb0, 0xf, 0x60, 0x20, 0xb0, 0xa8, 0xa5, 0x49, 0x18, 0x20,
-0xc3, 0xff, 0x20, 0xf8, 0xa8, 0x90, 0xbb, 0x4c, 0x7d, 0xa7, 0xa9, 0x0, 0x20, 0xbd, 0xff, 0xa2,
-0x1, 0xa0, 0x0, 0x20, 0xba, 0xff, 0x20, 0x9d, 0xa8, 0x20, 0xee, 0xa8, 0x20, 0x9d, 0xa8, 0x20,
-0x97, 0xa8, 0xa0, 0x0, 0x86, 0x49, 0x20, 0xba, 0xff, 0x20, 0x9d, 0xa8, 0x20, 0x97, 0xa8, 0x8a,
-0xa8, 0xa6, 0x49, 0x4c, 0xba, 0xff, 0x20, 0xa5, 0xa8, 0x4c, 0x84, 0x9d, 0x20, 0x79, 0x4, 0xd0,
-0x2, 0x68, 0x68, 0x60, 0x20, 0x91, 0x94, 0x20, 0x79, 0x4, 0xd0, 0xf7, 0x4c, 0xa1, 0x94, 0xa9,
-0x0, 0x20, 0xbd, 0xff, 0x20, 0xa8, 0xa8, 0x20, 0x84, 0x9d, 0x86, 0x49, 0x8a, 0xa2, 0x1, 0xa0,
-0x0, 0x20, 0xba, 0xff, 0x20, 0x9d, 0xa8, 0x20, 0x97, 0xa8, 0x86, 0x4a, 0xa0, 0x0, 0xa5, 0x49,
-0xe0, 0x3, 0x90, 0x1, 0x88, 0x20, 0xba, 0xff, 0x20, 0x9d, 0xa8, 0x20, 0x97, 0xa8, 0x8a, 0xa8,
-0xa6, 0x4a, 0xa5, 0x49, 0x20, 0xba, 0xff, 0x20, 0x9d, 0xa8, 0x20, 0xa5, 0xa8, 0x20, 0x48, 0x9c,
-0xa6, 0x22, 0xa4, 0x23, 0x4c, 0xbd, 0xff, 0x8, 0x48, 0xa5, 0xae, 0xc9, 0x4, 0x90, 0x3, 0x20,
-0x57, 0xcd, 0x68, 0x28, 0x60, 0x46, 0xf, 0xaa, 0xf0, 0x38, 0x48, 0xa5, 0x33, 0x38, 0xe9, 0x2,
-0xa4, 0x34, 0xb0, 0x1, 0x88, 0x85, 0x22, 0x84, 0x23, 0x8a, 0x49, 0xff, 0x38, 0x65, 0x22, 0xb0,
-0x1, 0x88, 0xc4, 0x32, 0x90, 0x1d, 0xd0, 0x4, 0xc5, 0x31, 0x90, 0x17, 0x85, 0x35, 0x84, 0x36,
-0xa0, 0x1, 0xa9, 0xff, 0x91, 0x22, 0x88, 0x68, 0x91, 0x22, 0xa6, 0x35, 0xa4, 0x36, 0x86, 0x33,
-0x84, 0x34, 0x60, 0xa5, 0xf, 0x30, 0x9, 0x20, 0x54, 0xa9, 0x38, 0x66, 0xf, 0x68, 0xd0, 0xb7,
-0x4c, 0x81, 0x86, 0xa6, 0x16, 0xe0, 0x19, 0xf0, 0x10, 0x20, 0x57, 0xaa, 0xf0, 0xf7, 0x8a, 0xa0,
-0x0, 0x91, 0x5c, 0x98, 0xc8, 0x91, 0x5c, 0xd0, 0xec, 0xa0, 0x0, 0x84, 0x58, 0xa6, 0x37, 0xa4,
-0x38, 0x86, 0x5f, 0x86, 0x4e, 0x86, 0x35, 0x84, 0x60, 0x84, 0x4f, 0x84, 0x36, 0x8a, 0x20, 0xea,
-0xa9, 0xd0, 0xc, 0x88, 0x20, 0x65, 0x81, 0x20, 0x39, 0xaa, 0x38, 0x66, 0x58, 0xd0, 0xef, 0x24,
-0x58, 0x10, 0x42, 0xa2, 0x0, 0x86, 0x58, 0xa9, 0x2, 0xa0, 0x1, 0x20, 0x65, 0x81, 0x91, 0x5f,
-0x88, 0x20, 0x65, 0x81, 0x91, 0x5f, 0x20, 0xb0, 0x4, 0xaa, 0x20, 0x48, 0xaa, 0x85, 0x35, 0x84,
-0x36, 0x8a, 0x20, 0x39, 0xaa, 0x8a, 0xa8, 0x88, 0x20, 0x65, 0x81, 0x91, 0x5f, 0xca, 0xd0, 0xf7,
-0xa0, 0x2, 0xb9, 0x5e, 0x0, 0x91, 0x22, 0x88, 0xd0, 0xf8, 0xa5, 0x4e, 0xa4, 0x4f, 0x20, 0xea,
-0xa9, 0xf0, 0xb0, 0xd0, 0xc4, 0xa0, 0x0, 0x20, 0xb0, 0x4, 0xaa, 0x20, 0x48, 0xaa, 0x85, 0x35,
-0x84, 0x36, 0x8a, 0x20, 0x39, 0xaa, 0x4c, 0x7f, 0xa9, 0xc4, 0x34, 0x90, 0x2a, 0xd0, 0x6, 0xc5,
-0x33, 0xf0, 0x24, 0x90, 0x22, 0x24, 0x58, 0x30, 0x5, 0xa9, 0x2, 0x20, 0x48, 0xaa, 0xa9, 0x2,
-0x20, 0x39, 0xaa, 0xa0, 0x1, 0x20, 0x65, 0x81, 0xc9, 0xff, 0xd0, 0x1, 0x60, 0x20, 0x65, 0x81,
-0x99, 0x22, 0x0, 0x88, 0x10, 0xf7, 0x60, 0xa6, 0x16, 0xe0, 0x19, 0xf0, 0x10, 0x20, 0x57, 0xaa,
-0xf0, 0xf7, 0xa0, 0x0, 0x91, 0x5c, 0xc8, 0xa9, 0xff, 0x91, 0x5c, 0xd0, 0xec, 0x68, 0x68, 0xa5,
-0x35, 0xa4, 0x36, 0x85, 0x33, 0x84, 0x34, 0x60, 0x49, 0xff, 0x38, 0x65, 0x4e, 0xa4, 0x4f, 0xb0,
-0x1, 0x88, 0x85, 0x4e, 0x84, 0x4f, 0x60, 0x49, 0xff, 0x38, 0x65, 0x5f, 0xa4, 0x60, 0xb0, 0x1,
-0x88, 0x85, 0x5f, 0x84, 0x60, 0x60, 0xca, 0xb5, 0x0, 0x85, 0x5d, 0xca, 0xb5, 0x0, 0x85, 0x5c,
-0xca, 0xb5, 0x0, 0x48, 0x18, 0x65, 0x5c, 0x85, 0x5c, 0x90, 0x2, 0xe6, 0x5d, 0x68, 0x60, 0xa9,
-0xec, 0xa0, 0xaa, 0x20, 0x66, 0xa0, 0x20, 0x91, 0xa2, 0xa9, 0xf1, 0xa0, 0xaa, 0xa6, 0x6e, 0x20,
-0x8c, 0xa1, 0x20, 0x91, 0xa2, 0x20, 0x58, 0xa3, 0xa9, 0x0, 0x85, 0x6f, 0x20, 0x87, 0x9e, 0xa9,
-0xf6, 0xa0, 0xaa, 0x20, 0x6c, 0xa0, 0xa5, 0x66, 0x48, 0x10, 0xd, 0x20, 0x62, 0xa0, 0xa5, 0x66,
-0x30, 0x9, 0xa5, 0x12, 0x49, 0xff, 0x85, 0x12, 0x20, 0x27, 0xa6, 0xa9, 0xf6, 0xa0, 0xaa, 0x20,
-0x66, 0xa0, 0x68, 0x10, 0x3, 0x20, 0x27, 0xa6, 0xa9, 0xfb, 0xa0, 0xaa, 0x4c, 0xb3, 0xa6, 0x20,
-0x4f, 0xa2, 0xa9, 0x0, 0x85, 0x12, 0x20, 0x77, 0xaa, 0xa2, 0x4e, 0xa0, 0x0, 0x20, 0x5d, 0xa7,
-0xa9, 0x57, 0xa0, 0x0, 0x20, 0x21, 0xa2, 0xa9, 0x0, 0x85, 0x66, 0xa5, 0x12, 0x20, 0xe8, 0xaa,
-0xa9, 0x4e, 0xa0, 0x0, 0x4c, 0x94, 0xa1, 0x48, 0x4c, 0xa9, 0xaa, 0x81, 0x49, 0xf, 0xda, 0xa2,
-0x83, 0x49, 0xf, 0xda, 0xa2, 0x7f, 0x0, 0x0, 0x0, 0x0, 0x5, 0x84, 0xe6, 0x1a, 0x2d, 0x1b,
-0x86, 0x28, 0x7, 0xfb, 0xf8, 0x87, 0x99, 0x68, 0x89, 0x1, 0x87, 0x23, 0x35, 0xdf, 0xe1, 0x86,
-0xa5, 0x5d, 0xe7, 0x28, 0x83, 0x49, 0xf, 0xda, 0xa2, 0xa5, 0x66, 0x48, 0x10, 0x3, 0x20, 0x27,
-0xa6, 0xa5, 0x61, 0x48, 0xc9, 0x81, 0x90, 0x7, 0xa9, 0xf0, 0xa0, 0x9f, 0x20, 0x72, 0xa0, 0xa9,
-0x4a, 0xa0, 0xab, 0x20, 0xb3, 0xa6, 0x68, 0xc9, 0x81, 0x90, 0x7, 0xa9, 0xec, 0xa0, 0xaa, 0x20,
-0x6c, 0xa0, 0x68, 0x10, 0x3, 0x4c, 0x27, 0xa6, 0x60, 0xb, 0x76, 0xb3, 0x83, 0xbd, 0xd3, 0x79,
-0x1e, 0xf4, 0xa6, 0xf5, 0x7b, 0x83, 0xfc, 0xb0, 0x10, 0x7c, 0xc, 0x1f, 0x67, 0xca, 0x7c, 0xde,
-0x53, 0xcb, 0xc1, 0x7d, 0x14, 0x64, 0x70, 0x4c, 0x7d, 0xb7, 0xea, 0x51, 0x7a, 0x7d, 0x63, 0x30,
-0x88, 0x7e, 0x7e, 0x92, 0x44, 0x99, 0x3a, 0x7e, 0x4c, 0xcc, 0x91, 0xc7, 0x7f, 0xaa, 0xaa, 0xaa,
-0x13, 0x81, 0x0, 0x0, 0x0, 0x0, 0x89, 0x8a, 0x8d, 0xa7, 0x8c, 0xd6, 0xd7, 0xd5, 0x20, 0xde,
-0xb6, 0xa9, 0x0, 0xa2, 0xa, 0x86, 0x3, 0x85, 0x4, 0x86, 0x5, 0x85, 0x6, 0x85, 0x5a, 0x85,
-0x5b, 0x20, 0x79, 0x4, 0xf0, 0x66, 0x20, 0x3e, 0x8e, 0xa5, 0x8, 0xf0, 0x8, 0xa5, 0x14, 0xa6,
-0x15, 0x85, 0x3, 0x86, 0x4, 0x20, 0x79, 0x4, 0xf0, 0x52, 0x20, 0x91, 0x94, 0x20, 0x3e, 0x8e,
-0xa5, 0x8, 0xf0, 0x10, 0xa5, 0x14, 0xa6, 0x15, 0x85, 0x5, 0x86, 0x6, 0xd0, 0x6, 0xaa, 0xd0,
-0x3, 0x4c, 0x1c, 0x99, 0x20, 0x79, 0x4, 0xf0, 0x33, 0x20, 0x91, 0x94, 0x20, 0x3e, 0x8e, 0xa5,
-0x14, 0xa6, 0x15, 0x85, 0x5a, 0x86, 0x5b, 0x20, 0x3d, 0x8a, 0xa5, 0x5f, 0xa6, 0x60, 0x85, 0x58,
-0x86, 0x59, 0xa5, 0x3, 0xa6, 0x4, 0x85, 0x14, 0x86, 0x15, 0x20, 0x3d, 0x8a, 0xa5, 0x60, 0x38,
-0xe5, 0x59, 0x90, 0xcd, 0xd0, 0x6, 0xa5, 0x5f, 0xe5, 0x58, 0x90, 0xc5, 0x20, 0xf1, 0x8a, 0x20,
-0x86, 0xad, 0x20, 0x86, 0xad, 0xd0, 0x3d, 0x20, 0x59, 0xad, 0x20, 0x86, 0xad, 0x20, 0x86, 0xad,
-0xd0, 0x3, 0x4c, 0xb3, 0xae, 0x20, 0x86, 0xad, 0x85, 0x14, 0xc8, 0x20, 0xa5, 0x4, 0x38, 0xe5,
-0x5b, 0x90, 0x19, 0xd0, 0x6, 0xa5, 0x14, 0xe5, 0x5a, 0x90, 0x11, 0xa5, 0x62, 0x91, 0x3b, 0x88,
-0xa5, 0x63, 0x91, 0x3b, 0x20, 0x86, 0xad, 0x20, 0x73, 0xad, 0xf0, 0xce, 0x20, 0x86, 0xad, 0x20,
-0x80, 0xad, 0xf0, 0xc6, 0x20, 0x86, 0xad, 0x20, 0x86, 0xad, 0x20, 0x86, 0xad, 0xc9, 0x22, 0xd0,
-0xb, 0x20, 0x86, 0xad, 0xf0, 0xa9, 0xc9, 0x22, 0xd0, 0xf7, 0xf0, 0xee, 0xaa, 0xf0, 0xa0, 0x10,
-0xe9, 0xa2, 0x8, 0xdd, 0x86, 0xab, 0xf0, 0x10, 0xca, 0xd0, 0xf8, 0xc9, 0xcb, 0xd0, 0xdb, 0x20,
-0x73, 0x4, 0xf0, 0x8b, 0xc9, 0xa4, 0xd0, 0xd2, 0xa5, 0x3b, 0x8d, 0x59, 0x2, 0xa5, 0x3c, 0x8d,
-0x5a, 0x2, 0x20, 0x73, 0x4, 0xb0, 0xc6, 0x20, 0x3e, 0x8e, 0x20, 0xee, 0xac, 0xad, 0x59, 0x2,
-0x85, 0x3b, 0xad, 0x5a, 0x2, 0x85, 0x3c, 0xa0, 0x0, 0xa2, 0x0, 0xbd, 0x1, 0x1, 0xf0, 0x1c,
-0x48, 0x20, 0x73, 0x4, 0x90, 0xe, 0x20, 0x42, 0xad, 0xe6, 0x6c, 0x20, 0xbb, 0xad, 0xe6, 0x2d,
-0xd0, 0x2, 0xe6, 0x2e, 0x68, 0xa0, 0x0, 0x91, 0x3b, 0xe8, 0xd0, 0xdf, 0x20, 0x73, 0x4, 0xb0,
-0x15, 0x20, 0x42, 0xad, 0xc6, 0x6c, 0x20, 0xa2, 0xad, 0xa5, 0x2d, 0xd0, 0x2, 0xc6, 0x2e, 0xc6,
-0x2d, 0x20, 0x79, 0x4, 0x90, 0xeb, 0xc9, 0x2c, 0xf0, 0x9e, 0x4c, 0x5e, 0xac, 0x20, 0x59, 0xad,
-0x20, 0x86, 0xad, 0xd0, 0xd, 0x20, 0x86, 0xad, 0xd0, 0xb, 0xa9, 0xff, 0x85, 0x62, 0x85, 0x63,
-0x30, 0x2a, 0x20, 0x86, 0xad, 0x20, 0x86, 0xad, 0x85, 0x58, 0xc5, 0x14, 0xd0, 0x27, 0x20, 0x86,
-0xad, 0x85, 0x59, 0xc5, 0x15, 0xd0, 0x23, 0x38, 0xe5, 0x5b, 0x90, 0x8, 0xd0, 0xe, 0xa5, 0x14,
-0xe5, 0x5a, 0xb0, 0x8, 0xa5, 0x14, 0x85, 0x63, 0xa5, 0x15, 0x85, 0x62, 0xa2, 0x90, 0x38, 0x20,
-0xce, 0xa2, 0x4c, 0x6f, 0xa4, 0x20, 0x86, 0xad, 0x85, 0x59, 0x20, 0x64, 0xad, 0xf0, 0xb1, 0xd9,
-0xea, 0xa5, 0x3b, 0x85, 0x22, 0xa5, 0x3c, 0x85, 0x23, 0xa5, 0x2d, 0x85, 0x24, 0xa5, 0x2e, 0x85,
-0x25, 0xa0, 0x0, 0x84, 0xb, 0x84, 0x6c, 0x60, 0xa5, 0x3, 0x85, 0x63, 0xa5, 0x4, 0x85, 0x62,
-0x4c, 0xf1, 0x8a, 0xa5, 0x59, 0x38, 0xe5, 0x5b, 0x90, 0x15, 0xd0, 0x6, 0xa5, 0x58, 0xe5, 0x5a,
-0x90, 0xd, 0xa5, 0x63, 0x18, 0x65, 0x5, 0x85, 0x63, 0xa5, 0x62, 0x65, 0x6, 0x85, 0x62, 0x20,
-0x86, 0xad, 0xd0, 0xfb, 0x60, 0xa0, 0x0, 0xe6, 0x3b, 0xd0, 0x2, 0xe6, 0x3c, 0x4c, 0xa5, 0x4,
-0xa5, 0x22, 0xc5, 0x24, 0xd0, 0x4, 0xa5, 0x23, 0xc5, 0x25, 0x60, 0xe6, 0x22, 0xd0, 0x2, 0xe6,
-0x23, 0xa4, 0xb, 0xc8, 0x20, 0xb0, 0x4, 0xa4, 0x6c, 0xc8, 0x91, 0x22, 0x20, 0x91, 0xad, 0xd0,
-0xea, 0x60, 0xa5, 0x24, 0xd0, 0x2, 0xc6, 0x25, 0xc6, 0x24, 0xa4, 0xb, 0x20, 0xbb, 0x4, 0xa4,
-0x6c, 0x91, 0x24, 0x20, 0x91, 0xad, 0xd0, 0xea, 0x60, 0xa9, 0x80, 0x85, 0x10, 0x20, 0x7c, 0x8e,
-0xa9, 0x81, 0x85, 0x2, 0x20, 0x71, 0x88, 0xf0, 0x8, 0xa0, 0x12, 0x20, 0x5, 0x89, 0x20, 0x60,
-0xa7, 0x20, 0x69, 0xa7, 0x20, 0xbe, 0x8d, 0x98, 0xa0, 0x11, 0x18, 0x65, 0x3b, 0x91, 0x7c, 0xa5,
-0x3c, 0x69, 0x0, 0x88, 0x91, 0x7c, 0xa5, 0x3a, 0x88, 0x91, 0x7c, 0xa5, 0x39, 0x88, 0x91, 0x7c,
-0xa9, 0xa4, 0x20, 0x93, 0x94, 0x20, 0x17, 0x93, 0x20, 0x14, 0x93, 0xa5, 0x66, 0x9, 0x7f, 0x25,
-0x62, 0x85, 0x62, 0xa2, 0x4, 0xa0, 0xd, 0xb5, 0x61, 0x91, 0x7c, 0xca, 0x88, 0x10, 0xf8, 0xa9,
-0xf0, 0xa0, 0x9f, 0x20, 0x21, 0xa2, 0x20, 0x79, 0x4, 0xc9, 0xa9, 0xd0, 0x6, 0x20, 0x73, 0x4,
-0x20, 0x14, 0x93, 0x20, 0xb0, 0xa2, 0x48, 0x20, 0xa0, 0xa2, 0x68, 0xa0, 0x8, 0xa2, 0x5, 0x91,
-0x7c, 0xb5, 0x60, 0x88, 0xca, 0x10, 0xf8, 0xa5, 0x4a, 0x91, 0x7c, 0xa5, 0x49, 0x88, 0x91, 0x7c,
-0xa9, 0x81, 0x88, 0x91, 0x7c, 0x60, 0x4c, 0xa1, 0x94, 0x20, 0xde, 0xb6, 0x20, 0x79, 0x4, 0xf0,
-0xf5, 0x20, 0xca, 0xae, 0xa5, 0x5f, 0xa6, 0x60, 0x85, 0x24, 0x86, 0x25, 0x20, 0x3d, 0x8a, 0x90,
-0x15, 0xa0, 0x1, 0x20, 0xd1, 0x4, 0x88, 0xaa, 0xd0, 0x5, 0x20, 0xd1, 0x4, 0xf0, 0x7, 0x20,
-0xd1, 0x4, 0x85, 0x5f, 0x86, 0x60, 0xa5, 0x24, 0x38, 0xe5, 0x5f, 0xaa, 0xa5, 0x25, 0xe5, 0x60,
-0xa8, 0xb0, 0x1f, 0x8a, 0x18, 0x65, 0x2d, 0x85, 0x2d, 0x98, 0x65, 0x2e, 0x85, 0x2e, 0xa0, 0x0,
-0x20, 0xd1, 0x4, 0x91, 0x24, 0xc8, 0xd0, 0xf8, 0xe6, 0x60, 0xe6, 0x25, 0xa5, 0x2e, 0xc5, 0x25,
-0xb0, 0xee, 0x20, 0x18, 0x88, 0xa5, 0x22, 0xa6, 0x23, 0x18, 0x69, 0x2, 0x85, 0x2d, 0x90, 0x1,
-0xe8, 0x86, 0x2e, 0x20, 0x93, 0x8a, 0x4c, 0x7e, 0x86, 0xf0, 0x6, 0x90, 0x4, 0xc9, 0xab, 0xd0,
-0x22, 0x20, 0x3e, 0x8e, 0x20, 0x3d, 0x8a, 0x20, 0x79, 0x4, 0xf0, 0xc, 0xc9, 0xab, 0xd0, 0x13,
-0x20, 0x73, 0x4, 0x20, 0x3e, 0x8e, 0xd0, 0xb, 0xa5, 0x8, 0xd0, 0x6, 0xa9, 0xff, 0x85, 0x14,
-0x85, 0x15, 0x60, 0x4c, 0xa1, 0x94, 0xa2, 0xff, 0x8e, 0xe0, 0x2, 0x20, 0x73, 0x4, 0x20, 0x2c,
-0x93, 0x20, 0x1a, 0x93, 0xa5, 0x64, 0x48, 0xa5, 0x65, 0x48, 0xa0, 0x2, 0x20, 0xdc, 0x4, 0x88,
-0x99, 0x3d, 0x0, 0xd0, 0xf7, 0x20, 0xdc, 0x4, 0x8d, 0xdf, 0x2, 0xa8, 0xf0, 0xb, 0x88, 0x20,
-0x71, 0x81, 0xc9, 0x23, 0xf0, 0x6, 0x98, 0xd0, 0xf5, 0x4c, 0xa1, 0x94, 0xa9, 0x3b, 0x20, 0x93,
-0x94, 0x84, 0x76, 0x8c, 0xcd, 0x2, 0x20, 0x2c, 0x93, 0x24, 0xd, 0x10, 0x39, 0x20, 0x70, 0xb1,
-0x20, 0xb7, 0xb2, 0xae, 0xd5, 0x2, 0xf0, 0x15, 0xa2, 0x0, 0x38, 0xad, 0xdb, 0x2, 0xe5, 0x77,
-0x90, 0xb, 0xa2, 0x3d, 0xec, 0xd5, 0x2, 0xd0, 0x3, 0x4a, 0x69, 0x0, 0xaa, 0xa0, 0x0, 0x8a,
-0xf0, 0x5, 0xca, 0xa9, 0x20, 0xd0, 0x8, 0xc4, 0x77, 0xb0, 0xf8, 0x20, 0xb0, 0x4, 0xc8, 0x20,
-0xb0, 0xb2, 0xd0, 0xeb, 0xf0, 0x24, 0x20, 0x6f, 0xa4, 0xa0, 0xff, 0xc8, 0xb9, 0x0, 0x1, 0xd0,
-0xfa, 0x98, 0x20, 0x5c, 0x9b, 0xa0, 0x0, 0xb9, 0x0, 0x1, 0xf0, 0x5, 0x91, 0x62, 0xc8, 0xd0,
-0xf6, 0x20, 0xb0, 0x9b, 0x20, 0x70, 0xb1, 0x20, 0xbb, 0xaf, 0x20, 0x79, 0x4, 0xc9, 0x2c, 0xf0,
-0x8d, 0x38, 0x66, 0x76, 0x20, 0xb7, 0xb2, 0x68, 0xa8, 0x68, 0x20, 0x52, 0x9c, 0x20, 0x79, 0x4,
-0xc9, 0x3b, 0xf0, 0x3, 0x4c, 0x3e, 0x90, 0x4c, 0x73, 0x4, 0xad, 0xe7, 0x4, 0x8d, 0xdd, 0x2,
-0xa9, 0xff, 0x8d, 0xdc, 0x2, 0x4c, 0xcb, 0xaf, 0x86, 0x82, 0xc4, 0x77, 0xf0, 0x33, 0xb9, 0x0,
-0x1, 0xc8, 0xc9, 0x20, 0xf0, 0xf4, 0xc9, 0x2d, 0xf0, 0xe8, 0xc9, 0x2e, 0xf0, 0xea, 0xc9, 0x45,
-0xf0, 0x11, 0x9d, 0x0, 0x1, 0x8e, 0xce, 0x2, 0xe8, 0x24, 0x82, 0x10, 0xdd, 0xee, 0xd4, 0x2,
-0x4c, 0xcb, 0xaf, 0xb9, 0x0, 0x1, 0xc9, 0x2d, 0xd0, 0x3, 0x6e, 0xd2, 0x2, 0xc8, 0x8c, 0xd3,
-0x2, 0xa5, 0x82, 0x10, 0x2, 0x86, 0x82, 0x20, 0xb7, 0xb2, 0xad, 0xd6, 0x2, 0xc9, 0xff, 0xf0,
-0x29, 0xad, 0xd9, 0x2, 0xf0, 0x3f, 0xad, 0xd3, 0x2, 0xd0, 0x12, 0xae, 0xce, 0x2, 0x20, 0x45,
-0xb1, 0xde, 0x2, 0x1, 0xe8, 0x8e, 0xd3, 0x2, 0x20, 0xcc, 0xb1, 0xf0, 0x25, 0xac, 0xd8, 0x2,
-0xd0, 0x17, 0xac, 0xdc, 0x2, 0x30, 0x12, 0xad, 0xd6, 0x2, 0xf0, 0x6a, 0xce, 0xd6, 0x2, 0xd0,
-0x5, 0xad, 0xd7, 0x2, 0xf0, 0x60, 0xee, 0xd1, 0x2, 0x20, 0xbf, 0xb0, 0x20, 0x8a, 0xb1, 0x20,
-0xbf, 0xb0, 0x4c, 0xed, 0xb1, 0xac, 0xd3, 0x2, 0xf0, 0x16, 0x85, 0x77, 0x38, 0x6e, 0xda, 0x2,
-0xa4, 0x82, 0xad, 0xd2, 0x2, 0x10, 0x6, 0x20, 0xf8, 0xb0, 0x4c, 0x7a, 0xb0, 0x20, 0xd9, 0xb0,
-0xa4, 0x82, 0xf0, 0x5, 0x20, 0xd0, 0xb1, 0xf0, 0x6, 0x20, 0x8a, 0xb1, 0x4c, 0x83, 0xb0, 0xce,
-0xd4, 0x2, 0x38, 0xad, 0xd6, 0x2, 0xed, 0xd4, 0x2, 0x90, 0x1b, 0x8d, 0xd1, 0x2, 0xac, 0xd8,
-0x2, 0xd0, 0x1b, 0xac, 0xdc, 0x2, 0x30, 0x16, 0xa8, 0xf0, 0xb, 0x88, 0xd0, 0x13, 0xad, 0xd7,
-0x2, 0xd, 0xd4, 0x2, 0xd0, 0xac, 0xa9, 0x2a, 0x20, 0xb0, 0xb2, 0xd0, 0xfb, 0x60, 0xa8, 0xf0,
-0xa1, 0xad, 0xd4, 0x2, 0xd0, 0x9c, 0xce, 0xd1, 0x2, 0xe6, 0x76, 0x4c, 0x53, 0xb0, 0x38, 0xad,
-0xd6, 0x2, 0xed, 0xd4, 0x2, 0xf0, 0x39, 0xa4, 0x82, 0x90, 0x16, 0x85, 0x77, 0xcc, 0xce, 0x2,
-0xf0, 0x2, 0xb0, 0x1, 0xc8, 0xee, 0xd4, 0x2, 0x20, 0xe, 0xb1, 0xc6, 0x77, 0xd0, 0xee, 0xf0,
-0x1d, 0x49, 0xff, 0x69, 0x1, 0x85, 0x77, 0xcc, 0xcd, 0x2, 0xf0, 0x7, 0x88, 0xce, 0xd4, 0x2,
-0x4c, 0xf6, 0xb0, 0xe6, 0x76, 0xa9, 0x80, 0x20, 0x10, 0xb1, 0xc6, 0x77, 0xd0, 0xe9, 0x84, 0x82,
-0x60, 0xd0, 0x39, 0x49, 0x9, 0x9d, 0x0, 0x1, 0xca, 0xec, 0xd3, 0x2, 0x60, 0xa9, 0x0, 0xae,
-0xd3, 0x2, 0xe8, 0x2c, 0xda, 0x2, 0x30, 0x10, 0x4d, 0xd2, 0x2, 0xf0, 0xb, 0x20, 0x53, 0xb1,
-0x20, 0x2, 0xb1, 0xb0, 0xf8, 0x4c, 0xb2, 0x9f, 0xbd, 0x0, 0x1, 0xde, 0x0, 0x1, 0xc9, 0x30,
-0x20, 0x2, 0xb1, 0xb0, 0xf3, 0x2c, 0xda, 0x2, 0x10, 0x5, 0x84, 0x82, 0x68, 0x68, 0x60, 0xad,
-0xd2, 0x2, 0x49, 0x80, 0x8d, 0xd2, 0x2, 0xa9, 0x30, 0x9d, 0x1, 0x1, 0xa9, 0x31, 0x9d, 0x2,
-0x1, 0x60, 0xbd, 0x0, 0x1, 0xfe, 0x0, 0x1, 0xc9, 0x39, 0x60, 0x18, 0xc8, 0xf0, 0x5, 0xcc,
-0xdf, 0x2, 0x90, 0x4, 0xa4, 0x76, 0xd0, 0xd4, 0x20, 0x71, 0x81, 0xee, 0xdb, 0x2, 0x60, 0x20,
-0x4e, 0x9c, 0x85, 0x77, 0xa2, 0xa, 0xa9, 0x0, 0x9d, 0xd1, 0x2, 0xca, 0x10, 0xfa, 0x8e, 0xd0,
-0x2, 0x86, 0x82, 0x8e, 0xcf, 0x2, 0xaa, 0xa8, 0x60, 0x18, 0xa5, 0x82, 0x6d, 0xd7, 0x2, 0xb0,
-0x39, 0x38, 0xe5, 0x76, 0x90, 0x34, 0xcd, 0xce, 0x2, 0xf0, 0x2, 0xb0, 0x2d, 0xcd, 0xcd, 0x2,
-0x90, 0x28, 0xaa, 0xbd, 0x0, 0x1, 0xc9, 0x35, 0x90, 0x20, 0xec, 0xcd, 0x2, 0xf0, 0xa, 0xca,
-0x20, 0x53, 0xb1, 0x8e, 0xce, 0x2, 0xf0, 0xf2, 0x60, 0xa9, 0x31, 0x9d, 0x0, 0x1, 0xe8, 0x86,
-0x82, 0xc6, 0x76, 0x10, 0x5, 0xe6, 0x76, 0xee, 0xd4, 0x2, 0x60, 0xa4, 0x82, 0xf0, 0x17, 0xac,
-0xcd, 0x2, 0xb9, 0x0, 0x1, 0xc9, 0x30, 0x60, 0xe6, 0x82, 0x20, 0xe, 0xb1, 0xee, 0xcd, 0x2,
-0xcc, 0xce, 0x2, 0xf0, 0xe5, 0xc8, 0x20, 0xd3, 0xb1, 0xf0, 0xed, 0x60, 0xad, 0xcf, 0x2, 0x30,
-0x2, 0xe6, 0x76, 0xae, 0xcd, 0x2, 0xca, 0xac, 0xde, 0x2, 0x20, 0x71, 0x81, 0xc8, 0xc9, 0x2c,
-0xd0, 0x11, 0x2c, 0xd0, 0x2, 0x30, 0x6, 0xad, 0xe8, 0x4, 0x4c, 0x76, 0xb2, 0xad, 0xdd, 0x2,
-0x4c, 0x76, 0xb2, 0xc9, 0x2e, 0xd0, 0x6, 0xad, 0xe9, 0x4, 0x4c, 0x76, 0xb2, 0xc9, 0x2b, 0xf0,
-0x3b, 0xc9, 0x2d, 0xf0, 0x32, 0xc9, 0x5e, 0xd0, 0x63, 0xa9, 0x45, 0x20, 0xb0, 0xb2, 0xac, 0xd3,
-0x2, 0x20, 0xd3, 0xb1, 0xd0, 0x6, 0xc8, 0x20, 0xd3, 0xb1, 0xf0, 0x7, 0xa9, 0x2d, 0x2c, 0xd2,
-0x2, 0x30, 0x2, 0xa9, 0x2b, 0x20, 0xb0, 0xb2, 0xae, 0xd3, 0x2, 0xbd, 0x0, 0x1, 0x20, 0xb0,
-0xb2, 0xac, 0xe0, 0x2, 0x4c, 0x6c, 0xb2, 0xad, 0xdc, 0x2, 0x30, 0xb1, 0xad, 0xdc, 0x2, 0x4c,
-0x76, 0xb2, 0xa5, 0x76, 0xd0, 0x15, 0xec, 0xce, 0x2, 0xf0, 0x5, 0xe8, 0xbd, 0x0, 0x1, 0x2c,
-0xa9, 0x30, 0x4e, 0xd0, 0x2, 0x20, 0xb0, 0xb2, 0xd0, 0x80, 0x60, 0xc6, 0x76, 0xad, 0xcf, 0x2,
-0x30, 0xee, 0x38, 0x6e, 0xcf, 0x2, 0xad, 0xea, 0x4, 0x4c, 0x73, 0xb2, 0xad, 0xd1, 0x2, 0xf0,
-0xd1, 0xce, 0xd1, 0x2, 0xf0, 0x3, 0x4c, 0xe, 0xb2, 0xad, 0xd8, 0x2, 0x30, 0xf6, 0x20, 0x71,
-0x81, 0xc9, 0x2c, 0xd0, 0xb2, 0xad, 0xdd, 0x2, 0x20, 0xb0, 0xb2, 0xc8, 0x4c, 0x9f, 0xb2, 0x20,
-0xb2, 0x90, 0xce, 0xdb, 0x2, 0x60, 0xac, 0xe0, 0x2, 0x20, 0x5c, 0xb1, 0x20, 0x6c, 0xb3, 0xd0,
-0x14, 0x8c, 0xde, 0x2, 0x90, 0x1a, 0xaa, 0x20, 0x5c, 0xb1, 0xb0, 0x5, 0x20, 0x74, 0xb3, 0xf0,
-0xa, 0xac, 0xde, 0x2, 0x8a, 0x20, 0xb2, 0x90, 0x4c, 0xba, 0xb2, 0xb0, 0xea, 0xac, 0xde, 0x2,
-0xa6, 0x76, 0xd0, 0x7a, 0x8e, 0xdb, 0x2, 0x88, 0xce, 0xdb, 0x2, 0x20, 0x5c, 0xb1, 0xb0, 0x74,
-0xc9, 0x2c, 0xf0, 0xf7, 0x20, 0x43, 0xb3, 0x90, 0xef, 0xc9, 0x2e, 0xd0, 0x8, 0xe8, 0xe0, 0x2,
-0x90, 0xe9, 0x4c, 0xa1, 0x94, 0x20, 0x78, 0xb3, 0xd0, 0xb, 0x90, 0x3, 0x8d, 0xd5, 0x2, 0xfe,
-0xd6, 0x2, 0x4c, 0xec, 0xb2, 0xc9, 0x24, 0xd0, 0xf, 0x2c, 0xcf, 0x2, 0x10, 0xf1, 0x18, 0x6e,
-0xcf, 0x2, 0xce, 0xd6, 0x2, 0x4c, 0x10, 0xb3, 0xc9, 0x5e, 0xd0, 0x16, 0xa2, 0x2, 0x20, 0x5c,
-0xb1, 0xb0, 0xcf, 0xc9, 0x5e, 0xd0, 0xcb, 0xca, 0x10, 0xf4, 0xee, 0xd9, 0x2, 0x20, 0x5c, 0xb1,
-0xb0, 0x22, 0xc9, 0x2b, 0xd0, 0x19, 0xad, 0xdc, 0x2, 0x10, 0x5, 0xa9, 0x2b, 0x8d, 0xdc, 0x2,
-0xad, 0xd8, 0x2, 0xd0, 0xad, 0x6e, 0xd8, 0x2, 0x8c, 0xe0, 0x2, 0xee, 0xdb, 0x2, 0x60, 0xc9,
-0x2d, 0xf0, 0xed, 0x38, 0x8c, 0xe0, 0x2, 0xce, 0xe0, 0x2, 0x60, 0xc9, 0x2b, 0xf0, 0x15, 0xc9,
-0x2d, 0xf0, 0x11, 0xc9, 0x2e, 0xf0, 0xd, 0xc9, 0x3d, 0xf0, 0x9, 0xc9, 0x3e, 0xf0, 0x5, 0xc9,
-0x23, 0xd0, 0x1, 0x18, 0x60, 0xa5, 0x64, 0x8d, 0xeb, 0x4, 0xa5, 0x65, 0x8d, 0xec, 0x4, 0x20,
-0x2c, 0x93, 0x20, 0x1a, 0x93, 0xa5, 0x64, 0x8d, 0xed, 0x4, 0xa5, 0x65, 0x8d, 0xee, 0x4, 0xa2,
-0x1, 0x86, 0x65, 0x20, 0x79, 0x4, 0xc9, 0x29, 0xf0, 0x3, 0x20, 0xd8, 0x9d, 0x20, 0x8b, 0x94,
-0xa6, 0x65, 0xd0, 0x3, 0x4c, 0x1c, 0x99, 0xca, 0x86, 0x61, 0xa2, 0x3, 0xbd, 0xeb, 0x4, 0x95,
-0x57, 0xca, 0x10, 0xf8, 0xa0, 0x2, 0x20, 0x75, 0x81, 0x99, 0x5b, 0x0, 0x20, 0x79, 0x81, 0x99,
-0x5e, 0x0, 0x88, 0x10, 0xf1, 0xa5, 0x5e, 0xf0, 0x37, 0xa9, 0x0, 0x85, 0x62, 0x18, 0xa5, 0x5e,
-0x65, 0x61, 0xb0, 0x2c, 0xc5, 0x5b, 0x90, 0x2, 0xd0, 0x26, 0xa4, 0x62, 0xc4, 0x5e, 0xf0, 0x1b,
-0x98, 0x18, 0x65, 0x61, 0xa8, 0x20, 0x69, 0x81, 0x85, 0x78, 0xa4, 0x62, 0x20, 0x6d, 0x81, 0xc5,
-0x78, 0xf0, 0x4, 0xe6, 0x61, 0xd0, 0xd2, 0xe6, 0x62, 0xd0, 0xdf, 0xe6, 0x61, 0xa5, 0x61, 0x2c,
-0xa9, 0x0, 0x48, 0xad, 0xed, 0x4, 0xac, 0xee, 0x4, 0x20, 0x52, 0x9c, 0xad, 0xeb, 0x4, 0xac,
-0xec, 0x4, 0x20, 0x52, 0x9c, 0x68, 0xa8, 0x4c, 0x81, 0x9a, 0x20, 0x86, 0x9a, 0x20, 0x79, 0x4,
-0xf0, 0x7, 0x20, 0xe1, 0x9d, 0x8c, 0xf2, 0x4, 0x2c, 0xa9, 0xff, 0x8d, 0xf3, 0x4, 0x60, 0x20,
-0x86, 0x9a, 0xae, 0xf1, 0x4, 0xe8, 0xf0, 0x70, 0x20, 0x79, 0x4, 0xf0, 0x47, 0x90, 0x3a, 0xc9,
-0x82, 0xd0, 0x62, 0x20, 0x95, 0xb4, 0xa0, 0x0, 0x20, 0xa5, 0x4, 0xd0, 0x26, 0xc8, 0x20, 0xa5,
-0x4, 0xd0, 0x9, 0xc8, 0x20, 0xa5, 0x4, 0xd0, 0x3, 0x4c, 0x7e, 0x86, 0xa0, 0x3, 0x20, 0xa5,
-0x4, 0x85, 0x39, 0xc8, 0x20, 0xa5, 0x4, 0x85, 0x3a, 0x98, 0x18, 0x65, 0x3b, 0x85, 0x3b, 0x90,
-0x2, 0xe6, 0x3c, 0x20, 0x73, 0x4, 0x4c, 0xb0, 0x8d, 0x20, 0xe1, 0x9d, 0x85, 0x15, 0x20, 0xa4,
-0xb4, 0x4c, 0x69, 0x8d, 0xa2, 0x1, 0xbd, 0xf0, 0x4, 0x95, 0x39, 0xbd, 0xf5, 0x4, 0x95, 0x3b,
-0xca, 0x10, 0xf3, 0xa2, 0xff, 0x8e, 0xef, 0x4, 0x8e, 0xf0, 0x4, 0x8e, 0xf1, 0x4, 0xae, 0xf4,
-0x4, 0x8e, 0xf3, 0x4, 0x60, 0x4c, 0xa1, 0x94, 0xa2, 0x1f, 0x4c, 0x83, 0x86, 0x20, 0x87, 0x9d,
-0xca, 0x8a, 0xc9, 0x24, 0xb0, 0x34, 0x20, 0x53, 0x86, 0xa0, 0xff, 0xa2, 0x0, 0xe8, 0xc8, 0xb1,
-0x24, 0x30, 0x6, 0xc9, 0x20, 0x90, 0xf7, 0xb0, 0xf4, 0x8a, 0x20, 0x5c, 0x9b, 0xa2, 0x0, 0xa0,
-0xff, 0xc8, 0xb1, 0x24, 0xc9, 0x20, 0x90, 0xf9, 0x20, 0xfe, 0xb4, 0x48, 0x29, 0x7f, 0x91, 0x62,
-0x20, 0xfe, 0xb4, 0xe8, 0x68, 0x10, 0xea, 0x4c, 0xca, 0x9c, 0x4c, 0x1c, 0x99, 0x48, 0x8a, 0x48,
-0x98, 0xaa, 0x68, 0xa8, 0x68, 0x60, 0x20, 0x17, 0x93, 0xa5, 0x14, 0x48, 0xa5, 0x15, 0x48, 0x20,
-0xe4, 0x9d, 0xa9, 0x4, 0x20, 0x5c, 0x9b, 0xa0, 0x0, 0xa5, 0x15, 0x20, 0x2d, 0xb5, 0xa5, 0x14,
-0x20, 0x2d, 0xb5, 0x68, 0x85, 0x15, 0x68, 0x85, 0x14, 0x4c, 0xca, 0x9c, 0x48, 0x4a, 0x4a, 0x4a,
-0x4a, 0x20, 0x36, 0xb5, 0x68, 0x29, 0xf, 0xc9, 0xa, 0x90, 0x2, 0x69, 0x6, 0x69, 0x30, 0x91,
-0x62, 0xc8, 0x60, 0x20, 0x48, 0x9c, 0xa8, 0x88, 0xc0, 0x4, 0xb0, 0xae, 0x20, 0xb0, 0x4, 0x99,
-0xe7, 0x4, 0x88, 0x10, 0xf7, 0x60, 0xa0, 0x1, 0xb9, 0x3b, 0x0, 0x99, 0xf8, 0x4, 0xb9, 0x39,
-0x0, 0x99, 0xfa, 0x4, 0x88, 0x10, 0xf1, 0x20, 0x79, 0x4, 0xf0, 0x1c, 0xc9, 0xfc, 0xf0, 0x11,
-0xc9, 0xfd, 0xd0, 0x3f, 0x20, 0x4c, 0xb6, 0xa5, 0x61, 0xd0, 0xd, 0x20, 0x79, 0x4, 0x4c, 0xba,
-0xb5, 0x20, 0x4c, 0xb6, 0xa5, 0x61, 0xd0, 0xf3, 0xa0, 0x5, 0x20, 0x5, 0x89, 0x88, 0xad, 0xf9,
-0x4, 0x91, 0x7c, 0x88, 0xad, 0xf8, 0x4, 0x91, 0x7c, 0x88, 0xad, 0xfb, 0x4, 0x91, 0x7c, 0x88,
-0xad, 0xfa, 0x4, 0x91, 0x7c, 0x88, 0xa9, 0xeb, 0x91, 0x7c, 0x60, 0x20, 0x14, 0xb6, 0x20, 0x79,
-0x4, 0xf0, 0x6, 0x4c, 0xa1, 0x94, 0x20, 0x73, 0x4, 0xf0, 0x1d, 0xc9, 0xec, 0xf0, 0x40, 0xc9,
-0x22, 0xf0, 0xa, 0xc9, 0xeb, 0xd0, 0xef, 0x20, 0xb7, 0xb5, 0x4c, 0x7c, 0xb5, 0x20, 0x73, 0x4,
-0xf0, 0x6, 0xc9, 0x22, 0xd0, 0xf7, 0xf0, 0xde, 0xc9, 0x3a, 0xf0, 0xda, 0x24, 0x81, 0x10, 0x44,
-0xa0, 0x2, 0x20, 0xa5, 0x4, 0xf0, 0x3d, 0xc8, 0x20, 0xa5, 0x4, 0x85, 0x39, 0xc8, 0x20, 0xa5,
-0x4, 0x85, 0x3a, 0x98, 0x18, 0x65, 0x3b, 0x85, 0x3b, 0x90, 0xbb, 0xe6, 0x3c, 0xd0, 0xb7, 0x4c,
-0xb0, 0x8d, 0xf0, 0x2d, 0xc9, 0xfd, 0xf0, 0x24, 0xc9, 0xfc, 0xd0, 0xa7, 0x20, 0x4c, 0xb6, 0xa5,
-0x61, 0xf0, 0x1e, 0xa9, 0xeb, 0x85, 0x2, 0x20, 0x71, 0x88, 0xd0, 0xb, 0x20, 0x69, 0xa7, 0xa0,
-0x5, 0x4c, 0x72, 0xa7, 0xa2, 0x20, 0x2c, 0xa2, 0x21, 0x4c, 0x83, 0x86, 0x20, 0x4c, 0xb6, 0xf0,
-0xe2, 0x20, 0x14, 0xb6, 0x88, 0xb1, 0x3d, 0x85, 0x3c, 0x88, 0xb1, 0x3d, 0x85, 0x3b, 0x88, 0xb1,
-0x3d, 0x20, 0x7f, 0xcd, 0xb1, 0x3d, 0x85, 0x39, 0x4c, 0x57, 0xb5, 0x20, 0x73, 0x4, 0x4c, 0x2c,
-0x93, 0xa9, 0xff, 0x2c, 0xa9, 0x0, 0x8d, 0xeb, 0x2, 0x60, 0x20, 0x8e, 0x94, 0x20, 0xa5, 0x96,
-0x85, 0x49, 0x84, 0x4a, 0x20, 0x1a, 0x93, 0x20, 0xd8, 0x9d, 0xca, 0x86, 0x77, 0xc9, 0x29, 0xf0,
-0x4, 0x20, 0xd8, 0x9d, 0x2c, 0xa2, 0xff, 0x86, 0x78, 0x20, 0x8b, 0x94, 0xa9, 0xb2, 0x20, 0x93,
-0x94, 0x20, 0x2c, 0x93, 0x20, 0x1a, 0x93, 0xa0, 0x2, 0xa9, 0x49, 0x20, 0x94, 0x4, 0x99, 0x5b,
-0x0, 0x20, 0xdc, 0x4, 0x99, 0x5e, 0x0, 0x88, 0x10, 0xef, 0x38, 0xa5, 0x5f, 0xe5, 0x77, 0x85,
-0x5f, 0xb0, 0x2, 0xc6, 0x60, 0xa5, 0x78, 0xc5, 0x5e, 0x90, 0x2, 0xa5, 0x5e, 0xaa, 0xf0, 0x16,
-0x18, 0x65, 0x77, 0xb0, 0x14, 0xc5, 0x5b, 0x90, 0x2, 0xd0, 0xe, 0xa4, 0x77, 0x20, 0x6d, 0x81,
-0x91, 0x5c, 0xc8, 0xca, 0xd0, 0xf7, 0x4c, 0x4e, 0x9c, 0x4c, 0x1c, 0x99, 0x20, 0xde, 0xb6, 0x20,
-0x3e, 0x8e, 0xa5, 0x14, 0x85, 0x73, 0xa5, 0x15, 0x85, 0x74, 0x4c, 0x7e, 0x86, 0x24, 0x81, 0x30,
-0x1, 0x60, 0xa2, 0x22, 0x4c, 0x83, 0x86, 0xae, 0xef, 0x4, 0xe8, 0xf0, 0x1b, 0xad, 0xf0, 0x4,
-0xac, 0xf1, 0x4, 0x85, 0x14, 0x84, 0x15, 0x20, 0x3d, 0x8a, 0x90, 0xc, 0x66, 0x53, 0x20, 0x3e,
-0x90, 0xa6, 0x14, 0xa5, 0x15, 0x20, 0x40, 0x8b, 0x4c, 0x3e, 0x90, 0xa6, 0x60, 0x98, 0x18, 0x65,
-0x5f, 0x90, 0x1, 0xe8, 0xec, 0xf6, 0x4, 0xd0, 0xe, 0xcd, 0xf5, 0x4, 0x90, 0x9, 0xf0, 0x7,
-0x46, 0x53, 0xa9, 0x82, 0x4c, 0xb2, 0x90, 0x60, 0xd0, 0x7c, 0xa2, 0x0, 0xa0, 0x0, 0xe8, 0xbd,
-0x5e, 0x5, 0xf0, 0x53, 0x85, 0x77, 0x86, 0x76, 0xa2, 0x5, 0xbd, 0x6e, 0xcd, 0xca, 0xd0, 0x2,
-0x5, 0x76, 0x20, 0xd2, 0xff, 0x8a, 0x10, 0xf2, 0xa2, 0x7, 0xb9, 0x67, 0x5, 0xc8, 0x48, 0x86,
-0x80, 0xa2, 0x4, 0xdd, 0x39, 0xb8, 0xf0, 0x34, 0xca, 0xd0, 0xf8, 0xa6, 0x80, 0xe0, 0x8, 0x90,
-0x7, 0xd0, 0xa, 0xa9, 0x2b, 0x20, 0xd2, 0xff, 0xa9, 0x22, 0x20, 0xd2, 0xff, 0x68, 0x20, 0xd2,
-0xff, 0xa2, 0x9, 0xc6, 0x77, 0xd0, 0xd3, 0xe0, 0x9, 0x90, 0x5, 0xa9, 0x22, 0x20, 0xd2, 0xff,
-0xa9, 0x8d, 0x20, 0xd2, 0xff, 0xa6, 0x76, 0xe0, 0x8, 0xd0, 0xa3, 0x60, 0xa6, 0x80, 0xbd, 0x30,
-0xb8, 0x20, 0xd2, 0xff, 0xca, 0xe0, 0x3, 0xb0, 0xf5, 0x68, 0x20, 0x74, 0xcd, 0xa9, 0x29, 0x20,
-0xd2, 0xff, 0xa2, 0x8, 0xd0, 0xcd, 0x20, 0x84, 0x9d, 0xca, 0xe0, 0x8, 0x90, 0x3, 0x4c, 0x1c,
-0x99, 0x86, 0x76, 0x20, 0x91, 0x94, 0x20, 0x48, 0x9c, 0x20, 0xc2, 0xb7, 0x90, 0x72, 0x4c, 0x81,
-0x86, 0x85, 0x77, 0xa2, 0x8, 0x20, 0x3e, 0xb8, 0x8d, 0xcd, 0x2, 0xa6, 0x76, 0xe8, 0x20, 0x3e,
-0xb8, 0x8d, 0xce, 0x2, 0xa6, 0x76, 0xa5, 0x77, 0x38, 0xfd, 0x5f, 0x5, 0xf0, 0x35, 0x90, 0x1d,
-0x18, 0x6d, 0xcd, 0x2, 0xb0, 0x4b, 0xc9, 0x81, 0xb0, 0x47, 0xaa, 0xac, 0xcd, 0x2, 0xcc, 0xce,
-0x2, 0xf0, 0x20, 0x88, 0xca, 0xb9, 0x67, 0x5, 0x9d, 0x67, 0x5, 0xb0, 0xf1, 0x6d, 0xce, 0x2,
-0xaa, 0xac, 0xce, 0x2, 0xcc, 0xcd, 0x2, 0xb0, 0xa, 0xb9, 0x67, 0x5, 0x9d, 0x67, 0x5, 0xc8,
-0xe8, 0x90, 0xf1, 0xa6, 0x76, 0x20, 0x3e, 0xb8, 0xaa, 0xa4, 0x76, 0xa5, 0x77, 0x99, 0x5f, 0x5,
-0xa0, 0x0, 0x20, 0xb0, 0x4, 0xc6, 0x77, 0x30, 0x7, 0x9d, 0x67, 0x5, 0xe8, 0xc8, 0xd0, 0xf2,
-0x18, 0x60, 0x28, 0x24, 0x52, 0x48, 0x43, 0x2b, 0x22, 0xd, 0x8d, 0x22, 0x1b, 0xa9, 0x0, 0x18,
-0xca, 0x30, 0xee, 0x7d, 0x5f, 0x5, 0x90, 0xf8, 0x20, 0x84, 0x9d, 0xca, 0xe0, 0x3, 0xb0, 0x64,
-0x86, 0x80, 0x20, 0xde, 0x9d, 0xc9, 0x4, 0xb0, 0x5b, 0x84, 0x7e, 0x85, 0x7f, 0x20, 0xde, 0x9d,
-0xa6, 0x80, 0xe0, 0x2, 0xd0, 0x1, 0xca, 0x48, 0xc0, 0x0, 0xd0, 0x7, 0xc9, 0x0, 0xd0, 0x3,
-0xc8, 0xd0, 0xf, 0x98, 0x48, 0x20, 0xc0, 0x8c, 0xbd, 0xfe, 0x4, 0x1d, 0xfc, 0x4, 0xd0, 0xf5,
-0x68, 0xa8, 0x98, 0x49, 0xff, 0x18, 0x69, 0x1, 0x78, 0x9d, 0xfc, 0x4, 0x68, 0x49, 0xff, 0x69,
-0x0, 0x9d, 0xfe, 0x4, 0xa5, 0x7e, 0x9d, 0xe, 0xff, 0xbd, 0xb8, 0xb8, 0xaa, 0xbd, 0x10, 0xff,
-0x29, 0xfc, 0x5, 0x7f, 0x9d, 0x10, 0xff, 0xa6, 0x80, 0xbd, 0xba, 0xb8, 0xd, 0x11, 0xff, 0x8d,
-0x11, 0xff, 0x58, 0x60, 0x4c, 0x1c, 0x99, 0x2, 0x0, 0x10, 0x20, 0x40, 0x20, 0x84, 0x9d, 0xe0,
-0x9, 0xb0, 0xf1, 0x86, 0x80, 0xad, 0x11, 0xff, 0x29, 0xf0, 0x5, 0x80, 0x8d, 0x11, 0xff, 0x60,
-0x20, 0xb6, 0xc3, 0xa2, 0x4, 0x20, 0xd9, 0xc3, 0x20, 0x7b, 0xc3, 0x20, 0xa5, 0xc3, 0xe0, 0x2,
-0x90, 0x3, 0x4c, 0x1c, 0x99, 0x8a, 0x4a, 0x6a, 0x85, 0x8b, 0x10, 0x4, 0xa5, 0x84, 0xf0, 0x7,
-0x20, 0xf3, 0xc1, 0xb0, 0x2, 0xd0, 0x1, 0x60, 0x20, 0x54, 0xa9, 0xa5, 0x31, 0x85, 0x22, 0xa5,
-0x32, 0x85, 0x23, 0x38, 0xa5, 0x33, 0xe9, 0x3, 0x85, 0x19, 0xa5, 0x34, 0xe9, 0x0, 0x85, 0x1a,
-0xa2, 0x0, 0x86, 0x89, 0x86, 0x8a, 0xae, 0xaf, 0x2, 0xd0, 0x3, 0xce, 0xb0, 0x2, 0xce, 0xaf,
-0x2, 0x20, 0xf3, 0xc1, 0xb0, 0x2, 0xd0, 0xee, 0xee, 0xaf, 0x2, 0xd0, 0x3, 0xee, 0xb0, 0x2,
-0x20, 0xc3, 0xc1, 0xae, 0xad, 0x2, 0xd0, 0x3, 0xce, 0xae, 0x2, 0xce, 0xad, 0x2, 0xa5, 0x89,
-0x20, 0x9f, 0xb9, 0x85, 0x89, 0x18, 0xad, 0xad, 0x2, 0x69, 0x2, 0x8d, 0xad, 0x2, 0x90, 0x3,
-0xee, 0xae, 0x2, 0xa5, 0x8a, 0x20, 0x9f, 0xb9, 0x85, 0x8a, 0xae, 0xad, 0x2, 0xd0, 0x3, 0xce,
-0xae, 0x2, 0xce, 0xad, 0x2, 0xee, 0xaf, 0x2, 0xd0, 0x3, 0xee, 0xb0, 0x2, 0x20, 0xf3, 0xc1,
-0xb0, 0x2, 0xd0, 0xbc, 0xa2, 0x3, 0xa0, 0x0, 0xa5, 0x23, 0xc5, 0x32, 0xd0, 0x6, 0xa5, 0x22,
-0xc5, 0x31, 0xf0, 0x17, 0xa5, 0x22, 0xd0, 0x2, 0xc6, 0x23, 0xc6, 0x22, 0x20, 0xb0, 0x4, 0x9d,
-0xad, 0x2, 0xca, 0x10, 0xef, 0x20, 0xc0, 0x8c, 0x4c, 0x11, 0xb9, 0x4c, 0x7b, 0xc3, 0x48, 0x20,
-0xf3, 0xc1, 0xb0, 0x2b, 0xf0, 0x29, 0x68, 0xd0, 0x29, 0xaa, 0xa8, 0xa5, 0x23, 0xc5, 0x1a, 0x90,
-0xb, 0xd0, 0x6, 0xa5, 0x22, 0xc5, 0x19, 0x90, 0x3, 0x4c, 0x81, 0x86, 0xbd, 0xad, 0x2, 0x91,
-0x22, 0xe6, 0x22, 0xd0, 0x2, 0xe6, 0x23, 0xe8, 0xe0, 0x4, 0xd0, 0xf0, 0xa9, 0x80, 0x60, 0x68,
-0xa9, 0x0, 0x60, 0x20, 0xb9, 0xc3, 0x20, 0xd8, 0x9d, 0xe0, 0x28, 0xb0, 0xa, 0x8e, 0xda, 0x2,
-0x20, 0xd8, 0x9d, 0xe0, 0x19, 0x90, 0x3, 0x4c, 0x1c, 0x99, 0x8e, 0xdb, 0x2, 0x20, 0x91, 0x94,
-0x20, 0x48, 0x9c, 0x8d, 0xea, 0x2, 0x98, 0x48, 0x8a, 0x48, 0x20, 0xa5, 0xc3, 0x8a, 0x6a, 0x6e,
-0xb9, 0x2, 0x68, 0x85, 0x22, 0x68, 0x85, 0x23, 0xa5, 0x83, 0xd0, 0x1b, 0xae, 0xdb, 0x2, 0xac,
-0xda, 0x2, 0x18, 0x20, 0xf0, 0xff, 0xa0, 0x0, 0xcc, 0xea, 0x2, 0xf0, 0x9, 0x20, 0xb0, 0x4,
-0x20, 0x4c, 0xff, 0xc8, 0xd0, 0xf2, 0x60, 0x20, 0xbf, 0xc7, 0xa5, 0x86, 0x48, 0xa5, 0x84, 0x48,
-0x24, 0x83, 0x10, 0xf, 0x68, 0xf0, 0x12, 0x4a, 0xf0, 0xf, 0xa6, 0x85, 0x90, 0xd, 0xae, 0x16,
-0xff, 0xb0, 0x8, 0xae, 0x15, 0xff, 0x68, 0xf0, 0x2, 0xa6, 0x86, 0x86, 0x86, 0xae, 0xdb, 0x2,
-0xa0, 0x0, 0x8c, 0xdc, 0x2, 0xac, 0xdc, 0x2, 0xee, 0xdc, 0x2, 0x20, 0xb0, 0x4, 0xce, 0xea,
-0x2, 0x30, 0x17, 0xac, 0xda, 0x2, 0x20, 0x7f, 0xba, 0xee, 0xda, 0x2, 0xc0, 0x27, 0x90, 0xe5,
-0xa0, 0x0, 0x8c, 0xda, 0x2, 0xe8, 0xe0, 0x18, 0x90, 0xdb, 0x68, 0x85, 0x86, 0x60, 0x48, 0x20,
-0x1a, 0xc2, 0x20, 0x91, 0xc2, 0xa9, 0x0, 0x85, 0x7e, 0x68, 0x48, 0xa, 0x26, 0x7e, 0xa, 0xa,
-0x26, 0x7e, 0x85, 0x24, 0xa5, 0x7e, 0x6d, 0xe4, 0x2, 0x85, 0x25, 0x98, 0x48, 0xa0, 0x7, 0xad,
-0xb9, 0x2, 0xa, 0xb1, 0x24, 0x90, 0x2, 0x49, 0xff, 0x24, 0x83, 0x10, 0x2b, 0x29, 0xaa, 0x85,
-0x7e, 0xa5, 0x84, 0xd0, 0xf, 0xa5, 0x7e, 0xb0, 0x7, 0x4a, 0x45, 0x7e, 0x49, 0xaa, 0xd0, 0x18,
-0x9, 0x55, 0xd0, 0x14, 0xc9, 0x2, 0xd0, 0x4, 0xa5, 0x7e, 0xb0, 0xc, 0x90, 0x7, 0xa5, 0x7e,
-0x4a, 0x45, 0x7e, 0x90, 0x3, 0xa5, 0x7e, 0x4a, 0x91, 0x8c, 0x88, 0x10, 0xc2, 0x68, 0xa8, 0x68,
-0x60, 0x20, 0xb6, 0xc3, 0xa2, 0x1f, 0x20, 0xf4, 0xc3, 0xa2, 0x2b, 0x20, 0xd9, 0xc3, 0x20, 0x8f,
-0xc3, 0x8c, 0xd0, 0x2, 0x8d, 0xd1, 0x2, 0x20, 0xa5, 0xc3, 0xe0, 0x2, 0x90, 0x3, 0x4c, 0x1c,
-0x99, 0x8e, 0xe8, 0x2, 0x8a, 0x48, 0x20, 0xb4, 0xbb, 0x68, 0xd0, 0x1c, 0xf0, 0x3, 0x20, 0x36,
-0xbc, 0x20, 0xda, 0xc0, 0xad, 0xca, 0x2, 0xd0, 0xf5, 0xa2, 0x4, 0xbd, 0xd7, 0x2, 0x9d, 0xac,
-0x2, 0xca, 0xd0, 0xf7, 0x8e, 0xe8, 0x2, 0x60, 0xa2, 0x0, 0xad, 0xc5, 0x2, 0x4a, 0x90, 0x2,
-0xa2, 0x2, 0xbd, 0xdc, 0x2, 0x8d, 0xd6, 0x2, 0xbd, 0xdd, 0x2, 0x8d, 0xd7, 0x2, 0xa9, 0x0,
-0xa2, 0x3, 0x9d, 0xd2, 0x2, 0xca, 0x10, 0xfa, 0xa2, 0x7, 0xbd, 0xad, 0x2, 0x48, 0xca, 0x10,
-0xf9, 0x20, 0xda, 0xc0, 0xa2, 0x0, 0x68, 0x9d, 0xad, 0x2, 0xe8, 0xe0, 0x8, 0xd0, 0xf7, 0xad,
-0xd6, 0x2, 0xd0, 0x5, 0xce, 0xd7, 0x2, 0x30, 0xb0, 0xce, 0xd6, 0x2, 0xa2, 0x25, 0xa0, 0x1b,
-0xad, 0xc5, 0x2, 0x4a, 0x90, 0x2, 0xa0, 0x19, 0xa9, 0x0, 0x4a, 0x48, 0x20, 0xf6, 0xc2, 0x9d,
-0xad, 0x2, 0x98, 0x9d, 0xae, 0x2, 0x68, 0x90, 0x2, 0x9, 0xa0, 0xe8, 0xe8, 0xa0, 0x19, 0x4e,
-0xc5, 0x2, 0x90, 0x2, 0xa0, 0x1b, 0x2e, 0xc5, 0x2, 0xe0, 0x27, 0xf0, 0xdd, 0xa2, 0x6, 0xa,
-0xf0, 0xbd, 0x90, 0x8, 0xfe, 0xad, 0x2, 0xd0, 0x3, 0xfe, 0xae, 0x2, 0xa, 0xca, 0xca, 0x10,
-0xf1, 0x30, 0x95, 0xa0, 0x23, 0x20, 0x56, 0xbc, 0xa2, 0x1f, 0xa0, 0x2b, 0x98, 0x48, 0x20, 0x22,
-0xc3, 0x9d, 0xb1, 0x2, 0x9d, 0xb5, 0x2, 0x9d, 0xbd, 0x2, 0x98, 0x9d, 0xb2, 0x2, 0x9d, 0xb6,
-0x2, 0x9d, 0xbe, 0x2, 0x68, 0xa8, 0x20, 0xf6, 0xc2, 0x9d, 0xad, 0x2, 0x98, 0x9d, 0xae, 0x2,
-0xa0, 0x2d, 0xe8, 0xe8, 0xe0, 0x21, 0xf0, 0xd4, 0xa9, 0x90, 0x20, 0xd5, 0xbc, 0xad, 0xc5, 0x2,
-0x29, 0x3, 0x8d, 0xc5, 0x2, 0xaa, 0xbd, 0x18, 0xbc, 0x20, 0x36, 0xbc, 0x20, 0x7b, 0xc3, 0xad,
-0xca, 0x2, 0x20, 0x36, 0xbc, 0xae, 0xc5, 0x2, 0xbd, 0x18, 0xbc, 0x29, 0xf0, 0x8d, 0xcb, 0x2,
-0xbd, 0x1c, 0xbc, 0x8d, 0xca, 0x2, 0x60, 0xbe, 0xe4, 0x41, 0x1b, 0x41, 0x1b, 0xbe, 0xe4, 0x46,
-0x52, 0x45, 0x44, 0x20, 0x42, 0xd, 0x54, 0x45, 0x52, 0x52, 0x59, 0x20, 0x52, 0xd, 0x4d, 0x49,
-0x4b, 0x45, 0x20, 0x49, 0xd, 0x20, 0x5, 0xbd, 0xa2, 0x4, 0xbd, 0xae, 0x2, 0xa, 0x7e, 0xae,
-0x2, 0x7e, 0xad, 0x2, 0x90, 0x8, 0xfe, 0xad, 0x2, 0xd0, 0x3, 0xfe, 0xae, 0x2, 0xe8, 0xe8,
-0xe0, 0x6, 0xf0, 0xe6, 0x60, 0x20, 0x18, 0xc3, 0xa2, 0x0, 0xe8, 0x38, 0xe9, 0x5a, 0xb0, 0xfa,
-0x88, 0x10, 0xf7, 0x8e, 0xc5, 0x2, 0x48, 0x69, 0x5a, 0x20, 0x76, 0xbc, 0x68, 0x18, 0x49, 0xff,
-0x69, 0x1, 0xce, 0xc5, 0x2, 0xa2, 0xff, 0xe8, 0x38, 0xe9, 0xa, 0xb0, 0xfa, 0x69, 0xa, 0x85,
-0x8e, 0x8a, 0xa, 0xaa, 0xbd, 0xb4, 0xc4, 0xbc, 0xb3, 0xc4, 0x18, 0xc6, 0x8e, 0x30, 0xc, 0x7d,
-0xc8, 0xc4, 0x48, 0x98, 0x7d, 0xc7, 0xc4, 0xa8, 0x68, 0x90, 0xef, 0x48, 0xa2, 0x0, 0xad, 0xc5,
-0x2, 0x4a, 0xb0, 0x2, 0xa2, 0x2, 0x68, 0x9d, 0xc6, 0x2, 0x98, 0x9d, 0xc7, 0x2, 0x60, 0xa0,
-0x19, 0x90, 0x2, 0xa0, 0x1b, 0xad, 0xc5, 0x2, 0x69, 0x2, 0x4a, 0x4a, 0x8, 0x20, 0x18, 0xc3,
-0xc0, 0xff, 0x90, 0x7, 0x8a, 0xa8, 0x20, 0x18, 0xc3, 0xb0, 0x3, 0x20, 0x37, 0xc3, 0x28, 0xb0,
-0x1b, 0x4c, 0x27, 0xc3, 0x8d, 0xca, 0x2, 0xa2, 0x23, 0xe, 0xca, 0x2, 0x20, 0xb0, 0xbc, 0x9d,
-0xad, 0x2, 0x98, 0x9d, 0xae, 0x2, 0xe8, 0xe8, 0xe0, 0x2b, 0x90, 0xed, 0x60, 0xa0, 0x2b, 0x20,
-0x56, 0xbc, 0xa2, 0x7, 0xbd, 0xdc, 0x2, 0x9d, 0xd0, 0x2, 0xca, 0x10, 0xf7, 0xa9, 0x50, 0x20,
-0xd5, 0xbc, 0xa9, 0x10, 0x8d, 0xca, 0x2, 0xa0, 0x1f, 0xa2, 0x23, 0xe, 0xcb, 0x2, 0x2e, 0xca,
-0x2, 0x20, 0xf4, 0xc2, 0xe8, 0xe8, 0xe, 0xcb, 0x2, 0x2e, 0xca, 0x2, 0x20, 0xf0, 0xc2, 0x48,
-0x98, 0x48, 0xa0, 0x21, 0xe8, 0xe8, 0xe0, 0x27, 0xf0, 0xe1, 0xa2, 0x3, 0x68, 0x9d, 0xb1, 0x2,
-0xca, 0x10, 0xf9, 0x60, 0x20, 0xbf, 0xc7, 0x20, 0x48, 0x9c, 0x8d, 0xcf, 0x2, 0x86, 0x24, 0x84,
-0x25, 0xa2, 0x4, 0x20, 0xd9, 0xc3, 0x20, 0xa5, 0xc3, 0xe0, 0x5, 0x90, 0x3, 0x4c, 0x1c, 0x99,
-0x8e, 0xd0, 0x2, 0xa2, 0x3, 0xac, 0xcf, 0x2, 0xc0, 0x5, 0xb0, 0x1, 0x60, 0x88, 0x20, 0xbb,
-0x4, 0x9d, 0xd5, 0x2, 0xca, 0x10, 0xf6, 0x8e, 0xd1, 0x2, 0x20, 0x7b, 0xc3, 0xad, 0xd5, 0x2,
-0x8d, 0xd9, 0x2, 0xad, 0xd6, 0x2, 0x8d, 0xda, 0x2, 0xa9, 0x8, 0x8d, 0xe5, 0x2, 0xee, 0xd1,
-0x2, 0xac, 0xd1, 0x2, 0x20, 0xbb, 0x4, 0x8d, 0xd3, 0x2, 0x20, 0xf3, 0xc1, 0x8d, 0xd2, 0x2,
-0xe, 0xd3, 0x2, 0x2a, 0xce, 0xe5, 0x2, 0x24, 0x83, 0x10, 0x7, 0xe, 0xd3, 0x2, 0x2a, 0xce,
-0xe5, 0x2, 0xae, 0xd0, 0x2, 0xe0, 0x3, 0x90, 0xc, 0xf0, 0x5, 0x4d, 0xd2, 0x2, 0xb0, 0x11,
-0x2d, 0xd2, 0x2, 0xb0, 0xc, 0xe0, 0x1, 0x90, 0x8, 0xf0, 0x4, 0xd, 0xd2, 0x2, 0x2c, 0x49,
-0xff, 0x29, 0x3, 0x24, 0x83, 0x30, 0x2, 0x29, 0x1, 0x85, 0x84, 0x20, 0xc3, 0xc1, 0xee, 0xad,
-0x2, 0xd0, 0x3, 0xee, 0xae, 0x2, 0x38, 0xad, 0xd9, 0x2, 0x24, 0x83, 0x10, 0x3, 0xe9, 0x2,
-0x2c, 0xe9, 0x1, 0x8d, 0xd9, 0x2, 0xad, 0xda, 0x2, 0xe9, 0x0, 0x8d, 0xda, 0x2, 0xb0, 0x2d,
-0xa2, 0x1, 0xbd, 0xd5, 0x2, 0x9d, 0xd9, 0x2, 0xbd, 0xb1, 0x2, 0x9d, 0xad, 0x2, 0xca, 0x10,
-0xf1, 0xee, 0xaf, 0x2, 0xd0, 0x3, 0xee, 0xb0, 0x2, 0x38, 0xad, 0xd7, 0x2, 0xe9, 0x1, 0x8d,
-0xd7, 0x2, 0xad, 0xd8, 0x2, 0xe9, 0x0, 0x8d, 0xd8, 0x2, 0xb0, 0x9, 0x60, 0xad, 0xe5, 0x2,
-0xf0, 0x3, 0x4c, 0x8b, 0xbd, 0x4c, 0x7a, 0xbd, 0x20, 0xbf, 0xc7, 0x20, 0xa5, 0x96, 0x8d, 0xdb,
-0x2, 0x8c, 0xdc, 0x2, 0x24, 0xd, 0x30, 0x3, 0x4c, 0x24, 0x93, 0xa2, 0x28, 0x20, 0xf4, 0xc3,
-0xa2, 0x4, 0x20, 0xd9, 0xc3, 0xa2, 0x2a, 0xa0, 0x6, 0xa9, 0x2, 0x85, 0x8e, 0x20, 0x22, 0xc3,
-0xaa, 0x98, 0x48, 0xa4, 0x8e, 0x20, 0x82, 0xc3, 0x90, 0xc, 0xb9, 0xd5, 0x2, 0x99, 0xad, 0x2,
-0xb9, 0xd6, 0x2, 0x99, 0xae, 0x2, 0x8a, 0x99, 0xd5, 0x2, 0x99, 0xde, 0x2, 0x68, 0x99, 0xd6,
-0x2, 0x99, 0xdf, 0x2, 0xa2, 0x28, 0xa0, 0x4, 0xc6, 0x8e, 0xc6, 0x8e, 0xf0, 0xcf, 0xa0, 0xff,
-0x8c, 0xd1, 0x2, 0xad, 0xad, 0x2, 0x8d, 0xd9, 0x2, 0xad, 0xae, 0x2, 0x8d, 0xda, 0x2, 0x98,
-0x20, 0x5c, 0x9b, 0x20, 0x64, 0xc2, 0xb1, 0x8c, 0x90, 0xe, 0xad, 0xad, 0x2, 0x24, 0x83, 0x10,
-0x2, 0x38, 0x2a, 0x29, 0x7, 0xaa, 0xa9, 0x0, 0x24, 0x83, 0x10, 0x1, 0xca, 0x8e, 0xdd, 0x2,
-0xa, 0xca, 0x10, 0xfc, 0x6a, 0x85, 0x8e, 0xa9, 0x8, 0x24, 0x83, 0x10, 0x1, 0x4a, 0x18, 0x6d,
-0xad, 0x2, 0x8d, 0xad, 0x2, 0x90, 0x3, 0xee, 0xae, 0x2, 0x20, 0x64, 0xc2, 0xa9, 0x0, 0xb0,
-0x2, 0xb1, 0x8c, 0x85, 0x8f, 0xae, 0xdd, 0x2, 0x4a, 0xe8, 0xe0, 0x8, 0xd0, 0xfa, 0x5, 0x8e,
-0xee, 0xd1, 0x2, 0xac, 0xd1, 0x2, 0xc0, 0xfc, 0x90, 0x3, 0x4c, 0x4c, 0xcc, 0x91, 0x62, 0xae,
-0xdd, 0x2, 0xad, 0xd5, 0x2, 0x38, 0x24, 0x83, 0x10, 0x3, 0xe9, 0x4, 0x2c, 0xe9, 0x8, 0x8d,
-0xd5, 0x2, 0xa5, 0x8f, 0xb0, 0xaa, 0xce, 0xd6, 0x2, 0x10, 0xa5, 0xae, 0xd7, 0x2, 0xd0, 0x42,
-0xce, 0xd8, 0x2, 0x10, 0x3d, 0x24, 0x83, 0x10, 0x6, 0xe, 0xde, 0x2, 0x2e, 0xdf, 0x2, 0xa2,
-0x0, 0xbd, 0xde, 0x2, 0xc8, 0x91, 0x62, 0xe8, 0xe0, 0x4, 0xd0, 0xf5, 0xc8, 0x8c, 0xde, 0x2,
-0xa5, 0x62, 0x8d, 0xdf, 0x2, 0xa5, 0x63, 0x8d, 0xe0, 0x2, 0xa9, 0xde, 0x85, 0x64, 0xa9, 0x2,
-0x85, 0x65, 0xad, 0xdb, 0x2, 0x85, 0x49, 0xad, 0xdc, 0x2, 0x85, 0x4a, 0x20, 0x40, 0x8f, 0x4c,
-0x7b, 0xc3, 0xce, 0xd7, 0x2, 0xee, 0xaf, 0x2, 0xd0, 0x3, 0xee, 0xb0, 0x2, 0xad, 0xd9, 0x2,
-0x8d, 0xad, 0x2, 0xad, 0xda, 0x2, 0x8d, 0xae, 0x2, 0xad, 0xde, 0x2, 0x8d, 0xd5, 0x2, 0xad,
-0xdf, 0x2, 0x8d, 0xd6, 0x2, 0x4c, 0x94, 0xbe, 0xa5, 0x83, 0x18, 0x2a, 0x2a, 0x2a, 0x69, 0x0,
-0xa8, 0x4c, 0x81, 0x9a, 0x38, 0x24, 0x18, 0x8, 0x20, 0x87, 0x9d, 0xad, 0x19, 0xff, 0x29, 0x7f,
-0xe0, 0x4, 0xf0, 0x19, 0xb0, 0x27, 0xad, 0x15, 0xff, 0x29, 0x7f, 0xca, 0x30, 0xf, 0xa5, 0x86,
-0xca, 0x30, 0xa, 0xa5, 0x85, 0xca, 0x30, 0x5, 0xad, 0x16, 0xff, 0x29, 0x7f, 0x28, 0xb0, 0x5,
-0x4a, 0x4a, 0x4a, 0x4a, 0x18, 0x69, 0x0, 0x29, 0xf, 0xa8, 0x4c, 0x81, 0x9a, 0x4c, 0x1c, 0x99,
-0x20, 0x87, 0x9d, 0xca, 0xe0, 0x2, 0xb0, 0xf5, 0xbd, 0xfb, 0xbf, 0xaa, 0x78, 0x8e, 0x8, 0xff,
-0xad, 0x8, 0xff, 0x8e, 0x8, 0xff, 0xcd, 0x8, 0xff, 0xd0, 0xf2, 0x58, 0x49, 0xff, 0xa8, 0x29,
-0xf, 0xaa, 0xbd, 0xf0, 0xbf, 0xc0, 0xf, 0x90, 0x2, 0x9, 0x80, 0xa8, 0x4c, 0x81, 0x9a, 0x0,
-0x1, 0x5, 0x0, 0x7, 0x8, 0x6, 0x0, 0x3, 0x2, 0x4, 0xfa, 0xfd, 0x20, 0x87, 0x9d };
-
-/*
-
-  KERNAL ROM image (PAL) of the 264 family.
-
-  Located at $C000-$FFFF including character
-  set, which is at $D000-$D7FF
-
-*/
-unsigned char kernal[]={
-0xe0,
-0x2, 0x90, 0xd, 0xd0, 0xb8, 0x20, 0xf3, 0xc1, 0xa8, 0x90, 0x2, 0xa0, 0x0, 0x4c, 0x81, 0x9a,
-0x8a, 0xa, 0xaa, 0xbd, 0xad, 0x2, 0xa8, 0xbd, 0xae, 0x2, 0x4c, 0x71, 0x94, 0x20, 0xb6, 0xc3,
-0xa2, 0x1f, 0x20, 0xd9, 0xc3, 0x20, 0x8f, 0xc3, 0x8c, 0xd0, 0x2, 0x8d, 0xd1, 0x2, 0x20, 0x8f,
-0xc3, 0x8c, 0xd2, 0x2, 0x8d, 0xd3, 0x2, 0x8, 0xa2, 0x23, 0x20, 0xd3, 0xc2, 0x28, 0xb0, 0x11,
-0xad, 0xd0, 0x2, 0x8d, 0xd2, 0x2, 0xad, 0xd1, 0x2, 0x24, 0x83, 0x10, 0x4, 0xe, 0xd2, 0x2,
-0x2a, 0x8d, 0xd3, 0x2, 0x20, 0x8f, 0xc3, 0x8c, 0xd8, 0x2, 0x8d, 0xd9, 0x2, 0x20, 0x8f, 0xc3,
-0x8c, 0xda, 0x2, 0x8d, 0xdb, 0x2, 0x20, 0x8f, 0xc3, 0x85, 0x80, 0x98, 0xa4, 0x80, 0x20, 0x59,
-0xbc, 0xa2, 0x2d, 0xa0, 0x2b, 0x20, 0x5, 0xc3, 0x90, 0xe, 0xa9, 0x68, 0xa0, 0x1, 0x20, 0xf9,
-0xc2, 0x9d, 0xad, 0x2, 0x98, 0x9d, 0xae, 0x2, 0xa2, 0x3, 0xbd, 0xd0, 0x2, 0x9d, 0xd4, 0x2,
-0xca, 0x10, 0xf7, 0xa9, 0x90, 0x20, 0xd5, 0xbc, 0xa2, 0x7, 0xbd, 0xd0, 0x2, 0x9d, 0xdc, 0x2,
-0xca, 0x10, 0xf7, 0x20, 0xee, 0xbc, 0x20, 0x7b, 0xc3, 0xa2, 0x2, 0x20, 0xa7, 0xc3, 0x86, 0xe9,
-0x18, 0xa5, 0xe9, 0xd0, 0x3, 0x4c, 0x1c, 0x99, 0x6d, 0xd8, 0x2, 0x8d, 0xd8, 0x2, 0x90, 0x3,
-0xee, 0xd9, 0x2, 0xa2, 0x2d, 0xa0, 0x2b, 0x20, 0x5, 0xc3, 0xb0, 0x8, 0x20, 0xee, 0xbc, 0x20,
-0xda, 0xc0, 0x90, 0xdd, 0xa0, 0x2d, 0x20, 0xf0, 0xbc, 0xa2, 0x2, 0xa0, 0x6, 0xa9, 0x0, 0x9d,
-0xb9, 0x2, 0x9d, 0xba, 0x2, 0x20, 0x22, 0xc3, 0x10, 0x8, 0xde, 0xb9, 0x2, 0xde, 0xba, 0x2,
-0xd0, 0xb, 0xc9, 0x0, 0xd0, 0x4, 0xc0, 0x0, 0xf0, 0x3, 0xfe, 0xb9, 0x2, 0x9d, 0xb5, 0x2,
-0xa, 0x9d, 0xbd, 0x2, 0x98, 0x9d, 0xb6, 0x2, 0x2a, 0x9d, 0xbe, 0x2, 0xca, 0xca, 0xa0, 0x4,
-0xe0, 0x0, 0xf0, 0xc9, 0xa2, 0xa, 0xa0, 0x8, 0x20, 0x5, 0xc3, 0xa9, 0x0, 0x2a, 0x2a, 0x8d,
-0xc3, 0x2, 0x49, 0x2, 0x8d, 0xc4, 0x2, 0x18, 0xa9, 0x10, 0x6d, 0xc3, 0x2, 0xa8, 0x48, 0x49,
-0x2, 0xaa, 0x20, 0x5, 0xc3, 0x9d, 0xad, 0x2, 0x98, 0x9d, 0xae, 0x2, 0x68, 0xa8, 0x18, 0xa9,
-0x8, 0x6d, 0xc4, 0x2, 0xaa, 0x20, 0x5, 0xc3, 0x8d, 0xc1, 0x2, 0x8c, 0xc2, 0x2, 0x20, 0xa5,
-0xc1, 0xac, 0xc4, 0x2, 0x38, 0xb9, 0xb5, 0x2, 0xe9, 0x1, 0x99, 0xb5, 0x2, 0xb0, 0xb, 0xb9,
-0xb6, 0x2, 0xe9, 0x0, 0x99, 0xb6, 0x2, 0xb0, 0x1, 0x60, 0xae, 0xc3, 0x2, 0xad, 0xc2, 0x2,
-0x30, 0x6, 0x20, 0x94, 0xc1, 0xae, 0xc4, 0x2, 0x18, 0xad, 0xc1, 0x2, 0x7d, 0xbd, 0x2, 0x8d,
-0xc1, 0x2, 0xad, 0xc2, 0x2, 0x7d, 0xbe, 0x2, 0x8d, 0xc2, 0x2, 0xae, 0xc4, 0x2, 0x20, 0x94,
-0xc1, 0xf0, 0xbb, 0xa0, 0x2, 0x18, 0xbd, 0xad, 0x2, 0x7d, 0xb9, 0x2, 0x9d, 0xad, 0x2, 0xe8,
-0x88, 0xd0, 0xf3, 0x60, 0xad, 0xe8, 0x2, 0xd, 0xe7, 0x2, 0xf0, 0x16, 0xee, 0xad, 0x2, 0xd0,
-0x3, 0xee, 0xae, 0x2, 0x20, 0xc3, 0xc1, 0xae, 0xad, 0x2, 0xd0, 0x3, 0xce, 0xae, 0x2, 0xce,
-0xad, 0x2, 0x20, 0xad, 0xc2, 0xb0, 0x24, 0x20, 0x1a, 0xc2, 0x20, 0x69, 0xc2, 0x8d, 0xe9, 0x2,
-0xb1, 0x8c, 0xd, 0xe9, 0x2, 0x24, 0x83, 0x10, 0x13, 0x48, 0xa6, 0x84, 0xad, 0xe9, 0x2, 0x3d,
-0xaf, 0xc4, 0x8d, 0xe9, 0x2, 0x68, 0x4d, 0xe9, 0x2, 0x91, 0x8c, 0x60, 0xa6, 0x84, 0xd0, 0xf9,
-0xf0, 0xf4, 0x20, 0x64, 0xc2, 0xb0, 0x21, 0x8d, 0xe9, 0x2, 0xb1, 0x8c, 0x2d, 0xe9, 0x2, 0x2a,
-0xca, 0x10, 0xfc, 0x2a, 0x24, 0x8b, 0x30, 0x6, 0x29, 0x3, 0xc5, 0x84, 0x18, 0x60, 0x18, 0x29,
-0x3, 0xf0, 0x3, 0xa2, 0x0, 0x60, 0xa2, 0xff, 0x60, 0xbd, 0x2, 0xd8, 0x85, 0x8c, 0xbd, 0x1b,
-0xd8, 0x29, 0x3, 0x48, 0x9, 0x1c, 0x85, 0x8d, 0x20, 0x38, 0xc2, 0x91, 0x8c, 0x68, 0x9, 0x18,
-0x85, 0x8d, 0x20, 0x4e, 0xc2, 0x91, 0x8c, 0xa5, 0x86, 0xa, 0xa, 0xa, 0xa, 0x85, 0x7e, 0xad,
-0x15, 0xff, 0x24, 0x83, 0x10, 0x2, 0xa5, 0x85, 0x29, 0xf, 0x5, 0x7e, 0x60, 0xa5, 0x86, 0x4a,
-0x4a, 0x4a, 0x4a, 0x85, 0x7e, 0xad, 0x15, 0xff, 0x24, 0x83, 0x10, 0x2, 0xa5, 0x85, 0x29, 0xf0,
-0x5, 0x7e, 0x60, 0x20, 0xad, 0xc2, 0xb0, 0x1f, 0x20, 0x91, 0xc2, 0xad, 0xaf, 0x2, 0x29, 0x7,
-0xa8, 0xad, 0xad, 0x2, 0x24, 0x83, 0x8, 0x10, 0x1, 0xa, 0x29, 0x7, 0xaa, 0xbd, 0x89, 0xc2,
-0x28, 0x10, 0x4, 0xe8, 0x1d, 0x89, 0xc2, 0x60, 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2, 0x1,
-0x98, 0x18, 0x7d, 0x2, 0xd8, 0x85, 0x8c, 0xbd, 0x1b, 0xd8, 0x29, 0x3, 0x69, 0x0, 0x6, 0x8c,
-0x2a, 0x6, 0x8c, 0x2a, 0x6, 0x8c, 0x2a, 0x9, 0x20, 0x85, 0x8d, 0x60, 0xad, 0xae, 0x2, 0x4a,
-0xd0, 0x1e, 0xad, 0xad, 0x2, 0x6a, 0x4a, 0x24, 0x83, 0x30, 0x1, 0x4a, 0xa8, 0xc0, 0x28, 0xb0,
-0xf, 0xad, 0xb0, 0x2, 0xd0, 0xa, 0xad, 0xaf, 0x2, 0x4a, 0x4a, 0x4a, 0xaa, 0xc5, 0x88, 0x60,
-0x38, 0x60, 0xad, 0xe6, 0x2, 0xf0, 0x17, 0xa5, 0x87, 0x20, 0xdf, 0xc2, 0xa5, 0x88, 0xa, 0xa8,
-0xa9, 0x0, 0x20, 0x37, 0xc3, 0x9d, 0xad, 0x2, 0x98, 0xe8, 0x9d, 0xad, 0x2, 0xe8, 0x60, 0x90,
-0x7, 0xb0, 0x14, 0xb0, 0xf, 0x20, 0x18, 0xc3, 0x18, 0x7d, 0xad, 0x2, 0x48, 0x98, 0x7d, 0xae,
-0x2, 0xa8, 0x68, 0x60, 0x20, 0x18, 0xc3, 0x38, 0xfd, 0xad, 0x2, 0x85, 0x57, 0x98, 0xfd, 0xae,
-0x2, 0xa8, 0x8, 0xa5, 0x57, 0x28, 0x60, 0xb9, 0xad, 0x2, 0x48, 0xb9, 0xae, 0x2, 0xa8, 0x68,
-0x60, 0x20, 0x5, 0xc3, 0x10, 0xf, 0x8, 0x18, 0x49, 0xff, 0x69, 0x1, 0x48, 0x98, 0x49, 0xff,
-0x69, 0x0, 0xa8, 0x68, 0x28, 0x60, 0x84, 0x8e, 0x85, 0x8f, 0xbd, 0xad, 0x2, 0xbc, 0xae, 0x2,
-0x8, 0x20, 0x25, 0xc3, 0x9d, 0xad, 0x2, 0x98, 0x9d, 0xae, 0x2, 0xa9, 0x0, 0x8d, 0xef, 0x2,
-0xa0, 0x10, 0x46, 0x8e, 0x66, 0x8f, 0x90, 0xf, 0x18, 0x7d, 0xad, 0x2, 0x48, 0xad, 0xef, 0x2,
-0x7d, 0xae, 0x2, 0x8d, 0xef, 0x2, 0x68, 0x4e, 0xef, 0x2, 0x6a, 0x88, 0xd0, 0xe4, 0x69, 0x0,
-0xac, 0xef, 0x2, 0x90, 0x1, 0xc8, 0x28, 0x4c, 0x25, 0xc3, 0xa0, 0x0, 0x20, 0x82, 0xc3, 0xa0,
-0x2, 0xb9, 0xb1, 0x2, 0x99, 0xad, 0x2, 0xb9, 0xb2, 0x2, 0x99, 0xae, 0x2, 0x60, 0x20, 0x79,
-0x4, 0xf0, 0xc, 0x20, 0x91, 0x94, 0xc9, 0x2c, 0xf0, 0x5, 0x20, 0xe1, 0x9d, 0x38, 0x60, 0xa9,
-0x0, 0xa8, 0x18, 0x60, 0xa2, 0x0, 0x20, 0x79, 0x4, 0xf0, 0xf8, 0x20, 0x91, 0x94, 0xc9, 0x2c,
-0xf0, 0xf1, 0x4c, 0x84, 0x9d, 0x20, 0xbf, 0xc7, 0xa2, 0x1, 0x20, 0x79, 0x4, 0xf0, 0x13, 0xc9,
-0x2c, 0xf0, 0xf, 0x20, 0x84, 0x9d, 0xe0, 0x4, 0xb0, 0xb, 0xe0, 0x2, 0x24, 0x83, 0x30, 0x2,
-0xb0, 0x3, 0x86, 0x84, 0x60, 0x4c, 0x1c, 0x99, 0x20, 0x79, 0x4, 0xf0, 0x7, 0x20, 0x91, 0x94,
-0xc9, 0x2c, 0xd0, 0x12, 0xa0, 0x0, 0xb9, 0xad, 0x2, 0x9d, 0xad, 0x2, 0xe8, 0xc8, 0xc0, 0x4,
-0xd0, 0xf4, 0x60, 0x20, 0x91, 0x94, 0x8e, 0xf0, 0x2, 0x20, 0x8f, 0xc4, 0x20, 0x79, 0x4, 0xc9,
-0x2c, 0xf0, 0x56, 0xc9, 0x3b, 0xf0, 0x3, 0x4c, 0xa1, 0x94, 0x20, 0x73, 0x4, 0x20, 0xe1, 0x9d,
-0x85, 0x80, 0x98, 0xa4, 0x80, 0x20, 0x59, 0xbc, 0xae, 0xf0, 0x2, 0xbd, 0xad, 0x2, 0x9d, 0xaf,
-0x2, 0xbd, 0xae, 0x2, 0x9d, 0xb0, 0x2, 0x20, 0xd3, 0xc2, 0xa9, 0xe, 0x8d, 0xf1, 0x2, 0x18,
-0xae, 0xf0, 0x2, 0x20, 0xb0, 0xbc, 0x9d, 0xad, 0x2, 0x98, 0x9d, 0xae, 0x2, 0xa0, 0x0, 0x4e,
-0xf1, 0x2, 0x90, 0x2, 0xa0, 0x2, 0x20, 0xf4, 0xc2, 0x9d, 0xad, 0x2, 0x98, 0x9d, 0xae, 0x2,
-0xe8, 0xe8, 0x4e, 0xf1, 0x2, 0xd0, 0xdc, 0x18, 0x60, 0x20, 0x73, 0x4, 0xee, 0xf0, 0x2, 0xee,
-0xf0, 0x2, 0x20, 0x8f, 0xc4, 0xae, 0xf0, 0x2, 0xca, 0xca, 0x20, 0xd3, 0xc2, 0xa0, 0x2, 0xae,
-0xf0, 0x2, 0xe8, 0xe8, 0xca, 0xca, 0x4e, 0xf1, 0x2, 0x90, 0xa, 0x20, 0xf6, 0xc2, 0x9d, 0xad,
-0x2, 0x98, 0x9d, 0xae, 0x2, 0xa0, 0x0, 0xec, 0xf0, 0x2, 0xf0, 0xe8, 0x18, 0x60, 0x20, 0x79,
-0x4, 0xc9, 0xaa, 0xf0, 0x5, 0xc9, 0xab, 0xf0, 0x1, 0x18, 0x2e, 0xf1, 0x2, 0x20, 0x14, 0x93,
-0x20, 0xe8, 0x9d, 0xae, 0xf0, 0x2, 0x9d, 0xae, 0x2, 0x98, 0x9d, 0xad, 0x2, 0x60, 0xff, 0xaa,
-0x55, 0x0, 0x0, 0x0, 0x2c, 0x71, 0x57, 0x8d, 0x80, 0x0, 0xa4, 0x8f, 0xc4, 0x19, 0xdd, 0xb2,
-0xf0, 0x90, 0xfc, 0x1c, 0xff, 0xff, 0x4, 0x72, 0x4, 0x50, 0x4, 0xb, 0x3, 0xa8, 0x3, 0x28,
-0x2, 0x90, 0x1, 0xe3, 0x1, 0x28, 0x0, 0x63, 0x20, 0xbf, 0xc7, 0x20, 0x79, 0x4, 0xf0, 0x12,
-0xa2, 0x1, 0xc9, 0xa4, 0x20, 0xbe, 0xc3, 0x20, 0x79, 0x4, 0xc9, 0x2c, 0xf0, 0x5, 0xc9, 0xa4,
-0xf0, 0x1, 0x60, 0x48, 0x20, 0x73, 0x4, 0xa2, 0x4, 0x20, 0xf7, 0xc3, 0x68, 0x10, 0x6, 0x20,
-0xda, 0xc0, 0x4c, 0xe8, 0xc4, 0x20, 0x7b, 0xc3, 0x20, 0xa5, 0xc1, 0x4c, 0xe8, 0xc4, 0x20, 0xbf,
-0xc7, 0xa2, 0x4, 0x20, 0xf7, 0xc3, 0x4c, 0x7b, 0xc3, 0x20, 0x84, 0x9d, 0xe0, 0x5, 0xb0, 0x43,
-0x86, 0x7e, 0x20, 0xd8, 0x9d, 0xca, 0xe0, 0x10, 0xb0, 0x39, 0x86, 0x7f, 0xa2, 0x7, 0x20, 0xa7,
-0xc3, 0xe0, 0x8, 0xb0, 0x2e, 0x8a, 0xa, 0xa, 0xa, 0xa, 0x5, 0x7f, 0xa6, 0x7e, 0xe0, 0x1,
-0xf0, 0x7, 0xb0, 0xc, 0x8d, 0x15, 0xff, 0xd0, 0x19, 0x85, 0x86, 0x8d, 0x3b, 0x5, 0xf0, 0x12,
-0xe0, 0x3, 0xf0, 0x6, 0xb0, 0x9, 0x85, 0x85, 0xd0, 0x8, 0x8d, 0x16, 0xff, 0xf0, 0x3, 0x8d,
-0x19, 0xff, 0x60, 0x4c, 0x1c, 0x99, 0xa5, 0x83, 0xd0, 0x5, 0xa9, 0x93, 0x4c, 0xd2, 0xff, 0x29,
-0x40, 0xf0, 0xb, 0x20, 0x6b, 0xc5, 0xa2, 0x14, 0xa0, 0x0, 0x18, 0x20, 0xf0, 0xff, 0xa9, 0x0,
-0xa0, 0x20, 0xa2, 0x20, 0x20, 0xa7, 0xc5, 0x20, 0x38, 0xc2, 0xa0, 0x1c, 0xa2, 0x4, 0x20, 0xa7,
-0xc5, 0x20, 0x4e, 0xc2, 0xa0, 0x18, 0xa2, 0x4, 0x20, 0xa7, 0xc5, 0xa9, 0x0, 0xa2, 0x3, 0x9d,
-0xad, 0x2, 0xca, 0x10, 0xfa, 0x60, 0x84, 0x8d, 0xa0, 0x0, 0x84, 0x8c, 0x91, 0x8c, 0x88, 0xd0,
-0xfb, 0xe6, 0x8d, 0xca, 0xd0, 0xf6, 0x60, 0x20, 0x84, 0x9d, 0xe0, 0x2, 0xb0, 0xa5, 0x8e, 0xe6,
-0x2, 0x60, 0xc9, 0x9c, 0xd0, 0xa, 0x20, 0x38, 0xc7, 0x20, 0x73, 0x4, 0xa9, 0x0, 0xf0, 0xa,
-0x20, 0x84, 0x9d, 0xe0, 0x5, 0xb0, 0x15, 0xbd, 0x37, 0xc6, 0xc5, 0x83, 0xf0, 0x4b, 0x85, 0x83,
-0xaa, 0xd0, 0xc, 0x20, 0xc9, 0xc7, 0xa9, 0x28, 0xa2, 0x19, 0xd0, 0x39, 0x4c, 0x1c, 0x99, 0x20,
-0x3c, 0xc6, 0xad, 0x6, 0xff, 0x9, 0x20, 0x8d, 0x6, 0xff, 0xad, 0x7, 0xff, 0x29, 0xef, 0x24,
-0x83, 0x10, 0x2, 0x9, 0x10, 0x8d, 0x7, 0xff, 0xad, 0x12, 0xff, 0x29, 0xc3, 0x9, 0x8, 0x8d,
-0x12, 0xff, 0xad, 0x14, 0xff, 0x29, 0x3, 0x9, 0x18, 0x8d, 0x14, 0xff, 0xa9, 0x28, 0xa2, 0x19,
-0x24, 0x83, 0x10, 0x1, 0x4a, 0x85, 0x87, 0x86, 0x88, 0x20, 0xa5, 0xc3, 0x8a, 0x4a, 0xd0, 0xbc,
-0x90, 0x3, 0x4c, 0x67, 0xc5, 0x60, 0x0, 0x20, 0x60, 0xa0, 0xe0, 0xa5, 0x75, 0xf0, 0x1, 0x60,
-0xa5, 0x38, 0xc9, 0x40, 0xb0, 0x34, 0x20, 0x54, 0xa9, 0x20, 0x6b, 0xc8, 0x8a, 0x18, 0x65, 0x31,
-0x98, 0x65, 0x32, 0xc9, 0x18, 0xb0, 0x20, 0xc6, 0x75, 0xa9, 0x0, 0x85, 0x22, 0xa9, 0x18, 0x85,
-0x23, 0x20, 0xf0, 0xc7, 0xa5, 0x22, 0x85, 0x33, 0xa5, 0x23, 0x85, 0x34, 0xa9, 0x0, 0x85, 0x37,
-0xa9, 0x18, 0x85, 0x38, 0x4c, 0x25, 0xc8, 0x4c, 0x81, 0x86, 0x20, 0x54, 0xa9, 0xa4, 0x31, 0x84,
-0x5f, 0xa5, 0x32, 0x18, 0x69, 0x30, 0xb0, 0xef, 0x85, 0x60, 0xc5, 0x34, 0x90, 0x6, 0xd0, 0xe7,
-0xc4, 0x33, 0xb0, 0xe3, 0xc6, 0x75, 0xa9, 0x0, 0x85, 0x4e, 0xa9, 0x30, 0x85, 0x4f, 0x20, 0x77,
-0xc8, 0xa5, 0x5f, 0x85, 0x22, 0xa5, 0x60, 0x85, 0x23, 0xa6, 0x31, 0x86, 0x24, 0xa5, 0x32, 0x85,
-0x25, 0x38, 0xe9, 0x10, 0xa8, 0x20, 0xf8, 0xc7, 0x18, 0xa5, 0x32, 0x69, 0x30, 0x85, 0x32, 0xa5,
-0x30, 0x69, 0x30, 0x85, 0x30, 0xa5, 0x2e, 0x69, 0x30, 0x85, 0x2e, 0xa5, 0x2c, 0x69, 0x30, 0x85,
-0x2c, 0xa5, 0x42, 0x69, 0x30, 0x85, 0x42, 0x20, 0x18, 0x88, 0x20, 0x4b, 0x88, 0x24, 0x81, 0x10,
-0x2d, 0xa2, 0x30, 0x24, 0x75, 0x30, 0x2, 0xa2, 0xd0, 0x8a, 0x18, 0x65, 0x3c, 0x85, 0x3c, 0x8a,
-0x18, 0x6d, 0x5c, 0x2, 0x8d, 0x5c, 0x2, 0x8a, 0x18, 0x6d, 0xf6, 0x4, 0x8d, 0xf6, 0x4, 0x20,
-0x60, 0xa7, 0xa5, 0x3d, 0xc9, 0xb0, 0xd0, 0x7, 0xa5, 0x3e, 0xc9, 0x7, 0xd0, 0x1, 0x60, 0xa0,
-0x0, 0xb1, 0x3d, 0xc9, 0x81, 0xd0, 0xe, 0xa0, 0x2, 0x20, 0xad, 0xc7, 0xa0, 0x10, 0x20, 0xad,
-0xc7, 0xa9, 0x12, 0xd0, 0x7, 0xa0, 0x4, 0x20, 0xad, 0xc7, 0xa9, 0x5, 0x18, 0x65, 0x3d, 0x85,
-0x3d, 0x90, 0xcf, 0xe6, 0x3e, 0xd0, 0xcb, 0xa5, 0x75, 0xd0, 0x1, 0x60, 0xa0, 0x0, 0x84, 0x75,
-0xa5, 0x38, 0x30, 0x24, 0x20, 0x54, 0xa9, 0x20, 0x6b, 0xc8, 0xad, 0x33, 0x5, 0x85, 0x22, 0xad,
-0x34, 0x5, 0x85, 0x23, 0x20, 0xf0, 0xc7, 0xa2, 0x1, 0xbd, 0x33, 0x5, 0x95, 0x37, 0xb5, 0x22,
-0x95, 0x33, 0xca, 0x10, 0xf4, 0x4c, 0x25, 0xc8, 0xa0, 0x0, 0x84, 0x75, 0x84, 0x22, 0x84, 0x24,
-0xa9, 0x10, 0x85, 0x23, 0xa9, 0x40, 0x85, 0x25, 0x20, 0xbb, 0x4, 0x91, 0x22, 0xc8, 0xd0, 0xf8,
-0xe6, 0x23, 0xe6, 0x25, 0xa5, 0x32, 0xc5, 0x25, 0xb0, 0xee, 0xa5, 0x32, 0x38, 0xe9, 0x30, 0x85,
-0x32, 0xa5, 0x2c, 0xe9, 0x30, 0x85, 0x2c, 0xa5, 0x2e, 0xe9, 0x30, 0x85, 0x2e, 0xa5, 0x30, 0xe9,
-0x30, 0x85, 0x30, 0xa5, 0x42, 0xe9, 0x30, 0x85, 0x42, 0x4c, 0xd8, 0xc6, 0xb1, 0x3d, 0x24, 0x75,
-0xd0, 0x6, 0x38, 0xe9, 0x30, 0x91, 0x3d, 0x60, 0x18, 0x69, 0x30, 0x91, 0x3d, 0x60, 0xa5, 0x75,
-0xf0, 0x1, 0x60, 0xa2, 0x23, 0x4c, 0x83, 0x86, 0xad, 0x6, 0xff, 0x29, 0xdf, 0x8d, 0x6, 0xff,
-0xad, 0x7, 0xff, 0x29, 0xef, 0x8d, 0x7, 0xff, 0xad, 0x14, 0xff, 0x29, 0x7, 0x9, 0x8, 0x8d,
-0x14, 0xff, 0xad, 0x12, 0xff, 0x9, 0x4, 0x8d, 0x12, 0xff, 0xa9, 0x0, 0x85, 0x83, 0x60, 0xa5,
-0x37, 0x85, 0x24, 0xa5, 0x38, 0x85, 0x25, 0x8a, 0x49, 0xff, 0x85, 0x4e, 0x98, 0x49, 0xff, 0x85,
-0x4f, 0xa0, 0x0, 0xe6, 0x4e, 0xd0, 0x4, 0xe6, 0x4f, 0xf0, 0x18, 0xa5, 0x22, 0xd0, 0x2, 0xc6,
-0x23, 0xc6, 0x22, 0xa5, 0x24, 0xd0, 0x2, 0xc6, 0x25, 0xc6, 0x24, 0x20, 0xbb, 0x4, 0x91, 0x22,
-0x4c, 0x4, 0xc8, 0x60, 0xa5, 0x37, 0xa4, 0x38, 0x85, 0x22, 0x84, 0x23, 0x38, 0xa5, 0x33, 0xe5,
-0x22, 0xa5, 0x34, 0xe5, 0x23, 0xb0, 0xec, 0x38, 0xa5, 0x22, 0xe9, 0x2, 0x85, 0x22, 0xb0, 0x2,
-0xc6, 0x23, 0xa0, 0x1, 0x20, 0xb0, 0x4, 0x99, 0x24, 0x0, 0x88, 0x10, 0xf7, 0xc8, 0x20, 0xbb,
-0x4, 0x85, 0x80, 0xa5, 0x22, 0x38, 0xe5, 0x80, 0x85, 0x22, 0xb0, 0x2, 0xc6, 0x23, 0xa0, 0x2,
-0xb9, 0x21, 0x0, 0x91, 0x24, 0x88, 0xd0, 0xf8, 0xf0, 0xc2, 0x38, 0xa5, 0x37, 0xe5, 0x33, 0xaa,
-0xa5, 0x38, 0xe5, 0x34, 0xa8, 0x60, 0xa5, 0x37, 0x85, 0x22, 0xa5, 0x38, 0x85, 0x23, 0x38, 0xa5,
-0x33, 0xe5, 0x22, 0xa5, 0x34, 0xe5, 0x23, 0xb0, 0x31, 0x38, 0xa5, 0x22, 0xe9, 0x2, 0x85, 0x22,
-0xb0, 0x2, 0xc6, 0x23, 0x18, 0xa0, 0x0, 0x20, 0xb0, 0x4, 0x99, 0x24, 0x0, 0x79, 0x4e, 0x0,
-0x91, 0x22, 0xc8, 0xc0, 0x1, 0xd0, 0xf0, 0x88, 0x20, 0xbb, 0x4, 0x85, 0x80, 0xa5, 0x22, 0x38,
-0xe5, 0x80, 0x85, 0x22, 0xb0, 0xc8, 0xc6, 0x23, 0x90, 0xc4, 0x60, 0x20, 0x1f, 0xcb, 0x29, 0xe6,
-0xd0, 0x7b, 0xa0, 0x0, 0x20, 0x3f, 0xca, 0xa9, 0x0, 0xae, 0x77, 0x2, 0xa0, 0x60, 0x20, 0xba,
-0xff, 0x38, 0x20, 0xc0, 0xff, 0x90, 0x9, 0x48, 0x20, 0x35, 0xc9, 0x68, 0xaa, 0x4c, 0x83, 0x86,
-0xa2, 0x0, 0x20, 0xc6, 0xff, 0xa0, 0x3, 0x8c, 0xec, 0x2, 0x20, 0xcf, 0xff, 0x8d, 0xed, 0x2,
-0x20, 0xb7, 0xff, 0xd0, 0x3f, 0x20, 0xcf, 0xff, 0x8d, 0xee, 0x2, 0x20, 0xb7, 0xff, 0xd0, 0x34,
-0xce, 0xec, 0x2, 0xd0, 0xe5, 0xae, 0xed, 0x2, 0xad, 0xee, 0x2, 0x20, 0x5f, 0xa4, 0xa9, 0x20,
-0x20, 0xd2, 0xff, 0x20, 0xcf, 0xff, 0x48, 0x20, 0xb7, 0xff, 0xd0, 0x17, 0x68, 0xf0, 0x6, 0x20,
-0xd2, 0xff, 0x4c, 0x14, 0xc9, 0xa9, 0xd, 0x20, 0xd2, 0xff, 0x20, 0xe1, 0xff, 0xf0, 0x5, 0xa0,
-0x2, 0xd0, 0xb4, 0x68, 0x20, 0xcc, 0xff, 0xa9, 0x0, 0x18, 0x4c, 0xc3, 0xff, 0x4c, 0xa1, 0x94,
-0xa9, 0x66, 0x20, 0x21, 0xcb, 0x20, 0xb5, 0xcc, 0xa0, 0x4, 0x20, 0x3f, 0xca, 0x4c, 0xe1, 0xa7,
-0xa9, 0xe6, 0x20, 0x21, 0xcb, 0x20, 0xb5, 0xcc, 0xa9, 0x0, 0x8d, 0x78, 0x2, 0x85, 0xa, 0xa0,
-0x5, 0x20, 0x3f, 0xca, 0x4c, 0xfa, 0xa7, 0x20, 0x1f, 0xcb, 0x20, 0xaf, 0xcc, 0x29, 0x11, 0xc9,
-0x11, 0xf0, 0x3, 0x4c, 0xa1, 0x94, 0x20, 0xe7, 0xff, 0x20, 0x2b, 0xcd, 0xd0, 0x17, 0xa0, 0x9,
-0x20, 0x3f, 0xca, 0x20, 0xcf, 0xcc, 0x24, 0x81, 0x30, 0xb, 0xa0, 0x0, 0xa9, 0x7a, 0x20, 0x94,
-0x4, 0xc9, 0x32, 0xb0, 0x1, 0x60, 0xa2, 0x24, 0x4c, 0x83, 0x86, 0x20, 0x1f, 0xcb, 0x20, 0xaf,
-0xcc, 0x20, 0x2b, 0xcd, 0xd0, 0xef, 0xa0, 0xf, 0x20, 0x3f, 0xca, 0x20, 0xcf, 0xcc, 0x24, 0x81,
-0x30, 0xe3, 0xa9, 0xd, 0x20, 0xd2, 0xff, 0xa0, 0x0, 0xa9, 0x7a, 0x20, 0x94, 0x4, 0xf0, 0x6,
-0x20, 0xd2, 0xff, 0xc8, 0xd0, 0xf3, 0xa9, 0xd, 0x4c, 0xd2, 0xff, 0x20, 0x1f, 0xcb, 0x29, 0xe7,
-0xd0, 0xa1, 0x20, 0xe7, 0xff, 0xa0, 0x14, 0xd0, 0x65, 0x20, 0x1f, 0xcb, 0x29, 0x30, 0xc9, 0x30,
-0xd0, 0x6, 0xa5, 0x82, 0x29, 0xc7, 0xf0, 0x7, 0xa5, 0x82, 0x20, 0xc0, 0xcc, 0xa5, 0x82, 0xa0,
-0x17, 0xd0, 0x4b, 0xa9, 0xe4, 0x20, 0x21, 0xcb, 0x20, 0xc6, 0xcc, 0xa0, 0x1e, 0xd0, 0x3f, 0xa9,
-0xc7, 0x20, 0x21, 0xcb, 0x29, 0x30, 0xc9, 0x30, 0xf0, 0x3, 0x4c, 0xa1, 0x94, 0x20, 0xe7, 0xff,
-0xa0, 0x25, 0x4c, 0x3f, 0xca, 0x48, 0xad, 0x5d, 0x2, 0xa2, 0x7c, 0xa0, 0x2, 0x20, 0xbd, 0xff,
-0xad, 0x76, 0x2, 0xae, 0x77, 0x2, 0xac, 0x78, 0x2, 0x20, 0xba, 0xff, 0x68, 0xf0, 0xe, 0xae,
-0x5d, 0x2, 0x38, 0x20, 0xc0, 0xff, 0xad, 0x76, 0x2, 0x38, 0x4c, 0xc3, 0xff, 0x60, 0x20, 0x57,
-0xcd, 0xa2, 0x0, 0x8e, 0x5d, 0x2, 0xb9, 0xf5, 0xca, 0xf0, 0xca, 0xc9, 0x80, 0xf0, 0xc6, 0xaa,
-0xca, 0xf0, 0x1e, 0xca, 0xf0, 0x21, 0xca, 0xf0, 0x24, 0xca, 0xf0, 0x28, 0xca, 0xf0, 0x2d, 0xca,
-0xf0, 0x34, 0xca, 0xf0, 0x3f, 0xca, 0xf0, 0x46, 0xca, 0xf0, 0x66, 0x20, 0xeb, 0xca, 0xc8, 0xd0,
-0xd5, 0xa5, 0x82, 0x29, 0x10, 0xf0, 0xf7, 0xad, 0x6f, 0x2, 0x4c, 0x81, 0xca, 0xad, 0x73, 0x2,
-0x9, 0x30, 0xd0, 0xe7, 0xa9, 0x40, 0x24, 0x82, 0x30, 0xe1, 0x10, 0xe2, 0xad, 0x6e, 0x2, 0xf0,
-0xdd, 0xa9, 0x3a, 0x20, 0xeb, 0xca, 0x98, 0x48, 0xad, 0x70, 0x2, 0xac, 0x71, 0x2, 0xae, 0x6e,
-0x2, 0x4c, 0xba, 0xca, 0xad, 0x72, 0x2, 0xf0, 0xc5, 0xa9, 0x3a, 0x20, 0xeb, 0xca, 0x98, 0x48,
-0xad, 0x74, 0x2, 0xac, 0x75, 0x2, 0xae, 0x72, 0x2, 0x85, 0x22, 0x84, 0x23, 0x86, 0x80, 0xa0,
-0x0, 0x20, 0xb0, 0x4, 0x20, 0xeb, 0xca, 0xc8, 0xc4, 0x80, 0xd0, 0xf5, 0x68, 0xa8, 0x4c, 0x6f,
-0xca, 0xad, 0x79, 0x2, 0xf0, 0x98, 0xa9, 0x2c, 0x20, 0xeb, 0xca, 0xad, 0x79, 0x2, 0x20, 0xeb,
-0xca, 0xad, 0x7a, 0x2, 0x20, 0xeb, 0xca, 0x4c, 0x6f, 0xca, 0xae, 0x5d, 0x2, 0x9d, 0x7c, 0x2,
-0xee, 0x5d, 0x2, 0x60, 0x24, 0x7, 0x5, 0x0, 0x4, 0x2, 0x3a, 0x6, 0x0, 0x4e, 0x2, 0x3a,
-0x6, 0x9, 0x80, 0x53, 0x2, 0x3a, 0x6, 0x80, 0x56, 0x2, 0x80, 0x43, 0x3, 0x7, 0x3d, 0x2,
-0x5, 0x80, 0x52, 0x2, 0x3a, 0x8, 0x3d, 0x6, 0x80, 0x44, 0x3, 0x3d, 0x2, 0x80, 0xa9, 0x0,
-0x48, 0xa9, 0x0, 0x85, 0x82, 0xa2, 0x1e, 0x9d, 0x5e, 0x2, 0xca, 0xd0, 0xfa, 0xa2, 0x8, 0x8e,
-0x77, 0x2, 0xa2, 0x6f, 0x8e, 0x78, 0x2, 0xa2, 0x0, 0x8e, 0x76, 0x2, 0x20, 0x79, 0x4, 0xd0,
-0x7, 0x68, 0x20, 0xaa, 0xcc, 0xa5, 0x82, 0x60, 0xc9, 0x44, 0xf0, 0x1d, 0xc9, 0x91, 0xf0, 0x4e,
-0xc9, 0x55, 0xf0, 0xf, 0xc9, 0x49, 0xf0, 0x2a, 0xc9, 0x22, 0xf0, 0x48, 0xc9, 0x28, 0xf0, 0x44,
-0x4c, 0xa1, 0x94, 0x20, 0x58, 0xcc, 0x4c, 0xcd, 0xcb, 0xa9, 0x10, 0x20, 0xaa, 0xcc, 0x20, 0x97,
-0xcc, 0xe0, 0x2, 0xb0, 0xa, 0x8e, 0x6f, 0x2, 0x8e, 0x73, 0x2, 0xa9, 0x10, 0xd0, 0x4d, 0x4c,
-0x49, 0xcc, 0xad, 0x7b, 0x2, 0xd0, 0xd9, 0x20, 0x73, 0x4, 0x8d, 0x79, 0x2, 0x20, 0x73, 0x4,
-0x8d, 0x7a, 0x2, 0xa9, 0xff, 0x8d, 0x7b, 0x2, 0x20, 0x73, 0x4, 0x4c, 0xd1, 0xcb, 0x20, 0x51,
-0xcc, 0x4c, 0xcd, 0xcb, 0xa9, 0x1, 0x20, 0x69, 0xcc, 0x8d, 0x6e, 0x2, 0x8d, 0x5d, 0x2, 0xa9,
-0x5e, 0x8d, 0x70, 0x2, 0x85, 0x24, 0xa9, 0x2, 0x8d, 0x71, 0x2, 0x85, 0x25, 0xa0, 0x0, 0x20,
-0xb0, 0x4, 0x91, 0x24, 0xc8, 0xcc, 0x5d, 0x2, 0x90, 0xf5, 0xa9, 0x1, 0x5, 0x82, 0x85, 0x82,
-0x20, 0x79, 0x4, 0xd0, 0x3, 0x4c, 0x42, 0xcb, 0xc9, 0x2c, 0xd0, 0x6, 0x20, 0x73, 0x4, 0x4c,
-0x49, 0xcb, 0xc9, 0x91, 0xf0, 0xb8, 0xc9, 0xa4, 0xd0, 0x5b, 0x20, 0x73, 0x4, 0xc9, 0x44, 0xf0,
-0x10, 0xc9, 0x91, 0xf0, 0x1f, 0xc9, 0x55, 0xf0, 0x21, 0xc9, 0x22, 0xf0, 0x23, 0xc9, 0x28, 0xf0,
-0x1f, 0xa9, 0x20, 0x20, 0xaa, 0xcc, 0x20, 0x97, 0xcc, 0xe0, 0x2, 0xb0, 0x3b, 0x8e, 0x73, 0x2,
-0xa9, 0x20, 0xd0, 0x1c, 0x20, 0x51, 0xcc, 0x4c, 0x31, 0xcc, 0x20, 0x58, 0xcc, 0x4c, 0x31, 0xcc,
-0xa9, 0x2, 0x20, 0x69, 0xcc, 0x8d, 0x72, 0x2, 0x8e, 0x74, 0x2, 0x8c, 0x75, 0x2, 0xa9, 0x2,
-0x5, 0x82, 0x85, 0x82, 0x20, 0x79, 0x4, 0xf0, 0x9c, 0xc9, 0x2c, 0xf0, 0xad, 0xc9, 0x91, 0xf0,
-0xd3, 0xc9, 0x55, 0xf0, 0xd5, 0xa2, 0xb, 0x2c, 0xa2, 0xe, 0x2c, 0xa2, 0x17, 0x4c, 0x83, 0x86,
-0x20, 0x73, 0x4, 0xc9, 0x55, 0xd0, 0xee, 0x20, 0x97, 0xcc, 0xe0, 0x20, 0xb0, 0xea, 0xe0, 0x3,
-0x90, 0xe6, 0x8e, 0x77, 0x2, 0xa9, 0x8, 0x60, 0x20, 0xaa, 0xcc, 0x20, 0x48, 0x9c, 0xaa, 0xf0,
-0xd7, 0xa0, 0x0, 0x20, 0xb0, 0x4, 0xc9, 0x40, 0xd0, 0x12, 0xa9, 0x80, 0x20, 0xaa, 0xcc, 0xa5,
-0x82, 0x9, 0x80, 0x85, 0x82, 0xca, 0xe6, 0x22, 0xd0, 0x2, 0xe6, 0x23, 0x8a, 0xc9, 0x11, 0xb0,
-0xba, 0xa6, 0x22, 0xa4, 0x23, 0x60, 0x20, 0x73, 0x4, 0xf0, 0xaa, 0x90, 0x9, 0x20, 0x8e, 0x94,
-0x20, 0x84, 0x9d, 0x4c, 0x8b, 0x94, 0x4c, 0x84, 0x9d, 0x25, 0x82, 0xd0, 0x98, 0x60, 0x29, 0xe6,
-0xf0, 0x2, 0xd0, 0x91, 0xa5, 0x82, 0x29, 0x1, 0xc9, 0x1, 0xd0, 0xf6, 0xa5, 0x82, 0x60, 0x29,
-0xc4, 0xd0, 0xef, 0xa5, 0x82, 0x29, 0x3, 0xc9, 0x3, 0xd0, 0xe7, 0xa5, 0x82, 0x60, 0xa5, 0x79,
-0xd0, 0x11, 0xa9, 0x28, 0x85, 0x79, 0x20, 0x6, 0xa9, 0x86, 0x7a, 0x84, 0x7b, 0xa0, 0x28, 0x20,
-0xba, 0xcd, 0xea, 0xae, 0x77, 0x2, 0xd0, 0x5, 0xa2, 0x8, 0x8e, 0x77, 0x2, 0xa9, 0x0, 0xa0,
-0x6f, 0x20, 0xba, 0xff, 0xa9, 0x0, 0x20, 0xbd, 0xff, 0x20, 0xc0, 0xff, 0xa2, 0x0, 0x20, 0xc6,
-0xff, 0xb0, 0x1b, 0xa0, 0xff, 0xc8, 0x20, 0xcf, 0xff, 0xc9, 0xd, 0xf0, 0x4, 0x91, 0x7a, 0xd0,
-0xf4, 0xa9, 0x0, 0x91, 0x7a, 0x20, 0xcc, 0xff, 0xa9, 0x0, 0x38, 0x4c, 0xc3, 0xff, 0x48, 0x20,
-0x12, 0xcd, 0x20, 0x57, 0xcd, 0x68, 0xaa, 0x4c, 0x83, 0x86, 0x24, 0x81, 0x30, 0x25, 0x20, 0x4f,
-0xff, 0x41, 0x52, 0x45, 0x20, 0x59, 0x4f, 0x55, 0x20, 0x53, 0x55, 0x52, 0x45, 0x3f, 0x0, 0x20,
-0xcc, 0xff, 0x20, 0xcf, 0xff, 0x48, 0xc9, 0xd, 0xf0, 0x5, 0x20, 0xcf, 0xff, 0xd0, 0xf7, 0x68,
-0xc9, 0x59, 0x60, 0xa9, 0x0, 0x60, 0x98, 0x48, 0xa5, 0x79, 0xf0, 0xa, 0xa0, 0x28, 0x98, 0x91,
-0x7a, 0xc8, 0xa9, 0xff, 0x91, 0x7a, 0xa9, 0x0, 0x85, 0x79, 0x68, 0xa8, 0x60, 0x2c, 0x30, 0x20,
-0x59, 0x45, 0x4b, 0xaa, 0x98, 0x48, 0xa9, 0x0, 0x20, 0x5f, 0xa4, 0x68, 0xa8, 0x60, 0x85, 0x3a,
-0x88, 0xaa, 0xe8, 0xd0, 0x2, 0x86, 0x81, 0x60, 0xd8, 0x1b, 0x14, 0xc, 0x7, 0x7b, 0x1, 0xd7,
-0xd8, 0x11, 0x7, 0x10, 0x1d, 0x7b, 0x17, 0xd8, 0x7, 0x10, 0x5, 0x1a, 0x1a, 0x16, 0x7b, 0x1f,
-0xd8, 0x1b, 0x10, 0x2, 0x1a, 0x17, 0x7b, 0x13, 0x47, 0xd8, 0xa0, 0x21, 0xb9, 0x89, 0xcd, 0x49,
-0x55, 0x20, 0xd2, 0xff, 0x88, 0x10, 0xf5, 0x60, 0x0, 0xa9, 0x79, 0x91, 0x7a, 0xa9, 0x0, 0xc8,
-0x91, 0x7a, 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xba,
-0xbd, 0x4, 0x1, 0x29, 0x10, 0xd0, 0x3, 0x6c, 0x14, 0x3, 0x6c, 0x16, 0x3, 0xad, 0x9, 0xff,
-0x29, 0x2, 0xf0, 0x3, 0x20, 0x60, 0xce, 0x2c, 0xd8, 0x7, 0x10, 0xe, 0xad, 0x1, 0xfd, 0x8d,
-0xd4, 0x7, 0x10, 0x6, 0x20, 0x95, 0xea, 0x20, 0x5b, 0xea, 0x20, 0xe4, 0xe3, 0xad, 0x9, 0xff,
-0x29, 0x2, 0xf0, 0x28, 0x8d, 0x9, 0xff, 0x2c, 0xb, 0xff, 0xa9, 0xcc, 0x50, 0x1b, 0x6c, 0x12,
-0x3, 0x20, 0xbf, 0xcf, 0x20, 0xcd, 0xce, 0xa5, 0xfb, 0x48, 0xa9, 0x0, 0x85, 0xfb, 0x8, 0x58,
-0x20, 0x11, 0xdb, 0x28, 0x68, 0x85, 0xfb, 0xa9, 0xa1, 0x8d, 0xb, 0xff, 0x4c, 0xbe, 0xfc, 0xad,
-0x1c, 0xff, 0x29, 0x1, 0xd0, 0x39, 0xad, 0x1d, 0xff, 0xc9, 0xa3, 0xb0, 0x2e, 0x24, 0x83, 0x50,
-0x52, 0xa9, 0x8, 0x8d, 0x14, 0xff, 0xad, 0x6, 0xff, 0x29, 0xdf, 0xa8, 0xad, 0x7, 0xff, 0x29,
-0xef, 0xaa, 0xad, 0x12, 0xff, 0xd, 0xfa, 0x7, 0x48, 0xad, 0x1d, 0xff, 0xc9, 0xa3, 0x90, 0xf9,
-0x68, 0x8d, 0x12, 0xff, 0x8c, 0x6, 0xff, 0x8e, 0x7, 0xff, 0x60, 0xc9, 0xcc, 0x90, 0x24, 0xa6,
-0x83, 0xf0, 0x20, 0x10, 0x8, 0xad, 0x7, 0xff, 0x9, 0x10, 0x8d, 0x7, 0xff, 0xad, 0x6, 0xff,
-0x9, 0x20, 0x8d, 0x6, 0xff, 0xad, 0x12, 0xff, 0x29, 0xfb, 0x8d, 0x12, 0xff, 0xad, 0xfb, 0x7,
-0x8d, 0x14, 0xff, 0x60, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xa2, 0x1, 0xbd, 0xfc,
-0x4, 0x1d, 0xfe, 0x4, 0xf0, 0x13, 0xfe, 0xfc, 0x4, 0xd0, 0xe, 0xfe, 0xfe, 0x4, 0xd0, 0x9,
-0xbd, 0xee, 0xce, 0x2d, 0x11, 0xff, 0x8d, 0x11, 0xff, 0xca, 0x10, 0xe2, 0x60, 0xef, 0x9f, 0xe6,
-0xa5, 0xd0, 0x6, 0xe6, 0xa4, 0xd0, 0x2, 0xe6, 0xa3, 0x38, 0xa5, 0xa5, 0xe9, 0x1, 0xa5, 0xa4,
-0xe9, 0x1a, 0xa5, 0xa3, 0xe9, 0x4f, 0x90, 0x8, 0xa2, 0x0, 0x86, 0xa3, 0x86, 0xa4, 0x86, 0xa5,
-0xa9, 0x7f, 0x20, 0x70, 0xdb, 0x85, 0xee, 0xa9, 0x7f, 0x20, 0x70, 0xdb, 0xc5, 0xee, 0xd0, 0xf0,
-0x9, 0x7f, 0x85, 0x91, 0x60, 0x78, 0xa5, 0xa5, 0xa6, 0xa4, 0xa4, 0xa3, 0x78, 0x85, 0xa5, 0x86,
-0xa4, 0x84, 0xa3, 0x58, 0x60, 0xd, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x8d, 0xd, 0x42,
-0x52, 0x45, 0x41, 0xcb, 0xd, 0x20, 0x20, 0x20, 0x50, 0x43, 0x20, 0x20, 0x53, 0x52, 0x20, 0x41,
-0x43, 0x20, 0x58, 0x52, 0x20, 0x59, 0x52, 0x20, 0x53, 0x50, 0xd, 0x3b, 0xa0, 0x41, 0xa0, 0x20,
-0x45, 0x52, 0x52, 0x4f, 0xd2, 0xbd, 0x36, 0xcf, 0x8, 0x29, 0x7f, 0x20, 0xd2, 0xff, 0xe8, 0x28,
-0x10, 0xf3, 0x60, 0xa9, 0xd, 0xa6, 0x98, 0xe0, 0x3, 0xf0, 0x6, 0xa6, 0x99, 0xe0, 0x3, 0xf0,
-0x3, 0x20, 0x49, 0xdc, 0xa9, 0xd, 0x4c, 0xb0, 0xd9, 0xbd, 0x13, 0x1, 0x2c, 0xf9, 0x7, 0x10,
-0x3, 0xbd, 0x43, 0xe1, 0x60, 0x2c, 0xf8, 0x7, 0x30, 0x3, 0xb1, 0xa1, 0x60, 0xa9, 0xa1, 0x8d,
-0xdf, 0x7, 0x4c, 0xd9, 0x7, 0xa9, 0x9, 0x8d, 0x20, 0xfd, 0x9, 0x80, 0x8d, 0x20, 0xfd, 0x4c,
-0x1e, 0xfc, 0x8, 0x78, 0x8d, 0x3f, 0xff, 0xb1, 0x0, 0x8d, 0x3e, 0xff, 0x28, 0x60, 0xad, 0x10,
-0xfd, 0x29, 0x4, 0xd0, 0x1b, 0x2c, 0xfc, 0x7, 0x30, 0x6, 0xa5, 0x1, 0x29, 0xf7, 0x85, 0x1,
-0xce, 0xfd, 0x7, 0x10, 0x8, 0xa9, 0x4, 0x8d, 0xfd, 0x7, 0x20, 0xf0, 0xce, 0x4c, 0xf0, 0xce,
-0x8d, 0xfc, 0x7, 0x20, 0xb0, 0xe3, 0x4c, 0xd1, 0xcf, 0xe8, 0x8e, 0xc4, 0xfe, 0x8e, 0xc0, 0xfe,
-0xa9, 0x80, 0x8d, 0x11, 0xff, 0x60, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c,
-0x66, 0x6e, 0x6e, 0x60, 0x62, 0x3c, 0x0, 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x0, 0x7c,
-0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x0, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x0, 0x78,
-0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x0, 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x0, 0x7e,
-0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x0, 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x0, 0x66,
-0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x0, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x0, 0x1e,
-0xc, 0xc, 0xc, 0xc, 0x6c, 0x38, 0x0, 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x0, 0x60,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x0, 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x0, 0x66,
-0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x0, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0, 0x7c,
-0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x0, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0xe, 0x0, 0x7c,
-0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x0, 0x3c, 0x66, 0x60, 0x3c, 0x6, 0x66, 0x3c, 0x0, 0x7e,
-0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0, 0x66,
-0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x0, 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x0, 0x66,
-0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x0, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x0, 0x7e,
-0x6, 0xc, 0x18, 0x30, 0x60, 0x7e, 0x0, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x0, 0xc,
-0x12, 0x30, 0x7c, 0x30, 0x62, 0xfc, 0x0, 0x3c, 0xc, 0xc, 0xc, 0xc, 0xc, 0x3c, 0x0, 0x0,
-0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x0, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x18, 0x18, 0x0, 0x0, 0x18, 0x0, 0x66,
-0x66, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x0, 0x18,
-0x3e, 0x60, 0x3c, 0x6, 0x7c, 0x18, 0x0, 0x62, 0x66, 0xc, 0x18, 0x30, 0x66, 0x46, 0x0, 0x3c,
-0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x0, 0x6, 0xc, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
-0x18, 0x30, 0x30, 0x30, 0x18, 0xc, 0x0, 0x30, 0x18, 0xc, 0xc, 0xc, 0x18, 0x30, 0x0, 0x0,
-0x66, 0x3c, 0xff, 0x3c, 0x66, 0x0, 0x0, 0x0, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x30, 0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x0, 0x0, 0x3, 0x6, 0xc, 0x18, 0x30, 0x60, 0x0, 0x3c,
-0x66, 0x6e, 0x76, 0x66, 0x66, 0x3c, 0x0, 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x0, 0x3c,
-0x66, 0x6, 0xc, 0x30, 0x60, 0x7e, 0x0, 0x3c, 0x66, 0x6, 0x1c, 0x6, 0x66, 0x3c, 0x0, 0x6,
-0xe, 0x1e, 0x66, 0x7f, 0x6, 0x6, 0x0, 0x7e, 0x60, 0x7c, 0x6, 0x6, 0x66, 0x3c, 0x0, 0x3c,
-0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x0, 0x7e, 0x66, 0xc, 0x18, 0x18, 0x18, 0x18, 0x0, 0x3c,
-0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x0, 0x3c, 0x66, 0x66, 0x3e, 0x6, 0x66, 0x3c, 0x0, 0x0,
-0x0, 0x18, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x18, 0x18, 0x30, 0xe,
-0x18, 0x30, 0x60, 0x30, 0x18, 0xe, 0x0, 0x0, 0x0, 0x7e, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x70,
-0x18, 0xc, 0x6, 0xc, 0x18, 0x70, 0x0, 0x3c, 0x66, 0x6, 0xc, 0x18, 0x0, 0x18, 0x0, 0x0,
-0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x8, 0x1c, 0x3e, 0x7f, 0x7f, 0x1c, 0x3e, 0x0, 0x18,
-0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
-0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xc,
-0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0x0, 0x0, 0x0, 0xe0, 0xf0, 0x38, 0x18, 0x18, 0x18,
-0x18, 0x1c, 0xf, 0x7, 0x0, 0x0, 0x0, 0x18, 0x18, 0x38, 0xf0, 0xe0, 0x0, 0x0, 0x0, 0xc0,
-0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x3, 0x3,
-0x7, 0xe, 0x1c, 0x38, 0x70, 0xe0, 0xc0, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff,
-0xff, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x0, 0x3c, 0x7e, 0x7e, 0x7e, 0x7e, 0x3c, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x36, 0x7f, 0x7f, 0x7f, 0x3e, 0x1c, 0x8, 0x0, 0x60,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x0, 0x0, 0x0, 0x7, 0xf, 0x1c, 0x18, 0x18, 0xc3,
-0xe7, 0x7e, 0x3c, 0x3c, 0x7e, 0xe7, 0xc3, 0x0, 0x3c, 0x7e, 0x66, 0x66, 0x7e, 0x3c, 0x0, 0x18,
-0x18, 0x66, 0x66, 0x18, 0x18, 0x3c, 0x0, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x6, 0x8,
-0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x8, 0x0, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0xc0,
-0xc0, 0x30, 0x30, 0xc0, 0xc0, 0x30, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0,
-0x0, 0x3, 0x3e, 0x76, 0x36, 0x36, 0x0, 0xff, 0x7f, 0x3f, 0x1f, 0xf, 0x7, 0x3, 0x1, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x0,
-0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc,
-0xcc, 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x0,
-0x0, 0x0, 0x0, 0xcc, 0xcc, 0x33, 0x33, 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x3,
-0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x0,
-0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
-0x0, 0x0, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0xc0,
-0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x7,
-0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
-0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x3,
-0x3, 0x3, 0x3, 0x3, 0x3, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf,
-0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x0, 0x0, 0x0, 0xf0,
-0xf0, 0xf0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf, 0xf, 0xf, 0xf, 0x3c,
-0x66, 0x6e, 0x6e, 0x60, 0x62, 0x3c, 0x0, 0x0, 0x0, 0x3c, 0x6, 0x3e, 0x66, 0x3e, 0x0, 0x60,
-0x60, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x0, 0x0, 0x0, 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x0, 0x6,
-0x6, 0x3e, 0x66, 0x66, 0x66, 0x3e, 0x0, 0x0, 0x0, 0x3c, 0x66, 0x7e, 0x60, 0x3e, 0x0, 0x1c,
-0x36, 0x30, 0x78, 0x30, 0x30, 0x30, 0x0, 0x0, 0x0, 0x3e, 0x66, 0x66, 0x3e, 0x6, 0x7c, 0x60,
-0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x0, 0x18, 0x0, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0, 0x6,
-0x0, 0x6, 0x6, 0x6, 0x6, 0x66, 0x3c, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x7c, 0x66, 0x0, 0x38,
-0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x0, 0x0, 0x0, 0x6b, 0x7f, 0x7f, 0x63, 0x63, 0x0, 0x0,
-0x0, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x0, 0x0, 0x0, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x0, 0x0,
-0x0, 0x7c, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x0, 0x0, 0x3e, 0x66, 0x66, 0x3e, 0x6, 0x6, 0x0,
-0x0, 0x7c, 0x66, 0x60, 0x60, 0x60, 0x0, 0x0, 0x0, 0x3c, 0x60, 0x3c, 0x6, 0x7c, 0x0, 0x30,
-0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x0, 0x0, 0x0, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0, 0x0,
-0x0, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x0, 0x0, 0x0, 0x63, 0x6b, 0x7f, 0x36, 0x22, 0x0, 0x0,
-0x0, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x0, 0x0, 0x0, 0x66, 0x66, 0x66, 0x3e, 0x6, 0x7c, 0x0,
-0x0, 0x7e, 0xc, 0x18, 0x30, 0x7e, 0x0, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x0, 0xc,
-0x12, 0x30, 0x7c, 0x30, 0x62, 0xfc, 0x0, 0x3c, 0xc, 0xc, 0xc, 0xc, 0xc, 0x3c, 0x0, 0x0,
-0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x0, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x18, 0x18, 0x0, 0x0, 0x18, 0x0, 0x66,
-0x66, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x66, 0x66, 0xff, 0x66, 0xff, 0x66, 0x66, 0x0, 0x18,
-0x3e, 0x60, 0x3c, 0x6, 0x7c, 0x18, 0x0, 0x62, 0x66, 0xc, 0x18, 0x30, 0x66, 0x46, 0x0, 0x3c,
-0x66, 0x3c, 0x38, 0x67, 0x66, 0x3f, 0x0, 0x6, 0xc, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc,
-0x18, 0x30, 0x30, 0x30, 0x18, 0xc, 0x0, 0x30, 0x18, 0xc, 0xc, 0xc, 0x18, 0x30, 0x0, 0x0,
-0x66, 0x3c, 0xff, 0x3c, 0x66, 0x0, 0x0, 0x0, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x30, 0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x0, 0x0, 0x3, 0x6, 0xc, 0x18, 0x30, 0x60, 0x0, 0x3c,
-0x66, 0x6e, 0x76, 0x66, 0x66, 0x3c, 0x0, 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7e, 0x0, 0x3c,
-0x66, 0x6, 0xc, 0x30, 0x60, 0x7e, 0x0, 0x3c, 0x66, 0x6, 0x1c, 0x6, 0x66, 0x3c, 0x0, 0x6,
-0xe, 0x1e, 0x66, 0x7f, 0x6, 0x6, 0x0, 0x7e, 0x60, 0x7c, 0x6, 0x6, 0x66, 0x3c, 0x0, 0x3c,
-0x66, 0x60, 0x7c, 0x66, 0x66, 0x3c, 0x0, 0x7e, 0x66, 0xc, 0x18, 0x18, 0x18, 0x18, 0x0, 0x3c,
-0x66, 0x66, 0x3c, 0x66, 0x66, 0x3c, 0x0, 0x3c, 0x66, 0x66, 0x3e, 0x6, 0x66, 0x3c, 0x0, 0x0,
-0x0, 0x18, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x18, 0x18, 0x30, 0xe,
-0x18, 0x30, 0x60, 0x30, 0x18, 0xe, 0x0, 0x0, 0x0, 0x7e, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x70,
-0x18, 0xc, 0x6, 0xc, 0x18, 0x70, 0x0, 0x3c, 0x66, 0x6, 0xc, 0x18, 0x0, 0x18, 0x0, 0x0,
-0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x18, 0x3c, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x0, 0x7c,
-0x66, 0x66, 0x7c, 0x66, 0x66, 0x7c, 0x0, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x0, 0x78,
-0x6c, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x0, 0x7e, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7e, 0x0, 0x7e,
-0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x0, 0x3c, 0x66, 0x60, 0x6e, 0x66, 0x66, 0x3c, 0x0, 0x66,
-0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x0, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x0, 0x1e,
-0xc, 0xc, 0xc, 0xc, 0x6c, 0x38, 0x0, 0x66, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x0, 0x60,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x0, 0x63, 0x77, 0x7f, 0x6b, 0x63, 0x63, 0x63, 0x0, 0x66,
-0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x0, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0, 0x7c,
-0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x0, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0xe, 0x0, 0x7c,
-0x66, 0x66, 0x7c, 0x78, 0x6c, 0x66, 0x0, 0x3c, 0x66, 0x60, 0x3c, 0x6, 0x66, 0x3c, 0x0, 0x7e,
-0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x0, 0x66,
-0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x0, 0x63, 0x63, 0x63, 0x6b, 0x7f, 0x77, 0x63, 0x0, 0x66,
-0x66, 0x3c, 0x18, 0x3c, 0x66, 0x66, 0x0, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x0, 0x7e,
-0x6, 0xc, 0x18, 0x30, 0x60, 0x7e, 0x0, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0xc0,
-0xc0, 0x30, 0x30, 0xc0, 0xc0, 0x30, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x33,
-0x33, 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x99, 0xcc, 0x66, 0x33, 0x99, 0xcc, 0x66, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x0,
-0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc,
-0xcc, 0x33, 0x33, 0xcc, 0xcc, 0x33, 0x33, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x0,
-0x0, 0x0, 0x0, 0xcc, 0xcc, 0x33, 0x33, 0xcc, 0x99, 0x33, 0x66, 0xcc, 0x99, 0x33, 0x66, 0x3,
-0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x0,
-0x0, 0x0, 0x0, 0xf, 0xf, 0xf, 0xf, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0,
-0x0, 0x0, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0xc0,
-0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x7,
-0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
-0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0x1,
-0x3, 0x6, 0x6c, 0x78, 0x70, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf,
-0xf, 0xf, 0xf, 0x0, 0x0, 0x0, 0x0, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x0, 0x0, 0x0, 0xf0,
-0xf0, 0xf0, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf, 0xf, 0xf, 0xf, 0x8,
-0x9, 0x0, 0x28, 0x50, 0x78, 0xa0, 0xc8, 0xf0, 0x18, 0x40, 0x68, 0x90, 0xb8, 0xe0, 0x8, 0x30,
-0x58, 0x80, 0xa8, 0xd0, 0xf8, 0x20, 0x48, 0x70, 0x98, 0xc0, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc,
-0xc, 0xd, 0xd, 0xd, 0xd, 0xd, 0xd, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xe, 0xf, 0xf,
-0xf, 0xf, 0xf, 0xa2, 0x28, 0xa0, 0x19, 0x60, 0xb0, 0xe, 0x86, 0xcd, 0x86, 0xc4, 0x84, 0xca,
-0x84, 0xc5, 0x20, 0x70, 0xde, 0x20, 0xa8, 0xd8, 0xa6, 0xcd, 0xa4, 0xca, 0x60, 0xa9, 0xc, 0x8d,
-0x3e, 0x5, 0xa9, 0x3, 0x85, 0x99, 0xa9, 0x0, 0x85, 0x98, 0x8d, 0x47, 0x5, 0x85, 0x83, 0x85,
-0xef, 0x85, 0xf0, 0xa9, 0x7a, 0x8d, 0x45, 0x5, 0xa9, 0xdb, 0x8d, 0x46, 0x5, 0xa9, 0xa, 0x8d,
-0x3f, 0x5, 0x8d, 0x4a, 0x5, 0x8d, 0x42, 0x5, 0xa9, 0x80, 0x8d, 0x40, 0x5, 0xa9, 0x10, 0x8d,
-0x3b, 0x5, 0xa9, 0x4, 0x8d, 0x41, 0x5, 0x20, 0x70, 0xde, 0x20, 0x9a, 0xd8, 0x20, 0xaa, 0xd8,
-0x20, 0xf7, 0xda, 0xec, 0xe5, 0x7, 0xe8, 0x90, 0xf4, 0xae, 0xe6, 0x7, 0x86, 0xcd, 0x86, 0xc4,
-0xac, 0xe7, 0x7, 0x84, 0xca, 0x84, 0xc5, 0xa6, 0xcd, 0xbd, 0x2, 0xd8, 0x85, 0xc8, 0xbd, 0x1b,
-0xd8, 0x85, 0xc9, 0xa5, 0xc8, 0x85, 0xea, 0xa5, 0xc9, 0x29, 0x3, 0x9, 0x8, 0x85, 0xeb, 0x60,
-0xae, 0x5d, 0x5, 0xf0, 0xf, 0xac, 0x5e, 0x5, 0xb9, 0x67, 0x5, 0xce, 0x5d, 0x5, 0xee, 0x5e,
-0x5, 0x58, 0x18, 0x60, 0xac, 0x27, 0x5, 0xea, 0xbd, 0x28, 0x5, 0x9d, 0x27, 0x5, 0xe8, 0xe4,
-0xef, 0xd0, 0xf5, 0xc6, 0xef, 0x98, 0x58, 0x18, 0x60, 0x20, 0x49, 0xdc, 0x20, 0xb4, 0xd8, 0xa4,
-0xca, 0xb1, 0xea, 0x48, 0xad, 0x3b, 0x5, 0x91, 0xea, 0x98, 0x18, 0x65, 0xc8, 0x8d, 0xd, 0xff,
-0xa5, 0xc9, 0x69, 0x0, 0xe9, 0xb, 0x8d, 0xc, 0xff, 0xa5, 0xef, 0xd, 0x5d, 0x5, 0xf0, 0xf9,
-0x68, 0x91, 0xea, 0xa9, 0xff, 0x8d, 0xc, 0xff, 0x8d, 0xd, 0xff, 0x20, 0xc1, 0xd8, 0xc9, 0x83,
-0xd0, 0x10, 0xa2, 0x9, 0x78, 0x86, 0xef, 0xbd, 0x29, 0xe1, 0x9d, 0x26, 0x5, 0xca, 0xd0, 0xf7,
-0xf0, 0xba, 0xc9, 0xd, 0xd0, 0xb3, 0x85, 0xc7, 0x20, 0x95, 0xdf, 0x8e, 0x49, 0x5, 0x20, 0x87,
-0xdf, 0xa9, 0x0, 0x85, 0xcb, 0xac, 0xe7, 0x7, 0xa5, 0xc4, 0x30, 0x13, 0xc5, 0xcd, 0x90, 0xf,
-0xa4, 0xc5, 0xcd, 0x49, 0x5, 0xd0, 0x4, 0xc4, 0xc3, 0xf0, 0x2, 0xb0, 0x11, 0x85, 0xcd, 0x84,
-0xca, 0x4c, 0x77, 0xd9, 0x98, 0x48, 0x8a, 0x48, 0xa5, 0xc7, 0xf0, 0xc4, 0x10, 0x8, 0xa9, 0x0,
-0x85, 0xc7, 0x4c, 0x74, 0xcf, 0xea, 0x20, 0xa8, 0xd8, 0x20, 0x2f, 0xdf, 0x85, 0xce, 0x29, 0x3f,
-0x6, 0xce, 0x24, 0xce, 0x10, 0x2, 0x9, 0x80, 0x90, 0x4, 0xa6, 0xcb, 0xd0, 0x4, 0x70, 0x2,
-0x9, 0x40, 0x20, 0xba, 0xd9, 0xa4, 0xcd, 0xcc, 0x49, 0x5, 0x90, 0xa, 0xa4, 0xca, 0xc4, 0xc3,
-0x90, 0x4, 0x66, 0xc7, 0x30, 0x3, 0x20, 0xbf, 0xdf, 0xc9, 0xde, 0xd0, 0x2, 0xa9, 0xff, 0x85,
-0xce, 0x68, 0xaa, 0x68, 0xa8, 0xa5, 0xce, 0x18, 0x60, 0xc9, 0x22, 0xd0, 0x8, 0xa5, 0xcb, 0x49,
-0x1, 0x85, 0xcb, 0xa9, 0x22, 0x60, 0xa5, 0xce, 0x8d, 0xeb, 0x7, 0x68, 0xa8, 0xa5, 0xcf, 0xf0,
-0x2, 0x46, 0xcb, 0x68, 0xaa, 0x68, 0x18, 0x60, 0x9, 0x40, 0xa6, 0xc2, 0xf0, 0x2, 0x9, 0x80,
-0xa6, 0xcf, 0xf0, 0x2, 0xc6, 0xcf, 0x2c, 0xea, 0x7, 0x10, 0x9, 0x48, 0x20, 0xce, 0xdd, 0xa2,
-0x0, 0x86, 0xcf, 0x68, 0x20, 0x1, 0xe0, 0xcc, 0xe8, 0x7, 0x90, 0xc, 0xa6, 0xcd, 0xec, 0xe5,
-0x7, 0x90, 0x5, 0x2c, 0xe9, 0x7, 0x30, 0x17, 0x20, 0xa8, 0xd8, 0x20, 0xbf, 0xdf, 0x90, 0xf,
-0x20, 0x39, 0xdf, 0xb0, 0x9, 0x38, 0x2c, 0xe9, 0x7, 0x70, 0x4, 0x20, 0x5e, 0xda, 0x18, 0x60,
-0xa6, 0xcd, 0xec, 0xe5, 0x7, 0x90, 0x10, 0x2c, 0xe9, 0x7, 0x10, 0x7, 0xad, 0xe6, 0x7, 0x85,
-0xcd, 0xb0, 0x6, 0x20, 0x89, 0xda, 0x18, 0xe6, 0xcd, 0x4c, 0xa8, 0xd8, 0xbd, 0x2, 0xd8, 0x85,
-0xa9, 0x85, 0xc0, 0xbd, 0x1b, 0xd8, 0x85, 0xc1, 0x29, 0x3, 0x9, 0x8, 0x85, 0xaa, 0xb1, 0xc0,
-0x91, 0xc8, 0xb1, 0xa9, 0x91, 0xea, 0xcc, 0xe8, 0x7, 0xc8, 0x90, 0xf2, 0x60, 0xa6, 0xc4, 0x30,
-0x6, 0xe4, 0xcd, 0x90, 0x2, 0xe6, 0xc4, 0xae, 0xe5, 0x7, 0x20, 0xaa, 0xd8, 0xac, 0xe7, 0x7,
-0xe4, 0xcd, 0xf0, 0xe, 0xca, 0x20, 0x3b, 0xdf, 0xe8, 0x20, 0x48, 0xdf, 0xca, 0x20, 0x3d, 0xda,
-0xb0, 0xe8, 0x20, 0xf7, 0xda, 0x4c, 0x59, 0xdf, 0xae, 0xe6, 0x7, 0xe8, 0x20, 0x3b, 0xdf, 0x90,
-0xc, 0xec, 0xe5, 0x7, 0x90, 0xf5, 0xae, 0xe6, 0x7, 0xe8, 0x20, 0x4a, 0xdf, 0xc6, 0xcd, 0x24,
-0xc4, 0x30, 0x2, 0xc6, 0xc4, 0xae, 0xe6, 0x7, 0xe4, 0xfe, 0xb0, 0x2, 0xc6, 0xfe, 0x20, 0xc5,
-0xda, 0xae, 0xe6, 0x7, 0x20, 0x3b, 0xdf, 0x8, 0x20, 0x4a, 0xdf, 0x28, 0x90, 0x5, 0x2c, 0xec,
-0x7, 0x30, 0xc5, 0x60, 0x20, 0xaa, 0xd8, 0xac, 0xe7, 0x7, 0xec, 0xe5, 0x7, 0xb0, 0xe, 0xe8,
-0x20, 0x3b, 0xdf, 0xca, 0x20, 0x48, 0xdf, 0xe8, 0x20, 0x3d, 0xda, 0xb0, 0xe7, 0x20, 0xf7, 0xda,
-0xa9, 0x7f, 0x20, 0x70, 0xdb, 0xc9, 0xdf, 0xd0, 0x9, 0xa0, 0x0, 0xea, 0xca, 0xd0, 0xfc, 0x88,
-0xd0, 0xf9, 0x60, 0xea, 0xea, 0xea, 0xac, 0xe7, 0x7, 0x20, 0x4a, 0xdf, 0x20, 0xaa, 0xd8, 0x88,
-0xc8, 0xa9, 0x20, 0x91, 0xc8, 0xad, 0x3b, 0x5, 0x91, 0xea, 0xcc, 0xe8, 0x7, 0xd0, 0xf1, 0x60,
-0xa9, 0x0, 0x8d, 0x43, 0x5, 0xa0, 0x40, 0x84, 0xc6, 0x20, 0x70, 0xdb, 0xaa, 0xe0, 0xff, 0xd0,
-0x3, 0x4c, 0x1, 0xdc, 0xa0, 0x0, 0xa9, 0x26, 0x85, 0xec, 0xa9, 0xe0, 0x85, 0xed, 0xa9, 0xfe,
-0xa2, 0x8, 0x48, 0x68, 0x48, 0x20, 0x70, 0xdb, 0x85, 0xee, 0x68, 0x48, 0x20, 0x70, 0xdb, 0xc5,
-0xee, 0xd0, 0xf0, 0x4a, 0xb0, 0x16, 0x48, 0xb1, 0xec, 0xc9, 0x5, 0xb0, 0xc, 0xc9, 0x3, 0xf0,
-0x8, 0xd, 0x43, 0x5, 0x8d, 0x43, 0x5, 0x10, 0x2, 0x84, 0xc6, 0x68, 0xc8, 0xc0, 0x41, 0xb0,
-0x8, 0xca, 0xd0, 0xdf, 0x38, 0x68, 0x2a, 0xd0, 0xc7, 0x68, 0xa5, 0xc6, 0x6c, 0x45, 0x5, 0x8d,
-0x30, 0xfd, 0x8d, 0x8, 0xff, 0xad, 0x8, 0xff, 0x60, 0xad, 0x43, 0x5, 0xc9, 0x3, 0xd0, 0x19,
-0xad, 0x47, 0x5, 0x30, 0x34, 0xad, 0x44, 0x5, 0xd0, 0x2f, 0xad, 0x13, 0xff, 0x49, 0x4, 0x8d,
-0x13, 0xff, 0xa9, 0x8, 0x8d, 0x44, 0x5, 0xd0, 0x20, 0xa, 0xc9, 0x8, 0x90, 0x10, 0xa9, 0x6,
-0xae, 0xf7, 0x7, 0xd0, 0x9, 0xa6, 0xc6, 0xe0, 0xd, 0xd0, 0x3, 0x86, 0xf0, 0x60, 0xaa, 0xbd,
-0x1e, 0xe0, 0x85, 0xec, 0xbd, 0x1f, 0xe0, 0x85, 0xed, 0xa4, 0xc6, 0xb1, 0xec, 0xaa, 0xcc, 0xf6,
-0x7, 0xf0, 0x7, 0xa0, 0x10, 0x8c, 0x42, 0x5, 0xd0, 0x36, 0x29, 0x7f, 0x2c, 0x40, 0x5, 0x30,
-0x16, 0x70, 0x57, 0xc9, 0x7f, 0xf0, 0x29, 0xc9, 0x14, 0xf0, 0xc, 0xc9, 0x20, 0xf0, 0x8, 0xc9,
-0x1d, 0xf0, 0x4, 0xc9, 0x11, 0xd0, 0x43, 0xac, 0x42, 0x5, 0xf0, 0x5, 0xce, 0x42, 0x5, 0xd0,
-0x39, 0xce, 0x41, 0x5, 0xd0, 0x34, 0xa0, 0x4, 0x8c, 0x41, 0x5, 0xa4, 0xef, 0x88, 0x10, 0x2a,
-0xea, 0xea, 0x4e, 0x44, 0x5, 0xa4, 0xc6, 0x8c, 0xf6, 0x7, 0xe0, 0xff, 0xf0, 0x1c, 0x8a, 0xa2,
-0x0, 0x86, 0xf0, 0xa2, 0x7, 0xdd, 0x41, 0xdc, 0xf0, 0x11, 0xca, 0x10, 0xf8, 0xa6, 0xef, 0xec,
-0x3f, 0x5, 0xb0, 0x6, 0x9d, 0x27, 0x5, 0xe8, 0x86, 0xef, 0x60, 0xbd, 0x5f, 0x5, 0x8d, 0x5d,
-0x5, 0xa9, 0x0, 0xca, 0x30, 0x6, 0x18, 0x7d, 0x5f, 0x5, 0x90, 0xf7, 0x8d, 0x5e, 0x5, 0x60,
-0x85, 0x89, 0x86, 0x8a, 0x87, 0x8b, 0x88, 0x8c, 0x85, 0xce, 0x48, 0x8a, 0x48, 0x98, 0x48, 0xa5,
-0xf0, 0xd0, 0xfc, 0x85, 0xc7, 0xa9, 0xd9, 0x48, 0xa9, 0xc6, 0x48, 0xa4, 0xca, 0xa5, 0xce, 0xc9,
-0xd, 0xf0, 0x28, 0xc9, 0x8d, 0xf0, 0x24, 0xae, 0xeb, 0x7, 0xe0, 0x1b, 0xd0, 0x3, 0x4c, 0x6,
-0xde, 0xaa, 0x30, 0x14, 0xc9, 0x20, 0x90, 0x2e, 0xc9, 0x60, 0x90, 0x4, 0x29, 0xdf, 0xd0, 0x2,
-0x29, 0x3f, 0x20, 0xba, 0xd9, 0x4c, 0xdb, 0xd9, 0x4c, 0x47, 0xdd, 0x20, 0x95, 0xdf, 0xe8, 0x20,
-0x4a, 0xdf, 0xac, 0xe7, 0x7, 0x84, 0xca, 0x20, 0x21, 0xda, 0xa9, 0x0, 0x85, 0xcf, 0x85, 0xc2,
-0x85, 0xcb, 0x8d, 0x3c, 0x5, 0x60, 0xc9, 0x1b, 0xf0, 0x4e, 0xa6, 0xcf, 0xf0, 0x3, 0x4c, 0xdf,
-0xd9, 0xc9, 0x14, 0xd0, 0x3, 0x4c, 0x99, 0xdd, 0xa6, 0xcb, 0xd0, 0xf2, 0xc9, 0x12, 0xd0, 0x2,
-0x85, 0xc2, 0xc9, 0x13, 0xd0, 0xb, 0xcd, 0xeb, 0x7, 0xd0, 0x3, 0x20, 0x70, 0xde, 0x4c, 0x9a,
-0xd8, 0xc9, 0x1d, 0xf0, 0x24, 0xc9, 0x11, 0xf0, 0x26, 0xc9, 0xe, 0xf0, 0x49, 0xc9, 0x8, 0xf0,
-0x4c, 0xc9, 0x9, 0xf0, 0x4f, 0xa2, 0xf, 0xdd, 0x33, 0xe1, 0xf0, 0x4, 0xca, 0x10, 0xf8, 0x60,
-0x48, 0x20, 0x8a, 0xcf, 0x8d, 0x3b, 0x5, 0x68, 0x60, 0x20, 0xbf, 0xdf, 0xb0, 0x4, 0x60, 0x20,
-0x21, 0xda, 0x20, 0x39, 0xdf, 0xb0, 0x3, 0x38, 0x66, 0xc4, 0x18, 0x60, 0xae, 0xe6, 0x7, 0xe4,
-0xcd, 0xb0, 0xf8, 0x20, 0x3, 0xdd, 0xc6, 0xcd, 0x4c, 0xa8, 0xd8, 0x20, 0xd4, 0xdf, 0xb0, 0xeb,
-0xd0, 0xe8, 0xe6, 0xcd, 0xd0, 0xed, 0xad, 0x13, 0xff, 0x9, 0x4, 0xd0, 0x15, 0xa9, 0x80, 0xd,
-0x47, 0x5, 0x30, 0x5, 0xa9, 0x7f, 0x2d, 0x47, 0x5, 0x8d, 0x47, 0x5, 0x60, 0xad, 0x13, 0xff,
-0x29, 0xfb, 0x8d, 0x13, 0xff, 0x60, 0x29, 0x7f, 0xc9, 0x7f, 0xd0, 0x2, 0xa9, 0x5e, 0xc9, 0x20,
-0x90, 0x3, 0x4c, 0xd9, 0xd9, 0xa6, 0xcb, 0xf0, 0x5, 0x9, 0x40, 0x4c, 0xdf, 0xd9, 0xc9, 0x14,
-0xf0, 0x6b, 0xa6, 0xcf, 0xd0, 0xf3, 0xc9, 0x11, 0xf0, 0xa2, 0xc9, 0x12, 0xd0, 0x4, 0xa9, 0x0,
-0x85, 0xc2, 0xc9, 0x1d, 0xf0, 0xa5, 0xc9, 0x13, 0xd0, 0x3, 0x4c, 0x8b, 0xd8, 0xc9, 0x2, 0xd0,
-0x5, 0xa9, 0x80, 0x8d, 0x3c, 0x5, 0xc9, 0x4, 0xd0, 0x5, 0xa9, 0x0, 0x8d, 0x3c, 0x5, 0xc9,
-0xe, 0xf0, 0xaa, 0x9, 0x80, 0x4c, 0xe6, 0xdc, 0x20, 0x1c, 0xdd, 0x20, 0xf6, 0xdf, 0xb0, 0x10,
-0xcc, 0xe8, 0x7, 0x90, 0x16, 0xa6, 0xcd, 0xe8, 0x20, 0x3b, 0xdf, 0xb0, 0xe, 0x20, 0xff, 0xdf,
-0xa5, 0xcc, 0x85, 0xca, 0xa5, 0xfe, 0x85, 0xcd, 0x4c, 0xa8, 0xd8, 0x20, 0xbf, 0xdf, 0x20, 0x2f,
-0xdf, 0x20, 0xd4, 0xdf, 0x20, 0x11, 0xe0, 0x20, 0xbf, 0xdf, 0x4c, 0xa1, 0xdd, 0x20, 0xf6, 0xdf,
-0x20, 0x95, 0xdf, 0xe4, 0xfe, 0xd0, 0x2, 0xc4, 0xcc, 0x90, 0x21, 0x20, 0xf8, 0xd9, 0xb0, 0x22,
-0x20, 0xd4, 0xdf, 0x20, 0x2f, 0xdf, 0x20, 0xbf, 0xdf, 0x20, 0x11, 0xe0, 0x20, 0xd4, 0xdf, 0xa6,
-0xcd, 0xe4, 0xfe, 0xd0, 0xeb, 0xc4, 0xcc, 0xd0, 0xe7, 0x20, 0xff, 0xdf, 0xe6, 0xcf, 0xd0, 0x2,
-0xc6, 0xcf, 0x4c, 0xb1, 0xdd, 0x29, 0x7f, 0x38, 0xe9, 0x41, 0xc9, 0x17, 0xb0, 0xa, 0xa, 0xaa,
-0xbd, 0x1b, 0xde, 0x48, 0xbd, 0x1a, 0xde, 0x48, 0x60, 0x28, 0xdf, 0x5f, 0xde, 0x25, 0xdf, 0x9f,
-0xde, 0x18, 0xde, 0x18, 0xde, 0x18, 0xde, 0x18, 0xde, 0x8a, 0xde, 0x81, 0xdf, 0x94, 0xdf, 0x1c,
-0xdf, 0x1f, 0xdf, 0x87, 0xd8, 0x9a, 0xdc, 0xe0, 0xde, 0xca, 0xde, 0x47, 0xde, 0x18, 0xde, 0x5d,
-0xde, 0x18, 0xde, 0xf5, 0xde, 0x3, 0xdf, 0x20, 0x70, 0xde, 0x20, 0x8b, 0xd8, 0xa9, 0x1, 0xaa,
-0x20, 0x7a, 0xde, 0xa9, 0x17, 0xa2, 0x26, 0x20, 0x67, 0xde, 0x4c, 0x9a, 0xd8, 0x18, 0x24, 0x38,
-0xa6, 0xca, 0xa5, 0xcd, 0x90, 0x13, 0x8d, 0xe5, 0x7, 0x8e, 0xe8, 0x7, 0x4c, 0x80, 0xde, 0xa9,
-0x18, 0xa2, 0x27, 0x20, 0x67, 0xde, 0xa9, 0x0, 0xaa, 0x8d, 0xe6, 0x7, 0x8e, 0xe7, 0x7, 0xa9,
-0x0, 0xa2, 0x4, 0x9d, 0xed, 0x7, 0xca, 0xd0, 0xfa, 0x60, 0x20, 0x5e, 0xda, 0x20, 0xa1, 0xd8,
-0xe8, 0x20, 0x3b, 0xdf, 0x8, 0x20, 0x46, 0xdf, 0x28, 0xb0, 0x3, 0x38, 0x66, 0xc4, 0x60, 0x20,
-0x87, 0xdf, 0xad, 0xe6, 0x7, 0x48, 0xa5, 0xcd, 0x8d, 0xe6, 0x7, 0xad, 0xec, 0x7, 0x48, 0xa9,
-0x80, 0x8d, 0xec, 0x7, 0x20, 0x9e, 0xda, 0x68, 0x8d, 0xec, 0x7, 0xad, 0xe6, 0x7, 0x85, 0xcd,
-0x68, 0x8d, 0xe6, 0x7, 0x38, 0x66, 0xc4, 0x4c, 0xa1, 0xd8, 0x20, 0xf6, 0xdf, 0x20, 0xfd, 0xda,
-0xe6, 0xcd, 0x20, 0xa8, 0xd8, 0xac, 0xe7, 0x7, 0x20, 0x39, 0xdf, 0xb0, 0xf0, 0x4c, 0xb1, 0xdd,
-0x20, 0xf6, 0xdf, 0x20, 0xff, 0xdf, 0xcc, 0xe7, 0x7, 0xd0, 0x5, 0x20, 0x39, 0xdf, 0x90, 0xed,
-0x20, 0xd4, 0xdf, 0x90, 0xee, 0x20, 0xf6, 0xdf, 0x8a, 0x48, 0x20, 0x89, 0xda, 0x68, 0x85, 0xfe,
-0x4c, 0xde, 0xde, 0x20, 0xf6, 0xdf, 0x20, 0x39, 0xdf, 0xb0, 0x3, 0x38, 0x66, 0xc4, 0xad, 0xe6,
-0x7, 0x85, 0xcd, 0x20, 0x5e, 0xda, 0x20, 0x4a, 0xdf, 0x4c, 0xde, 0xde, 0xa9, 0x0, 0x2c, 0xa9,
-0x80, 0x8d, 0xe9, 0x7, 0x60, 0xa9, 0x0, 0x2c, 0xa9, 0xff, 0x8d, 0xea, 0x7, 0x60, 0xa4, 0xca,
-0xb1, 0xea, 0x8d, 0xed, 0x7, 0xb1, 0xc8, 0x60, 0xa6, 0xcd, 0x20, 0x66, 0xdf, 0x3d, 0xee, 0x7,
-0xc9, 0x1, 0x4c, 0x55, 0xdf, 0xa6, 0xcd, 0xb0, 0xf, 0x20, 0x66, 0xdf, 0x49, 0xff, 0x3d, 0xee,
-0x7, 0x9d, 0xee, 0x7, 0xae, 0xe9, 0x2, 0x60, 0x2c, 0xe9, 0x7, 0x70, 0xdd, 0x20, 0x66, 0xdf,
-0x1d, 0xee, 0x7, 0xd0, 0xec, 0x8e, 0xe9, 0x2, 0x8a, 0x29, 0x7, 0xaa, 0xbd, 0x7a, 0xdf, 0x48,
-0xad, 0xe9, 0x2, 0x4a, 0x4a, 0x4a, 0xaa, 0x68, 0x60, 0x80, 0x40, 0x20, 0x10, 0x8, 0x4, 0x2,
-0x1, 0xac, 0xe7, 0x7, 0x84, 0xca, 0x20, 0x39, 0xdf, 0x90, 0x6, 0xc6, 0xcd, 0x10, 0xf7, 0xe6,
-0xcd, 0x4c, 0xa8, 0xd8, 0xe6, 0xcd, 0x20, 0x39, 0xdf, 0xb0, 0xf9, 0xc6, 0xcd, 0x20, 0xa8, 0xd8,
-0xac, 0xe8, 0x7, 0x84, 0xca, 0x20, 0x2f, 0xdf, 0xc9, 0x20, 0xd0, 0xf, 0xcc, 0xe7, 0x7, 0xd0,
-0x5, 0x20, 0x39, 0xdf, 0x90, 0x5, 0x20, 0xd4, 0xdf, 0x90, 0xea, 0x84, 0xc3, 0x60, 0x48, 0xa4,
-0xca, 0xcc, 0xe8, 0x7, 0x90, 0x8, 0x20, 0x21, 0xda, 0xac, 0xe7, 0x7, 0x88, 0x38, 0xc8, 0x84,
-0xca, 0x68, 0x60, 0xa4, 0xca, 0x88, 0x30, 0x5, 0xcc, 0xe7, 0x7, 0xb0, 0x11, 0xac, 0xe6, 0x7,
-0xc4, 0xcd, 0xb0, 0x10, 0xc6, 0xcd, 0x48, 0x20, 0xa8, 0xd8, 0x68, 0xac, 0xe8, 0x7, 0x84, 0xca,
-0xcc, 0xe8, 0x7, 0x18, 0x60, 0xa4, 0xca, 0x84, 0xcc, 0xa6, 0xcd, 0x86, 0xfe, 0x60, 0xa9, 0x20,
-0xa4, 0xca, 0x91, 0xc8, 0x20, 0xb4, 0xd8, 0xad, 0x3b, 0x5, 0xd, 0x3c, 0x5, 0x91, 0xea, 0x60,
-0xa4, 0xca, 0x91, 0xc8, 0x20, 0xb4, 0xd8, 0xad, 0xed, 0x7, 0x91, 0xea, 0x60, 0x26, 0xe0, 0x67,
-0xe0, 0xa8, 0xe0, 0xe9, 0xe0, 0x14, 0xd, 0x5c, 0x8c, 0x85, 0x89, 0x86, 0x40, 0x33, 0x57, 0x41,
-0x34, 0x5a, 0x53, 0x45, 0x1, 0x35, 0x52, 0x44, 0x36, 0x43, 0x46, 0x54, 0x58, 0x37, 0x59, 0x47,
-0x38, 0x42, 0x48, 0x55, 0x56, 0x39, 0x49, 0x4a, 0x30, 0x4d, 0x4b, 0x4f, 0x4e, 0x11, 0x50, 0x4c,
-0x91, 0x2e, 0x3a, 0x2d, 0x2c, 0x9d, 0x2a, 0x3b, 0x1d, 0x1b, 0x3d, 0x2b, 0x2f, 0x31, 0x13, 0x4,
-0x32, 0x20, 0x2, 0x51, 0x3, 0xff, 0x94, 0x8d, 0xa9, 0x88, 0x8a, 0x87, 0x8b, 0xba, 0x23, 0xd7,
-0xc1, 0x24, 0xda, 0xd3, 0xc5, 0x1, 0x25, 0xd2, 0xc4, 0x26, 0xc3, 0xc6, 0xd4, 0xd8, 0x27, 0xd9,
-0xc7, 0x28, 0xc2, 0xc8, 0xd5, 0xd6, 0x29, 0xc9, 0xca, 0x5e, 0xcd, 0xcb, 0xcf, 0xce, 0x11, 0xd0,
-0xcc, 0x91, 0x3e, 0x5b, 0xdd, 0x3c, 0x9d, 0xc0, 0x5d, 0x1d, 0x1b, 0x5f, 0xdb, 0x3f, 0x21, 0x93,
-0x4, 0x22, 0xa0, 0x2, 0xd1, 0x83, 0xff, 0x94, 0x8d, 0xa8, 0x88, 0x8a, 0x87, 0x8b, 0xa4, 0x96,
-0xb3, 0xb0, 0x97, 0xad, 0xae, 0xb1, 0x1, 0x98, 0xb2, 0xac, 0x99, 0xbc, 0xbb, 0xa3, 0xbd, 0x9a,
-0xb7, 0xa5, 0x9b, 0xbf, 0xb4, 0xb8, 0xbe, 0x29, 0xa2, 0xb5, 0x30, 0xa7, 0xa1, 0xb9, 0xaa, 0x11,
-0xaf, 0xb6, 0x91, 0x3e, 0x5b, 0xdc, 0x3c, 0x9d, 0xdf, 0x5d, 0x1d, 0x1b, 0xde, 0xa6, 0x3f, 0x81,
-0x93, 0x4, 0x95, 0xa0, 0x2, 0xab, 0x83, 0xff, 0xff, 0xff, 0x1c, 0xff, 0xff, 0xff, 0xff, 0xff,
-0x1c, 0x17, 0x1, 0x9f, 0x1a, 0x13, 0x5, 0xff, 0x9c, 0x12, 0x4, 0x1e, 0x3, 0x6, 0x14, 0x18,
-0x1f, 0x19, 0x7, 0x9e, 0x2, 0x8, 0x15, 0x16, 0x12, 0x9, 0xa, 0x92, 0xd, 0xb, 0xf, 0xe,
-0xff, 0x10, 0xc, 0xff, 0x84, 0x1b, 0xff, 0x82, 0xff, 0xff, 0x1d, 0xff, 0x1b, 0x6, 0xff, 0xff,
-0x90, 0xff, 0xff, 0x5, 0xff, 0xff, 0x11, 0xff, 0xff, 0x44, 0xcc, 0x22, 0x2a, 0xd, 0x52, 0x55,
-0x4e, 0xd, 0x90, 0x5, 0x1c, 0x9f, 0x9c, 0x1e, 0x1f, 0x9e, 0x81, 0x95, 0x96, 0x97, 0x98, 0x99,
-0x9a, 0x9b, 0x0, 0x71, 0x32, 0x63, 0x44, 0x35, 0x46, 0x77, 0x48, 0x29, 0x5a, 0x6b, 0x5c, 0x6d,
-0x2e, 0x5f, 0x9, 0x40, 0x2c, 0x9, 0x20, 0x48, 0x24, 0x94, 0x10, 0xa, 0x38, 0x66, 0xa6, 0x20,
-0x81, 0xe1, 0x46, 0x94, 0x46, 0xa6, 0x68, 0x85, 0x95, 0x78, 0x20, 0xc6, 0xe2, 0x20, 0xbf, 0xe2,
-0xa5, 0x1, 0x9, 0x4, 0x85, 0x1, 0x78, 0x20, 0xbf, 0xe2, 0x20, 0xc6, 0xe2, 0x20, 0xdc, 0xe2,
-0x78, 0x20, 0xc6, 0xe2, 0x20, 0xd4, 0xe2, 0xb0, 0x5f, 0x20, 0xb8, 0xe2, 0x24, 0xa6, 0x10, 0xe,
-0x20, 0xd4, 0xe2, 0x90, 0xfb, 0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0xa, 0xb0, 0xf7, 0x20, 0xd4,
-0xe2, 0x90, 0xfb, 0x20, 0xbf, 0xe2, 0xa9, 0x8, 0x85, 0xaa, 0x20, 0xd4, 0xe2, 0x90, 0x3e, 0x66,
-0x95, 0xb0, 0x5, 0x20, 0xcd, 0xe2, 0xd0, 0x3, 0x20, 0xc6, 0xe2, 0x20, 0x11, 0xe3, 0x20, 0xb8,
-0xe2, 0x20, 0x11, 0xe3, 0xa5, 0x1, 0x29, 0xfe, 0x9, 0x2, 0x85, 0x1, 0xc6, 0xaa, 0xd0, 0xda,
-0x8a, 0x48, 0xa2, 0x78, 0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0xa, 0x90, 0x7, 0xca, 0xd0, 0xf4,
-0x68, 0xaa, 0xb0, 0x9, 0x68, 0xaa, 0x58, 0x60, 0xa9, 0x80, 0x4c, 0xf0, 0xe1, 0xa9, 0x3, 0x20,
-0x1e, 0xf4, 0x58, 0x18, 0x90, 0x4b, 0x85, 0x95, 0x20, 0x77, 0xe1, 0xa5, 0x1, 0x29, 0xfb, 0x85,
-0x1, 0x60, 0x85, 0x95, 0x20, 0x77, 0xe1, 0x24, 0x90, 0x30, 0x36, 0x78, 0x20, 0xcd, 0xe2, 0x20,
-0xfc, 0xe1, 0x20, 0xb8, 0xe2, 0x24, 0x1, 0x70, 0xfc, 0x58, 0x60, 0xff, 0x24, 0x94, 0x30, 0x5,
-0x38, 0x66, 0x94, 0xd0, 0x5, 0x48, 0x20, 0x81, 0xe1, 0x68, 0x85, 0x95, 0x18, 0x60, 0x78, 0x20,
-0xbf, 0xe2, 0xa5, 0x1, 0x9, 0x4, 0x85, 0x1, 0xa9, 0x5f, 0xd0, 0x2, 0xa9, 0x3f, 0x20, 0x58,
-0xe1, 0x20, 0xfc, 0xe1, 0x8a, 0xa2, 0x14, 0xca, 0xd0, 0xfd, 0xaa, 0x20, 0xb8, 0xe2, 0x4c, 0xc6,
-0xe2, 0x78, 0xa9, 0x0, 0x85, 0xaa, 0x20, 0xb8, 0xe2, 0x8a, 0x48, 0x20, 0xd4, 0xe2, 0x10, 0xfb,
-0xa2, 0x20, 0x20, 0xc6, 0xe2, 0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0xa, 0x10, 0x1f, 0xca, 0xd0,
-0xf4, 0xa5, 0xaa, 0xf0, 0x7, 0x68, 0xaa, 0xa9, 0x2, 0x4c, 0xf0, 0xe1, 0x20, 0xcd, 0xe2, 0xa2,
-0x40, 0xca, 0xd0, 0xfd, 0xa9, 0x40, 0x20, 0x1e, 0xf4, 0xe6, 0xaa, 0xd0, 0xd3, 0xa2, 0x8, 0xa5,
-0x1, 0xa, 0x10, 0xfb, 0x66, 0xa8, 0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0xa, 0x30, 0xf7, 0xca,
-0xd0, 0xed, 0x86, 0xaa, 0x68, 0xaa, 0x20, 0xcd, 0xe2, 0xa9, 0x40, 0x24, 0x90, 0x50, 0x3, 0x20,
-0x45, 0xe2, 0xa5, 0xa8, 0x58, 0x18, 0x60, 0xa5, 0x1, 0x29, 0xfd, 0x85, 0x1, 0x60, 0xa5, 0x1,
-0x9, 0x2, 0x85, 0x1, 0x60, 0xa5, 0x1, 0x29, 0xfe, 0x85, 0x1, 0x60, 0xa5, 0x1, 0x9, 0x1,
-0x85, 0x1, 0x60, 0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0xa, 0x60, 0x20, 0xf8, 0xe2, 0xa9, 0x10,
-0x2c, 0x9, 0xff, 0xf0, 0xfb, 0x8d, 0x9, 0xff, 0x60, 0x20, 0xfc, 0xe2, 0xa9, 0x10, 0x2c, 0x9,
-0xff, 0xf0, 0xfb, 0x8d, 0x9, 0xff, 0x60, 0xa9, 0x4, 0xd0, 0x2, 0xa9, 0x40, 0x8, 0x48, 0x78,
-0xa9, 0x0, 0x8d, 0x2, 0xff, 0x68, 0x8d, 0x3, 0xff, 0xa9, 0x10, 0x8d, 0x9, 0xff, 0x28, 0x60,
-0x8a, 0xa2, 0x5, 0xca, 0xd0, 0xfd, 0xaa, 0x60, 0x38, 0x24, 0x18, 0xad, 0x10, 0xfd, 0x29, 0x4,
-0xf0, 0x3f, 0x8, 0x20, 0xd8, 0xfb, 0xd, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x50, 0x4c, 0x41,
-0x59, 0x20, 0x0, 0x28, 0x90, 0xd, 0x20, 0xd8, 0xfb, 0x26, 0x20, 0x52, 0x45, 0x43, 0x4f, 0x52,
-0x44, 0x20, 0x0, 0x20, 0xd8, 0xfb, 0x4f, 0x4e, 0x20, 0x54, 0x41, 0x50, 0x45, 0x0, 0x20, 0xcb,
-0xfb, 0xb0, 0xf, 0xad, 0x10, 0xfd, 0x29, 0x4, 0xd0, 0xf4, 0x20, 0xd8, 0xfb, 0xd, 0x4f, 0x4b,
-0x0, 0x18, 0x60, 0x78, 0xad, 0x6, 0xff, 0x29, 0xef, 0x8d, 0x6, 0xff, 0xad, 0xa, 0xff, 0x29,
-0xfd, 0x9, 0x8, 0x8d, 0xa, 0xff, 0x60, 0x78, 0xad, 0x6, 0xff, 0x9, 0x10, 0x8d, 0x6, 0xff,
-0xad, 0xa, 0xff, 0x29, 0xf7, 0x9, 0x2, 0x8d, 0xa, 0xff, 0x58, 0x60, 0x8, 0x38, 0x6e, 0xfc,
-0x7, 0xa5, 0x1, 0x29, 0xf5, 0x85, 0x1, 0xa2, 0x1e, 0x20, 0xea, 0xe2, 0xca, 0xd0, 0xfa, 0x28,
-0x60, 0x43, 0x31, 0x39, 0x38, 0x34, 0x43, 0x4f, 0x4d, 0x4d, 0x4f, 0x44, 0x4f, 0x52, 0x45, 0xa5,
-0x1, 0x9, 0x8, 0x85, 0x1, 0x60, 0xa0, 0x0, 0xa9, 0x20, 0x91, 0xb6, 0xc8, 0xc0, 0xc0, 0xd0,
-0xf9, 0x60, 0x48, 0xa9, 0x33, 0x85, 0xb6, 0xa9, 0x3, 0x85, 0xb7, 0x68, 0x60, 0x20, 0xcb, 0xfb,
-0x90, 0x10, 0x20, 0xb0, 0xe3, 0x20, 0x78, 0xe3, 0xae, 0xbe, 0x7, 0x9a, 0xa9, 0x0, 0x8d, 0xbe,
-0x7, 0x38, 0x60, 0xad, 0x9, 0xff, 0x2d, 0xa, 0xff, 0x29, 0x8, 0xd0, 0x1, 0x60, 0x8d, 0x9,
-0xff, 0x78, 0xa9, 0x90, 0x8d, 0x0, 0xff, 0xa9, 0x33, 0x8d, 0x1, 0xff, 0xae, 0xbf, 0x7, 0x9a,
-0x38, 0x60, 0xa9, 0xa8, 0x8d, 0x0, 0xff, 0xa9, 0x48, 0x8d, 0x1, 0xff, 0xa9, 0x8, 0x8d, 0x9,
-0xff, 0x60, 0x38, 0xb0, 0x1, 0x18, 0x8c, 0xca, 0x7, 0x8e, 0xcb, 0x7, 0xac, 0xc8, 0x7, 0xae,
-0xc9, 0x7, 0xa9, 0x10, 0x2c, 0x9, 0xff, 0xf0, 0xfb, 0x8c, 0x2, 0xff, 0x8e, 0x3, 0xff, 0x8d,
-0x9, 0xff, 0xa5, 0x1, 0x49, 0x2, 0x85, 0x1, 0x8, 0x20, 0xce, 0xe3, 0x28, 0xac, 0xca, 0x7,
-0xae, 0xcb, 0x7, 0xb0, 0xd0, 0x60, 0xa9, 0x4e, 0x8d, 0xc8, 0x7, 0xa9, 0x3, 0x8d, 0xc9, 0x7,
-0x60, 0xa9, 0xd0, 0x8d, 0xc8, 0x7, 0xa9, 0x0, 0x8d, 0xc9, 0x7, 0x60, 0xa9, 0xa4, 0x8d, 0xc8,
-0x7, 0xa9, 0x1, 0x8d, 0xc9, 0x7, 0x60, 0x20, 0x52, 0xe4, 0x20, 0x13, 0xe4, 0x20, 0x5d, 0xe4,
-0x4c, 0x13, 0xe4, 0x20, 0x5d, 0xe4, 0x20, 0x13, 0xe4, 0x20, 0x52, 0xe4, 0x4c, 0x13, 0xe4, 0x20,
-0x47, 0xe4, 0x20, 0x13, 0xe4, 0x20, 0x5d, 0xe4, 0x4c, 0x13, 0xe4, 0x85, 0xa7, 0xa9, 0x1, 0x8d,
-0xb1, 0x7, 0x20, 0x80, 0xe4, 0xa2, 0x8, 0x66, 0xa7, 0xb0, 0x9, 0xee, 0xb1, 0x7, 0x20, 0x68,
-0xe4, 0x4c, 0xa8, 0xe4, 0x20, 0x74, 0xe4, 0xca, 0xd0, 0xed, 0x6e, 0xb1, 0x7, 0xb0, 0x6, 0x20,
-0x68, 0xe4, 0x4c, 0xb9, 0xe4, 0x20, 0x74, 0xe4, 0x60, 0xba, 0x8e, 0xbe, 0x7, 0xa5, 0x1, 0x9,
-0x2, 0x85, 0x1, 0x20, 0x52, 0xe4, 0xa0, 0x1, 0x8c, 0x3, 0xff, 0xa9, 0x10, 0x8d, 0x9, 0xff,
-0x24, 0xf7, 0x10, 0x4, 0xa0, 0x40, 0xa2, 0xfe, 0x20, 0x13, 0xe4, 0xca, 0xd0, 0xfa, 0x88, 0xd0,
-0xf7, 0xa0, 0x9, 0x98, 0x5, 0xf7, 0x20, 0x8c, 0xe4, 0x88, 0xd0, 0xf7, 0xa5, 0xf8, 0x85, 0xf5,
-0xf0, 0x3, 0x20, 0x8c, 0xe4, 0xa0, 0x0, 0xa9, 0xba, 0x8d, 0xdf, 0x7, 0x20, 0xd9, 0x7, 0x48,
-0x45, 0xf5, 0x85, 0xf5, 0x68, 0x20, 0x8c, 0xe4, 0xe6, 0xba, 0xd0, 0x2, 0xe6, 0xbb, 0xee, 0xf3,
-0x3, 0xd0, 0xe2, 0xee, 0xf4, 0x3, 0xd0, 0xdd, 0xa5, 0xf5, 0x20, 0x8c, 0xe4, 0x20, 0x5d, 0xe4,
-0x20, 0x13, 0xe4, 0x20, 0x52, 0xe4, 0xa0, 0x1, 0xa2, 0xc2, 0x20, 0x13, 0xe4, 0xca, 0xd0, 0xfa,
-0x88, 0xd0, 0xf7, 0x60, 0x20, 0x19, 0xe3, 0x20, 0x64, 0xe3, 0x20, 0x8d, 0xe3, 0xb0, 0x26, 0xa9,
-0x80, 0x85, 0xf7, 0xa5, 0xb6, 0x85, 0xba, 0xa5, 0xb7, 0x85, 0xbb, 0xa9, 0x41, 0x8d, 0xf3, 0x3,
-0xa9, 0xff, 0x8d, 0xf4, 0x3, 0x20, 0xba, 0xe4, 0xb0, 0xb, 0xa5, 0xf7, 0x10, 0x6, 0xa9, 0x0,
-0x85, 0xf7, 0x10, 0xdf, 0x18, 0x20, 0xb0, 0xe3, 0x4c, 0x78, 0xe3, 0x20, 0xc3, 0xe3, 0x20, 0xb7,
-0xe3, 0xa0, 0x0, 0xa5, 0xb2, 0x91, 0xb6, 0xc8, 0xa5, 0xb3, 0x91, 0xb6, 0xc8, 0xa5, 0x9d, 0x91,
-0xb6, 0xc8, 0xa5, 0x9e, 0x91, 0xb6, 0xc8, 0x8c, 0xb3, 0x7, 0xa0, 0x0, 0x8c, 0xb2, 0x7, 0xac,
-0xb2, 0x7, 0xc4, 0xab, 0xf0, 0x16, 0xa9, 0xaf, 0x8d, 0xdf, 0x7, 0x20, 0xd9, 0x7, 0xac, 0xb3,
-0x7, 0x91, 0xb6, 0xee, 0xb2, 0x7, 0xee, 0xb3, 0x7, 0x4c, 0x90, 0xe5, 0x4c, 0x35, 0xe5, 0x20,
-0x19, 0xe3, 0x20, 0x64, 0xe3, 0x20, 0x8d, 0xe3, 0xb0, 0x2f, 0xa9, 0x80, 0x85, 0xf7, 0xa5, 0xb2,
-0x85, 0xba, 0xa5, 0xb3, 0x85, 0xbb, 0x18, 0xa5, 0x9d, 0xe5, 0xb2, 0x49, 0xff, 0x8d, 0xf3, 0x3,
-0xa5, 0x9e, 0xe5, 0xb3, 0x49, 0xff, 0x8d, 0xf4, 0x3, 0x20, 0xba, 0xe4, 0xb0, 0xb, 0xa5, 0xf7,
-0x10, 0x6, 0xa9, 0x0, 0x85, 0xf7, 0x10, 0xd6, 0x18, 0x20, 0xb0, 0xe3, 0x4c, 0x78, 0xe3, 0x20,
-0xb7, 0xe3, 0xa9, 0x5, 0x85, 0xf8, 0x4c, 0x35, 0xe5, 0x40, 0x0, 0x80, 0xae, 0xb8, 0x7, 0xac,
-0xb9, 0x7, 0xad, 0xbb, 0x7, 0x48, 0xad, 0xba, 0x7, 0x48, 0xa9, 0x10, 0x24, 0x1, 0xf0, 0xfc,
-0x24, 0x1, 0xd0, 0xfc, 0x8e, 0x2, 0xff, 0x8c, 0x3, 0xff, 0x68, 0x8d, 0x4, 0xff, 0x68, 0x8d,
-0x5, 0xff, 0xa9, 0x50, 0x8d, 0x9, 0xff, 0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0x29, 0x10, 0xd0,
-0xd1, 0x20, 0xce, 0xe3, 0xa9, 0x10, 0x24, 0x1, 0xd0, 0x47, 0x2c, 0x9, 0xff, 0xf0, 0xf7, 0xa5,
-0x1, 0xc5, 0x1, 0xd0, 0xfa, 0x29, 0x10, 0xd0, 0x38, 0xa9, 0x40, 0x2c, 0x9, 0xff, 0xf0, 0xfb,
-0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0x29, 0x10, 0xd0, 0x2c, 0xad, 0xbc, 0x7, 0x8d, 0x2, 0xff,
-0xad, 0xbd, 0x7, 0x8d, 0x3, 0xff, 0xa9, 0x10, 0x8d, 0x9, 0xff, 0xa9, 0x10, 0x2c, 0x9, 0xff,
-0xf0, 0xfb, 0xa5, 0x1, 0xc5, 0x1, 0xd0, 0xfa, 0x29, 0x10, 0xf0, 0xf, 0x2c, 0xfc, 0xe5, 0x30,
-0x8, 0x2c, 0xfa, 0xe5, 0x70, 0x3, 0x2c, 0xfb, 0xe5, 0x18, 0x60, 0x38, 0x60, 0x40, 0x0, 0x80,
-0x20, 0xfd, 0xe5, 0xb0, 0x3d, 0x70, 0x12, 0x10, 0x2, 0x30, 0x27, 0x20, 0xfd, 0xe5, 0xb0, 0x32,
-0x70, 0x2, 0x50, 0x2e, 0x2c, 0x8f, 0xe6, 0x18, 0x60, 0x20, 0xfd, 0xe5, 0x70, 0x4, 0x10, 0xd,
-0x30, 0x20, 0x20, 0xfd, 0xe5, 0xb0, 0x1b, 0x70, 0xf9, 0x10, 0x17, 0x30, 0x5, 0x2c, 0x8e, 0xe6,
-0x18, 0x60, 0x20, 0xfd, 0xe5, 0xb0, 0xb, 0x70, 0x9, 0x10, 0x2, 0x30, 0x5, 0x2c, 0x90, 0xe6,
-0x18, 0x60, 0x38, 0x60, 0xba, 0x8e, 0xbf, 0x7, 0x18, 0x6e, 0xcc, 0x7, 0x58, 0x20, 0x91, 0xe6,
-0xb0, 0xfb, 0x70, 0xf9, 0x10, 0xf7, 0x20, 0x3, 0xe4, 0x18, 0x60, 0x2c, 0xcc, 0x7, 0x30, 0x51,
-0x20, 0xd5, 0xe6, 0xb0, 0x4c, 0xa9, 0x1, 0x8d, 0xb1, 0x7, 0xa2, 0x8, 0x8e, 0xb5, 0x7, 0x38,
-0x6e, 0xcc, 0x7, 0x20, 0x91, 0xe6, 0xb0, 0x39, 0x70, 0x4, 0x10, 0xf, 0x30, 0x33, 0x18, 0x66,
-0xa7, 0xee, 0xb1, 0x7, 0xce, 0xb5, 0x7, 0xd0, 0xea, 0xf0, 0x8, 0x38, 0x66, 0xa7, 0xce, 0xb5,
-0x7, 0xd0, 0xe0, 0x20, 0x91, 0xe6, 0xb0, 0x19, 0x70, 0x4, 0x10, 0xb, 0x30, 0x13, 0xad, 0xb1,
-0x7, 0x29, 0x1, 0xd0, 0xc, 0xf0, 0x7, 0xad, 0xb1, 0x7, 0x29, 0x1, 0xf0, 0x3, 0x18, 0x90,
-0x1, 0x38, 0x78, 0x8, 0x18, 0x6e, 0xcc, 0x7, 0x28, 0x60, 0xba, 0x8e, 0xbe, 0x7, 0xa5, 0x93,
-0xf0, 0x3, 0x38, 0x66, 0x93, 0x20, 0x8d, 0xe3, 0x20, 0x64, 0xe3, 0xad, 0xc0, 0x7, 0x85, 0xb6,
-0xad, 0xc1, 0x7, 0x85, 0xb7, 0xad, 0xc2, 0x7, 0x8d, 0xf5, 0x3, 0xad, 0xc3, 0x7, 0x8d, 0xf6,
-0x3, 0x20, 0x1d, 0xe9, 0xa0, 0x0, 0x8c, 0xb6, 0x7, 0x8c, 0xb7, 0x7, 0x84, 0xf5, 0x84, 0xb1,
-0x84, 0xf8, 0xa9, 0xb6, 0x8d, 0xdf, 0x7, 0x2c, 0xb0, 0x7, 0x10, 0x13, 0x20, 0xec, 0xe6, 0xb0,
-0xb, 0xa5, 0xa7, 0x85, 0xf8, 0x45, 0xf5, 0x85, 0xf5, 0x4c, 0xa0, 0xe7, 0x38, 0x66, 0xf8, 0x20,
-0xec, 0xe6, 0xb0, 0x19, 0xa0, 0x0, 0x20, 0xd9, 0x7, 0xea, 0x24, 0x93, 0x30, 0x2, 0xa5, 0xa7,
-0xc5, 0xa7, 0xd0, 0x9, 0x91, 0xb6, 0x45, 0xf5, 0x85, 0xf5, 0x4c, 0xdc, 0xe7, 0xac, 0xb6, 0x7,
-0xc0, 0x1e, 0xb0, 0x12, 0xa5, 0xb6, 0x99, 0x37, 0x4, 0xa5, 0xb7, 0x99, 0x55, 0x4, 0xee, 0xb6,
-0x7, 0xe6, 0xb1, 0x4c, 0xdc, 0xe7, 0xa9, 0xff, 0x8d, 0xb6, 0x7, 0xe6, 0xb6, 0xd0, 0x2, 0xe6,
-0xb7, 0xee, 0xf5, 0x3, 0xd0, 0xb9, 0xee, 0xf6, 0x3, 0xd0, 0xb4, 0xad, 0xb6, 0x7, 0x8d, 0xb7,
-0x7, 0x20, 0xec, 0xe6, 0xad, 0xb7, 0x7, 0xd0, 0x6, 0xa5, 0xa7, 0xc5, 0xf5, 0xd0, 0x3, 0x4c,
-0xa, 0xe8, 0xa5, 0xf7, 0x30, 0x3, 0x4c, 0xb7, 0xe8, 0xa5, 0xf7, 0x30, 0xb, 0xad, 0xb7, 0x7,
-0xf0, 0x3, 0x4c, 0xb7, 0xe8, 0x4c, 0xc7, 0xe8, 0xa9, 0x0, 0x8d, 0xb6, 0x7, 0x85, 0xf5, 0xad,
-0xc0, 0x7, 0x85, 0xb6, 0xad, 0xc1, 0x7, 0x85, 0xb7, 0xad, 0xc2, 0x7, 0x8d, 0xf5, 0x3, 0xad,
-0xc3, 0x7, 0x8d, 0xf6, 0x3, 0x20, 0x1d, 0xe9, 0x2c, 0xb0, 0x7, 0x10, 0x15, 0x20, 0xec, 0xe6,
-0x24, 0xf8, 0x10, 0x8, 0xa5, 0xa7, 0x85, 0xf8, 0x90, 0x2, 0x66, 0xf8, 0xa5, 0xf8, 0x45, 0xf5,
-0x85, 0xf5, 0x20, 0xec, 0xe6, 0x6e, 0xc4, 0x7, 0xa5, 0xa7, 0x45, 0xf5, 0x85, 0xf5, 0x2c, 0xb7,
-0x7, 0x30, 0x32, 0xac, 0xb6, 0x7, 0xcc, 0xb7, 0x7, 0xf0, 0x2a, 0xb9, 0x37, 0x4, 0xc5, 0xb6,
-0xd0, 0x23, 0xb9, 0x55, 0x4, 0xc5, 0xb7, 0xd0, 0x1c, 0xee, 0xb6, 0x7, 0xad, 0xc4, 0x7, 0x30,
-0x14, 0xa0, 0x0, 0x20, 0xd9, 0x7, 0xea, 0x24, 0x93, 0x30, 0x2, 0xa5, 0xa7, 0xc5, 0xa7, 0xd0,
-0x4, 0xc6, 0xb1, 0x91, 0xb6, 0xe6, 0xb6, 0xd0, 0x2, 0xe6, 0xb7, 0xee, 0xf5, 0x3, 0xd0, 0xb2,
-0xee, 0xf6, 0x3, 0xd0, 0xad, 0x20, 0xec, 0xe6, 0xa9, 0x0, 0x85, 0x90, 0xa5, 0xf8, 0xa6, 0xb1,
-0xf0, 0x14, 0x24, 0x93, 0x30, 0x8, 0xa9, 0x60, 0x85, 0x90, 0x38, 0x4c, 0xc8, 0xe8, 0xa9, 0x10,
-0x85, 0x90, 0x38, 0x4c, 0xc8, 0xe8, 0x18, 0x20, 0xb0, 0xe3, 0x20, 0x78, 0xe3, 0x60, 0x33, 0x3,
-0x41, 0xff, 0xa0, 0x3, 0xb9, 0xcf, 0xe8, 0x99, 0xc0, 0x7, 0x88, 0x10, 0xf7, 0x8c, 0xb0, 0x7,
-0xa5, 0x93, 0x48, 0xc8, 0x84, 0x93, 0x8c, 0x39, 0x5, 0x20, 0x4b, 0xe7, 0x68, 0x85, 0x93, 0x4c,
-0xc3, 0xe3, 0xa5, 0xb2, 0x8d, 0xc0, 0x7, 0xa5, 0xb3, 0x8d, 0xc1, 0x7, 0x18, 0xa5, 0x9d, 0xe5,
-0xb2, 0x49, 0xff, 0x8d, 0xc2, 0x7, 0xa5, 0x9e, 0xe5, 0xb3, 0x49, 0xff, 0x8d, 0xc3, 0x7, 0x18,
-0x6e, 0xb0, 0x7, 0x4c, 0x4b, 0xe7, 0x2, 0x1, 0x2, 0x2, 0xd, 0x2, 0xa2, 0x5, 0xbd, 0x17,
-0xe9, 0x9d, 0xb8, 0x7, 0xca, 0x10, 0xf7, 0xa9, 0xa, 0x8d, 0xc5, 0x7, 0x20, 0xfd, 0xe5, 0xb0,
-0xf6, 0x50, 0xf4, 0xce, 0xc5, 0x7, 0xd0, 0xf4, 0xa9, 0x0, 0x85, 0xba, 0x85, 0xbb, 0xa0, 0x10,
-0xa2, 0x0, 0xa9, 0x10, 0x24, 0x1, 0xf0, 0xfc, 0x24, 0x1, 0xd0, 0xfc, 0xe8, 0xf0, 0xe9, 0x24,
-0x1, 0xf0, 0xf9, 0xe8, 0xf0, 0xe2, 0x24, 0x1, 0xd0, 0xf9, 0x8a, 0x18, 0x65, 0xba, 0x85, 0xba,
-0xa9, 0x0, 0x65, 0xbb, 0x85, 0xbb, 0x88, 0xd0, 0xd7, 0x46, 0xbb, 0x66, 0xba, 0x46, 0xbb, 0x66,
-0xba, 0xa5, 0xba, 0x8d, 0xb8, 0x7, 0xa, 0x8d, 0xba, 0x7, 0x8d, 0xbc, 0x7, 0xa5, 0xbb, 0x8d,
-0xb9, 0x7, 0x2a, 0x8d, 0xbb, 0x7, 0x8d, 0xbd, 0x7, 0x20, 0xfd, 0xe5, 0xb0, 0xfb, 0x70, 0xf9,
-0x10, 0xf7, 0x20, 0xfd, 0xe5, 0xb0, 0xf2, 0x70, 0xf0, 0x30, 0xee, 0x18, 0x6e, 0xcc, 0x7, 0x20,
-0x3, 0xe4, 0xa9, 0x3, 0x8d, 0xc6, 0x7, 0x20, 0xf6, 0xe6, 0x90, 0x3, 0xce, 0xc6, 0x7, 0x20,
-0xec, 0xe6, 0x90, 0x8, 0xce, 0xc6, 0x7, 0xd0, 0x3, 0x4c, 0x1d, 0xe9, 0xa5, 0xa7, 0x29, 0xf,
-0xc9, 0x1, 0xd0, 0xeb, 0xa5, 0xa7, 0x29, 0x80, 0x85, 0xf7, 0x60, 0x20, 0xd3, 0xe8, 0xb0, 0x4d,
-0xa5, 0xf8, 0xc9, 0x5, 0xf0, 0x43, 0xc9, 0x1, 0xf0, 0x8, 0xc9, 0x3, 0xf0, 0x4, 0xc9, 0x4,
-0xd0, 0xe9, 0xaa, 0x24, 0x9a, 0x10, 0x2f, 0x20, 0xd8, 0xfb, 0xd, 0x46, 0x4f, 0x55, 0x4e, 0x44,
-0x20, 0x0, 0xa0, 0x4, 0xb1, 0xb6, 0x20, 0xd2, 0xff, 0xc8, 0xc0, 0x15, 0xd0, 0xf6, 0xa2, 0xff,
-0x20, 0xea, 0xe2, 0x20, 0xea, 0xe2, 0xca, 0xf0, 0xd, 0xa9, 0x7f, 0x20, 0x70, 0xdb, 0xc9, 0x7f,
-0xf0, 0xb, 0xc9, 0xdf, 0xd0, 0xea, 0x18, 0xa5, 0xf8, 0x60, 0xea, 0xea, 0xea, 0xa9, 0x0, 0x60,
-0x20, 0xcc, 0xe9, 0xb0, 0x2d, 0xc9, 0x5, 0xf0, 0x2b, 0xa0, 0xff, 0xc8, 0xc4, 0xab, 0xf0, 0x26,
-0xa9, 0xaf, 0x8d, 0xdf, 0x7, 0x20, 0xd9, 0x7, 0xd9, 0x37, 0x3, 0xf0, 0xee, 0x46, 0xf8, 0x90,
-0xdf, 0xa0, 0xff, 0x8c, 0xc3, 0x7, 0x88, 0x8c, 0xc2, 0x7, 0xa0, 0x1, 0x20, 0xd5, 0xe8, 0x4c,
-0x21, 0xea, 0xa9, 0x0, 0x38, 0x60, 0x18, 0xa5, 0xf8, 0x60, 0xad, 0xd4, 0x7, 0x29, 0x10, 0xf0,
-0x32, 0xad, 0x10, 0xfd, 0x29, 0x2, 0xf0, 0x2b, 0xa2, 0x0, 0x2c, 0xd0, 0x7, 0x10, 0x9, 0xad,
-0xcf, 0x7, 0x8e, 0xd0, 0x7, 0x4c, 0x89, 0xea, 0x2c, 0xce, 0x7, 0x10, 0x16, 0x2c, 0xd6, 0x7,
-0x30, 0x11, 0xad, 0xcd, 0x7, 0x8e, 0xce, 0x7, 0x8d, 0x0, 0xfd, 0xad, 0xd4, 0x7, 0x29, 0xef,
-0x8d, 0xd4, 0x7, 0x60, 0xad, 0xd4, 0x7, 0x29, 0x8, 0xf0, 0x54, 0xad, 0xd4, 0x7, 0x29, 0xf7,
-0x8d, 0xd4, 0x7, 0xad, 0x0, 0xfd, 0xf0, 0x19, 0x8d, 0xd5, 0x7, 0xc5, 0xfc, 0xd0, 0x7, 0xa9,
-0x0, 0x8d, 0xd6, 0x7, 0xf0, 0x39, 0xc5, 0xfd, 0xd0, 0x7, 0xa9, 0xff, 0x8d, 0xd6, 0x7, 0xd0,
-0x2e, 0xad, 0xd3, 0x7, 0xc9, 0x3f, 0xf0, 0x27, 0xc9, 0x38, 0xd0, 0xf, 0xa5, 0xfd, 0xf0, 0xb,
-0x8d, 0xcf, 0x7, 0xa9, 0xff, 0x8d, 0xd0, 0x7, 0x8d, 0xd7, 0x7, 0xae, 0xd1, 0x7, 0xe8, 0x8a,
-0x29, 0x3f, 0x8d, 0xd1, 0x7, 0xaa, 0xad, 0xd5, 0x7, 0x9d, 0xf7, 0x3, 0xee, 0xd3, 0x7, 0x60,
-0xad, 0xd3, 0x7, 0xf0, 0x34, 0x8, 0x78, 0xae, 0xd2, 0x7, 0xe8, 0x8a, 0x29, 0x3f, 0x8d, 0xd2,
-0x7, 0x28, 0xaa, 0xbd, 0xf7, 0x3, 0x48, 0xce, 0xd3, 0x7, 0xad, 0xd3, 0x7, 0xc9, 0x8, 0xd0,
-0x19, 0x2c, 0xd7, 0x7, 0x10, 0x14, 0xa5, 0xfc, 0xf0, 0x10, 0x8d, 0xcf, 0x7, 0x38, 0x6e, 0xd0,
-0x7, 0x4e, 0xd7, 0x7, 0x2c, 0xd8, 0x7, 0x10, 0xb, 0x48, 0xad, 0xd4, 0x7, 0x29, 0x4f, 0x49,
-0x40, 0x85, 0x90, 0x68, 0x18, 0x60, 0x2c, 0xce, 0x7, 0x30, 0xfb, 0x8d, 0xcd, 0x7, 0x38, 0x6e,
-0xce, 0x7, 0x4c, 0x2a, 0xeb, 0xa9, 0x0, 0xa2, 0xb, 0x9d, 0xcd, 0x7, 0xca, 0x10, 0xfa, 0x8d,
-0x1, 0xfd, 0x85, 0xfc, 0x85, 0xfd, 0x60, 0xd, 0x49, 0x2f, 0x4f, 0x20, 0x45, 0x52, 0x52, 0x4f,
-0x52, 0x20, 0xa3, 0xd, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x49, 0x4e, 0x47, 0xa0, 0x46, 0x4f,
-0x52, 0xa0, 0xd, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x50, 0x4c, 0x41, 0x59, 0x20, 0x4f, 0x4e,
-0x20, 0x54, 0x41, 0x50, 0xc5, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x52, 0x45, 0x43, 0x4f, 0x52,
-0x44, 0x20, 0x26, 0x20, 0x50, 0x4c, 0x41, 0x59, 0x20, 0x4f, 0x4e, 0x20, 0x54, 0x41, 0x50, 0xc5,
-0xd, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0xc7, 0xd, 0x53, 0x41, 0x56, 0x49, 0x4e, 0x47, 0xa0,
-0xd, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x49, 0x4e, 0xc7, 0xd, 0x46, 0x4f, 0x55, 0x4e, 0x44,
-0xa0, 0xd, 0x4f, 0x4b, 0x8d, 0x24, 0x9a, 0x10, 0xd, 0xb9, 0x58, 0xeb, 0x8, 0x29, 0x7f, 0x20,
-0xd2, 0xff, 0xc8, 0x28, 0x10, 0xf3, 0x18, 0x60, 0xa5, 0x98, 0xd0, 0x1a, 0xa5, 0xef, 0xd, 0x5d,
-0x5, 0xf0, 0x3e, 0x78, 0x4c, 0xc1, 0xd8, 0xa5, 0x98, 0xd0, 0xb, 0xa5, 0xca, 0x85, 0xc5, 0xa5,
-0xcd, 0x85, 0xc4, 0x4c, 0x65, 0xd9, 0xc9, 0x3, 0xd0, 0x1f, 0x5, 0xc7, 0x85, 0xc7, 0xad, 0xe8,
-0x7, 0x85, 0xc3, 0x4c, 0x65, 0xd9, 0x20, 0xba, 0xfb, 0xc9, 0x1, 0xd0, 0x6, 0x20, 0x24, 0xec,
-0x4c, 0xc4, 0xfb, 0x20, 0xf1, 0xea, 0x4c, 0xc4, 0xfb, 0x90, 0xeb, 0xa5, 0x90, 0xf0, 0x6b, 0xa9,
-0xd, 0x18, 0x60, 0xac, 0x39, 0x5, 0xc0, 0xbf, 0x90, 0x6, 0x20, 0xd3, 0xe8, 0x90, 0xf4, 0x60,
-0xac, 0x39, 0x5, 0xb1, 0xb6, 0x48, 0xc8, 0xc0, 0xbf, 0xb0, 0x9, 0xb1, 0xb6, 0xd0, 0x5, 0xa9,
-0x40, 0x20, 0x1e, 0xf4, 0xee, 0x39, 0x5, 0x68, 0x18, 0x60, 0x48, 0xa5, 0x99, 0xc9, 0x3, 0xd0,
-0x4, 0x68, 0x4c, 0x49, 0xdc, 0x90, 0x4, 0x68, 0x4c, 0xdf, 0xec, 0x20, 0xb7, 0xfb, 0xc9, 0x1,
-0xd0, 0x21, 0xac, 0x39, 0x5, 0xc0, 0xbf, 0x90, 0xb, 0x20, 0x35, 0xe5, 0xb0, 0xf, 0xa9, 0x2,
-0x85, 0xf8, 0xa0, 0x0, 0x68, 0x91, 0xb6, 0xc8, 0x8c, 0x39, 0x5, 0x90, 0xa, 0x68, 0xa9, 0x0,
-0x4c, 0xc4, 0xfb, 0x68, 0x20, 0x37, 0xeb, 0x4c, 0xc1, 0xfb, 0x86, 0xba, 0x24, 0xf9, 0x70, 0x5,
-0xa6, 0xba, 0x4c, 0x52, 0xe2, 0xa5, 0xf9, 0x29, 0x30, 0xaa, 0xa9, 0x84, 0x9d, 0xc0, 0xfe, 0xbd,
-0xc2, 0xfe, 0x30, 0xfb, 0xa9, 0x0, 0x9d, 0xc3, 0xfe, 0x9d, 0xc2, 0xfe, 0xbd, 0xc2, 0xfe, 0x10,
-0xfb, 0xbd, 0xc1, 0xfe, 0x29, 0x3, 0xc9, 0x3, 0xd0, 0x2, 0xa9, 0x40, 0x20, 0x1e, 0xf4, 0xbd,
-0xc0, 0xfe, 0x48, 0xa9, 0x40, 0x9d, 0xc2, 0xfe, 0xbd, 0xc2, 0xfe, 0x30, 0xfb, 0xa9, 0xff, 0x9d,
-0xc3, 0xfe, 0xa9, 0x0, 0x9d, 0xc0, 0xfe, 0x9d, 0xc2, 0xfe, 0x4c, 0xd4, 0xed, 0xea, 0x24, 0xf9,
-0x30, 0x3, 0x4c, 0x1d, 0xe2, 0x48, 0x8d, 0xe8, 0x5, 0xa9, 0x83, 0x86, 0xba, 0x48, 0xa5, 0xf9,
-0x29, 0x30, 0xaa, 0x68, 0x9d, 0xc0, 0xfe, 0xbd, 0xc2, 0xfe, 0x30, 0xfb, 0xad, 0xe8, 0x5, 0x9d,
-0xc0, 0xfe, 0xa9, 0x0, 0x9d, 0xc2, 0xfe, 0xbd, 0xc2, 0xfe, 0x10, 0xfb, 0xbd, 0xc1, 0xfe, 0x29,
-0x3, 0x20, 0x1e, 0xf4, 0x4c, 0xdb, 0xed, 0x20, 0xe8, 0xee, 0xf0, 0x3, 0x4c, 0x79, 0xf2, 0x20,
-0xf8, 0xee, 0xf0, 0x11, 0xc9, 0x3, 0xf0, 0xd, 0xb0, 0xf, 0xc9, 0x2, 0xd0, 0x28, 0x20, 0x25,
-0xeb, 0xb0, 0x5, 0xa5, 0xae, 0x85, 0x98, 0x18, 0x60, 0xaa, 0x20, 0xfa, 0xed, 0x24, 0x90, 0x30,
-0x12, 0xa5, 0xad, 0x10, 0x6, 0x20, 0x13, 0xee, 0x4c, 0x4f, 0xed, 0x20, 0x1a, 0xee, 0x8a, 0x24,
-0x90, 0x10, 0xe2, 0x4c, 0x7f, 0xf2, 0xa6, 0xad, 0xe0, 0x60, 0xf0, 0xd9, 0x4c, 0x82, 0xf2, 0x20,
-0xe8, 0xee, 0xf0, 0x3, 0x4c, 0x79, 0xf2, 0x20, 0xf8, 0xee, 0xd0, 0x3, 0x4c, 0x85, 0xf2, 0xc9,
-0x3, 0xf0, 0xd, 0xb0, 0xf, 0xc9, 0x2, 0xd0, 0x27, 0x20, 0x25, 0xeb, 0xb0, 0x5, 0xa5, 0xae,
-0x85, 0x99, 0x18, 0x60, 0xaa, 0x20, 0x2c, 0xee, 0x24, 0x90, 0x30, 0x11, 0xa5, 0xad, 0x10, 0x5,
-0x20, 0x45, 0xee, 0xd0, 0x3, 0x20, 0x4d, 0xee, 0x8a, 0x24, 0x90, 0x10, 0xe3, 0x4c, 0x7f, 0xf2,
-0xa6, 0xad, 0xe0, 0x60, 0xf0, 0xc6, 0xd0, 0xd8, 0x48, 0x86, 0xba, 0xa2, 0x30, 0xa5, 0xae, 0xc9,
-0x8, 0xf0, 0x6, 0xc9, 0x9, 0xd0, 0x17, 0xa2, 0x0, 0xa9, 0x55, 0x9d, 0xc0, 0xfe, 0x5d, 0xc0,
-0xfe, 0xd0, 0xb, 0xbd, 0xc1, 0xfe, 0x29, 0x2, 0xd0, 0x4, 0x86, 0xf9, 0x18, 0x24, 0x38, 0xa6,
-0xba, 0x68, 0x60, 0xbd, 0xc2, 0xfe, 0x10, 0xfb, 0x30, 0x5, 0xa9, 0x0, 0x9d, 0xc0, 0xfe, 0xa9,
-0x40, 0x9d, 0xc2, 0xfe, 0xa6, 0xba, 0x68, 0x18, 0x60, 0x8d, 0xf2, 0xfe, 0x8d, 0xc5, 0xfe, 0x8d,
-0xc2, 0xfe, 0xca, 0x8e, 0xc3, 0xfe, 0x4c, 0xea, 0xcf, 0x20, 0xa9, 0xed, 0x90, 0x3, 0x4c, 0x53,
-0xe1, 0x48, 0xa9, 0x40, 0x8d, 0xe8, 0x5, 0xa5, 0xf9, 0x9, 0x40, 0x85, 0xf9, 0xa9, 0x81, 0x4c,
-0xec, 0xec, 0x24, 0xf9, 0x70, 0x35, 0x4c, 0xc, 0xe2, 0x24, 0xf9, 0x70, 0x3, 0x4c, 0x3, 0xe2,
-0x48, 0xea, 0xea, 0x8d, 0xe8, 0x5, 0xa9, 0x82, 0x4c, 0xec, 0xec, 0x20, 0xa9, 0xed, 0x90, 0x3,
-0x4c, 0x56, 0xe1, 0x48, 0xa9, 0x20, 0x8d, 0xe8, 0x5, 0xa5, 0xf9, 0x9, 0x80, 0x85, 0xf9, 0xa9,
-0x81, 0x4c, 0xec, 0xec, 0x24, 0xf9, 0x30, 0x3, 0x4c, 0xfc, 0xe1, 0x60, 0x24, 0xf9, 0x30, 0x3,
-0x4c, 0xf7, 0xe1, 0x48, 0x8d, 0xe8, 0x5, 0xa9, 0x82, 0x4c, 0xec, 0xec, 0x66, 0xba, 0x20, 0xed,
-0xee, 0xf0, 0x2, 0x18, 0x60, 0x20, 0xf8, 0xee, 0x8a, 0x48, 0xa5, 0xae, 0xf0, 0x5b, 0xc9, 0x3,
-0xf0, 0x57, 0xb0, 0x40, 0xc9, 0x2, 0xd0, 0x8, 0x8, 0x78, 0x20, 0x46, 0xeb, 0x28, 0xf0, 0x49,
-0xa5, 0xad, 0x29, 0xf, 0xf0, 0x43, 0xac, 0x39, 0x5, 0xc0, 0xbf, 0x90, 0xe, 0x20, 0x35, 0xe5,
-0xb0, 0x12, 0xa9, 0x2, 0x85, 0xf8, 0xa0, 0x0, 0x8c, 0x39, 0x5, 0xa9, 0x0, 0x91, 0xb6, 0x20,
-0x35, 0xe5, 0x90, 0x4, 0x68, 0xa9, 0x0, 0x60, 0xa5, 0xad, 0xc9, 0x62, 0xd0, 0x1b, 0x20, 0xf0,
-0xe5, 0x4c, 0xca, 0xee, 0x24, 0xba, 0x10, 0xe, 0xa5, 0xae, 0xc9, 0x8, 0x90, 0x8, 0xa5, 0xad,
-0x29, 0xf, 0xc9, 0xf, 0xf0, 0x3, 0x20, 0x11, 0xf2, 0x68, 0xaa, 0xc6, 0x97, 0xe4, 0x97, 0xf0,
-0x14, 0xa4, 0x97, 0xb9, 0x9, 0x5, 0x9d, 0x9, 0x5, 0xb9, 0x13, 0x5, 0x9d, 0x13, 0x5, 0xb9,
-0x1d, 0x5, 0x9d, 0x1d, 0x5, 0x18, 0x60, 0xa9, 0x0, 0x85, 0x90, 0x8a, 0xa6, 0x97, 0xca, 0x30,
-0x15, 0xdd, 0x9, 0x5, 0xd0, 0xf8, 0x60, 0xbd, 0x9, 0x5, 0x85, 0xac, 0xbd, 0x1d, 0x5, 0x85,
-0xad, 0xbd, 0x13, 0x5, 0x85, 0xae, 0x60, 0xa9, 0x0, 0x85, 0x97, 0xa2, 0x3, 0xe4, 0x99, 0xb0,
-0x3, 0x20, 0x23, 0xef, 0xe4, 0x98, 0xb0, 0x3, 0x20, 0x3b, 0xef, 0x86, 0x99, 0xa9, 0x0, 0x85,
-0x98, 0x60, 0x24, 0xf9, 0x30, 0x3, 0x4c, 0x3d, 0xe2, 0x48, 0xa9, 0x3f, 0x8d, 0xe8, 0x5, 0xa5,
-0xf9, 0x29, 0x7f, 0x85, 0xf9, 0xa9, 0x81, 0x4c, 0xec, 0xec, 0x24, 0xf9, 0x70, 0x3, 0x4c, 0x2f,
-0xe2, 0x48, 0xa9, 0x5f, 0x8d, 0xe8, 0x5, 0xa5, 0xf9, 0x29, 0xbf, 0x85, 0xf9, 0xa9, 0x81, 0x4c,
-0xec, 0xec, 0xa6, 0xac, 0x20, 0xe8, 0xee, 0xd0, 0x3, 0x4c, 0x76, 0xf2, 0xa6, 0x97, 0xe0, 0xa,
-0x90, 0x3, 0x4c, 0x73, 0xf2, 0xe6, 0x97, 0xa5, 0xac, 0x9d, 0x9, 0x5, 0xa5, 0xad, 0x9, 0x60,
-0x85, 0xad, 0x9d, 0x1d, 0x5, 0xa5, 0xae, 0x9d, 0x13, 0x5, 0xf0, 0x9, 0xc9, 0x3, 0xf0, 0x5,
-0x90, 0x5, 0x20, 0x5, 0xf0, 0x18, 0x60, 0xc9, 0x2, 0xd0, 0x2c, 0x20, 0x46, 0xeb, 0xaa, 0xe8,
-0xf0, 0xb, 0x8e, 0x3, 0xfd, 0xec, 0x3, 0xfd, 0xf0, 0xf5, 0x4c, 0x7f, 0xf2, 0x38, 0x6e, 0xd8,
-0x7, 0xa9, 0xaf, 0x8d, 0xdf, 0x7, 0xa0, 0x0, 0x20, 0xd9, 0x7, 0x8d, 0x3, 0xfd, 0xc8, 0x20,
-0xd9, 0x7, 0x8d, 0x2, 0xfd, 0x18, 0x60, 0xa5, 0xad, 0x29, 0xf, 0xd0, 0x2c, 0x20, 0x1b, 0xe3,
-0xb0, 0x26, 0x20, 0x60, 0xf1, 0xa5, 0xab, 0xf0, 0xa, 0x20, 0x21, 0xea, 0x90, 0x10, 0xf0, 0x18,
-0x4c, 0x7c, 0xf2, 0x20, 0xcc, 0xe9, 0xf0, 0x10, 0xb0, 0xf6, 0xc9, 0x5, 0xf0, 0xf2, 0xa0, 0xbf,
-0x8c, 0x39, 0x5, 0xa9, 0x2, 0x85, 0xf8, 0x18, 0x60, 0x20, 0x19, 0xe3, 0xb0, 0xfa, 0xa9, 0x4,
-0x85, 0xf8, 0x20, 0x6c, 0xe5, 0xb0, 0xc, 0xa9, 0x2, 0x85, 0xf8, 0xa0, 0x0, 0x8c, 0x39, 0x5,
-0x8c, 0x37, 0x5, 0x60, 0xa5, 0xad, 0x30, 0xdf, 0xa4, 0xab, 0xf0, 0xdb, 0xa9, 0x0, 0x85, 0x90,
-0xa5, 0xae, 0x20, 0x2c, 0xee, 0x24, 0x90, 0x30, 0xb, 0xa5, 0xad, 0x9, 0xf0, 0x20, 0x4d, 0xee,
-0xa5, 0x90, 0x10, 0x5, 0x68, 0x68, 0x4c, 0x7f, 0xf2, 0xa5, 0xab, 0xf0, 0x12, 0xa0, 0x0, 0xa9,
-0xaf, 0x8d, 0xdf, 0x7, 0x20, 0xd9, 0x7, 0x20, 0xdf, 0xec, 0xc8, 0xc4, 0xab, 0xd0, 0xf0, 0x4c,
-0x23, 0xf2, 0x86, 0xb4, 0x84, 0xb5, 0x6c, 0x2e, 0x3, 0x85, 0x93, 0xa9, 0x0, 0x85, 0x90, 0xa5,
-0xae, 0xd0, 0x3, 0x4c, 0x8b, 0xf2, 0xc9, 0x3, 0xf0, 0xf9, 0xb0, 0x7, 0xc9, 0x2, 0xf0, 0xf3,
-0x4c, 0xf0, 0xf0, 0xa4, 0xab, 0xd0, 0x3, 0x4c, 0x88, 0xf2, 0xa6, 0xad, 0x20, 0x60, 0xf1, 0xa9,
-0x60, 0x85, 0xad, 0x20, 0x5, 0xf0, 0xa5, 0xae, 0x20, 0xfa, 0xed, 0xa5, 0xad, 0x20, 0x1a, 0xee,
-0x20, 0x8b, 0xec, 0x85, 0x9d, 0xa5, 0x90, 0x4a, 0x4a, 0xb0, 0x5c, 0x20, 0x8b, 0xec, 0x85, 0x9e,
-0x8a, 0xd0, 0x8, 0xa5, 0xb4, 0x85, 0x9d, 0xa5, 0xb5, 0x85, 0x9e, 0x20, 0x89, 0xf1, 0xa9, 0xfd,
-0x25, 0x90, 0x85, 0x90, 0x20, 0xe1, 0xff, 0xd0, 0x3, 0x4c, 0xff, 0xf1, 0x20, 0x8b, 0xec, 0xaa,
-0xa5, 0x90, 0x4a, 0x4a, 0xb0, 0xe8, 0x8a, 0xa4, 0x93, 0xf0, 0x18, 0xa0, 0x0, 0x8d, 0xc7, 0x7,
-0xa9, 0x9d, 0x8d, 0xdf, 0x7, 0x20, 0xd9, 0x7, 0xcd, 0xc7, 0x7, 0xf0, 0x8, 0xa9, 0x10, 0x20,
-0x1e, 0xf4, 0x2c, 0x91, 0x9d, 0xe6, 0x9d, 0xd0, 0x2, 0xe6, 0x9e, 0x24, 0x90, 0x50, 0xbf, 0x20,
-0x3b, 0xef, 0x20, 0x11, 0xf2, 0x90, 0x3, 0x4c, 0x7c, 0xf2, 0xa6, 0x9d, 0xa4, 0x9e, 0x60, 0x20,
-0x1b, 0xe3, 0xb0, 0xfa, 0x20, 0x60, 0xf1, 0xa5, 0xab, 0xf0, 0x9, 0x20, 0x21, 0xea, 0x90, 0xb,
-0xf0, 0xec, 0xb0, 0xe3, 0x20, 0xcc, 0xe9, 0xf0, 0xe5, 0xb0, 0xdc, 0xa5, 0xf8, 0xc9, 0x1, 0xf0,
-0x12, 0xc9, 0x3, 0xd0, 0xe2, 0xa0, 0x0, 0xb1, 0xb6, 0x85, 0xb4, 0xc8, 0xb1, 0xb6, 0x85, 0xb5,
-0x4c, 0x28, 0xf1, 0xa5, 0xad, 0xd0, 0xee, 0x38, 0xa0, 0x2, 0xb1, 0xb6, 0xa0, 0x0, 0xf1, 0xb6,
-0xaa, 0xa0, 0x3, 0xb1, 0xb6, 0xa0, 0x1, 0xf1, 0xb6, 0xa8, 0x18, 0x8a, 0x65, 0xb4, 0x85, 0x9d,
-0x98, 0x65, 0xb5, 0x85, 0x9e, 0xa5, 0xb4, 0x85, 0xb2, 0xa5, 0xb5, 0x85, 0xb3, 0x20, 0x89, 0xf1,
-0x20, 0xf3, 0xe8, 0x90, 0x95, 0xa9, 0x1d, 0x24, 0x93, 0x10, 0x93, 0xa9, 0x1c, 0xd0, 0x8f, 0xa5,
-0x9a, 0x10, 0x24, 0xa0, 0xc, 0x20, 0xca, 0xeb, 0xa5, 0xab, 0xf0, 0x1b, 0xa0, 0x17, 0x20, 0xca,
-0xeb, 0xa4, 0xab, 0xf0, 0x12, 0xa0, 0x0, 0xa9, 0xaf, 0x8d, 0xdf, 0x7, 0x20, 0xd9, 0x7, 0x20,
-0xd2, 0xff, 0xc8, 0xc4, 0xab, 0xd0, 0xf0, 0x60, 0xa0, 0x49, 0xa5, 0x93, 0xf0, 0x2, 0xa0, 0x59,
-0x4c, 0xc6, 0xeb, 0x86, 0x9d, 0x84, 0x9e, 0xaa, 0xb5, 0x0, 0x85, 0xb2, 0xb5, 0x1, 0x85, 0xb3,
-0x6c, 0x30, 0x3, 0xa5, 0xae, 0xd0, 0x3, 0x4c, 0x8b, 0xf2, 0xc9, 0x3, 0xf0, 0xf9, 0xc9, 0x2,
-0xf0, 0xf5, 0x90, 0x7f, 0xa9, 0x61, 0x85, 0xad, 0xa4, 0xab, 0xd0, 0x3, 0x4c, 0x88, 0xf2, 0x20,
-0x5, 0xf0, 0x20, 0x28, 0xf2, 0xa5, 0xae, 0x20, 0x2c, 0xee, 0xa5, 0xad, 0x20, 0x4d, 0xee, 0xa0,
-0x0, 0xa5, 0xb3, 0x85, 0x9c, 0xa5, 0xb2, 0x85, 0x9b, 0xa5, 0x9b, 0x20, 0xdf, 0xec, 0xa5, 0x9c,
-0x20, 0xdf, 0xec, 0x38, 0xa5, 0x9b, 0xe5, 0x9d, 0xa5, 0x9c, 0xe5, 0x9e, 0xb0, 0x1f, 0xa9, 0x9b,
-0x8d, 0xdf, 0x7, 0x20, 0xd9, 0x7, 0x20, 0xdf, 0xec, 0x20, 0xe1, 0xff, 0xd0, 0x7, 0x20, 0x11,
-0xf2, 0xa9, 0x0, 0x38, 0x60, 0xe6, 0x9b, 0xd0, 0xda, 0xe6, 0x9c, 0xd0, 0xd6, 0x20, 0x23, 0xef,
-0x24, 0xad, 0x30, 0x11, 0xa5, 0xae, 0x20, 0x2c, 0xee, 0xa5, 0xad, 0x29, 0xef, 0x9, 0xe0, 0x20,
-0x4d, 0xee, 0x20, 0x23, 0xef, 0x18, 0x60, 0xa5, 0x9a, 0x10, 0x38, 0xa0, 0x51, 0x20, 0xca, 0xeb,
-0x4c, 0x72, 0xf1, 0x20, 0x19, 0xe3, 0xb0, 0x29, 0x20, 0x28, 0xf2, 0xa2, 0x3, 0xa5, 0xad, 0x29,
-0x1, 0xd0, 0x2, 0xa2, 0x1, 0x86, 0xf8, 0x20, 0x6c, 0xe5, 0xb0, 0x15, 0xa9, 0x0, 0x85, 0xf8,
-0x20, 0xb0, 0xe5, 0xb0, 0xc, 0xa5, 0xad, 0x29, 0x2, 0xf0, 0x5, 0x20, 0xf0, 0xe5, 0xb0, 0x1,
-0x18, 0xa9, 0x0, 0x60, 0xa5, 0x91, 0xc9, 0x7f, 0xd0, 0x7, 0x8, 0x20, 0xcc, 0xff, 0x85, 0xef,
-0x28, 0x60, 0xa9, 0x1, 0x2c, 0xa9, 0x2, 0x2c, 0xa9, 0x3, 0x2c, 0xa9, 0x4, 0x2c, 0xa9, 0x5,
-0x2c, 0xa9, 0x6, 0x2c, 0xa9, 0x7, 0x2c, 0xa9, 0x8, 0x2c, 0xa9, 0x9, 0x48, 0x20, 0xcc, 0xff,
-0xa0, 0x0, 0x24, 0x9a, 0x50, 0xa, 0x20, 0xca, 0xeb, 0x68, 0x48, 0x9, 0x30, 0x20, 0xd2, 0xff,
-0x68, 0x38, 0x60, 0xa2, 0xff, 0x78, 0x9a, 0xd8, 0x20, 0xa6, 0xcf, 0x20, 0xb, 0xf3, 0x20, 0x11,
-0xcf, 0x8, 0x30, 0x7, 0xa9, 0xa5, 0xcd, 0x8, 0x5, 0xf0, 0x3, 0x20, 0x52, 0xf3, 0x20, 0xce,
-0xf2, 0x20, 0x4e, 0xd8, 0x28, 0x30, 0x3, 0x4c, 0x45, 0xf4, 0x4c, 0x0, 0x80, 0xa2, 0xeb, 0xa0,
-0xf2, 0x18, 0x86, 0xb8, 0x84, 0xb9, 0xa0, 0x1f, 0xb9, 0x12, 0x3, 0xb0, 0x2, 0xb1, 0xb8, 0x99,
-0x12, 0x3, 0x90, 0x2, 0x91, 0xb8, 0x88, 0x10, 0xef, 0x60, 0x42, 0xce, 0xe, 0xce, 0x4c, 0xf4,
-0x53, 0xef, 0x5d, 0xee, 0x18, 0xed, 0x60, 0xed, 0xc, 0xef, 0xe8, 0xeb, 0x4b, 0xec, 0x65, 0xf2,
-0xd9, 0xeb, 0x8, 0xef, 0x4c, 0xf4, 0x4a, 0xf0, 0xa4, 0xf1, 0xa9, 0xf, 0x85, 0x0, 0xa9, 0x8,
-0x85, 0x1, 0xa2, 0xff, 0x8e, 0x10, 0xfd, 0x8e, 0xf3, 0xfe, 0xe8, 0x8e, 0xf4, 0xfe, 0x8e, 0xf0,
-0xfe, 0xa9, 0x40, 0x8d, 0xf5, 0xfe, 0x20, 0xea, 0xed, 0xbd, 0x38, 0xf3, 0x9d, 0x0, 0xff, 0xe8,
-0xe0, 0x1a, 0xd0, 0xf5, 0x4c, 0x46, 0xeb, 0xf1, 0x39, 0x0, 0x0, 0x0, 0x0, 0x1b, 0x8, 0x0,
-0x0, 0x2, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xd0, 0x8, 0x71, 0x5b, 0x75, 0x77,
-0x6e, 0xa9, 0x0, 0xa8, 0x99, 0x2, 0x0, 0x99, 0x0, 0x2, 0x99, 0x0, 0x3, 0x99, 0x0, 0x4,
-0x99, 0x0, 0x7, 0xc8, 0xd0, 0xee, 0xa2, 0x8, 0x86, 0x9f, 0xbd, 0xf5, 0xff, 0x9d, 0xf5, 0xff,
-0xdd, 0xf5, 0x3f, 0xd0, 0x1, 0xc8, 0xdd, 0xf5, 0x7f, 0xd0, 0x2, 0xc6, 0x9f, 0xca, 0xd0, 0xea,
-0xc0, 0x8, 0xf0, 0x7, 0xa5, 0x9f, 0xd0, 0x8, 0xa0, 0x7f, 0x2c, 0xa0, 0x3f, 0xa2, 0xf6, 0x2c,
-0xa0, 0xfd, 0x18, 0x20, 0x2f, 0xf4, 0xa9, 0x10, 0x8d, 0x32, 0x5, 0xa2, 0x3a, 0xbd, 0xd1, 0xf3,
-0x9d, 0x5e, 0x5, 0xca, 0xd0, 0xf7, 0x8e, 0x5d, 0x5, 0xa2, 0xb, 0xbd, 0xb3, 0xcf, 0x9d, 0xd9,
-0x7, 0xca, 0x10, 0xf7, 0xa2, 0xf, 0xbd, 0x43, 0xe1, 0x9d, 0x13, 0x1, 0xca, 0x10, 0xf7, 0xa9,
-0xa5, 0x8d, 0x8, 0x5, 0xa9, 0x4, 0x8d, 0xfa, 0x7, 0xa9, 0x18, 0x8d, 0xfb, 0x7, 0x60, 0xea,
-0xea, 0x7, 0x6, 0xa, 0x7, 0x6, 0x4, 0x5, 0x5, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43,
-0x44, 0x4c, 0x4f, 0x41, 0x44, 0x22, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x59, 0xd,
-0x53, 0x43, 0x4e, 0x43, 0x4c, 0x52, 0xd, 0x44, 0x53, 0x41, 0x56, 0x45, 0x22, 0x52, 0x55, 0x4e,
-0xd, 0x4c, 0x49, 0x53, 0x54, 0xd, 0x48, 0x45, 0x4c, 0x50, 0xd, 0x85, 0xab, 0x86, 0xaf, 0x84,
-0xb0, 0x60, 0x85, 0xac, 0x86, 0xae, 0x84, 0xad, 0x60, 0x85, 0x9a, 0xa5, 0x90, 0x5, 0x90, 0x85,
-0x90, 0x60, 0x8d, 0x35, 0x5, 0x60, 0x90, 0x6, 0xae, 0x33, 0x5, 0xac, 0x34, 0x5, 0x8e, 0x33,
-0x5, 0x8c, 0x34, 0x5, 0x60, 0x90, 0x6, 0xae, 0x31, 0x5, 0xac, 0x32, 0x5, 0x8e, 0x31, 0x5,
-0x8c, 0x32, 0x5, 0x60, 0xa2, 0x0, 0x8e, 0x54, 0x5, 0xf0, 0xc, 0xd8, 0xa2, 0x5, 0x68, 0x9d,
-0x52, 0x5, 0xca, 0x10, 0xf9, 0xa2, 0x9, 0x8e, 0xf4, 0x7, 0xa9, 0xc0, 0x85, 0x9a, 0xba, 0x8e,
-0x58, 0x5, 0xae, 0xf4, 0x7, 0x20, 0x66, 0xcf, 0xad, 0x6, 0xff, 0x9, 0x10, 0x8d, 0x6, 0xff,
-0xa9, 0x0, 0x85, 0xa1, 0x85, 0xa2, 0x58, 0xa2, 0xf, 0x20, 0x66, 0xcf, 0xad, 0x52, 0x5, 0x20,
-0x10, 0xfb, 0xa0, 0x0, 0xb9, 0x53, 0x5, 0x20, 0x5, 0xfb, 0xc8, 0xc0, 0x6, 0x90, 0xf5, 0xb0,
-0x3, 0x20, 0xb, 0xfb, 0x20, 0x3a, 0xfb, 0xa2, 0x0, 0x86, 0xf3, 0x20, 0xcf, 0xff, 0x9d, 0x0,
-0x2, 0xe8, 0xc9, 0xd, 0xd0, 0xf5, 0xca, 0x86, 0xf4, 0x20, 0x3f, 0xfb, 0xf0, 0xe6, 0xc9, 0x20,
-0xf0, 0xf7, 0xa2, 0xf, 0xdd, 0x70, 0xf5, 0xf0, 0x5, 0xca, 0x10, 0xf8, 0x30, 0xd3, 0xe0, 0xd,
-0xb0, 0xe, 0x8a, 0xa, 0xaa, 0xbd, 0x81, 0xf5, 0x48, 0xbd, 0x80, 0xf5, 0x48, 0x4c, 0xad, 0xfa,
-0x8d, 0x5b, 0x5, 0x4c, 0x6e, 0xf6, 0xb0, 0x8, 0x20, 0x5b, 0xfb, 0x20, 0xad, 0xfa, 0x90, 0x6,
-0xa9, 0xb, 0x85, 0xf1, 0xd0, 0xe, 0x20, 0x64, 0xfb, 0x4a, 0x66, 0xf1, 0x4a, 0x66, 0xf1, 0x4a,
-0x66, 0xf1, 0x85, 0xf2, 0x20, 0xe1, 0xff, 0xf0, 0xd, 0x20, 0x9a, 0xf5, 0xa9, 0x8, 0x20, 0x96,
-0xfb, 0x20, 0x72, 0xfb, 0xb0, 0xee, 0x4c, 0x95, 0xf4, 0xb0, 0xfb, 0xa5, 0xf1, 0xa4, 0xf2, 0x8d,
-0x53, 0x5, 0x8c, 0x52, 0x5, 0xa0, 0x0, 0x20, 0xad, 0xfa, 0xb0, 0xea, 0xa5, 0xf1, 0x99, 0x54,
-0x5, 0xc8, 0xc0, 0x5, 0x90, 0xf1, 0xb0, 0xde, 0xb0, 0x13, 0x20, 0x5b, 0xfb, 0xa0, 0x0, 0x20,
-0xad, 0xfa, 0xb0, 0x9, 0xa5, 0xf1, 0x91, 0xa1, 0xc8, 0xc0, 0x8, 0x90, 0xf2, 0x20, 0xd8, 0xfb,
-0x1b, 0x4f, 0x91, 0x0, 0x20, 0x9a, 0xf5, 0x4c, 0x95, 0xf4, 0xb0, 0xa, 0xa5, 0xf1, 0x8d, 0x53,
-0x5, 0xa5, 0xf2, 0x8d, 0x52, 0x5, 0xae, 0x58, 0x5, 0x9a, 0xa2, 0x0, 0xbd, 0x52, 0x5, 0x48,
-0xe8, 0xe0, 0x3, 0xd0, 0xf7, 0xae, 0x56, 0x5, 0xac, 0x57, 0x5, 0xad, 0x55, 0x5, 0x40, 0x58,
-0x4d, 0x52, 0x47, 0x54, 0x43, 0x44, 0x41, 0x2e, 0x48, 0x46, 0x3e, 0x3b, 0x4c, 0x53, 0x56, 0x2,
-0x80, 0xd6, 0xf4, 0x77, 0xf4, 0x4a, 0xf5, 0xd0, 0xf5, 0xcd, 0xf5, 0x23, 0xf7, 0x1e, 0xf9, 0x1e,
-0xf9, 0xd, 0xf6, 0x9, 0xf7, 0x28, 0xf5, 0x9, 0xf5, 0x20, 0x3a, 0xfb, 0xa9, 0x3e, 0x20, 0xd2,
-0xff, 0x20, 0xfb, 0xfa, 0xa0, 0x0, 0x20, 0x96, 0xcf, 0x20, 0x5, 0xfb, 0xc8, 0xc0, 0x8, 0x90,
-0xf5, 0x20, 0xd8, 0xfb, 0x3a, 0x12, 0x0, 0xa0, 0x0, 0x20, 0x96, 0xcf, 0x29, 0x7f, 0xc9, 0x20,
-0xb0, 0x2, 0xa9, 0x2e, 0x20, 0xd2, 0xff, 0xc8, 0xc0, 0x8, 0x90, 0xed, 0x60, 0xa9, 0x0, 0x2c,
-0xa9, 0x80, 0x85, 0xbb, 0x20, 0xa0, 0xfb, 0xb0, 0x30, 0x20, 0xad, 0xfa, 0xb0, 0x2b, 0x20, 0x3a,
-0xfb, 0xa0, 0x0, 0x20, 0x96, 0xcf, 0x24, 0xbb, 0x10, 0x2, 0x91, 0xf1, 0xd1, 0xf1, 0xf0, 0x8,
-0x20, 0xe1, 0xff, 0xf0, 0x11, 0x20, 0xfb, 0xfa, 0xe6, 0xf1, 0xd0, 0x2, 0xe6, 0xf2, 0x20, 0x94,
-0xfb, 0x20, 0x86, 0xfb, 0xb0, 0xdd, 0x4c, 0x95, 0xf4, 0x4c, 0x92, 0xf4, 0xea, 0x20, 0xa0, 0xfb,
-0xb0, 0xf7, 0xa0, 0x0, 0x20, 0x3f, 0xfb, 0xc9, 0x27, 0xd0, 0x12, 0x20, 0x3f, 0xfb, 0x99, 0x5d,
-0x2, 0xc8, 0x20, 0x3f, 0xfb, 0xf0, 0x1b, 0xc0, 0x20, 0xd0, 0xf3, 0xf0, 0x15, 0x8c, 0x5c, 0x5,
-0x20, 0xab, 0xfa, 0xa5, 0xf1, 0x99, 0x5d, 0x2, 0xc8, 0x20, 0xad, 0xfa, 0xb0, 0x4, 0xc0, 0x20,
-0xd0, 0xf1, 0x8c, 0x5b, 0x5, 0x20, 0x3a, 0xfb, 0xa2, 0x0, 0xa0, 0x0, 0x20, 0x96, 0xcf, 0xdd,
-0x5d, 0x2, 0xd0, 0xf, 0xc8, 0xe8, 0xec, 0x5b, 0x5, 0xd0, 0xf1, 0x20, 0xe1, 0xff, 0xf0, 0xa6,
-0x20, 0xfb, 0xfa, 0x20, 0x94, 0xfb, 0x20, 0x86, 0xfb, 0xb0, 0xdd, 0x90, 0x99, 0xa0, 0x1, 0x84,
-0xae, 0x84, 0xad, 0x88, 0x84, 0xab, 0x84, 0x90, 0x84, 0x93, 0xa9, 0x2, 0x85, 0xb0, 0xa9, 0x5d,
-0x85, 0xaf, 0x20, 0x3f, 0xfb, 0xf0, 0x5e, 0xc9, 0x20, 0xf0, 0xf7, 0xc9, 0x22, 0xd0, 0x17, 0xa6,
-0xf3, 0xe4, 0xf4, 0xb0, 0x50, 0xbd, 0x0, 0x2, 0xe8, 0xc9, 0x22, 0xf0, 0xd, 0x91, 0xaf, 0xe6,
-0xab, 0xc8, 0xc0, 0x11, 0x90, 0xeb, 0x4c, 0x92, 0xf4, 0xea, 0x86, 0xf3, 0x20, 0x3f, 0xfb, 0x20,
-0xad, 0xfa, 0xb0, 0x31, 0xa5, 0xf1, 0xf0, 0xee, 0xc9, 0x3, 0xf0, 0xea, 0x85, 0xae, 0x20, 0xad,
-0xfa, 0xb0, 0x22, 0x20, 0x5b, 0xfb, 0x20, 0xad, 0xfa, 0xb0, 0xdb, 0x20, 0x3a, 0xfb, 0xa6, 0xf1,
-0xa4, 0xf2, 0xad, 0x5b, 0x5, 0xc9, 0x53, 0xd0, 0xcd, 0xa9, 0x0, 0x85, 0xad, 0xa9, 0xa1, 0x20,
-0xd8, 0xff, 0x4c, 0x95, 0xf4, 0xad, 0x5b, 0x5, 0xc9, 0x56, 0xf0, 0x6, 0xc9, 0x4c, 0xd0, 0xb6,
-0xa9, 0x0, 0x20, 0xd5, 0xff, 0xa5, 0x90, 0x29, 0x10, 0xf0, 0xe7, 0xad, 0x5b, 0x5, 0xc9, 0x4c,
-0xf0, 0xa4, 0xa2, 0x2a, 0x20, 0x66, 0xcf, 0x30, 0xd9, 0x20, 0xa0, 0xfb, 0xb0, 0x98, 0x20, 0xad,
-0xfa, 0xb0, 0x93, 0xa0, 0x0, 0xa5, 0xf1, 0x91, 0xa1, 0x20, 0x94, 0xfb, 0x20, 0x86, 0xfb, 0xb0,
-0xf4, 0x90, 0xbf, 0xb0, 0x8, 0x20, 0x5b, 0xfb, 0x20, 0xad, 0xfa, 0x90, 0x6, 0xa9, 0x14, 0x85,
-0xf1, 0xd0, 0x3, 0x20, 0x64, 0xfb, 0x20, 0x3a, 0xfb, 0x20, 0xe1, 0xff, 0xf0, 0xa4, 0x20, 0x52,
-0xf7, 0xe6, 0xf6, 0xa5, 0xf6, 0x20, 0x96, 0xfb, 0xa5, 0xf6, 0x20, 0x74, 0xfb, 0xb0, 0xe7, 0x90,
-0x91, 0xa9, 0x2e, 0x20, 0xd2, 0xff, 0x20, 0x8, 0xfb, 0x20, 0xfb, 0xfa, 0x20, 0x8, 0xfb, 0xa0,
-0x0, 0x20, 0x96, 0xcf, 0x20, 0xd4, 0xf7, 0x48, 0xa6, 0xf6, 0xe8, 0xca, 0x10, 0xb, 0x20, 0xd8,
-0xfb, 0x20, 0x20, 0x20, 0x0, 0x4c, 0x80, 0xf7, 0xea, 0x20, 0x96, 0xcf, 0x20, 0x5, 0xfb, 0xc8,
-0xc0, 0x3, 0x90, 0xe7, 0x68, 0xa2, 0x3, 0x20, 0x1b, 0xf8, 0xa2, 0x6, 0xe0, 0x3, 0xd0, 0x14,
-0xa4, 0xf6, 0xf0, 0x10, 0xad, 0x4b, 0x5, 0xc9, 0xe8, 0x20, 0x96, 0xcf, 0xb0, 0x1d, 0x20, 0x10,
-0xfb, 0x88, 0xd0, 0xf0, 0xe, 0x4b, 0x5, 0x90, 0xe, 0xbd, 0x8e, 0xf8, 0x20, 0xd2, 0xff, 0xbd,
-0x94, 0xf8, 0xf0, 0x3, 0x20, 0xd2, 0xff, 0xca, 0xd0, 0xd2, 0x60, 0x20, 0xc8, 0xf7, 0x18, 0x69,
-0x1, 0xd0, 0x1, 0xe8, 0x4c, 0xff, 0xfa, 0xa6, 0xa2, 0xa8, 0x10, 0x1, 0xca, 0x65, 0xa1, 0x90,
-0x1, 0xe8, 0x60, 0xa8, 0x4a, 0x90, 0xb, 0x4a, 0xb0, 0x17, 0xc9, 0x22, 0xf0, 0x13, 0x29, 0x7,
-0x9, 0x80, 0x4a, 0xaa, 0xbd, 0x3d, 0xf8, 0xb0, 0x4, 0x4a, 0x4a, 0x4a, 0x4a, 0x29, 0xf, 0xd0,
-0x4, 0xa0, 0x80, 0xa9, 0x0, 0xaa, 0xbd, 0x81, 0xf8, 0x8d, 0x4b, 0x5, 0x29, 0x3, 0x85, 0xf6,
-0x98, 0x29, 0x8f, 0xaa, 0x98, 0xa0, 0x3, 0xe0, 0x8a, 0xf0, 0xb, 0x4a, 0x90, 0x8, 0x4a, 0x4a,
-0x9, 0x20, 0x88, 0xd0, 0xfa, 0xc8, 0x88, 0xd0, 0xf2, 0x60, 0xa8, 0xb9, 0x9b, 0xf8, 0x85, 0x9f,
-0xb9, 0xdb, 0xf8, 0x85, 0xa0, 0xa9, 0x0, 0xa0, 0x5, 0x6, 0xa0, 0x26, 0x9f, 0x2a, 0x88, 0xd0,
-0xf8, 0x69, 0x3f, 0x20, 0xd2, 0xff, 0xca, 0xd0, 0xec, 0x4c, 0x8, 0xfb, 0x40, 0x2, 0x45, 0x3,
-0xd0, 0x8, 0x40, 0x9, 0x30, 0x22, 0x45, 0x33, 0xd0, 0x8, 0x40, 0x9, 0x40, 0x2, 0x45, 0x33,
-0xd0, 0x8, 0x40, 0x9, 0x40, 0x2, 0x45, 0xb3, 0xd0, 0x8, 0x40, 0x9, 0x0, 0x22, 0x44, 0x33,
-0xd0, 0x8c, 0x44, 0x0, 0x11, 0x22, 0x44, 0x33, 0xd0, 0x8c, 0x44, 0x9a, 0x10, 0x22, 0x44, 0x33,
-0xd0, 0x8, 0x40, 0x9, 0x10, 0x22, 0x44, 0x33, 0xd0, 0x8, 0x40, 0x9, 0x62, 0x13, 0x78, 0xa9,
-0x0, 0x21, 0x81, 0x82, 0x0, 0x0, 0x59, 0x4d, 0x91, 0x92, 0x86, 0x4a, 0x85, 0x9d, 0x2c, 0x29,
-0x2c, 0x23, 0x28, 0x24, 0x59, 0x0, 0x58, 0x24, 0x24, 0x0, 0x1c, 0x8a, 0x1c, 0x23, 0x5d, 0x8b,
-0x1b, 0xa1, 0x9d, 0x8a, 0x1d, 0x23, 0x9d, 0x8b, 0x1d, 0xa1, 0x0, 0x29, 0x19, 0xae, 0x69, 0xa8,
-0x19, 0x23, 0x24, 0x53, 0x1b, 0x23, 0x24, 0x53, 0x19, 0xa1, 0x0, 0x1a, 0x5b, 0x5b, 0xa5, 0x69,
-0x24, 0x24, 0xae, 0xae, 0xa8, 0xad, 0x29, 0x0, 0x7c, 0x0, 0x15, 0x9c, 0x6d, 0x9c, 0xa5, 0x69,
-0x29, 0x53, 0x84, 0x13, 0x34, 0x11, 0xa5, 0x69, 0x23, 0xa0, 0xd8, 0x62, 0x5a, 0x48, 0x26, 0x62,
-0x94, 0x88, 0x54, 0x44, 0xc8, 0x54, 0x68, 0x44, 0xe8, 0x94, 0x0, 0xb4, 0x8, 0x84, 0x74, 0xb4,
-0x28, 0x6e, 0x74, 0xf4, 0xcc, 0x4a, 0x72, 0xf2, 0xa4, 0x8a, 0x0, 0xaa, 0xa2, 0xa2, 0x74, 0x74,
-0x74, 0x72, 0x44, 0x68, 0xb2, 0x32, 0xb2, 0x0, 0x22, 0x0, 0x1a, 0x1a, 0x26, 0x26, 0x72, 0x72,
-0x88, 0xc8, 0xc4, 0xca, 0x26, 0x48, 0x44, 0x44, 0xa2, 0xc8, 0xd, 0x20, 0x20, 0x20, 0x90, 0x3,
-0x4c, 0x92, 0xf4, 0x20, 0x5b, 0xfb, 0xa2, 0x0, 0x86, 0x78, 0x20, 0x3f, 0xfb, 0xd0, 0x7, 0xe0,
-0x0, 0xd0, 0x3, 0x4c, 0x95, 0xf4, 0xc9, 0x20, 0xf0, 0xec, 0x9d, 0x4c, 0x5, 0xe8, 0xe0, 0x3,
-0xd0, 0xe8, 0xca, 0x30, 0x12, 0xbd, 0x4c, 0x5, 0x38, 0xe9, 0x3f, 0xa0, 0x5, 0x4a, 0x66, 0x78,
-0x66, 0x77, 0x88, 0xd0, 0xf8, 0xf0, 0xeb, 0xa2, 0x2, 0x20, 0x3f, 0xfb, 0xf0, 0x1e, 0xc9, 0x20,
-0xf0, 0xf7, 0x20, 0x7d, 0xfa, 0xb0, 0xe, 0x20, 0x8b, 0xfa, 0xa4, 0xf1, 0x84, 0xf2, 0x85, 0xf1,
-0xa9, 0x30, 0x95, 0x77, 0xe8, 0x95, 0x77, 0xe8, 0xe0, 0xa, 0x90, 0xdd, 0x86, 0x9f, 0xa2, 0x0,
-0x8e, 0x4f, 0x5, 0xa2, 0x0, 0x8e, 0x50, 0x5, 0xad, 0x4f, 0x5, 0x20, 0xd4, 0xf7, 0xae, 0x4b,
-0x5, 0x86, 0xa0, 0xaa, 0xbd, 0xdb, 0xf8, 0x20, 0x5e, 0xfa, 0xbd, 0x9b, 0xf8, 0x20, 0x5e, 0xfa,
-0xa2, 0x6, 0xe0, 0x3, 0xd0, 0x13, 0xa4, 0xf6, 0xf0, 0xf, 0xad, 0x4b, 0x5, 0xc9, 0xe8, 0xa9,
-0x30, 0xb0, 0x1e, 0x20, 0x5b, 0xfa, 0x88, 0xd0, 0xf1, 0xe, 0x4b, 0x5, 0x90, 0xe, 0xbd, 0x8e,
-0xf8, 0x20, 0x5e, 0xfa, 0xbd, 0x94, 0xf8, 0xf0, 0x3, 0x20, 0x5e, 0xfa, 0xca, 0xd0, 0xd3, 0xf0,
-0x6, 0x20, 0x5b, 0xfa, 0x20, 0x5b, 0xfa, 0xa5, 0x9f, 0xcd, 0x50, 0x5, 0xf0, 0x3, 0x4c, 0x6a,
-0xfa, 0xa4, 0xf6, 0xf0, 0x34, 0xa5, 0xa0, 0xc9, 0x9d, 0xd0, 0x26, 0xa5, 0xf1, 0xe5, 0xa1, 0x8d,
-0x51, 0x5, 0xa5, 0xf2, 0xe5, 0xa2, 0x90, 0x9, 0xd0, 0x77, 0xae, 0x51, 0x5, 0x30, 0x72, 0x10,
-0x9, 0xa8, 0xc8, 0xd0, 0x6c, 0xae, 0x51, 0x5, 0x10, 0x67, 0xca, 0xca, 0x8a, 0xa4, 0xf6, 0xd0,
-0x3, 0xb9, 0xf0, 0x0, 0x91, 0xa1, 0x88, 0xd0, 0xf8, 0xad, 0x4f, 0x5, 0x91, 0xa1, 0x20, 0x35,
-0xfb, 0xa2, 0x28, 0x20, 0x66, 0xcf, 0x20, 0x5a, 0xf7, 0xe6, 0xf6, 0xa5, 0xf6, 0x20, 0x96, 0xfb,
-0xa9, 0x41, 0x8d, 0x27, 0x5, 0xa9, 0x20, 0x8d, 0x28, 0x5, 0x8d, 0x2d, 0x5, 0xa5, 0xa2, 0x20,
-0x20, 0xfb, 0x8d, 0x29, 0x5, 0x8e, 0x2a, 0x5, 0xa5, 0xa1, 0x20, 0x20, 0xfb, 0x8d, 0x2b, 0x5,
-0x8e, 0x2c, 0x5, 0xa9, 0x7, 0x85, 0xef, 0x4c, 0x95, 0xf4, 0x20, 0x5e, 0xfa, 0x8e, 0xf3, 0x7,
-0xae, 0x50, 0x5, 0xd5, 0x77, 0xf0, 0xd, 0x68, 0x68, 0xee, 0x4f, 0x5, 0xf0, 0x3, 0x4c, 0x84,
-0xf9, 0x4c, 0x92, 0xf4, 0xe8, 0x8e, 0x50, 0x5, 0xae, 0xf3, 0x7, 0x60, 0xc9, 0x41, 0x90, 0x3,
-0xc9, 0x47, 0x60, 0xc9, 0x30, 0x90, 0x16, 0xc9, 0x3a, 0x60, 0x20, 0xa0, 0xfa, 0xa, 0xa, 0xa,
-0xa, 0x8d, 0x5c, 0x5, 0x20, 0x3f, 0xfb, 0x20, 0xa0, 0xfa, 0xd, 0x5c, 0x5, 0x38, 0x60, 0xc9,
-0x3a, 0x8, 0x29, 0xf, 0x28, 0x90, 0x2, 0x69, 0x8, 0x60, 0xc6, 0xf3, 0xa9, 0x0, 0x85, 0xf1,
-0x85, 0xf2, 0x8d, 0xf4, 0x7, 0x20, 0x3f, 0xfb, 0xf0, 0x3a, 0xc9, 0x20, 0xf0, 0xf7, 0xc9, 0x20,
-0xf0, 0x2e, 0xc9, 0x2c, 0xf0, 0x2a, 0xc9, 0x30, 0x90, 0x2b, 0xc9, 0x47, 0xb0, 0x27, 0xc9, 0x3a,
-0x90, 0x6, 0xc9, 0x41, 0x90, 0x1f, 0xe9, 0x8, 0xe9, 0x2f, 0xa, 0xa, 0xa, 0xa, 0xa2, 0x4,
-0xa, 0x26, 0xf1, 0x26, 0xf2, 0xca, 0xd0, 0xf8, 0xee, 0xf4, 0x7, 0x20, 0x3f, 0xfb, 0xd0, 0xce,
-0xad, 0xf4, 0x7, 0x18, 0x60, 0x68, 0x68, 0x4c, 0x92, 0xf4, 0xa5, 0xa1, 0xa6, 0xa2, 0x48, 0x8a,
-0x20, 0x10, 0xfb, 0x68, 0x20, 0x10, 0xfb, 0xa9, 0x20, 0x2c, 0xa9, 0x3f, 0x4c, 0xd2, 0xff, 0x8e,
-0xf3, 0x7, 0x20, 0x20, 0xfb, 0x20, 0xd2, 0xff, 0x8a, 0xae, 0xf3, 0x7, 0x4c, 0xd2, 0xff, 0x48,
-0x20, 0x2a, 0xfb, 0xaa, 0x68, 0x4a, 0x4a, 0x4a, 0x4a, 0x29, 0xf, 0xc9, 0xa, 0x90, 0x2, 0x69,
-0x6, 0x69, 0x30, 0x60, 0xa9, 0x91, 0x20, 0xd2, 0xff, 0xa9, 0xd, 0x4c, 0xd2, 0xff, 0x8e, 0xf3,
-0x7, 0xa6, 0xf3, 0xe4, 0xf4, 0xb0, 0xf, 0xbd, 0x0, 0x2, 0xc9, 0x3a, 0xf0, 0x8, 0xe6, 0xf3,
-0x8, 0xae, 0xf3, 0x7, 0x28, 0x60, 0xa9, 0x0, 0xf0, 0xf6, 0xa5, 0xf1, 0x85, 0xa1, 0xa5, 0xf2,
-0x85, 0xa2, 0x60, 0x38, 0xa5, 0xf1, 0xe5, 0xa1, 0x85, 0xf1, 0xa5, 0xf2, 0xe5, 0xa2, 0x85, 0xf2,
-0x60, 0xa9, 0x1, 0x8d, 0xf3, 0x7, 0x38, 0xa5, 0xf1, 0xed, 0xf3, 0x7, 0x85, 0xf1, 0xa5, 0xf2,
-0xe9, 0x0, 0x85, 0xf2, 0x60, 0x38, 0xa5, 0x9f, 0xe9, 0x1, 0x85, 0x9f, 0xa5, 0xa0, 0xe9, 0x0,
-0x85, 0xa0, 0x60, 0xa9, 0x1, 0x18, 0x65, 0xa1, 0x85, 0xa1, 0x90, 0x2, 0xe6, 0xa2, 0x60, 0xb0,
-0x14, 0x20, 0x5b, 0xfb, 0x20, 0xad, 0xfa, 0xb0, 0xc, 0x20, 0x64, 0xfb, 0xa5, 0xf1, 0x85, 0x9f,
-0xa5, 0xf2, 0x85, 0xa0, 0x18, 0x60, 0x8d, 0x10, 0x1, 0x8e, 0x12, 0x1, 0x8c, 0x11, 0x1, 0x60,
-0xad, 0x10, 0x1, 0xae, 0x12, 0x1, 0xac, 0x11, 0x1, 0x60, 0x86, 0xfa, 0x20, 0x11, 0xcf, 0xa6,
-0xfa, 0x49, 0x80, 0xa, 0xa9, 0x0, 0x60, 0x48, 0x98, 0x48, 0x8a, 0x48, 0xba, 0xe8, 0xe8, 0xe8,
-0xe8, 0xbd, 0x0, 0x1, 0x85, 0xbc, 0xe8, 0xbd, 0x0, 0x1, 0x85, 0xbd, 0xe6, 0xbc, 0xd0, 0x2,
-0xe6, 0xbd, 0xa0, 0x0, 0xb1, 0xbc, 0xf0, 0x6, 0x20, 0xd2, 0xff, 0xc8, 0xd0, 0xf6, 0x98, 0xba,
-0xe8, 0xe8, 0xe8, 0xe8, 0x18, 0x65, 0xbc, 0x9d, 0x0, 0x1, 0xa9, 0x0, 0x65, 0xbd, 0xe8, 0x9d,
-0x0, 0x1, 0x68, 0xaa, 0x68, 0xa8, 0x68, 0x60, 0xa2, 0x0, 0xa0, 0xfd, 0x60, 0xa2, 0x3, 0x86,
-0x96, 0xa9, 0x0, 0x9d, 0xec, 0x5, 0xca, 0x10, 0xfa, 0xa6, 0x96, 0xbd, 0x7b, 0xfc, 0xaa, 0x9d,
-0xd0, 0xfd, 0xa0, 0x2, 0xb9, 0x7, 0x80, 0xd9, 0x56, 0xfc, 0xd0, 0x14, 0x88, 0x10, 0xf5, 0xad,
-0x6, 0x80, 0xa6, 0x96, 0x9d, 0xec, 0x5, 0xc9, 0x1, 0xd0, 0x5, 0x86, 0xfb, 0x20, 0x0, 0x80,
-0xc6, 0x96, 0x10, 0xd5, 0x60, 0x43, 0x42, 0x4d, 0x78, 0xa2, 0x3, 0xbd, 0xec, 0x5, 0xf0, 0x10,
-0x8a, 0x48, 0xbd, 0x7b, 0xfc, 0xaa, 0x9d, 0xd0, 0xfd, 0x86, 0xfb, 0x20, 0x0, 0x80, 0x68, 0xaa,
-0xca, 0xd0, 0xe8, 0x8d, 0xd0, 0xfd, 0x86, 0xfb, 0x58, 0x60, 0x0, 0x5, 0xa, 0xf, 0x9d, 0xd0,
-0xfd, 0xaa, 0xb1, 0xbe, 0x9d, 0xd0, 0xfd, 0x60, 0x48, 0x86, 0xfb, 0x9d, 0xd0, 0xfd, 0xae, 0xf3,
-0x5, 0xad, 0xf4, 0x5, 0x48, 0xad, 0xf2, 0x5, 0x28, 0x20, 0xb0, 0xfc, 0x8d, 0xf2, 0x5, 0x8,
-0x68, 0x8d, 0xf4, 0x5, 0x8e, 0xf3, 0x5, 0x68, 0x85, 0xfb, 0xaa, 0x9d, 0xd0, 0xfd, 0x60, 0x6c,
-0xf0, 0x5, 0x48, 0x8a, 0x48, 0x98, 0x48, 0x8d, 0xd0, 0xfd, 0x4c, 0x0, 0xce, 0xa6, 0xfb, 0x9d,
-0xd0, 0xfd, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xa6, 0xfb, 0x9d, 0xd0, 0xfd, 0x6c, 0xfe, 0x2,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0x4c, 0xc9, 0xfc, 0x4c, 0x59, 0xfc, 0x4c, 0x7f, 0xfc, 0x4c, 0x89, 0xfc, 0x4c, 0xb8, 0xfc, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4c, 0xc2, 0xb7, 0x4c, 0x49, 0xdc, 0x4c, 0xd8,
-0xfb, 0x4c, 0x45, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5e, 0x85,
-0x4c, 0x4e, 0xd8, 0x4c, 0xb, 0xf3, 0x4c, 0x52, 0xf3, 0x4c, 0xce, 0xf2, 0x4c, 0xd3, 0xf2, 0x4c,
-0x1a, 0xf4, 0x4c, 0x4d, 0xee, 0x4c, 0x1a, 0xee, 0x4c, 0x27, 0xf4, 0x4c, 0x36, 0xf4, 0x4c, 0x11,
-0xdb, 0x4c, 0x23, 0xf4, 0x4c, 0x8b, 0xec, 0x4c, 0xdf, 0xec, 0x4c, 0x3b, 0xef, 0x4c, 0x23, 0xef,
-0x4c, 0x2c, 0xee, 0x4c, 0xfa, 0xed, 0x4c, 0x1c, 0xf4, 0x4c, 0x13, 0xf4, 0x4c, 0xc, 0xf4, 0x6c,
-0x18, 0x3, 0x6c, 0x1a, 0x3, 0x6c, 0x1c, 0x3, 0x6c, 0x1e, 0x3, 0x6c, 0x20, 0x3, 0x6c, 0x22,
-0x3, 0x6c, 0x24, 0x3, 0x4c, 0x43, 0xf0, 0x4c, 0x94, 0xf1, 0x4c, 0x2d, 0xcf, 0x4c, 0x26, 0xcf,
-0x6c, 0x26, 0x3, 0x6c, 0x28, 0x3, 0x6c, 0x2a, 0x3, 0x4c, 0xf0, 0xce, 0x4c, 0x34, 0xd8, 0x4c,
-0x39, 0xd8, 0x4c, 0x19, 0xfc, 0x8d, 0x3e, 0xff, 0x4c, 0xa4, 0xf2, 0xf6, 0xff, 0xb3, 0xfc
-};
-
-/*
-
-  ROM image of the 3-plus-1 built-in software
-
-*/
-unsigned char plus4hi[]={
-0xa0,
-0x0, 0xa5, 0x3, 0x38, 0xed, 0x28, 0x7d, 0x85, 0x3, 0x91, 0xd8, 0xc8, 0xa5, 0x4, 0xe9, 0x0,
-0x85, 0x4, 0x91, 0xd8, 0x4c, 0xa0, 0x4e, 0x60, 0x20, 0x63, 0x4d, 0x20, 0x56, 0x4d, 0xa0, 0x0,
-0xb9, 0xb7, 0x75, 0x91, 0xd8, 0xc8, 0xc4, 0x7c, 0x90, 0xf6, 0x60, 0x20, 0x63, 0x4d, 0xa0, 0x0,
-0x20, 0x60, 0x43, 0xcd, 0x5d, 0x7f, 0xd0, 0xc, 0xc8, 0x20, 0x60, 0x43, 0xcd, 0x5e, 0x7f, 0xd0,
-0x3, 0xa9, 0x1, 0x60, 0xa9, 0x0, 0x60, 0xad, 0x2a, 0x7d, 0x38, 0xe5, 0x7c, 0x8d, 0x28, 0x7d,
-0x60, 0xa5, 0x7c, 0x38, 0xed, 0x2a, 0x7d, 0x8d, 0x28, 0x7d, 0x60, 0xa9, 0x0, 0x85, 0xe2, 0x20,
-0x7, 0x4e, 0xad, 0x26, 0x7d, 0x85, 0xd8, 0xad, 0x27, 0x7d, 0x85, 0xd9, 0xad, 0x28, 0x7d, 0x18,
-0x6d, 0x26, 0x7d, 0x85, 0xda, 0xad, 0x27, 0x7d, 0x69, 0x0, 0x85, 0xdb, 0xad, 0x27, 0x7d, 0xcd,
-0xd9, 0x31, 0xb0, 0x1, 0x60, 0xad, 0x26, 0x7d, 0xcd, 0xd8, 0x31, 0xb0, 0x1, 0x60, 0xa9, 0x1,
-0x85, 0xe2, 0x8d, 0x77, 0x7e, 0x60, 0x20, 0x7, 0x4f, 0x20, 0x11, 0x4f, 0xa5, 0xe2, 0xf0, 0x1,
-0x60, 0xa0, 0x0, 0x20, 0x60, 0x43, 0x91, 0xda, 0xc6, 0xd8, 0xa5, 0xd8, 0xc9, 0xff, 0xd0, 0x2,
-0xc6, 0xd9, 0xc6, 0xda, 0xa5, 0xda, 0xc9, 0xff, 0xd0, 0x2, 0xc6, 0xdb, 0xa5, 0xd8, 0xc5, 0x3,
-0xd0, 0xdf, 0xa5, 0xd9, 0xc5, 0x4, 0xd0, 0xd9, 0xad, 0x53, 0x7f, 0x18, 0x6d, 0x28, 0x7d, 0x8d,
-0x53, 0x7f, 0xad, 0x54, 0x7f, 0x69, 0x0, 0x8d, 0x54, 0x7f, 0x60, 0x20, 0x63, 0x4d, 0xa0, 0x0,
-0x20, 0x60, 0x43, 0x85, 0x3, 0xc8, 0x20, 0x60, 0x43, 0x85, 0x4, 0x20, 0x40, 0x46, 0xd0, 0x18,
-0xa0, 0x0, 0xa5, 0x3, 0x18, 0x6d, 0x28, 0x7d, 0x85, 0x3, 0x91, 0xd8, 0xc8, 0xa5, 0x4, 0x69,
-0x0, 0x85, 0x4, 0x91, 0xd8, 0x4c, 0x91, 0x4f, 0x60, 0x4c, 0x16, 0x51, 0xc9, 0x2, 0xf0, 0xf9,
-0xc9, 0x4, 0xf0, 0xf5, 0x4c, 0x94, 0x37, 0x44, 0x20, 0x6a, 0x54, 0x4c, 0x21, 0xa2, 0x20, 0x6a,
-0x54, 0x4c, 0xdc, 0xa0, 0x20, 0xe5, 0x4f, 0xa5, 0xe2, 0xd0, 0x3, 0x20, 0xb7, 0x45, 0x60, 0xa5,
-0xe5, 0x85, 0x5, 0xa5, 0xe6, 0x85, 0x6, 0x20, 0xc9, 0x46, 0x4c, 0x86, 0x46, 0x57, 0xad, 0x2d,
-0x7d, 0x85, 0x31, 0xad, 0x2e, 0x7d, 0x85, 0x32, 0xad, 0x2b, 0x7d, 0x8d, 0x59, 0x7f, 0xad, 0x2c,
-0x7d, 0x8d, 0x5a, 0x7f, 0xad, 0x63, 0x7e, 0x8d, 0x57, 0x7f, 0xad, 0x64, 0x7e, 0x8d, 0x58, 0x7f,
-0x60, 0x4a, 0x20, 0xc1, 0xa2, 0x20, 0x6f, 0xa4, 0x4c, 0x76, 0x54, 0x20, 0xc7, 0x49, 0xa5, 0xe4,
-0x48, 0xa9, 0x3, 0x85, 0xe4, 0xa5, 0x10, 0x48, 0xad, 0x4a, 0x7d, 0x48, 0xa9, 0x0, 0x85, 0x10,
-0xe6, 0x10, 0x8d, 0x4a, 0x7d, 0x8d, 0x59, 0x7f, 0x8d, 0x5a, 0x7f, 0xad, 0x31, 0x7d, 0x85, 0x49,
-0xad, 0x32, 0x7d, 0x85, 0xc, 0x20, 0x2d, 0x45, 0xad, 0x2d, 0x7d, 0x18, 0x69, 0x1, 0x20, 0x18,
-0x50, 0xad, 0x2e, 0x7d, 0x18, 0x69, 0x1, 0x20, 0x18, 0x50, 0xc6, 0xc, 0xc6, 0xc, 0x20, 0x2d,
-0x45, 0xa9, 0x52, 0x20, 0xe5, 0x34, 0xa9, 0x3b, 0x20, 0xe5, 0x34, 0xa9, 0x43, 0x20, 0xe5, 0x34,
-0xa9, 0x12, 0x20, 0xe5, 0x34, 0xad, 0xc4, 0x7d, 0x8d, 0x3b, 0x5, 0xad, 0x58, 0x7f, 0x85, 0xe6,
-0xad, 0x57, 0x7f, 0x85, 0xe5, 0xad, 0x30, 0x7d, 0x85, 0x49, 0xa9, 0x0, 0x85, 0xc, 0x20, 0x2d,
-0x45, 0xa9, 0x20, 0x20, 0xe5, 0x34, 0xe6, 0xc, 0x20, 0x2d, 0x45, 0xa9, 0xb, 0x8d, 0xe, 0x7d,
-0x20, 0x70, 0x52, 0xc6, 0xe4, 0xac, 0x5a, 0x7f, 0xb9, 0x57, 0x57, 0x18, 0x69, 0x8, 0x85, 0xc,
-0x20, 0x2d, 0x45, 0xa9, 0x43, 0x20, 0xe5, 0x34, 0xe6, 0xe6, 0xa5, 0xe6, 0x20, 0x18, 0x50, 0xee,
-0x5a, 0x7f, 0x20, 0x5e, 0x52, 0xad, 0x5a, 0x7f, 0xcd, 0x24, 0x7d, 0x90, 0xd8, 0xad, 0x2f, 0x7d,
-0x85, 0xc, 0xad, 0x59, 0x7f, 0x18, 0x6d, 0x30, 0x7d, 0x85, 0x49, 0xe6, 0x49, 0x20, 0x2d, 0x45,
-0xa9, 0x52, 0x20, 0xe5, 0x34, 0xe6, 0xe5, 0xa5, 0xe5, 0x20, 0x18, 0x50, 0xee, 0x59, 0x7f, 0xad,
-0x59, 0x7f, 0xcd, 0x25, 0x7d, 0x90, 0xdb, 0xe6, 0x49, 0x20, 0x38, 0x52, 0x68, 0x8d, 0x4a, 0x7d,
-0x68, 0x85, 0x10, 0x68, 0x85, 0xe4, 0xa9, 0x92, 0x20, 0xe5, 0x34, 0x4c, 0xf4, 0x4f, 0x4f, 0x48,
-0xa0, 0x0, 0xb9, 0x0, 0x2, 0x99, 0xc3, 0x75, 0xc8, 0xc4, 0xe3, 0x90, 0xf5, 0x8c, 0xc2, 0x75,
-0xa9, 0x5, 0x85, 0xe3, 0x60, 0x4e, 0xad, 0x31, 0x7d, 0x85, 0x49, 0xad, 0xc4, 0x7d, 0x8d, 0x3b,
-0x5, 0xad, 0x32, 0x7d, 0x18, 0x69, 0x9, 0x85, 0xc, 0x20, 0x2d, 0x45, 0xa9, 0xb6, 0x20, 0xe5,
-0x34, 0xa9, 0x20, 0x20, 0xe5, 0x34, 0xa5, 0xe7, 0xd0, 0x2, 0xe6, 0xe7, 0x20, 0xfa, 0x51, 0xa5,
-0xe7, 0xc9, 0x3, 0xf0, 0x17, 0xad, 0x43, 0x7d, 0xf0, 0x12, 0xa9, 0x9d, 0x20, 0xe5, 0x34, 0x20,
-0xe5, 0x34, 0xa9, 0x2f, 0x20, 0xe5, 0x34, 0xa9, 0x46, 0x20, 0xe5, 0x34, 0xa9, 0x20, 0x20, 0xe5,
-0x34, 0xa2, 0x20, 0xad, 0x82, 0x7d, 0xf0, 0x2, 0xa2, 0x2a, 0x8a, 0x20, 0xe5, 0x34, 0x20, 0xc7,
-0x49, 0xa5, 0xe4, 0x48, 0xa5, 0x10, 0x48, 0xa9, 0x3, 0x85, 0xe4, 0xad, 0x4a, 0x7d, 0x48, 0xa9,
-0x0, 0x85, 0x10, 0xe6, 0x10, 0x8d, 0x4a, 0x7d, 0xa5, 0x44, 0x18, 0x69, 0x1, 0x20, 0x18, 0x50,
-0xa5, 0x43, 0x18, 0x69, 0x1, 0x20, 0x18, 0x50, 0x20, 0xf4, 0x4f, 0x20, 0x18, 0x52, 0x68, 0x8d,
-0x4a, 0x7d, 0x68, 0x85, 0x10, 0x68, 0x85, 0xe4, 0xad, 0xc5, 0x7d, 0x8d, 0x3b, 0x5, 0x60, 0x53,
-0x4e, 0x55, 0x4d, 0x45, 0x52, 0x49, 0x43, 0x20, 0x20, 0x0, 0x54, 0x45, 0x58, 0x54, 0x20, 0x20,
-0x20, 0x20, 0x20, 0x0, 0x43, 0x4f, 0x4d, 0x4d, 0x41, 0x4e, 0x44, 0x20, 0x20, 0x0, 0x46, 0x4f,
-0x52, 0x4d, 0x55, 0x4c, 0x41, 0x20, 0x20, 0x0, 0x41, 0x55, 0x54, 0x4f, 0x0, 0x4d, 0x41, 0x4e,
-0x55, 0x2e, 0x0, 0x4f, 0xa5, 0xe7, 0xa, 0xa8, 0xb9, 0xcb, 0x31, 0x85, 0xdb, 0x88, 0xb9, 0xcb,
-0x31, 0x85, 0xda, 0xa0, 0x0, 0x20, 0x55, 0x43, 0xf0, 0x6, 0x20, 0xe5, 0x34, 0xc8, 0xd0, 0xf5,
-0x60, 0x4e, 0xa9, 0x20, 0x20, 0xe5, 0x34, 0xad, 0x87, 0x7d, 0xd0, 0xb, 0xa9, 0xf3, 0x85, 0xda,
-0xa9, 0x51, 0x85, 0xdb, 0x4c, 0x9, 0x52, 0xa9, 0xee, 0x85, 0xda, 0xa9, 0x51, 0x85, 0xdb, 0x4c,
-0x9, 0x52, 0xa5, 0xc, 0x48, 0xa9, 0x0, 0x85, 0xc, 0x20, 0x2d, 0x45, 0xa0, 0x0, 0xa9, 0x92,
-0x20, 0xe5, 0x34, 0xa9, 0xb7, 0x20, 0xe5, 0x34, 0xc8, 0xc0, 0x26, 0x90, 0xf8, 0x68, 0x85, 0xc,
-0xa9, 0x12, 0x20, 0xe5, 0x34, 0x4c, 0x2d, 0x45, 0xa9, 0x9, 0x8d, 0xe, 0x7d, 0xad, 0x5a, 0x7f,
-0xcd, 0x24, 0x7d, 0x90, 0x5, 0xa9, 0x1, 0x8d, 0xe, 0x7d, 0xa0, 0x0, 0xa9, 0x20, 0x20, 0xe5,
-0x34, 0xc8, 0xcc, 0xe, 0x7d, 0x90, 0xf7, 0x60, 0xad, 0x83, 0x7e, 0xd0, 0x5, 0xad, 0x87, 0x7d,
-0xd0, 0x14, 0xad, 0x43, 0x7d, 0xf0, 0xe, 0xa5, 0x31, 0x85, 0xe5, 0xa5, 0x32, 0x85, 0xe6, 0x20,
-0xe5, 0x4f, 0x4c, 0x5c, 0x53, 0x60, 0x20, 0x7e, 0x5b, 0xa5, 0xe7, 0x8d, 0x61, 0x7f, 0xad, 0x43,
-0x7d, 0x8d, 0x62, 0x7f, 0xad, 0x84, 0x7d, 0x8d, 0x63, 0x7f, 0x20, 0xd5, 0x34, 0x20, 0x83, 0x64,
-0xd0, 0xd5, 0xa9, 0x0, 0x85, 0x53, 0x20, 0x8c, 0x53, 0xa0, 0x0, 0xad, 0x5d, 0x7f, 0x85, 0xd8,
-0xad, 0x5e, 0x7f, 0x85, 0xd9, 0x20, 0x60, 0x43, 0x8d, 0x44, 0x7d, 0xc8, 0x20, 0x60, 0x43, 0x8d,
-0x45, 0x7d, 0x20, 0x16, 0x53, 0xa5, 0x3, 0x8d, 0x44, 0x7d, 0xa5, 0x4, 0x8d, 0x45, 0x7d, 0xa5,
-0xe2, 0xd0, 0x11, 0xad, 0x43, 0x7d, 0xf0, 0xc, 0x20, 0x35, 0x46, 0x20, 0x5c, 0x53, 0x20, 0x78,
-0x5b, 0x4c, 0xd8, 0x52, 0xa5, 0xe2, 0x85, 0x53, 0xa9, 0x0, 0x85, 0xe2, 0xad, 0x61, 0x7f, 0x85,
-0xe7, 0xad, 0x62, 0x7f, 0x8d, 0x43, 0x7d, 0xad, 0x63, 0x7f, 0x8d, 0x84, 0x7d, 0x4c, 0xaf, 0x53,
-0xad, 0x44, 0x7d, 0x85, 0x3, 0xad, 0x45, 0x7d, 0x85, 0x4, 0x20, 0x40, 0x46, 0x85, 0xe2, 0x20,
-0x33, 0x53, 0xa5, 0xe2, 0xf0, 0x1, 0x60, 0xad, 0x43, 0x7d, 0xf0, 0xee, 0x60, 0x20, 0x2a, 0x46,
-0xa5, 0x3, 0x85, 0xd8, 0xa5, 0x4, 0x85, 0xd9, 0xa0, 0x0, 0x20, 0x60, 0x43, 0x85, 0x3, 0xc8,
-0x20, 0x60, 0x43, 0x85, 0x4, 0xa0, 0x5, 0x20, 0x60, 0x43, 0x48, 0x29, 0xf, 0x85, 0xe7, 0x68,
-0x29, 0xf0, 0x8d, 0x43, 0x7d, 0x60, 0x20, 0xb7, 0x45, 0xad, 0x43, 0x7d, 0xf0, 0x8, 0x85, 0x45,
-0x20, 0x78, 0x53, 0x20, 0x94, 0x37, 0xa9, 0x0, 0x85, 0x45, 0xa5, 0x53, 0xd0, 0x1, 0x60, 0x85,
-0xe2, 0x60, 0xa0, 0x0, 0xb9, 0xc3, 0x75, 0x99, 0x0, 0x2, 0xc8, 0xcc, 0xc2, 0x75, 0x90, 0xf4,
-0xa9, 0x0, 0x99, 0x0, 0x2, 0x60, 0xa5, 0x31, 0x8d, 0x46, 0x7d, 0xa5, 0x32, 0x8d, 0x47, 0x7d,
-0xad, 0x59, 0x7f, 0x8d, 0x48, 0x7d, 0xad, 0x5a, 0x7f, 0x8d, 0x49, 0x7d, 0xad, 0x57, 0x7f, 0x8d,
-0x61, 0x7e, 0xad, 0x58, 0x7f, 0x8d, 0x62, 0x7e, 0x60, 0xad, 0x46, 0x7d, 0x85, 0x31, 0xad, 0x47,
-0x7d, 0x85, 0x32, 0xad, 0x48, 0x7d, 0x8d, 0x59, 0x7f, 0xad, 0x49, 0x7d, 0x8d, 0x5a, 0x7f, 0xad,
-0x61, 0x7e, 0x8d, 0x57, 0x7f, 0xad, 0x62, 0x7e, 0x8d, 0x58, 0x7f, 0x60, 0xa0, 0x0, 0xb9, 0xb7,
-0x75, 0x99, 0x16, 0x76, 0xc8, 0xc4, 0x7c, 0x90, 0xf5, 0x8c, 0x4d, 0x7d, 0x60, 0xa0, 0x0, 0xb9,
-0x16, 0x76, 0x99, 0xb7, 0x75, 0xc8, 0xcc, 0x4d, 0x7d, 0x90, 0xf4, 0x60, 0x20, 0x38, 0x57, 0xa9,
-0x0, 0xa8, 0x91, 0x22, 0xc8, 0xc0, 0xe, 0x90, 0xf9, 0xf0, 0xf7, 0x60, 0xa0, 0x0, 0xa9, 0x0,
-0x99, 0xbd, 0x75, 0xc8, 0xc0, 0x28, 0x90, 0xf8, 0x60, 0x20, 0x2d, 0x45, 0xa5, 0xe4, 0x85, 0x81,
-0xa5, 0xe7, 0xd0, 0x4, 0xa0, 0xb, 0x84, 0x81, 0xc9, 0x2, 0xf0, 0x1e, 0xc9, 0x4, 0xf0, 0x1a,
-0xa0, 0x0, 0xa9, 0x20, 0x20, 0xee, 0x44, 0xc8, 0xc4, 0x81, 0x90, 0xf8, 0xad, 0x1b, 0x7d, 0xd0,
-0x1, 0x60, 0x85, 0xe7, 0xa9, 0x0, 0x8d, 0x1b, 0x7d, 0x60, 0xac, 0xc2, 0x75, 0xc4, 0xe4, 0xb0,
-0x2, 0xa4, 0xe4, 0xad, 0x89, 0x7d, 0xf0, 0x4, 0xa0, 0xb, 0x84, 0xe4, 0x84, 0x81, 0xa0, 0x0,
-0xb9, 0xc3, 0x75, 0xd0, 0x2, 0xa9, 0x20, 0x20, 0xee, 0x44, 0xc8, 0xc4, 0x81, 0x90, 0xf1, 0xa9,
-0x20, 0x4c, 0x2e, 0x54, 0xae, 0xd4, 0x31, 0x8a, 0x85, 0x47, 0xac, 0xd5, 0x31, 0x84, 0x48, 0x60,
-0x20, 0x74, 0x9b, 0x20, 0x4e, 0x9c, 0x20, 0x38, 0x57, 0xa0, 0x0, 0xb1, 0x22, 0xc9, 0x20, 0xd0,
-0x2, 0xe6, 0x22, 0xb1, 0x22, 0xf0, 0xf, 0xc9, 0xd, 0xf0, 0xb, 0xc0, 0xe, 0xb0, 0x7, 0x99,
-0x69, 0x76, 0xc8, 0x4c, 0x89, 0x54, 0x8c, 0x42, 0x7d, 0xc4, 0xe4, 0x90, 0x15, 0xa5, 0xe4, 0x48,
-0xc9, 0xc, 0x90, 0x4, 0xa9, 0xb, 0x85, 0xe4, 0x20, 0xd3, 0x56, 0x20, 0x10, 0x56, 0x68, 0x85,
-0xe4, 0x60, 0xa9, 0x20, 0x99, 0x69, 0x76, 0xc8, 0xd0, 0xdf, 0x60, 0xad, 0xc4, 0x7d, 0x8d, 0x3b,
-0x5, 0xa9, 0x0, 0x8d, 0x1b, 0x7d, 0xa9, 0x1, 0x8d, 0x89, 0x7d, 0x20, 0x21, 0x50, 0x20, 0xb7,
-0x57, 0xad, 0xc5, 0x7d, 0x8d, 0x3b, 0x5, 0x20, 0x1, 0x59, 0xa9, 0x0, 0x8d, 0x89, 0x7d, 0xad,
-0x1a, 0x7d, 0x8d, 0x1b, 0x7d, 0x20, 0x42, 0x45, 0xad, 0x83, 0x7e, 0xf0, 0x14, 0xee, 0x84, 0x7e,
-0xee, 0x8, 0x7f, 0x20, 0xd5, 0x55, 0x20, 0x15, 0x67, 0xa9, 0x0, 0x8d, 0x8, 0x7f, 0x20, 0x42,
-0x45, 0xad, 0x4a, 0x7d, 0x48, 0xa9, 0x1, 0x8d, 0x4a, 0x7d, 0xa9, 0x1d, 0x20, 0xd2, 0xff, 0x20,
-0xd2, 0xff, 0xa9, 0x2, 0x85, 0xc, 0xad, 0x85, 0x7d, 0x8d, 0x84, 0x7d, 0x20, 0xd5, 0x55, 0x68,
-0x8d, 0x4a, 0x7d, 0x20, 0x2c, 0x51, 0x20, 0x35, 0x45, 0xad, 0x1a, 0x7d, 0xf0, 0x2, 0x85, 0xe7,
-0xa9, 0x0, 0x8d, 0x1a, 0x7d, 0x85, 0x81, 0x8d, 0xa7, 0x2, 0xa5, 0xe7, 0xd0, 0x2, 0xe6, 0xe7,
-0x20, 0xc4, 0x56, 0xa5, 0xe4, 0x8d, 0xa8, 0x2, 0xee, 0xa8, 0x2, 0xee, 0xa8, 0x2, 0xa9, 0x43,
-0x20, 0xe5, 0x34, 0xa9, 0x3e, 0x20, 0xd2, 0xff, 0xa9, 0x2, 0x8d, 0xa9, 0x2, 0x20, 0x10, 0x10,
-0xc9, 0xd, 0xf0, 0xd, 0xa4, 0x81, 0xc4, 0xe4, 0xb0, 0x7, 0x99, 0x0, 0x2, 0xe6, 0x81, 0xd0,
-0xec, 0x20, 0xba, 0x5b, 0xad, 0xa7, 0x2, 0xf0, 0xe, 0xc9, 0xab, 0xf0, 0x7, 0xa9, 0x1, 0x85,
-0xe7, 0x4c, 0xc4, 0x56, 0x4c, 0xe8, 0x60, 0xa4, 0x81, 0x88, 0xb9, 0x0, 0x2, 0xc9, 0x20, 0xd0,
-0x6, 0xc6, 0x81, 0xd0, 0xdc, 0xe6, 0x81, 0x84, 0xe3, 0xe6, 0xe3, 0xa4, 0xe3, 0xa9, 0x0, 0x99,
-0x0, 0x2, 0xa5, 0xe7, 0xc9, 0x1, 0xf0, 0x3, 0x4c, 0xc2, 0x4f, 0x20, 0x6a, 0x54, 0xa9, 0xff,
-0x85, 0x3b, 0xa9, 0x1, 0x85, 0x3c, 0x20, 0x73, 0x4, 0x20, 0x7f, 0xa3, 0x20, 0x6a, 0x54, 0x20,
-0x59, 0xa2, 0xa9, 0x5, 0x85, 0xe3, 0x4c, 0xc4, 0x56, 0x4c, 0xf, 0x54, 0x20, 0x41, 0x57, 0xad,
-0xc4, 0x7d, 0x8d, 0x3b, 0x5, 0xa5, 0xe7, 0xf0, 0xf0, 0xad, 0x1b, 0x7d, 0xf0, 0x7, 0x85, 0xe7,
-0xa9, 0x0, 0x8d, 0x1b, 0x7d, 0xa5, 0xe7, 0xc9, 0x1, 0xd0, 0xde, 0x20, 0x11, 0x57, 0x20, 0xf2,
-0x53, 0x20, 0x3, 0x56, 0x20, 0xce, 0x4f, 0x20, 0x6f, 0xa4, 0x4c, 0x76, 0x54, 0xa0, 0x0, 0xa9,
-0x20, 0x99, 0x69, 0x76, 0xc8, 0xc4, 0xe4, 0x90, 0xf8, 0x60, 0x20, 0x57, 0x56, 0xad, 0x4a, 0x7d,
-0xd0, 0x31, 0xa4, 0xe4, 0x88, 0xb9, 0x69, 0x76, 0xc9, 0x20, 0xd0, 0x7, 0x88, 0xc9, 0xff, 0xd0,
-0xf4, 0xf0, 0x20, 0xc8, 0xc4, 0xe4, 0xb0, 0x1b, 0x88, 0xa6, 0xe4, 0xca, 0xb9, 0x69, 0x76, 0x9d,
-0x69, 0x76, 0x88, 0xca, 0xc0, 0xff, 0x90, 0xf4, 0xa9, 0x20, 0xe8, 0xca, 0x9d, 0x69, 0x76, 0xe0,
-0x0, 0xd0, 0xf8, 0xa0, 0x0, 0xb9, 0x69, 0x76, 0x20, 0xee, 0x44, 0xc8, 0xc4, 0xe4, 0x90, 0xf5,
-0x60, 0xa5, 0x10, 0xf0, 0x32, 0xa0, 0x0, 0xb9, 0x69, 0x76, 0xc9, 0x2e, 0xf0, 0x14, 0x99, 0x69,
-0x76, 0xc8, 0xc4, 0xe4, 0x90, 0xf1, 0x20, 0x27, 0x57, 0x90, 0x1c, 0xa5, 0x10, 0xc9, 0x1, 0xd0,
-0x2d, 0x60, 0xa5, 0x10, 0xc9, 0x1, 0xd0, 0x10, 0x20, 0x27, 0x57, 0x90, 0xa, 0xa9, 0x20, 0x99,
-0x69, 0x76, 0xc8, 0xc4, 0xe4, 0x90, 0xf8, 0x60, 0x20, 0x27, 0x57, 0x90, 0xfa, 0xc8, 0xc8, 0xb9,
-0x69, 0x76, 0xc9, 0x20, 0xd0, 0x5, 0xa9, 0x30, 0x99, 0x69, 0x76, 0xc8, 0xd0, 0xdf, 0xa4, 0xe4,
-0x88, 0xb9, 0x69, 0x76, 0xc9, 0x20, 0xd0, 0x5, 0xc0, 0x0, 0xd0, 0xf4, 0x60, 0xc8, 0xa9, 0x2e,
-0x99, 0x69, 0x76, 0xc8, 0xa9, 0x30, 0x99, 0x69, 0x76, 0xc8, 0x99, 0x69, 0x76, 0x60, 0xa5, 0xe7,
-0xc9, 0x2, 0xb0, 0x4, 0xa9, 0xb, 0xd0, 0x2, 0xa9, 0x24, 0x85, 0xe4, 0x60, 0xad, 0x42, 0x7d,
-0xc5, 0xe4, 0xf0, 0x11, 0x90, 0xf, 0xa0, 0x0, 0xb9, 0x69, 0x76, 0xc9, 0x2e, 0xf0, 0x7, 0xc8,
-0xcc, 0x42, 0x7d, 0x90, 0xf3, 0x60, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0x98, 0xaa, 0xc8, 0xb9, 0x69,
-0x76, 0xc9, 0x45, 0xf0, 0x6, 0xcc, 0x42, 0x7d, 0x90, 0xf3, 0x60, 0xe8, 0x9d, 0x69, 0x76, 0xc8,
-0xb9, 0x69, 0x76, 0xcc, 0x42, 0x7d, 0x90, 0xf3, 0xf0, 0xf1, 0x60, 0xad, 0x84, 0x7d, 0xd0, 0x4,
-0xa9, 0x0, 0xf0, 0xa, 0xc9, 0x8, 0xd0, 0x4, 0xa9, 0x1, 0xd0, 0x2, 0xa9, 0x2, 0x85, 0x10,
-0x60, 0xa2, 0x0, 0xbd, 0x69, 0x76, 0xc9, 0x45, 0xf0, 0x6, 0xe8, 0xe4, 0xe4, 0x90, 0xf4, 0x60,
-0x18, 0x60, 0xa9, 0x1, 0x85, 0x23, 0xa9, 0x0, 0x85, 0x22, 0x60, 0xac, 0x5a, 0x7f, 0xb9, 0x57,
-0x57, 0x85, 0xc, 0xad, 0x59, 0x7f, 0x18, 0x6d, 0x30, 0x7d, 0x85, 0x49, 0xe6, 0x49, 0x4c, 0x2d,
-0x45, 0x4, 0xf, 0x1a, 0x1c, 0xad, 0x11, 0x7f, 0x8d, 0x5a, 0x7f, 0x20, 0x86, 0x46, 0xa5, 0x3,
-0x8d, 0xa, 0x7d, 0xa5, 0x4, 0x8d, 0xb, 0x7d, 0xa5, 0xe2, 0xd0, 0xe, 0x20, 0xb1, 0x45, 0xee,
-0x5a, 0x7f, 0xad, 0x5a, 0x7f, 0xcd, 0x24, 0x7d, 0x90, 0x1, 0x60, 0xad, 0xc, 0x7f, 0xd0, 0xfa,
-0xe6, 0x6, 0xd0, 0xd7, 0x60, 0xa9, 0x0, 0x8d, 0x59, 0x7f, 0x20, 0xc9, 0x46, 0x20, 0x5b, 0x57,
-0xee, 0x59, 0x7f, 0xad, 0x59, 0x7f, 0xcd, 0x25, 0x7d, 0x90, 0x1, 0x60, 0xad, 0xc, 0x7f, 0xd0,
-0x5, 0xad, 0x58, 0x7f, 0x85, 0x6, 0xe6, 0x5, 0xd0, 0xe0, 0xad, 0x30, 0x7d, 0x8d, 0xe, 0x7f,
-0x60, 0xad, 0x57, 0x7f, 0x85, 0x5, 0xad, 0x58, 0x7f, 0x85, 0x6, 0x20, 0xc7, 0x49, 0xa9, 0x0,
-0x8d, 0x11, 0x7f, 0xad, 0xd, 0x7f, 0xd0, 0x1c, 0xad, 0xc, 0x7f, 0xf0, 0xe, 0xa5, 0x6, 0x18,
-0x6d, 0x10, 0x7f, 0x85, 0x6, 0xad, 0x10, 0x7f, 0x8d, 0x11, 0x7f, 0x20, 0x8b, 0x57, 0xee, 0xd,
-0x7f, 0x4c, 0xf4, 0x4f, 0xad, 0x59, 0x7f, 0x18, 0x65, 0x5, 0x85, 0x5, 0xa9, 0x0, 0x8d, 0xc,
-0x7f, 0x20, 0xc9, 0x46, 0x20, 0x5b, 0x57, 0x4c, 0xf4, 0x4f, 0xa5, 0x32, 0xc5, 0x43, 0xb0, 0x3,
-0xe6, 0x32, 0x60, 0xee, 0x21, 0x7d, 0x60, 0xa5, 0x31, 0xc5, 0x44, 0x90, 0x4, 0xee, 0x20, 0x7d,
-0x60, 0xe6, 0x31, 0x60, 0xa5, 0x31, 0xd0, 0x4, 0xee, 0x22, 0x7d, 0x60, 0xc6, 0x31, 0x60, 0xa5,
-0x32, 0xd0, 0x4, 0xee, 0x23, 0x7d, 0x60, 0xc6, 0x32, 0x60, 0xad, 0x5a, 0x7f, 0x18, 0x69, 0x1,
-0xcd, 0x24, 0x7d, 0x90, 0x1a, 0xa5, 0x43, 0x38, 0xed, 0x24, 0x7d, 0xcd, 0x58, 0x7f, 0xb0, 0x6,
-0x20, 0x19, 0x4d, 0xd0, 0xe5, 0x60, 0xee, 0x58, 0x7f, 0x20, 0x33, 0x5a, 0x4c, 0xa9, 0x59, 0xee,
-0x5a, 0x7f, 0x4c, 0x2c, 0x5a, 0xad, 0x59, 0x7f, 0x18, 0x69, 0x1, 0xcd, 0x25, 0x7d, 0x90, 0x1a,
-0xa5, 0x44, 0x38, 0xed, 0x25, 0x7d, 0xcd, 0x57, 0x7f, 0xb0, 0x6, 0x20, 0x34, 0x4d, 0xd0, 0xe5,
-0x60, 0xee, 0x57, 0x7f, 0x20, 0x2c, 0x5a, 0x4c, 0xe, 0x59, 0xee, 0x59, 0x7f, 0x4c, 0x2c, 0x5a,
-0xad, 0x5a, 0x7f, 0xd0, 0xf, 0xad, 0x58, 0x7f, 0xd0, 0x1, 0x60, 0xce, 0x58, 0x7f, 0x20, 0x33,
-0x5a, 0x4c, 0xda, 0x59, 0xce, 0x5a, 0x7f, 0x4c, 0x2c, 0x5a, 0xad, 0x59, 0x7f, 0xd0, 0xf, 0xad,
-0x57, 0x7f, 0xd0, 0x1, 0x60, 0xce, 0x57, 0x7f, 0x20, 0x2c, 0x5a, 0x4c, 0x3e, 0x59, 0xce, 0x59,
-0x7f, 0x4c, 0x2c, 0x5a, 0x20, 0x91, 0x59, 0xa5, 0x31, 0x85, 0x5, 0xa5, 0x32, 0x85, 0x6, 0x20,
-0xc9, 0x46, 0x20, 0x86, 0x46, 0xa5, 0xe2, 0xd0, 0x9, 0x20, 0xb1, 0x45, 0xa5, 0x49, 0x8d, 0xe,
-0x7f, 0x60, 0xa9, 0x0, 0x8d, 0x1f, 0x7d, 0x60, 0xad, 0x21, 0x7d, 0xd0, 0x1, 0x60, 0xa9, 0x0,
-0x85, 0x32, 0x8d, 0x21, 0x7d, 0x20, 0xd, 0x58, 0xad, 0x20, 0x7d, 0xd0, 0x1, 0x60, 0xa9, 0x0,
-0x8d, 0x20, 0x7d, 0x8d, 0x1f, 0x7d, 0x85, 0x31, 0x85, 0x32, 0x60, 0xa9, 0x12, 0x20, 0xee, 0x44,
-0x20, 0xba, 0x58, 0xa9, 0x92, 0x4c, 0xee, 0x44, 0xa5, 0xe1, 0xf0, 0x1, 0x60, 0x20, 0x6e, 0x59,
-0xe6, 0x49, 0xe6, 0x49, 0xee, 0xb, 0x7f, 0x20, 0x2d, 0x45, 0xa5, 0xc8, 0x38, 0xe9, 0x28, 0x85,
-0xda, 0xa5, 0xc9, 0xe9, 0x0, 0x85, 0xdb, 0x20, 0x83, 0x59, 0xe6, 0x49, 0xa5, 0x49, 0xcd, 0xb,
-0x7f, 0x90, 0xe4, 0xc6, 0x49, 0x4c, 0x3a, 0x5a, 0xa5, 0xe1, 0xf0, 0x1, 0x60, 0x20, 0x6e, 0x59,
-0xad, 0xb, 0x7f, 0x85, 0x49, 0xc6, 0x49, 0x20, 0x2d, 0x45, 0xa5, 0xc8, 0x18, 0x69, 0x28, 0x85,
-0xda, 0xa5, 0xc9, 0x69, 0x0, 0x85, 0xdb, 0x20, 0x83, 0x59, 0xc6, 0x49, 0xad, 0xa, 0x7f, 0xc5,
-0x49, 0x90, 0xe4, 0xe6, 0x49, 0x4c, 0x3a, 0x5a, 0xad, 0x30, 0x7d, 0x85, 0x49, 0x8d, 0xa, 0x7f,
-0x18, 0x6d, 0x25, 0x7d, 0x8d, 0xb, 0x7f, 0xad, 0x57, 0x57, 0x85, 0xc, 0x60, 0xa4, 0xc, 0xb1,
-0xc8, 0x29, 0x7f, 0x91, 0xda, 0xc8, 0xc0, 0x27, 0x90, 0xf5, 0x60, 0xad, 0xe, 0x7f, 0x85, 0x49,
-0xad, 0x57, 0x57, 0x85, 0xc, 0x20, 0x2d, 0x45, 0xa5, 0xc8, 0x85, 0xda, 0xa5, 0xc9, 0x85, 0xdb,
-0x4c, 0x83, 0x59, 0xa5, 0xe1, 0xd0, 0x2c, 0x20, 0xa, 0x5a, 0x20, 0x1b, 0x5a, 0xa0, 0x4, 0x20,
-0x55, 0x43, 0x29, 0x7f, 0x91, 0xc8, 0xc8, 0xcc, 0xf, 0x7f, 0x90, 0xf3, 0xa9, 0x20, 0x91, 0xc8,
-0xc8, 0xc0, 0x28, 0x90, 0xf9, 0xe6, 0x49, 0xa5, 0x49, 0xcd, 0xb, 0x7f, 0x90, 0xdc, 0xa9, 0x2,
-0x8d, 0x10, 0x7f, 0x60, 0xa5, 0xe1, 0xd0, 0xfb, 0x20, 0xa, 0x5a, 0x20, 0x1b, 0x5a, 0xac, 0xf,
-0x7f, 0xb1, 0xc8, 0x29, 0x7f, 0x91, 0xda, 0x88, 0xc0, 0x4, 0xb0, 0xf5, 0xa9, 0x20, 0x91, 0xc8,
-0xc8, 0xc0, 0xf, 0x90, 0xf9, 0xe6, 0x49, 0xa5, 0x49, 0xcd, 0xb, 0x7f, 0x90, 0xdd, 0xa9, 0x0,
-0x8d, 0x10, 0x7f, 0x60, 0x20, 0x6e, 0x59, 0xa0, 0x2, 0xb9, 0x57, 0x57, 0x8d, 0xf, 0x7f, 0xe6,
-0x49, 0xee, 0xb, 0x7f, 0x60, 0x20, 0x2d, 0x45, 0xa5, 0xc8, 0x18, 0x69, 0xb, 0x85, 0xda, 0xa5,
-0xc9, 0x69, 0x0, 0x85, 0xdb, 0x60, 0x20, 0xd5, 0x34, 0xee, 0xd, 0x7f, 0x60, 0x20, 0xd5, 0x34,
-0xee, 0xc, 0x7f, 0x60, 0x20, 0x2d, 0x45, 0xa0, 0x4, 0xa9, 0x20, 0x91, 0xc8, 0xc8, 0xc0, 0x28,
-0x90, 0xf9, 0x60, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xc, 0x20, 0x83, 0x5a, 0x20, 0x6c, 0x4d,
-0xa5, 0x6, 0xc5, 0x40, 0x90, 0x1, 0x60, 0xe6, 0x6, 0xd0, 0xe8, 0x60, 0x20, 0x49, 0x5a, 0xa5,
-0x5, 0xc5, 0x44, 0x90, 0x1, 0x60, 0x20, 0x78, 0x5b, 0xa5, 0x3f, 0x85, 0x6, 0xe6, 0x5, 0xd0,
-0xeb, 0x60, 0xa9, 0x0, 0x85, 0x5, 0xa5, 0x3f, 0x85, 0x6, 0x4c, 0x62, 0x5a, 0x20, 0xb7, 0x45,
-0xa0, 0x0, 0xb9, 0xbb, 0x75, 0x48, 0xb9, 0x60, 0x77, 0x99, 0xbb, 0x75, 0x68, 0x99, 0x60, 0x77,
-0xc8, 0xc0, 0x32, 0x90, 0xed, 0xad, 0xbc, 0x75, 0x29, 0xf, 0x85, 0xe7, 0xad, 0xbc, 0x75, 0x29,
-0xf0, 0x8d, 0x43, 0x7d, 0x60, 0x20, 0x54, 0x45, 0xa5, 0x43, 0xcd, 0x74, 0x7d, 0xf0, 0x2, 0xb0,
-0x2a, 0xe6, 0x43, 0xa5, 0x43, 0x85, 0x40, 0xe6, 0x40, 0xe6, 0xe1, 0xa5, 0x32, 0x85, 0x3f, 0xa9,
-0x2, 0x8d, 0x60, 0x77, 0xa9, 0x0, 0x8d, 0x61, 0x77, 0x20, 0x7e, 0x5b, 0x20, 0xf6, 0x46, 0x20,
-0x78, 0x5a, 0xa5, 0x43, 0xcd, 0x74, 0x7d, 0x90, 0x2, 0xc6, 0x43, 0x4c, 0x90, 0x5d, 0x20, 0x54,
-0x45, 0xa5, 0x44, 0xcd, 0x75, 0x7d, 0xf0, 0x2, 0xb0, 0xf1, 0xa5, 0x44, 0x85, 0x3e, 0xa5, 0x31,
-0x85, 0x3d, 0xe6, 0x44, 0xe6, 0xe1, 0x20, 0x7e, 0x5b, 0x20, 0xf6, 0x46, 0x20, 0x12, 0x5b, 0xa5,
-0x44, 0xcd, 0x75, 0x7d, 0x90, 0x2, 0xc6, 0x44, 0x4c, 0x90, 0x5d, 0x60, 0xa5, 0x3e, 0x85, 0x5,
-0xe6, 0x5, 0xa9, 0x0, 0x85, 0x6, 0xc6, 0x5, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xec, 0x20,
-0x83, 0x5a, 0xe6, 0x5, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xe0, 0x20, 0x83, 0x5a, 0x20, 0x6c,
-0x4d, 0xe6, 0x6, 0xa5, 0x6, 0xc5, 0x43, 0x90, 0xdd, 0xf0, 0xdb, 0xa9, 0x0, 0x85, 0x6, 0xc6,
-0x5, 0x20, 0x78, 0x5b, 0xa5, 0x5, 0xc5, 0x3d, 0xf0, 0x5, 0x90, 0x3, 0x4c, 0x1c, 0x5b, 0xa9,
-0x2, 0x8d, 0x60, 0x77, 0xa9, 0x0, 0x8d, 0x61, 0x77, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0x11,
-0x20, 0x83, 0x5a, 0x20, 0x6c, 0x4d, 0xa5, 0x6, 0xc5, 0x43, 0xb0, 0x5, 0xe6, 0x6, 0x4c, 0x55,
-0x5b, 0x60, 0x20, 0x35, 0x45, 0x4c, 0x81, 0x5b, 0x20, 0x42, 0x45, 0xad, 0xb0, 0x5b, 0x48, 0xad,
-0xb2, 0x5b, 0x8d, 0xb0, 0x5b, 0x68, 0x8d, 0xb2, 0x5b, 0xad, 0xb6, 0x5b, 0x48, 0xad, 0xb4, 0x5b,
-0x8d, 0xb6, 0x5b, 0x68, 0x8d, 0xb4, 0x5b, 0xa9, 0xa8, 0x85, 0xda, 0xa9, 0x5b, 0x85, 0xdb, 0x4c,
-0x9, 0x52, 0x5, 0x57, 0x4f, 0x52, 0x4b, 0x49, 0x4e, 0x47, 0x5, 0x2e, 0x90, 0x2e, 0x5, 0x2e,
-0x90, 0x2e, 0x5, 0x0, 0x20, 0xe4, 0xff, 0xd0, 0xfb, 0x60, 0xe6, 0x6, 0x20, 0x8a, 0x5d, 0xa5,
-0xe2, 0xd0, 0x18, 0x20, 0x83, 0x5a, 0xc6, 0x6, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xc, 0x20,
-0x83, 0x5a, 0x20, 0x6c, 0x4d, 0xa5, 0x6, 0xc5, 0x40, 0x90, 0x1, 0x60, 0xe6, 0x6, 0xd0, 0xda,
-0x60, 0x20, 0xc0, 0x5b, 0x20, 0x78, 0x5b, 0xa5, 0x5, 0xc5, 0x44, 0x90, 0x2a, 0xa9, 0x0, 0x85,
-0x5, 0xa5, 0x40, 0x85, 0x6, 0xa9, 0x2, 0x8d, 0x60, 0x77, 0xa9, 0x0, 0x8d, 0x61, 0x77, 0x20,
-0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0x10, 0x20, 0x83, 0x5a, 0x20, 0x6c, 0x4d, 0xe6, 0x5, 0xa5, 0x5,
-0xc5, 0x44, 0x90, 0xe1, 0xf0, 0xdf, 0x60, 0xa5, 0x3f, 0x85, 0x6, 0xe6, 0x5, 0xd0, 0xc2, 0x60,
-0xa9, 0x0, 0x85, 0x5, 0xa5, 0x3f, 0x85, 0x6, 0x4c, 0xe7, 0x5b, 0x20, 0x54, 0x45, 0xa5, 0x43,
-0x85, 0x40, 0xa5, 0x32, 0x85, 0x3f, 0xe6, 0xe1, 0x20, 0x7e, 0x5b, 0x20, 0xf6, 0x46, 0x20, 0x26,
-0x5c, 0x4c, 0x90, 0x5d, 0x20, 0x54, 0x45, 0xa5, 0x44, 0x85, 0x3e, 0xa5, 0x31, 0x85, 0x3d, 0xe6,
-0xe1, 0x20, 0x7e, 0x5b, 0x20, 0xf6, 0x46, 0x20, 0x64, 0x5c, 0x4c, 0x90, 0x5d, 0x60, 0xa5, 0x3d,
-0x85, 0x5, 0xa9, 0x0, 0x85, 0x6, 0xe6, 0x5, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xee, 0x20,
-0x83, 0x5a, 0xc6, 0x5, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xe2, 0x20, 0x83, 0x5a, 0x20, 0x6c,
-0x4d, 0xe6, 0x6, 0xa5, 0x6, 0xc5, 0x43, 0x90, 0xdd, 0xf0, 0xdb, 0xa9, 0x0, 0x85, 0x6, 0x20,
-0x78, 0x5b, 0xe6, 0x5, 0xa5, 0x5, 0xc5, 0x3e, 0x90, 0xcc, 0xa9, 0x0, 0x85, 0x6, 0xa9, 0x2,
-0x8d, 0x60, 0x77, 0xa9, 0x0, 0x8d, 0x61, 0x77, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0x11, 0x20,
-0x83, 0x5a, 0x20, 0x6c, 0x4d, 0xa5, 0x6, 0xc5, 0x43, 0xb0, 0x5, 0xe6, 0x6, 0x4c, 0xa4, 0x5c,
-0x60, 0x20, 0x54, 0x45, 0xad, 0xf, 0x77, 0xf0, 0x1f, 0x20, 0x25, 0x38, 0xf0, 0x1a, 0x20, 0xf1,
-0x5c, 0x85, 0x3e, 0xc5, 0x44, 0xf0, 0x2, 0xb0, 0xf, 0xa5, 0x31, 0x85, 0x3d, 0xe6, 0xe1, 0x20,
-0x7e, 0x5b, 0x20, 0xf6, 0x46, 0x20, 0xf6, 0x5c, 0x4c, 0x90, 0x5d, 0x38, 0xe9, 0x1, 0x60, 0x60,
-0xa9, 0x0, 0x85, 0x6, 0xa5, 0x3e, 0x85, 0x5, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xf0, 0x20,
-0x83, 0x5a, 0xa5, 0x3d, 0x85, 0x5, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0xe2, 0x20, 0x83, 0x5a,
-0x20, 0x6c, 0x4d, 0x20, 0x78, 0x5b, 0xe6, 0x6, 0xa5, 0x6, 0xc5, 0x43, 0x90, 0xd6, 0xf0, 0xd4,
-0x60, 0xa5, 0x40, 0x85, 0x6, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0x17, 0x20, 0x83, 0x5a, 0xa5,
-0x3f, 0x85, 0x6, 0x20, 0x8a, 0x5d, 0xa5, 0xe2, 0xd0, 0x9, 0x20, 0x83, 0x5a, 0x20, 0x6c, 0x4d,
-0x4c, 0x78, 0x5b, 0x60, 0x20, 0x27, 0x5d, 0xa5, 0x5, 0xc5, 0x44, 0x90, 0x1, 0x60, 0xe6, 0x5,
-0xd0, 0xf2, 0x60, 0xa9, 0x0, 0x85, 0x5, 0x4c, 0x4a, 0x5d, 0x20, 0x54, 0x45, 0xad, 0xf, 0x77,
-0xf0, 0x1f, 0x20, 0x25, 0x38, 0xf0, 0x1a, 0x20, 0xf1, 0x5c, 0x85, 0x40, 0xc5, 0x43, 0xf0, 0x2,
-0xb0, 0xf, 0xa5, 0x32, 0x85, 0x3f, 0xe6, 0xe1, 0x20, 0x7e, 0x5b, 0x20, 0xf6, 0x46, 0x20, 0x59,
-0x5d, 0x4c, 0x90, 0x5d, 0x20, 0xc9, 0x46, 0x4c, 0x86, 0x46, 0x20, 0xd5, 0x34, 0x85, 0xe1, 0x20,
-0x30, 0x35, 0x20, 0xf6, 0x46, 0x4c, 0xfb, 0x37, 0xee, 0x61, 0x77, 0x8c, 0x3d, 0x7d, 0xa9, 0x1,
-0x8d, 0x78, 0x7d, 0xad, 0x61, 0x77, 0x20, 0xbb, 0x5e, 0xa6, 0xb, 0xbd, 0xbc, 0x76, 0x20, 0xb1,
-0x44, 0x90, 0x14, 0x99, 0x60, 0x77, 0xa9, 0x20, 0x9d, 0xbc, 0x76, 0xc8, 0xe8, 0xa9, 0x2, 0x8d,
-0x78, 0x7d, 0xcc, 0x10, 0x7d, 0x90, 0xe4, 0xcc, 0x10, 0x7d, 0xb0, 0x8, 0xa9, 0x20, 0x99, 0x60,
-0x77, 0xc8, 0xd0, 0xf3, 0xac, 0x3d, 0x7d, 0xca, 0x86, 0xb, 0xa9, 0x0, 0x8d, 0x78, 0x7d, 0x60,
-0xee, 0x60, 0x77, 0x8c, 0x3d, 0x7d, 0x20, 0x63, 0x5e, 0xad, 0x60, 0x77, 0x20, 0xbb, 0x5e, 0xa2,
-0x0, 0xb9, 0x60, 0x77, 0x9d, 0x0, 0x2, 0xe8, 0xc8, 0xcc, 0x10, 0x7d, 0x90, 0xf3, 0xa9, 0x0,
-0x9d, 0x0, 0x2, 0x20, 0x6a, 0x54, 0xa9, 0xff, 0x85, 0x3b, 0xa9, 0x1, 0x85, 0x3c, 0x20, 0x73,
-0x4, 0x20, 0x7f, 0xa3, 0xa5, 0x66, 0x9, 0x7f, 0x25, 0x62, 0x85, 0x66, 0x20, 0x6f, 0x5e, 0xa5,
-0x61, 0x60, 0xa9, 0xff, 0x85, 0xb, 0xa9, 0x0, 0x8d, 0x60, 0x77, 0x8d, 0x61, 0x77, 0x20, 0x3c,
-0x37, 0xd0, 0x1, 0x60, 0xc9, 0x23, 0xd0, 0xf6, 0x20, 0x7b, 0x5e, 0xe6, 0xb, 0x20, 0x9e, 0x5d,
-0x4c, 0x34, 0x5e, 0xa0, 0x5, 0xb9, 0x61, 0x0, 0x99, 0xb3, 0x77, 0x88, 0x10, 0xf7, 0x4c, 0x92,
-0x48, 0xa0, 0x5, 0xb9, 0xb3, 0x77, 0x99, 0x61, 0x0, 0x88, 0x10, 0xf7, 0x60, 0xa0, 0x5, 0xb9,
-0x69, 0x0, 0x99, 0xb9, 0x77, 0x88, 0x10, 0xf7, 0x60, 0xa0, 0x5, 0xb9, 0xb9, 0x77, 0x99, 0x69,
-0x0, 0x88, 0x10, 0xf7, 0x60, 0xa0, 0x0, 0xcc, 0x37, 0x77, 0xb0, 0x27, 0xc8, 0xb9, 0x37, 0x77,
-0xc5, 0xb, 0x90, 0xf3, 0x8c, 0x10, 0x7d, 0xac, 0x37, 0x77, 0xae, 0x37, 0x77, 0xe8, 0xb9, 0x37,
-0x77, 0x9d, 0x37, 0x77, 0xb9, 0x4c, 0x77, 0x9d, 0x4c, 0x77, 0xca, 0x88, 0xec, 0x10, 0x7d, 0xf0,
-0x2, 0xb0, 0xeb, 0xc8, 0xa5, 0xb, 0x99, 0x37, 0x77, 0xa9, 0x46, 0x99, 0x4c, 0x77, 0xee, 0x37,
-0x77, 0xee, 0x4c, 0x77, 0x60, 0x8d, 0x11, 0x7d, 0xa2, 0x0, 0xa9, 0x0, 0xe8, 0xec, 0x11, 0x7d,
-0xb0, 0x6, 0x18, 0x69, 0x6, 0x4c, 0xc2, 0x5e, 0x18, 0x69, 0x2, 0xa8, 0x18, 0x69, 0x5, 0x8d,
-0x10, 0x7d, 0x60, 0xad, 0x81, 0x7d, 0xf0, 0x1, 0x60, 0xad, 0x80, 0x7d, 0xf0, 0x3, 0x4c, 0xe0,
-0x5f, 0xad, 0x7f, 0x7d, 0xf0, 0x3, 0x4c, 0x7b, 0x5f, 0xa0, 0x0, 0x8c, 0xbf, 0x77, 0x8c, 0xc9,
-0x77, 0x8c, 0xd3, 0x77, 0x8c, 0xd4, 0x77, 0x88, 0xc8, 0xb9, 0xbc, 0x76, 0xf0, 0x20, 0xc9, 0x28,
-0xd0, 0xc, 0xee, 0xbf, 0x77, 0xae, 0xbf, 0x77, 0x98, 0x9d, 0xbf, 0x77, 0xd0, 0xea, 0xc9, 0x29,
-0xd0, 0xe6, 0xee, 0xc9, 0x77, 0xae, 0xc9, 0x77, 0x98, 0x9d, 0xc9, 0x77, 0xd0, 0xda, 0xad, 0xbf,
-0x77, 0xd0, 0x6, 0xa9, 0x0, 0x8d, 0x7f, 0x7d, 0x60, 0xcd, 0xc9, 0x77, 0xd0, 0xf5, 0xac, 0xc9,
-0x77, 0xc8, 0xa9, 0x63, 0x99, 0xbf, 0x77, 0xa0, 0x0, 0xc8, 0xb9, 0xc9, 0x77, 0x8d, 0xdf, 0x7d,
-0xc8, 0xb9, 0xbf, 0x77, 0xcd, 0xdf, 0x7d, 0x90, 0xda, 0x88, 0xb9, 0xbf, 0x77, 0xcd, 0xdf, 0x7d,
-0xb0, 0xd1, 0x8d, 0xdf, 0x7d, 0xb9, 0xc9, 0x77, 0x38, 0xed, 0xdf, 0x7d, 0xc9, 0x5, 0x90, 0xc3,
-0xcc, 0xbf, 0x77, 0x90, 0xd4, 0xa0, 0x0, 0x8c, 0x7f, 0x7d, 0xb9, 0xbc, 0x76, 0x99, 0x16, 0x76,
-0xf0, 0x3, 0xc8, 0xd0, 0xf5, 0xee, 0x7f, 0x7d, 0xac, 0x7f, 0x7d, 0xb9, 0xc9, 0x77, 0x8d, 0xdf,
-0x7d, 0xce, 0xdf, 0x7d, 0xb9, 0xbf, 0x77, 0xa8, 0xa2, 0x0, 0xc8, 0xb9, 0x16, 0x76, 0x9d, 0xbc,
-0x76, 0xe8, 0xcc, 0xdf, 0x7d, 0x90, 0xf3, 0xa9, 0x0, 0x9d, 0xbc, 0x76, 0xad, 0x7f, 0x7d, 0xcd,
-0xbf, 0x77, 0x90, 0x5, 0xa9, 0x1, 0x8d, 0x80, 0x7d, 0x60, 0xee, 0xd4, 0x77, 0xad, 0xd4, 0x77,
-0x20, 0xbb, 0x5e, 0xa2, 0x0, 0xb5, 0x61, 0x99, 0xd3, 0x77, 0xc8, 0xe8, 0xcc, 0x10, 0x7d, 0x90,
-0xf4, 0x60, 0xee, 0xd3, 0x77, 0xad, 0xd3, 0x77, 0x20, 0xbb, 0x5e, 0xa2, 0x0, 0xb9, 0xd3, 0x77,
-0x95, 0x61, 0xc8, 0xe8, 0xcc, 0x10, 0x7d, 0x90, 0xf4, 0x60, 0xa9, 0x1, 0x8d, 0x81, 0x7d, 0xa9,
-0x0, 0x8d, 0x7f, 0x7d, 0xee, 0x7f, 0x7d, 0xac, 0x7f, 0x7d, 0xb9, 0xc9, 0x77, 0x8d, 0xdf, 0x7d,
-0xb9, 0xbf, 0x77, 0xa8, 0xa9, 0x39, 0x99, 0x16, 0x76, 0xc8, 0x99, 0x16, 0x76, 0xc8, 0xa9, 0x3b,
-0x99, 0x16, 0x76, 0xc8, 0xa9, 0x39, 0x99, 0x16, 0x76, 0xc8, 0x99, 0x16, 0x76, 0xa9, 0x20, 0xc8,
-0x99, 0x16, 0x76, 0xcc, 0xdf, 0x7d, 0x90, 0xf7, 0xad, 0x7f, 0x7d, 0xcd, 0xbf, 0x77, 0x90, 0xc4,
-0xa0, 0x0, 0xb9, 0x16, 0x76, 0x99, 0xbc, 0x76, 0xf0, 0x3, 0xc8, 0xd0, 0xf5, 0xa9, 0x0, 0x8d,
-0x7f, 0x7d, 0x8d, 0x80, 0x7d, 0x99, 0xbc, 0x76, 0x60, 0x20, 0xf4, 0x4f, 0xa5, 0x31, 0x85, 0xe5,
-0xa5, 0x32, 0x85, 0xe6, 0x20, 0xda, 0x4f, 0x20, 0xce, 0x4f, 0x4c, 0x89, 0x60, 0x20, 0x94, 0xa2,
-0xad, 0x4b, 0x7d, 0xd0, 0xe4, 0xee, 0x4b, 0x77, 0x20, 0x92, 0x48, 0xac, 0x4b, 0x77, 0xb9, 0x4c,
-0x77, 0xc9, 0x46, 0xd0, 0x6, 0x20, 0xe6, 0x5d, 0x4c, 0x89, 0x60, 0xee, 0x4b, 0x77, 0x20, 0xa0,
-0x38, 0xb0, 0xa, 0xee, 0xe, 0x77, 0x20, 0xc8, 0x5f, 0x4c, 0x89, 0x60, 0x60, 0x20, 0xda, 0x4f,
-0x20, 0xce, 0x4f, 0xae, 0x8a, 0x7d, 0xe0, 0x0, 0xf0, 0x7, 0xa2, 0x0, 0x8e, 0x8a, 0x7d, 0x38,
-0x60, 0x20, 0x94, 0xa2, 0x20, 0x92, 0x48, 0xee, 0x4b, 0x77, 0xac, 0x4b, 0x77, 0xb9, 0x4c, 0x77,
-0xc9, 0x46, 0xd0, 0x5, 0x20, 0xe6, 0x5d, 0x38, 0x60, 0xee, 0x4b, 0x77, 0x20, 0xa0, 0x38, 0x90,
-0x8, 0x20, 0xda, 0x4f, 0x20, 0xce, 0x4f, 0x38, 0x60, 0xee, 0xe, 0x77, 0x4c, 0xc8, 0x5f, 0xa5,
-0x45, 0xf0, 0x3, 0x4c, 0xce, 0x64, 0xa0, 0x0, 0xb9, 0x0, 0x2, 0x99, 0xf, 0x78, 0x99, 0x38,
-0x78, 0xc8, 0xc4, 0xe3, 0x90, 0xf2, 0xa9, 0x0, 0x99, 0xf, 0x78, 0x99, 0x38, 0x78, 0x8c, 0x86,
-0x7d, 0x60, 0xad, 0x86, 0x7d, 0xd0, 0x1, 0x60, 0xa0, 0x0, 0xb9, 0xf, 0x78, 0x99, 0x0, 0x2,
-0xf0, 0x5, 0xc8, 0xd0, 0xf5, 0xa0, 0x0, 0x84, 0xe3, 0x4c, 0x94, 0x37, 0xad, 0x83, 0x7e, 0xd0,
-0x8, 0x20, 0x54, 0x45, 0xa9, 0x1, 0x8d, 0x87, 0x7d, 0x4c, 0xf1, 0x37, 0xa9, 0x0, 0x8d, 0x87,
-0x7d, 0x4c, 0xf1, 0x37, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0xa5, 0x61, 0x20, 0xee,
-0xa5, 0x20, 0x46, 0x48, 0x4c, 0xf1, 0x37, 0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c,
-0xf1, 0x37, 0x20, 0x60, 0xa6, 0x4c, 0x9e, 0x62, 0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3,
-0x4c, 0xf1, 0x37, 0x20, 0x1e, 0xa0, 0x4c, 0x9e, 0x62, 0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0,
-0x3, 0x4c, 0xf1, 0x37, 0x20, 0xdd, 0xa2, 0x4c, 0x9e, 0x62, 0x20, 0x6a, 0x54, 0xee, 0x8a, 0x7d,
-0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0xe0, 0xa2, 0x85, 0x81, 0x4c, 0xf1, 0x37,
-0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0x77, 0xaa, 0x4c, 0x9e,
-0x62, 0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0x70, 0xaa, 0x4c,
-0x9e, 0x62, 0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0xc0, 0xaa,
-0x4c, 0x9e, 0x62, 0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0x1a,
-0xab, 0x4c, 0x9e, 0x62, 0x20, 0x4e, 0x35, 0x4c, 0xe1, 0x64, 0x20, 0x54, 0x45, 0x20, 0x3d, 0x3f,
-0xf0, 0x3, 0x4c, 0xfb, 0x37, 0x68, 0x68, 0x4c, 0x9a, 0x32, 0xad, 0x73, 0x7d, 0xd0, 0x6, 0xee,
-0x73, 0x7d, 0x4c, 0x81, 0xa2, 0xad, 0xd4, 0x31, 0xac, 0xd5, 0x31, 0x20, 0xe0, 0xa2, 0xd0, 0x1,
-0x60, 0xc9, 0x1, 0xd0, 0x1, 0x60, 0x4c, 0x81, 0xa2, 0xad, 0x73, 0x7d, 0xd0, 0x6, 0xee, 0x73,
-0x7d, 0x4c, 0x81, 0xa2, 0xad, 0xd4, 0x31, 0xac, 0xd5, 0x31, 0x20, 0xe0, 0xa2, 0xd0, 0x1, 0x60,
-0xc9, 0xff, 0xd0, 0x1, 0x60, 0x4c, 0x81, 0xa2, 0x20, 0x41, 0x62, 0xb0, 0x3, 0x4c, 0xf1, 0x37,
-0xd0, 0x6, 0x20, 0x24, 0x62, 0x4c, 0x9e, 0x62, 0x20, 0x3c, 0x62, 0x4c, 0x9e, 0x62, 0xa9, 0x31,
-0x8d, 0x0, 0x2, 0xa9, 0x0, 0x8d, 0x1, 0x2, 0xa9, 0xff, 0x85, 0x3b, 0xa9, 0x1, 0x85, 0x3c,
-0x20, 0x73, 0x4, 0x4c, 0x7f, 0xa3, 0xa9, 0x30, 0x4c, 0x26, 0x62, 0x20, 0x53, 0x60, 0xb0, 0x1,
-0x60, 0x20, 0x6a, 0x54, 0x20, 0x59, 0xa2, 0x20, 0x81, 0xa2, 0xad, 0xd4, 0x31, 0xac, 0xd5, 0x31,
-0x20, 0xe0, 0xa2, 0x38, 0x60, 0x20, 0x41, 0x62, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0xc9, 0x1, 0xd0,
-0x6, 0x20, 0x24, 0x62, 0x4c, 0x9e, 0x62, 0x20, 0x3c, 0x62, 0x4c, 0x9e, 0x62, 0x20, 0x41, 0x62,
-0xb0, 0x3, 0x4c, 0xf1, 0x37, 0xc9, 0xff, 0xd0, 0x6, 0x20, 0x24, 0x62, 0x4c, 0x9e, 0x62, 0x20,
-0x3c, 0x62, 0x4c, 0x9e, 0x62, 0x20, 0x41, 0x62, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0xf0, 0x6, 0x20,
-0x24, 0x62, 0x4c, 0x9e, 0x62, 0x20, 0x3c, 0x62, 0x20, 0x46, 0x48, 0x20, 0x4a, 0x65, 0x4c, 0xf1,
-0x37, 0xad, 0x5d, 0x7f, 0x85, 0xda, 0xad, 0x5e, 0x7f, 0x85, 0xdb, 0xa0, 0x0, 0x20, 0x55, 0x43,
-0x85, 0x3, 0xc8, 0x20, 0x55, 0x43, 0x85, 0x4, 0x60, 0x20, 0x40, 0x46, 0x85, 0xe2, 0x20, 0xda,
-0x45, 0xa5, 0xe2, 0xf0, 0x1, 0x60, 0xad, 0x3b, 0x7d, 0xc9, 0x9, 0x90, 0xec, 0xad, 0x43, 0x7d,
-0xd0, 0xe7, 0x4c, 0x35, 0x46, 0x20, 0x54, 0x45, 0x20, 0xe4, 0x62, 0x4c, 0x4d, 0x38, 0xa4, 0xb,
-0xa2, 0x0, 0xc8, 0xb9, 0xbc, 0x76, 0x9d, 0x63, 0x78, 0xf0, 0x4, 0xe8, 0xc8, 0xd0, 0xf4, 0x8e,
-0x62, 0x78, 0x20, 0xa7, 0x62, 0x20, 0xbf, 0x62, 0xa5, 0xe2, 0xf0, 0x3, 0x4c, 0xf1, 0x37, 0x20,
-0xb7, 0x45, 0xa0, 0x0, 0xb9, 0xc3, 0x75, 0xcc, 0xc2, 0x75, 0xb0, 0xe9, 0xc8, 0xc9, 0x20, 0xf0,
-0xf3, 0x88, 0xa2, 0x0, 0xb9, 0xc3, 0x75, 0xdd, 0x63, 0x78, 0xd0, 0xd9, 0xc8, 0xe8, 0xec, 0x62,
-0x78, 0x90, 0xf1, 0xa5, 0x31, 0x85, 0xe5, 0xa5, 0x32, 0x85, 0xe6, 0x20, 0xf4, 0x4f, 0x4c, 0x65,
-0x38, 0xa0, 0x0, 0xb9, 0xbc, 0x76, 0xf0, 0x7, 0xc9, 0x5b, 0xf0, 0x4, 0xc8, 0xd0, 0xf4, 0x60,
-0x8c, 0x61, 0x78, 0xc8, 0xa2, 0x0, 0xb9, 0xbc, 0x76, 0xf0, 0xf4, 0xc9, 0x5d, 0xf0, 0x8, 0x9d,
-0x63, 0x78, 0xe8, 0xc8, 0xd0, 0xf0, 0x60, 0x8c, 0x60, 0x78, 0x8e, 0x62, 0x78, 0x20, 0xa7, 0x62,
-0x20, 0xbf, 0x62, 0xa5, 0xe2, 0xf0, 0x1, 0x60, 0x20, 0xb7, 0x45, 0xa0, 0x0, 0xb9, 0xc3, 0x75,
-0xcc, 0xc2, 0x75, 0xb0, 0xeb, 0xc8, 0xc9, 0x20, 0xf0, 0xf3, 0x88, 0xa2, 0x0, 0xb9, 0xc3, 0x75,
-0xdd, 0x63, 0x78, 0xd0, 0xdb, 0xc8, 0xe8, 0xec, 0x62, 0x78, 0x90, 0xf1, 0xad, 0x60, 0x78, 0x38,
-0xed, 0x61, 0x78, 0x8d, 0xdf, 0x7d, 0xc9, 0x5, 0xb0, 0x28, 0xa6, 0xab, 0xa9, 0x5, 0x38, 0xed,
-0xdf, 0x7d, 0x18, 0x65, 0xab, 0x85, 0xab, 0xa8, 0xbd, 0xbc, 0x76, 0x99, 0xbc, 0x76, 0x88, 0xca,
-0xec, 0x60, 0x78, 0xb0, 0xf3, 0xa9, 0x5, 0x38, 0xed, 0xdf, 0x7d, 0x18, 0x6d, 0x60, 0x78, 0x8d,
-0x60, 0x78, 0xac, 0x61, 0x78, 0xa9, 0x20, 0x88, 0xc8, 0x99, 0xbc, 0x76, 0xcc, 0x60, 0x78, 0x90,
-0xf7, 0xa5, 0x31, 0x18, 0x69, 0x1, 0x20, 0x15, 0x64, 0xa2, 0x1, 0xac, 0x61, 0x78, 0xbd, 0xdf,
-0x7d, 0x99, 0xbc, 0x76, 0xe8, 0xc8, 0xec, 0xdf, 0x7d, 0x90, 0xf3, 0xf0, 0xf1, 0xa9, 0x3b, 0x99,
-0xbc, 0x76, 0xc8, 0xa5, 0x32, 0x18, 0x69, 0x1, 0x20, 0x15, 0x64, 0xa2, 0x1, 0xbd, 0xdf, 0x7d,
-0x99, 0xbc, 0x76, 0xc8, 0xe8, 0xec, 0xdf, 0x7d, 0x90, 0xf3, 0xf0, 0xf1, 0x4c, 0x39, 0x63, 0x8d,
-0xdf, 0x7d, 0xa2, 0x0, 0xad, 0xdf, 0x7d, 0xe8, 0x38, 0xe9, 0xa, 0x8d, 0xdf, 0x7d, 0xb0, 0xf4,
-0xca, 0xa9, 0xa, 0x6d, 0xdf, 0x7d, 0x18, 0x69, 0x30, 0x8d, 0xe1, 0x7d, 0x8a, 0xf0, 0xc, 0x18,
-0x69, 0x30, 0x8d, 0xe0, 0x7d, 0xa9, 0x2, 0x8d, 0xdf, 0x7d, 0x60, 0xa9, 0x1, 0x8d, 0xdf, 0x7d,
-0xad, 0xe1, 0x7d, 0x8d, 0xe0, 0x7d, 0x60, 0xee, 0x8a, 0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c,
-0xf1, 0x37, 0x20, 0x49, 0x5e, 0x20, 0x3c, 0x62, 0x20, 0x6f, 0x64, 0xf0, 0x6, 0x20, 0x3c, 0x62,
-0x4c, 0x9e, 0x62, 0x20, 0x24, 0x62, 0x4c, 0x9e, 0x62, 0x20, 0x6a, 0x54, 0x20, 0x59, 0xa2, 0x20,
-0x57, 0x5e, 0xad, 0xd4, 0x31, 0xac, 0xd5, 0x31, 0x20, 0xe0, 0xa2, 0x38, 0x60, 0x20, 0xe4, 0xff,
-0xd0, 0x1, 0x60, 0xc9, 0x85, 0xd0, 0x3, 0xa9, 0x1, 0x60, 0xa9, 0x0, 0x60, 0xee, 0x8a, 0x7d,
-0x20, 0x53, 0x60, 0x90, 0x11, 0x20, 0x49, 0x5e, 0x20, 0x3c, 0x62, 0x20, 0x6f, 0x64, 0xd0, 0xe,
-0x20, 0x92, 0x48, 0x20, 0x46, 0x48, 0xa9, 0x0, 0x8d, 0x7f, 0x7d, 0x4c, 0xfb, 0x37, 0xa2, 0x0,
-0xac, 0x40, 0x7d, 0xc8, 0xb9, 0x38, 0x78, 0x9d, 0x0, 0x2, 0xf0, 0x4, 0xe8, 0xc8, 0xd0, 0xf4,
-0x86, 0xe3, 0x20, 0xf4, 0x4f, 0x4c, 0x9c, 0x37, 0xa0, 0x0, 0xb9, 0x0, 0x2, 0x99, 0x38, 0x78,
-0xc8, 0xc4, 0xe3, 0x90, 0xf5, 0xa9, 0x0, 0x99, 0x38, 0x78, 0x60, 0xa9, 0x1, 0x85, 0xe7, 0x20,
-0xc4, 0x56, 0xa9, 0x0, 0x8d, 0x81, 0x7d, 0x4c, 0xc1, 0x54, 0xad, 0x44, 0x7d, 0x8d, 0x4d, 0x7f,
-0xad, 0x45, 0x7d, 0x8d, 0x4e, 0x7f, 0x20, 0xa0, 0x38, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0xee, 0x4b,
-0x77, 0xee, 0x4b, 0x77, 0xa5, 0xe5, 0x8d, 0x12, 0x7d, 0xa5, 0xe6, 0x8d, 0x13, 0x7d, 0xee, 0x8a,
-0x7d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0x49, 0x5e, 0xad, 0x12, 0x7d, 0x85,
-0xe5, 0xad, 0x13, 0x7d, 0x85, 0xe6, 0x20, 0xda, 0x4f, 0x20, 0xce, 0x4f, 0x20, 0x57, 0x5e, 0x20,
-0x49, 0x48, 0xad, 0x4d, 0x7f, 0x8d, 0x44, 0x7d, 0xad, 0x4e, 0x7f, 0x8d, 0x45, 0x7d, 0x20, 0xd5,
-0x34, 0x4c, 0xf1, 0x37, 0xad, 0x50, 0x65, 0x85, 0x5a, 0x60, 0x0, 0x20, 0x54, 0x45, 0xa9, 0x1,
-0x8d, 0x5, 0x7f, 0x20, 0x8c, 0x53, 0xa5, 0x31, 0x8d, 0x4f, 0x7f, 0xa5, 0x32, 0x8d, 0x50, 0x7f,
-0xa9, 0x31, 0x85, 0x31, 0xa9, 0x10, 0x85, 0x32, 0x20, 0xc7, 0x49, 0xa9, 0x5, 0x8d, 0x41, 0x7d,
-0x20, 0x9f, 0x48, 0xad, 0x4f, 0x7f, 0x85, 0x3d, 0xa9, 0x0, 0x85, 0x3f, 0xa9, 0x10, 0x20, 0xf0,
-0x4c, 0xa9, 0x32, 0x8d, 0x0, 0x2, 0xa9, 0x30, 0x8d, 0x1, 0x2, 0xa9, 0x0, 0x8d, 0x2, 0x2,
-0x20, 0x6a, 0x54, 0xa9, 0xff, 0x85, 0x3b, 0xa9, 0x1, 0x85, 0x3c, 0x20, 0x73, 0x4, 0x20, 0x7f,
-0xa3, 0x20, 0x49, 0x5e, 0x20, 0xd5, 0x65, 0x20, 0xd4, 0x4f, 0x20, 0x57, 0x5e, 0xa5, 0x61, 0x20,
-0x97, 0xa1, 0xa9, 0xf, 0x85, 0x32, 0xa9, 0x31, 0x85, 0x31, 0x20, 0xc7, 0x49, 0x20, 0x46, 0x48,
-0x20, 0xe0, 0x65, 0x20, 0x1, 0x67, 0x20, 0xd8, 0x32, 0x20, 0xe0, 0x34, 0x4c, 0xab, 0x39, 0xa5,
-0x31, 0x85, 0xe5, 0xa5, 0x32, 0x85, 0xe6, 0x4c, 0xda, 0x4f, 0xa9, 0x14, 0x8d, 0x4d, 0x7f, 0xa9,
-0x93, 0x20, 0xe8, 0x66, 0xa9, 0xd, 0x20, 0xe8, 0x66, 0xad, 0xc4, 0x7d, 0x8d, 0x3b, 0x5, 0xa9,
-0x0, 0x8d, 0x85, 0x7e, 0x8d, 0x87, 0x7e, 0xa9, 0x20, 0x8d, 0x56, 0x74, 0xa9, 0x10, 0x85, 0x32,
-0xee, 0x87, 0x7e, 0xa9, 0x0, 0x8d, 0x55, 0x74, 0x20, 0xa9, 0x66, 0xa9, 0x31, 0x85, 0x31, 0x20,
-0xd5, 0x65, 0x20, 0xd4, 0x4f, 0xc6, 0x32, 0x20, 0xd5, 0x65, 0x20, 0xce, 0x4f, 0xe6, 0x32, 0x20,
-0xc7, 0x49, 0x20, 0x87, 0x9e, 0x20, 0x46, 0x48, 0x20, 0x94, 0xa2, 0xa5, 0x66, 0x85, 0x6e, 0x20,
-0x63, 0x5e, 0xad, 0x4f, 0x7f, 0x85, 0x31, 0xa9, 0x0, 0x85, 0x32, 0xa9, 0x11, 0x8d, 0x4e, 0x7f,
-0x20, 0xc7, 0x49, 0x20, 0x6f, 0x5e, 0xa9, 0x23, 0x8d, 0xe8, 0x7e, 0x20, 0xd5, 0x65, 0x20, 0xce,
-0x4f, 0x20, 0x47, 0x62, 0xc9, 0x1, 0xd0, 0x5, 0xa9, 0x20, 0x8d, 0xe8, 0x7e, 0xad, 0xe8, 0x7e,
-0x20, 0xe8, 0x66, 0xa9, 0x20, 0x20, 0xe8, 0x66, 0xe6, 0x32, 0xce, 0x4e, 0x7f, 0xd0, 0xd1, 0xa9,
-0xd, 0x20, 0xe8, 0x66, 0x20, 0xdf, 0x66, 0xce, 0x4d, 0x7f, 0xf0, 0x3, 0x4c, 0x2, 0x66, 0xee,
-0x87, 0x7e, 0xee, 0x87, 0x7e, 0xa9, 0xd, 0x20, 0xe8, 0x66, 0x20, 0xb3, 0x66, 0x4c, 0xdf, 0x66,
-0xad, 0x4d, 0x7f, 0xc9, 0xa, 0xb0, 0x6, 0x18, 0x69, 0x30, 0x4c, 0xe8, 0x66, 0x38, 0xe9, 0xa,
-0x4c, 0x9d, 0x66, 0xa9, 0x5b, 0x20, 0xe8, 0x66, 0xa9, 0x2d, 0x4c, 0xe8, 0x66, 0xa9, 0x0, 0x8d,
-0x55, 0x74, 0xa9, 0x20, 0x20, 0xe8, 0x66, 0x20, 0xe8, 0x66, 0xa9, 0x1, 0x8d, 0x4d, 0x7f, 0x20,
-0x96, 0x66, 0xa9, 0x2d, 0x20, 0xe8, 0x66, 0xee, 0x4d, 0x7f, 0xad, 0x4d, 0x7f, 0xc9, 0x12, 0x90,
-0xee, 0xa9, 0xd, 0x20, 0xe8, 0x66, 0x4c, 0xe8, 0x66, 0xad, 0x83, 0x7e, 0xd0, 0x1, 0x60, 0x4c,
-0x32, 0x12, 0x20, 0xd2, 0xff, 0x48, 0xad, 0x83, 0x7e, 0xd0, 0x2, 0x68, 0x60, 0xee, 0x55, 0x74,
-0x68, 0x20, 0x18, 0x45, 0xac, 0x55, 0x74, 0x99, 0x56, 0x74, 0x60, 0xa9, 0x0, 0x8d, 0x5, 0x7f,
-0x8d, 0x83, 0x7e, 0x20, 0xaf, 0x53, 0x20, 0xc7, 0x49, 0x20, 0xd5, 0x65, 0x4c, 0xce, 0x4f, 0xad,
-0x84, 0x7e, 0x5, 0x45, 0xf0, 0x43, 0xad, 0x3, 0x73, 0xf0, 0x3e, 0xa5, 0x31, 0xcd, 0x89, 0x7e,
-0x90, 0x37, 0xa5, 0xe7, 0xc9, 0x3, 0xf0, 0x31, 0x20, 0xf7, 0x67, 0xf0, 0x2c, 0xa0, 0x1, 0xa2,
-0x0, 0xee, 0x3, 0x73, 0xb9, 0x3, 0x73, 0x20, 0x18, 0x45, 0x9d, 0x56, 0x74, 0xc8, 0xe8, 0xcc,
-0x3, 0x73, 0x90, 0xf0, 0xe0, 0xb, 0xb0, 0x8, 0xa9, 0x20, 0x9d, 0x56, 0x74, 0xe8, 0xd0, 0xf4,
-0x8e, 0x55, 0x74, 0x20, 0xb3, 0x67, 0x20, 0x32, 0x12, 0xa9, 0x0, 0x8d, 0x3, 0x73, 0x8d, 0x84,
-0x7e, 0x60, 0xa5, 0x45, 0xd0, 0x3, 0x20, 0x72, 0x67, 0x4c, 0xfb, 0x37, 0xa9, 0x0, 0x8d, 0x3,
-0x73, 0x8d, 0x87, 0x7d, 0xa9, 0x1, 0x8d, 0x83, 0x7e, 0x20, 0x80, 0x12, 0xa5, 0x58, 0x8d, 0x1,
-0x7f, 0xa5, 0x31, 0x8d, 0x2, 0x7f, 0x8d, 0x87, 0x7e, 0x8d, 0x89, 0x7e, 0x8d, 0x8c, 0x7e, 0x20,
-0x7d, 0x12, 0xa5, 0x32, 0x8d, 0x85, 0x7e, 0x8d, 0x8a, 0x7e, 0x8d, 0x8b, 0x7e, 0xa8, 0xad, 0x70,
-0x7e, 0x99, 0x59, 0x73, 0x60, 0xa9, 0x0, 0x8d, 0x83, 0x7e, 0x4c, 0xf1, 0x37, 0xa5, 0x31, 0x8d,
-0x8c, 0x7e, 0x38, 0xed, 0x2, 0x7f, 0x18, 0x6d, 0x1, 0x7f, 0x8d, 0x87, 0x7e, 0xa4, 0x32, 0x8c,
-0x8b, 0x7e, 0xb9, 0x59, 0x73, 0x8d, 0x85, 0x7e, 0xad, 0x55, 0x74, 0x18, 0x6d, 0x85, 0x7e, 0xc8,
-0x99, 0x59, 0x73, 0xad, 0x87, 0x7e, 0xcd, 0x40, 0x7e, 0x90, 0x9, 0xad, 0x40, 0x7e, 0x8d, 0x87,
-0x7e, 0xce, 0x87, 0x7e, 0xa5, 0x5a, 0xcd, 0x87, 0x7e, 0xb0, 0x5, 0xad, 0x87, 0x7e, 0x85, 0x5a,
-0x60, 0xa5, 0x31, 0xcd, 0x8c, 0x7e, 0xf0, 0x9, 0xa5, 0x32, 0xcd, 0x8a, 0x7e, 0xf0, 0x9, 0xd0,
-0xa, 0xa5, 0x32, 0xcd, 0x8b, 0x7e, 0x90, 0x3, 0xa9, 0x1, 0x60, 0xa9, 0x0, 0x60, 0x4c, 0xfb,
-0x37, 0x20, 0x25, 0x38, 0xa6, 0x44, 0x20, 0xea, 0x49, 0x90, 0xf3, 0x85, 0x3e, 0x20, 0x25, 0x38,
-0xa6, 0x43, 0x20, 0xea, 0x49, 0x90, 0xe7, 0x85, 0x40, 0x20, 0xf4, 0x4f, 0xa5, 0x31, 0xc5, 0x3e,
-0xf0, 0x2, 0xb0, 0xda, 0x85, 0x3d, 0xa5, 0x32, 0xc5, 0x40, 0xf0, 0x2, 0xb0, 0xd0, 0x85, 0x3f,
-0x20, 0x72, 0x67, 0xa9, 0x1, 0x8d, 0x8, 0x7f, 0x20, 0x7e, 0x5b, 0xa5, 0x3d, 0x85, 0xe5, 0xad,
-0x2e, 0x7d, 0x85, 0x3f, 0xa5, 0x3f, 0x85, 0xe6, 0xee, 0x84, 0x7e, 0x20, 0x35, 0x45, 0x20, 0xda,
-0x4f, 0x20, 0xd5, 0x55, 0xa9, 0xb, 0x8d, 0x3, 0x73, 0x20, 0x15, 0x67, 0xa5, 0x3f, 0xc5, 0x40,
-0xb0, 0x4, 0xe6, 0x3f, 0xd0, 0xde, 0xa5, 0x3d, 0xc5, 0x3e, 0xb0, 0x7, 0x20, 0x78, 0x5b, 0xe6,
-0x3d, 0xd0, 0xc8, 0xa9, 0x0, 0x8d, 0x83, 0x7e, 0x8d, 0x84, 0x7e, 0x8d, 0x8, 0x7f, 0x20, 0xd5,
-0x34, 0x4c, 0xfb, 0x37, 0xc9, 0x11, 0xd0, 0x6, 0x20, 0xd, 0x58, 0x4c, 0x5b, 0x58, 0xc9, 0x91,
-0xd0, 0x6, 0x20, 0x1a, 0x58, 0x4c, 0xa0, 0x58, 0xc9, 0xb2, 0xd0, 0x6, 0x20, 0x0, 0x58, 0x4c,
-0x30, 0x58, 0xc9, 0xb6, 0xd0, 0x6, 0x20, 0x25, 0x58, 0x4c, 0x86, 0x58, 0xc9, 0xaa, 0xd0, 0x5,
-0xa9, 0x1, 0x8d, 0x1a, 0x7d, 0xc9, 0xa3, 0xd0, 0x5, 0xa9, 0x2, 0x8d, 0x1a, 0x7d, 0xc9, 0xbb,
-0xd0, 0x5, 0xa9, 0x4, 0x8d, 0x1a, 0x7d, 0xc9, 0xbc, 0xd0, 0x5, 0xa9, 0x3, 0x8d, 0x1a, 0x7d,
-0x60, 0x20, 0xfd, 0x4c, 0x20, 0x97, 0x30, 0x20, 0xcc, 0x4e, 0xad, 0x80, 0x7e, 0xd0, 0x32, 0xa0,
-0xb, 0x99, 0x66, 0x7f, 0x88, 0x10, 0xfa, 0x8d, 0x1e, 0x7c, 0x85, 0x45, 0x85, 0x46, 0x8d, 0x6a,
-0x7f, 0x8d, 0x84, 0x7f, 0x8d, 0x7b, 0x7e, 0x85, 0x5c, 0x85, 0x8c, 0x85, 0x8d, 0x8d, 0x75, 0x7e,
-0x85, 0x78, 0x8d, 0x90, 0x7e, 0xee, 0x6b, 0x7f, 0xe6, 0x8c, 0xe6, 0x45, 0xa9, 0x1, 0x8d, 0xfc,
-0x7e, 0xa9, 0xff, 0x8d, 0x80, 0x7e, 0x20, 0x2f, 0x2a, 0xe0, 0x0, 0xf0, 0x1, 0x60, 0xa9, 0x20,
-0x8d, 0xf4, 0x7e, 0x8d, 0x3, 0x74, 0x20, 0xf6, 0x11, 0xe0, 0x0, 0xd0, 0x56, 0xad, 0x70, 0x7f,
-0xd0, 0x8, 0xad, 0x66, 0x7f, 0xcd, 0x6c, 0x7e, 0x90, 0x3, 0x4c, 0x92, 0x4a, 0xe6, 0x5c, 0xee,
-0x66, 0x7f, 0x20, 0x3e, 0x4d, 0xad, 0x4b, 0x7e, 0xd0, 0xf0, 0x20, 0xf3, 0x4a, 0x20, 0x3a, 0x4b,
-0xa6, 0x53, 0xe0, 0x0, 0xd0, 0x2d, 0x20, 0x34, 0x4b, 0xe0, 0x0, 0xd0, 0x26, 0x20, 0xc9, 0x4b,
-0x4c, 0x5c, 0x4a, 0xa9, 0x0, 0x85, 0x55, 0x20, 0x34, 0x4b, 0xad, 0x81, 0x7e, 0xd0, 0x14, 0x20,
-0x66, 0x53, 0xad, 0x66, 0x7f, 0xcd, 0x6d, 0x7e, 0xb0, 0x9, 0x20, 0xc9, 0x4b, 0xee, 0x66, 0x7f,
-0x4c, 0x92, 0x4a, 0xad, 0x84, 0x7f, 0xf0, 0x5, 0xa9, 0x1, 0x8d, 0x84, 0x7f, 0xad, 0x90, 0x7e,
-0xf0, 0x6, 0xee, 0x6e, 0x7e, 0x20, 0xc9, 0x4b, 0xa5, 0x78, 0xd0, 0x14, 0xad, 0x4b, 0x7e, 0xd0,
-0xf, 0xa5, 0x53, 0xd0, 0x13, 0xa9, 0x0, 0x8d, 0x66, 0x7f, 0x8d, 0x70, 0x7f, 0x4c, 0x4d, 0x4a,
-0xad, 0x81, 0x7e, 0xd0, 0x3, 0x20, 0x34, 0x4b, 0x20, 0xae, 0xff, 0x20, 0x48, 0x2a, 0xa9, 0x0,
-0x8d, 0xf4, 0x7e, 0x60, 0xa9, 0x0, 0x85, 0x8e, 0xc5, 0x55, 0xd0, 0x1, 0x60, 0xa4, 0x55, 0x88,
-0xb9, 0x3, 0x74, 0xc9, 0x20, 0xd0, 0x11, 0x88, 0xc0, 0xfa, 0xb0, 0xf0, 0xc0, 0x0, 0xd0, 0xf0,
-0xb9, 0x3, 0x74, 0xc9, 0x20, 0xd0, 0x1, 0x60, 0xc8, 0x84, 0x8e, 0xa0, 0x0, 0xb9, 0x3, 0x74,
-0xc9, 0x22, 0xd0, 0x2, 0xa9, 0x27, 0x20, 0xb6, 0x2a, 0xd, 0x6f, 0x7e, 0x99, 0xfc, 0x74, 0xc8,
-0xc4, 0x8e, 0x90, 0xe9, 0x60, 0xa9, 0xd, 0x4c, 0x2, 0x51, 0x0, 0xa5, 0x8e, 0xf0, 0x3f, 0xa0,
-0x0, 0x8c, 0x68, 0x7e, 0x8c, 0x39, 0x4b, 0xad, 0x74, 0x7e, 0xf0, 0x5, 0xa9, 0x20, 0x20, 0x2,
-0x51, 0xee, 0x68, 0x7e, 0xa5, 0x85, 0xf0, 0x1a, 0xad, 0x77, 0x7f, 0xc9, 0xe, 0xd0, 0x13, 0xee,
-0x68, 0x7e, 0xad, 0x39, 0x4b, 0xd0, 0xb, 0xa9, 0xe, 0x20, 0x2, 0x51, 0xee, 0x39, 0x4b, 0xee,
-0x74, 0x7f, 0xad, 0x68, 0x7e, 0xcd, 0x74, 0x7e, 0x90, 0xd2, 0xa5, 0x8e, 0xd0, 0x8, 0xa5, 0x5b,
-0x8d, 0x68, 0x7e, 0x4c, 0x8b, 0x50, 0xa9, 0x0, 0x8d, 0x68, 0x7e, 0x85, 0x85, 0xad, 0x39, 0x4b,
-0xf0, 0x8, 0xa9, 0x0, 0x8d, 0x77, 0x7f, 0x8d, 0x7e, 0x7f, 0xac, 0x8f, 0x7e, 0xc0, 0x0, 0xf0,
-0x3, 0x4c, 0xa7, 0x4e, 0x20, 0x8b, 0x50, 0xac, 0x68, 0x7e, 0xb9, 0xfc, 0x74, 0x85, 0x52, 0xa5,
-0x52, 0x20, 0xfc, 0x11, 0xe0, 0x0, 0xd0, 0xa, 0xee, 0x68, 0x7e, 0xad, 0x68, 0x7e, 0xc5, 0x8e,
-0x90, 0xd8, 0xa5, 0x5b, 0x8d, 0x68, 0x7e, 0x4c, 0x8b, 0x50, 0xad, 0x6e, 0x7e, 0xd0, 0x5, 0x20,
-0xe4, 0xff, 0xf0, 0x19, 0x20, 0x97, 0x25, 0xa9, 0x0, 0x85, 0xc, 0x8d, 0x6e, 0x7e, 0xa9, 0x14,
-0x20, 0x7d, 0x13, 0x20, 0x35, 0x1f, 0xc9, 0xd, 0xd0, 0xf9, 0x20, 0xd5, 0x16, 0x60, 0xa9, 0x1,
-0x8d, 0xfd, 0x7e, 0x8d, 0x69, 0x7e, 0xce, 0x69, 0x7e, 0xf0, 0x5, 0xa9, 0x0, 0x8d, 0xfd, 0x7e,
-0x20, 0x42, 0x17, 0x20, 0x11, 0x2d, 0x20, 0x97, 0x25, 0x20, 0xd5, 0x16, 0xa9, 0x0, 0x8d, 0x69,
-0x7e, 0x8d, 0x80, 0x7e, 0xad, 0xfd, 0x7e, 0xd0, 0x21, 0x20, 0x4b, 0x54, 0x20, 0x48, 0x2a, 0x20,
-0xaa, 0x12, 0x20, 0x1c, 0x2d, 0x20, 0xc5, 0x1c, 0xa9, 0x0, 0x85, 0x78, 0x8d, 0x4b, 0x7e, 0x20,
-0x97, 0x25, 0xe6, 0x49, 0x20, 0xd5, 0x16, 0x4c, 0x38, 0x1d, 0x20, 0x0, 0x4a, 0x4c, 0x21, 0x4c,
-0xad, 0x73, 0x7e, 0x38, 0xed, 0x74, 0x7e, 0x85, 0x5b, 0xc6, 0x5b, 0x60, 0xad, 0x6e, 0x7f, 0xf0,
-0x6, 0xa9, 0x0, 0x8d, 0x6e, 0x7f, 0x60, 0x20, 0x95, 0x1f, 0x20, 0x9c, 0x1f, 0x90, 0x1, 0x60,
-0xa9, 0x1, 0x85, 0x78, 0x60, 0xad, 0x75, 0x7e, 0xf0, 0x1, 0x60, 0xa4, 0x55, 0xc4, 0x5b, 0xb0,
-0x1, 0x60, 0x88, 0xb9, 0x3, 0x74, 0xc9, 0x20, 0xf0, 0x10, 0x20, 0xeb, 0x4e, 0xa0, 0x0, 0x20,
-0x83, 0x12, 0xc9, 0x20, 0xf0, 0x4, 0x18, 0xa, 0x90, 0x1, 0x60, 0xa4, 0x55, 0xc0, 0x2, 0xb0,
-0x1, 0x60, 0x88, 0xb9, 0x3, 0x74, 0xc9, 0x20, 0xf0, 0x5, 0xc0, 0x2, 0xb0, 0xf4, 0x60, 0xa2,
-0x0, 0xa5, 0x55, 0x8d, 0x4f, 0x7f, 0xad, 0x6c, 0x7f, 0x8d, 0x50, 0x7f, 0xa5, 0x55, 0xc9, 0x3,
-0x90, 0x23, 0xc6, 0x55, 0xe0, 0x28, 0xb0, 0x1d, 0xe4, 0x5b, 0xb0, 0x19, 0xe8, 0x20, 0xe0, 0x4c,
-0xa4, 0x55, 0x88, 0xb9, 0x3, 0x74, 0xc9, 0x20, 0xd0, 0xe2, 0x99, 0x3, 0x74, 0xc4, 0x5b, 0xb0,
-0x3, 0xc8, 0xd0, 0xf6, 0x60, 0xad, 0x4f, 0x7f, 0x85, 0x55, 0xad, 0x50, 0x7f, 0x8d, 0x6c, 0x7f,
-0x60, 0xad, 0x6d, 0x7f, 0xf0, 0x9, 0xad, 0x6c, 0x7f, 0xf0, 0x3, 0xce, 0x6c, 0x7f, 0x60, 0xce,
-0x71, 0x7e, 0xad, 0x71, 0x7e, 0xc9, 0xff, 0xf0, 0x1, 0x60, 0xce, 0x72, 0x7e, 0x60, 0x20, 0x76,
-0x2a, 0x20, 0xe0, 0x4e, 0xa9, 0x0, 0x85, 0x78, 0x8d, 0x8f, 0x7e, 0x8d, 0x4b, 0x7e, 0x8d, 0x81,
-0x7e, 0x8d, 0x6a, 0x7e, 0x8d, 0x6b, 0x7e, 0xee, 0x6a, 0x7e, 0xad, 0x80, 0x7e, 0xd0, 0x1d, 0xad,
-0x24, 0x7e, 0x8d, 0x73, 0x7e, 0xa9, 0x3c, 0x8d, 0x6c, 0x7e, 0xa9, 0x41, 0x8d, 0x6d, 0x7e, 0xa9,
-0x0, 0x85, 0x5c, 0x8d, 0x66, 0x7f, 0x8d, 0x74, 0x7e, 0x8d, 0x76, 0x7e, 0x4c, 0x3f, 0x4c, 0xad,
-0x6b, 0x7e, 0xf0, 0x8, 0xa9, 0x0, 0x8d, 0x6a, 0x7e, 0x8d, 0x6b, 0x7e, 0x20, 0xfc, 0x4e, 0xad,
-0x73, 0x7d, 0xf0, 0x3, 0x4c, 0xa6, 0x23, 0xad, 0xfc, 0x7e, 0xd0, 0x6, 0x20, 0x64, 0x4c, 0x4c,
-0xcb, 0x4d, 0x4c, 0xcf, 0x50, 0xa9, 0x1, 0xd0, 0x2, 0xa9, 0x0, 0x8d, 0x76, 0x7e, 0x4c, 0x83,
-0x4e, 0x20, 0xaa, 0x30, 0xb0, 0x14, 0xcd, 0x74, 0x7e, 0xb0, 0x3, 0xad, 0x73, 0x7e, 0xc5, 0x54,
-0x90, 0x2, 0xa5, 0x54, 0x8d, 0x73, 0x7e, 0x20, 0x3f, 0x4c, 0x4c, 0x83, 0x4e, 0x20, 0xaa, 0x30,
-0xb0, 0xf8, 0xcd, 0x73, 0x7e, 0x90, 0x3, 0xad, 0x74, 0x7e, 0x8d, 0x74, 0x7e, 0x20, 0x3f, 0x4c,
-0x4c, 0x83, 0x4e, 0x20, 0xaa, 0x30, 0xb0, 0xe2, 0xd0, 0x3, 0x4c, 0x83, 0x4e, 0x8d, 0x6c, 0x7e,
-0x4c, 0x83, 0x4e, 0x20, 0xaa, 0x30, 0xb0, 0xd2, 0xd0, 0x3, 0x4c, 0x83, 0x4e, 0x8d, 0x6d, 0x7e,
-0xce, 0x6d, 0x7e, 0x4c, 0x83, 0x4e, 0xee, 0x70, 0x7f, 0x4c, 0x83, 0x4e, 0x20, 0xcf, 0x50, 0xad,
-0x76, 0x7e, 0xd0, 0x1, 0x60, 0xa5, 0x55, 0xc9, 0xa, 0xb0, 0x1, 0x60, 0xa5, 0x5b, 0x38, 0xe5,
-0x55, 0x8d, 0xfb, 0x7d, 0xb0, 0x1, 0x60, 0x20, 0xf2, 0x4f, 0xad, 0xfb, 0x7d, 0xd0, 0x10, 0xa4,
-0x5b, 0x84, 0x55, 0x88, 0xb9, 0x3, 0x74, 0xc9, 0x20, 0xd0, 0x3, 0x4c, 0x17, 0x50, 0x60, 0xee,
-0xfb, 0x7d, 0xad, 0xfb, 0x7d, 0xc9, 0x1e, 0xb0, 0xe6, 0x20, 0x43, 0x4e, 0xae, 0x4f, 0x7f, 0xac,
-0x4f, 0x7f, 0xb9, 0x56, 0x74, 0xc9, 0x20, 0xf0, 0xd, 0x9d, 0x3, 0x74, 0xe8, 0xc8, 0xc4, 0x5b,
-0x90, 0xf0, 0xf0, 0xee, 0xb0, 0x16, 0xad, 0xfb, 0x7d, 0xd0, 0x5, 0xa9, 0x20, 0x4c, 0x18, 0x4e,
-0xce, 0xfb, 0x7d, 0xa9, 0x20, 0x9d, 0x3, 0x74, 0xe8, 0x4c, 0x18, 0x4e, 0xad, 0xfb, 0x7d, 0xf0,
-0xae, 0x4c, 0x8, 0x4e, 0xa0, 0x0, 0xb9, 0x3, 0x74, 0x99, 0x56, 0x74, 0xc8, 0xc4, 0x5b, 0x90,
-0xf5, 0x60, 0x85, 0x52, 0x18, 0xa, 0xb0, 0xb, 0xad, 0x6a, 0x7e, 0xf0, 0x3, 0x4c, 0x83, 0x4f,
-0x4c, 0x92, 0x4f, 0xa0, 0x0, 0x20, 0x83, 0x12, 0x18, 0xa, 0x90, 0x2c, 0x20, 0x83, 0x12, 0x20,
-0xb6, 0x2a, 0x99, 0x56, 0x74, 0xc8, 0xc9, 0x3a, 0xf0, 0x1e, 0xd0, 0xe9, 0x8c, 0xfa, 0x7d, 0xa9,
-0x0, 0x8d, 0xfb, 0x7d, 0x20, 0x4b, 0x4c, 0xee, 0xfb, 0x7d, 0xad, 0xfb, 0x7d, 0xcd, 0xfa, 0x7d,
-0x90, 0xf2, 0x4c, 0x49, 0x4f, 0x4c, 0xa8, 0x4f, 0x8c, 0xfa, 0x7d, 0xce, 0xfa, 0x7d, 0xa9, 0x0,
-0x84, 0xe3, 0x8d, 0xfb, 0x7d, 0x4c, 0x5, 0x52, 0xac, 0x68, 0x7e, 0xb9, 0xfc, 0x74, 0x85, 0x52,
-0x29, 0x80, 0xd0, 0x10, 0xa5, 0x52, 0xc9, 0x41, 0x90, 0xa, 0x29, 0x7f, 0x18, 0x69, 0x20, 0x85,
-0x52, 0x4c, 0xae, 0x4b, 0xa5, 0x52, 0x29, 0x7f, 0x85, 0x52, 0x4c, 0xae, 0x4b, 0xa9, 0x3, 0x85,
-0xac, 0xa9, 0x4, 0x85, 0xae, 0xa9, 0x67, 0x85, 0xad, 0xa9, 0x0, 0x85, 0xab, 0x8d, 0xa2, 0x75,
-0x60, 0xa5, 0xd8, 0x8d, 0x71, 0x7e, 0xa5, 0xd9, 0x8d, 0x72, 0x7e, 0x60, 0xad, 0x71, 0x7e, 0x85,
-0xd8, 0xad, 0x72, 0x7e, 0x85, 0xd9, 0x60, 0x20, 0xb7, 0x4f, 0x4c, 0xa8, 0x4f, 0x20, 0xe7, 0x16,
-0xa5, 0x78, 0xf0, 0x3, 0xee, 0x4b, 0x7e, 0xad, 0x4b, 0x7e, 0xf0, 0x4, 0x60, 0x4c, 0xa8, 0x4f,
-0x20, 0xeb, 0x4e, 0xad, 0xfc, 0x7e, 0x8d, 0x87, 0x7f, 0xa9, 0x0, 0x85, 0x55, 0x8d, 0xee, 0x7d,
-0x8d, 0xfc, 0x7e, 0x8d, 0x77, 0x7f, 0x8d, 0x73, 0x7d, 0xa9, 0x20, 0x8d, 0xfc, 0x74, 0xad, 0x71,
-0x7e, 0xcd, 0x78, 0x7e, 0xd0, 0x8, 0xad, 0x72, 0x7e, 0xcd, 0x7b, 0x7e, 0xf0, 0xc6, 0xad, 0x72,
-0x7e, 0x8d, 0x7b, 0x7e, 0xad, 0x71, 0x7e, 0x8d, 0x78, 0x7e, 0xa9, 0x0, 0x8d, 0x6e, 0x7f, 0xad,
-0x6d, 0x7f, 0xf0, 0x25, 0xac, 0x6c, 0x7f, 0xb9, 0xa6, 0x7b, 0x20, 0x74, 0x12, 0x8d, 0x6, 0x7f,
-0xee, 0x6c, 0x7f, 0xee, 0x6e, 0x7f, 0xac, 0x6c, 0x7f, 0xcc, 0x6d, 0x7f, 0x90, 0x16, 0xa0, 0x0,
-0x8c, 0x6d, 0x7f, 0x8c, 0x6c, 0x7f, 0x4c, 0x83, 0x4f, 0xa0, 0x0, 0x20, 0x83, 0x12, 0x8d, 0x6,
-0x7f, 0x4c, 0x51, 0x4e, 0xad, 0x6, 0x7f, 0xa4, 0x55, 0x29, 0x7f, 0x99, 0x3, 0x74, 0xe6, 0x55,
-0xee, 0xee, 0x7d, 0xa5, 0x78, 0xd0, 0xc, 0xa5, 0x55, 0xc5, 0x5b, 0xb0, 0x6, 0x20, 0x4b, 0x4c,
-0x4c, 0x49, 0x4f, 0x20, 0x4b, 0x4c, 0x4c, 0xe0, 0x4e, 0xa4, 0x55, 0xc4, 0x5b, 0xb0, 0xf4, 0xa9,
-0x20, 0x99, 0x3, 0x74, 0xe6, 0x55, 0xd0, 0xf1, 0x20, 0xe0, 0x4e, 0xa5, 0x5c, 0x48, 0xa9, 0x0,
-0x85, 0x5c, 0xa5, 0x5c, 0xc9, 0x64, 0x90, 0x2, 0xe6, 0x78, 0x20, 0x56, 0x18, 0xe6, 0x5c, 0xa5,
-0xd9, 0xcd, 0x72, 0x7e, 0x90, 0xec, 0xf0, 0x2, 0xb0, 0x9, 0xa5, 0xd8, 0xcd, 0x71, 0x7e, 0x90,
-0xe1, 0xf0, 0xdf, 0x20, 0xe0, 0x4e, 0x20, 0xee, 0x4c, 0x20, 0xeb, 0x4e, 0x68, 0x85, 0x5c, 0xee,
-0xfc, 0x7e, 0x60, 0x20, 0xcf, 0x50, 0xa0, 0x0, 0xb9, 0x3, 0x74, 0xc9, 0x20, 0xd0, 0xb, 0xc8,
-0xc4, 0x55, 0x90, 0xf4, 0xa0, 0x1, 0x8c, 0x4f, 0x7f, 0x60, 0xc4, 0x55, 0xb0, 0xf6, 0xc8, 0xb9,
-0x3, 0x74, 0xc9, 0x20, 0xf0, 0xf0, 0xd0, 0xf2, 0xa4, 0x5b, 0x88, 0xcc, 0x4f, 0x7f, 0xf0, 0x2b,
-0x90, 0x29, 0xb9, 0x3, 0x74, 0xc9, 0x20, 0xf0, 0xf1, 0xa6, 0x5b, 0xc8, 0xca, 0x88, 0xb9, 0x3,
-0x74, 0x9d, 0x3, 0x74, 0xcc, 0x4f, 0x7f, 0xf0, 0x4, 0xc9, 0x20, 0xd0, 0xef, 0x8c, 0xe, 0x7d,
-0x9d, 0x3, 0x74, 0xca, 0xec, 0xe, 0x7d, 0x90, 0x2, 0xd0, 0xf5, 0x60, 0x20, 0xe0, 0x4e, 0x20,
-0x23, 0x12, 0x20, 0xeb, 0x4e, 0xad, 0xee, 0x7d, 0x8d, 0xfc, 0x7d, 0xad, 0x75, 0x7f, 0xc9, 0x6,
-0xb0, 0x1f, 0x20, 0x1d, 0x12, 0xee, 0xe, 0x77, 0xad, 0xe0, 0x7d, 0xf0, 0x14, 0xee, 0x75, 0x7f,
-0xac, 0x75, 0x7f, 0x99, 0x76, 0x7f, 0xad, 0xfc, 0x7d, 0x99, 0x7d, 0x7f, 0xee, 0xfc, 0x7d, 0xd0,
-0xda, 0xa9, 0x1, 0x8d, 0x74, 0x7f, 0x20, 0xeb, 0x4e, 0x4c, 0x29, 0x52, 0xad, 0x74, 0x7f, 0xf0,
-0x34, 0xa8, 0xad, 0x68, 0x7e, 0xd9, 0x7d, 0x7f, 0x90, 0x2b, 0xb9, 0x7d, 0x7f, 0x8d, 0xfc, 0x7d,
-0xee, 0xfc, 0x7d, 0xa9, 0x0, 0x99, 0x7d, 0x7f, 0xb9, 0x76, 0x7f, 0x85, 0x52, 0x20, 0xfc, 0x11,
-0xee, 0x74, 0x7f, 0xad, 0x74, 0x7f, 0xcd, 0x75, 0x7f, 0x90, 0xb, 0xf0, 0x9, 0xa9, 0x0, 0x8d,
-0x74, 0x7f, 0x8d, 0x75, 0x7f, 0x60, 0xa8, 0xb9, 0x7d, 0x7f, 0xcd, 0xfc, 0x7d, 0xf0, 0xcb, 0x60,
-0xad, 0x75, 0x7e, 0xd0, 0x13, 0xad, 0x87, 0x7f, 0xd0, 0xe, 0xa0, 0x0, 0xb9, 0x3, 0x74, 0xc9,
-0x20, 0xd0, 0x6, 0xc8, 0xc4, 0x55, 0x90, 0xf4, 0x60, 0xa2, 0x0, 0xb9, 0x3, 0x74, 0x9d, 0x3,
-0x74, 0xc8, 0xe8, 0xc4, 0x55, 0x90, 0xf4, 0xa9, 0x20, 0xe4, 0x55, 0xb0, 0xeb, 0x9d, 0x3, 0x74,
-0xe8, 0xd0, 0xf6, 0x85, 0x52, 0x20, 0xfc, 0x11, 0x86, 0x53, 0x60, 0xa9, 0x2, 0x8d, 0xf5, 0x7e,
-0x4c, 0xad, 0x12, 0x0, 0x8c, 0x4d, 0x70, 0x4d, 0xa2, 0x4d, 0xb2, 0x4d, 0x64, 0x4d, 0xf6, 0x4e,
-0x68, 0x4d, 0xc5, 0x4d, 0xbe, 0x54, 0x48, 0x52, 0x4f, 0x52, 0x57, 0x52, 0xf8, 0x52, 0x14, 0x53,
-0x26, 0x53, 0x32, 0x53, 0xd2, 0x52, 0x4d, 0x53, 0xa7, 0x53, 0x4b, 0x50, 0x58, 0x53, 0x5f, 0x53,
-0xfb, 0x53, 0xe, 0x54, 0x7, 0x54, 0x47, 0x51, 0xff, 0xff, 0x4c, 0x4d, 0x41, 0x52, 0x47, 0xff,
-0x1, 0x52, 0x4d, 0x41, 0x52, 0x47, 0xff, 0x2, 0x50, 0x41, 0x47, 0x45, 0x4c, 0x45, 0x4e, 0xff,
-0x3, 0x50, 0x41, 0x50, 0x45, 0x52, 0x53, 0x49, 0x5a, 0x45, 0xff, 0x4, 0x4a, 0x55, 0x53, 0x54,
-0x49, 0x46, 0x59, 0xff, 0x5, 0x5f, 0xff, 0x6, 0x4e, 0x4f, 0x4a, 0x55, 0x53, 0x54, 0x49, 0x46,
-0x59, 0xff, 0x7, 0x4e, 0x45, 0x58, 0x54, 0x50, 0x41, 0x47, 0x45, 0xff, 0x8, 0x4c, 0x49, 0x4e,
-0x4b, 0x46, 0x49, 0x4c, 0x45, 0xff, 0x9, 0x50, 0x41, 0x55, 0x53, 0x45, 0xff, 0xa, 0x4f, 0x54,
-0x48, 0x45, 0x52, 0xff, 0xb, 0x50, 0x41, 0x47, 0x45, 0x50, 0x41, 0x55, 0x53, 0x45, 0xff, 0xc,
-0x54, 0x46, 0xff, 0xd, 0x52, 0x43, 0xff, 0xe, 0x46, 0x4c, 0x44, 0xff, 0xf, 0x54, 0x54, 0x4c,
-0xff, 0x10, 0x45, 0x4f, 0x46, 0x3f, 0xff, 0x11, 0x23, 0x52, 0x43, 0xff, 0x12, 0x43, 0x45, 0x4e,
-0x54, 0x45, 0x52, 0xff, 0x13, 0x41, 0x53, 0x43, 0xff, 0x14, 0x23, 0x50, 0x41, 0x47, 0x45, 0xff,
-0x15, 0x4e, 0x4f, 0x23, 0x50, 0x41, 0x47, 0x45, 0xff, 0x16, 0x53, 0x45, 0x54, 0x23, 0x50, 0x47,
-0xff, 0x17, 0x4e, 0x4f, 0x57, 0x52, 0x41, 0x50, 0xff, 0x18, 0x57, 0x52, 0x41, 0x50, 0x4f, 0x4e,
-0xff, 0x19, 0x0, 0x4c, 0x83, 0x4e, 0x20, 0x2c, 0x52, 0x20, 0xa7, 0x30, 0xa9, 0xff, 0x85, 0xb,
-0x20, 0x44, 0x12, 0xf0, 0xee, 0xc9, 0x3b, 0xf0, 0xf7, 0x20, 0x47, 0x12, 0xb0, 0xf2, 0x20, 0xa,
-0x51, 0xf0, 0xed, 0xa9, 0x4c, 0x85, 0xdd, 0x4c, 0xdd, 0x0, 0x4c, 0x2, 0x52, 0xa0, 0x0, 0xb9,
-0x56, 0x74, 0x99, 0xbc, 0x76, 0xc8, 0xc4, 0xe3, 0x90, 0xf5, 0x84, 0xab, 0x8c, 0xa2, 0x75, 0xa9,
-0x0, 0x99, 0xbc, 0x76, 0xa9, 0x5, 0x85, 0xe3, 0x60, 0xa9, 0x1, 0x8d, 0x6e, 0x7e, 0xd0, 0x5,
-0xa9, 0x1, 0x8d, 0x8f, 0x7e, 0x4c, 0x29, 0x52, 0xa9, 0x1, 0x8d, 0x90, 0x7e, 0xd0, 0xf6, 0xa9,
-0x0, 0x85, 0x53, 0x85, 0x78, 0x20, 0xcc, 0x4e, 0x20, 0x2f, 0x2a, 0x4c, 0xf6, 0x11, 0x20, 0xae,
-0xff, 0x4c, 0x48, 0x2a, 0x20, 0x23, 0x12, 0x20, 0x1d, 0x12, 0xad, 0xe0, 0x7d, 0xd0, 0xf, 0xad,
-0xe1, 0x7d, 0xd0, 0xa, 0xa5, 0x8c, 0x8d, 0xe0, 0x7d, 0xa5, 0x8d, 0x8d, 0xe1, 0x7d, 0x20, 0x6b,
-0x12, 0xa5, 0x45, 0x85, 0x8c, 0xa5, 0x46, 0x85, 0x8d, 0x60, 0xa5, 0x8d, 0xc5, 0x15, 0xf0, 0x2,
-0xb0, 0xe, 0xa5, 0x8c, 0xc5, 0x14, 0xf0, 0x2, 0xb0, 0x6, 0xe6, 0x8c, 0xd0, 0x2, 0xe6, 0x8d,
-0x60, 0xa5, 0xd8, 0x8d, 0x1f, 0x7c, 0xa5, 0xd9, 0x8d, 0x20, 0x7c, 0xee, 0x1e, 0x7c, 0x60, 0xa5,
-0x8d, 0xc5, 0x15, 0xf0, 0x5, 0xb0, 0x9, 0xa9, 0x0, 0x60, 0xa5, 0x8c, 0xc5, 0x14, 0x90, 0xf7,
-0xa9, 0x1, 0x60, 0x20, 0xbe, 0x52, 0xf0, 0x3, 0x4c, 0x29, 0x52, 0x20, 0x99, 0x52, 0xad, 0x1e,
-0x7c, 0xf0, 0xf5, 0xad, 0x1f, 0x7c, 0x85, 0xd8, 0xad, 0x20, 0x7c, 0x85, 0xd9, 0x20, 0xe0, 0x4e,
-0x20, 0xee, 0x4c, 0x20, 0xee, 0x4c, 0x4c, 0x3b, 0x53, 0xad, 0x69, 0x7f, 0xd0, 0x14, 0x20, 0xe0,
-0x4e, 0x20, 0x6d, 0x52, 0x20, 0x5f, 0x12, 0xf0, 0x9, 0x20, 0x5e, 0x52, 0x20, 0xeb, 0x4e, 0x20,
-0xb0, 0x52, 0x4c, 0x29, 0x52, 0x20, 0xe0, 0x4e, 0x20, 0x6d, 0x52, 0x20, 0x73, 0x52, 0x20, 0x62,
-0x12, 0x20, 0x5e, 0x52, 0x4c, 0x3b, 0x53, 0x20, 0xe0, 0x4e, 0x20, 0x41, 0x53, 0x20, 0x65, 0x12,
-0x4c, 0x3b, 0x53, 0x20, 0xe0, 0x4e, 0x20, 0x41, 0x53, 0x20, 0x68, 0x12, 0x20, 0xeb, 0x4e, 0x4c,
-0x29, 0x52, 0x20, 0xaa, 0x30, 0xd0, 0x3, 0xad, 0x9f, 0x7e, 0x8d, 0xe0, 0x7d, 0x60, 0xa9, 0x0,
-0x8d, 0xd6, 0x7d, 0x20, 0x7a, 0x12, 0x4c, 0x29, 0x52, 0xa9, 0x1, 0x8d, 0x84, 0x7f, 0xd0, 0xf6,
-0xa9, 0x0, 0x8d, 0x84, 0x7f, 0xf0, 0xef, 0xad, 0x84, 0x7f, 0xc9, 0x1, 0xf0, 0x1, 0x60, 0xad,
-0x66, 0x7f, 0xcd, 0x6c, 0x7e, 0x90, 0xf7, 0xee, 0x6a, 0x7f, 0xee, 0x84, 0x7f, 0xad, 0xd7, 0x7e,
-0x48, 0xad, 0xd8, 0x7e, 0x48, 0xad, 0x6a, 0x7f, 0x8d, 0xd7, 0x7e, 0xa9, 0x0, 0x8d, 0xd8, 0x7e,
-0x8d, 0xd6, 0x7d, 0x20, 0x7a, 0x12, 0x20, 0xb1, 0x53, 0xee, 0x66, 0x7f, 0x20, 0x34, 0x4b, 0x68,
-0x8d, 0xd8, 0x7e, 0x68, 0x8d, 0xd7, 0x7e, 0x60, 0xa9, 0x1, 0x8d, 0x73, 0x7d, 0xe6, 0x85, 0x4c,
-0x29, 0x52, 0x20, 0xe7, 0x16, 0xa0, 0x5, 0xb9, 0xf5, 0x53, 0x99, 0x3, 0x74, 0x88, 0x10, 0xf7,
-0xa2, 0x6, 0xc8, 0xb9, 0xa6, 0x7b, 0xc9, 0x30, 0xf0, 0xf8, 0xad, 0x6d, 0x7f, 0xf0, 0x1b, 0xb9,
-0xa6, 0x7b, 0x20, 0x74, 0x12, 0x9d, 0x3, 0x74, 0xe8, 0xc8, 0xcc, 0x6d, 0x7f, 0x90, 0xeb, 0xf0,
-0xe9, 0xa5, 0x5b, 0x85, 0x55, 0xa0, 0x0, 0x8c, 0x6d, 0x7f, 0xee, 0x73, 0x7d, 0x20, 0xa6, 0x23,
-0x20, 0xf3, 0x4a, 0x4c, 0x3a, 0x4b, 0x20, 0x50, 0x41, 0x47, 0x45, 0x20, 0x20, 0xaa, 0x30, 0x8d,
-0x6a, 0x7f, 0xce, 0x6a, 0x7f, 0x4c, 0x29, 0x52, 0xa9, 0x0, 0x8d, 0x75, 0x7e, 0xf0, 0xf6, 0xa9,
-0x1, 0x8d, 0x75, 0x7e, 0xd0, 0xef, 0x20, 0x92, 0x2d, 0xad, 0x80, 0x7e, 0xd0, 0x8, 0xa9, 0x10,
-0x20, 0x6b, 0x2d, 0x4c, 0x2f, 0x54, 0x20, 0x44, 0x2c, 0xa5, 0x59, 0x8d, 0xa2, 0x75, 0x85, 0x7c,
-0x20, 0x4e, 0x2a, 0x20, 0xd8, 0x11, 0x86, 0x53, 0x20, 0x15, 0x19, 0x20, 0x55, 0x2c, 0xa5, 0x53,
-0xc9, 0x40, 0xf0, 0x1, 0x60, 0xa9, 0x0, 0x85, 0x53, 0x4c, 0xf0, 0x54, 0x20, 0xd5, 0x16, 0xa9,
-0x3, 0x20, 0x7d, 0x13, 0x20, 0xaf, 0x30, 0xa9, 0x0, 0x8d, 0x80, 0x7e, 0x8d, 0x81, 0x7e, 0x20,
-0x15, 0x54, 0xa5, 0x53, 0xf0, 0x3, 0x4c, 0xb8, 0x30, 0x20, 0x0, 0x4a, 0xad, 0x80, 0x7e, 0xf0,
-0x3, 0x4c, 0xb8, 0x30, 0xa9, 0x1, 0x8d, 0x80, 0x7e, 0xa5, 0x7c, 0x85, 0x59, 0x20, 0x15, 0x54,
-0xa5, 0x53, 0xf0, 0x3, 0x4c, 0xb8, 0x30, 0xa9, 0x0, 0x8d, 0x81, 0x7e, 0x20, 0x0, 0x4a, 0x4c,
-0x6b, 0x54, 0x60, 0xad, 0x81, 0x7e, 0xd0, 0xfa, 0xa0, 0x0, 0x84, 0x59, 0xb9, 0xbc, 0x76, 0xf0,
-0xf1, 0xc9, 0x27, 0xf0, 0x4, 0xc8, 0xd0, 0xf4, 0x60, 0xa2, 0x0, 0xc8, 0xb9, 0xbc, 0x76, 0xf0,
-0xe1, 0xc9, 0x27, 0xf0, 0x7, 0x9d, 0x8b, 0x78, 0xe8, 0xd0, 0xf0, 0x60, 0x86, 0x7c, 0x60, 0xad,
-0xfd, 0x7e, 0xf0, 0x3, 0x4c, 0x29, 0x52, 0xa9, 0x0, 0x8d, 0x80, 0x7e, 0x20, 0x92, 0x54, 0xa9,
-0x1, 0x85, 0x78, 0x8d, 0x4b, 0x7e, 0x8d, 0x81, 0x7e, 0x4c, 0x29, 0x52, 0xa0, 0x0, 0xb9, 0xeb,
-0x54, 0xf0, 0x6, 0x99, 0x8b, 0x78, 0xc8, 0xd0, 0xf5, 0x84, 0x59, 0x60, 0x2e, 0x2e, 0x54, 0x57,
-0x0, 0x20, 0x97, 0x25, 0xe6, 0x49, 0x20, 0xd5, 0x16, 0xa0, 0x0, 0xb9, 0x8b, 0x78, 0x91, 0xc8,
-0xc8, 0xc4, 0x59, 0x90, 0xf6, 0x60, 0x42, 0xa9, 0x3, 0x8d, 0xf5, 0x7e, 0x4c, 0xad, 0x12, 0x0,
-0x3d, 0x56, 0x97, 0x56, 0x6, 0x5d, 0xa1, 0x61, 0x5d, 0x60, 0x81, 0x5e, 0x26, 0x5e, 0x2d, 0x61,
-0x2d, 0x63, 0x4d, 0x64, 0x6b, 0x64, 0x6f, 0x56, 0x7b, 0x56, 0x92, 0x67, 0x8a, 0x67, 0x2f, 0x55,
-0xff, 0xff, 0x49, 0x44, 0xff, 0x1, 0x43, 0x41, 0xff, 0x2, 0x4e, 0x45, 0x57, 0x54, 0x46, 0xff,
-0x3, 0x4e, 0x52, 0xff, 0x4, 0x52, 0x43, 0xff, 0x5, 0x55, 0x44, 0xff, 0x6, 0x54, 0x46, 0xff,
-0x7, 0x52, 0x56, 0xff, 0x8, 0x44, 0x53, 0xff, 0x9, 0x52, 0x45, 0x53, 0x45, 0x54, 0x4c, 0x49,
-0x53, 0x54, 0xff, 0xa, 0x48, 0x49, 0x47, 0x48, 0x52, 0x43, 0xff, 0xb, 0x54, 0x43, 0xff, 0xc,
-0x54, 0x57, 0xff, 0xd, 0x50, 0x49, 0xff, 0xe, 0x53, 0x52, 0xff, 0xf, 0x0, 0x0, 0x0, 0x8c,
-0x3d, 0x7d, 0xa9, 0x0, 0x8d, 0x3e, 0x7d, 0xe6, 0xb, 0xa4, 0xb, 0xc0, 0x50, 0xb0, 0x14, 0xb9,
-0xbc, 0x76, 0xf0, 0xf, 0xc9, 0x20, 0xd0, 0x5, 0xee, 0x3e, 0x7d, 0xd0, 0xea, 0xac, 0x3d, 0x7d,
-0x48, 0x68, 0x60, 0xac, 0x3d, 0x7d, 0xee, 0x3e, 0x7d, 0xa9, 0x0, 0x60, 0xad, 0x69, 0x7f, 0xf0,
-0x44, 0x4c, 0x8, 0x56, 0x20, 0xdf, 0x55, 0x20, 0x23, 0x12, 0xa9, 0xff, 0x85, 0xb, 0x20, 0x7e,
-0x55, 0xf0, 0xe9, 0xc9, 0x3b, 0xf0, 0xf7, 0x20, 0x47, 0x12, 0xb0, 0xf2, 0x20, 0x6, 0x55, 0xf0,
-0xed, 0xa9, 0x4c, 0x85, 0xdd, 0x4c, 0xdd, 0x0, 0xa9, 0x0, 0x8d, 0x6, 0x7f, 0x4c, 0xab, 0x55,
-0xa0, 0x0, 0xb9, 0xa6, 0x7b, 0x99, 0xbd, 0x76, 0xf0, 0x3, 0xc8, 0xd0, 0xf5, 0x84, 0xab, 0xa9,
-0x20, 0x8d, 0xbc, 0x76, 0x60, 0x20, 0x9d, 0x56, 0xa9, 0x11, 0x20, 0xd2, 0xff, 0x20, 0xd2, 0xff,
-0xa9, 0x14, 0x20, 0x4a, 0x67, 0x85, 0x46, 0x85, 0x45, 0x20, 0x3a, 0x5d, 0xad, 0xc4, 0x7d, 0x8d,
-0x3b, 0x5, 0x20, 0xd7, 0x60, 0xa9, 0x2, 0x8d, 0x1a, 0x7f, 0xa9, 0x46, 0x20, 0x92, 0x12, 0xa9,
-0x3e, 0x20, 0x92, 0x12, 0x20, 0xc2, 0x5f, 0xa9, 0x0, 0x8d, 0x1a, 0x7f, 0xad, 0xa7, 0x2, 0xd0,
-0xd8, 0x4c, 0xb3, 0x55, 0x4c, 0x1d, 0x12, 0x20, 0x1d, 0x12, 0xad, 0xe0, 0x7d, 0x60, 0x20, 0x8,
-0x12, 0x4c, 0xd7, 0x55, 0xee, 0xe, 0x77, 0xac, 0xe, 0x77, 0xcc, 0xf, 0x77, 0xf0, 0xb, 0x90,
-0x9, 0x88, 0xce, 0xe, 0x77, 0xb9, 0xf, 0x77, 0x38, 0x60, 0xb9, 0xf, 0x77, 0x18, 0x60, 0x20,
-0x9d, 0x56, 0xa9, 0xa, 0x85, 0x49, 0xa9, 0x0, 0x85, 0xc, 0x20, 0x4d, 0x12, 0x4c, 0xf4, 0x55,
-0x20, 0x9d, 0x56, 0x20, 0x5c, 0x12, 0x20, 0x87, 0x56, 0x4c, 0xcf, 0x11, 0x20, 0x9d, 0x56, 0x20,
-0x5c, 0x12, 0x20, 0x87, 0x56, 0x4c, 0xc3, 0x11, 0xa9, 0x0, 0x8d, 0x9a, 0x7d, 0x8d, 0x69, 0x7f,
-0x85, 0x45, 0x20, 0xa, 0x59, 0x4c, 0xdf, 0x55, 0x20, 0x14, 0x12, 0x4c, 0xd7, 0x55, 0xa9, 0x93,
-0x4c, 0xd2, 0xff, 0xd8, 0xa9, 0x0, 0x8d, 0xec, 0x7e, 0x8d, 0xed, 0x7e, 0x85, 0x2d, 0x85, 0x2e,
-0xa9, 0x2, 0x85, 0x2b, 0xad, 0xed, 0x7e, 0xcd, 0xe4, 0x7e, 0xd0, 0x9, 0xad, 0xec, 0x7e, 0xcd,
-0xe3, 0x7e, 0xd0, 0x1, 0x60, 0xee, 0xec, 0x7e, 0xd0, 0x3, 0xee, 0xed, 0x7e, 0xad, 0x1d, 0x7f,
-0x18, 0x65, 0x2b, 0x85, 0x2b, 0x90, 0xdd, 0xe6, 0x2d, 0xd0, 0x2, 0xe6, 0x2e, 0xa5, 0x2b, 0x18,
-0x69, 0x2, 0x85, 0x2b, 0x4c, 0xb3, 0x56, 0xa5, 0x2e, 0xcd, 0x65, 0x57, 0x90, 0x9, 0xd0, 0x3a,
-0xa5, 0x2d, 0xcd, 0x64, 0x57, 0xb0, 0x33, 0xa5, 0x2e, 0xcd, 0x63, 0x57, 0x90, 0x9, 0xd0, 0x11,
-0xa5, 0x2d, 0xcd, 0x62, 0x57, 0xb0, 0xa, 0xa9, 0x2, 0x8d, 0x9c, 0x7e, 0xa9, 0x15, 0x4c, 0xaf,
-0x57, 0xa9, 0x19, 0x8d, 0x9c, 0x7e, 0xa5, 0x2d, 0x38, 0xed, 0x62, 0x57, 0x85, 0x2d, 0xa5, 0x2e,
-0xed, 0x63, 0x57, 0x85, 0x2e, 0xa9, 0x12, 0x4c, 0xaf, 0x57, 0xa9, 0x1f, 0x8d, 0x9c, 0x7e, 0xa5,
-0x2d, 0x38, 0xed, 0x64, 0x57, 0x85, 0x2d, 0xa5, 0x2e, 0xed, 0x65, 0x57, 0x85, 0x2e, 0xa9, 0x11,
-0x4c, 0xaf, 0x57, 0xa5, 0x45, 0x8d, 0xe3, 0x7e, 0xa5, 0x46, 0x8d, 0xe4, 0x7e, 0x20, 0x17, 0x58,
-0xa5, 0x2b, 0x8d, 0x9e, 0x7e, 0x20, 0xe6, 0x56, 0xad, 0x9c, 0x7e, 0x18, 0x6d, 0xb8, 0x7d, 0x8d,
-0xb8, 0x7d, 0x60, 0x4d, 0x1, 0xb6, 0x1, 0xa9, 0x0, 0x8d, 0xec, 0x7e, 0x8d, 0xed, 0x7e, 0x85,
-0x2b, 0xe6, 0x2b, 0xad, 0xed, 0x7e, 0xc5, 0x2e, 0x90, 0xd, 0xf0, 0x2, 0xd0, 0x1a, 0xad, 0xec,
-0x7e, 0xc5, 0x2d, 0xf0, 0x2, 0xb0, 0x11, 0xad, 0xf0, 0x7e, 0x18, 0x6d, 0xec, 0x7e, 0x8d, 0xec,
-0x7e, 0x90, 0xde, 0xee, 0xed, 0x7e, 0xd0, 0xd9, 0xad, 0xec, 0x7e, 0x38, 0xed, 0xf0, 0x7e, 0x8d,
-0xec, 0x7e, 0xa5, 0x2d, 0x38, 0xed, 0xec, 0x7e, 0x8d, 0xec, 0x7e, 0xc6, 0x2b, 0xc6, 0x2b, 0x60,
-0x8d, 0xf0, 0x7e, 0xa9, 0x0, 0x20, 0x66, 0x57, 0xa5, 0x2b, 0x8d, 0xb8, 0x7d, 0xad, 0xec, 0x7e,
-0x8d, 0xb9, 0x7d, 0x60, 0xad, 0xb8, 0x7d, 0xc9, 0x1f, 0x90, 0x9, 0xad, 0xb9, 0x7d, 0xc9, 0x10,
-0xb0, 0x16, 0x90, 0x1d, 0xc9, 0x19, 0x90, 0x9, 0xad, 0xb9, 0x7d, 0xc9, 0x11, 0xb0, 0x9, 0x90,
-0x10, 0xad, 0xb9, 0x7d, 0xc9, 0x14, 0x90, 0x9, 0xa9, 0x0, 0x8d, 0xb9, 0x7d, 0xee, 0xb8, 0x7d,
-0x60, 0xee, 0xb9, 0x7d, 0x60, 0x20, 0xc3, 0x57, 0xad, 0xb8, 0x7d, 0xc9, 0x12, 0xd0, 0x6, 0xa9,
-0x19, 0x8d, 0xb8, 0x7d, 0x60, 0xc9, 0x1f, 0xf0, 0xe, 0xc9, 0x24, 0x90, 0xa, 0xe6, 0x78, 0xce,
-0xb8, 0x7d, 0xa9, 0x10, 0x8d, 0xb9, 0x7d, 0x60, 0xad, 0x1e, 0x7f, 0xd0, 0x3, 0x4c, 0xa2, 0x56,
-0xad, 0x1d, 0x7f, 0x8d, 0xcb, 0x7e, 0xad, 0x1e, 0x7f, 0x8d, 0xcc, 0x7e, 0x8d, 0xcd, 0x7e, 0xa9,
-0x0, 0x8d, 0xce, 0x7e, 0x8d, 0xcf, 0x7e, 0x8d, 0xd0, 0x7e, 0xa9, 0xff, 0x8d, 0x1d, 0x7f, 0xa9,
-0x0, 0x8d, 0x1e, 0x7f, 0x20, 0xa2, 0x56, 0xa5, 0x2d, 0x18, 0x6d, 0xce, 0x7e, 0x8d, 0xce, 0x7e,
-0xa5, 0x2e, 0x6d, 0xcf, 0x7e, 0x8d, 0xcf, 0x7e, 0xa5, 0x2b, 0x18, 0x6d, 0xd0, 0x7e, 0x8d, 0xd0,
-0x7e, 0x90, 0x8, 0xee, 0xce, 0x7e, 0xd0, 0x3, 0xee, 0xcf, 0x7e, 0xce, 0xcd, 0x7e, 0xd0, 0xca,
-0xad, 0xcb, 0x7e, 0x8d, 0x1d, 0x7f, 0xa9, 0x0, 0x8d, 0x1e, 0x7f, 0x20, 0xa2, 0x56, 0xad, 0xcb,
-0x7e, 0x8d, 0x1d, 0x7f, 0xad, 0xcc, 0x7e, 0x8d, 0x1e, 0x7f, 0xa5, 0x2d, 0x18, 0x6d, 0xce, 0x7e,
-0x85, 0x2d, 0xa5, 0x2e, 0x6d, 0xcf, 0x7e, 0x85, 0x2e, 0xad, 0xd0, 0x7e, 0x18, 0x65, 0x2b, 0x85,
-0x2b, 0x90, 0xa, 0xe6, 0x2b, 0xe6, 0x2b, 0xe6, 0x2d, 0xd0, 0x2, 0xe6, 0x2e, 0x60, 0xad, 0x1d,
-0x59, 0x85, 0xd8, 0xad, 0x1e, 0x59, 0x85, 0xd9, 0xa2, 0x1, 0xec, 0x9f, 0x7e, 0xb0, 0xe, 0xa5,
-0xd8, 0x18, 0x69, 0x26, 0x85, 0xd8, 0x90, 0x2, 0xe6, 0xd9, 0xe8, 0xd0, 0xed, 0x60, 0xad, 0x1b,
-0x59, 0x85, 0xd8, 0xad, 0x1c, 0x59, 0x4c, 0xb5, 0x58, 0x20, 0xa, 0x59, 0x20, 0xcd, 0x58, 0xa0,
-0x23, 0x84, 0xe4, 0x8c, 0xc2, 0x7d, 0x20, 0x83, 0x12, 0x99, 0xa6, 0x7b, 0x88, 0x10, 0xf7, 0x60,
-0x20, 0xcd, 0x58, 0xa0, 0x23, 0x84, 0xe4, 0xb9, 0xa6, 0x7b, 0x91, 0xd8, 0x88, 0x10, 0xf8, 0x60,
-0x86, 0xe4, 0x20, 0x21, 0x59, 0x20, 0x3a, 0x5d, 0x4c, 0xc2, 0x5f, 0xa0, 0x27, 0xa9, 0x0, 0x99,
-0xa6, 0x7b, 0x88, 0xa9, 0x20, 0x99, 0xa6, 0x7b, 0x88, 0x10, 0xfa, 0x60, 0xbc, 0x6e, 0x0, 0x6c,
-0x0, 0xc1, 0xee, 0x98, 0x7d, 0x18, 0x69, 0x15, 0x20, 0x77, 0x12, 0xce, 0x98, 0x7d, 0x60, 0xa0,
-0x0, 0xb9, 0xa6, 0x7b, 0x99, 0xa1, 0x7e, 0xf0, 0xf5, 0xc8, 0xd0, 0xf5, 0xa9, 0x13, 0x20, 0x21,
-0x59, 0x4c, 0x11, 0x5d, 0xa9, 0x1, 0x8d, 0xec, 0x7e, 0xa0, 0x2, 0x84, 0x41, 0x20, 0xd8, 0x58,
-0x20, 0xf1, 0x5d, 0xee, 0x9f, 0x7e, 0xee, 0xec, 0x7e, 0xad, 0xec, 0x7e, 0xc9, 0x7, 0x90, 0xed,
-0x60, 0x20, 0xc4, 0x59, 0x20, 0xac, 0x59, 0x20, 0x8c, 0x59, 0xee, 0xb9, 0x7d, 0xad, 0x9f, 0x7e,
-0xc9, 0x12, 0x90, 0xf0, 0x60, 0x20, 0xc4, 0x59, 0x20, 0x43, 0x59, 0xad, 0x9f, 0x7e, 0xc9, 0x12,
-0xb0, 0x8, 0x20, 0xb8, 0x59, 0xee, 0xb9, 0x7d, 0xd0, 0xee, 0x4c, 0xb8, 0x59, 0xa9, 0x0, 0x8d,
-0xec, 0x7e, 0xee, 0xec, 0x7e, 0xa0, 0x2, 0x84, 0x41, 0x20, 0xe5, 0x5d, 0x20, 0xef, 0x58, 0xee,
-0x9f, 0x7e, 0xee, 0xec, 0x7e, 0xad, 0xec, 0x7e, 0xc9, 0x7, 0x90, 0xed, 0x60, 0xae, 0xb8, 0x7d,
-0xac, 0xb9, 0x7d, 0x20, 0x11, 0x12, 0x4c, 0x2, 0x12, 0xae, 0xb8, 0x7d, 0xac, 0xb9, 0x7d, 0x20,
-0x11, 0x12, 0x4c, 0x5, 0x12, 0xa9, 0x1, 0x8d, 0x9f, 0x7e, 0xa9, 0x6, 0x8d, 0xb9, 0x7d, 0xa9,
-0x12, 0x8d, 0xb8, 0x7d, 0x60, 0x20, 0xc9, 0x59, 0xce, 0xb9, 0x7d, 0x20, 0xac, 0x59, 0xa2, 0x10,
-0xbd, 0x5, 0x73, 0x9d, 0xa1, 0x7e, 0xca, 0x10, 0xf7, 0xa0, 0x4, 0xb9, 0x17, 0x73, 0x99, 0x1d,
-0x7f, 0x88, 0x10, 0xf7, 0xa0, 0x10, 0xb9, 0x1c, 0x73, 0x99, 0x23, 0x7f, 0xb9, 0x2d, 0x73, 0x99,
-0x35, 0x7f, 0x88, 0x10, 0xf1, 0xa0, 0x7, 0xb9, 0x3f, 0x73, 0x99, 0x46, 0x7f, 0x88, 0x10, 0xf7,
-0xad, 0x49, 0x73, 0x8d, 0x7c, 0x55, 0xad, 0x4a, 0x73, 0x8d, 0x7d, 0x55, 0xad, 0x4b, 0x73, 0x85,
-0x14, 0xad, 0x4c, 0x73, 0x85, 0x15, 0x60, 0x20, 0xc9, 0x59, 0xce, 0xb9, 0x7d, 0xa2, 0x10, 0xbd,
-0xa1, 0x7e, 0x9d, 0x5, 0x73, 0xca, 0x10, 0xf7, 0xa0, 0x4, 0xb9, 0x1d, 0x7f, 0x99, 0x17, 0x73,
-0x88, 0x10, 0xf7, 0xa0, 0x10, 0xb9, 0x23, 0x7f, 0x99, 0x1c, 0x73, 0xb9, 0x35, 0x7f, 0x99, 0x2d,
-0x73, 0x88, 0x10, 0xf1, 0xa0, 0x7, 0xb9, 0x46, 0x7f, 0x99, 0x3f, 0x73, 0x88, 0x10, 0xf7, 0xad,
-0x7c, 0x55, 0x8d, 0x49, 0x73, 0xad, 0x7d, 0x55, 0x8d, 0x4a, 0x73, 0xa5, 0x14, 0x8d, 0x4b, 0x73,
-0xa5, 0x15, 0x8d, 0x4c, 0x73, 0x4c, 0xb8, 0x59, 0xa0, 0x0, 0xb9, 0xa1, 0x7e, 0xf0, 0x6, 0x20,
-0x92, 0x12, 0xc8, 0xd0, 0xf5, 0x4c, 0x35, 0x5d, 0xa0, 0x0, 0xb9, 0xa6, 0x7b, 0xf0, 0x9, 0x20,
-0x2e, 0x5d, 0x20, 0x3f, 0x5d, 0xc8, 0xd0, 0xf2, 0x60, 0x20, 0xd8, 0x58, 0xa4, 0xe4, 0xa9, 0x0,
-0x99, 0xa6, 0x7b, 0x20, 0x87, 0x5a, 0x4c, 0x35, 0x5d, 0x20, 0x36, 0x56, 0xd0, 0x2, 0xa9, 0x1,
-0xc9, 0x26, 0x90, 0x2, 0xa9, 0x26, 0xac, 0x9f, 0x7e, 0x99, 0x34, 0x7f, 0x60, 0x20, 0x91, 0x5e,
-0x20, 0x45, 0x5c, 0x4c, 0x35, 0x5d, 0x20, 0x21, 0x59, 0x20, 0xd1, 0x5a, 0x20, 0x3a, 0x5d, 0x4c,
-0xc2, 0x5f, 0xa9, 0x4, 0x20, 0x21, 0x59, 0xad, 0x9f, 0x7e, 0x4c, 0x45, 0x5c, 0xa9, 0x0, 0x8d,
-0x9f, 0x7e, 0xee, 0x9f, 0x7e, 0x20, 0xa, 0x59, 0x20, 0x3d, 0x5c, 0xa9, 0x23, 0x85, 0xe4, 0xad,
-0x9f, 0x7e, 0xcd, 0x19, 0x7f, 0xb0, 0x3, 0x20, 0x98, 0x5a, 0x20, 0x21, 0x5c, 0xa9, 0x2, 0x20,
-0xc5, 0x5a, 0x20, 0xef, 0x58, 0x20, 0x3d, 0x5c, 0x20, 0xbc, 0x5a, 0x20, 0x21, 0x5c, 0x20, 0xa,
-0x59, 0xa9, 0x3, 0x85, 0xe4, 0x20, 0xc5, 0x5a, 0x20, 0xdf, 0x55, 0x20, 0x23, 0x12, 0x20, 0xa8,
-0x5a, 0xad, 0x9f, 0x7e, 0xcd, 0x1f, 0x7f, 0x90, 0xb9, 0x60, 0x20, 0x9d, 0x56, 0xad, 0xa7, 0x7d,
-0x48, 0xa9, 0x4, 0x8d, 0xa7, 0x7d, 0xa9, 0x0, 0x85, 0x78, 0x20, 0xa, 0x59, 0x20, 0x3d, 0x5c,
-0xad, 0x19, 0x7f, 0xf0, 0x3, 0x20, 0x77, 0x5a, 0x20, 0x21, 0x5c, 0xa9, 0x1, 0xa2, 0x10, 0x20,
-0xff, 0x58, 0x20, 0x2e, 0x59, 0x20, 0x3d, 0x5c, 0x20, 0xa, 0x59, 0x20, 0x18, 0x5c, 0x20, 0x21,
-0x5c, 0x20, 0x95, 0x5b, 0x20, 0xdc, 0x5a, 0x20, 0xb3, 0x5b, 0xad, 0x1f, 0x7f, 0x8d, 0x19, 0x7f,
-0xee, 0x19, 0x7f, 0x20, 0xd, 0x5c, 0xf0, 0xb9, 0x68, 0x8d, 0xa7, 0x7d, 0xa9, 0x1, 0x85, 0x14,
-0x8d, 0x20, 0x7f, 0x8d, 0x7c, 0x55, 0xa9, 0x0, 0x8d, 0x21, 0x7f, 0x85, 0x15, 0x8d, 0x7d, 0x55,
-0x8d, 0x48, 0x7f, 0x4c, 0xfd, 0x5d, 0xa9, 0x5, 0xa2, 0x3, 0x20, 0xff, 0x58, 0x20, 0xdf, 0x55,
-0x20, 0x23, 0x12, 0x20, 0x36, 0x56, 0xd0, 0x2, 0xa9, 0x1, 0xc9, 0x11, 0x90, 0x2, 0xa9, 0x11,
-0x8d, 0x1f, 0x7f, 0x60, 0x20, 0x9d, 0x56, 0x20, 0x77, 0x5a, 0xad, 0x1f, 0x7f, 0x20, 0x45, 0x5c,
-0x20, 0x3a, 0x5d, 0xa9, 0x0, 0x8d, 0x9f, 0x7e, 0xee, 0x9f, 0x7e, 0x20, 0x98, 0x5a, 0xa9, 0x9d,
-0x20, 0xd2, 0xff, 0x20, 0xbc, 0x5a, 0x20, 0x3a, 0x5d, 0xad, 0x9f, 0x7e, 0xcd, 0x1f, 0x7f, 0x90,
-0xe7, 0x20, 0x4d, 0x5c, 0xa9, 0x9, 0x20, 0x21, 0x59, 0x20, 0x4a, 0x12, 0xad, 0x46, 0x7f, 0x8d,
-0xe0, 0x7d, 0xad, 0x47, 0x7f, 0x8d, 0xe1, 0x7d, 0x20, 0x21, 0x5f, 0x4c, 0x3a, 0x5d, 0x20, 0x3a,
-0x5d, 0xa9, 0x7, 0x20, 0x21, 0x59, 0x20, 0xe4, 0xff, 0xc9, 0xd, 0xd0, 0xf9, 0x60, 0x20, 0x3a,
-0x5d, 0xa9, 0x8, 0x20, 0x21, 0x59, 0x4c, 0x11, 0x5d, 0xad, 0x1f, 0x7f, 0x20, 0x45, 0x5c, 0x4c,
-0x35, 0x5d, 0xa9, 0x91, 0x20, 0xd2, 0xff, 0x20, 0xd2, 0xff, 0x20, 0x3a, 0x5d, 0xa9, 0x0, 0x85,
-0xc, 0x60, 0xa9, 0x0, 0x8d, 0xa2, 0x7e, 0x8d, 0x1f, 0x7f, 0xee, 0x1f, 0x7f, 0x60, 0xa9, 0x11,
-0x20, 0xd2, 0xff, 0x4c, 0xd2, 0xff, 0x20, 0x6e, 0x67, 0xa9, 0x3b, 0x4c, 0xd2, 0xff, 0xa9, 0x0,
-0x8d, 0x9f, 0x7e, 0x8d, 0x1d, 0x7f, 0x8d, 0x1e, 0x7f, 0xee, 0x9f, 0x7e, 0xac, 0x9f, 0x7e, 0xb9,
-0x34, 0x7f, 0x18, 0x6d, 0x1d, 0x7f, 0x8d, 0x1d, 0x7f, 0x90, 0x3, 0xee, 0x1e, 0x7f, 0xad, 0x9f,
-0x7e, 0xcd, 0x1f, 0x7f, 0x90, 0xe3, 0xad, 0x1d, 0x7f, 0x18, 0x6d, 0x1f, 0x7f, 0x8d, 0x1d, 0x7f,
-0xad, 0x1e, 0x7f, 0x69, 0x0, 0x8d, 0x1e, 0x7f, 0xd0, 0x5, 0xad, 0x1d, 0x7f, 0xf0, 0x17, 0x20,
-0xb4, 0x5c, 0xad, 0x47, 0x7f, 0xcd, 0xb3, 0x5c, 0x90, 0x18, 0xf0, 0x2, 0xb0, 0x8, 0xad, 0x46,
-0x7f, 0xcd, 0xb2, 0x5c, 0x90, 0xc, 0xad, 0xb2, 0x5c, 0x8d, 0x46, 0x7f, 0xad, 0xb3, 0x5c, 0x8d,
-0x47, 0x7f, 0x60, 0xe7, 0x3, 0xad, 0x3, 0x5d, 0x8d, 0xec, 0x7e, 0xad, 0x4, 0x5d, 0x8d, 0xed,
-0x7e, 0xad, 0x5, 0x5d, 0x8d, 0xee, 0x7e, 0xa9, 0x0, 0x8d, 0x46, 0x7f, 0x8d, 0x47, 0x7f, 0xee,
-0x46, 0x7f, 0xd0, 0x3, 0xee, 0x47, 0x7f, 0xad, 0xec, 0x7e, 0x38, 0xed, 0x1d, 0x7f, 0x8d, 0xec,
-0x7e, 0xad, 0xed, 0x7e, 0xed, 0x1e, 0x7f, 0x8d, 0xed, 0x7e, 0xad, 0xee, 0x7e, 0xe9, 0x0, 0x8d,
-0xee, 0x7e, 0xc9, 0xff, 0xd0, 0xd9, 0xce, 0x46, 0x7f, 0xad, 0x46, 0x7f, 0xc9, 0xff, 0xd0, 0x3,
-0xce, 0x47, 0x7f, 0x60, 0x80, 0x6, 0x2, 0xa9, 0x0, 0x8d, 0x19, 0x7f, 0x20, 0x31, 0x5c, 0x4c,
-0x29, 0x5b, 0x20, 0xe4, 0xff, 0xc9, 0x59, 0xf0, 0xd, 0xc9, 0x4e, 0xd0, 0xf5, 0x20, 0x92, 0x12,
-0x20, 0x3a, 0x5d, 0xa9, 0x0, 0x60, 0x20, 0x92, 0x12, 0x20, 0x3a, 0x5d, 0xa9, 0x1, 0x60, 0xc9,
-0x20, 0xb0, 0x2, 0xa9, 0x20, 0x60, 0xa9, 0x20, 0x4c, 0xd2, 0xff, 0xa9, 0xd, 0x4c, 0xd2, 0xff,
-0x48, 0xa5, 0xe6, 0xd0, 0x4, 0x68, 0x4c, 0x92, 0x12, 0x68, 0x4c, 0xd2, 0xff, 0x20, 0x42, 0x57,
-0x20, 0xac, 0x59, 0xa9, 0x1, 0x8d, 0x9f, 0x7e, 0x20, 0x91, 0x5e, 0xad, 0x9e, 0x7e, 0x85, 0x41,
-0xa4, 0x41, 0xa2, 0x0, 0x20, 0x9e, 0x5f, 0xec, 0xc2, 0x7d, 0xb0, 0xd, 0xc0, 0x0, 0xd0, 0xf4,
-0x8e, 0xfc, 0x7d, 0x20, 0x55, 0x5f, 0x4c, 0x63, 0x5d, 0x20, 0xd9, 0x5e, 0xee, 0x9f, 0x7e, 0xad,
-0x9f, 0x7e, 0xcd, 0x1f, 0x7f, 0xf0, 0x2, 0xb0, 0xd, 0x20, 0x91, 0x5e, 0xa4, 0x41, 0xa2, 0x0,
-0xa5, 0x41, 0xf0, 0xdc, 0xd0, 0xce, 0x60, 0x20, 0x42, 0x57, 0x20, 0xac, 0x59, 0xa9, 0x1, 0x8d,
-0x9f, 0x7e, 0x20, 0x91, 0x5e, 0xad, 0x9e, 0x7e, 0x85, 0x41, 0x20, 0xbd, 0x5e, 0xa2, 0x0, 0xa4,
-0x41, 0x20, 0x93, 0x5f, 0xec, 0xc2, 0x7d, 0xb0, 0x10, 0xc0, 0x0, 0xd0, 0xf4, 0x8e, 0xfc, 0x7d,
-0x20, 0xb8, 0x59, 0x20, 0x55, 0x5f, 0x4c, 0xb0, 0x5d, 0xee, 0x9f, 0x7e, 0xad, 0x9f, 0x7e, 0xcd,
-0x1f, 0x7f, 0xf0, 0x2, 0xb0, 0xd, 0x20, 0xbd, 0x5e, 0xa4, 0x41, 0xa2, 0x0, 0xa5, 0x41, 0xf0,
-0xdc, 0xd0, 0xce, 0x4c, 0xb8, 0x59, 0xa4, 0x41, 0xa2, 0x0, 0x20, 0x9e, 0x5f, 0xe0, 0x26, 0x90,
-0xf9, 0x60, 0xa4, 0x41, 0xa2, 0x0, 0x20, 0x93, 0x5f, 0xe0, 0x26, 0x90, 0xf9, 0x60, 0xad, 0x1d,
-0x7f, 0xf0, 0xa, 0xa9, 0xa, 0x20, 0x21, 0x59, 0x20, 0x11, 0x5d, 0xd0, 0x3, 0x4c, 0xd7, 0x55,
-0x20, 0x3a, 0x6b, 0xa9, 0x1, 0x8d, 0x48, 0x7f, 0x8d, 0x69, 0x7f, 0x20, 0x26, 0x5a, 0x20, 0x74,
-0x59, 0x20, 0xae, 0x6b, 0x4c, 0x97, 0x56, 0x20, 0x29, 0x5f, 0xd0, 0x3, 0x4c, 0xd7, 0x55, 0x20,
-0x60, 0x59, 0x20, 0x9d, 0x56, 0xa9, 0x1, 0x8d, 0x69, 0x7f, 0xa5, 0x14, 0x85, 0x45, 0xa5, 0x15,
-0x85, 0x46, 0x20, 0x15, 0x61, 0x20, 0x35, 0x5d, 0xa9, 0x4f, 0x20, 0x92, 0x12, 0xa9, 0x46, 0x20,
-0x92, 0x12, 0x20, 0x35, 0x5d, 0xad, 0x46, 0x7f, 0x8d, 0xe0, 0x7d, 0xad, 0x47, 0x7f, 0x8d, 0xe1,
-0x7d, 0x20, 0x21, 0x5f, 0xa9, 0x10, 0x20, 0x21, 0x59, 0x20, 0x4a, 0x12, 0xad, 0x20, 0x7f, 0x8d,
-0xe0, 0x7d, 0x85, 0x45, 0xad, 0x21, 0x7f, 0x8d, 0xe1, 0x7d, 0x85, 0x46, 0x20, 0x21, 0x5f, 0x4c,
-0xd7, 0x55, 0x20, 0xbd, 0x61, 0x20, 0x66, 0x5f, 0x4c, 0xd7, 0x55, 0xac, 0x9f, 0x7e, 0x99, 0x34,
-0x7f, 0x60, 0xac, 0x9f, 0x7e, 0xb9, 0x34, 0x7f, 0xd0, 0x2, 0xa9, 0x1, 0x8d, 0xc2, 0x7d, 0xa8,
-0x60, 0x20, 0x6e, 0x67, 0x4c, 0x35, 0x5d, 0xa9, 0x0, 0x8d, 0x9f, 0x7e, 0x20, 0xa, 0x59, 0xee,
-0x9f, 0x7e, 0x20, 0xd9, 0x5e, 0xad, 0x9f, 0x7e, 0xcd, 0x1f, 0x7f, 0x90, 0xf2, 0x60, 0x20, 0xa,
-0x59, 0x20, 0xad, 0x58, 0x20, 0x91, 0x5e, 0xa9, 0x0, 0x99, 0xa6, 0x7b, 0x88, 0x20, 0x83, 0x12,
-0x20, 0x2e, 0x5d, 0x99, 0xa6, 0x7b, 0x88, 0x10, 0xf4, 0x60, 0x20, 0xad, 0x58, 0x20, 0x91, 0x5e,
-0x88, 0xb9, 0xa6, 0x7b, 0x91, 0xd8, 0x88, 0x10, 0xf8, 0x60, 0xa5, 0x46, 0xcd, 0x47, 0x7f, 0x90,
-0x13, 0xd0, 0x7, 0xa5, 0x45, 0xcd, 0x46, 0x7f, 0x90, 0xa, 0xad, 0x47, 0x7f, 0x85, 0x46, 0xad,
-0x46, 0x7f, 0x85, 0x45, 0x60, 0x20, 0x23, 0x12, 0x20, 0x33, 0x56, 0xad, 0xe0, 0x7d, 0xd0, 0x5,
-0xad, 0xe1, 0x7d, 0xf0, 0xef, 0xad, 0xe1, 0x7d, 0x85, 0x46, 0xad, 0xe0, 0x7d, 0x85, 0x45, 0x4c,
-0xe9, 0x5e, 0xa9, 0x3, 0x8d, 0xa7, 0x7d, 0x4c, 0x7c, 0x67, 0x20, 0x8, 0x12, 0xa5, 0x53, 0xd0,
-0x11, 0x20, 0xd4, 0x59, 0xad, 0x4b, 0x7f, 0xc9, 0x44, 0xd0, 0x7, 0xad, 0x4c, 0x7f, 0xc9, 0x42,
-0xf0, 0xe, 0xa9, 0x11, 0x20, 0x21, 0x59, 0x20, 0x5, 0x5c, 0xa9, 0x0, 0x8d, 0x69, 0x7f, 0x60,
-0xa9, 0x1, 0x8d, 0x69, 0x7f, 0x60, 0x20, 0x82, 0x61, 0x20, 0xf4, 0x57, 0x20, 0xac, 0x59, 0xa0,
-0x2, 0x84, 0x41, 0xae, 0xfc, 0x7d, 0x60, 0x20, 0x4, 0x5f, 0xa5, 0x45, 0x8d, 0x20, 0x7f, 0xa5,
-0x46, 0x8d, 0x21, 0x7f, 0xc5, 0x15, 0x90, 0x13, 0xd0, 0x7, 0xad, 0x20, 0x7f, 0xc5, 0x14, 0x90,
-0xa, 0xad, 0x20, 0x7f, 0x85, 0x14, 0xad, 0x21, 0x7f, 0x85, 0x15, 0x20, 0xa7, 0x5f, 0x20, 0x26,
-0x5a, 0x4c, 0x96, 0x5d, 0xbd, 0xa6, 0x7b, 0x99, 0x3, 0x73, 0xe8, 0xc8, 0xe6, 0x41, 0x60, 0xb9,
-0x3, 0x73, 0x9d, 0xa6, 0x7b, 0x4c, 0x99, 0x5f, 0xa5, 0x46, 0xcd, 0x7d, 0x55, 0x90, 0x13, 0xd0,
-0x7, 0xa5, 0x45, 0xcd, 0x7c, 0x55, 0x90, 0xa, 0xa5, 0x46, 0x8d, 0x7d, 0x55, 0xa5, 0x45, 0x8d,
-0x7c, 0x55, 0x60, 0xad, 0xc5, 0x7d, 0x8d, 0x3b, 0x5, 0x20, 0xa, 0x59, 0xa9, 0x0, 0x8d, 0xa7,
-0x2, 0x8d, 0xec, 0x7e, 0xa5, 0xe4, 0x8d, 0xa8, 0x2, 0xad, 0x1a, 0x7f, 0x8d, 0xa9, 0x2, 0x20,
-0x10, 0x10, 0xc9, 0xd, 0xf0, 0x15, 0xac, 0xec, 0x7e, 0x99, 0xa6, 0x7b, 0xee, 0xec, 0x7e, 0xad,
-0xec, 0x7e, 0xc5, 0xe4, 0x90, 0xe9, 0xf0, 0xe7, 0xee, 0xec, 0x7e, 0xac, 0xec, 0x7e, 0xc0, 0x2,
-0x90, 0x10, 0x88, 0xb9, 0xa6, 0x7b, 0xc9, 0x20, 0xd0, 0x8, 0xce, 0xec, 0x7e, 0xd0, 0xec, 0xee,
-0xec, 0x7e, 0xee, 0xec, 0x7e, 0xac, 0xec, 0x7e, 0xa9, 0x0, 0x99, 0xa6, 0x7b, 0x20, 0x3a, 0x5d,
-0xad, 0xc4, 0x7d, 0x8d, 0x3b, 0x5, 0x60, 0xa9, 0x1, 0x8d, 0x9f, 0x7e, 0x20, 0x4f, 0x60, 0xee,
-0x9f, 0x7e, 0xad, 0x9f, 0x7e, 0xcd, 0x1f, 0x7f, 0x90, 0xf2, 0xf0, 0xf0, 0xa9, 0x1, 0x8d, 0x9f,
-0x7e, 0x4c, 0xe5, 0x60, 0xad, 0x9f, 0x7e, 0x20, 0xfe, 0x61, 0x20, 0x91, 0x5e, 0x85, 0xe4, 0x60,
-0x20, 0x43, 0x60, 0xe6, 0xe6, 0x20, 0xbd, 0x5e, 0x20, 0x87, 0x5a, 0xc6, 0xe6, 0x60, 0x20, 0xbd,
-0x61, 0x20, 0x9d, 0x56, 0x20, 0x4, 0x5f, 0xf0, 0x6, 0x20, 0xa6, 0x5e, 0x20, 0x4c, 0x5d, 0x20,
-0x26, 0x60, 0x20, 0xc2, 0x5f, 0xa9, 0x1, 0x85, 0xe5, 0xad, 0xa7, 0x2, 0xf0, 0x15, 0x20, 0x43,
-0x60, 0xac, 0x1a, 0x7f, 0xb1, 0xc8, 0x20, 0xe5, 0x61, 0x99, 0xa6, 0x7b, 0xc8, 0xc4, 0xe4, 0x90,
-0xf3, 0xf0, 0xf1, 0x20, 0xd9, 0x5e, 0x20, 0xe5, 0x60, 0xad, 0xa7, 0x2, 0xf0, 0xe, 0xc9, 0x91,
-0xd0, 0x6, 0x20, 0xbb, 0x60, 0x4c, 0x71, 0x60, 0xc9, 0x11, 0xd0, 0x6, 0x20, 0xc9, 0x60, 0x4c,
-0x71, 0x60, 0xc9, 0xbc, 0xd0, 0x3, 0x4c, 0xd7, 0x55, 0x4c, 0x71, 0x60, 0xad, 0x9f, 0x7e, 0xc9,
-0x2, 0xb0, 0x1, 0x60, 0xce, 0x9f, 0x7e, 0x4c, 0xe5, 0x60, 0xad, 0x9f, 0x7e, 0xcd, 0x1f, 0x7f,
-0xb0, 0xf1, 0xee, 0x9f, 0x7e, 0x4c, 0xe5, 0x60, 0xa9, 0x0, 0x20, 0xd2, 0xff, 0xa9, 0x24, 0x85,
-0xe4, 0xa9, 0x17, 0x4c, 0xfe, 0x61, 0xa9, 0x15, 0x20, 0xfe, 0x61, 0x20, 0xa, 0x59, 0x20, 0x87,
-0x5a, 0x20, 0x4d, 0x12, 0x20, 0xd8, 0x58, 0xad, 0xc5, 0x7d, 0x8d, 0x3b, 0x5, 0xa9, 0x12, 0x20,
-0xd2, 0xff, 0x20, 0x87, 0x5a, 0xad, 0xc4, 0x7d, 0x8d, 0x3b, 0x5, 0x20, 0x15, 0x61, 0xa9, 0x92,
-0x20, 0xd2, 0xff, 0x4c, 0x43, 0x60, 0xa9, 0x14, 0x20, 0xfe, 0x61, 0x20, 0x77, 0x5a, 0x20, 0x4a,
-0x12, 0xa5, 0x45, 0x8d, 0xe0, 0x7d, 0xa5, 0x46, 0x8d, 0xe1, 0x7d, 0x4c, 0x21, 0x5f, 0x20, 0xbd,
-0x61, 0x20, 0x4, 0x5f, 0xa9, 0x0, 0x8d, 0xd2, 0x7e, 0xa5, 0x45, 0x85, 0x8c, 0xa5, 0x46, 0x85,
-0x8d, 0x20, 0x79, 0x61, 0x20, 0x9d, 0x56, 0x20, 0x9b, 0x63, 0x20, 0x26, 0x60, 0xad, 0xd2, 0x7e,
-0xc9, 0x51, 0xf0, 0x23, 0xc9, 0x53, 0xd0, 0x8, 0x20, 0x99, 0x61, 0xa9, 0x0, 0x8d, 0xd2, 0x7e,
-0x20, 0xc8, 0x61, 0xa5, 0x8d, 0xc5, 0x15, 0x90, 0x8, 0xd0, 0xc, 0xa5, 0x8c, 0xc5, 0x14, 0xb0,
-0x6, 0x20, 0x9e, 0x66, 0x4c, 0x43, 0x61, 0x4c, 0xd7, 0x55, 0xa9, 0x12, 0x8d, 0xdf, 0x7e, 0x8d,
-0xe0, 0x7e, 0x60, 0x20, 0xe4, 0xff, 0x8d, 0xd2, 0x7e, 0xd0, 0xe, 0x20, 0xe4, 0xff, 0x8d, 0xd2,
-0x7e, 0xd0, 0x6, 0x20, 0xe4, 0xff, 0x8d, 0xd2, 0x7e, 0x60, 0xa9, 0x15, 0x20, 0xfe, 0x61, 0x4c,
-0xfd, 0x5b, 0x20, 0xbd, 0x61, 0x20, 0x9d, 0x56, 0xa5, 0xe5, 0xf0, 0x3, 0x20, 0x66, 0x5f, 0xe6,
-0x45, 0xd0, 0x2, 0xe6, 0x46, 0x20, 0xe9, 0x5e, 0x20, 0x3a, 0x5d, 0x4c, 0x68, 0x60, 0xad, 0x69,
-0x7f, 0xf0, 0x1, 0x60, 0x68, 0x68, 0x4c, 0x8, 0x56, 0xa9, 0x0, 0x8d, 0x3d, 0x7d, 0xa9, 0xc8,
-0x8d, 0xec, 0x7e, 0x20, 0x82, 0x61, 0xad, 0xd2, 0x7e, 0xd0, 0xa, 0xee, 0x3d, 0x7d, 0xd0, 0xf3,
-0xee, 0xec, 0x7e, 0xd0, 0xee, 0x60, 0xc9, 0x1b, 0x90, 0x12, 0xc9, 0x5b, 0x90, 0x5, 0x38, 0xe9,
-0x40, 0xb0, 0xb, 0xc9, 0x41, 0x90, 0x7, 0x18, 0x69, 0x80, 0x90, 0x2, 0x69, 0x40, 0x60, 0x85,
-0x49, 0xa9, 0x0, 0x85, 0xc, 0x4c, 0x4d, 0x12, 0xad, 0x1d, 0x7f, 0x8d, 0x4f, 0x7f, 0xad, 0x1e,
-0x7f, 0x8d, 0x50, 0x7f, 0xa9, 0x2, 0x8d, 0x1d, 0x7f, 0xa9, 0x0, 0x8d, 0x1e, 0x7f, 0xa5, 0x8c,
-0x8d, 0xe3, 0x7e, 0xa5, 0x8d, 0x8d, 0xe4, 0x7e, 0x20, 0x17, 0x58, 0xa5, 0x2b, 0x8d, 0x9e, 0x7e,
-0xa9, 0x12, 0x20, 0xaf, 0x57, 0xa9, 0x13, 0x18, 0x6d, 0xb8, 0x7d, 0x8d, 0xb8, 0x7d, 0xad, 0x50,
-0x7f, 0x8d, 0x1e, 0x7f, 0xad, 0x4f, 0x7f, 0x8d, 0x1d, 0x7f, 0x60, 0x20, 0xad, 0x63, 0xad, 0xb8,
-0x7d, 0x8d, 0xe1, 0x7e, 0xad, 0xb9, 0x7d, 0x8d, 0xe2, 0x7e, 0x20, 0x15, 0x63, 0x20, 0x7, 0x62,
-0xad, 0xdf, 0x7e, 0xcd, 0xb8, 0x7d, 0xd0, 0x8, 0xad, 0xe0, 0x7e, 0xcd, 0xb9, 0x7d, 0xf0, 0x1e,
-0x20, 0x31, 0x67, 0x20, 0xb8, 0x59, 0xad, 0x50, 0x7f, 0x8d, 0xb9, 0x7d, 0x8d, 0xe0, 0x7e, 0xad,
-0x4f, 0x7f, 0x8d, 0xb8, 0x7d, 0x8d, 0xdf, 0x7e, 0x20, 0xac, 0x59, 0x20, 0x21, 0x63, 0x20, 0xa1,
-0x63, 0xad, 0xe1, 0x7e, 0x8d, 0xb8, 0x7d, 0xad, 0xe2, 0x7e, 0x8d, 0xb9, 0x7d, 0xac, 0x9e, 0x7e,
-0x60, 0x20, 0x4a, 0x62, 0xb9, 0xa1, 0x78, 0x8d, 0xd7, 0x7e, 0xc8, 0xb9, 0xa1, 0x78, 0x8d, 0xd8,
-0x7e, 0x60, 0x20, 0x4a, 0x62, 0xad, 0xd7, 0x7e, 0x99, 0xa1, 0x78, 0xc8, 0xad, 0xd8, 0x7e, 0x99,
-0xa1, 0x78, 0x60, 0xa9, 0x0, 0x8d, 0x9a, 0x7d, 0x8d, 0x4d, 0x7f, 0x85, 0x8c, 0x85, 0x8d, 0x20,
-0x79, 0x61, 0x20, 0x9e, 0x66, 0xa5, 0x8c, 0x8d, 0xd7, 0x7e, 0xa5, 0x8d, 0x8d, 0xd8, 0x7e, 0x20,
-0xb1, 0x62, 0xee, 0x4d, 0x7f, 0xad, 0x4d, 0x7f, 0xc9, 0x32, 0x90, 0xa, 0xa9, 0x0, 0x8d, 0x4d,
-0x7f, 0xa9, 0x2e, 0x20, 0x92, 0x12, 0xa5, 0x8d, 0xcd, 0x47, 0x7f, 0xd0, 0xd5, 0xa5, 0x8c, 0xcd,
-0x46, 0x7f, 0xd0, 0xce, 0x20, 0x15, 0x63, 0xad, 0xdf, 0x7e, 0x8d, 0xb8, 0x7d, 0xad, 0xe0, 0x7e,
-0x8d, 0xb9, 0x7d, 0x4c, 0xb8, 0x59, 0xa0, 0x0, 0xb9, 0xa1, 0x78, 0x99, 0x3, 0x73, 0xc8, 0xd0,
-0xf7, 0x60, 0xa0, 0x0, 0xb9, 0x3, 0x73, 0x99, 0xa1, 0x78, 0xc8, 0xd0, 0xf7, 0x60, 0xa9, 0x0,
-0x8d, 0xfe, 0x7e, 0xad, 0x69, 0x7f, 0xd0, 0x3, 0x4c, 0xd7, 0x55, 0xad, 0xfe, 0x7e, 0xd0, 0x37,
-0x20, 0xe, 0x12, 0x20, 0x3b, 0x59, 0xd0, 0x3, 0x4c, 0xd7, 0x55, 0x20, 0x58, 0x65, 0x20, 0x9d,
-0x56, 0x20, 0xce, 0x63, 0xad, 0xd9, 0x7e, 0xf0, 0xdf, 0xa9, 0xd, 0x20, 0x21, 0x59, 0xad, 0xda,
-0x7e, 0x20, 0xa0, 0x5e, 0xad, 0xdb, 0x7e, 0xf0, 0xb, 0x20, 0xa0, 0x5e, 0xad, 0xdc, 0x7e, 0xf0,
-0x3, 0x20, 0xa0, 0x5e, 0x20, 0x3a, 0x5d, 0xa9, 0x0, 0x8d, 0xe5, 0x7e, 0x85, 0x8d, 0x8d, 0x4d,
-0x7f, 0x8d, 0x4e, 0x7f, 0xa9, 0x1, 0x85, 0x8c, 0xad, 0xfe, 0x7e, 0xf0, 0x3, 0x4c, 0x9a, 0x67,
-0x20, 0xa5, 0x65, 0x20, 0x31, 0x64, 0x20, 0x35, 0x12, 0x4c, 0x26, 0x5e, 0x20, 0x62, 0x65, 0x4c,
-0x4c, 0x5d, 0xa0, 0x0, 0xb9, 0xa3, 0x79, 0x99, 0x3, 0x73, 0xc8, 0xd0, 0xf7, 0x60, 0xa0, 0x0,
-0xb9, 0x3, 0x73, 0x99, 0xa3, 0x79, 0xc8, 0xd0, 0xf7, 0x60, 0x20, 0x4a, 0x12, 0xa5, 0x8c, 0x8d,
-0xe0, 0x7d, 0xa5, 0x8d, 0x8d, 0xe1, 0x7d, 0x20, 0x21, 0x5f, 0xa9, 0xd, 0x4c, 0x92, 0x12, 0x20,
-0x63, 0x67, 0x8d, 0xda, 0x7e, 0x20, 0x63, 0x67, 0x8d, 0xdb, 0x7e, 0x20, 0x63, 0x67, 0x8d, 0xdc,
-0x7e, 0xa9, 0x0, 0x8d, 0xd9, 0x7e, 0xad, 0xda, 0x7e, 0xd0, 0x1, 0x60, 0x20, 0x26, 0x64, 0x8d,
-0xda, 0x7e, 0xee, 0xd9, 0x7e, 0xad, 0xdb, 0x7e, 0xcd, 0xda, 0x7e, 0xd0, 0x9, 0xa9, 0x0, 0x8d,
-0xdb, 0x7e, 0x8d, 0xdc, 0x7e, 0x60, 0x20, 0x26, 0x64, 0x8d, 0xdb, 0x7e, 0xee, 0xd9, 0x7e, 0xad,
-0xdc, 0x7e, 0xcd, 0xdb, 0x7e, 0xd0, 0x6, 0xa9, 0x0, 0x8d, 0xdc, 0x7e, 0x60, 0x20, 0x26, 0x64,
-0x8d, 0xdc, 0x7e, 0xee, 0xd9, 0x7e, 0x60, 0xcd, 0x1f, 0x7f, 0x90, 0x5, 0xf0, 0x3, 0xad, 0x1f,
-0x7f, 0x60, 0x20, 0x31, 0x67, 0x20, 0xad, 0x63, 0x20, 0x15, 0x63, 0x20, 0xb8, 0x59, 0x20, 0xa1,
-0x63, 0xad, 0x50, 0x7f, 0x8d, 0xb9, 0x7d, 0xad, 0x4f, 0x7f, 0x8d, 0xb8, 0x7d, 0x60, 0x20, 0xbd,
-0x61, 0xa9, 0xf, 0x20, 0x21, 0x59, 0x20, 0xc2, 0x62, 0xad, 0x7c, 0x55, 0x85, 0x14, 0xad, 0x7d,
-0x55, 0x85, 0x15, 0x20, 0x26, 0x5a, 0x20, 0x3a, 0x5d, 0x4c, 0xd7, 0x55, 0x20, 0x23, 0x12, 0x20,
-0x4, 0x5f, 0xa5, 0x45, 0x85, 0x14, 0xa5, 0x46, 0x85, 0x15, 0x20, 0x26, 0x5a, 0x4c, 0xd7, 0x55,
-0xad, 0x1f, 0x59, 0x85, 0xd8, 0xad, 0x20, 0x59, 0x85, 0xd9, 0xa2, 0x1, 0xec, 0xe7, 0x7e, 0xb0,
-0xe, 0xa5, 0xd8, 0x18, 0x69, 0x78, 0x85, 0xd8, 0x90, 0x2, 0xe6, 0xd9, 0xe8, 0xd0, 0xed, 0x60,
-0xad, 0xa5, 0x7a, 0xf0, 0xa, 0x20, 0x7, 0x65, 0xd0, 0xf5, 0x20, 0x7f, 0x65, 0xd0, 0x12, 0xee,
-0xa5, 0x7a, 0xad, 0xa5, 0x7a, 0xc9, 0x41, 0x90, 0x2, 0xa9, 0x1, 0x8d, 0xe7, 0x7e, 0x8d, 0xa5,
-0x7a, 0xa, 0xa8, 0xa5, 0x45, 0x99, 0xa5, 0x7a, 0xc8, 0xa5, 0x46, 0x99, 0xa5, 0x7a, 0xa9, 0x0,
-0x8d, 0x7d, 0x7d, 0xee, 0x7d, 0x7d, 0xac, 0x7d, 0x7d, 0xb9, 0xd9, 0x7e, 0xf0, 0x25, 0x8d, 0x9f,
-0x7e, 0x20, 0xbd, 0x5e, 0x20, 0x7f, 0x64, 0xac, 0x7d, 0x7d, 0xb9, 0x3, 0x65, 0xa8, 0xa2, 0x0,
-0xbd, 0xa6, 0x7b, 0x91, 0xd8, 0xc8, 0xe8, 0xe0, 0x26, 0x90, 0xf5, 0xad, 0x7d, 0x7d, 0xcd, 0xd9,
-0x7e, 0x90, 0xd0, 0x60, 0x0, 0x0, 0x27, 0x4e, 0xa9, 0x0, 0x8d, 0xe7, 0x7e, 0xee, 0xe7, 0x7e,
-0xad, 0xe7, 0x7e, 0xa, 0xa8, 0xb9, 0xa5, 0x7a, 0xc5, 0x45, 0xd0, 0xc, 0xc8, 0xb9, 0xa5, 0x7a,
-0xc5, 0x46, 0xd0, 0x4, 0xad, 0xe7, 0x7e, 0x60, 0xad, 0xe7, 0x7e, 0xc9, 0x41, 0x90, 0xde, 0xa9,
-0x0, 0x8d, 0xe7, 0x7e, 0x60, 0x20, 0x7, 0x65, 0xf0, 0xfa, 0x20, 0x7f, 0x64, 0xac, 0xde, 0x7e,
-0xc8, 0xb9, 0x3, 0x65, 0xa8, 0xa2, 0x0, 0x20, 0x83, 0x12, 0x9d, 0xa6, 0x7b, 0xc8, 0xe8, 0xe0,
-0x26, 0x90, 0xf4, 0x20, 0x91, 0x5e, 0xa9, 0x1, 0x60, 0xa9, 0x0, 0xa8, 0x99, 0xa5, 0x7a, 0xc8,
-0xd0, 0xfa, 0x60, 0x20, 0xa0, 0x62, 0xad, 0xd7, 0x7e, 0x85, 0x45, 0xad, 0xd8, 0x7e, 0x85, 0x46,
-0x60, 0x20, 0x62, 0x65, 0x20, 0x7, 0x65, 0xd0, 0x6, 0x20, 0x4c, 0x5d, 0x4c, 0x9f, 0x64, 0x60,
-0xa9, 0x0, 0x8d, 0xe7, 0x7e, 0xee, 0xe7, 0x7e, 0xad, 0xe7, 0x7e, 0xa, 0xa8, 0xb9, 0xa5, 0x7a,
-0xd0, 0xa, 0xc8, 0xb9, 0xa5, 0x7a, 0xd0, 0x4, 0xad, 0xe7, 0x7e, 0x60, 0xad, 0xe7, 0x7e, 0xc9,
-0x41, 0x90, 0xe2, 0xa9, 0x0, 0x60, 0x20, 0xe1, 0x68, 0xf0, 0x1, 0x60, 0xa9, 0x2e, 0x20, 0x92,
-0x12, 0xa9, 0x0, 0x8d, 0xde, 0x7e, 0xad, 0xde, 0x7e, 0xcd, 0xd9, 0x7e, 0xb0, 0x1c, 0xac, 0xde,
-0x7e, 0xc8, 0xb9, 0xd9, 0x7e, 0x8d, 0xdd, 0x7e, 0x20, 0x89, 0x66, 0xf0, 0x47, 0xad, 0xe6, 0x7e,
-0xcd, 0xc2, 0x7d, 0xd0, 0x5, 0xee, 0xde, 0x7e, 0xd0, 0xdc, 0xee, 0xe5, 0x7e, 0xad, 0x4d, 0x7f,
-0xd0, 0x5, 0xad, 0x4e, 0x7f, 0xf0, 0x12, 0xad, 0x4d, 0x7f, 0x85, 0x8c, 0xad, 0x4e, 0x7f, 0x85,
-0x8d, 0xa9, 0x0, 0x8d, 0x4d, 0x7f, 0x8d, 0x4e, 0x7f, 0xad, 0xe5, 0x7e, 0xc9, 0x64, 0x90, 0x8,
-0xa9, 0x0, 0x8d, 0xe5, 0x7e, 0x20, 0x9d, 0x56, 0x20, 0x9e, 0x66, 0x20, 0x61, 0x68, 0x90, 0x1,
-0x60, 0x4c, 0xa5, 0x65, 0x20, 0x62, 0x65, 0xad, 0xd7, 0x7e, 0x48, 0xad, 0xd8, 0x7e, 0x48, 0x20,
-0x9e, 0x66, 0x20, 0x62, 0x65, 0x20, 0xd1, 0x66, 0x68, 0x8d, 0xd8, 0x7e, 0x68, 0x8d, 0xd7, 0x7e,
-0x20, 0xb1, 0x62, 0x20, 0xb6, 0x66, 0x20, 0xde, 0x66, 0x20, 0xb1, 0x62, 0x20, 0xb6, 0x66, 0xa5,
-0x8c, 0x8d, 0x4d, 0x7f, 0xa5, 0x8d, 0x8d, 0x4e, 0x7f, 0x4c, 0xa5, 0x65, 0xa9, 0x26, 0x8d, 0x18,
-0x7f, 0xa0, 0x0, 0x8c, 0xe6, 0x7e, 0xb9, 0x83, 0x7c, 0xd9, 0xab, 0x7c, 0x90, 0x24, 0xf0, 0x1d,
-0xb0, 0xd, 0xc8, 0xcc, 0x18, 0x7f, 0xb0, 0xf, 0xcc, 0xc2, 0x7d, 0x90, 0xe9, 0xb0, 0x8, 0xa9,
-0xff, 0x8d, 0xc2, 0x7d, 0xa9, 0x0, 0x60, 0x8c, 0xc2, 0x7d, 0xa9, 0x1, 0x60, 0xee, 0xe6, 0x7e,
-0xd0, 0xe0, 0xa9, 0xff, 0x8d, 0xc2, 0x7d, 0xa9, 0x1, 0x60, 0x20, 0x70, 0x65, 0x20, 0xeb, 0x66,
-0x20, 0x9e, 0x66, 0x20, 0x70, 0x65, 0x20, 0xd, 0x67, 0x20, 0xb6, 0x66, 0x4c, 0x4b, 0x66, 0xa5,
-0x8d, 0xcd, 0x47, 0x7f, 0x90, 0xa, 0xd0, 0x7, 0xa5, 0x8c, 0xcd, 0x46, 0x7f, 0x90, 0x1, 0x60,
-0xe6, 0x8c, 0xd0, 0xfb, 0xe6, 0x8d, 0x60, 0xa5, 0x8d, 0xd0, 0xb, 0xa5, 0x8c, 0xc9, 0x2, 0xb0,
-0x5, 0xa9, 0x1, 0x85, 0x8c, 0x60, 0xc6, 0x8c, 0xa5, 0x8c, 0xc9, 0xff, 0xf0, 0x1, 0x60, 0xc6,
-0x8d, 0x60, 0xad, 0xd7, 0x7e, 0x8d, 0xd3, 0x7e, 0xad, 0xd8, 0x7e, 0x8d, 0xd4, 0x7e, 0x60, 0xad,
-0xd3, 0x7e, 0x8d, 0xd7, 0x7e, 0xad, 0xd4, 0x7e, 0x8d, 0xd8, 0x7e, 0x60, 0xa0, 0x25, 0xa9, 0x20,
-0x99, 0x83, 0x7c, 0x88, 0x10, 0xfa, 0xad, 0xdd, 0x7e, 0x8d, 0x9f, 0x7e, 0x20, 0x34, 0x65, 0xa0,
-0x0, 0xb9, 0xa6, 0x7b, 0x99, 0x83, 0x7c, 0xc8, 0xcc, 0xc2, 0x7d, 0x90, 0xf4, 0x60, 0xa0, 0x0,
-0xa9, 0x20, 0x99, 0xab, 0x7c, 0xc8, 0xc0, 0x26, 0x90, 0xf8, 0xad, 0xdd, 0x7e, 0x8d, 0x9f, 0x7e,
-0x20, 0x34, 0x65, 0xa0, 0x0, 0xb9, 0xa6, 0x7b, 0x99, 0xab, 0x7c, 0xc8, 0xcc, 0xc2, 0x7d, 0x90,
-0xf4, 0x60, 0xad, 0xb8, 0x7d, 0x8d, 0x4f, 0x7f, 0xad, 0xb9, 0x7d, 0x8d, 0x50, 0x7f, 0xad, 0xdf,
-0x7e, 0x8d, 0xb8, 0x7d, 0xad, 0xe0, 0x7e, 0x8d, 0xb9, 0x7d, 0x60, 0x20, 0x21, 0x59, 0x20, 0xc9,
-0x59, 0xce, 0xb9, 0x7d, 0x20, 0x79, 0x61, 0xa9, 0x0, 0x8d, 0x48, 0x7f, 0x8d, 0x69, 0x7f, 0x85,
-0xe5, 0x85, 0xe6, 0x60, 0x20, 0xb, 0x12, 0xc9, 0xa, 0x90, 0x3, 0xee, 0xe, 0x77, 0x60, 0x48,
-0xa9, 0x1, 0x8d, 0x9a, 0x7d, 0x68, 0x20, 0x50, 0x12, 0xce, 0x9a, 0x7d, 0x60, 0x48, 0xa9, 0x1,
-0x8d, 0x9a, 0x7d, 0x68, 0x20, 0x26, 0x12, 0xce, 0x9a, 0x7d, 0x60, 0xa9, 0x1, 0x8d, 0x6, 0x7f,
-0x20, 0x3a, 0x5d, 0xa9, 0x1, 0x8d, 0xfe, 0x7e, 0x4c, 0x32, 0x63, 0xa9, 0x1, 0x8d, 0xdd, 0x7e,
-0x20, 0x36, 0x56, 0xf0, 0x13, 0x20, 0x26, 0x64, 0x8d, 0xdd, 0x7e, 0xad, 0x6, 0x7f, 0xf0, 0x8,
-0xa9, 0xa, 0x20, 0x1a, 0x6a, 0x4c, 0xc3, 0x67, 0xae, 0x6, 0x7f, 0xe0, 0x0, 0xd0, 0xf1, 0xa9,
-0x15, 0x20, 0x21, 0x59, 0x20, 0x3a, 0x5d, 0x20, 0xc2, 0x5f, 0xa0, 0x0, 0xb9, 0xa6, 0x7b, 0x99,
-0x35, 0x7c, 0xf0, 0x3, 0xc8, 0xd0, 0xf5, 0xad, 0x6, 0x7f, 0xd0, 0x1a, 0xa9, 0x16, 0x20, 0x21,
-0x59, 0xa9, 0xd, 0x20, 0xd2, 0xff, 0x20, 0xc2, 0x5f, 0xa0, 0x0, 0xb9, 0xa6, 0x7b, 0x99, 0x5c,
-0x7c, 0xf0, 0x3, 0xc8, 0xd0, 0xf5, 0xa9, 0x0, 0x85, 0x8c, 0x8d, 0xff, 0x7e, 0x85, 0x8d, 0x8d,
-0x0, 0x7f, 0x20, 0x9e, 0x66, 0x20, 0xe1, 0x68, 0xd0, 0xa, 0xa9, 0x2e, 0x20, 0xd2, 0xff, 0x20,
-0xb5, 0x68, 0xd0, 0x1d, 0x20, 0x61, 0x68, 0x90, 0xe9, 0xad, 0x6, 0x7f, 0xd0, 0x10, 0x20, 0x31,
-0x64, 0xad, 0xff, 0x7e, 0x85, 0x14, 0xad, 0x0, 0x7f, 0x85, 0x15, 0x20, 0x26, 0x5a, 0x4c, 0xf1,
-0x69, 0xad, 0x6, 0x7f, 0xf0, 0x3, 0x4c, 0xe1, 0x69, 0xa9, 0x5f, 0x20, 0xd2, 0xff, 0xee, 0xff,
-0x7e, 0xd0, 0x3, 0xee, 0x0, 0x7f, 0xa5, 0x8c, 0x48, 0xa5, 0x8d, 0x48, 0xad, 0xff, 0x7e, 0x85,
-0x8c, 0xad, 0x0, 0x7f, 0x85, 0x8d, 0x20, 0xb1, 0x62, 0x68, 0x85, 0x8d, 0x68, 0x85, 0x8c, 0x4c,
-0x13, 0x68, 0xa5, 0x8d, 0xc5, 0x15, 0x90, 0x6, 0xd0, 0x4, 0xa5, 0x8c, 0xc5, 0x14, 0x60, 0xa0,
-0x25, 0xa9, 0x20, 0x99, 0x83, 0x7c, 0x88, 0x10, 0xfa, 0xad, 0xdd, 0x7e, 0x8d, 0x9f, 0x7e, 0x20,
-0xbd, 0x5e, 0x20, 0x91, 0x5e, 0xa0, 0x0, 0xb9, 0xa6, 0x7b, 0x99, 0x83, 0x7c, 0xc8, 0xcc, 0xc2,
-0x7d, 0x90, 0xf4, 0x60, 0xa0, 0x0, 0xb9, 0x35, 0x7c, 0x99, 0xab, 0x7c, 0xf0, 0x3, 0xc8, 0xd0,
-0xf5, 0x8c, 0xc2, 0x7d, 0x60, 0xa0, 0x0, 0xb9, 0x5c, 0x7c, 0x99, 0xab, 0x7c, 0xf0, 0x3, 0xc8,
-0xd0, 0xf5, 0x8c, 0xc2, 0x7d, 0x60, 0x20, 0x9b, 0x63, 0x20, 0x6e, 0x68, 0x20, 0x93, 0x68, 0xad,
-0x6, 0x7f, 0xf0, 0x3, 0x4c, 0x28, 0x6a, 0x20, 0x4b, 0x66, 0xf0, 0x8, 0xad, 0xc2, 0x7d, 0xcd,
-0xe6, 0x7e, 0xd0, 0x8, 0x20, 0xa4, 0x68, 0x20, 0x4b, 0x66, 0xd0, 0x3, 0xa9, 0x0, 0x60, 0xa9,
-0x1, 0x60, 0x20, 0x82, 0x61, 0xad, 0xd2, 0x7e, 0xc9, 0x53, 0xf0, 0x7, 0xc9, 0x51, 0xf0, 0xc,
-0xa9, 0x0, 0x60, 0x20, 0xb9, 0x63, 0x20, 0x99, 0x61, 0xa9, 0x0, 0x60, 0xa9, 0x1, 0x60, 0x20,
-0x4d, 0x67, 0x20, 0x29, 0x5f, 0xf0, 0x8, 0x20, 0x60, 0x59, 0x20, 0x79, 0x61, 0xa9, 0x1, 0x60,
-0xad, 0x69, 0x7f, 0xf0, 0xfa, 0x20, 0xe9, 0x5e, 0x20, 0xa6, 0x5e, 0x4c, 0x9b, 0x63, 0xad, 0x69,
-0x7f, 0xd0, 0x4, 0x8d, 0x6d, 0x7f, 0x60, 0x20, 0x47, 0x69, 0x20, 0xbd, 0x5e, 0x4c, 0x5a, 0x69,
-0xad, 0x69, 0x7f, 0xd0, 0x4, 0x8d, 0x6d, 0x7f, 0x60, 0xa5, 0xe4, 0x48, 0x20, 0x47, 0x69, 0x20,
-0xd8, 0x58, 0x68, 0x85, 0xe4, 0x4c, 0x5a, 0x69, 0xad, 0xe0, 0x7d, 0xd0, 0x2, 0xa9, 0x1, 0xcd,
-0x1f, 0x7f, 0x90, 0x3, 0xad, 0x1f, 0x7f, 0x8d, 0x9f, 0x7e, 0x60, 0xac, 0xc2, 0x7d, 0x88, 0xc0,
-0x0, 0xf0, 0xc, 0xb9, 0xa6, 0x7b, 0xf0, 0x4, 0xc9, 0x20, 0xd0, 0x3, 0x88, 0xd0, 0xf4, 0xc8,
-0x8c, 0xf2, 0x7e, 0x8c, 0x6d, 0x7f, 0xc0, 0x2, 0x90, 0x13, 0xa0, 0x0, 0x8c, 0x6c, 0x7f, 0x8c,
-0x6e, 0x7f, 0xad, 0xa6, 0x7b, 0xd0, 0x5, 0xa9, 0x20, 0x8d, 0xa6, 0x7b, 0x60, 0xad, 0xa6, 0x7b,
-0xc9, 0x20, 0xd0, 0xe6, 0xa9, 0x3a, 0x8d, 0xa6, 0x7b, 0xd0, 0xdf, 0x20, 0xa, 0x59, 0xa9, 0x0,
-0x8d, 0x9a, 0x7d, 0xad, 0x99, 0x7d, 0x48, 0xad, 0xa7, 0x7d, 0x48, 0xa9, 0x3, 0x8d, 0xa7, 0x7d,
-0xa9, 0x1, 0x8d, 0x99, 0x7d, 0xad, 0xd7, 0x7e, 0x8d, 0xe0, 0x7d, 0xad, 0xd8, 0x7e, 0x8d, 0xe1,
-0x7d, 0x20, 0x26, 0x12, 0x68, 0x8d, 0xa7, 0x7d, 0x68, 0x8d, 0x99, 0x7d, 0xa0, 0x1, 0xb9, 0xd6,
-0x7d, 0x99, 0xa5, 0x7b, 0xc8, 0xcc, 0xd6, 0x7d, 0x90, 0xf4, 0xf0, 0xf2, 0x8c, 0xc2, 0x7d, 0x4c,
-0x5a, 0x69, 0x20, 0xff, 0x69, 0xf0, 0xb, 0x20, 0x3a, 0x5d, 0x20, 0x61, 0x68, 0xb0, 0x3, 0x4c,
-0x1, 0x68, 0xa9, 0x0, 0x8d, 0x6, 0x7f, 0x8d, 0xfe, 0x7e, 0x20, 0x3a, 0x5d, 0x4c, 0xd7, 0x55,
-0x20, 0x9d, 0x56, 0x20, 0x26, 0x60, 0xa9, 0x8, 0x20, 0x20, 0x6a, 0x20, 0xe4, 0xff, 0xf0, 0xfb,
-0xc9, 0x59, 0xf0, 0x4, 0xc9, 0x4e, 0xd0, 0xf3, 0xc9, 0x4e, 0x60, 0x38, 0xe9, 0x15, 0x4c, 0x21,
-0x59, 0x48, 0x20, 0xd7, 0x60, 0x68, 0x4c, 0x1a, 0x6a, 0xad, 0xc2, 0x7d, 0x8d, 0x1a, 0x7f, 0xce,
-0x1a, 0x7f, 0xa9, 0x0, 0x8d, 0xdd, 0x7e, 0xee, 0xdd, 0x7e, 0xad, 0xdd, 0x7e, 0xcd, 0x1f, 0x7f,
-0xf0, 0x2, 0xb0, 0x25, 0x20, 0x6e, 0x68, 0x20, 0x4c, 0x6a, 0xf0, 0xeb, 0x60, 0xa0, 0x0, 0xa2,
-0x0, 0xbd, 0xab, 0x7c, 0x20, 0x90, 0x6a, 0x85, 0x52, 0xb9, 0x83, 0x7c, 0x20, 0x90, 0x6a, 0xc5,
-0x52, 0xf0, 0x9, 0xc8, 0xcc, 0xc2, 0x7d, 0x90, 0xe8, 0xa9, 0x0, 0x60, 0x8c, 0x1b, 0x7f, 0xe8,
-0xc8, 0xec, 0x1a, 0x7f, 0xb0, 0x18, 0xbd, 0xab, 0x7c, 0x20, 0x90, 0x6a, 0x85, 0x52, 0xb9, 0x83,
-0x7c, 0x20, 0x90, 0x6a, 0xc5, 0x52, 0xf0, 0xe7, 0xac, 0x1b, 0x7f, 0xc8, 0xd0, 0xc1, 0xa9, 0x1,
-0x60, 0xc9, 0x41, 0xb0, 0x1, 0x60, 0xc9, 0x5b, 0xb0, 0x1, 0x60, 0x38, 0xe9, 0x80, 0x60, 0x48,
-0xa9, 0x1, 0x8d, 0x98, 0x7d, 0x8d, 0x99, 0x7d, 0xa9, 0x0, 0x8d, 0x9a, 0x7d, 0x8d, 0xd6, 0x7d,
-0x68, 0x4c, 0x50, 0x12, 0xad, 0xb8, 0x7d, 0x20, 0x9e, 0x6a, 0xad, 0xd7, 0x7d, 0x8d, 0x4d, 0x7f,
-0xad, 0xd8, 0x7d, 0x8d, 0x4e, 0x7f, 0xad, 0xb9, 0x7d, 0x20, 0x9e, 0x6a, 0xad, 0xd7, 0x7d, 0x8d,
-0x4f, 0x7f, 0xad, 0xd8, 0x7d, 0x8d, 0x50, 0x7f, 0x60, 0x20, 0xf4, 0x57, 0x4c, 0xb3, 0x6a, 0x20,
-0xaa, 0x12, 0xa9, 0x2, 0x8d, 0xb8, 0x7d, 0xa9, 0x0, 0x8d, 0xb9, 0x7d, 0x85, 0x78, 0x20, 0x89,
-0x12, 0x20, 0xb3, 0x6a, 0x20, 0x6d, 0x6b, 0x20, 0xd8, 0x6a, 0xa5, 0x78, 0xd0, 0x6, 0x20, 0xe1,
-0x11, 0x4c, 0xf3, 0x6a, 0xa9, 0x5, 0x8d, 0xea, 0x7e, 0xa9, 0x12, 0x8d, 0xb8, 0x7d, 0xad, 0xea,
-0x7e, 0x8d, 0xb9, 0x7d, 0x20, 0xb3, 0x6a, 0x20, 0x6d, 0x6b, 0x20, 0xe1, 0x11, 0xee, 0xea, 0x7e,
-0xad, 0xea, 0x7e, 0xc9, 0x14, 0x90, 0xe7, 0xa9, 0x13, 0xcd, 0xb8, 0x7d, 0xf0, 0xa, 0xee, 0xb8,
-0x7d, 0xa9, 0x0, 0x8d, 0xea, 0x7e, 0xf0, 0xd6, 0x4c, 0xaa, 0x12, 0x20, 0xaa, 0x12, 0x20, 0xa0,
-0x6b, 0xa9, 0x2c, 0x99, 0xa3, 0x75, 0xa9, 0x54, 0x99, 0xa4, 0x75, 0xa9, 0x46, 0x99, 0xa5, 0x75,
-0xa9, 0x0, 0x99, 0xa6, 0x75, 0xc8, 0xc8, 0xc8, 0x8c, 0xa2, 0x75, 0x20, 0x8f, 0x12, 0xa9, 0x44,
-0x8d, 0x4b, 0x7f, 0xa9, 0x42, 0x8d, 0x4c, 0x7f, 0x20, 0xed, 0x11, 0x4c, 0xde, 0x6a, 0xa0, 0xb,
-0x8c, 0xa2, 0x75, 0xb9, 0x94, 0x6b, 0x99, 0xa3, 0x75, 0x88, 0x10, 0xf7, 0xad, 0x4d, 0x7f, 0x8d,
-0xa9, 0x75, 0xad, 0x4e, 0x7f, 0x8d, 0xaa, 0x75, 0xad, 0x4f, 0x7f, 0x8d, 0xac, 0x75, 0xad, 0x50,
-0x7f, 0x8d, 0xad, 0x75, 0x60, 0x42, 0x2d, 0x41, 0x3a, 0x30, 0x2c, 0x3a, 0x3a, 0x2c, 0x3a, 0x3a,
-0x0, 0xa0, 0x0, 0xb9, 0xa1, 0x7e, 0xf0, 0x6, 0x99, 0xa3, 0x75, 0xc8, 0xd0, 0xf5, 0x60, 0x20,
-0xc2, 0x62, 0x4c, 0x26, 0x5a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xba,
-0xe8, 0xe8, 0xe8, 0xe8, 0x18, 0x65, 0xbc, 0x9d, 0x0, 0x1, 0xa9, 0x0, 0x65, 0xbd, 0xe8, 0x9d,
-0x0, 0x1, 0x68, 0xaa, 0x68, 0xa8, 0x68, 0x60, 0xa2, 0x0, 0xa0, 0xfd, 0x60, 0xa2, 0x3, 0x86,
-0x96, 0xa9, 0x0, 0x9d, 0xec, 0x5, 0xca, 0x10, 0xfa, 0xa6, 0x96, 0xbd, 0x7b, 0xfc, 0xaa, 0x9d,
-0xd0, 0xfd, 0xa0, 0x2, 0xb9, 0x7, 0x80, 0xd9, 0x56, 0xfc, 0xd0, 0x14, 0x88, 0x10, 0xf5, 0xad,
-0x6, 0x80, 0xa6, 0x96, 0x9d, 0xec, 0x5, 0xc9, 0x1, 0xd0, 0x5, 0x86, 0xfb, 0x20, 0x0, 0x80,
-0xc6, 0x96, 0x10, 0xd5, 0x60, 0x43, 0x42, 0x4d, 0x78, 0xa2, 0x3, 0xbd, 0xec, 0x5, 0xf0, 0x10,
-0x8a, 0x48, 0xbd, 0x7b, 0xfc, 0xaa, 0x9d, 0xd0, 0xfd, 0x86, 0xfb, 0x20, 0x0, 0x80, 0x68, 0xaa,
-0xca, 0xd0, 0xe8, 0x8d, 0xd0, 0xfd, 0x86, 0xfb, 0x58, 0x60, 0x0, 0x5, 0xa, 0xf, 0x9d, 0xd0,
-0xfd, 0xaa, 0xb1, 0xbe, 0x9d, 0xd0, 0xfd, 0x60, 0x48, 0x86, 0xfb, 0x9d, 0xd0, 0xfd, 0xae, 0xf3,
-0x5, 0xad, 0xf4, 0x5, 0x48, 0xad, 0xf2, 0x5, 0x28, 0x20, 0xb0, 0xfc, 0x8d, 0xf2, 0x5, 0x8,
-0x68, 0x8d, 0xf4, 0x5, 0x8e, 0xf3, 0x5, 0x68, 0x85, 0xfb, 0xaa, 0x9d, 0xd0, 0xfd, 0x60, 0x6c,
-0xf0, 0x5, 0x48, 0x8a, 0x48, 0x98, 0x48, 0x8d, 0xd0, 0xfd, 0x4c, 0x0, 0xce, 0xa6, 0xfb, 0x9d,
-0xd0, 0xfd, 0x68, 0xa8, 0x68, 0xaa, 0x68, 0x40, 0xa6, 0xfb, 0x9d, 0xd0, 0xfd, 0x6c, 0xfe, 0x2,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0x4c, 0xc9, 0xfc, 0x4c, 0x59, 0xfc, 0x4c, 0x7f, 0xfc, 0x4c, 0x89, 0xfc, 0x4c, 0xb8, 0xfc, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa2,
-0xa2, 0xa2, 0xfd, 0x0, 0x0, 0x0, 0xfd, 0xb5, 0xb5, 0xb5, 0xfd, 0xfd, 0x0, 0xfd, 0x20, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
-0x0, 0xfd, 0xb5, 0xb5, 0xb5, 0xfd, 0x0, 0xfd, 0xfd, 0x20, 0x20, 0x20, 0xfd, 0xbb, 0xbb, 0xbb,
-0xfd, 0x5e, 0x5e, 0x5e, 0xfd, 0xa2, 0xa2, 0xa2, 0xfd, 0x0, 0x0, 0x0, 0xfd, 0xb5, 0xb5, 0xb5,
-0xfd, 0xff, 0xfd, 0xfd, 0x20, 0x20, 0x20, 0xfd, 0xbb, 0xbb, 0xbb, 0xfd, 0x5e, 0x5e, 0x5e, 0xfd,
-0xa2, 0xa2, 0xa2, 0xfd, 0xfc, 0x0, 0x0, 0xfd, 0xfc, 0xb5, 0xb5, 0xfd, 0x0, 0xfd, 0xfd, 0x20,
-0x20, 0x20, 0xfd, 0xbb, 0xbb, 0xbb, 0xfd, 0xfc, 0x5e, 0x5e, 0xfd, 0xfc, 0xa2, 0xa2, 0xfd, 0xfc,
-0x0, 0x0, 0xfd, 0xfc, 0xb5, 0xb5, 0xff, 0xfd, 0xfd, 0xfd, 0xfc, 0x20, 0x20, 0xfd, 0xfc, 0xbb,
-0xbb, 0xfd, 0xfc, 0x5e, 0x5e, 0xfd, 0xfc, 0xa2, 0xa2, 0x0, 0xfd, 0x0, 0x0, 0x0, 0xfd, 0xb5,
-0xb5, 0x0, 0xfd, 0xfd, 0xfd, 0xfc, 0x20, 0x20, 0xfd, 0xfc, 0xbb, 0xbb, 0xff, 0xfd, 0x5e, 0x5e,
-0xff, 0xfd, 0xa2, 0xa2, 0xff, 0xfd, 0x0, 0x0, 0xff, 0xfd, 0xb5, 0xb5, 0x0, 0xfd, 0xfd, 0x0,
-0xfd, 0x20, 0x20, 0x0, 0xfd, 0xbb, 0xbb, 0x0, 0xfd, 0x5e, 0x5e, 0x0, 0xfd, 0xa2, 0xa2, 0xff,
-0xfd, 0x0, 0x0, 0x0, 0xfd, 0xb5, 0xb5, 0xb5, 0xfd, 0xfd, 0xff, 0xfd, 0x20, 0x20, 0xff, 0xfd,
-0xbb, 0xbb, 0xff, 0xfd, 0x5e, 0x5e, 0x5e, 0xfd, 0xa2, 0xa2, 0xa2, 0xfd, 0x0, 0x0, 0x0, 0x0,
-0xb5, 0xb5, 0xfe, 0x61, 0x61, 0x61, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0x8d, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xe8, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x0, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x0, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x0, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0x0, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x0, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x0, 0xfe, 0xfe,
-0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xd0,
-0xa, 0xd3, 0x85, 0xd4, 0x85, 0x1b, 0x8, 0xff, 0xff, 0xa2, 0xa1, 0xff, 0xff, 0x0, 0x0, 0x7c,
-0x0, 0xc4, 0xd1, 0xf, 0xf1, 0xdb, 0xf5, 0xf7, 0xee, 0xff, 0xe8, 0xfe, 0xf4, 0xd2, 0xd8, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f,
-0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf6, 0xff, 0xb3, 0xfc };
-
-unsigned char plus4lo[]={
-0x4c,
-0x44, 0x80, 0x4c, 0xe0, 0x80, 0xc, 0x43, 0x42, 0x4d, 0x53, 0x59, 0x53, 0x31, 0x35, 0x32, 0x35,
-0x3a, 0x20, 0x33, 0x2d, 0x50, 0x4c, 0x55, 0x53, 0x2d, 0x31, 0x20, 0x0, 0x20, 0x33, 0x2d, 0x50,
-0x4c, 0x55, 0x53, 0x2d, 0x31, 0x20, 0x4f, 0x4e, 0x20, 0x4b, 0x45, 0x59, 0x20, 0x46, 0x0, 0xa2,
-0x5, 0xa9, 0x80, 0x8d, 0xf1, 0x5, 0xa9, 0x3, 0x8d, 0xf0, 0x5, 0x8d, 0xf4, 0x5, 0xa5, 0xfb,
-0x4c, 0xfa, 0xfc, 0xa0, 0x0, 0x84, 0xd9, 0xa5, 0xfb, 0x8d, 0xff, 0x7f, 0x29, 0x3, 0xaa, 0x9d,
-0xd0, 0xfd, 0xc9, 0x1, 0xf0, 0x6, 0xc8, 0xad, 0x5f, 0x5, 0x85, 0xd9, 0x84, 0xd8, 0x98, 0xf0,
-0x2, 0xa0, 0x35, 0xa2, 0x0, 0xbd, 0x30, 0x80, 0x99, 0xf5, 0x5, 0xc8, 0xe8, 0xe0, 0x14, 0x90,
-0xf4, 0xa6, 0xd8, 0xa9, 0x12, 0xdd, 0x5f, 0x5, 0xf0, 0x26, 0x90, 0x13, 0xa0, 0x7e, 0xb9, 0x67,
-0x5, 0x99, 0x68, 0x5, 0x88, 0xc4, 0xd9, 0x10, 0xf5, 0xfe, 0x5f, 0x5, 0x4c, 0x72, 0x80, 0xa4,
-0xd9, 0xb9, 0x68, 0x5, 0x99, 0x67, 0x5, 0xc8, 0x10, 0xf7, 0xde, 0x5f, 0x5, 0x4c, 0x72, 0x80,
-0xa6, 0xd9, 0xa0, 0x0, 0xb9, 0xa, 0x80, 0x9d, 0x67, 0x5, 0xe8, 0xc8, 0xc0, 0x12, 0x90, 0xf4,
-0xa6, 0xd8, 0xf0, 0x11, 0xa4, 0xd9, 0xa9, 0x37, 0x99, 0x6c, 0x5, 0xa9, 0x38, 0x99, 0x6d, 0x5,
-0xa5, 0xfb, 0x8d, 0x2b, 0x6, 0xa2, 0x0, 0xbd, 0x1d, 0x80, 0xf0, 0x6, 0x20, 0xd2, 0xff, 0xe8,
-0xd0, 0xf5, 0xa5, 0xd8, 0x18, 0x69, 0x31, 0x20, 0xd2, 0xff, 0xa9, 0xd, 0x4c, 0xd2, 0xff, 0x78,
-0xa2, 0xff, 0x9a, 0x58, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xea, 0xad, 0x6, 0xff, 0x29, 0xef,
-0x8d, 0x6, 0xff, 0xad, 0x37, 0x81, 0x85, 0xd8, 0xad, 0x38, 0x81, 0x85, 0xd9, 0xad, 0x39, 0x81,
-0x85, 0xda, 0xad, 0x3a, 0x81, 0x85, 0xdb, 0xa0, 0x0, 0xb1, 0xda, 0x91, 0xd8, 0xe6, 0xd8, 0xd0,
-0x2, 0xe6, 0xd9, 0xe6, 0xda, 0xd0, 0x2, 0xe6, 0xdb, 0xa5, 0xd9, 0xcd, 0x36, 0x81, 0x90, 0xe9,
-0xa5, 0xd8, 0xcd, 0x35, 0x81, 0x90, 0xe2, 0xad, 0x6, 0xff, 0x9, 0x10, 0x8d, 0x6, 0xff, 0xa9,
-0x0, 0x4c, 0x0, 0x10, 0x0, 0x70, 0x0, 0x10, 0x4b, 0x81, 0xd0, 0x10, 0x80, 0x0, 0x0, 0x2a,
-0xef, 0x2a, 0xef, 0x2a, 0xea, 0x2a, 0xea, 0x3a, 0xef, 0x2a, 0x85, 0xfb, 0x8d, 0xd0, 0xfd, 0x4c,
-0xc0, 0x11, 0x4c, 0xcb, 0x15, 0xbd, 0x80, 0x8, 0xe8, 0x8e, 0x20, 0xc6, 0x10, 0x4c, 0x80, 0x10,
-0x60, 0x90, 0x3, 0x20, 0xea, 0x10, 0x20, 0xb4, 0xd8, 0xa4, 0xca, 0xb1, 0xea, 0x48, 0xad, 0x3b,
-0x5, 0x91, 0xea, 0x98, 0x18, 0x65, 0xc8, 0x8d, 0xd, 0xff, 0xa5, 0xc9, 0x69, 0x0, 0xe9, 0xb,
-0x8d, 0xc, 0xff, 0xa5, 0xef, 0xd, 0x5d, 0x5, 0xf0, 0xf9, 0x68, 0x91, 0xea, 0xa9, 0xff, 0x8d,
-0xc, 0xff, 0x8d, 0xd, 0xff, 0x20, 0xc1, 0xd8, 0xc9, 0xd, 0xd0, 0xc7, 0x85, 0xc7, 0x20, 0x95,
-0xdf, 0x8e, 0x49, 0x5, 0x20, 0x87, 0xdf, 0xa9, 0x0, 0x85, 0xcb, 0xac, 0xe7, 0x7, 0xa5, 0xc4,
-0x30, 0x13, 0xc5, 0xcd, 0x90, 0xf, 0xa4, 0xc5, 0xcd, 0x49, 0x5, 0xd0, 0x4, 0xc4, 0xc3, 0xf0,
-0x2, 0xb0, 0x38, 0x85, 0xcd, 0x84, 0xca, 0x4c, 0x8b, 0x10, 0x98, 0x48, 0x8a, 0x48, 0xa5, 0xc7,
-0xd0, 0x3, 0x4c, 0x1c, 0x10, 0x20, 0xa8, 0xd8, 0x20, 0x2f, 0xdf, 0x85, 0xce, 0x29, 0x3f, 0x6,
-0xce, 0x24, 0xce, 0x10, 0x2, 0x9, 0x80, 0x90, 0x4, 0xa6, 0xcb, 0xd0, 0x4, 0x70, 0x2, 0x9,
-0x40, 0xe6, 0xca, 0xc4, 0xc3, 0xd0, 0xf, 0x90, 0xd, 0xf0, 0xb, 0xa9, 0x0, 0x85, 0xc7, 0xa9,
-0xd, 0x20, 0xea, 0x10, 0xa9, 0xd, 0x85, 0xce, 0x68, 0xaa, 0x68, 0xa8, 0xa5, 0xce, 0x18, 0x60,
-0xad, 0xa9, 0x2, 0xf0, 0xa, 0xad, 0xa9, 0x2, 0x85, 0xca, 0xa9, 0x0, 0x8d, 0xa9, 0x2, 0xa5,
-0xca, 0x8d, 0x97, 0x11, 0x85, 0xc5, 0xa5, 0xcd, 0x85, 0xc4, 0x60, 0x4c, 0x8e, 0x11, 0x68, 0xa9,
-0x27, 0x48, 0xd0, 0x44, 0x48, 0xc9, 0xab, 0xf0, 0xf2, 0xc9, 0x22, 0xf0, 0xf1, 0xc9, 0x11, 0xf0,
-0xea, 0xc9, 0x13, 0xf0, 0xe6, 0xc9, 0x91, 0xf0, 0xe2, 0xc9, 0x93, 0xf0, 0xde, 0xc9, 0xbc, 0xf0,
-0xda, 0xc9, 0xb2, 0xf0, 0xd6, 0xc9, 0xb6, 0xf0, 0xd2, 0xc9, 0x9d, 0xf0, 0x3a, 0xc9, 0x1d, 0xf0,
-0x4c, 0xc9, 0xa3, 0xf0, 0xc6, 0xc9, 0xbb, 0xf0, 0xc2, 0xc9, 0xaa, 0xf0, 0x6b, 0xc9, 0x14, 0xf0,
-0x45, 0xc9, 0x94, 0xd0, 0x3, 0x4c, 0x7f, 0x11, 0xc9, 0xd, 0xf0, 0x11, 0xc9, 0x8d, 0xf0, 0x11,
-0xa5, 0xca, 0xcd, 0xa8, 0x2, 0x90, 0x6, 0x68, 0xa9, 0x0, 0x4c, 0x49, 0xdc, 0x68, 0x4c, 0x49,
-0xdc, 0x68, 0xa9, 0x0, 0x4c, 0x49, 0xdc, 0xa5, 0xca, 0xcd, 0x97, 0x11, 0xf0, 0x21, 0x90, 0x1f,
-0x38, 0xed, 0x97, 0x11, 0xcd, 0xa8, 0x2, 0xf0, 0xe4, 0x90, 0xe2, 0xb0, 0x12, 0xa5, 0xca, 0xcd,
-0xa8, 0x2, 0x90, 0xd9, 0xb0, 0x9, 0xa5, 0xca, 0xcd, 0x97, 0x11, 0xf0, 0x2, 0xb0, 0x6, 0x68,
-0xa9, 0x0, 0x4c, 0x49, 0xdc, 0x68, 0x4c, 0x49, 0xdc, 0xac, 0xa8, 0x2, 0xb1, 0xc8, 0xc9, 0x20,
-0xf0, 0x3, 0x4c, 0x75, 0x11, 0x4c, 0x2e, 0x11, 0x68, 0x8d, 0xa7, 0x2, 0x68, 0x68, 0x4c, 0xba,
-0x10, 0x0, 0xa9, 0x2, 0xa8, 0xa2, 0x8, 0x20, 0xba, 0xff, 0x20, 0xc0, 0xff, 0x20, 0xfe, 0x27,
-0x4c, 0x69, 0x11, 0x20, 0xd1, 0x15, 0x90, 0x24, 0xa0, 0x0, 0xbd, 0x80, 0x8, 0xc9, 0x20, 0xf0,
-0x10, 0x99, 0x8, 0x9, 0xec, 0x77, 0x8, 0xf0, 0x8, 0xc8, 0x4c, 0x9a, 0x32, 0x4c, 0x7b, 0x16,
-0x4c, 0x0, 0x41, 0x4c, 0x0, 0x41, 0x4c, 0x5e, 0x56, 0x4c, 0x83, 0x31, 0x4c, 0x90, 0x31, 0x4c,
-0x98, 0x2d, 0x4c, 0x36, 0x43, 0x4c, 0xa5, 0x3a, 0x4c, 0xab, 0x3a, 0x4c, 0xb2, 0x3a, 0x4c, 0xe4,
-0x3a, 0x4c, 0xf6, 0x3a, 0x4c, 0x13, 0x3b, 0x4c, 0x30, 0x3b, 0x4c, 0xa8, 0x3b, 0x4c, 0xc4, 0x3b,
-0x4c, 0x36, 0x3b, 0x4c, 0x45, 0x3b, 0x4c, 0x54, 0x3b, 0x4c, 0x7c, 0x3b, 0x4c, 0xfc, 0x3b, 0x4c,
-0xf, 0x3c, 0x4c, 0x47, 0x3c, 0x4c, 0x25, 0x38, 0x4c, 0xd1, 0x43, 0x4c, 0x76, 0x3e, 0x4c, 0x2c,
-0x2e, 0x60, 0x8d, 0x7f, 0x4c, 0x6f, 0x3f, 0x4c, 0x7, 0x40, 0x4c, 0xed, 0x40, 0x4c, 0x32, 0x40,
-0x4c, 0xc1, 0x39, 0x4c, 0x5, 0x3a, 0x4c, 0x95, 0x3a, 0x4c, 0x53, 0x3a, 0x4c, 0x2f, 0x23, 0x4c,
-0x99, 0x16, 0x4c, 0xc5, 0x34, 0x4c, 0x21, 0x30, 0x4c, 0x31, 0x30, 0x4c, 0x7c, 0x34, 0x4c, 0x3c,
-0x37, 0x4c, 0xb1, 0x44, 0x4c, 0x48, 0x3a, 0x4c, 0x2d, 0x45, 0x4c, 0xb4, 0x39, 0x4c, 0x9f, 0x41,
-0x60, 0xa0, 0x0, 0x4c, 0x48, 0x43, 0x4c, 0x17, 0x2f, 0x4c, 0xfe, 0x68, 0x4c, 0xf, 0x69, 0x4c,
-0x1d, 0x69, 0x4c, 0x2f, 0x69, 0x4c, 0xa, 0x5f, 0x4c, 0x36, 0x56, 0xd, 0xd0, 0xf9, 0x4c, 0x18,
-0x45, 0x4c, 0x7d, 0x13, 0x4c, 0x9a, 0x69, 0x4c, 0x9a, 0x23, 0x4c, 0x94, 0x23, 0x4c, 0x60, 0x43,
-0x4c, 0x55, 0x43, 0x4c, 0x99, 0x3e, 0x4c, 0x86, 0x30, 0x4c, 0xed, 0x3e, 0x4c, 0xe5, 0x34, 0x4c,
-0x2d, 0x43, 0x35, 0x11, 0xa0, 0x0, 0x8c, 0x5d, 0x8, 0x8c, 0x70, 0x8, 0x8c, 0x5e, 0x8, 0xad,
-0x52, 0x8, 0xc9, 0x14, 0x4c, 0xb4, 0x3d, 0x4c, 0x2, 0x39, 0x0, 0x5, 0x36, 0x47, 0x51, 0x2f,
-0x55, 0x0, 0x84, 0x35, 0x12, 0x51, 0xe, 0x55, 0xd0, 0xa, 0x4c, 0x6c, 0x16, 0x19, 0x0, 0x53,
-0x52, 0x43, 0x42, 0x49, 0x42, 0x52, 0x45, 0x49, 0x4c, 0x43, 0x50, 0x44, 0x42, 0x2a, 0x50, 0x44,
-0x4c, 0x53, 0x46, 0x4c, 0x46, 0x49, 0x44, 0x44, 0x46, 0x43, 0x41, 0x43, 0x4d, 0x45, 0x50, 0x53,
-0x50, 0x43, 0x54, 0x50, 0x52, 0x54, 0x43, 0x4d, 0x46, 0x46, 0x55, 0x48, 0x41, 0x54, 0x46, 0x20,
-0x20, 0xc3, 0x12, 0x0, 0x45, 0x20, 0xe, 0x1f, 0x23, 0x1f, 0x19, 0x22, 0x41, 0x29, 0xa8, 0x25,
-0xfd, 0x22, 0xa3, 0x31, 0x4a, 0x29, 0x7a, 0x2b, 0xc9, 0x2c, 0x37, 0x2d, 0xf7, 0x2c, 0xe3, 0x2d,
-0x12, 0x23, 0x15, 0x1e, 0x5, 0x1e, 0x82, 0x1e, 0xa9, 0x31, 0x83, 0x31, 0xc4, 0x2c, 0x49, 0x30,
-0x52, 0x30, 0x90, 0x31, 0x38, 0x1d, 0xf9, 0x12, 0x13, 0x1d, 0x9d, 0x94, 0x14, 0xd, 0x8d, 0x11,
-0x91, 0x13, 0x93, 0x5f, 0x6, 0x12, 0x92, 0xab, 0xb2, 0xb6, 0xa4, 0xff, 0x2e, 0x13, 0x0, 0xc1,
-0x1a, 0x6f, 0x1a, 0xe5, 0x27, 0x41, 0x28, 0x5c, 0x17, 0x43, 0x1b, 0x71, 0x17, 0x7b, 0x17, 0xb9,
-0x1d, 0xce, 0x1d, 0x56, 0x1e, 0x2d, 0x1e, 0x32, 0x17, 0x3a, 0x17, 0x4c, 0x1b, 0x37, 0x1b, 0x43,
-0x1b, 0xc9, 0x1b, 0x85, 0x17, 0x44, 0x13, 0xc8, 0xc0, 0x0, 0xc0, 0x2c, 0xc1, 0x0, 0xc0, 0x0,
-0x85, 0xa3, 0x75, 0x0, 0xc8, 0xb1, 0xda, 0x8d, 0x21, 0x7e, 0xe, 0x21, 0x7e, 0xce, 0x21, 0x7e,
-0xae, 0x21, 0x7e, 0xbd, 0x13, 0x16, 0x85, 0xda, 0xe8, 0xbd, 0x13, 0x16, 0x85, 0xdb, 0x20, 0x5b,
-0x30, 0xa0, 0x0, 0x8c, 0x68, 0x7f, 0x8c, 0xa3, 0x7d, 0xac, 0xa3, 0x7d, 0xb1, 0xda, 0xc9, 0x5c,
-0xf0, 0xd, 0xc9, 0xfe, 0xf0, 0xce, 0x20, 0x2f, 0x12, 0xee, 0xa3, 0x7d, 0x4c, 0x9f, 0x13, 0x60,
-0x40, 0x43, 0x40, 0x3d, 0x5c, 0x40, 0x4c, 0x40, 0x3d, 0x5c, 0x53, 0x41, 0x56, 0x49, 0x4e, 0x47,
-0x20, 0x2e, 0x2e, 0x54, 0x57, 0x5c, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x3a, 0x5c, 0x20, 0x40, 0x59,
-0x2f, 0x40, 0x4e, 0x3f, 0x5c, 0x43, 0x4c, 0x45, 0x41, 0x52, 0x20, 0x41, 0x4c, 0x4c, 0xfe, 0x5,
-0x40, 0x4c, 0x5c, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0x45, 0xfe, 0x5, 0x52, 0x45, 0x50,
-0x4c, 0x41, 0x43, 0x45, 0xfe, 0x5, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x3a, 0x5c, 0x42, 0x45,
-0x43, 0x4f, 0x4d, 0x45, 0x53, 0x3a, 0x5c, 0x44, 0x2e, 0x57, 0x2e, 0x4a, 0x4f, 0x48, 0x4e, 0x53,
-0x4f, 0x4e, 0x38, 0x33, 0x5c, 0x50, 0x52, 0x47, 0x5c, 0x40, 0x57, 0x40, 0x4f, 0x40, 0x52, 0x40,
-0x4b, 0x40, 0x49, 0x40, 0x4e, 0x40, 0x47, 0x5c, 0x40, 0x4e, 0x40, 0x4f, 0x20, 0x40, 0x46, 0x40,
-0x49, 0x40, 0x4c, 0x40, 0x45, 0x21, 0x20, 0xfe, 0x14, 0x4c, 0x4f, 0x41, 0x44, 0xfe, 0x4, 0x53,
-0x41, 0x56, 0x45, 0xfe, 0x4, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0xfe, 0x4, 0x40, 0x52, 0x5c,
-0x3a, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x5c, 0x57, 0x3e,
-0x5c, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x4e, 0x41, 0x4d, 0x45,
-0x20, 0x28, 0x31, 0x2e, 0x2e, 0x31, 0x36, 0x29, 0x5c, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x46,
-0x49, 0x45, 0x4c, 0x44, 0x20, 0x4e, 0x41, 0x4d, 0x45, 0x20, 0x28, 0x31, 0x2e, 0x2e, 0x33, 0x35,
-0x29, 0x5c, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x20, 0x4c, 0x45,
-0x4e, 0x47, 0x54, 0x48, 0x20, 0x31, 0x2e, 0x2e, 0x33, 0x38, 0x5c, 0x20, 0x46, 0x49, 0x45, 0x4c,
-0x44, 0x20, 0x23, 0x20, 0x5c, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x4e, 0x55, 0x4d, 0x42, 0x45,
-0x52, 0x20, 0x4f, 0x46, 0x20, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x53, 0x20, 0x31, 0x2e, 0x2e, 0x31,
-0x37, 0x5c, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x20, 0x49, 0x54, 0x45, 0x4d, 0x20, 0x4e, 0x55, 0x4d,
-0x42, 0x45, 0x52, 0x3f, 0x20, 0x5c, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x52, 0x45, 0x54, 0x55,
-0x52, 0x4e, 0xd, 0x5c, 0x4f, 0x4b, 0x20, 0x54, 0x4f, 0x20, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54,
-0x20, 0x44, 0x49, 0x53, 0x4b, 0x3f, 0x20, 0x59, 0x2f, 0x4e, 0xd, 0x5c, 0x54, 0x4f, 0x54, 0x41,
-0x4c, 0x20, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x53, 0x20, 0x5c, 0x41, 0x52, 0x45, 0x20, 0x59,
-0x4f, 0x55, 0x20, 0x53, 0x55, 0x52, 0x45, 0x20, 0x59, 0x2f, 0x4e, 0x20, 0x3f, 0x5c, 0x54, 0x59,
-0x50, 0x45, 0x20, 0x5c, 0x54, 0x48, 0x52, 0x45, 0x53, 0x48, 0x4f, 0x4c, 0x44, 0x3f, 0x20, 0x59,
-0x2f, 0x4e, 0x3f, 0x5c, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x20, 0x44, 0x49, 0x53, 0x4b, 0x53, 0x4f,
-0x52, 0x54, 0x20, 0x4f, 0x4e, 0x20, 0x5c, 0x5e, 0x5c, 0x4e, 0x45, 0x57, 0x20, 0x4c, 0x49, 0x53,
-0x54, 0xd, 0x5c, 0xd, 0x4c, 0x41, 0x53, 0x54, 0x20, 0x52, 0x43, 0x20, 0x5c, 0x4e, 0x4f, 0x54,
-0x20, 0x41, 0x20, 0x33, 0x2d, 0x50, 0x4c, 0x55, 0x53, 0x2d, 0x31, 0x20, 0x46, 0x49, 0x4c, 0x45,
-0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x44, 0x49, 0x53, 0x4b, 0xd, 0xfe, 0x14, 0xfe, 0x29, 0xd,
-0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x20, 0x57, 0x49, 0x4c, 0x4c, 0x20, 0x43, 0x4c, 0x45, 0x41,
-0x52, 0x20, 0x57, 0x4f, 0x52, 0x44, 0x20, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x4f, 0x52,
-0x20, 0x54, 0x4f, 0x20, 0x53, 0x4f, 0x52, 0x54, 0x20, 0x59, 0x2f, 0x4e, 0x3f, 0xd, 0x5c, 0x49,
-0x4e, 0x53, 0x45, 0x52, 0x54, 0x20, 0x41, 0x20, 0x33, 0x2d, 0x50, 0x4c, 0x55, 0x53, 0x2d, 0x31,
-0x20, 0x46, 0x49, 0x4c, 0x45, 0x20, 0x44, 0x41, 0x54, 0x41, 0x20, 0x44, 0x49, 0x53, 0x4b, 0xd,
-0x41, 0x4e, 0x44, 0x20, 0x54, 0x59, 0x50, 0x45, 0x20, 0x54, 0x46, 0x20, 0x4f, 0x52, 0x20, 0x4e,
-0x45, 0x57, 0x54, 0x46, 0x5c, 0xd, 0x42, 0x4f, 0x54, 0x54, 0x4f, 0x4d, 0x3a, 0x5c, 0xd, 0x54,
-0x4f, 0x50, 0x3a, 0x5c, 0x44, 0x49, 0x53, 0x4b, 0x2c, 0x49, 0x44, 0x3a, 0x5c, 0x2c, 0xb6, 0x13,
-0xbb, 0x13, 0xc0, 0x13, 0xcc, 0x13, 0xd3, 0x13, 0xdb, 0x13, 0xe6, 0x13, 0xe9, 0x13, 0xf3, 0x13,
-0xfc, 0x13, 0x4, 0x14, 0xd, 0x14, 0x1b, 0x14, 0x1f, 0x14, 0x2e, 0x14, 0x3f, 0x14, 0x45, 0x14,
-0x4b, 0x14, 0x53, 0x14, 0x56, 0x14, 0x64, 0x14, 0x67, 0x14, 0x7f, 0x14, 0x98, 0x14, 0xb1, 0x14,
-0xbb, 0x14, 0xd8, 0x14, 0xec, 0x14, 0xfa, 0x14, 0x12, 0x15, 0x21, 0x15, 0x34, 0x15, 0x3a, 0x15,
-0x4a, 0x15, 0x5d, 0x15, 0x5f, 0x15, 0x69, 0x15, 0x73, 0x15, 0x93, 0x15, 0x95, 0x15, 0xc5, 0x15,
-0xfb, 0x15, 0x4, 0x16, 0xa, 0x16, 0x20, 0xe, 0x2f, 0x20, 0xd7, 0x2f, 0xa9, 0x1, 0x8d, 0x7a,
-0x16, 0x4c, 0xeb, 0x17, 0x0, 0xad, 0x7a, 0x16, 0xf0, 0xec, 0x20, 0x17, 0x2f, 0xad, 0x8e, 0x7e,
-0xd0, 0x8, 0xa9, 0x93, 0x20, 0xd2, 0xff, 0x20, 0xa1, 0x2f, 0x20, 0x1c, 0x2d, 0x20, 0xfb, 0x29,
-0x4c, 0x38, 0x1d, 0x20, 0xe, 0x2f, 0x20, 0xd7, 0x2f, 0xa9, 0x1, 0x8d, 0x7a, 0x16, 0x60, 0xa6,
-0x49, 0xa0, 0x0, 0x18, 0x4c, 0xf0, 0xff, 0x20, 0xa5, 0x16, 0xa4, 0x74, 0x20, 0x47, 0x1a, 0xb1,
-0xc8, 0x9d, 0x3, 0x74, 0xe8, 0xc8, 0xc4, 0x73, 0x90, 0xf5, 0x60, 0x20, 0xa5, 0x16, 0xa4, 0x74,
-0x20, 0x62, 0x1a, 0xbd, 0x3, 0x74, 0x91, 0xc8, 0xe8, 0xc8, 0xc4, 0x73, 0x90, 0xf5, 0x60, 0x20,
-0xe7, 0x16, 0x20, 0xa5, 0x16, 0xa0, 0x0, 0xa9, 0x20, 0x91, 0xc8, 0xc8, 0xc0, 0x27, 0x90, 0xf9,
-0x60, 0xa9, 0x20, 0xa0, 0x0, 0x99, 0x3, 0x74, 0xc8, 0xc4, 0x54, 0x90, 0xf8, 0x60, 0xa0, 0x0,
-0x20, 0x83, 0x12, 0x8d, 0x8b, 0x7d, 0xc8, 0x20, 0x83, 0x12, 0xc5, 0x52, 0xf0, 0x6, 0xc8, 0xcc,
-0x8b, 0x7d, 0x90, 0xf3, 0x98, 0x8d, 0x21, 0x7e, 0xa9, 0x1, 0xe, 0x21, 0x7e, 0xce, 0x21, 0x7e,
-0xac, 0x21, 0x7e, 0x20, 0x86, 0x12, 0x48, 0xc8, 0x20, 0x86, 0x12, 0x85, 0xdb, 0x68, 0x85, 0xda,
-0xa9, 0x4c, 0x85, 0xd9, 0x20, 0x56, 0x1b, 0xa5, 0x52, 0x4c, 0xd9, 0x0, 0xa9, 0x1, 0x8d, 0x27,
-0x7e, 0x4c, 0x1d, 0x18, 0xa9, 0x0, 0x8d, 0x27, 0x7e, 0x4c, 0x1d, 0x18, 0x20, 0x4b, 0x19, 0xa5,
-0x58, 0x85, 0x5c, 0x20, 0xad, 0x16, 0x20, 0x77, 0x25, 0x4c, 0xa5, 0x18, 0x20, 0xad, 0x16, 0xa9,
-0x0, 0x85, 0x42, 0x4c, 0xf, 0x1c, 0xa5, 0x42, 0xd0, 0xf2, 0x20, 0x42, 0x17, 0x20, 0x80, 0x1b,
-0xa9, 0x0, 0x8d, 0x5d, 0x7e, 0x20, 0xb5, 0x18, 0xee, 0x50, 0x7e, 0xa5, 0x42, 0xf0, 0x3, 0x4c,
-0x1d, 0x18, 0x4c, 0xed, 0x1a, 0xa5, 0x42, 0xf0, 0x3, 0x4c, 0x1d, 0x18, 0x4c, 0x8e, 0x1a, 0xa9,
-0x0, 0x8d, 0x93, 0x7d, 0xa5, 0x89, 0x18, 0xa, 0x90, 0x3, 0xee, 0x93, 0x7d, 0xa5, 0x89, 0x29,
-0x7f, 0x85, 0x89, 0xad, 0x93, 0x7d, 0xd0, 0xf, 0xa5, 0x89, 0xc9, 0x61, 0xb0, 0x9, 0xc9, 0x40,
-0x90, 0x5, 0x38, 0xe9, 0x40, 0x85, 0x89, 0xa5, 0x89, 0xc9, 0x22, 0xd0, 0x4, 0xa9, 0x27, 0x85,
-0x89, 0xad, 0x27, 0x7e, 0xd0, 0x9, 0xa4, 0xc, 0xa5, 0x89, 0x91, 0xc8, 0x4c, 0xc1, 0x1a, 0xa5,
-0x89, 0x9, 0x80, 0xa4, 0xc, 0x91, 0xc8, 0x4c, 0xc1, 0x1a, 0xad, 0x42, 0x13, 0x85, 0xd8, 0xad,
-0x43, 0x13, 0x85, 0xd9, 0xad, 0x6b, 0x13, 0x85, 0xda, 0xad, 0x6c, 0x13, 0x85, 0xdb, 0x4c, 0xf4,
-0x16, 0xa9, 0x1, 0xd0, 0x22, 0xa9, 0x0, 0x85, 0x49, 0x8d, 0x68, 0x7f, 0x20, 0xd5, 0x16, 0x20,
-0xb5, 0x18, 0x20, 0xd4, 0x24, 0xad, 0x1e, 0x7e, 0x85, 0xe0, 0x20, 0x4b, 0x19, 0xa9, 0x20, 0x8d,
-0x29, 0x7e, 0xa9, 0x0, 0x8d, 0x9, 0x7f, 0x85, 0x42, 0xa9, 0x0, 0x8d, 0x94, 0x7d, 0xa5, 0x74,
-0x85, 0xc, 0x85, 0x78, 0x8d, 0x28, 0x7e, 0x20, 0x31, 0x1c, 0x20, 0x53, 0x29, 0x20, 0xe4, 0xff,
-0xf0, 0xf8, 0x85, 0x52, 0x85, 0x89, 0xad, 0x28, 0x7e, 0xf0, 0x8, 0xa9, 0x0, 0x8d, 0x27, 0x7e,
-0x8d, 0x28, 0x7e, 0x20, 0x6d, 0x29, 0xa9, 0x0, 0x85, 0x78, 0x8d, 0x50, 0x7e, 0x8d, 0x51, 0x7e,
-0xa5, 0x42, 0xd0, 0x9, 0x20, 0xba, 0x1c, 0x4c, 0xe4, 0x19, 0x20, 0xc5, 0x1c, 0x4c, 0xd0, 0x17,
-0xad, 0x39, 0x7e, 0x85, 0xd8, 0xad, 0x3a, 0x7e, 0x85, 0xd9, 0xa2, 0x1, 0xe4, 0x5c, 0xb0, 0x11,
-0xa5, 0xd8, 0x18, 0x65, 0x54, 0x85, 0xd8, 0xa5, 0xd9, 0x69, 0x0, 0x85, 0xd9, 0xe8, 0x4c, 0x62,
-0x18, 0x60, 0xa5, 0x73, 0x38, 0xe5, 0x74, 0x8d, 0x5e, 0x7e, 0xad, 0x37, 0x7e, 0x8d, 0x39, 0x7e,
-0xad, 0x38, 0x7e, 0x8d, 0x3a, 0x7e, 0xad, 0x24, 0x7e, 0x85, 0x54, 0xc6, 0x54, 0x60, 0x20, 0x56,
-0x18, 0xa0, 0x0, 0x20, 0x83, 0x12, 0x99, 0x3, 0x74, 0xc8, 0xc4, 0x54, 0x90, 0xf5, 0x60, 0x20,
-0x56, 0x18, 0xa0, 0x0, 0xb9, 0x3, 0x74, 0x91, 0xd8, 0xc8, 0xc4, 0x54, 0x90, 0xf6, 0x60, 0xa9,
-0x0, 0x85, 0x49, 0xa9, 0x0, 0x8d, 0x7d, 0x7e, 0x20, 0xf, 0x1c, 0xa5, 0x5a, 0xc5, 0xe0, 0x90,
-0x2c, 0x38, 0xe5, 0xe0, 0x8d, 0xdf, 0x7d, 0xa5, 0x9, 0xcd, 0xdf, 0x7d, 0x90, 0x3, 0xad, 0xdf,
-0x7d, 0x8d, 0x20, 0x7e, 0xa5, 0xe0, 0x85, 0x5c, 0x18, 0x6d, 0x20, 0x7e, 0x8d, 0x20, 0x7e, 0x20,
-0x59, 0x19, 0xe6, 0x49, 0xe6, 0x5c, 0xa5, 0x5c, 0xcd, 0x20, 0x7e, 0x90, 0xf2, 0x20, 0x59, 0x19,
-0x20, 0x98, 0x26, 0xa5, 0x49, 0xc5, 0x9, 0xb0, 0xf, 0xe6, 0x49, 0x20, 0xc1, 0x16, 0xa5, 0x49,
-0xc5, 0x9, 0xb0, 0x4, 0xe6, 0x49, 0xd0, 0xf3, 0xa5, 0x2f, 0x85, 0x49, 0x4c, 0x4b, 0x19, 0xa9,
-0x0, 0x85, 0x5c, 0x85, 0x5a, 0xee, 0x40, 0x7e, 0x20, 0xe7, 0x16, 0xe6, 0x5c, 0xe6, 0x5a, 0xa5,
-0x5c, 0xcd, 0x40, 0x7e, 0xf0, 0x2, 0xb0, 0x6, 0x20, 0xa5, 0x18, 0x4c, 0x21, 0x19, 0xa9, 0x14,
-0x85, 0x5a, 0xce, 0x40, 0x7e, 0x60, 0xa5, 0x2f, 0xd0, 0x8, 0xa5, 0xe0, 0xc9, 0x2, 0x90, 0x2,
-0xc6, 0xe0, 0x4c, 0x4b, 0x19, 0xa5, 0xe0, 0x18, 0x65, 0x2f, 0x85, 0x58, 0xa5, 0x2f, 0x85, 0x49,
-0x4c, 0xa5, 0x16, 0x20, 0x5f, 0x19, 0x4c, 0x7d, 0x25, 0xad, 0x7d, 0x7e, 0xd0, 0x12, 0x20, 0x56,
-0x18, 0xa5, 0xd8, 0x8d, 0x7e, 0x7e, 0xa5, 0xd9, 0x8d, 0x7f, 0x7e, 0xee, 0x7d, 0x7e, 0xd0, 0x13,
-0xad, 0x7e, 0x7e, 0x85, 0xd8, 0xad, 0x7f, 0x7e, 0x85, 0xd9, 0xa6, 0x5c, 0xca, 0x20, 0x62, 0x18,
-0x4c, 0x67, 0x19, 0x20, 0xa5, 0x16, 0xad, 0x5d, 0x7e, 0x8d, 0xdf, 0x7d, 0x18, 0x6d, 0x5e, 0x7e,
-0x8d, 0xe1, 0x7d, 0xa5, 0x74, 0x8d, 0xe0, 0x7d, 0xac, 0xdf, 0x7d, 0x20, 0x83, 0x12, 0xac, 0xe0,
-0x7d, 0x91, 0xc8, 0xee, 0xdf, 0x7d, 0xee, 0xe0, 0x7d, 0xad, 0xdf, 0x7d, 0xcd, 0xe1, 0x7d, 0x90,
-0xe7, 0x60, 0xa0, 0x0, 0x20, 0x83, 0x12, 0xa, 0x8d, 0x8b, 0x7d, 0xc8, 0xc8, 0x20, 0x83, 0x12,
-0xcd, 0x8b, 0x78, 0xd0, 0xa, 0xc8, 0x20, 0x83, 0x12, 0x88, 0xcd, 0x8c, 0x78, 0xf0, 0xa, 0xc8,
-0xc8, 0xcc, 0x8b, 0x7d, 0x90, 0xe7, 0xac, 0x8b, 0x7d, 0x98, 0x4a, 0x4c, 0xb, 0x17, 0xa5, 0x89,
-0xc9, 0xbc, 0xf0, 0x3, 0x4c, 0x50, 0x18, 0xa5, 0x42, 0xd0, 0xf9, 0xe6, 0x42, 0x20, 0x11, 0x2d,
-0xa9, 0x15, 0x20, 0x6b, 0x2d, 0x20, 0x1c, 0x2d, 0x20, 0xd5, 0x16, 0xa9, 0x0, 0x8d, 0x68, 0x7f,
-0xad, 0x8b, 0x78, 0x20, 0xb6, 0x2a, 0x8d, 0x8b, 0x78, 0xad, 0x8c, 0x78, 0x20, 0xb6, 0x2a, 0x8d,
-0x8c, 0x78, 0x4c, 0x27, 0x1a, 0x4c, 0x38, 0x1d, 0x4e, 0x4f, 0x53, 0x4e, 0x48, 0x4f, 0x4a, 0x57,
-0x44, 0xad, 0xf7, 0x12, 0x85, 0xd8, 0xad, 0xf8, 0x12, 0x85, 0xd9, 0xad, 0x2c, 0x13, 0x85, 0xda,
-0xad, 0x2d, 0x13, 0x85, 0xdb, 0x4c, 0xb8, 0x19, 0x44, 0x57, 0x4a, 0x4f, 0x48, 0x4e, 0x53, 0x4f,
-0x4e, 0xa6, 0x42, 0xe0, 0x0, 0xf0, 0x3, 0xa2, 0x0, 0x60, 0x98, 0x48, 0x20, 0x4b, 0x19, 0xa5,
-0x58, 0x85, 0x5c, 0x20, 0x94, 0x18, 0x68, 0xa8, 0xae, 0x5d, 0x7e, 0x60, 0xa6, 0x42, 0xe0, 0x0,
-0xf0, 0x3, 0xa2, 0x0, 0x60, 0xae, 0x5d, 0x7e, 0x60, 0x20, 0x2d, 0x1b, 0xa5, 0xc, 0xc5, 0x74,
-0xf0, 0x4, 0x90, 0x2, 0xb0, 0xd, 0xa5, 0x73, 0x85, 0xc, 0xc6, 0xc, 0xa5, 0x42, 0xf0, 0x1a,
-0x4c, 0x1d, 0x18, 0xc6, 0xc, 0x4c, 0x1d, 0x18, 0x20, 0x42, 0x17, 0xa5, 0x2f, 0xf0, 0x2, 0xc6,
-0x2f, 0x20, 0x3c, 0x19, 0x20, 0xb5, 0x18, 0x4c, 0x1d, 0x18, 0xad, 0x5d, 0x7e, 0xc9, 0x1, 0x90,
-0x12, 0xa5, 0x74, 0x85, 0xc, 0xce, 0x5d, 0x7e, 0xa9, 0x0, 0x8d, 0x51, 0x7e, 0x20, 0xb5, 0x18,
-0x4c, 0x1d, 0x18, 0xa9, 0x28, 0x8d, 0x5d, 0x7e, 0x4c, 0x91, 0x1a, 0xe6, 0xc, 0x20, 0x2d, 0x1b,
-0xa5, 0xc, 0xc5, 0x73, 0x90, 0x1e, 0xa5, 0x42, 0xd0, 0x12, 0x20, 0x4b, 0x19, 0x20, 0x69, 0x25,
-0x8d, 0x58, 0x7e, 0x20, 0xd6, 0x29, 0x20, 0x61, 0x25, 0xee, 0x51, 0x7e, 0xa5, 0x74, 0x85, 0xc,
-0xa5, 0x42, 0xf0, 0xf, 0x4c, 0x1d, 0x18, 0x20, 0x42, 0x17, 0x20, 0x5f, 0x1d, 0x20, 0xb5, 0x18,
-0x4c, 0x1d, 0x18, 0xad, 0x5d, 0x7e, 0xc9, 0x28, 0x90, 0xb, 0xa9, 0x0, 0x8d, 0x5d, 0x7e, 0x20,
-0xb5, 0x18, 0x4c, 0xf0, 0x1a, 0xa5, 0x73, 0x85, 0xc, 0xc6, 0xc, 0xad, 0x51, 0x7e, 0xf0, 0x9,
-0xad, 0x58, 0x7e, 0x20, 0xdc, 0x29, 0x20, 0x61, 0x25, 0xa9, 0x0, 0x8d, 0x51, 0x7e, 0xee, 0x5d,
-0x7e, 0x20, 0xb5, 0x18, 0x4c, 0x1d, 0x18, 0xa6, 0x42, 0xe0, 0x0, 0xf0, 0x1, 0x60, 0x4c, 0x42,
-0x17, 0xa5, 0x42, 0xf0, 0x3, 0x4c, 0x52, 0x17, 0xa9, 0x28, 0x4c, 0x68, 0x17, 0xa5, 0x42, 0xd0,
-0xf4, 0xa9, 0x0, 0x4c, 0x68, 0x17, 0x20, 0x73, 0x1b, 0x4c, 0x1d, 0x18, 0x4c, 0x1b, 0x1d, 0x18,
-0xa5, 0xda, 0xcd, 0x52, 0x1b, 0xd0, 0x8, 0xa5, 0xdb, 0xcd, 0x53, 0x1b, 0xd0, 0x1, 0x60, 0x20,
-0x73, 0x1b, 0xa5, 0xda, 0x8d, 0x54, 0x1b, 0xa5, 0xdb, 0x8d, 0x55, 0x1b, 0x60, 0xad, 0x54, 0x1b,
-0x8d, 0x50, 0x1b, 0xad, 0x55, 0x1b, 0x8d, 0x51, 0x1b, 0x60, 0x20, 0xb0, 0x1b, 0x20, 0xa9, 0x1b,
-0xa2, 0x1, 0xc4, 0x54, 0xb0, 0xf, 0xb9, 0x3, 0x74, 0x9d, 0x83, 0x7c, 0xa9, 0x20, 0x99, 0x3,
-0x74, 0xc8, 0xe8, 0xd0, 0xed, 0x8e, 0x83, 0x7c, 0xac, 0x70, 0x7e, 0xa9, 0x9f, 0x99, 0x3, 0x74,
-0x4c, 0xa5, 0x18, 0x20, 0xab, 0x28, 0xac, 0x70, 0x7e, 0x60, 0x20, 0x94, 0x18, 0xa0, 0x0, 0xc4,
-0x54, 0xb0, 0xf, 0xb9, 0x3, 0x74, 0xc9, 0x9f, 0xd0, 0x5, 0xa9, 0x20, 0x99, 0x3, 0x74, 0xc8,
-0xd0, 0xed, 0x60, 0x20, 0x4b, 0x19, 0x20, 0x42, 0x17, 0xad, 0x83, 0x7c, 0xf0, 0x18, 0x20, 0xa9,
-0x1b, 0xa2, 0x1, 0xc4, 0x54, 0xb0, 0xf, 0xec, 0x83, 0x7c, 0xb0, 0xa, 0xbd, 0x83, 0x7c, 0x99,
-0x3, 0x74, 0xc8, 0xe8, 0xd0, 0xed, 0x20, 0xa5, 0x18, 0x20, 0xb5, 0x18, 0x4c, 0x1d, 0x18, 0xad,
-0xc4, 0x7d, 0x48, 0xad, 0xc5, 0x7d, 0x8d, 0xc4, 0x7d, 0x68, 0x8d, 0xc5, 0x7d, 0xad, 0x79, 0x7e,
-0x20, 0x25, 0x1e, 0x8d, 0x79, 0x7e, 0x4c, 0x5b, 0x30, 0xad, 0x79, 0x7e, 0xd0, 0xe1, 0x60, 0xad,
-0x79, 0x7e, 0xf0, 0xdb, 0x60, 0x48, 0x20, 0x26, 0x1c, 0x68, 0x8d, 0xe0, 0x7d, 0x4c, 0x26, 0x12,
-0xa9, 0x0, 0xa0, 0x4, 0x99, 0xdf, 0x7d, 0x88, 0x10, 0xfa, 0x60, 0xad, 0x9, 0x7f, 0xd0, 0xfa,
-0xa5, 0x49, 0x48, 0xa5, 0xc, 0x48, 0xad, 0x4d, 0x7e, 0x85, 0x49, 0xa9, 0x4, 0x8d, 0xa7, 0x7d,
-0x20, 0xa5, 0x16, 0x20, 0xf, 0x1c, 0xad, 0x7c, 0x7e, 0xd0, 0x6, 0x20, 0xd5, 0x16, 0xee, 0x7c,
-0x7e, 0xac, 0x4e, 0x7e, 0x84, 0xc, 0xa9, 0x2, 0x20, 0x7d, 0x13, 0xa5, 0x58, 0x20, 0x1b, 0x1c,
-0xe6, 0xc, 0xa9, 0x1, 0x20, 0x7d, 0x13, 0x68, 0x48, 0x18, 0x6d, 0x5d, 0x7e, 0x69, 0x1, 0x38,
-0xe5, 0x74, 0x20, 0x1b, 0x1c, 0xe6, 0xc, 0xa5, 0x42, 0xd0, 0x3, 0x20, 0xd4, 0x24, 0x68, 0x85,
-0xc, 0x68, 0x85, 0x49, 0x4c, 0xa5, 0x16, 0xa5, 0xe0, 0xa2, 0x1, 0x8d, 0x49, 0x7e, 0xcd, 0x45,
-0x7e, 0x90, 0xd, 0xf0, 0xb, 0xad, 0x49, 0x7e, 0x38, 0xed, 0x45, 0x7e, 0xe8, 0x4c, 0x91, 0x1c,
-0x8e, 0x49, 0x7e, 0x60, 0xa9, 0x0, 0x85, 0x49, 0x20, 0x6b, 0x30, 0xe6, 0x49, 0xa5, 0x49, 0xc9,
-0x19, 0x90, 0xf5, 0x60, 0xa5, 0x49, 0x8d, 0x94, 0x7e, 0xa5, 0xc, 0x8d, 0x95, 0x7e, 0x60, 0xad,
-0x94, 0x7e, 0x85, 0x49, 0xad, 0x95, 0x7e, 0x85, 0xc, 0x60, 0x20, 0xc5, 0x1c, 0x20, 0x54, 0x26,
-0x4c, 0x38, 0x1d, 0x20, 0xc5, 0x1c, 0x20, 0x8d, 0x29, 0x4c, 0x38, 0x1d, 0xa0, 0x0, 0x8c, 0x4d,
-0x75, 0xa5, 0x73, 0x8d, 0x4e, 0x75, 0x4c, 0xf9, 0x1c, 0x8c, 0x4d, 0x75, 0x8e, 0x4e, 0x75, 0xe0,
-0x0, 0xf0, 0xf, 0xa2, 0x0, 0xb9, 0x3, 0x74, 0x9d, 0x4f, 0x75, 0xc8, 0xe8, 0xcc, 0x4e, 0x75,
-0x90, 0xf3, 0x8e, 0x4c, 0x75, 0x60, 0xa0, 0x0, 0xad, 0x4c, 0x75, 0xf0, 0xc, 0xb9, 0x4f, 0x75,
-0x99, 0x3, 0x74, 0xc8, 0xcc, 0x4c, 0x75, 0x90, 0xf4, 0x60, 0xa0, 0x27, 0xb9, 0x56, 0x74, 0x99,
-0x3, 0x74, 0x88, 0x10, 0xf7, 0x60, 0xa0, 0x27, 0xb9, 0x3, 0x74, 0x99, 0x56, 0x74, 0x88, 0x10,
-0xf7, 0x60, 0x20, 0xd4, 0x24, 0x20, 0x4b, 0x19, 0x20, 0xb5, 0x18, 0x20, 0xe4, 0xff, 0x4c, 0x1d,
-0x18, 0xa5, 0xe0, 0x18, 0x65, 0x2f, 0x60, 0xa5, 0x5a, 0xcd, 0x40, 0x7e, 0xb0, 0x4, 0xe6, 0x5a,
-0x38, 0x60, 0xad, 0x40, 0x7e, 0x85, 0x5a, 0x18, 0x60, 0x20, 0x42, 0x17, 0xa5, 0x2f, 0xc5, 0x9,
-0xb0, 0xc, 0x20, 0x47, 0x1d, 0xc5, 0x5a, 0xb0, 0x36, 0xe6, 0x2f, 0x4c, 0x7d, 0x1d, 0x20, 0x47,
-0x1d, 0xc5, 0x5a, 0xb0, 0x5, 0xe6, 0xe0, 0x4c, 0x87, 0x1d, 0x20, 0x4d, 0x1d, 0x90, 0x2, 0xe6,
-0xe0, 0x20, 0x4b, 0x19, 0xad, 0x50, 0x7e, 0xd0, 0x1d, 0xad, 0x51, 0x7e, 0xd0, 0x1, 0x60, 0xad,
-0x58, 0x7e, 0xc9, 0x3c, 0xd0, 0xf8, 0x20, 0x54, 0x26, 0x20, 0xda, 0x29, 0x4c, 0x61, 0x25, 0x20,
-0x4d, 0x1d, 0x90, 0x2, 0xe6, 0x2f, 0xad, 0x51, 0x7e, 0xd0, 0xe4, 0x20, 0x4b, 0x19, 0xa5, 0x74,
-0x85, 0xc, 0x60, 0x20, 0x75, 0x21, 0x20, 0x42, 0x17, 0xa9, 0x0, 0x85, 0x2f, 0xad, 0x1e, 0x7e,
-0x85, 0xe0, 0x20, 0xba, 0x1c, 0x4c, 0x38, 0x1d, 0x20, 0x75, 0x21, 0x20, 0x42, 0x17, 0xa5, 0x9,
-0xc5, 0x5a, 0xb0, 0x14, 0xa5, 0x9, 0x8d, 0xdf, 0x7d, 0xa5, 0x5a, 0x38, 0xed, 0xdf, 0x7d, 0x85,
-0xe0, 0xa5, 0x9, 0x85, 0x2f, 0x4c, 0xff, 0x1d, 0xad, 0x1e, 0x7e, 0x85, 0xe0, 0xa5, 0x5a, 0x85,
-0x2f, 0xc5, 0xe0, 0xb0, 0x4, 0xa5, 0xe0, 0x85, 0x2f, 0x20, 0xba, 0x1c, 0x4c, 0x38, 0x1d, 0x20,
-0x4b, 0x19, 0xa9, 0x3c, 0x85, 0x88, 0x20, 0x61, 0x25, 0x20, 0x42, 0x17, 0x4c, 0x38, 0x1d, 0x20,
-0x4b, 0x19, 0xa9, 0x20, 0x85, 0x88, 0x20, 0x61, 0x25, 0x20, 0x42, 0x17, 0x4c, 0x38, 0x1d, 0xf0,
-0x3, 0xa9, 0x0, 0x60, 0xa9, 0x1, 0x60, 0x20, 0x75, 0x21, 0x20, 0xab, 0x28, 0xac, 0x70, 0x7e,
-0x78, 0x8d, 0x3f, 0xff, 0xb9, 0x64, 0xc0, 0x8d, 0x3e, 0xff, 0x58, 0x20, 0x25, 0x1e, 0x99, 0x64,
-0xc0, 0x4c, 0x85, 0x1e, 0xa0, 0x0, 0x98, 0x99, 0x64, 0xc0, 0xc8, 0xc0, 0x50, 0x90, 0xf8, 0x60,
-0x20, 0x75, 0x21, 0x20, 0xab, 0x28, 0xac, 0x70, 0x7e, 0xc8, 0xc4, 0x54, 0x90, 0x3, 0x4c, 0x1d,
-0x18, 0x78, 0x8d, 0x3f, 0xff, 0xb9, 0x64, 0xc0, 0x8d, 0x3e, 0xff, 0x58, 0xd0, 0x6, 0xc8, 0xc4,
-0x54, 0x90, 0xee, 0x88, 0x84, 0xc, 0x20, 0x20, 0x21, 0x4c, 0x1d, 0x18, 0x20, 0x4a, 0x1e, 0x20,
-0x42, 0x17, 0x4c, 0x38, 0x1d, 0xa5, 0x58, 0x8d, 0x66, 0x7f, 0x8d, 0x53, 0x7e, 0x85, 0x5c, 0x18,
-0x69, 0xf, 0x8d, 0x12, 0x7d, 0xa5, 0x5c, 0xc5, 0x5a, 0xb0, 0x11, 0xcd, 0x12, 0x7d, 0xb0, 0xc,
-0x20, 0x30, 0x25, 0xc9, 0x3c, 0xf0, 0x5, 0xe6, 0x5c, 0x4c, 0x9b, 0x1e, 0xa5, 0x5c, 0x8d, 0x52,
-0x7e, 0x8d, 0x12, 0x7d, 0x20, 0x56, 0x18, 0xa9, 0x1, 0x8d, 0xab, 0x7d, 0x20, 0x79, 0x2f, 0xad,
-0x66, 0x7f, 0x85, 0x5c, 0x20, 0x94, 0x18, 0x20, 0x88, 0x2f, 0xad, 0xab, 0x7d, 0x85, 0x5c, 0x20,
-0xa5, 0x18, 0xad, 0x66, 0x7f, 0xcd, 0x52, 0x7e, 0xb0, 0x9, 0xee, 0xab, 0x7d, 0xee, 0x66, 0x7f,
-0x4c, 0xc2, 0x1e, 0x20, 0x79, 0x2f, 0xad, 0xab, 0x7d, 0x8d, 0xaa, 0x7d, 0x60, 0x20, 0x88, 0x2f,
-0x20, 0xe7, 0x16, 0xa9, 0x1, 0x85, 0x5c, 0xa5, 0x5c, 0xc9, 0xf, 0xb0, 0x8, 0x20, 0xa5, 0x18,
-0xe6, 0x5c, 0x4c, 0xfd, 0x1e, 0x4c, 0x79, 0x2f, 0x20, 0x4b, 0x19, 0x20, 0x42, 0x17, 0x20, 0xfb,
-0x29, 0x20, 0xd5, 0x27, 0x20, 0x8b, 0x1e, 0x20, 0xc5, 0x1c, 0x4c, 0x38, 0x1d, 0x20, 0x4b, 0x19,
-0x20, 0x42, 0x17, 0x20, 0xd5, 0x27, 0x20, 0x3b, 0x1f, 0x20, 0xc5, 0x1c, 0x4c, 0x38, 0x1d, 0x20,
-0xe4, 0xff, 0xf0, 0xfb, 0x60, 0xa9, 0x1, 0x8d, 0xab, 0x7d, 0xa5, 0x58, 0x8d, 0x53, 0x7e, 0xa5,
-0x5a, 0x18, 0x6d, 0xaa, 0x7d, 0xcd, 0x40, 0x7e, 0xb0, 0xea, 0xad, 0x53, 0x7e, 0x85, 0x5c, 0x20,
-0x5a, 0x26, 0xad, 0xab, 0x7d, 0xcd, 0xaa, 0x7d, 0xb0, 0x6, 0xee, 0xab, 0x7d, 0x4c, 0x50, 0x1f,
-0xa9, 0x1, 0x8d, 0xab, 0x7d, 0x20, 0x88, 0x2f, 0xad, 0xab, 0x7d, 0x85, 0x5c, 0x20, 0x94, 0x18,
-0x20, 0x79, 0x2f, 0xad, 0x53, 0x7e, 0x85, 0x5c, 0x20, 0xa5, 0x18, 0xad, 0xab, 0x7d, 0xcd, 0xaa,
-0x7d, 0xb0, 0x9, 0xee, 0xab, 0x7d, 0xee, 0x53, 0x7e, 0x4c, 0x6b, 0x1f, 0x4c, 0x79, 0x2f, 0xe6,
-0xd8, 0xd0, 0x2, 0xe6, 0xd9, 0x60, 0xad, 0x5b, 0x7f, 0x38, 0xe5, 0xd8, 0xad, 0x5c, 0x7f, 0xe5,
-0xd9, 0x60, 0x20, 0x95, 0x1f, 0xa0, 0x0, 0x20, 0x83, 0x12, 0xcd, 0x4f, 0x75, 0xf0, 0x9, 0x20,
-0x9c, 0x1f, 0xb0, 0xee, 0xee, 0xac, 0x7d, 0x60, 0xc8, 0xcc, 0x4e, 0x75, 0xb0, 0xa, 0x20, 0x83,
-0x12, 0xd9, 0x4f, 0x75, 0xf0, 0xf2, 0xd0, 0xda, 0x60, 0xa5, 0x58, 0x85, 0x81, 0xa5, 0xc, 0x38,
-0xe5, 0x74, 0x8d, 0xe, 0x7d, 0xa5, 0x5a, 0x20, 0xf7, 0x20, 0xa9, 0x0, 0x8d, 0xac, 0x7d, 0x20,
-0xa8, 0x1f, 0xad, 0xac, 0x7d, 0xf0, 0x3, 0x4c, 0xad, 0x20, 0xa2, 0x0, 0xa5, 0xd8, 0x8d, 0x5b,
-0x7f, 0xa5, 0xd9, 0x8d, 0x5c, 0x7f, 0x86, 0x5c, 0xe6, 0x5c, 0x20, 0x56, 0x18, 0x20, 0x9c, 0x1f,
-0xb0, 0xf6, 0xc6, 0x5c, 0xa5, 0x5c, 0x8d, 0x54, 0x7e, 0x20, 0x56, 0x18, 0xad, 0x5b, 0x7f, 0x38,
-0xe5, 0xd8, 0x85, 0x8b, 0x18, 0x65, 0x74, 0x85, 0x8a, 0x85, 0xc, 0x20, 0x7e, 0x21, 0x20, 0x66,
-0x21, 0x20, 0x7e, 0x21, 0xa4, 0xc, 0xa2, 0x0, 0xb1, 0xc8, 0x9, 0x80, 0x91, 0xc8, 0x20, 0x82,
-0x29, 0xc8, 0xe8, 0xc4, 0x73, 0xb0, 0x5, 0xec, 0x4e, 0x75, 0x90, 0xec, 0x4c, 0x8d, 0x20, 0xa5,
-0x30, 0x85, 0x49, 0xa0, 0x0, 0x84, 0x74, 0x8c, 0x34, 0x7e, 0x84, 0xc, 0x20, 0xd5, 0x16, 0xa9,
-0xa, 0x20, 0x7d, 0x13, 0xa5, 0x74, 0x48, 0xe6, 0xc, 0xa5, 0xc, 0x85, 0x74, 0x20, 0xe7, 0x17,
-0x68, 0x85, 0x74, 0x20, 0x7e, 0x20, 0xa4, 0x74, 0x20, 0xef, 0x1c, 0x20, 0xc5, 0x1c, 0x20, 0x4b,
-0x19, 0xa5, 0xc, 0x85, 0x8a, 0x4c, 0xcf, 0x1f, 0xae, 0x5e, 0x7e, 0xbd, 0x2, 0x74, 0xc9, 0x20,
-0xd0, 0x4, 0xca, 0xd0, 0xf6, 0xe8, 0x60, 0xad, 0x34, 0x7e, 0xf0, 0x3, 0x4c, 0x7b, 0x22, 0xa5,
-0x30, 0x85, 0x49, 0x20, 0xd5, 0x16, 0xa0, 0x0, 0x84, 0xc, 0xa9, 0x8, 0x20, 0x7d, 0x13, 0x20,
-0x86, 0x30, 0x20, 0x74, 0x30, 0xf0, 0x11, 0xa5, 0x30, 0x85, 0x49, 0x20, 0xd5, 0x16, 0xa5, 0x8a,
-0x85, 0xc, 0x20, 0x66, 0x21, 0x4c, 0x38, 0x1d, 0xa5, 0x8b, 0x8d, 0xe, 0x7d, 0xad, 0x54, 0x7e,
-0x85, 0x81, 0xa5, 0x8a, 0x85, 0xc, 0x4c, 0xdb, 0x1f, 0xa5, 0x9, 0x4a, 0x8d, 0xdf, 0x7d, 0xa5,
-0x5c, 0x38, 0xed, 0xdf, 0x7d, 0x90, 0xa, 0xf0, 0x8, 0x85, 0xe0, 0xad, 0xdf, 0x7d, 0x85, 0x2f,
-0x60, 0xad, 0x1e, 0x7e, 0x85, 0xe0, 0xa5, 0x5c, 0x85, 0x2f, 0xa5, 0x2f, 0xf0, 0x2, 0xc6, 0x2f,
-0x60, 0x85, 0x5c, 0xe6, 0x5c, 0x20, 0x56, 0x18, 0xa5, 0xd8, 0x8d, 0x5b, 0x7f, 0xa5, 0xd9, 0x8d,
-0x5c, 0x7f, 0xad, 0xe, 0x7d, 0x85, 0xc, 0xa5, 0x81, 0x85, 0x5c, 0x20, 0x56, 0x18, 0xa5, 0xd8,
-0x18, 0x65, 0xc, 0x85, 0xd8, 0x90, 0x2, 0xe6, 0xd9, 0x60, 0x20, 0x59, 0x12, 0xa5, 0xc, 0x48,
-0x20, 0xc5, 0x1c, 0x68, 0x85, 0xc, 0x20, 0x2d, 0x1b, 0xa5, 0xc, 0x38, 0xe9, 0x28, 0x8d, 0xdf,
-0x7d, 0xb0, 0x1b, 0x20, 0x2d, 0x1b, 0xa5, 0xc, 0xc5, 0x73, 0x90, 0xb, 0xe9, 0x5, 0x85, 0xc,
-0xa9, 0x5, 0x8d, 0x5d, 0x7e, 0xd0, 0x11, 0xa9, 0x0, 0x8d, 0x5d, 0x7e, 0xf0, 0xa, 0xa9, 0x28,
-0x8d, 0x5d, 0x7e, 0xad, 0xdf, 0x7d, 0x85, 0xc, 0xa5, 0xc, 0x20, 0xba, 0x1c, 0x4c, 0xb5, 0x18,
-0xa5, 0x42, 0x48, 0xa9, 0x1, 0x85, 0x42, 0x20, 0x20, 0x21, 0x68, 0x85, 0x42, 0x60, 0x60, 0xa5,
-0x42, 0xf0, 0xfb, 0x68, 0x68, 0x4c, 0x85, 0x17, 0xad, 0x54, 0x7e, 0x85, 0x5c, 0x20, 0xcf, 0x20,
-0x20, 0xba, 0x1c, 0x4c, 0x4b, 0x19, 0xa5, 0x8b, 0x48, 0xad, 0x55, 0x74, 0xcd, 0x4e, 0x75, 0xf0,
-0x2a, 0xb0, 0x18, 0xad, 0x4e, 0x75, 0x38, 0xed, 0x55, 0x74, 0x8d, 0x9b, 0x7d, 0xa9, 0x20, 0x85,
-0x87, 0xe6, 0x8b, 0x20, 0xad, 0x27, 0xc6, 0x8b, 0x4c, 0xc1, 0x21, 0x38, 0xed, 0x4e, 0x75, 0x8d,
-0x9b, 0x7d, 0xa5, 0x58, 0x48, 0x20, 0x85, 0x27, 0x68, 0x85, 0x58, 0xa5, 0x58, 0x85, 0x5c, 0x68,
-0x85, 0x8b, 0x20, 0x94, 0x18, 0xa4, 0x8b, 0xa2, 0x0, 0xbd, 0x56, 0x74, 0x99, 0x3, 0x74, 0xc8,
-0xe8, 0xc4, 0x54, 0xb0, 0x8, 0xec, 0x55, 0x74, 0x90, 0xef, 0x4c, 0xa5, 0x18, 0xec, 0x55, 0x74,
-0xb0, 0xf8, 0x8a, 0x48, 0x20, 0xa5, 0x18, 0xa5, 0x5c, 0xc5, 0x5a, 0x90, 0xd, 0xa5, 0x5c, 0x48,
-0x85, 0x58, 0xe6, 0x58, 0x20, 0x5a, 0x26, 0x68, 0x85, 0x5c, 0xe6, 0x5c, 0x20, 0x94, 0x18, 0x68,
-0xaa, 0xa0, 0x0, 0xbd, 0x56, 0x74, 0x99, 0x3, 0x74, 0xe8, 0xc8, 0xec, 0x55, 0x74, 0x90, 0xf3,
-0x4c, 0xe0, 0x21, 0xa5, 0x30, 0x85, 0x49, 0xa0, 0x0, 0x8c, 0x34, 0x7e, 0x84, 0x74, 0x20, 0xd5,
-0x16, 0xa0, 0x0, 0x84, 0xc, 0xa9, 0xa, 0x20, 0x7d, 0x13, 0xe6, 0xc, 0xa5, 0x74, 0x48, 0xa5,
-0xc, 0x85, 0x74, 0x20, 0xe7, 0x17, 0x68, 0x85, 0x74, 0x20, 0x7e, 0x20, 0xa4, 0x74, 0x20, 0xef,
-0x1c, 0x20, 0xd5, 0x16, 0xa9, 0x0, 0x85, 0xc, 0xa9, 0xb, 0x20, 0x7d, 0x13, 0xa5, 0x74, 0x48,
-0xe6, 0xc, 0xa5, 0xc, 0x85, 0x74, 0x20, 0xe7, 0x17, 0x68, 0x85, 0x74, 0x20, 0x7e, 0x20, 0x8e,
-0x55, 0x74, 0x20, 0x2c, 0x1d, 0x20, 0xc5, 0x1c, 0x20, 0x4b, 0x19, 0xa5, 0xc, 0x85, 0x8a, 0xee,
-0x34, 0x7e, 0x4c, 0xcf, 0x1f, 0xa5, 0x30, 0x85, 0x49, 0x20, 0xd5, 0x16, 0xa0, 0x0, 0x84, 0xc,
-0x8c, 0x33, 0x7e, 0xa9, 0x8, 0x8d, 0x85, 0x7f, 0x20, 0x7d, 0x13, 0x20, 0x86, 0x30, 0xf0, 0x16,
-0xa5, 0x30, 0x85, 0x49, 0x20, 0xd5, 0x16, 0xa5, 0x8a, 0x85, 0xc, 0x20, 0x74, 0x30, 0xa9, 0x0,
-0x8d, 0x85, 0x7f, 0x4c, 0x38, 0x1d, 0x20, 0xd5, 0x16, 0xa9, 0x9, 0x20, 0x7d, 0x13, 0x20, 0x86,
-0x30, 0x20, 0x74, 0x30, 0xd0, 0xd, 0x20, 0xd5, 0x27, 0x20, 0x8c, 0x21, 0xa5, 0x8a, 0x85, 0xc,
-0x20, 0x66, 0x21, 0xa5, 0x8b, 0x8d, 0xe, 0x7d, 0xad, 0x54, 0x7e, 0x85, 0x81, 0xa5, 0x8a, 0x85,
-0xc, 0x4c, 0xdb, 0x1f, 0x20, 0x16, 0x26, 0xad, 0x12, 0x7d, 0x38, 0xe5, 0x58, 0x8d, 0x4c, 0x75,
-0xee, 0x4c, 0x75, 0xa9, 0x0, 0x8d, 0x66, 0x7f, 0xee, 0x66, 0x7f, 0x20, 0x8d, 0x29, 0xad, 0x66,
-0x7f, 0xcd, 0x4c, 0x75, 0x90, 0xf2, 0x60, 0x20, 0x4b, 0x19, 0x20, 0x42, 0x17, 0x20, 0xd5, 0x27,
-0x20, 0x8b, 0x1e, 0x20, 0xda, 0x22, 0x20, 0xc5, 0x1c, 0x4c, 0x38, 0x1d, 0x20, 0x11, 0x2d, 0x20,
-0x97, 0x25, 0xa0, 0x0, 0x84, 0xc, 0xa9, 0x6, 0x20, 0x7d, 0x13, 0x20, 0x86, 0x30, 0xd0, 0x3,
-0x4c, 0x6c, 0x16, 0x20, 0x1c, 0x2d, 0x4c, 0x38, 0x1d, 0x20, 0x4d, 0x1d, 0xad, 0x87, 0x7e, 0x85,
-0x5c, 0x20, 0x56, 0x18, 0xa2, 0x0, 0xac, 0x85, 0x7e, 0xbd, 0x56, 0x74, 0x91, 0xd8, 0xe8, 0xc8,
-0xec, 0x55, 0x74, 0x90, 0xf4, 0xad, 0x8e, 0x7e, 0xd0, 0x1, 0x60, 0x20, 0x21, 0x2f, 0x20, 0xc5,
-0x1c, 0xa9, 0x0, 0x85, 0x81, 0xac, 0x85, 0x7e, 0x84, 0x82, 0xc4, 0x54, 0x90, 0x6, 0xe6, 0x81,
-0xa0, 0x0, 0x84, 0x82, 0xad, 0x87, 0x7e, 0x18, 0x65, 0x81, 0x85, 0x5c, 0xcd, 0x40, 0x7e, 0x90,
-0x5, 0x38, 0xe9, 0x2, 0x85, 0x5c, 0xa5, 0x82, 0x85, 0xc, 0x20, 0x11, 0x2d, 0xe6, 0x5c, 0x20,
-0xcf, 0x20, 0x20, 0xba, 0x1c, 0x20, 0x4b, 0x19, 0x20, 0x1c, 0x2d, 0x4c, 0x66, 0x21, 0x20, 0xa0,
-0x23, 0x4c, 0x4b, 0x19, 0x20, 0xa0, 0x23, 0x4c, 0xab, 0x28, 0x20, 0x21, 0x2f, 0x4c, 0x1c, 0x2d,
-0xad, 0x73, 0x7d, 0xd0, 0x1, 0x60, 0xa9, 0x20, 0x9d, 0x56, 0x74, 0xe8, 0xe4, 0x5b, 0x90, 0xf8,
-0xa2, 0x0, 0xbd, 0x3, 0x74, 0xc9, 0x20, 0xd0, 0x7, 0xe8, 0xe4, 0x5b, 0x90, 0xf4, 0xa2, 0x0,
-0xa0, 0x0, 0xbd, 0x3, 0x74, 0x99, 0x56, 0x74, 0xe8, 0xc8, 0xe4, 0x5b, 0x90, 0xf4, 0xa4, 0x5b,
-0x88, 0xb9, 0x56, 0x74, 0xc9, 0x20, 0xd0, 0x4, 0xc0, 0x0, 0xd0, 0xf4, 0x8c, 0xa5, 0x7d, 0x20,
-0xe7, 0x16, 0xa0, 0x0, 0xa5, 0x5b, 0x38, 0xed, 0xa5, 0x7d, 0x4a, 0xae, 0x77, 0x7f, 0xe0, 0xe,
-0xd0, 0x11, 0xa2, 0x1, 0x8e, 0x7e, 0x7f, 0xa6, 0x5b, 0xca, 0x8e, 0x7f, 0x7f, 0x4a, 0xf0, 0x3,
-0x38, 0xe9, 0x1, 0xaa, 0xb9, 0x56, 0x74, 0x9d, 0x3, 0x74, 0xe8, 0xc8, 0xe4, 0x5b, 0x90, 0xf4,
-0xa9, 0x0, 0x8d, 0x73, 0x7d, 0x60, 0xa9, 0x2, 0x8d, 0x4e, 0x75, 0xa9, 0x20, 0x8d, 0x4f, 0x75,
-0x8d, 0x50, 0x75, 0xad, 0xf1, 0x7d, 0x85, 0x81, 0xa5, 0xc, 0x8d, 0xe, 0x7d, 0xad, 0xf3, 0x7d,
-0x20, 0xf7, 0x20, 0xa5, 0xd8, 0x85, 0xda, 0xa5, 0xd9, 0x85, 0xdb, 0xa5, 0x54, 0x38, 0xed, 0xe,
-0x7d, 0xd0, 0x2, 0xa5, 0x54, 0x8d, 0x55, 0x7e, 0x8d, 0x56, 0x7e, 0x20, 0x74, 0x24, 0xa5, 0xda,
-0x85, 0xd8, 0xa5, 0xdb, 0x85, 0xd9, 0xad, 0x56, 0x7e, 0x8d, 0x55, 0x7e, 0x20, 0x9c, 0x1f, 0x90,
-0xc, 0x20, 0xc2, 0x24, 0xa9, 0x20, 0xa0, 0x0, 0x91, 0xd8, 0x4c, 0x62, 0x24, 0x60, 0x20, 0xc2,
-0x24, 0xa0, 0x0, 0x20, 0x83, 0x12, 0xc9, 0x20, 0xf0, 0x10, 0x20, 0xbb, 0x24, 0xa0, 0x0, 0x20,
-0x83, 0x12, 0x91, 0xda, 0x20, 0x9c, 0x1f, 0xb0, 0xe5, 0x60, 0xc8, 0x20, 0x83, 0x12, 0xc9, 0x20,
-0xd0, 0xe8, 0xa0, 0x0, 0x20, 0xc2, 0x24, 0x20, 0x9c, 0x1f, 0x90, 0xed, 0x20, 0x83, 0x12, 0xc9,
-0x20, 0xf0, 0xf1, 0x20, 0xbb, 0x24, 0xa9, 0x20, 0x91, 0xda, 0x20, 0xbb, 0x24, 0x20, 0x83, 0x12,
-0x91, 0xda, 0x4c, 0x8a, 0x24, 0xe6, 0xda, 0xd0, 0x2, 0xe6, 0xdb, 0x60, 0xe6, 0xd8, 0xd0, 0x2,
-0xe6, 0xd9, 0x60, 0xa0, 0x27, 0xa9, 0x20, 0x99, 0x56, 0x74, 0x88, 0x10, 0xfa, 0x60, 0xa5, 0x30,
-0x85, 0x49, 0x20, 0xc9, 0x24, 0xac, 0x23, 0x7e, 0x78, 0x8d, 0x3f, 0xff, 0xb9, 0x64, 0xc0, 0x8d,
-0x3e, 0xff, 0x58, 0xf0, 0x4, 0xa9, 0x2a, 0xd0, 0x2, 0xa9, 0x2e, 0x99, 0x56, 0x74, 0xc8, 0xcc,
-0x24, 0x7e, 0x90, 0xe4, 0x20, 0xa5, 0x16, 0x20, 0x5b, 0x30, 0x20, 0xa5, 0x16, 0xa4, 0x74, 0xad,
-0x5d, 0x7e, 0x18, 0x65, 0x74, 0xaa, 0xbd, 0x56, 0x74, 0x91, 0xc8, 0xc8, 0xe8, 0xc4, 0x73, 0x90,
-0xf5, 0x60, 0x20, 0x4c, 0x25, 0xa0, 0x0, 0xa9, 0x20, 0x91, 0xda, 0xc8, 0xcc, 0x40, 0x7e, 0x90,
-0xf6, 0xf0, 0xf4, 0xa0, 0x32, 0xa9, 0x3c, 0x91, 0xda, 0x60, 0x20, 0x4c, 0x25, 0xa4, 0x5c, 0x20,
-0x86, 0x12, 0x85, 0x88, 0x48, 0x20, 0x56, 0x18, 0x68, 0x60, 0x20, 0x4c, 0x25, 0xa4, 0x5c, 0xa5,
-0x88, 0x91, 0xda, 0x4c, 0x56, 0x18, 0xad, 0x59, 0x7e, 0x85, 0xd8, 0xad, 0x5a, 0x7e, 0x85, 0xd9,
-0xad, 0x5b, 0x7e, 0x85, 0xda, 0xad, 0x5c, 0x7e, 0x85, 0xdb, 0x60, 0xac, 0x57, 0x7e, 0xa5, 0x88,
-0x91, 0xc8, 0x60, 0xac, 0x57, 0x7e, 0xb1, 0xc8, 0x85, 0x88, 0x60, 0x20, 0x30, 0x25, 0x4c, 0x61,
-0x25, 0x20, 0x69, 0x25, 0x4c, 0x40, 0x25, 0x20, 0x4c, 0x25, 0xa4, 0x5c, 0x20, 0x86, 0x12, 0x85,
-0x88, 0x48, 0xad, 0x7e, 0x7e, 0x85, 0xd8, 0xad, 0x7f, 0x7e, 0x85, 0xd9, 0x68, 0x20, 0x61, 0x25,
-0x60, 0xad, 0x9, 0x7f, 0xf0, 0x5, 0xad, 0x35, 0x7d, 0xd0, 0x2, 0xa5, 0x30, 0x85, 0x49, 0x4c,
-0xd5, 0x16, 0x20, 0x11, 0x2d, 0xa9, 0x1, 0x85, 0x5c, 0x20, 0x18, 0x25, 0x20, 0x1c, 0x2d, 0x4c,
-0x38, 0x1d, 0xa5, 0x42, 0xf0, 0x1, 0x60, 0xa9, 0x0, 0x8d, 0x51, 0x7e, 0x20, 0x16, 0x26, 0xa5,
-0x58, 0x85, 0x5c, 0x20, 0x94, 0x18, 0xe6, 0x5c, 0xa5, 0x5c, 0xcd, 0x48, 0x7e, 0xb0, 0xa, 0xa9,
-0x0, 0x85, 0x75, 0x20, 0xac, 0x26, 0x4c, 0xcc, 0x25, 0xa5, 0x87, 0xc9, 0x20, 0xd0, 0x6, 0x20,
-0x4b, 0x19, 0x4c, 0xb5, 0x18, 0x20, 0x38, 0x27, 0x20, 0x4b, 0x19, 0x4c, 0xb5, 0x18, 0xa5, 0x42,
-0xf0, 0x1, 0x60, 0xa9, 0x20, 0x85, 0x87, 0x85, 0x8f, 0x20, 0x5a, 0x27, 0x20, 0x4b, 0x19, 0xa5,
-0x58, 0x85, 0x5c, 0x20, 0x56, 0x18, 0xa5, 0x8f, 0xa4, 0x54, 0x88, 0x91, 0xd8, 0x4c, 0xb5, 0x18,
-0x20, 0x4b, 0x19, 0xa5, 0x58, 0x85, 0x5c, 0xc6, 0x5c, 0xe6, 0x5c, 0xa5, 0x5c, 0xc5, 0x5a, 0xb0,
-0x1f, 0x20, 0x30, 0x25, 0xa5, 0x88, 0xc9, 0x3c, 0xf0, 0xd, 0xad, 0x85, 0x7f, 0xf0, 0xea, 0x20,
-0xe1, 0x29, 0xad, 0x86, 0x7f, 0xf0, 0xe2, 0xa5, 0x5c, 0x8d, 0x48, 0x7e, 0xee, 0x48, 0x7e, 0x60,
-0xa5, 0x5c, 0x8d, 0x48, 0x7e, 0xcd, 0x40, 0x7e, 0xb0, 0x3, 0xee, 0x48, 0x7e, 0x60, 0x20, 0x4b,
-0x19, 0x20, 0xfb, 0x29, 0xa5, 0x5a, 0xcd, 0x40, 0x7e, 0x90, 0x1, 0x60, 0xa5, 0x5a, 0xc5, 0x58,
-0xf0, 0x2, 0xb0, 0x7, 0x20, 0x4d, 0x1d, 0x90, 0xf2, 0xb0, 0xe9, 0x20, 0x4d, 0x1d, 0x90, 0xeb,
-0xa5, 0x5a, 0x85, 0x5c, 0x20, 0xda, 0x29, 0x20, 0xa0, 0x26, 0xe6, 0x5c, 0x20, 0xa6, 0x26, 0xc6,
-0x5c, 0xa5, 0x5c, 0xc5, 0x58, 0xf0, 0x5, 0xc6, 0x5c, 0x4c, 0x7d, 0x26, 0x20, 0x98, 0x26, 0x4c,
-0xa6, 0x26, 0x20, 0xe7, 0x16, 0xa9, 0x20, 0x85, 0x88, 0x60, 0x20, 0x94, 0x18, 0x4c, 0x30, 0x25,
-0x20, 0xa5, 0x18, 0x4c, 0x40, 0x25, 0x20, 0xda, 0x26, 0xa4, 0x75, 0xc8, 0xc4, 0x54, 0x90, 0x9,
-0x88, 0x20, 0x83, 0x12, 0x85, 0x8f, 0x4c, 0xd1, 0x26, 0xa4, 0x54, 0x88, 0x20, 0x83, 0x12, 0x85,
-0x8f, 0x88, 0x20, 0x83, 0x12, 0x91, 0xda, 0xc4, 0x75, 0xd0, 0xf6, 0xa5, 0x87, 0x91, 0xd8, 0xa5,
-0x8f, 0x85, 0x87, 0x60, 0x20, 0x56, 0x18, 0xa5, 0xd8, 0x85, 0xda, 0xa5, 0xd9, 0x85, 0xdb, 0xe6,
-0xda, 0xd0, 0x2, 0xe6, 0xdb, 0x60, 0x20, 0xda, 0x26, 0xa9, 0x20, 0x85, 0x8f, 0xa4, 0x75, 0xa5,
-0x75, 0xc9, 0x0, 0xd0, 0x6, 0x20, 0x83, 0x12, 0x85, 0x8f, 0xc8, 0x88, 0x20, 0x86, 0x12, 0x91,
-0xd8, 0xc8, 0xc8, 0xc4, 0x54, 0x90, 0xf4, 0x88, 0xa5, 0x87, 0x91, 0xd8, 0xa5, 0x8f, 0x85, 0x87,
-0x60, 0x20, 0x19, 0x26, 0xa5, 0x58, 0x85, 0x5c, 0xe6, 0x5c, 0xa5, 0x5c, 0xcd, 0x48, 0x7e, 0xb0,
-0xa, 0xa9, 0x0, 0x85, 0x75, 0x20, 0xac, 0x26, 0x4c, 0x1e, 0x27, 0xa5, 0x87, 0xc9, 0x20, 0xd0,
-0x1, 0x60, 0xc6, 0x5c, 0x20, 0xda, 0x26, 0x20, 0xd6, 0x29, 0xe6, 0x5c, 0xa5, 0x5c, 0x85, 0x58,
-0x20, 0x5a, 0x26, 0xa5, 0x58, 0x85, 0x5c, 0x20, 0xda, 0x26, 0x20, 0xda, 0x29, 0xa5, 0x87, 0xa0,
-0x0, 0x91, 0xd8, 0x60, 0x20, 0x19, 0x26, 0xad, 0x48, 0x7e, 0x85, 0x5c, 0xa9, 0x20, 0x85, 0x8f,
-0xc6, 0x5c, 0xa5, 0x5c, 0xc5, 0x58, 0xf0, 0xc, 0x90, 0xa, 0xa0, 0x0, 0x84, 0x75, 0x20, 0xec,
-0x26, 0x4c, 0x66, 0x27, 0x20, 0xda, 0x26, 0xa4, 0x54, 0x88, 0xa5, 0x8f, 0x91, 0xd8, 0x60, 0xa9,
-0x0, 0x8d, 0x66, 0x7f, 0xee, 0x66, 0x7f, 0xad, 0x54, 0x7e, 0x85, 0x58, 0x85, 0x5c, 0xa5, 0x8b,
-0x85, 0x75, 0xa9, 0x20, 0x85, 0x8f, 0x85, 0x87, 0x20, 0xac, 0x26, 0x20, 0x17, 0x27, 0xad, 0x66,
-0x7f, 0xcd, 0x9b, 0x7d, 0x90, 0xde, 0x60, 0xa5, 0x58, 0x48, 0xa9, 0x0, 0x8d, 0x66, 0x7f, 0xee,
-0x66, 0x7f, 0xad, 0x54, 0x7e, 0x85, 0x5c, 0x85, 0x58, 0xa5, 0x8b, 0x85, 0x75, 0x20, 0xec, 0x26,
-0x20, 0x5a, 0x27, 0xad, 0x66, 0x7f, 0xcd, 0x9b, 0x7d, 0x90, 0xe4, 0x68, 0x85, 0x58, 0x60, 0xa5,
-0x30, 0x85, 0x49, 0x20, 0xd5, 0x16, 0xa9, 0x0, 0x85, 0xc, 0xa9, 0xe, 0x4c, 0x7d, 0x13, 0xa5,
-0x42, 0xf0, 0x3, 0x4c, 0xfe, 0x28, 0x20, 0x42, 0x17, 0xa5, 0xc, 0x8d, 0x22, 0x7e, 0x20, 0x69,
-0x25, 0xa4, 0x54, 0x88, 0x20, 0x83, 0x12, 0x85, 0x87, 0x20, 0xab, 0x28, 0xac, 0x23, 0x7e, 0xa2,
-0x0, 0xcc, 0x70, 0x7e, 0xf0, 0xf, 0x20, 0x83, 0x12, 0x9d, 0x3, 0x74, 0xc8, 0xe8, 0xc4, 0x54,
-0x90, 0xef, 0x4c, 0x2d, 0x28, 0xa9, 0x20, 0x9d, 0x3, 0x74, 0xe8, 0x20, 0x83, 0x12, 0x9d, 0x3,
-0x74, 0xc8, 0xcc, 0x24, 0x7e, 0x90, 0xf3, 0x20, 0xa5, 0x18, 0x20, 0xb8, 0x25, 0xad, 0x22, 0x7e,
-0x85, 0xc, 0x20, 0x4b, 0x19, 0x20, 0xb5, 0x18, 0x4c, 0x1d, 0x18, 0xa5, 0x42, 0xf0, 0x3, 0x4c,
-0xb8, 0x28, 0x20, 0x42, 0x17, 0xa5, 0xc, 0xd0, 0x3, 0x4c, 0x1d, 0x18, 0xa9, 0x20, 0x85, 0x8f,
-0xc6, 0xc, 0xa5, 0xc, 0x8d, 0x22, 0x7e, 0x20, 0xab, 0x28, 0xa0, 0x0, 0xa2, 0x0, 0xcc, 0x70,
-0x7e, 0xf0, 0x12, 0x20, 0x83, 0x12, 0x9d, 0x3, 0x74, 0xc8, 0xe8, 0xcc, 0x24, 0x7e, 0xd0, 0xee,
-0xe6, 0xc, 0x4c, 0x1d, 0x18, 0xc8, 0x20, 0x83, 0x12, 0x9d, 0x3, 0x74, 0xe8, 0xc8, 0xcc, 0x24,
-0x7e, 0x90, 0xf3, 0x20, 0xa5, 0x18, 0x20, 0xf4, 0x25, 0xad, 0x22, 0x7e, 0x85, 0xc, 0x20, 0x4b,
-0x19, 0xa5, 0x58, 0x85, 0x5c, 0x20, 0x56, 0x18, 0xa5, 0x8f, 0xa4, 0x54, 0x88, 0x91, 0xd8, 0x20,
-0xb5, 0x18, 0x4c, 0x1d, 0x18, 0xa5, 0xc, 0x38, 0xe5, 0x74, 0x18, 0x6d, 0x5d, 0x7e, 0x8d, 0x70,
-0x7e, 0x60, 0xa5, 0xc, 0xc5, 0x74, 0xd0, 0x3, 0x4c, 0x1d, 0x18, 0xa9, 0x20, 0x85, 0x8f, 0x20,
-0xad, 0x16, 0xc6, 0xc, 0xa5, 0xc, 0x8d, 0x22, 0x7e, 0xa4, 0x74, 0xa2, 0x0, 0xc4, 0xc, 0xf0,
-0x10, 0xb1, 0xc8, 0x9d, 0x3, 0x74, 0xc8, 0xe8, 0xc4, 0x73, 0xd0, 0xf1, 0xe6, 0xc, 0x4c, 0x1d,
-0x18, 0xc8, 0xb1, 0xc8, 0x9d, 0x3, 0x74, 0xe8, 0xc8, 0xc4, 0x73, 0x90, 0xf5, 0xad, 0x22, 0x7e,
-0x85, 0xc, 0x20, 0xc1, 0x16, 0x4c, 0x1d, 0x18, 0x20, 0xad, 0x16, 0xa5, 0xc, 0x8d, 0x22, 0x7e,
-0x20, 0x69, 0x25, 0xa4, 0x73, 0x88, 0xb1, 0xc8, 0x85, 0x87, 0xa4, 0x74, 0xa2, 0x0, 0xc4, 0xc,
-0xf0, 0xe, 0xb1, 0xc8, 0x9d, 0x3, 0x74, 0xc8, 0xe8, 0xc4, 0x73, 0x90, 0xf1, 0x4c, 0x1d, 0x18,
-0xa9, 0x20, 0x9d, 0x3, 0x74, 0xe8, 0xb1, 0xc8, 0x9d, 0x3, 0x74, 0xc8, 0xc4, 0x73, 0x90, 0xf5,
-0xad, 0x22, 0x7e, 0x85, 0xc, 0x20, 0xc1, 0x16, 0x4c, 0x1d, 0x18, 0x20, 0x54, 0x26, 0x20, 0xc5,
-0x1c, 0x4c, 0x38, 0x1d, 0x20, 0x8d, 0x29, 0x20, 0xc5, 0x1c, 0x4c, 0x38, 0x1d, 0xad, 0x2c, 0x7e,
-0xf0, 0x1, 0x60, 0x20, 0xa5, 0x16, 0xee, 0x2c, 0x7e, 0xa4, 0xc, 0xb1, 0xc8, 0x8d, 0x29, 0x7e,
-0x9, 0x80, 0x91, 0xc8, 0x4c, 0x82, 0x29, 0x20, 0xa5, 0x16, 0xa9, 0x0, 0x8d, 0x2c, 0x7e, 0xad,
-0x29, 0x7e, 0xa4, 0xc, 0x91, 0xc8, 0xad, 0xc4, 0x7d, 0x4c, 0x85, 0x29, 0xad, 0xc5, 0x7d, 0x48,
-0x20, 0xb4, 0xd8, 0x68, 0x91, 0xea, 0x60, 0x20, 0x4b, 0x19, 0xa5, 0x5a, 0xc9, 0x2, 0xb0, 0xf,
-0xa9, 0x1, 0x85, 0x5c, 0x85, 0x58, 0x20, 0x98, 0x26, 0x20, 0xa6, 0x26, 0x4c, 0xd6, 0x29, 0xa5,
-0x58, 0x85, 0x5c, 0xc5, 0x5a, 0x90, 0x6, 0x20, 0x4d, 0x1d, 0xb0, 0x1, 0x60, 0xe6, 0x5c, 0x20,
-0xa0, 0x26, 0xc6, 0x5c, 0x20, 0xa6, 0x26, 0xe6, 0x5c, 0xa5, 0x5c, 0xc5, 0x5a, 0xb0, 0x5, 0xe6,
-0x5c, 0x4c, 0xb5, 0x29, 0x20, 0x98, 0x26, 0x20, 0xd6, 0x29, 0x20, 0xa6, 0x26, 0xc6, 0x5a, 0x60,
-0xa9, 0x20, 0xd0, 0x2, 0xa9, 0x3c, 0x85, 0x88, 0x4c, 0x40, 0x25, 0x20, 0x56, 0x18, 0xa0, 0x0,
-0x8c, 0x86, 0x7f, 0x20, 0x83, 0x12, 0xc9, 0x9f, 0xf0, 0x6, 0xc8, 0xc4, 0x54, 0x90, 0xf4, 0x60,
-0xee, 0x86, 0x7f, 0xd0, 0xdf, 0xa5, 0x5c, 0x48, 0x20, 0x4d, 0x1d, 0xa5, 0x5a, 0xf0, 0x21, 0xc5,
-0x58, 0x90, 0x1d, 0xf0, 0x1b, 0xc9, 0x17, 0x90, 0x17, 0x85, 0x5c, 0x20, 0x56, 0x18, 0xa0, 0x0,
-0x20, 0x83, 0x12, 0xc9, 0x20, 0xd0, 0x9, 0xc8, 0xc4, 0x54, 0x90, 0xf4, 0xc6, 0x5a, 0xd0, 0xdb,
-0x68, 0x85, 0x5c, 0x20, 0x56, 0x18, 0x4c, 0x4d, 0x1d, 0xa5, 0xac, 0xa6, 0xae, 0xa4, 0xad, 0x20,
-0xba, 0xff, 0xa5, 0xab, 0xae, 0x77, 0x13, 0xac, 0x78, 0x13, 0x20, 0xbd, 0xff, 0xa5, 0xae, 0x4c,
-0xc0, 0xff, 0x20, 0xed, 0x11, 0x86, 0x53, 0x60, 0xa0, 0x0, 0xb9, 0x3, 0x74, 0x20, 0xb6, 0x2a,
-0x99, 0xa3, 0x75, 0xc8, 0xc4, 0x7c, 0x90, 0xf2, 0x84, 0xab, 0x8c, 0xa2, 0x75, 0x60, 0xa4, 0x7c,
-0xa9, 0x0, 0x99, 0xa3, 0x75, 0xa5, 0xaf, 0x85, 0xde, 0xa5, 0xb0, 0x85, 0xdf, 0x4c, 0xe1, 0x11,
-0x20, 0x3d, 0x2d, 0xa9, 0x1, 0x85, 0x81, 0xa0, 0x0, 0x8c, 0xe, 0x7d, 0xa5, 0x5a, 0x4c, 0xf7,
-0x20, 0xa0, 0x0, 0x20, 0x83, 0x12, 0x85, 0x52, 0x20, 0xfc, 0x11, 0xe0, 0x0, 0xd0, 0x9, 0x20,
-0x95, 0x1f, 0x20, 0x9c, 0x1f, 0xb0, 0xea, 0x60, 0x60, 0x20, 0x76, 0x2a, 0x20, 0xd5, 0x2a, 0x20,
-0xf6, 0x11, 0x20, 0x87, 0x2a, 0x20, 0xb9, 0x2b, 0x20, 0xae, 0xff, 0xa5, 0xac, 0x4c, 0xed, 0x11,
-0x85, 0x52, 0x29, 0x40, 0xa, 0x8d, 0x6f, 0x7e, 0xa5, 0x52, 0x29, 0x80, 0x8d, 0x68, 0x7f, 0xa5,
-0x52, 0x29, 0x3f, 0x85, 0x52, 0xc9, 0x20, 0xb0, 0x3, 0x18, 0x69, 0x40, 0x85, 0x52, 0x60, 0x20,
-0x6f, 0x2b, 0xad, 0x5b, 0x7f, 0x85, 0x52, 0x20, 0xf0, 0x11, 0xad, 0x5c, 0x7f, 0x85, 0x52, 0x20,
-0xf0, 0x11, 0xa5, 0x5a, 0x85, 0x52, 0x4c, 0xf0, 0x11, 0xad, 0x82, 0x7e, 0xf0, 0xe, 0x20, 0x76,
-0x2a, 0xad, 0x5b, 0x7f, 0x48, 0xad, 0x5c, 0x7f, 0x48, 0xa5, 0x5a, 0x48, 0x20, 0x6f, 0x2b, 0x20,
-0xf3, 0x11, 0x86, 0x53, 0xe0, 0x0, 0xd0, 0x14, 0xa5, 0x52, 0x8d, 0x5b, 0x7f, 0x20, 0xf3, 0x11,
-0xa5, 0x52, 0x8d, 0x5c, 0x7f, 0x20, 0xf3, 0x11, 0xa5, 0x52, 0x85, 0x5a, 0xad, 0x82, 0x7e, 0xd0,
-0x1, 0x60, 0x68, 0x18, 0x65, 0x5a, 0x85, 0x5a, 0x68, 0x8d, 0x11, 0x7d, 0x68, 0x8d, 0x10, 0x7d,
-0xa5, 0x5a, 0xcd, 0x40, 0x7e, 0x90, 0x7, 0xad, 0x40, 0x7e, 0x85, 0x5a, 0xc6, 0x5a, 0x20, 0x79,
-0x2a, 0xad, 0x71, 0x13, 0x38, 0xed, 0x73, 0x13, 0x8d, 0xe, 0x7d, 0xad, 0x72, 0x13, 0xed, 0x74,
-0x13, 0x8d, 0xf, 0x7d, 0xad, 0x11, 0x7d, 0x85, 0xd9, 0xad, 0x10, 0x7d, 0x85, 0xd8, 0xc6, 0xd8,
-0xa5, 0xd8, 0xc9, 0xff, 0xd0, 0x2, 0xc6, 0xd9, 0x60, 0xad, 0x73, 0x13, 0x85, 0xd8, 0xad, 0x74,
-0x13, 0x85, 0xd9, 0x60, 0x20, 0x42, 0x17, 0x20, 0x11, 0x2d, 0x20, 0x92, 0x2d, 0xa9, 0x11, 0x20,
-0x6b, 0x2d, 0xa5, 0x7c, 0xc9, 0x2, 0x90, 0x13, 0x20, 0x4e, 0x2a, 0x20, 0x95, 0x12, 0x86, 0x53,
-0x20, 0x9f, 0x2a, 0xad, 0x30, 0x7e, 0xf0, 0x3, 0x4c, 0xd0, 0x2b, 0xad, 0x9, 0x7f, 0xd0, 0xd,
-0x20, 0x1c, 0x2d, 0x4c, 0x38, 0x1d, 0x20, 0xb7, 0xff, 0xaa, 0x86, 0x53, 0x60, 0x20, 0x1c, 0x2d,
-0xa9, 0x0, 0x60, 0xa9, 0x0, 0x8d, 0x30, 0x7e, 0xa5, 0x53, 0xd0, 0x1, 0x60, 0x8d, 0x30, 0x7e,
-0x60, 0x20, 0xed, 0x11, 0x20, 0x4e, 0x2a, 0x4c, 0x53, 0x12, 0x20, 0x8, 0x12, 0x20, 0x97, 0x25,
-0xa9, 0x0, 0x85, 0xc, 0xa9, 0x11, 0x20, 0x7d, 0x13, 0xe6, 0xc, 0xa9, 0x9, 0x20, 0x7d, 0x13,
-0x20, 0x35, 0x1f, 0xc9, 0x59, 0xf0, 0x3, 0x4c, 0xa1, 0x2b, 0x20, 0x44, 0x2c, 0xa5, 0x59, 0x85,
-0x7c, 0x8d, 0xa2, 0x75, 0x20, 0xc7, 0x2b, 0x20, 0x44, 0x2c, 0xa5, 0x59, 0x85, 0x7c, 0x8d, 0xa2,
-0x75, 0xa9, 0x0, 0x85, 0x78, 0xad, 0x9, 0x7f, 0xd0, 0x1d, 0x4c, 0x8e, 0x2b, 0xa5, 0xac, 0x20,
-0xed, 0x11, 0x20, 0x8, 0x12, 0x20, 0x97, 0x25, 0xa9, 0x0, 0x85, 0xc, 0xa9, 0xf, 0x20, 0x7d,
-0x13, 0x20, 0x35, 0x1f, 0x4c, 0x1c, 0x2d, 0x20, 0x4e, 0x2a, 0x20, 0x1c, 0x2d, 0xa9, 0x1, 0x60,
-0xa0, 0x0, 0xb9, 0x3, 0x74, 0x99, 0x8b, 0x78, 0xc8, 0xc4, 0x59, 0x90, 0xf5, 0x60, 0x20, 0xe7,
-0x16, 0xa0, 0x0, 0xb9, 0x8b, 0x78, 0x99, 0x3, 0x74, 0xc8, 0xc4, 0x59, 0x90, 0xf5, 0x60, 0xa9,
-0x0, 0x85, 0x81, 0x85, 0x82, 0x20, 0xb9, 0x2b, 0xad, 0x30, 0x7e, 0xd0, 0x28, 0x20, 0xef, 0x2a,
-0x20, 0xb9, 0x2b, 0xad, 0x30, 0x7e, 0xd0, 0x1d, 0x20, 0xf9, 0x11, 0x20, 0x8e, 0x2c, 0x20, 0xb9,
-0x2b, 0x20, 0xab, 0xff, 0xa5, 0xac, 0x20, 0xed, 0x11, 0xad, 0x30, 0x7e, 0xc9, 0x40, 0xf0, 0x4,
-0xc9, 0x0, 0xd0, 0x1, 0x60, 0x4c, 0x13, 0x2c, 0x20, 0xff, 0x11, 0xa5, 0x53, 0xd0, 0x13, 0xad,
-0x82, 0x7e, 0xd0, 0xf, 0xa0, 0x0, 0xa5, 0x52, 0x91, 0xd8, 0x20, 0x95, 0x1f, 0x20, 0x9c, 0x1f,
-0xb0, 0xe6, 0x60, 0xe6, 0x81, 0xd0, 0x2, 0xe6, 0x82, 0xa5, 0x82, 0xcd, 0xf, 0x7d, 0x90, 0xd8,
-0xa5, 0x81, 0xcd, 0xe, 0x7d, 0x90, 0xd1, 0xa9, 0x0, 0x8d, 0x82, 0x7e, 0xf0, 0xca, 0xa9, 0x1,
-0x8d, 0x82, 0x7e, 0x20, 0x11, 0x2d, 0x20, 0x92, 0x2d, 0xa9, 0x10, 0x20, 0x6b, 0x2d, 0xa5, 0x7c,
-0xc9, 0x2, 0x90, 0x17, 0x20, 0x4e, 0x2a, 0x20, 0xd8, 0x11, 0x86, 0x53, 0xe0, 0x0, 0xd0, 0xb,
-0xad, 0x82, 0x7e, 0xd0, 0x3, 0x20, 0x15, 0x19, 0x20, 0x55, 0x2c, 0x20, 0x1c, 0x2d, 0x4c, 0x38,
-0x1d, 0x20, 0x11, 0x2d, 0x20, 0x92, 0x2d, 0xa9, 0x12, 0x20, 0x6b, 0x2d, 0xa5, 0x7c, 0xc9, 0x2,
-0x90, 0x3, 0x20, 0xc7, 0x2b, 0x20, 0x1c, 0x2d, 0x4c, 0x38, 0x1d, 0xa5, 0xc, 0x8d, 0x42, 0x7e,
-0xa5, 0x74, 0x8d, 0x41, 0x7e, 0x60, 0xad, 0x42, 0x7e, 0x85, 0xc, 0xad, 0x41, 0x7e, 0x85, 0x74,
-0x60, 0xa9, 0x4, 0x8d, 0xb0, 0x7d, 0xa9, 0x8, 0x8d, 0xb1, 0x7d, 0xa9, 0x4, 0x8d, 0xb2, 0x7d,
-0x60, 0x20, 0x8, 0x12, 0x4c, 0x38, 0x1d, 0xa5, 0x5a, 0x85, 0x5c, 0xa5, 0x5c, 0xc9, 0x1, 0x90,
-0x15, 0x20, 0x94, 0x18, 0xa0, 0x0, 0xb9, 0x3, 0x74, 0xc9, 0x20, 0xd0, 0xb, 0xc8, 0xc4, 0x54,
-0x90, 0xf4, 0xc6, 0x5c, 0xd0, 0xe5, 0xe6, 0x5c, 0xa5, 0x5c, 0x85, 0x5a, 0xa9, 0x1, 0x85, 0xe0,
-0x85, 0x2f, 0xc6, 0x2f, 0x60, 0x48, 0x20, 0x97, 0x25, 0x20, 0x15, 0x1c, 0xa9, 0x0, 0x85, 0xc,
-0x68, 0xf0, 0x3, 0x20, 0x7d, 0x13, 0xe6, 0xc, 0xa5, 0xc, 0x85, 0x74, 0x20, 0xe7, 0x17, 0x20,
-0x7e, 0x20, 0x86, 0x7c, 0x86, 0x59, 0x20, 0x36, 0x2c, 0x4c, 0xf, 0x1c, 0xa9, 0x0, 0x8d, 0x9,
-0x7f, 0x60, 0x48, 0x20, 0x11, 0x2d, 0x68, 0x8d, 0x9, 0x7f, 0xc9, 0x1, 0xd0, 0x8, 0xa9, 0x10,
-0x20, 0x6b, 0x2d, 0x4c, 0xd7, 0x2d, 0xc9, 0x2, 0xd0, 0x8, 0xa9, 0x11, 0x20, 0x6b, 0x2d, 0x4c,
-0xd7, 0x2d, 0xc9, 0x3, 0xd0, 0x8, 0xa9, 0x12, 0x20, 0x6b, 0x2d, 0x4c, 0xd7, 0x2d, 0xc9, 0x4,
-0xd0, 0x3, 0x4c, 0xd0, 0x2b, 0xc9, 0x6, 0xf0, 0x3, 0x4c, 0x13, 0x2c, 0xa9, 0x2c, 0x20, 0x6b,
-0x2d, 0x20, 0x4e, 0x2a, 0x20, 0x1c, 0x2d, 0xac, 0xa2, 0x75, 0x88, 0x98, 0x60, 0x20, 0x21, 0x30,
-0x20, 0x41, 0x12, 0x20, 0xa1, 0x2f, 0xee, 0x98, 0x7d, 0x20, 0x11, 0x2d, 0xa9, 0x1, 0x8d, 0x31,
-0x7e, 0xa9, 0x3, 0x8d, 0xa7, 0x7d, 0x20, 0x40, 0x2e, 0xa9, 0xd, 0x20, 0xd2, 0xff, 0xa9, 0x14,
-0x20, 0x7d, 0x13, 0x20, 0x35, 0x1f, 0xc9, 0xd, 0xd0, 0xf9, 0x20, 0xa1, 0x2f, 0xa9, 0x0, 0x8d,
-0x98, 0x7d, 0x8d, 0x31, 0x7e, 0x20, 0x1c, 0x2d, 0xad, 0xed, 0x7d, 0xd0, 0x3, 0x4c, 0x38, 0x1d,
-0xa9, 0x0, 0x8d, 0xed, 0x7d, 0x60, 0xa9, 0x1, 0x8d, 0xed, 0x7d, 0xad, 0xc4, 0x7d, 0x8d, 0x3b,
-0x5, 0x20, 0xe3, 0x2d, 0xa9, 0x0, 0x8d, 0xed, 0x7d, 0x60, 0xa9, 0x2, 0x85, 0xab, 0xa9, 0x24,
-0x8d, 0xa3, 0x75, 0xa9, 0x30, 0x8d, 0xa4, 0x75, 0x20, 0x27, 0x2d, 0x20, 0xe7, 0x11, 0xa9, 0x60,
-0x85, 0xad, 0x20, 0x2f, 0x2a, 0x20, 0xac, 0x2b, 0xe0, 0x0, 0xd0, 0x3e, 0x20, 0xf9, 0x11, 0x86,
-0x53, 0xe0, 0x0, 0xd0, 0x35, 0x20, 0xff, 0x11, 0x20, 0xff, 0x11, 0x20, 0xff, 0x11, 0x20, 0xff,
-0x11, 0x20, 0xff, 0x11, 0x20, 0xff, 0x11, 0x20, 0xff, 0x11, 0x20, 0xff, 0x11, 0xe0, 0x0, 0xd0,
-0x19, 0xa5, 0x52, 0xd0, 0x3, 0x4c, 0xa9, 0x2e, 0x20, 0xe4, 0xff, 0xc9, 0x20, 0xd0, 0x3, 0x20,
-0x35, 0x1f, 0xa5, 0x52, 0x20, 0xd2, 0xff, 0x4c, 0x80, 0x2e, 0x20, 0xb9, 0x2b, 0x20, 0xed, 0x11,
-0x4c, 0xaa, 0x12, 0xa9, 0xd, 0x20, 0xd2, 0xff, 0x20, 0xff, 0x11, 0xe0, 0x0, 0xd0, 0xeb, 0x20,
-0xff, 0x11, 0xe0, 0x0, 0xd0, 0xe4, 0x20, 0xff, 0x11, 0xe0, 0x0, 0xd0, 0xdd, 0xa5, 0x52, 0x8d,
-0xe0, 0x7d, 0x20, 0xff, 0x11, 0xe0, 0x0, 0xd0, 0xd1, 0xa5, 0x52, 0x8d, 0xe1, 0x7d, 0xa9, 0x0,
-0x8d, 0xe2, 0x7d, 0x8d, 0xe3, 0x7d, 0x8d, 0xdf, 0x7d, 0x20, 0x26, 0x12, 0xa9, 0x0, 0x85, 0x81,
-0x20, 0xff, 0x11, 0xe0, 0x0, 0xd0, 0xb3, 0xe6, 0x81, 0xa5, 0x81, 0xc9, 0x5, 0xb0, 0x8b, 0xa5,
-0x52, 0xc9, 0x22, 0xf0, 0x6, 0xc9, 0x42, 0xf0, 0x2, 0xd0, 0xe5, 0xa9, 0x20, 0x20, 0xd2, 0xff,
-0xa5, 0x52, 0x20, 0xd2, 0xff, 0x4c, 0x80, 0x2e, 0x20, 0x17, 0x2f, 0x20, 0x18, 0x25, 0x4c, 0x15,
-0x19, 0x20, 0x97, 0x2f, 0xa9, 0x1, 0x85, 0xe0, 0x8d, 0x1e, 0x7e, 0xad, 0x6d, 0x13, 0x8d, 0x59,
-0x7e, 0xad, 0x6e, 0x13, 0x8d, 0x5a, 0x7e, 0xad, 0x6f, 0x13, 0x8d, 0x5b, 0x7e, 0xad, 0x70, 0x13,
-0x8d, 0x5c, 0x7e, 0xa9, 0x27, 0x8d, 0x57, 0x7e, 0xa9, 0x25, 0x85, 0x73, 0x8d, 0x1d, 0x7e, 0xa9,
-0x63, 0x8d, 0x40, 0x7e, 0xa9, 0x0, 0x8d, 0x23, 0x7e, 0x8d, 0xf4, 0x7e, 0x8d, 0x83, 0x7c, 0xa9,
-0x4e, 0x8d, 0x24, 0x7e, 0xad, 0x71, 0x13, 0x8d, 0x3b, 0x7e, 0xad, 0x72, 0x13, 0x8d, 0x3c, 0x7e,
-0xa9, 0x0, 0x85, 0x74, 0xad, 0x75, 0x13, 0x8d, 0x3d, 0x7e, 0xad, 0x76, 0x13, 0x8d, 0x3e, 0x7e,
-0x4c, 0x79, 0x2f, 0xad, 0x3b, 0x7e, 0x8d, 0x37, 0x7e, 0xad, 0x3c, 0x7e, 0x8d, 0x38, 0x7e, 0x4c,
-0x78, 0x18, 0xad, 0x3d, 0x7e, 0x8d, 0x37, 0x7e, 0xad, 0x3e, 0x7e, 0x8d, 0x38, 0x7e, 0x4c, 0x78,
-0x18, 0xa9, 0xe, 0x20, 0xd2, 0xff, 0xa9, 0x0, 0x8d, 0x8d, 0x7d, 0xa5, 0x9, 0x85, 0x81, 0xe6,
-0x81, 0xad, 0x8e, 0x7e, 0xd0, 0x9, 0xa9, 0x93, 0x20, 0xd2, 0xff, 0xa9, 0x19, 0x85, 0x81, 0xa9,
-0x0, 0x85, 0x49, 0xa5, 0x49, 0xc5, 0x81, 0xb0, 0xb, 0x20, 0xa5, 0x16, 0x20, 0x5b, 0x30, 0xe6,
-0x49, 0x4c, 0xb9, 0x2f, 0xad, 0x8d, 0x7d, 0xf0, 0x1, 0x60, 0xa9, 0x0, 0x85, 0x49, 0x4c, 0xa5,
-0x16, 0xa9, 0x6, 0x8d, 0x76, 0x7e, 0xad, 0x3c, 0x7e, 0x18, 0x69, 0x15, 0x8d, 0x44, 0x7e, 0xa9,
-0x0, 0x8d, 0x43, 0x7e, 0xa9, 0x63, 0x8d, 0x45, 0x7e, 0xa9, 0x3, 0x8d, 0xa7, 0x7d, 0xa9, 0x18,
-0x8d, 0x4d, 0x7e, 0xa9, 0x16, 0x85, 0x30, 0xa9, 0x0, 0x8d, 0x4e, 0x7e, 0x20, 0x4a, 0x1e, 0xad,
-0x7a, 0x16, 0xd0, 0x3, 0x20, 0xf3, 0x1e, 0xa9, 0x80, 0x8d, 0x40, 0x5, 0xad, 0x23, 0x7e, 0x8d,
-0x74, 0x7e, 0xad, 0x24, 0x7e, 0x8d, 0x73, 0x7e, 0x20, 0x41, 0x12, 0xa9, 0x0, 0x85, 0x2f, 0x85,
-0x85, 0x8d, 0x8e, 0x7e, 0xa9, 0x15, 0x85, 0x9, 0x4c, 0xa1, 0x2f, 0xa9, 0xb, 0x85, 0x9, 0x8d,
-0x8e, 0x7e, 0x20, 0xc5, 0x1c, 0xa9, 0x0, 0x85, 0x85, 0x85, 0x49, 0x85, 0x2f, 0x20, 0xba, 0x1c,
-0x4c, 0xaa, 0x1c, 0x20, 0x21, 0x30, 0x20, 0x41, 0x12, 0x4c, 0x38, 0x1d, 0x20, 0x31, 0x30, 0x20,
-0x38, 0x12, 0x4c, 0x38, 0x1d, 0x20, 0xb4, 0xd8, 0xa0, 0x0, 0xad, 0xc4, 0x7d, 0x91, 0xea, 0xc8,
-0xc0, 0x28, 0x90, 0xf9, 0x60, 0x20, 0xd5, 0x16, 0x4c, 0x5b, 0x30, 0x4c, 0xc6, 0x11, 0x48, 0xa5,
-0x49, 0x48, 0xa5, 0x81, 0x48, 0x20, 0xa1, 0x2f, 0x68, 0x85, 0x81, 0x68, 0x85, 0x49, 0x68, 0x60,
-0x20, 0x35, 0x1f, 0xc9, 0x59, 0xd0, 0x3, 0xa9, 0x0, 0x60, 0xc9, 0x4e, 0xd0, 0xf2, 0xa9, 0x1,
-0x60, 0xa9, 0x0, 0x85, 0x53, 0x8d, 0x73, 0x7d, 0x85, 0x85, 0x8d, 0x74, 0x7f, 0x8d, 0x75, 0x7f,
-0x60, 0x4c, 0x23, 0x12, 0x20, 0x20, 0x12, 0x18, 0x60, 0x20, 0x8, 0x12, 0x20, 0xdb, 0x54, 0x4c,
-0xcd, 0x30, 0x20, 0x8, 0x12, 0x20, 0xdb, 0x54, 0x4c, 0x25, 0x54, 0x20, 0x4e, 0x2a, 0x20, 0x95,
-0x12, 0x20, 0x9f, 0x2a, 0x4c, 0x48, 0x2a, 0x20, 0x44, 0x2c, 0xa5, 0x59, 0x85, 0x7c, 0x8d, 0xa2,
-0x75, 0x20, 0xc7, 0x2b, 0x20, 0x44, 0x2c, 0xa5, 0x59, 0x85, 0x7c, 0x8d, 0xa2, 0x75, 0x4c, 0xc1,
-0x30, 0xad, 0x6, 0x7d, 0xcd, 0x5, 0x7d, 0xd0, 0x1, 0x60, 0xad, 0x6, 0x7d, 0xd0, 0x21, 0xad,
-0xb2, 0x31, 0x85, 0xd8, 0xad, 0xb3, 0x31, 0x85, 0xd9, 0xad, 0xb4, 0x31, 0x8d, 0x5b, 0x7f, 0xad,
-0xb5, 0x31, 0x8d, 0x5c, 0x7f, 0xa9, 0x0, 0x8d, 0x5, 0x7d, 0x8d, 0x6, 0x7d, 0x4c, 0x34, 0x31,
-0xad, 0xb6, 0x31, 0x85, 0xd8, 0xad, 0xb7, 0x31, 0x85, 0xd9, 0xad, 0xb8, 0x31, 0x8d, 0x5b, 0x7f,
-0xad, 0xb9, 0x31, 0x8d, 0x5c, 0x7f, 0xa9, 0x1, 0x8d, 0x5, 0x7d, 0x8d, 0x6, 0x7d, 0x78, 0xae,
-0xff, 0x7f, 0x8a, 0x86, 0xfb, 0x9d, 0xd0, 0xfd, 0x58, 0xad, 0x6, 0xff, 0x29, 0xef, 0x8d, 0x6,
-0xff, 0xa9, 0x0, 0x85, 0xda, 0xa9, 0x4a, 0x85, 0xdb, 0xa0, 0x0, 0xb1, 0xd8, 0x91, 0xda, 0xe6,
-0xd8, 0xd0, 0x2, 0xe6, 0xd9, 0xe6, 0xda, 0xd0, 0x2, 0xe6, 0xdb, 0xa5, 0xd9, 0xcd, 0x5c, 0x7f,
-0x90, 0xe9, 0xa5, 0xd8, 0xcd, 0x5b, 0x7f, 0x90, 0xe2, 0xf0, 0xe0, 0x78, 0xa2, 0x0, 0x86, 0xfb,
-0x8e, 0xd0, 0xfd, 0x58, 0xad, 0x6, 0xff, 0x9, 0x10, 0x8d, 0x6, 0xff, 0x60, 0xa9, 0x0, 0x8d,
-0x6, 0x7d, 0x85, 0x45, 0x20, 0xe7, 0x30, 0x4c, 0x71, 0x30, 0xa9, 0x1, 0x8d, 0x6, 0x7d, 0x20,
-0xe7, 0x30, 0x4c, 0xcc, 0x11, 0xa9, 0x1, 0x8d, 0x6, 0x7d, 0x4c, 0xe7, 0x30, 0x20, 0x9b, 0x31,
-0x4c, 0xed, 0x4b, 0x20, 0x9b, 0x31, 0x4c, 0xfa, 0x4b, 0xff, 0xff, 0xff, 0x4b, 0xbb, 0x32, 0xda,
-0x32, 0xda, 0xf0, 0xfb, 0xff, 0xff, 0xff, 0x4c, 0x47, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-0x0, 0x97, 0x32, 0x6, 0x35, 0x0, 0xc6, 0x51, 0xd0, 0x51, 0xda, 0x51, 0xe4, 0x51, 0xbd, 0x75,
-0x0, 0x90, 0xa0, 0xbf, 0x69, 0x37, 0x20, 0xb2, 0x43, 0x20, 0x5a, 0x33, 0xad, 0x5d, 0x7f, 0x8d,
-0x55, 0x7f, 0x85, 0x3, 0x85, 0xd8, 0xad, 0x5e, 0x7f, 0x8d, 0x56, 0x7f, 0x85, 0x4, 0x85, 0xd9,
-0xa0, 0x4, 0xa9, 0x1, 0x91, 0xd8, 0x8d, 0x1f, 0x7d, 0xa9, 0xb, 0x85, 0xe4, 0x85, 0xe3, 0x4c,
-0x7c, 0x34, 0xad, 0x74, 0x7d, 0x85, 0x43, 0xe6, 0x43, 0xad, 0x75, 0x7d, 0x85, 0x44, 0xe6, 0x44,
-0xa9, 0x2, 0x8d, 0xbb, 0x75, 0xa9, 0x0, 0x8d, 0xbc, 0x75, 0x8d, 0xc0, 0x31, 0x20, 0x45, 0x35,
-0x20, 0x9e, 0x45, 0x20, 0x0, 0x58, 0x20, 0xde, 0x58, 0xad, 0x1f, 0x7d, 0xd0, 0xf2, 0xee, 0x1f,
-0x7d, 0x20, 0x30, 0x35, 0x4c, 0xf6, 0x46, 0x20, 0xe0, 0x34, 0x20, 0x5a, 0x33, 0x20, 0xdc, 0x31,
-0x20, 0x30, 0x35, 0x4c, 0x4e, 0x35, 0xa9, 0x0, 0xa0, 0x10, 0x99, 0x5f, 0x5, 0x88, 0x10, 0xfa,
-0x20, 0x57, 0x35, 0x85, 0xe1, 0x20, 0xd5, 0x34, 0xee, 0x5f, 0x5, 0xee, 0x60, 0x5, 0xa9, 0xb6,
-0x8d, 0x67, 0x5, 0xa9, 0xb2, 0x8d, 0x68, 0x5, 0xad, 0x1c, 0x7f, 0xd0, 0x6, 0x20, 0xb5, 0x38,
-0x4c, 0xd8, 0x38, 0x4c, 0xb7, 0x47, 0x78, 0xad, 0xc7, 0x31, 0x8d, 0x0, 0x3, 0xad, 0xc8, 0x31,
-0x8d, 0x1, 0x3, 0xad, 0xc9, 0x31, 0x8d, 0x2, 0x3, 0xad, 0xca, 0x31, 0x8d, 0x3, 0x3, 0x58,
-0x60, 0x4c, 0x6, 0x35, 0x20, 0x48, 0x43, 0xa9, 0x0, 0x8d, 0x83, 0x7e, 0x8d, 0x84, 0x7e, 0x8d,
-0x1c, 0x7f, 0x20, 0x7c, 0x32, 0x20, 0x56, 0x34, 0xa9, 0x0, 0x8d, 0xc6, 0x7d, 0x20, 0xb2, 0x43,
-0x20, 0x35, 0x12, 0x20, 0x69, 0x33, 0xa9, 0x1, 0x8d, 0xc4, 0x31, 0x8d, 0x3e, 0xff, 0x20, 0x3d,
-0x32, 0x20, 0x8, 0x32, 0x4c, 0x4c, 0x32, 0x20, 0x54, 0x45, 0x20, 0x3d, 0x3f, 0xf0, 0xec, 0x4c,
-0xfb, 0x37, 0xad, 0x1e, 0x33, 0x48, 0xad, 0x1f, 0x33, 0x48, 0xa0, 0x10, 0xd0, 0x1f, 0xad, 0x3d,
-0x33, 0x48, 0xad, 0x3e, 0x33, 0x48, 0xd0, 0x8, 0xad, 0x1e, 0x33, 0x48, 0xad, 0x1f, 0x33, 0x48,
-0x20, 0x35, 0x45, 0xa0, 0x0, 0x8c, 0x3b, 0x5, 0xa9, 0xf1, 0x8d, 0x15, 0xff, 0x68, 0x85, 0xd9,
-0x68, 0x85, 0xd8, 0x20, 0x60, 0x43, 0xf0, 0x6, 0x20, 0xe5, 0x34, 0xc8, 0xd0, 0xf5, 0x20, 0x4a,
-0x34, 0xa9, 0x1, 0x85, 0xe7, 0x4c, 0xc4, 0x56, 0x20, 0x33, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54,
-0x49, 0x4f, 0x4e, 0x20, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x2f, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20,
-0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x0, 0x3f, 0x33, 0x4f, 0x55, 0x54, 0x20, 0x4f, 0x46, 0x20,
-0x4d, 0x45, 0x4d, 0x4f, 0x52, 0x59, 0x2f, 0x50, 0x52, 0x45, 0x53, 0x53, 0x20, 0x52, 0x45, 0x54,
-0x55, 0x52, 0x4e, 0x0, 0xad, 0xd6, 0x31, 0x8d, 0x5d, 0x7f, 0xad, 0xd7, 0x31, 0x8d, 0x5e, 0x7f,
-0x60, 0x67, 0x7d, 0x20, 0xe0, 0x34, 0xa9, 0x5, 0x85, 0x49, 0xa0, 0x0, 0x84, 0xc, 0x20, 0x2d,
-0x45, 0xb9, 0xa1, 0x33, 0xf0, 0x7, 0x20, 0xe5, 0x34, 0xc8, 0xd0, 0xf5, 0xea, 0xa9, 0x0, 0x85,
-0x81, 0x85, 0x82, 0x8d, 0xe, 0x7d, 0xe6, 0x81, 0xd0, 0xfc, 0xe6, 0x82, 0xd0, 0xf8, 0xee, 0xe,
-0x7d, 0xad, 0xe, 0x7d, 0xc9, 0x5, 0x90, 0xee, 0x4c, 0xe0, 0x34, 0x5, 0x20, 0x20, 0x20, 0x20,
-0x33, 0x2d, 0x50, 0x4c, 0x55, 0x53, 0x2d, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x56, 0x30, 0x35,
-0x32, 0x30, 0x38, 0x34, 0xd, 0xd, 0xd, 0x20, 0x20, 0x20, 0x20, 0x44, 0x49, 0x53, 0x54, 0x52,
-0x49, 0x42, 0x55, 0x54, 0x49, 0x4f, 0x4e, 0x20, 0x52, 0x49, 0x47, 0x48, 0x54, 0x53, 0xd, 0xd,
-0x20, 0x20, 0x20, 0x20, 0x43, 0x4f, 0x4d, 0x4d, 0x4f, 0x44, 0x4f, 0x52, 0x45, 0x20, 0x42, 0x55,
-0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x20, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x53, 0x2c,
-0x49, 0x4e, 0x43, 0x2e, 0xd, 0xd, 0x20, 0x20, 0x20, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e,
-0x41, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x20, 0x54, 0x52, 0x49, 0x20, 0x4d, 0x49, 0x43, 0x52,
-0x4f, 0x20, 0x49, 0x4e, 0x43, 0x2e, 0xd, 0xd, 0x20, 0x20, 0x20, 0x20, 0x43, 0x4f, 0x50, 0x59,
-0x52, 0x49, 0x47, 0x48, 0x54, 0x20, 0x28, 0x43, 0x29, 0x20, 0x31, 0x39, 0x38, 0x34, 0xd, 0xd,
-0x42, 0x59, 0x20, 0x20, 0x44, 0x41, 0x56, 0x49, 0x44, 0x20, 0x57, 0x20, 0x4a, 0x4f, 0x48, 0x4e,
-0x53, 0x4f, 0x4e, 0x0, 0x20, 0xe4, 0xff, 0xc9, 0xd, 0xd0, 0xf9, 0x60, 0x5, 0x7d, 0x88, 0x7f,
-0xad, 0x52, 0x34, 0x85, 0xd8, 0xad, 0x53, 0x34, 0x85, 0xd9, 0xa0, 0x0, 0x98, 0x91, 0xd8, 0xe6,
-0xd8, 0xd0, 0x2, 0xe6, 0xd9, 0xa5, 0xd9, 0xcd, 0x55, 0x34, 0x90, 0xee, 0xa5, 0xd8, 0xcd, 0x54,
-0x34, 0x90, 0xe7, 0x4c, 0x64, 0x35, 0xa9, 0xc, 0x8d, 0x25, 0x7d, 0xa9, 0x3, 0x8d, 0x24, 0x7d,
-0xa9, 0x4, 0x8d, 0x30, 0x7d, 0xa9, 0x0, 0x8d, 0x8e, 0x7e, 0xa9, 0x3, 0x8d, 0x32, 0x7d, 0x8d,
-0x34, 0x7d, 0xa9, 0x0, 0x8d, 0x2f, 0x7d, 0x8d, 0x36, 0x7d, 0x8d, 0x38, 0x7d, 0x8d, 0x1a, 0x7d,
-0xad, 0x25, 0x7d, 0x18, 0x6d, 0x30, 0x7d, 0x18, 0x69, 0x1, 0x8d, 0x33, 0x7d, 0x18, 0x69, 0x1,
-0x8d, 0x37, 0x7d, 0x8d, 0x31, 0x7d, 0x8d, 0x35, 0x7d, 0xee, 0x35, 0x7d, 0x4c, 0x4e, 0x35, 0xa9,
-0x7, 0x8d, 0x25, 0x7d, 0x8d, 0x8e, 0x7e, 0xa9, 0xc, 0x8d, 0x30, 0x7d, 0x4c, 0x90, 0x34, 0xa9,
-0x0, 0x8d, 0xc, 0x7f, 0x8d, 0xd, 0x7f, 0x4c, 0x45, 0x35, 0xa9, 0x93, 0x4c, 0xd2, 0xff, 0xc9,
-0x41, 0x90, 0x6, 0xc9, 0x5b, 0xb0, 0x2, 0x69, 0x80, 0x4c, 0xd2, 0xff, 0xa9, 0x0, 0x8d, 0x83,
-0x7e, 0x8d, 0x87, 0x7d, 0x8d, 0x5, 0x7f, 0x85, 0xe1, 0x85, 0x45, 0x85, 0xe1, 0x4c, 0xd5, 0x34,
-0x20, 0xee, 0x32, 0x20, 0xe0, 0x34, 0xad, 0x5, 0x7f, 0xf0, 0x3, 0x20, 0x1, 0x67, 0x20, 0xb2,
-0x43, 0x20, 0xf4, 0x4f, 0xa5, 0x45, 0xf0, 0x3, 0x20, 0xaf, 0x53, 0x20, 0xf2, 0x34, 0x20, 0x48,
-0x43, 0x20, 0xf6, 0x46, 0x20, 0x7c, 0x34, 0x4c, 0xcf, 0x11, 0xa9, 0x10, 0x85, 0x43, 0x8d, 0x76,
-0x7d, 0x8d, 0x74, 0x7d, 0xa9, 0x31, 0x85, 0x44, 0x8d, 0x77, 0x7d, 0x8d, 0x75, 0x7d, 0x60, 0xa0,
-0x3, 0x99, 0x20, 0x7d, 0x88, 0x10, 0xfa, 0x60, 0x20, 0xd5, 0x34, 0x8d, 0x57, 0x7f, 0x8d, 0x58,
-0x7f, 0x85, 0x31, 0x85, 0x32, 0x8d, 0x59, 0x7f, 0x8d, 0x5a, 0x7f, 0x4c, 0xc7, 0x49, 0xa9, 0x0,
-0x85, 0x9, 0x85, 0x45, 0x85, 0x41, 0x85, 0x42, 0x85, 0x53, 0x85, 0x5c, 0x85, 0x75, 0x85, 0x78,
-0x85, 0x85, 0x85, 0x8a, 0x85, 0x8b, 0xa9, 0x1, 0x8d, 0xf5, 0x7e, 0x4c, 0x2, 0x39, 0x0, 0x20,
-0x49, 0x40, 0x38, 0xcd, 0x32, 0x1e, 0x48, 0x68, 0x48, 0x7c, 0x48, 0xfd, 0x49, 0x22, 0x4a, 0xc7,
-0x5c, 0xe4, 0x5a, 0xe, 0x62, 0x4f, 0x61, 0x1a, 0x61, 0x3f, 0x49, 0x22, 0x4a, 0x75, 0x4a, 0xf8,
-0x48, 0x0, 0x49, 0x8, 0x49, 0xab, 0x5a, 0x31, 0x5c, 0x4a, 0x5c, 0x60, 0x5d, 0x61, 0x49, 0x85,
-0x49, 0x7d, 0x49, 0x8d, 0x49, 0x95, 0x49, 0x9d, 0x49, 0x2, 0x61, 0x12, 0x61, 0x76, 0x61, 0x87,
-0x61, 0x98, 0x61, 0xa9, 0x61, 0x2d, 0x61, 0x3e, 0x61, 0xba, 0x61, 0xc0, 0x61, 0x10, 0x49, 0x18,
-0x49, 0x5b, 0x62, 0x73, 0x62, 0x8b, 0x62, 0xdb, 0x62, 0x4d, 0x64, 0x93, 0x64, 0xf0, 0x64, 0x4e,
-0x3f, 0xd8, 0x38, 0x68, 0x67, 0xab, 0x67, 0xe4, 0x38, 0xf3, 0x38, 0xca, 0x41, 0x48, 0x42, 0x2,
-0x42, 0x27, 0x41, 0xde, 0x38, 0x51, 0x65, 0x8b, 0x39, 0xd5, 0x3e, 0x17, 0x68, 0x5, 0x36, 0xff,
-0xff, 0x53, 0x55, 0x4d, 0xff, 0x1, 0x47, 0x4f, 0x54, 0x4f, 0xff, 0x2, 0x43, 0x4d, 0xff, 0x3,
-0x2b, 0xff, 0x4, 0x2d, 0xff, 0x5, 0x2a, 0xff, 0x6, 0x2f, 0xff, 0x7, 0x43, 0x4f, 0x50, 0x59,
-0xff, 0x8, 0x52, 0x43, 0x4f, 0xff, 0x9, 0x52, 0x49, 0x4e, 0x53, 0xff, 0xa, 0x3d, 0xff, 0xb,
-0x41, 0x42, 0x53, 0xff, 0xc, 0x5e, 0xff, 0xd, 0x46, 0x52, 0x45, 0xff, 0xe, 0x41, 0x43, 0x4f,
-0x50, 0x59, 0xff, 0xf, 0x46, 0x49, 0x54, 0xff, 0x10, 0x53, 0x55, 0x42, 0xff, 0x11, 0x4d, 0x4c,
-0x54, 0xff, 0x12, 0x44, 0x49, 0x56, 0xff, 0x13, 0x43, 0x49, 0x4e, 0x53, 0xff, 0x14, 0x43, 0x44,
-0x45, 0x4c, 0xff, 0x15, 0x52, 0x44, 0x45, 0x4c, 0xff, 0x16, 0x43, 0x43, 0x4f, 0xff, 0x17, 0x54,
-0x48, 0x41, 0x57, 0xff, 0x18, 0x4c, 0x45, 0x46, 0x54, 0x4a, 0xff, 0x19, 0x52, 0x49, 0x47, 0x48,
-0x54, 0x4a, 0xff, 0x1a, 0x49, 0x4e, 0xff, 0x1b, 0x46, 0x4c, 0xff, 0x1c, 0x24, 0x24, 0xff, 0x1d,
-0x41, 0x55, 0x54, 0xff, 0x1e, 0x4d, 0x41, 0x4e, 0xff, 0x1f, 0x53, 0x49, 0x4e, 0xff, 0x20, 0x43,
-0x4f, 0x53, 0xff, 0x21, 0x54, 0x41, 0x4e, 0xff, 0x22, 0x41, 0x54, 0x4e, 0xff, 0x23, 0x45, 0x58,
-0x50, 0xff, 0x24, 0x4c, 0x4f, 0x47, 0xff, 0x25, 0x48, 0x4f, 0x4d, 0xff, 0x26, 0x52, 0x45, 0x53,
-0x45, 0x54, 0xff, 0x27, 0x4d, 0x41, 0x58, 0xff, 0x28, 0x4d, 0x49, 0x4e, 0xff, 0x29, 0x3e, 0xff,
-0x2a, 0x3c, 0xff, 0x2b, 0x4e, 0x54, 0x45, 0xff, 0x2c, 0x40, 0xff, 0x2d, 0x4e, 0x4f, 0x54, 0xff,
-0x2e, 0x49, 0x46, 0x54, 0x52, 0x55, 0x45, 0xff, 0x2f, 0x5f, 0xff, 0x30, 0x49, 0x44, 0xff, 0x31,
-0x54, 0x57, 0xff, 0x32, 0x4d, 0x41, 0x50, 0xff, 0x33, 0x4f, 0x46, 0x46, 0xff, 0x34, 0x46, 0x55,
-0xff, 0x35, 0x48, 0x41, 0xff, 0x36, 0x53, 0x46, 0xff, 0x37, 0x4c, 0x46, 0xff, 0x38, 0x44, 0x46,
-0xff, 0x39, 0x43, 0x41, 0xff, 0x3a, 0x54, 0x46, 0xff, 0x3b, 0x47, 0x52, 0xff, 0x3c, 0x43, 0x4f,
-0x4c, 0x4f, 0x52, 0xff, 0x3d, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0xff, 0x3e, 0x42, 0x4c, 0x4b,
-0x4d, 0x41, 0x50, 0xff, 0x3f, 0x0, 0x8c, 0x3d, 0x7d, 0xa9, 0x0, 0x8d, 0x3e, 0x7d, 0xe6, 0xb,
-0xa4, 0xb, 0xc0, 0x50, 0xb0, 0x14, 0xb9, 0xbc, 0x76, 0xf0, 0xf, 0xc9, 0x20, 0xd0, 0x5, 0xee,
-0x3e, 0x7d, 0xd0, 0xea, 0xac, 0x3d, 0x7d, 0x48, 0x68, 0x60, 0xac, 0x3d, 0x7d, 0xee, 0x3e, 0x7d,
-0xa9, 0x0, 0x60, 0x20, 0xf6, 0x46, 0x20, 0xf4, 0x4f, 0x20, 0x9e, 0x39, 0x4c, 0xb7, 0x47, 0xad,
-0x7f, 0x7d, 0xf0, 0x9, 0x20, 0xb0, 0x5f, 0x20, 0xf4, 0x4f, 0x4c, 0xb6, 0x37, 0x20, 0xf4, 0x4f,
-0x20, 0x9e, 0x39, 0xa5, 0x45, 0xf0, 0x1, 0x60, 0x20, 0x7e, 0x52, 0x4c, 0xc1, 0x54, 0xa5, 0x5a,
-0x8d, 0x50, 0x65, 0x20, 0xc5, 0x60, 0xa9, 0x0, 0x8d, 0x7f, 0x7d, 0x8d, 0x80, 0x7d, 0x8d, 0x81,
-0x7d, 0x8d, 0x5, 0x7f, 0x20, 0xc7, 0x49, 0x20, 0xc, 0x38, 0x20, 0x37, 0x63, 0x20, 0xf4, 0x4f,
-0x20, 0x92, 0x48, 0x20, 0xd9, 0x5e, 0xa9, 0x0, 0x8d, 0x4b, 0x7d, 0x8d, 0x37, 0x77, 0x8d, 0x4c,
-0x77, 0x8d, 0x4b, 0x77, 0x8d, 0x55, 0x7d, 0x20, 0xd1, 0x43, 0x20, 0x28, 0x5e, 0xa9, 0xff, 0x85,
-0xb, 0x20, 0x3c, 0x37, 0xf0, 0x99, 0xc9, 0x3b, 0xf0, 0xf7, 0x20, 0xb1, 0x44, 0xb0, 0xf2, 0x20,
-0x7c, 0x35, 0xf0, 0xed, 0xa9, 0x4c, 0x85, 0xdd, 0x4c, 0xdd, 0x0, 0xa9, 0x1, 0x8d, 0x4b, 0x7d,
-0xad, 0x55, 0x7d, 0xf0, 0x8, 0xa9, 0x0, 0x8d, 0x55, 0x7d, 0x4c, 0x75, 0x37, 0xad, 0x40, 0x7d,
-0x85, 0xb, 0x4c, 0xd7, 0x37, 0x60, 0xa0, 0x0, 0xb9, 0x0, 0x2, 0x99, 0xbc, 0x76, 0xc8, 0xc4,
-0xe3, 0x90, 0xf5, 0x84, 0xab, 0xa9, 0x0, 0x99, 0xbc, 0x76, 0xa9, 0x5, 0x85, 0xe3, 0x60, 0xee,
-0xe, 0x77, 0xac, 0xe, 0x77, 0xcc, 0xf, 0x77, 0xf0, 0xb, 0x90, 0x9, 0x88, 0xce, 0xe, 0x77,
-0xb9, 0xf, 0x77, 0x38, 0x60, 0xb9, 0xf, 0x77, 0x18, 0x60, 0x20, 0x54, 0x45, 0xa9, 0x1, 0x85,
-0xe1, 0x20, 0xf4, 0x4f, 0x20, 0x5d, 0x38, 0x20, 0xc7, 0x49, 0xa9, 0x0, 0x8d, 0x43, 0x7d, 0x85,
-0xe1, 0x20, 0xd5, 0x34, 0x4c, 0x86, 0x37, 0x20, 0xa0, 0x38, 0xb0, 0x3, 0x4c, 0xfb, 0x37, 0xa5,
-0xe5, 0xc5, 0x31, 0xf0, 0x12, 0x90, 0x8, 0xa9, 0x11, 0x20, 0x9a, 0x68, 0x4c, 0x65, 0x38, 0xa9,
-0x91, 0x20, 0x9a, 0x68, 0x4c, 0x65, 0x38, 0xa5, 0xe6, 0xc5, 0x32, 0xf0, 0x12, 0x90, 0x8, 0xa9,
-0xb2, 0x20, 0x9a, 0x68, 0x4c, 0x7d, 0x38, 0xa9, 0xb6, 0x20, 0x9a, 0x68, 0x4c, 0x7d, 0x38, 0x60,
-0x20, 0x25, 0x38, 0x90, 0x2, 0x18, 0x60, 0x4c, 0xea, 0x49, 0xa6, 0x44, 0x20, 0x96, 0x38, 0xb0,
-0x1, 0x60, 0x85, 0xe5, 0xa6, 0x43, 0x20, 0x96, 0x38, 0x90, 0xf6, 0x85, 0xe6, 0x38, 0x60, 0xad,
-0xda, 0x31, 0x8d, 0xca, 0x11, 0xad, 0xdb, 0x31, 0x8d, 0xcb, 0x11, 0xa9, 0x0, 0x8d, 0x83, 0x7e,
-0x8d, 0x9, 0x7f, 0x20, 0xd5, 0x34, 0x20, 0xf6, 0x46, 0x4c, 0xc7, 0x49, 0x20, 0xb5, 0x38, 0x4c,
-0x17, 0x12, 0x20, 0xb5, 0x38, 0x4c, 0xc3, 0x11, 0x20, 0xb5, 0x38, 0x4c, 0xd2, 0x11, 0x20, 0x54,
-0x45, 0x20, 0xe0, 0x34, 0x20, 0x7c, 0x34, 0x20, 0x3b, 0x12, 0x4c, 0xfb, 0x37, 0x20, 0x54, 0x45,
-0x20, 0xe0, 0x34, 0x20, 0xc5, 0x34, 0x20, 0x3e, 0x12, 0x4c, 0xfb, 0x37, 0x20, 0x70, 0x39, 0xa6,
-0xb, 0x8e, 0x3f, 0x7d, 0xa0, 0x0, 0xb1, 0xde, 0xf0, 0x22, 0xc9, 0xff, 0xd0, 0x16, 0xa5, 0xde,
-0x18, 0x69, 0x2, 0x85, 0xde, 0xa5, 0xdf, 0x69, 0x0, 0x85, 0xdf, 0xb1, 0xde, 0xf0, 0xd, 0xdd,
-0xbc, 0x76, 0xf0, 0xb, 0xe6, 0xde, 0xd0, 0xdc, 0xe6, 0xdf, 0xd0, 0xd8, 0xa9, 0x0, 0x60, 0xe8,
-0xc8, 0xb1, 0xde, 0xf0, 0xf7, 0xc9, 0xff, 0xf0, 0xb, 0xc9, 0x2a, 0xf0, 0xf2, 0xdd, 0xbc, 0x76,
-0xf0, 0xed, 0xd0, 0x1e, 0xc8, 0xca, 0x8e, 0x40, 0x7d, 0x8a, 0x38, 0xe5, 0xb, 0x8d, 0x3c, 0x7d,
-0xb1, 0xde, 0xa, 0xa8, 0xb1, 0x3c, 0x48, 0x88, 0xb1, 0x3c, 0x85, 0xde, 0x68, 0x85, 0xdf, 0xa9,
-0x1, 0x60, 0xad, 0x3f, 0x7d, 0x85, 0xb, 0x4c, 0x5, 0x39, 0xad, 0xf5, 0x7e, 0xa, 0xa8, 0xb9,
-0xb0, 0x12, 0x85, 0xdf, 0xb9, 0xb7, 0x12, 0x85, 0x3d, 0x88, 0xb9, 0xb0, 0x12, 0x85, 0xde, 0xb9,
-0xb7, 0x12, 0x85, 0x3c, 0x60, 0x20, 0x25, 0x38, 0xc9, 0x10, 0x90, 0x3, 0x4c, 0xf1, 0x37, 0x8d,
-0xc6, 0x7d, 0x20, 0xb2, 0x43, 0x4c, 0xf1, 0x37, 0xa9, 0x1, 0x85, 0xe7, 0x20, 0xc4, 0x56, 0xa9,
-0x0, 0x8d, 0x81, 0x7d, 0x60, 0x20, 0xd5, 0x34, 0x20, 0xf6, 0x46, 0x4c, 0xfb, 0x37, 0x48, 0x20,
-0x48, 0x3a, 0x68, 0x8d, 0xe0, 0x7d, 0xa9, 0x4, 0x8d, 0xa7, 0x7d, 0xa0, 0x0, 0x8c, 0xa1, 0x7d,
-0xa2, 0x0, 0xad, 0xe0, 0x7d, 0x38, 0xf9, 0xfd, 0x39, 0x8d, 0xe0, 0x7d, 0xad, 0xe1, 0x7d, 0xc8,
-0xf9, 0xfd, 0x39, 0x90, 0x8, 0x8d, 0xe1, 0x7d, 0xe8, 0x88, 0x4c, 0xc8, 0x39, 0x88, 0xad, 0xe0,
-0x7d, 0x79, 0xfd, 0x39, 0x8d, 0xe0, 0x7d, 0x8a, 0x20, 0x5, 0x3a, 0xc8, 0xc8, 0xc0, 0x8, 0x90,
-0xcf, 0xad, 0xe0, 0x7d, 0x4c, 0x5, 0x3a, 0x10, 0x27, 0xe8, 0x3, 0x64, 0x0, 0xa, 0x0, 0x8c,
-0x3d, 0x7d, 0xee, 0xa1, 0x7d, 0xae, 0xa1, 0x7d, 0xec, 0xa7, 0x7d, 0x90, 0x1d, 0x18, 0x69, 0x30,
-0xae, 0x9a, 0x7d, 0xe0, 0x0, 0xd0, 0x25, 0xae, 0x99, 0x7d, 0xe0, 0x1, 0xd0, 0x3, 0x4c, 0xf1,
-0x3b, 0x85, 0x52, 0x20, 0x53, 0x3a, 0xac, 0x3d, 0x7d, 0x60, 0xae, 0x9a, 0x7d, 0xe0, 0x0, 0xd0,
-0xb, 0xae, 0x99, 0x7d, 0xe0, 0x1, 0xf0, 0xee, 0xa9, 0x20, 0xd0, 0xe5, 0x20, 0xd2, 0xff, 0x4c,
-0x2c, 0x3a, 0xa9, 0x0, 0xa0, 0x4, 0x99, 0xdf, 0x7d, 0x88, 0x10, 0xfa, 0x60, 0x85, 0x52, 0xad,
-0x98, 0x7d, 0xf0, 0xa, 0xa5, 0x52, 0xc9, 0x40, 0xd0, 0x1, 0x60, 0x4c, 0xe5, 0x34, 0xa5, 0x52,
-0xc9, 0xd, 0xf0, 0x21, 0xc9, 0x40, 0xd0, 0x4, 0xee, 0x68, 0x7f, 0x60, 0xad, 0x68, 0x7f, 0xf0,
-0xb, 0xa5, 0x52, 0x9, 0x80, 0x85, 0x52, 0xa9, 0x0, 0x8d, 0x68, 0x7f, 0xa5, 0x52, 0xa4, 0xc,
-0x91, 0xc8, 0xe6, 0xc, 0x60, 0xe6, 0x49, 0x20, 0x2d, 0x45, 0xa9, 0x0, 0x85, 0xc, 0x60, 0x18,
-0x48, 0xa, 0xb0, 0x9, 0x68, 0xc9, 0x40, 0x90, 0x3, 0x38, 0xe9, 0x40, 0x60, 0x68, 0x60, 0x20,
-0xae, 0xff, 0x4c, 0xd9, 0x3b, 0x20, 0xab, 0xff, 0x4c, 0xd9, 0x3b, 0x0, 0xa0, 0xf, 0x20, 0x36,
-0x3b, 0xd0, 0x2a, 0xad, 0x5f, 0x3c, 0x85, 0xde, 0xad, 0x60, 0x3c, 0x85, 0xdf, 0xa0, 0x0, 0x8c,
-0xb1, 0x3a, 0xac, 0xb1, 0x3a, 0xb1, 0xde, 0xf0, 0xf, 0x85, 0x52, 0x20, 0x54, 0x3b, 0xee, 0xb1,
-0x3a, 0xac, 0xb1, 0x3a, 0xc0, 0x19, 0x90, 0xea, 0xa0, 0xf, 0x20, 0xa5, 0x3a, 0x60, 0xa9, 0x0,
-0x8d, 0xb4, 0x7d, 0xee, 0xb4, 0x7d, 0xea, 0xea, 0xad, 0xb4, 0x7d, 0xc9, 0x32, 0x90, 0xf4, 0x60,
-0xa9, 0x0, 0x85, 0x53, 0xa9, 0x7, 0x85, 0xac, 0xa9, 0x8, 0x85, 0xae, 0xa9, 0x7, 0x9, 0x60,
-0x85, 0xad, 0xad, 0x5f, 0x3c, 0x85, 0xaf, 0xad, 0x60, 0x3c, 0x85, 0xb0, 0x60, 0xa5, 0xac, 0xa6,
-0xae, 0xa4, 0xad, 0x20, 0xba, 0xff, 0xad, 0xa2, 0x75, 0xae, 0x5f, 0x3c, 0xac, 0x60, 0x3c, 0x20,
-0xbd, 0xff, 0xa5, 0xae, 0x20, 0xc0, 0xff, 0x4c, 0xd9, 0x3b, 0xa5, 0xac, 0x20, 0xc3, 0xff, 0x60,
-0xa5, 0xae, 0x20, 0xb1, 0xff, 0xa5, 0xad, 0x9, 0x60, 0x20, 0x93, 0xff, 0x4c, 0xd9, 0x3b, 0xa5,
-0xae, 0x20, 0xb4, 0xff, 0xa5, 0xad, 0x9, 0x60, 0x20, 0x96, 0xff, 0x4c, 0xd9, 0x3b, 0xa2, 0x0,
-0x86, 0x90, 0x8e, 0xb7, 0x7d, 0xa5, 0x52, 0x20, 0xa8, 0xff, 0x20, 0xd9, 0x3b, 0xe0, 0x1, 0xd0,
-0x14, 0xee, 0xb7, 0x7d, 0xad, 0xb7, 0x7d, 0xc9, 0x64, 0xb0, 0xa, 0x20, 0xe4, 0x3a, 0xa2, 0x0,
-0x86, 0x90, 0x4c, 0x5b, 0x3b, 0x60, 0xa2, 0x0, 0x8e, 0xb7, 0x7d, 0x86, 0x90, 0x20, 0xa5, 0xff,
-0x85, 0x52, 0x20, 0xd9, 0x3b, 0xe0, 0x2, 0xd0, 0x14, 0xee, 0xb7, 0x7d, 0xad, 0xb7, 0x7d, 0xc9,
-0x64, 0xb0, 0xa, 0x20, 0xe4, 0x3a, 0xa2, 0x0, 0x86, 0x90, 0x4c, 0x83, 0x3b, 0xa5, 0x52, 0x86,
-0x53, 0x60, 0x85, 0x52, 0xa2, 0x0, 0x8e, 0xb6, 0x7d, 0x20, 0x36, 0x3b, 0xe0, 0x1, 0xf0, 0xd,
-0xe0, 0x0, 0xd0, 0x9, 0x20, 0x54, 0x3b, 0x20, 0xae, 0xff, 0x4c, 0xd9, 0x3b, 0x60, 0xa9, 0x0,
-0x8d, 0xb6, 0x7d, 0x20, 0x45, 0x3b, 0xe0, 0x0, 0xd0, 0x8, 0x20, 0x7c, 0x3b, 0x20, 0xab, 0xff,
-0xa5, 0x52, 0x60, 0x20, 0xb7, 0xff, 0xaa, 0x85, 0x53, 0x60, 0xc9, 0x20, 0x90, 0xa, 0xc9, 0x80,
-0x90, 0x8, 0x38, 0xe9, 0x40, 0x4c, 0xe0, 0x3b, 0xa9, 0x20, 0x60, 0xae, 0xd6, 0x7d, 0xe8, 0x9d,
-0xd6, 0x7d, 0x8e, 0xd6, 0x7d, 0x60, 0xa9, 0x0, 0x8d, 0xbc, 0x7d, 0xad, 0xf4, 0x7e, 0xf0, 0x3,
-0x20, 0xa6, 0x3e, 0x20, 0xf9, 0x3d, 0x4c, 0xa6, 0x3e, 0xa9, 0x1, 0x8d, 0xbc, 0x7d, 0x20, 0xf9,
-0x3d, 0x4c, 0xa6, 0x3e, 0x4c, 0x6f, 0x3c, 0xa9, 0x32, 0xa0, 0x1, 0x99, 0x8e, 0x3d, 0x60, 0xa9,
-0x31, 0xa0, 0x1, 0x99, 0x8e, 0x3d, 0x60, 0xad, 0xbc, 0x7d, 0xf0, 0xf3, 0xd0, 0xe9, 0xac, 0xa2,
-0x75, 0xa9, 0x0, 0x99, 0xa3, 0x75, 0xa5, 0xaf, 0x85, 0xde, 0xa5, 0xb0, 0x85, 0xdf, 0x4c, 0xb2,
-0x3a, 0x20, 0xb4, 0x3d, 0xa9, 0x1, 0x8d, 0xa2, 0x75, 0xa9, 0x49, 0x8d, 0xa3, 0x75, 0xa9, 0xf,
-0x20, 0xdf, 0x3c, 0x20, 0x13, 0x3b, 0x4c, 0x30, 0x3b, 0xa3, 0x75, 0x4e, 0x4f, 0x53, 0x48, 0x4f,
-0x4a, 0x2e, 0x57, 0x2e, 0x44, 0x49, 0x56, 0x41, 0x44, 0xa9, 0x1, 0x8d, 0x99, 0x7d, 0x8d, 0x98,
-0x7d, 0xa9, 0x0, 0x8d, 0xc8, 0x7d, 0x8d, 0x9a, 0x7d, 0x8d, 0xd6, 0x7d, 0xad, 0xb8, 0x7d, 0xf0,
-0x43, 0xc9, 0x24, 0xb0, 0x3f, 0xad, 0xb9, 0x7d, 0xc9, 0x15, 0xb0, 0x38, 0xad, 0xb8, 0x7d, 0x20,
-0xb4, 0x39, 0xa0, 0x7, 0xad, 0xd7, 0x7d, 0x99, 0x8e, 0x3d, 0xad, 0xd8, 0x7d, 0xc8, 0x99, 0x8e,
-0x3d, 0xa9, 0x0, 0x8d, 0xd6, 0x7d, 0xad, 0xb9, 0x7d, 0x20, 0xb4, 0x39, 0xa0, 0xa, 0xad, 0xd7,
-0x7d, 0x99, 0x8e, 0x3d, 0xc8, 0xad, 0xd8, 0x7d, 0x99, 0x8e, 0x3d, 0xa9, 0x0, 0x8d, 0x99, 0x7d,
-0x8d, 0x98, 0x7d, 0x60, 0xa9, 0x1, 0x8d, 0xc8, 0x7d, 0xd0, 0xf0, 0xad, 0xbc, 0x7d, 0xd0, 0x6,
-0x20, 0x74, 0x3d, 0x4c, 0x5b, 0x3d, 0x4c, 0x5b, 0x3d, 0x8d, 0xb0, 0x7d, 0x85, 0xac, 0x8d, 0xb2,
-0x7d, 0x9, 0x60, 0x85, 0xad, 0xa9, 0x8, 0x8d, 0xb1, 0x7d, 0x85, 0xae, 0x60, 0xad, 0xbd, 0x7d,
-0x8d, 0xb8, 0x7d, 0xad, 0xbe, 0x7d, 0x8d, 0xb9, 0x7d, 0x4c, 0x6f, 0x3c, 0x85, 0x78, 0x20, 0xb4,
-0x3d, 0x20, 0x99, 0x3e, 0xa9, 0xf, 0x20, 0xdf, 0x3c, 0xa9, 0x2a, 0x8d, 0xfc, 0x74, 0xa9, 0x0,
-0x8d, 0xae, 0x7d, 0x8d, 0xd0, 0x7d, 0x20, 0x45, 0x3b, 0x20, 0x7c, 0x3b, 0xa6, 0x90, 0xd0, 0xd,
-0xac, 0xae, 0x7d, 0x99, 0xfc, 0x74, 0xee, 0xae, 0x7d, 0xc0, 0x28, 0x90, 0xec, 0x20, 0xab, 0xff,
-0xa5, 0xac, 0x20, 0x30, 0x3b, 0x20, 0xb4, 0x3d, 0xa9, 0x1, 0x85, 0x78, 0xad, 0xd5, 0x7d, 0xd0,
-0x13, 0xad, 0xfc, 0x74, 0xc9, 0x30, 0xd0, 0xc, 0xad, 0xfd, 0x74, 0xc9, 0x30, 0xd0, 0x5, 0xa9,
-0x0, 0x85, 0x78, 0x60, 0x60, 0xa0, 0x0, 0xb9, 0x9c, 0x3d, 0x99, 0xa3, 0x75, 0xc8, 0xcc, 0x9b,
-0x3d, 0x90, 0xf4, 0x8c, 0xa2, 0x75, 0xa9, 0xf, 0x20, 0xdf, 0x3c, 0x4c, 0x34, 0x3c, 0xa0, 0x0,
-0xb9, 0x8e, 0x3d, 0x99, 0xa3, 0x75, 0xc8, 0xcc, 0x8d, 0x3d, 0x90, 0xf4, 0x8c, 0xa2, 0x75, 0xa9,
-0xf, 0x20, 0xdf, 0x3c, 0x4c, 0x34, 0x3c, 0xc, 0x55, 0x31, 0x3a, 0x32, 0x2c, 0x30, 0x2c, 0x31,
-0x38, 0x2c, 0x30, 0x31, 0x0, 0x7, 0x42, 0x2d, 0x50, 0x3a, 0x32, 0x2c, 0x30, 0x0, 0xa9, 0x1,
-0x8d, 0xd5, 0x7d, 0x20, 0x4, 0x3d, 0xa9, 0x0, 0x8d, 0xd5, 0x7d, 0x4c, 0xf1, 0x37, 0x20, 0xae,
-0xff, 0x20, 0xab, 0xff, 0x4c, 0xe7, 0xff, 0xa9, 0x0, 0x8d, 0x12, 0x7d, 0x20, 0x36, 0x3b, 0xa6,
-0x90, 0x86, 0x78, 0xe0, 0x0, 0xf0, 0x3, 0x4c, 0xf0, 0x3d, 0xac, 0x12, 0x7d, 0xb9, 0x3, 0x73,
-0x85, 0x52, 0x20, 0x54, 0x3b, 0xa6, 0x90, 0x86, 0x78, 0xe0, 0x0, 0xd0, 0xd, 0xac, 0x12, 0x7d,
-0xc0, 0xff, 0xf0, 0x6, 0xee, 0x12, 0x7d, 0x4c, 0xd0, 0x3d, 0x20, 0xae, 0xff, 0x20, 0x74, 0x3d,
-0x4c, 0x56, 0x3e, 0x20, 0x2d, 0x3c, 0xad, 0xd0, 0x7d, 0xd0, 0x10, 0x20, 0x99, 0x3e, 0xf0, 0x3,
-0x4c, 0x2, 0x3d, 0x20, 0x7f, 0x3e, 0xf0, 0x3, 0x4c, 0x2, 0x3d, 0x20, 0xd1, 0x3c, 0xa9, 0x2,
-0x8d, 0xd0, 0x7d, 0x20, 0xdf, 0x3c, 0xad, 0xbc, 0x7d, 0xf0, 0x3, 0x4c, 0xbd, 0x3d, 0x20, 0x45,
-0x3b, 0xa9, 0x0, 0x8d, 0x12, 0x7d, 0x20, 0x7c, 0x3b, 0xa6, 0x90, 0x86, 0x78, 0xe0, 0x0, 0xd0,
-0x1f, 0xac, 0x12, 0x7d, 0x99, 0x3, 0x73, 0xc0, 0xfe, 0xf0, 0x6, 0xee, 0x12, 0x7d, 0x4c, 0x2c,
-0x3e, 0xee, 0x12, 0x7d, 0xac, 0x12, 0x7d, 0x20, 0x7c, 0x3b, 0x99, 0x3, 0x73, 0x20, 0xab, 0xff,
-0xa5, 0x78, 0xf0, 0x3, 0x20, 0xa6, 0x3e, 0xa9, 0x0, 0x8d, 0x98, 0x7d, 0x8d, 0xa0, 0x7d, 0xad,
-0x3, 0x73, 0x8d, 0xbd, 0x7d, 0xad, 0x4, 0x73, 0x8d, 0xbe, 0x7d, 0x60, 0xa2, 0x21, 0xa0, 0x3,
-0x8e, 0xbd, 0x7d, 0x8c, 0xbe, 0x7d, 0x4c, 0xf3, 0x3c, 0xa9, 0x1, 0x8d, 0x98, 0x7d, 0x8d, 0xc1,
-0x7d, 0xa9, 0x2, 0x20, 0xdf, 0x3c, 0xa9, 0x23, 0x8d, 0xa3, 0x75, 0xa9, 0x1, 0x8d, 0xa2, 0x75,
-0x4c, 0x13, 0x3b, 0xa9, 0xf, 0x20, 0xdf, 0x3c, 0xa0, 0x0, 0x8c, 0xa2, 0x75, 0x4c, 0x13, 0x3b,
-0xa9, 0x2, 0x20, 0xdf, 0x3c, 0x20, 0x30, 0x3b, 0x4c, 0xa, 0x3d, 0xa0, 0x0, 0x8c, 0x83, 0x7e,
-0x8c, 0x84, 0x7e, 0x8c, 0x87, 0x7d, 0xad, 0x9, 0x7f, 0xd0, 0x1, 0x60, 0xae, 0xa2, 0x75, 0xa9,
-0x2e, 0x9d, 0xa3, 0x75, 0xe8, 0xa9, 0x43, 0x9d, 0xa3, 0x75, 0xe8, 0x8e, 0xa2, 0x75, 0x60, 0x20,
-0x42, 0x45, 0x20, 0x54, 0x45, 0x20, 0x3d, 0x3f, 0xd0, 0xa, 0xa9, 0x6, 0x20, 0xd5, 0x11, 0xf0,
-0x3, 0x20, 0xed, 0x3e, 0x4c, 0xfb, 0x37, 0x20, 0xb4, 0x3d, 0x20, 0x18, 0x3f, 0xae, 0xa2, 0x75,
-0xe8, 0xa9, 0x0, 0x9d, 0xa3, 0x75, 0xa9, 0xf, 0x20, 0xdf, 0x3c, 0x20, 0x13, 0x3b, 0x4c, 0x30,
-0x3b, 0x41, 0x52, 0x45, 0x20, 0x59, 0x4f, 0x55, 0x20, 0x53, 0x55, 0x52, 0x45, 0x20, 0x59, 0x2f,
-0x4e, 0x0, 0xad, 0x9, 0x7f, 0x48, 0xa0, 0x0, 0x8c, 0x9, 0x7f, 0xa2, 0x3, 0x20, 0x32, 0x41,
-0xa9, 0x4e, 0x8d, 0xa3, 0x75, 0xa9, 0x30, 0x8d, 0xa4, 0x75, 0xa9, 0x3a, 0x8d, 0xa5, 0x75, 0x20,
-0xb1, 0x3e, 0x68, 0x8d, 0x9, 0x7f, 0x60, 0x20, 0x35, 0x45, 0xa9, 0x7, 0x85, 0xda, 0xa9, 0x3f,
-0x85, 0xdb, 0x20, 0x9, 0x52, 0x4c, 0x8c, 0x12, 0x20, 0x47, 0x3c, 0x4c, 0xfb, 0x37, 0x20, 0xe0,
-0x34, 0x4c, 0xc9, 0x11, 0xa0, 0x0, 0xb9, 0x0, 0x2, 0x99, 0xbc, 0x76, 0xc8, 0xc4, 0x81, 0x90,
-0xf5, 0x84, 0xab, 0xa9, 0x0, 0x99, 0xbc, 0x76, 0x60, 0xa9, 0x0, 0x8d, 0xd8, 0x7d, 0xa2, 0x0,
-0xbd, 0xdf, 0x7d, 0x8d, 0xd7, 0x7d, 0xe8, 0xbd, 0xdf, 0x7d, 0x20, 0x89, 0x3f, 0xe8, 0xe0, 0x5,
-0xd0, 0xf5, 0x60, 0x48, 0xad, 0xd8, 0x7d, 0x8d, 0xd9, 0x7d, 0xad, 0xd7, 0x7d, 0x8d, 0xda, 0x7d,
-0xe, 0xd7, 0x7d, 0x2e, 0xd8, 0x7d, 0xe, 0xd7, 0x7d, 0x2e, 0xd8, 0x7d, 0xad, 0xda, 0x7d, 0x6d,
-0xd7, 0x7d, 0x8d, 0xd7, 0x7d, 0xad, 0xd9, 0x7d, 0x6d, 0xd8, 0x7d, 0x8d, 0xd8, 0x7d, 0xe, 0xd7,
-0x7d, 0x2e, 0xd8, 0x7d, 0x68, 0x6d, 0xd7, 0x7d, 0x8d, 0xd7, 0x7d, 0xa9, 0x0, 0x6d, 0xd8, 0x7d,
-0x8d, 0xd8, 0x7d, 0x60, 0x8d, 0x11, 0x7d, 0xa2, 0x0, 0xa9, 0x0, 0xe8, 0xec, 0x11, 0x7d, 0xb0,
-0x5, 0x18, 0x69, 0x2, 0x90, 0xf5, 0x18, 0x69, 0x2, 0xa8, 0x18, 0x69, 0x2, 0x8d, 0x10, 0x7d,
-0x60, 0xad, 0xec, 0x7d, 0xd0, 0x1, 0x60, 0x20, 0x6f, 0x3f, 0xee, 0xf, 0x77, 0xad, 0xf, 0x77,
-0x20, 0xca, 0x3f, 0xad, 0xd7, 0x7d, 0x99, 0xf, 0x77, 0xc8, 0xad, 0xd8, 0x7d, 0x99, 0xf, 0x77,
-0x60, 0xad, 0xe, 0x77, 0xcd, 0xf, 0x77, 0x90, 0x9, 0xa9, 0x0, 0x8d, 0xe0, 0x7d, 0x8d, 0xe1,
-0x7d, 0x60, 0xee, 0xe, 0x77, 0x20, 0x48, 0x3a, 0xad, 0xe, 0x77, 0x20, 0xca, 0x3f, 0xb9, 0xf,
-0x77, 0x8d, 0xe0, 0x7d, 0xc8, 0xb9, 0xf, 0x77, 0x8d, 0xe1, 0x7d, 0x60, 0xa9, 0x0, 0x8d, 0xe,
-0x77, 0x8d, 0xf, 0x77, 0x8d, 0x78, 0x7d, 0x85, 0xb, 0xa5, 0xb, 0x85, 0x81, 0xa4, 0x81, 0x84,
-0xb, 0xb9, 0xbc, 0x76, 0xf0, 0x8, 0xc9, 0x3b, 0xf0, 0x5, 0xe6, 0x81, 0xd0, 0xef, 0x60, 0x84,
-0x82, 0xc0, 0x0, 0xf0, 0xf5, 0xa9, 0x0, 0x8d, 0xe, 0x7d, 0xc6, 0x82, 0xa4, 0x82, 0xb9, 0xbc,
-0x76, 0x20, 0xb1, 0x44, 0x90, 0x7, 0xee, 0xe, 0x7d, 0xc0, 0x0, 0xd0, 0xed, 0xad, 0xe, 0x7d,
-0xf0, 0xd8, 0x20, 0xb1, 0x44, 0xb0, 0x2, 0xe6, 0x82, 0x20, 0x48, 0x3a, 0xa9, 0x5, 0x38, 0xed,
-0xe, 0x7d, 0xaa, 0xa4, 0x82, 0xb9, 0xbc, 0x76, 0x20, 0xf4, 0x40, 0x9d, 0xdf, 0x7d, 0xe6, 0x82,
-0xe8, 0xe0, 0x5, 0x90, 0xee, 0x8e, 0xec, 0x7d, 0xe6, 0xb, 0x20, 0xe7, 0x3f, 0x20, 0x48, 0x3a,
-0xa4, 0xb, 0xa2, 0x0, 0xb9, 0xbc, 0x76, 0x20, 0xb1, 0x44, 0x90, 0xe, 0x20, 0xf4, 0x40, 0x9d,
-0xdf, 0x7d, 0xe0, 0x5, 0xb0, 0x4, 0xe8, 0xc8, 0xd0, 0xea, 0xe0, 0x0, 0xd0, 0x3, 0x4c, 0x3f,
-0x40, 0x8e, 0xec, 0x7d, 0xa0, 0x5, 0x88, 0xca, 0xbd, 0xdf, 0x7d, 0x99, 0xdf, 0x7d, 0xe0, 0x0,
-0xd0, 0xf4, 0xa9, 0x0, 0xc0, 0x0, 0xf0, 0x9, 0x88, 0x99, 0xdf, 0x7d, 0x88, 0xc0, 0xff, 0xd0,
-0xf8, 0x20, 0xe7, 0x3f, 0x4c, 0x3f, 0x40, 0x20, 0x7, 0x40, 0xad, 0xe0, 0x7d, 0x60, 0xc9, 0x3a,
-0xb0, 0x4, 0x38, 0xe9, 0x30, 0x60, 0x38, 0xe9, 0x37, 0x60, 0x20, 0x30, 0x35, 0xad, 0xc4, 0x31,
-0xf0, 0x1c, 0xad, 0x1c, 0x7f, 0xd0, 0x9, 0xee, 0x1c, 0x7f, 0x20, 0xe0, 0x34, 0x4c, 0x69, 0x37,
-0xad, 0x8e, 0x7e, 0xd0, 0x3, 0x20, 0xe0, 0x34, 0x8d, 0x9, 0x7f, 0x4c, 0xc9, 0x11, 0x4c, 0x9a,
-0x32, 0x20, 0x14, 0x12, 0xa9, 0x93, 0x20, 0xd2, 0xff, 0x4c, 0xfb, 0x37, 0xb9, 0xa3, 0x75, 0x9d,
-0x4f, 0x75, 0xe8, 0xc8, 0xcc, 0xa2, 0x75, 0x90, 0xf3, 0x8e, 0xa2, 0x75, 0xa2, 0x0, 0xbd, 0x4f,
-0x75, 0x9d, 0xa3, 0x75, 0xe8, 0xec, 0xa2, 0x75, 0x90, 0xf4, 0x60, 0x20, 0x6d, 0x41, 0xac, 0xa2,
-0x75, 0xa9, 0x2c, 0x99, 0xa3, 0x75, 0xc8, 0xa9, 0x53, 0x99, 0xa3, 0x75, 0xc8, 0xa9, 0x2c, 0x99,
-0xa3, 0x75, 0xc8, 0x8c, 0xa2, 0x75, 0x60, 0xa0, 0x0, 0xa2, 0x2, 0x20, 0x32, 0x41, 0xa9, 0x30,
-0x8d, 0xa3, 0x75, 0xa9, 0x3a, 0x8d, 0xa4, 0x75, 0x60, 0x20, 0x51, 0x41, 0xac, 0xa2, 0x75, 0xa9,
-0x52, 0x99, 0xa3, 0x75, 0xc8, 0x8c, 0xa2, 0x75, 0x60, 0x20, 0x51, 0x41, 0xac, 0xa2, 0x75, 0xa9,
-0x57, 0x99, 0xa3, 0x75, 0xc8, 0x8c, 0xa2, 0x75, 0x60, 0x20, 0x30, 0x3b, 0x20, 0xb1, 0x3e, 0x20,
-0x6d, 0x41, 0xa9, 0x53, 0x8d, 0xa3, 0x75, 0xa9, 0xf, 0x20, 0xdf, 0x3c, 0xad, 0xa2, 0x75, 0x48,
-0xa9, 0x0, 0x85, 0x7c, 0x8d, 0xa2, 0x75, 0x20, 0x13, 0x3b, 0x68, 0x8d, 0xa2, 0x75, 0x20, 0x34,
-0x3c, 0x4c, 0xa6, 0x3e, 0x20, 0x54, 0x45, 0xa9, 0x2, 0x20, 0xd5, 0x11, 0xf0, 0x1c, 0x20, 0x2d,
-0x43, 0x86, 0x78, 0x86, 0x53, 0xe0, 0x0, 0xd0, 0x1a, 0x20, 0x36, 0x3b, 0xa5, 0x78, 0xd0, 0x13,
-0x20, 0xd3, 0x42, 0xa5, 0x78, 0xd0, 0xc, 0x20, 0x12, 0x42, 0x20, 0xae, 0xff, 0x20, 0xa6, 0x3e,
-0x4c, 0xfb, 0x37, 0xa9, 0x4, 0x20, 0xd5, 0x11, 0xd0, 0xd4, 0xf0, 0xee, 0x20, 0x54, 0x45, 0xa9,
-0x3, 0x20, 0xd5, 0x11, 0xf0, 0x3, 0x20, 0x9f, 0x41, 0x4c, 0xfb, 0x37, 0xad, 0x5d, 0x7f, 0x85,
-0xd8, 0xad, 0x5e, 0x7f, 0x85, 0xd9, 0xa0, 0x0, 0x20, 0x60, 0x43, 0x85, 0x52, 0x20, 0x54, 0x3b,
-0x86, 0x78, 0xe0, 0x0, 0xd0, 0x8, 0x20, 0x35, 0x42, 0x20, 0x3c, 0x42, 0xb0, 0xe8, 0x60, 0xe6,
-0xd8, 0xd0, 0x2, 0xe6, 0xd9, 0x60, 0xad, 0x5b, 0x7f, 0x38, 0xe5, 0xd8, 0xad, 0x5c, 0x7f, 0xe5,
-0xd9, 0x60, 0x20, 0x54, 0x45, 0xa9, 0x1, 0x20, 0xd5, 0x11, 0xf0, 0x1c, 0x20, 0x36, 0x43, 0x86,
-0x78, 0x86, 0x53, 0xe0, 0x0, 0xd0, 0x1d, 0x20, 0x45, 0x3b, 0xa5, 0x78, 0xd0, 0x16, 0x20, 0xa4,
-0x42, 0xa5, 0x78, 0xd0, 0xf, 0x20, 0x82, 0x42, 0x20, 0xab, 0x3a, 0x20, 0xa6, 0x3e, 0x20, 0x4e,
-0x35, 0x4c, 0xab, 0x39, 0xa9, 0x5, 0x20, 0xd5, 0x11, 0x4c, 0x6e, 0x42, 0xad, 0x5d, 0x7f, 0x85,
-0xd8, 0xad, 0x5e, 0x7f, 0x85, 0xd9, 0x20, 0x7c, 0x3b, 0x86, 0x78, 0xe0, 0x0, 0xd0, 0xe, 0xa0,
-0x0, 0xa5, 0x52, 0x91, 0xd8, 0x20, 0x35, 0x42, 0x20, 0x3c, 0x42, 0xb0, 0xe9, 0x60, 0xa0, 0x0,
-0x8c, 0x3d, 0x7d, 0x20, 0xf, 0x43, 0xac, 0x3d, 0x7d, 0x99, 0x53, 0x7f, 0xee, 0x3d, 0x7d, 0xac,
-0x3d, 0x7d, 0xc0, 0xc, 0x90, 0xed, 0x20, 0xf, 0x43, 0x85, 0x44, 0x20, 0xf, 0x43, 0x85, 0x43,
-0x20, 0xf, 0x43, 0x85, 0x31, 0x20, 0xf, 0x43, 0x85, 0x32, 0x4c, 0xc7, 0x49, 0x20, 0x7, 0x4e,
-0xad, 0x26, 0x7d, 0x8d, 0x5b, 0x7f, 0xad, 0x27, 0x7d, 0x8d, 0x5c, 0x7f, 0xa0, 0x0, 0x8c, 0x3d,
-0x7d, 0xac, 0x3d, 0x7d, 0xb9, 0x53, 0x7f, 0x20, 0x1d, 0x43, 0xee, 0x3d, 0x7d, 0xac, 0x3d, 0x7d,
-0xc0, 0xc, 0x90, 0xed, 0xa5, 0x44, 0x20, 0x1d, 0x43, 0xa5, 0x43, 0x20, 0x1d, 0x43, 0xa5, 0x31,
-0x20, 0x1d, 0x43, 0xa5, 0x32, 0x20, 0x1d, 0x43, 0x60, 0x20, 0x7c, 0x3b, 0x86, 0x78, 0x86, 0x53,
-0xe0, 0x0, 0xf0, 0x2, 0x68, 0x68, 0x60, 0x85, 0x52, 0x20, 0x54, 0x3b, 0x86, 0x78, 0x86, 0x53,
-0xe0, 0x0, 0xf0, 0xf2, 0x68, 0x68, 0x60, 0x20, 0xb1, 0x3e, 0x20, 0x8f, 0x41, 0x4c, 0x3c, 0x43,
-0x20, 0xb1, 0x3e, 0x20, 0x7f, 0x41, 0xa9, 0x0, 0x85, 0x78, 0xa9, 0x2, 0x20, 0xdf, 0x3c, 0x4c,
-0x13, 0x3b, 0x48, 0xa9, 0x0, 0x78, 0x8d, 0x3e, 0xff, 0x8d, 0xc5, 0x31, 0x58, 0x68, 0x60, 0x78,
-0x8d, 0x3f, 0xff, 0xb1, 0xda, 0x8d, 0x3e, 0xff, 0x58, 0x60, 0x78, 0x8d, 0x3f, 0xff, 0xb1, 0xd8,
-0x8d, 0x3e, 0xff, 0x58, 0x60, 0x78, 0x8d, 0x3f, 0xff, 0xb9, 0x0, 0x81, 0x8d, 0x3e, 0xff, 0x58,
-0x60, 0xad, 0xc6, 0x7d, 0x18, 0x69, 0x1, 0xa, 0xa8, 0xb9, 0x91, 0x43, 0x9, 0x70, 0x8d, 0xc5,
-0x7d, 0x88, 0xb9, 0x91, 0x43, 0x9, 0x70, 0x8d, 0xc4, 0x7d, 0x60, 0x0, 0x7, 0x1, 0x0, 0x2,
-0x7, 0x1, 0x0, 0x6, 0x0, 0x1, 0x0, 0x1, 0x3, 0x1, 0x0, 0x2, 0x7, 0x1, 0x7, 0x1,
-0x0, 0x1, 0x7, 0x1, 0x0, 0x1, 0x0, 0x1, 0x6, 0x1, 0x0, 0x1, 0x20, 0x77, 0x43, 0xa9,
-0xe, 0x20, 0xee, 0x44, 0xa9, 0x8, 0x20, 0xee, 0x44, 0xad, 0xc6, 0x7d, 0x9, 0x30, 0x8d, 0x19,
-0xff, 0x8d, 0x15, 0xff, 0xad, 0xc4, 0x7d, 0x8d, 0x3b, 0x5, 0x60, 0xa2, 0xff, 0x86, 0xb, 0xa9,
-0x0, 0x8d, 0xf, 0x77, 0x8d, 0x78, 0x7d, 0x8d, 0xe, 0x77, 0xa9, 0x0, 0x8d, 0x10, 0x7d, 0x20,
-0x3c, 0x37, 0xd0, 0x1, 0x60, 0xc9, 0x3b, 0xd0, 0xf6, 0xa5, 0xb, 0x8d, 0x11, 0x7d, 0xc6, 0xb,
-0xa5, 0xb, 0xc9, 0xff, 0xf0, 0xa, 0xc6, 0xb, 0xa5, 0xb, 0xc9, 0xff, 0xf0, 0x2, 0xc6, 0xb,
-0x20, 0x3c, 0x37, 0xf0, 0xdf, 0x20, 0xb1, 0x44, 0x90, 0xf6, 0xa0, 0x1, 0x84, 0x81, 0x38, 0xe9,
-0x30, 0x99, 0xdf, 0x7d, 0xa4, 0xb, 0x8c, 0xe, 0x7d, 0xee, 0xe, 0x7d, 0xac, 0xe, 0x7d, 0xb9,
-0xbc, 0x76, 0x20, 0xb1, 0x44, 0x90, 0xd, 0xe6, 0x81, 0xa4, 0x81, 0x38, 0xe9, 0x30, 0x99, 0xdf,
-0x7d, 0x4c, 0x1f, 0x44, 0xa4, 0x81, 0xc0, 0x2, 0x90, 0x58, 0xad, 0xe1, 0x7d, 0x8d, 0xdf, 0x7d,
-0xae, 0xe0, 0x7d, 0xad, 0xdf, 0x7d, 0x18, 0x69, 0xa, 0x8d, 0xdf, 0x7d, 0xca, 0xd0, 0xf4, 0xc6,
-0x81, 0xee, 0xf, 0x77, 0xee, 0x37, 0x77, 0xac, 0x37, 0x77, 0xa5, 0xb, 0x99, 0x37, 0x77, 0xee,
-0x4c, 0x77, 0xac, 0x4c, 0x77, 0xa9, 0x4e, 0x99, 0x4c, 0x77, 0xac, 0xf, 0x77, 0xad, 0xdf, 0x7d,
-0x99, 0xf, 0x77, 0xa5, 0xb, 0x99, 0x23, 0x77, 0x18, 0x65, 0x81, 0x85, 0xb, 0xee, 0x10, 0x7d,
-0xad, 0x10, 0x7d, 0xc9, 0x2, 0x90, 0x3, 0x4c, 0xe0, 0x43, 0xad, 0x11, 0x7d, 0x85, 0xb, 0x4c,
-0x6, 0x44, 0xad, 0xe0, 0x7d, 0x8d, 0xdf, 0x7d, 0x4c, 0x57, 0x44, 0xad, 0x10, 0x7d, 0xf0, 0xe7,
-0xad, 0xf, 0x77, 0xf0, 0xe2, 0xce, 0xf, 0x77, 0x4c, 0xe0, 0x43, 0x8c, 0x79, 0x7d, 0xc9, 0x30,
-0x90, 0x9, 0xc9, 0x3a, 0xb0, 0x5, 0xac, 0x79, 0x7d, 0x38, 0x60, 0xac, 0x78, 0x7d, 0xc0, 0x0,
-0xd0, 0x5, 0xac, 0x79, 0x7d, 0x18, 0x60, 0xc9, 0x2e, 0xf0, 0xeb, 0xc9, 0x45, 0xf0, 0xe7, 0xc9,
-0x2b, 0xf0, 0x9, 0xc9, 0x2d, 0xf0, 0x5, 0xac, 0x79, 0x7d, 0x18, 0x60, 0xac, 0x78, 0x7d, 0xc0,
-0x2, 0x90, 0xd3, 0xac, 0x79, 0x7d, 0x18, 0x60, 0x48, 0xad, 0x84, 0x7e, 0x5, 0x45, 0xd0, 0x4,
-0x68, 0x4c, 0xd2, 0xff, 0x8c, 0x8d, 0x7e, 0xee, 0x3, 0x73, 0xac, 0x3, 0x73, 0x68, 0x99, 0x3,
-0x73, 0xac, 0x8, 0x7f, 0xc0, 0x0, 0xd0, 0x6, 0xac, 0x8d, 0x7e, 0x4c, 0xd2, 0xff, 0xac, 0x8d,
-0x7e, 0x60, 0xc9, 0xd, 0xd0, 0x3, 0xa9, 0x20, 0x60, 0x85, 0x52, 0x29, 0x3f, 0x85, 0x53, 0xa5,
-0x52, 0x29, 0x80, 0x4a, 0x5, 0x53, 0x60, 0xa6, 0x49, 0xa4, 0xc, 0x18, 0x4c, 0xf0, 0xff, 0xad,
-0x35, 0x7d, 0x85, 0x49, 0xad, 0x36, 0x7d, 0x85, 0xc, 0x4c, 0x2d, 0x45, 0x20, 0x35, 0x45, 0xa0,
-0x0, 0xa9, 0x20, 0x20, 0xee, 0x44, 0xc8, 0xc0, 0x29, 0x90, 0xf8, 0x4c, 0x35, 0x45, 0xa5, 0x45,
-0xf0, 0x5, 0x68, 0x68, 0x4c, 0xfb, 0x37, 0x60, 0x20, 0x63, 0x4d, 0xa0, 0x4, 0x20, 0x60, 0x43,
-0x18, 0x69, 0x4, 0x65, 0x3, 0x8d, 0x8, 0x7d, 0xa9, 0x0, 0x65, 0x4, 0x8d, 0x9, 0x7d, 0xa0,
-0x0, 0xad, 0x8, 0x7d, 0x91, 0xd8, 0x85, 0x3, 0xc8, 0xad, 0x9, 0x7d, 0x91, 0xd8, 0x85, 0x4,
-0x60, 0xad, 0x55, 0x7f, 0x8d, 0xb7, 0x75, 0xad, 0x56, 0x7f, 0x8d, 0xb8, 0x75, 0xa5, 0x31, 0x8d,
-0xb9, 0x75, 0xa5, 0x32, 0x8d, 0xba, 0x75, 0x60, 0x20, 0x5e, 0x45, 0xa5, 0x3, 0x8d, 0x53, 0x7f,
-0xa5, 0x4, 0x8d, 0x54, 0x7f, 0x20, 0x87, 0x45, 0x4c, 0xce, 0x4e, 0x20, 0xb7, 0x45, 0x4c, 0xd2,
-0x55, 0x20, 0x2, 0x54, 0x20, 0xda, 0x45, 0xa0, 0x4, 0xad, 0x3b, 0x7d, 0x85, 0x7c, 0x38, 0xe9,
-0x2, 0x85, 0xe3, 0xa2, 0x0, 0x20, 0x60, 0x43, 0x9d, 0xbb, 0x75, 0xe8, 0xc8, 0xe4, 0x7c, 0x90,
-0xf4, 0x4c, 0x5c, 0x4d, 0x20, 0x2a, 0x46, 0xa5, 0x3, 0x85, 0xd8, 0xa5, 0x4, 0x85, 0xd9, 0xa0,
-0x0, 0x20, 0x60, 0x43, 0x85, 0x3, 0xc8, 0x20, 0x60, 0x43, 0x85, 0x4, 0xc8, 0x20, 0x60, 0x43,
-0x85, 0x31, 0xc8, 0x20, 0x60, 0x43, 0x85, 0x32, 0xc8, 0x20, 0x60, 0x43, 0x8d, 0x3b, 0x7d, 0xc8,
-0x20, 0x60, 0x43, 0x48, 0x29, 0x7, 0x85, 0xe7, 0x68, 0x48, 0x29, 0x80, 0x8d, 0x43, 0x7d, 0x68,
-0x48, 0x29, 0x40, 0x8d, 0x82, 0x7d, 0x68, 0x48, 0x29, 0x20, 0x8d, 0x4a, 0x7d, 0x68, 0x29, 0x18,
-0x8d, 0x84, 0x7d, 0x60, 0xa5, 0x3, 0x8d, 0x1d, 0x7d, 0xa5, 0x4, 0x8d, 0x1e, 0x7d, 0x60, 0xad,
-0x1d, 0x7d, 0x85, 0x3, 0xad, 0x1e, 0x7d, 0x85, 0x4, 0x60, 0xa5, 0x3, 0xcd, 0x5d, 0x7f, 0xd0,
-0xa, 0xa5, 0x4, 0xcd, 0x5e, 0x7f, 0xd0, 0x3, 0xa9, 0x1, 0x60, 0xa9, 0x0, 0x60, 0x5, 0x7,
-0x0, 0x6, 0x4, 0x4, 0x0, 0x8, 0x2, 0x20, 0x2a, 0x46, 0xa5, 0x3, 0x85, 0xd8, 0xa5, 0x4,
-0x85, 0xd9, 0xa0, 0x0, 0x20, 0x60, 0x43, 0x85, 0x3, 0xc8, 0x20, 0x60, 0x43, 0x85, 0x4, 0xc8,
-0x20, 0x60, 0x43, 0xc5, 0x5, 0xd0, 0x6, 0xc8, 0x20, 0x60, 0x43, 0xc5, 0x6, 0x8, 0x28, 0x60,
-0xad, 0xa, 0x7d, 0x85, 0x3, 0xad, 0xb, 0x7d, 0x85, 0x4, 0x4c, 0xaa, 0x46, 0xad, 0x5d, 0x7f,
-0x85, 0xda, 0xad, 0x5e, 0x7f, 0x85, 0xdb, 0xa0, 0x0, 0x20, 0x55, 0x43, 0x85, 0x3, 0xc8, 0x20,
-0x55, 0x43, 0x85, 0x4, 0xa9, 0x0, 0x85, 0xe2, 0xa5, 0x3, 0xcd, 0x5d, 0x7f, 0xd0, 0xc, 0xa5,
-0x4, 0xcd, 0x5e, 0x7f, 0xd0, 0x5, 0xa9, 0x1, 0x85, 0xe2, 0x60, 0x20, 0x5d, 0x46, 0xd0, 0xe8,
-0x4c, 0x35, 0x46, 0xa5, 0x5, 0xc5, 0x44, 0x90, 0x2, 0xa5, 0x44, 0x20, 0xa1, 0x47, 0x20, 0x6b,
-0x43, 0x85, 0x3, 0x8d, 0xa, 0x7d, 0xc8, 0x20, 0x6b, 0x43, 0x85, 0x4, 0x8d, 0xb, 0x7d, 0x60,
-0xa5, 0x5, 0x20, 0xa1, 0x47, 0xa5, 0x3, 0x99, 0x0, 0x81, 0xa5, 0x4, 0x99, 0x1, 0x81, 0x60,
-0xa5, 0x31, 0x8d, 0x13, 0x7f, 0xa5, 0x32, 0x8d, 0x14, 0x7f, 0xa5, 0x5, 0x8d, 0x15, 0x7f, 0xa5,
-0x6, 0x8d, 0x16, 0x7f, 0xa9, 0x0, 0x85, 0x5, 0x85, 0x6, 0xa8, 0xad, 0x5d, 0x7f, 0x85, 0xd8,
-0xad, 0x5e, 0x7f, 0x85, 0xd9, 0x20, 0x60, 0x43, 0x85, 0x3, 0x8d, 0xa, 0x7d, 0xc8, 0x20, 0x60,
-0x43, 0x85, 0x4, 0x8d, 0xb, 0x7d, 0x20, 0xaa, 0x46, 0xa5, 0xe2, 0xd0, 0x7, 0x20, 0xe6, 0x46,
-0xe6, 0x5, 0xd0, 0xf2, 0x20, 0xe6, 0x46, 0xad, 0x16, 0x7f, 0x85, 0x6, 0xad, 0x15, 0x7f, 0x85,
-0x5, 0xad, 0x14, 0x7f, 0x85, 0x32, 0xad, 0x13, 0x7f, 0x85, 0x31, 0x60, 0x20, 0xa8, 0x47, 0x20,
-0x98, 0x47, 0xf0, 0x2, 0xb0, 0xf5, 0x20, 0xa1, 0x47, 0x20, 0x6b, 0x43, 0x38, 0xed, 0x28, 0x7d,
-0x99, 0x0, 0x81, 0xc8, 0x20, 0x6b, 0x43, 0xe9, 0x0, 0x99, 0x0, 0x81, 0x4c, 0x55, 0x47, 0x20,
-0xa8, 0x47, 0x20, 0x98, 0x47, 0xf0, 0x2, 0xb0, 0xd2, 0x20, 0xa1, 0x47, 0x20, 0x6b, 0x43, 0x18,
-0x6d, 0x28, 0x7d, 0x99, 0x0, 0x81, 0xc8, 0x20, 0x6b, 0x43, 0x69, 0x0, 0x99, 0x0, 0x81, 0x4c,
-0x78, 0x47, 0xee, 0x12, 0x7f, 0xad, 0x12, 0x7f, 0xc5, 0x44, 0x60, 0x18, 0x69, 0x1, 0xa, 0xa8,
-0x88, 0x60, 0xa5, 0xe1, 0xf0, 0x5, 0x68, 0x68, 0x4c, 0xf6, 0x46, 0xa5, 0x5, 0x8d, 0x12, 0x7f,
-0x60, 0xa2, 0xfb, 0x8e, 0x9, 0x7f, 0x78, 0x9a, 0x58, 0x20, 0xc1, 0x54, 0xad, 0xa7, 0x2, 0xf0,
-0x6, 0x20, 0x9a, 0x68, 0x4c, 0xb7, 0x47, 0x20, 0xdf, 0x47, 0xad, 0x1f, 0x7d, 0xd0, 0x1, 0x60,
-0x20, 0xa5, 0x49, 0x20, 0x7e, 0x52, 0x4c, 0xb7, 0x47, 0x20, 0x28, 0x49, 0xa5, 0xe7, 0xd, 0x43,
-0x7d, 0x8d, 0xbc, 0x75, 0xa5, 0x45, 0xd0, 0xf, 0xad, 0xbc, 0x75, 0xd, 0x85, 0x7d, 0xd, 0x83,
-0x7d, 0x8d, 0xbc, 0x75, 0x4c, 0x9, 0x48, 0xad, 0xbc, 0x75, 0xd, 0x84, 0x7d, 0xd, 0x4a, 0x7d,
-0x8d, 0xbc, 0x75, 0xa5, 0xe3, 0x18, 0x69, 0x3, 0x8d, 0xbb, 0x75, 0xad, 0xbb, 0x75, 0x18, 0x6d,
-0xc2, 0x75, 0x8d, 0xbb, 0x75, 0x4c, 0x6c, 0x4d, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37,
-0x20, 0xb6, 0x49, 0x20, 0xa3, 0x9e, 0x20, 0x46, 0x48, 0x4c, 0xf1, 0x37, 0x20, 0xa0, 0x38, 0xb0,
-0x3, 0x4c, 0xf1, 0x37, 0x20, 0xda, 0x4f, 0x20, 0xce, 0x4f, 0x20, 0x46, 0x48, 0x4c, 0xf1, 0x37,
-0x20, 0xa5, 0x49, 0x20, 0xc2, 0x55, 0xa9, 0x1, 0x85, 0xe7, 0xad, 0x4c, 0x7d, 0xd0, 0x3, 0x4c,
-0xdf, 0x47, 0x20, 0xe3, 0x53, 0xa9, 0x0, 0x8d, 0x4c, 0x7d, 0xad, 0x4e, 0x7d, 0x85, 0xe7, 0x4c,
-0xdf, 0x47, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0xb6, 0x49, 0x20, 0x87, 0x9e,
-0x20, 0x46, 0x48, 0x4c, 0xf1, 0x37, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x20, 0xb6,
-0x49, 0xa5, 0x61, 0x20, 0x7b, 0xa0, 0x20, 0x46, 0x48, 0x4c, 0xf1, 0x37, 0xa0, 0x5, 0xa9, 0x0,
-0x99, 0x61, 0x0, 0x88, 0x10, 0xfa, 0x85, 0x70, 0x60, 0xa9, 0x0, 0x8d, 0x73, 0x7d, 0xad, 0x41,
-0x7d, 0xa, 0xa8, 0xb9, 0xc4, 0x48, 0x8d, 0x36, 0x3, 0x88, 0xb9, 0xc4, 0x48, 0x8d, 0x35, 0x3,
-0xa9, 0x4c, 0x8d, 0x34, 0x3, 0xad, 0x5, 0x7f, 0xd0, 0x3, 0x4c, 0x47, 0x4c, 0x60, 0x0, 0xa3,
-0x9e, 0x87, 0x9e, 0xd1, 0x48, 0xe1, 0x48, 0xd0, 0x61, 0xef, 0x61, 0xad, 0x73, 0x7d, 0xd0, 0x6,
-0xee, 0x73, 0x7d, 0x4c, 0x81, 0xa2, 0xa5, 0x61, 0x4c, 0x7b, 0xa0, 0xad, 0x73, 0x7d, 0xd0, 0x6,
-0xee, 0x73, 0x7d, 0x4c, 0x81, 0xa2, 0xa5, 0x69, 0xf0, 0x7, 0xa5, 0x61, 0xf0, 0x3, 0x20, 0x97,
-0xa1, 0x60, 0xa9, 0x2, 0x8d, 0x41, 0x7d, 0x4c, 0x9f, 0x48, 0xa9, 0x3, 0x8d, 0x41, 0x7d, 0x4c,
-0x9f, 0x48, 0xa9, 0x4, 0x8d, 0x41, 0x7d, 0x4c, 0x9f, 0x48, 0xa9, 0x5, 0x8d, 0x41, 0x7d, 0x4c,
-0x9f, 0x48, 0xa9, 0x6, 0x8d, 0x41, 0x7d, 0x4c, 0x9f, 0x48, 0xa9, 0x1, 0x8d, 0x41, 0x7d, 0x4c,
-0x9f, 0x48, 0xa5, 0xe7, 0xc9, 0x4, 0xf0, 0x5, 0xc9, 0x2, 0xf0, 0x7, 0x60, 0xa9, 0x80, 0x8d,
-0x43, 0x7d, 0x60, 0xa9, 0x0, 0x8d, 0x43, 0x7d, 0x60, 0x20, 0x54, 0x45, 0x20, 0xf4, 0x4f, 0xa5,
-0x31, 0x85, 0xe5, 0xa5, 0x32, 0x85, 0xe6, 0x20, 0xda, 0x4f, 0x20, 0x28, 0x49, 0xad, 0x43, 0x7d,
-0x9, 0x40, 0x8d, 0x43, 0x7d, 0x20, 0xe2, 0x47, 0x4c, 0xf1, 0x37, 0x20, 0x54, 0x45, 0x20, 0xf4,
-0x4f, 0xa5, 0x31, 0x85, 0xe5, 0xa5, 0x32, 0x85, 0xe6, 0x20, 0xda, 0x4f, 0xa9, 0x0, 0x8d, 0x82,
-0x7d, 0x20, 0xdf, 0x47, 0x4c, 0xf1, 0x37, 0xa9, 0x0, 0x8d, 0x83, 0x7d, 0x4c, 0xf1, 0x37, 0xa9,
-0x20, 0x8d, 0x83, 0x7d, 0x4c, 0xf1, 0x37, 0xa9, 0x8, 0x8d, 0x85, 0x7d, 0x4c, 0xf1, 0x37, 0xa9,
-0x0, 0x8d, 0x85, 0x7d, 0x4c, 0xf1, 0x37, 0xa9, 0x10, 0x8d, 0x85, 0x7d, 0x4c, 0xf1, 0x37, 0x20,
-0xf4, 0x4f, 0xa5, 0x31, 0x85, 0xe5, 0xa5, 0x32, 0x85, 0xe6, 0x20, 0xda, 0x4f, 0x4c, 0xf4, 0x4f,
-0xa5, 0x6e, 0x45, 0x66, 0x85, 0x6f, 0xa5, 0x6a, 0x5, 0x6e, 0x9, 0x80, 0x85, 0x6a, 0xa5, 0x61,
-0x60, 0xa5, 0x31, 0x8d, 0x2d, 0x7d, 0xa5, 0x32, 0x8d, 0x2e, 0x7d, 0xad, 0x59, 0x7f, 0x8d, 0x2b,
-0x7d, 0xad, 0x5a, 0x7f, 0x8d, 0x2c, 0x7d, 0xad, 0x57, 0x7f, 0x8d, 0x63, 0x7e, 0xad, 0x58, 0x7f,
-0x8d, 0x64, 0x7e, 0x60, 0x86, 0x81, 0xc9, 0x0, 0xd0, 0x2, 0x18, 0x60, 0x38, 0xe9, 0x1, 0xc5,
-0x81, 0xf0, 0x2, 0xb0, 0xf5, 0x38, 0x60, 0x20, 0x53, 0x60, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0xa5,
-0x69, 0xf0, 0x10, 0x20, 0xb6, 0x49, 0xa5, 0x61, 0xf0, 0x3, 0x20, 0x97, 0xa1, 0x20, 0x46, 0x48,
-0x4c, 0xf1, 0x37, 0x20, 0x92, 0x48, 0x20, 0x94, 0xa2, 0x4c, 0x13, 0x4a, 0xa5, 0x45, 0xd0, 0xa,
-0xa9, 0x1, 0x8d, 0x4c, 0x7d, 0x20, 0xa0, 0x38, 0xb0, 0xb, 0xa9, 0x0, 0x8d, 0x4c, 0x7d, 0x8d,
-0x55, 0x7d, 0x4c, 0xf1, 0x37, 0x20, 0xda, 0x4f, 0xa5, 0xe5, 0x8d, 0x50, 0x7d, 0xa5, 0xe6, 0x8d,
-0x53, 0x7d, 0x20, 0xce, 0x4f, 0x20, 0x56, 0x4d, 0xa5, 0xe7, 0xd, 0x43, 0x7d, 0x8d, 0x4e, 0x7d,
-0x20, 0xd2, 0x53, 0xad, 0x55, 0x7d, 0xf0, 0x3, 0x20, 0xae, 0x4a, 0x20, 0x46, 0x48, 0xad, 0x88,
-0x7d, 0xd0, 0x3, 0x4c, 0xf1, 0x37, 0xa9, 0x0, 0x8d, 0x88, 0x7d, 0x8d, 0x4c, 0x7d, 0x60, 0x20,
-0xf4, 0x4f, 0xa5, 0x31, 0x8d, 0x4f, 0x7d, 0xa5, 0x32, 0x8d, 0x52, 0x7d, 0xa9, 0x1, 0x8d, 0x55,
-0x7d, 0x4c, 0x22, 0x4a, 0xd0, 0x8, 0xad, 0xdf, 0x7d, 0x38, 0xed, 0xe0, 0x7d, 0x60, 0xad, 0xe0,
-0x7d, 0x38, 0xed, 0xdf, 0x7d, 0x60, 0xd0, 0x8, 0xad, 0xdf, 0x7d, 0x18, 0x6d, 0xe0, 0x7d, 0x60,
-0xad, 0xe0, 0x7d, 0x38, 0xed, 0xdf, 0x7d, 0x60, 0xa5, 0x7c, 0x85, 0xe3, 0x20, 0x78, 0x53, 0x20,
-0xc, 0x38, 0x20, 0xd1, 0x43, 0xa9, 0x0, 0x8d, 0x56, 0x7d, 0x8d, 0x57, 0x7d, 0xad, 0x4f, 0x7d,
-0xcd, 0x50, 0x7d, 0xb0, 0x3, 0xee, 0x56, 0x7d, 0xad, 0x52, 0x7d, 0xcd, 0x53, 0x7d, 0xb0, 0x3,
-0xee, 0x57, 0x7d, 0xad, 0x4f, 0x7d, 0x8d, 0xdf, 0x7d, 0xad, 0x50, 0x7d, 0x8d, 0xe0, 0x7d, 0xad,
-0x56, 0x7d, 0x20, 0x8a, 0x4a, 0x8d, 0x51, 0x7d, 0xad, 0x52, 0x7d, 0x8d, 0xdf, 0x7d, 0xad, 0x53,
-0x7d, 0x8d, 0xe0, 0x7d, 0xad, 0x57, 0x7d, 0x20, 0x8a, 0x4a, 0x8d, 0x54, 0x7d, 0x20, 0x25, 0x38,
-0x90, 0x2, 0x38, 0x60, 0x8d, 0xe0, 0x7d, 0x8d, 0x58, 0x7d, 0xad, 0x51, 0x7d, 0x8d, 0xdf, 0x7d,
-0xad, 0x56, 0x7d, 0x20, 0x9c, 0x4a, 0xa6, 0x44, 0x20, 0x52, 0x4b, 0x20, 0x25, 0x38, 0x90, 0x2,
-0x38, 0x60, 0x8d, 0xe0, 0x7d, 0x8d, 0x58, 0x7d, 0xad, 0x54, 0x7d, 0x8d, 0xdf, 0x7d, 0xad, 0x57,
-0x7d, 0x20, 0x9c, 0x4a, 0xa6, 0x43, 0x20, 0x52, 0x4b, 0x4c, 0x3, 0x4b, 0xac, 0xe, 0x77, 0x48,
-0xb9, 0x23, 0x77, 0xa8, 0x68, 0x18, 0x69, 0x30, 0x99, 0x22, 0x76, 0x60, 0x20, 0x93, 0x4b, 0xb0,
-0x1, 0x60, 0x8d, 0xdf, 0x7d, 0x20, 0xe2, 0x4b, 0xf0, 0x3, 0x20, 0x9f, 0x4b, 0xad, 0xdf, 0x7d,
-0xc9, 0xa, 0xb0, 0x3, 0x4c, 0x42, 0x4b, 0xa2, 0x0, 0xad, 0xdf, 0x7d, 0xe8, 0x38, 0xe9, 0xa,
-0x8d, 0xdf, 0x7d, 0xb0, 0xf4, 0xca, 0xa9, 0xa, 0x6d, 0xdf, 0x7d, 0x8d, 0xdf, 0x7d, 0x8a, 0x20,
-0x42, 0x4b, 0xad, 0xdf, 0x7d, 0xc8, 0x18, 0x69, 0x30, 0x99, 0x22, 0x76, 0x60, 0xe8, 0xe8, 0x86,
-0x81, 0xc5, 0x81, 0xb0, 0x2, 0x38, 0x60, 0x18, 0x60, 0xad, 0xdf, 0x7d, 0xc9, 0xa, 0xb0, 0x3,
-0x4c, 0x12, 0x4c, 0xac, 0xe, 0x77, 0xb9, 0x23, 0x77, 0x85, 0x81, 0xa4, 0x7c, 0xa6, 0x7c, 0xca,
-0xbd, 0x22, 0x76, 0x99, 0x22, 0x76, 0xca, 0x88, 0xc4, 0x81, 0xd0, 0xf4, 0xe6, 0x7c, 0xe6, 0xe3,
-0xee, 0x21, 0x76, 0xee, 0x4d, 0x7d, 0xac, 0xe, 0x77, 0xc8, 0xb9, 0x23, 0x77, 0x18, 0x69, 0x1,
-0x99, 0x23, 0x77, 0xc8, 0xcc, 0xf, 0x77, 0x90, 0xf1, 0xf0, 0xef, 0x60, 0xa9, 0x0, 0x8d, 0x59,
-0x7d, 0x8d, 0x5a, 0x7d, 0xad, 0x58, 0x7d, 0xc9, 0xa, 0x90, 0x3, 0xee, 0x59, 0x7d, 0xad, 0xdf,
-0x7d, 0xc9, 0xa, 0x90, 0x3, 0xee, 0x5a, 0x7d, 0xad, 0x59, 0x7d, 0xcd, 0x5a, 0x7d, 0xd0, 0x6,
-0xa9, 0x0, 0x8d, 0x58, 0x7d, 0x60, 0xa9, 0x1, 0x8d, 0x58, 0x7d, 0x60, 0xac, 0xe, 0x77, 0xb9,
-0x23, 0x77, 0xa8, 0xaa, 0xc8, 0xb9, 0x22, 0x76, 0x9d, 0x22, 0x76, 0xc8, 0xe8, 0xe4, 0x7c, 0x90,
-0xf4, 0xc6, 0x7c, 0xc6, 0xe3, 0xce, 0x21, 0x76, 0xce, 0x4d, 0x7d, 0xac, 0xe, 0x77, 0xc8, 0xb9,
-0x23, 0x77, 0x38, 0xe9, 0x1, 0x99, 0x23, 0x77, 0xc8, 0xcc, 0xf, 0x77, 0x90, 0xf1, 0xf0, 0xef,
-0x60, 0xad, 0xf, 0x77, 0xc9, 0x4, 0xb0, 0x3, 0x4c, 0xfb, 0x37, 0xac, 0xe, 0x77, 0xc8, 0xc8,
-0xb9, 0xf, 0x77, 0x85, 0x81, 0xc8, 0xc8, 0xb9, 0xf, 0x77, 0xc5, 0x81, 0xf0, 0x12, 0x88, 0xb9,
-0xf, 0x77, 0x85, 0x81, 0x88, 0x88, 0xb9, 0xf, 0x77, 0xc5, 0x81, 0xd0, 0xdb, 0x4c, 0xc4, 0x4c,
-0x20, 0x25, 0x38, 0xa6, 0x44, 0x20, 0xea, 0x49, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x85, 0x3d, 0x20,
-0x25, 0x38, 0xa6, 0x43, 0x20, 0xea, 0x49, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x85, 0x3f, 0x20, 0x25,
-0x38, 0xa6, 0x44, 0x20, 0xea, 0x49, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x85, 0x3e, 0xa5, 0x3d, 0x85,
-0xe5, 0xa5, 0x3f, 0x85, 0xe6, 0x20, 0xda, 0x4f, 0x20, 0xd4, 0x4f, 0x20, 0x34, 0x3, 0xa5, 0xe5,
-0xc5, 0x3e, 0xb0, 0x4, 0xe6, 0xe5, 0xd0, 0xed, 0x20, 0x46, 0x48, 0x4c, 0xf1, 0x37, 0x20, 0x25,
-0x38, 0xa6, 0x44, 0x20, 0xea, 0x49, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x85, 0x3d, 0x20, 0x25, 0x38,
-0xa6, 0x43, 0x20, 0xea, 0x49, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x85, 0x3f, 0x20, 0x25, 0x38, 0x20,
-0x25, 0x38, 0x20, 0xea, 0x49, 0xb0, 0x3, 0x4c, 0xf1, 0x37, 0x85, 0x40, 0xa5, 0x3d, 0x85, 0xe5,
-0xa5, 0x3f, 0x85, 0xe6, 0x20, 0xda, 0x4f, 0x20, 0xd4, 0x4f, 0x20, 0x34, 0x3, 0xa5, 0xe6, 0xc5,
-0x40, 0xb0, 0x4, 0xe6, 0xe6, 0xd0, 0xed, 0x20, 0x46, 0x48, 0xad, 0x5, 0x7f, 0xd0, 0x3, 0x4c,
-0xf1, 0x37, 0x60, 0xad, 0xc0, 0x31, 0xf0, 0x13, 0xa5, 0x43, 0xcd, 0x74, 0x7d, 0xb0, 0xc, 0xe6,
-0x43, 0xe6, 0x32, 0xa9, 0x0, 0x8d, 0x21, 0x7d, 0xa9, 0x1, 0x60, 0xa9, 0x0, 0x60, 0xad, 0xc0,
-0x31, 0xf0, 0x13, 0xa5, 0x44, 0xcd, 0x75, 0x7d, 0xb0, 0xc, 0xe6, 0x44, 0xe6, 0x31, 0xa9, 0x0,
-0x8d, 0x20, 0x7d, 0xa9, 0x1, 0x60, 0xa9, 0x0, 0x60, 0xad, 0xbb, 0x75, 0x18, 0x69, 0x4, 0x60,
-0x20, 0x4f, 0x4d, 0x85, 0x7c, 0x60, 0x20, 0x4f, 0x4d, 0x8d, 0x2a, 0x7d, 0x60, 0xa5, 0x3, 0x85,
-0xd8, 0xa5, 0x4, 0x85, 0xd9, 0x60, 0x20, 0xf0, 0x4d, 0xad, 0x82, 0x7d, 0xf0, 0x1, 0x60, 0x20,
-0x56, 0x4d, 0xa5, 0x7c, 0xcd, 0x2a, 0x7d, 0xd0, 0x3, 0x4c, 0xa5, 0x4d, 0xb0, 0x6, 0x20, 0xbd,
-0x4d, 0x4c, 0x52, 0x47, 0x20, 0xd4, 0x4d, 0xad, 0x77, 0x7e, 0xd0, 0x3, 0x4c, 0x75, 0x47, 0xa9,
-0x0, 0x8d, 0x77, 0x7e, 0xad, 0x2a, 0x7d, 0x85, 0x7c, 0x20, 0xe4, 0x32, 0x4c, 0x9, 0x35, 0x20,
-0x35, 0x46, 0x20, 0x63, 0x4d, 0xa0, 0x0, 0x20, 0x60, 0x43, 0x8d, 0xb7, 0x75, 0xc8, 0x20, 0x60,
-0x43, 0x8d, 0xb8, 0x75, 0x4c, 0xce, 0x4e, 0x20, 0xe1, 0x4e, 0xd0, 0x9, 0x20, 0x4b, 0x4e, 0x20,
-0xa0, 0x4e, 0x4c, 0xa5, 0x4d, 0x20, 0xfd, 0x4e, 0x20, 0x8d, 0x4e, 0x4c, 0xa5, 0x4d, 0x20, 0xe1,
-0x4e, 0xd0, 0xe, 0x20, 0x4c, 0x4f, 0xa5, 0xe2, 0xf0, 0x1, 0x60, 0x20, 0x91, 0x4f, 0x4c, 0xa5,
-0x4d, 0x20, 0x7, 0x4f, 0x20, 0x7e, 0x4f, 0x4c, 0xa5, 0x4d, 0xa5, 0x3, 0x8d, 0xb7, 0x75, 0xa5,
-0x4, 0x8d, 0xb8, 0x75, 0xa5, 0x31, 0x8d, 0xb9, 0x75, 0xa5, 0x32, 0x8d, 0xba, 0x75, 0x4c, 0x35,
-0x46, 0xad, 0x53, 0x7f, 0x85, 0xd8, 0xad, 0x54, 0x7f, 0x85, 0xd9, 0xa0, 0x4, 0x20, 0x60, 0x43,
-0x18, 0x6d, 0x53, 0x7f, 0x8d, 0x26, 0x7d, 0xa9, 0x0, 0x6d, 0x54, 0x7f, 0x8d, 0x27, 0x7d, 0xad,
-0x26, 0x7d, 0x18, 0x69, 0x4, 0x8d, 0x26, 0x7d, 0xad, 0x27, 0x7d, 0x69, 0x0, 0x8d, 0x27, 0x7d,
-0x60, 0x20, 0x7, 0x4e, 0xad, 0x26, 0x7d, 0x38, 0xed, 0x28, 0x7d, 0x85, 0x81, 0xad, 0x27, 0x7d,
-0xe9, 0x0, 0x85, 0x82, 0x60, 0x20, 0xfd, 0x4e, 0x20, 0x37, 0x4e, 0xa5, 0x3, 0x18, 0x65, 0x7c,
-0x85, 0xd8, 0xa9, 0x0, 0x65, 0x4, 0x85, 0xd9, 0xa5, 0xd8, 0x18, 0x6d, 0x28, 0x7d, 0x85, 0xda,
-0xa9, 0x0, 0x65, 0xd9, 0x85, 0xdb, 0xa0, 0x0, 0x20, 0x55, 0x43, 0x91, 0xd8, 0xe6, 0xda, 0xd0,
-0x2, 0xe6, 0xdb, 0xe6, 0xd8, 0xd0, 0x2, 0xe6, 0xd9, 0xa5, 0xda, 0xcd, 0x26, 0x7d, 0xd0, 0xe6,
-0xa5, 0xdb, 0xcd, 0x27, 0x7d, 0xd0, 0xdf, 0xad, 0x53, 0x7f, 0x38, 0xed, 0x28, 0x7d, 0x8d, 0x53,
-0x7f, 0xad, 0x54, 0x7f, 0xe9, 0x0, 0x8d, 0x54, 0x7f, 0x60, 0x20, 0x63, 0x4d, 0xa0, 0x0, 0x20,
-0x60, 0x43, 0x85, 0x3, 0xc8, 0x20, 0x60, 0x43, 0x85, 0x4, 0x20, 0x40, 0x46, 0xd0, 0x18 };
-

+ 0 - 625
soloud.mod/soloud/src/tools/tedsid2dump/sid.cpp

@@ -1,625 +0,0 @@
-//  Issues:
-//  - Filter cutoff frequencies not 100% accurate
-//  - Combined waveforms of the 6581 incorrect (SID card used 8580 anyway)
-//  - filter distortion not emulated
-//  - no joystick or paddle support
-//  - probably many more
-
-#include <math.h>
-#include <memory.h>
-#include "sid.h"
-#include "Tedmem.h"
-
-#define DIGIBLASTER_MULT 14
-
-#ifndef M_PI
-#define M_PI 3.1415926535897932384626433832795
-#endif
-
-// Hack to store master volume
-unsigned int SIDsound::masterVolume = 0;
-
-//
-//	Random number generator for noise waveform
-//
-
-// Test a bit. Returns 1 if bit is set.
-inline static long bit(long val, unsigned int bitnr) 
-{
-	return (val >> bitnr) & 1;
-}
-
-inline void SIDsound::updateShiftReg(SIDVoice &v)
-{
-	unsigned int shiftReg = v.shiftReg;
-	unsigned int bit22 = bit(shiftReg,22);
-	unsigned int bit17 = bit(shiftReg,17);
-
-	// Shift 1 bit left
-	shiftReg = ((shiftReg) << 1);// & 0x7fffff;
-
-	// Feed bit 0 
-	v.shiftReg = shiftReg | (bit22 ^ bit17);
-}
-
-inline int SIDsound::waveNoise(SIDVoice &v)
-{
-	unsigned int shiftReg = v.shiftReg;
-	// Pick out bits to make output value, left shift by 4
-	return 
-		(bit(shiftReg,22) << 11) |
-		(bit(shiftReg,20) << 10) |
-		(bit(shiftReg,16) << 9) |
-		(bit(shiftReg,13) << 8) |
-		(bit(shiftReg,11) << 7) |
-		(bit(shiftReg, 7) << 6) |
-		(bit(shiftReg, 4) << 5) |
-		(bit(shiftReg, 2) << 4);
-};
-
-void SIDsound::setModel(unsigned int model) 
-{
-	int i;
-
-	switch (model) {
-		case SID8580DB:
-		case SID8580:
-			for ( i=0; i<2048; i++) {
-				double x = i / 8.0;
-				//double cf = 12500.0 * i / 2048.0; // specs and YAPE
-				// approximate with a 3-degree polynomial
-				//double cf = 0.0003*x*x*x + 0.0882*x*x + 44.49*x - 38.409;
-				// approximate with a 2-degree polynomial
-				//double cf = -0.0177*x*x + 55.261*x - 55.518; // CSG 8580R4
-				double cf = -0.0156*x*x + 48.473*x - 45.074; // 8580R5
-				cutOffFreq[i] = cf <= 0 ? 0 : cf;
-			}
-			dcWave = 0x800;
-			dcMixer = 0;
-			dcVoice = 0;
-			break;
-
-		case SID6581: // R4 actually
-			for (i=0; i<1024; i++) {
-				cutOffFreq[i] = (tanh(((double)i/1.5 - 1024.0)/1024.0*M_PI) + tanh(M_PI))
-					* (6000.0 - 220.0) + 220.0;
-			}
-			for (; i<1056; i++) {
-				double x = ((double)i - 1024.0) / (1056.0 - 1003.);
-				cutOffFreq[i] = x*(1315.0 - 1003.0) + 1003.0;
-			}
-			for (; i<2048; i++) {
-				double x = ((double)i - 1056.0) / (2048.0 - 1056.0);
-				cutOffFreq[i] = //(tanh (((double)i - 2048.0)/1024.0*M_PI) + tanh(M_PI))
-					//* (20163.0 - 1315.0) + 1315.0;
-					(20163.0 - 1315.0) * x + 1315.0;
-			}
-			dcWave = 0x380;
-			dcMixer = -0xFFF*0xFF/18 >> 7;
-			dcVoice = 0x800*0xFF;
-			break;
-
-		case SID6581R1: // 6581 R1
-			for (i=0; i<1024; i++) { 
-				cutOffFreq[i] = (tanh(((double)i-1024.0)/1024.0*M_PI) + tanh(M_PI))
-					* (6000.0 - 220.0) + 220.0;
-			}
-			for (; i<2048; i++) { 
-				cutOffFreq[i] = (tanh (((double)i-2048.0)/1024.0*M_PI) + tanh(M_PI))
-					* (18000.0 - 4600.0) + 4600.0;
-			}
-			dcWave = 0x380;
-			dcMixer = -0xFFF*0xFF/18 >> 7;
-			dcVoice = 0x800*0xFF;
-			break;
-	}
-	setFilterCutoff();
-	model_ = model;
-}
-
-// Static data members
-const unsigned int SIDsound::RateCountPeriod[16] = {
-	0x7F00,0x0006,0x003C,0x0330,0x20C0,0x6755,0x3800,0x500E,
-	0x1212,0x0222,0x1848,0x59B8,0x3840,0x77E2,0x7625,0x0A93
-};
-
-const unsigned char SIDsound::envGenDRdivisors[256] = {
-	30,30,30,30,30,30,16,16,16,16,16,16,16,16,8,8, 
-	8,8,8,8,8,8,8,8,8,8,4,4,4,4,4,4,
-	4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
-	4,4,4,4,4,4,2,2,2,2,2,2,2,2,2,2,
-	2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-	2,2,2,2,2,2,2,2,2,2,2,2,2,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,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,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,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,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,1,1,
-	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
-};
-
-void SIDsound::calcEnvelopeTable()
-{
-	// number of SIDsound envelope clocks per sample (0x1FFFFF)
-	const double deltaSampleCyclesFloat = ((double) sidBaseFreq * 256.0) / (double)sampleRate;
-	sidCyclesPerSampleInt = (unsigned int) (deltaSampleCyclesFloat + 0.5);
-}
-
-void SIDsound::setFrequency(unsigned int sid_frequency)
-{
-	switch (sid_frequency) {
-		case 0:
-			sidBaseFreq = TED_SOUND_CLOCK * 4; // 312 * 114 * 50 / 2;
-			break;
-		default:
-			sidBaseFreq = SOUND_FREQ_PAL_C64;
-			break;
-	}
-	calcEnvelopeTable();
-}
-
-void SIDsound::setSampleRate(unsigned int sampleRate_)
-{
-	sampleRate = sampleRate_;
-	calcEnvelopeTable();
-}
-
-SIDsound::SIDsound(unsigned int model, unsigned int chnlDisableMask) : enableDigiBlaster(false), sampleRate(0)
-{
-	unsigned int i;
-
-	// Link voices together
-	for (i=0; i<3; i++) {
-		voice[i].modulatedBy = &voice[(i+2)%3]; // previous voice
-		voice[i].modulatesThis = &voice[(i+1)%3]; // next voice
-		voice[i].disabled = !!((chnlDisableMask >> i) & 1);
-	}
-	
-	extIn = 0;
-	filterCutoff = 0;
-	setModel(model);
-	setFrequency(0);
-	reset();
-}
-
-void SIDsound::reset(void)
-{
-	volume = masterVolume;
-
-	lastByteWritten = 0;
-
-	for (int v=0; v<3; v++) {
-		voice[v].wave = WAVE_NONE;
-		voice[v].egState = EG_FROZEN;
-		voice[v].accu = voice[v].add = 0;
-		voice[v].freq = voice[v].pw = 0;
-		voice[v].envCurrLevel = voice[v].envSustainLevel = 0;
-		voice[v].gate = voice[v].ring = voice[v].test = 0;
-		voice[v].filter = voice[v].sync = 0;
-		voice[v].muted = 0;
-		// Initial value of internal shift register
-		voice[v].shiftReg = 0x7FFFFC;
-		voice[v].envExpCounter = 0;
-		voice[v].envAttackAdd = voice[v].envDecaySub = voice[v].envReleaseSub = 0;
-		voice[v].envCounterCompare = RateCountPeriod[0];
-		voice[v].envCounter = 0x7fff;
-	}
-
-	filterType = FILTER_NONE;
-	filterCutoff = filterResonance = 0;
-
-	Vhp = Vbp = Vlp = 0;
-	setFilterCutoff();
-	setResonance();
-
-	dcDigiBlaster = 0;
-	clockDeltaRemainder = 0;
-}
-
-inline int SIDsound::getWaveSample(SIDVoice &v)
-{
-	switch (v.wave) {
-		case WAVE_TRI:
-			return waveTriangle(v);
-		case WAVE_SAW:
-			return waveSaw(v);
-		case WAVE_PULSE:
-			return wavePulse(v);
-		case WAVE_TRISAW:
-			return waveTriSaw(v);
-		case WAVE_TRIPULSE:
-			return waveTriPulse(v);
-		case WAVE_SAWPULSE:
-			return waveSawPulse(v);
-		case WAVE_TRISAWPULSE:
-			return waveTriSawPulse(v);
-		case WAVE_NOISE:
-			return waveNoise(v);
-		default:
-			return 0x800;
-	}
-}
-
-unsigned char SIDsound::read(unsigned int adr)
-{
-	switch(adr) {
-		case 0x19:
-		case 0x1A:
-			// POTX/POTY paddle AD converters (unemulated)
-			lastByteWritten = 0;
-			return 0xFF;
-
-		// Voice 3 (only) oscillator readout
-		case 0x1B:
-			lastByteWritten = 0;
-			return (unsigned char)(getWaveSample(voice[2])>>0); // 4?
-
-		// Voice 3 EG readout
-		case 0x1C:
-			return (unsigned char)(voice[2].envCurrLevel);
-
-		case 0x1E: // Digiblaster DAC readout
-			if (enableDigiBlaster && model_ == SID8580)
-			{
-				return (unsigned char) (dcDigiBlaster >> DIGIBLASTER_MULT);
-			}
-			return lastByteWritten;
-
-		default:
-			// Write-only registers return the last value written
-			return lastByteWritten;
-	}
-}
-
-
-extern void storeregwrite(int reg, int val);
-
-void SIDsound::write(unsigned int adr, unsigned char value)
-{	
-	storeregwrite(adr, value);
-
-	lastByteWritten = value;
-
-	SIDVoice &v = voice[adr/7];
-	switch (adr) {
-		case 0:
-		case 7:
-		case 14:
-			v.freq = (unsigned short)((v.freq & 0xff00) | value);
-			v.add = (unsigned int)(((double)v.freq 
-				* sidBaseFreq) * 16.0 / sampleRate + 0.5);
-			break;
-
-		case 1:
-		case 8:
-		case 15:
-			v.freq = (unsigned short)((v.freq & 0xff) | (value << 8));
-			v.add = (unsigned int)(((double)v.freq 
-				* sidBaseFreq) * 16.0 / sampleRate + 0.5);
-			break;
-
-		case 2:
-		case 9:
-		case 16:
-			v.pw = (unsigned short)((v.pw & 0x0f00) | value);
-			break;
-
-		case 3:
-		case 10:
-		case 17:
-			v.pw = (unsigned short)((v.pw & 0xff) | ((value & 0xf) << 8));
-			break;
-
-		case 4:
-		case 11:
-		case 18:
-			if ((value & 1) != (unsigned char) v.gate) {
-				if (value & 1) {
-					// gate on
-					v.egState = EG_ATTACK;
-					v.envCounterCompare = v.envAttackAdd;
-				} else {
-					// gate off
-#if 00
-					if (v.egState != EG_FROZEN)
-#endif
-						v.egState = EG_RELEASE;
-					v.envCounterCompare = v.envReleaseSub;
-				}
-				v.gate = value & 1;
-			}
-			v.modulatedBy->sync = value & 2;
-			v.ring = value & 4;
-			if ((value & 8) && !v.test) {
-				v.accu = 0; //(model_ >= SID8580) ? 0 : 0;
-				unsigned int bit19 = (v.shiftReg >> 19) & 1;
-				v.shiftReg = (v.shiftReg & 0x7ffffd) | ((bit19^1) << 1);
-				v.test = 0xFFF;
-			} else if (v.test && !(value & 8)) {
-				unsigned int bit0 = ((v.shiftReg >> 22) ^ (v.shiftReg >> 17)) & 0x1;
-				v.shiftReg <<= 1;
-				v.shiftReg &= 0x7fffff;
-				v.shiftReg |= bit0;
-				v.test = 0x000;
-			}
-			v.wave = (value >> 4) & 0x0F;
-			if (v.wave > 8) {
-				v.shiftReg &= 0x7fffff^(1<<22)^(1<<20)^(1<<16)^(1<<13)^(1<<11)^(1<<7)^(1<<4)^(1<<2);
-			}
-			break;
-
-		case 5:
-		case 12:
-		case 19:
-			v.envAttackAdd = value >> 4;
-			v.envDecaySub = value & 0x0F;
-			if (v.egState == EG_ATTACK)
-				v.envCounterCompare = v.envAttackAdd;
-			else if (v.egState == EG_DECAY)
-				v.envCounterCompare = v.envDecaySub;
-			break;
-
-		case 6:
-		case 13:
-		case 20:
-			v.envSustainLevel = (value >> 4) * 0x11;
-			v.envReleaseSub = value & 0x0F;
-			if (v.egState == EG_RELEASE)
-				v.envCounterCompare = v.envReleaseSub;
-			break;
-
-		case 21:
-			if ((unsigned int)(value&7) != (filterCutoff&7)) {
-				filterCutoff = (value&7)|(filterCutoff&0x7F8);
-				setFilterCutoff();
-			}
-			break;
-
-		case 22:
-			filterCutoff = (value<<3)|(filterCutoff&7);
-			setFilterCutoff();
-			break;
-
-		case 23:
-			voice[0].filter = value & 1;
-			voice[1].filter = value & 2;
-			voice[2].filter = value & 4;
-			filterResonance = (unsigned char)(value >> 4);
-			setResonance();
-			break;
-
-		case 24:
-			volume = value & 0x0F;
-			voice[2].muted = value & 0x80;
-			filterType = (unsigned char)((value >> 4) & 7);
-			break;
-
-		case 30: // Digiblaster DAC
-			if (enableDigiBlaster && model_ == SID8580)
-			{
-				dcDigiBlaster = (value ^ 0x00) << DIGIBLASTER_MULT;
-			}
-			break;
-
-		case 31: // Digiblaster ADC
-			break;
-	}
-}
-
-inline void SIDsound::setFilterCutoff()
-{
-	const double freqDomainDivCoeff = 2 * M_PI * 1.048576;
-	w0 = int(cutOffFreq[filterCutoff] * freqDomainDivCoeff);
-	// Limit cutoff to Nyquist frq to keep the sample based filter stable
-	const double NyquistFrq = double(sampleRate) / 2;
-	const double maxCutOff = NyquistFrq > 16000.0 ? 16000.0 : NyquistFrq;
-	const int w0MaxDt = int(maxCutOff * freqDomainDivCoeff); // 16000
-	if (w0 > w0MaxDt) w0 = w0MaxDt;
-}
-
-inline void SIDsound::setResonance()
-{
-	resonanceCoeffDiv1024 = (int) (1024.0/(0.707 + 1.9 * (double) filterResonance / 15.0) + 0.5); // 2.3
-}
-
-inline unsigned int SIDsound::clock()
-{
-	unsigned int count = sidCyclesPerSampleInt >> 8;
-	unsigned int tmp = sidCyclesPerSampleInt & 0xFF;
-	unsigned int newCount = clockDeltaRemainder + tmp;
-	
-	if (newCount >= 0x100) {
-		clockDeltaRemainder = newCount & 0xFF;
-		count++;
-	} else {
-		clockDeltaRemainder = newCount;
-	}
-	return count;
-}
-
-// simplified version of http://bel.fi/~alankila/c64-sw/index-cpp.html
-inline int SIDsound::filterOutput(unsigned int cycles, int Vi)
-{
-	int w0deltaTime = w0 >> 6;
-	Vi >>= 7;
-	unsigned int count = cycles;
-
-	do {
-		int dVlp = (w0deltaTime * Vbp >> 14);
-		Vlp -= dVlp;
-		int dVbp = (w0deltaTime * Vhp >> 14);
-		Vbp -= dVbp;
-		Vhp = (Vbp * resonanceCoeffDiv1024 >> 10) - Vlp - Vi;
-	} while (--count);
-
-	int Vf;
-
-	switch (filterType) {
-		default:
-		case FILTER_NONE:
-			Vf = 0;
-			break;
-		case FILTER_LP:
-			Vf = Vlp;
-			break;
-		case FILTER_BP:
-			Vf = Vbp;
-			break;
-		case FILTER_LPBP:
-			Vf = Vlp + Vbp;
-			break;
-		case FILTER_HP:
-			Vf = Vhp;
-			break;
-		case FILTER_NOTCH:
-			Vf = Vlp + Vhp;
-			break;
-		case FILTER_HPBP:
-			Vf = Vbp + Vhp;
-			break;
-		case FILTER_ALL:
-			Vf = Vlp + Vbp + Vhp;
-			break;
-	}
-	return Vf << 7;
-}
-
-// Envelope based on:
-// http://blog.kevtris.org/?p=13
-inline int SIDsound::doEnvelopeGenerator(unsigned int cycles, SIDVoice &v)
-{
-	unsigned int count = cycles;
-
-	do {
-		unsigned int LFSR = v.envCounter;
-		if (LFSR != RateCountPeriod[v.envCounterCompare]) {
-			const unsigned int feedback = ((LFSR >> 14) ^ (LFSR >> 13)) & 1;
-			LFSR = ((LFSR << 1) | feedback) & 0x7FFF;
-			v.envCounter = LFSR;
-		} else {
-			// LFSR = 0x7fff reset LFSR
-			v.envCounter = 0x7fff;
-
-			if (v.egState == EG_ATTACK || ++v.envExpCounter == envGenDRdivisors[v.envCurrLevel]) {
-
-				v.envExpCounter = 0;
-
-				switch (v.egState) {
-
-				case EG_ATTACK:
-					// According to Bob Yannes, Attack is linear...
-					if ( ((++v.envCurrLevel) & 0xFF) == 0xFF) {
-						v.egState = EG_DECAY;
-						v.envCounterCompare = v.envDecaySub;
-					}
-					break;
-
-				case EG_DECAY:
-					if (v.envCurrLevel != v.envSustainLevel) {
-						v.envCurrLevel--;
-						v.envCurrLevel &= 0xFF;
-						if (!v.envCurrLevel)
-							v.egState = EG_FROZEN;
-					}
-					break;
-
-				case EG_RELEASE:
-					v.envCurrLevel = (v.envCurrLevel - 1) & 0xFF;
-					if (!v.envCurrLevel)
-						v.egState = EG_FROZEN;
-					break;
-
-				case EG_FROZEN:
-					v.envCurrLevel = 0;
-					break;
-				}
-			}
-		}
-	} while (--count);
-
-	return v.envCurrLevel & 0xFF; // envelope is 8 bits
-}
-
-void SIDsound::calcSamples(long accu)
-{
-	for (;accu--;) {
-		// Outputs for normal and filtered sounds
-		int sumFilteredOutput = 0;
-		int sumOutput = 0;
-		int sample;
-
-		const unsigned int cyclesToDo = clock();
-		// Loop for the three voices
-		int j = 2;
-		do {
-			SIDVoice &v = voice[j];
-			int envelope = doEnvelopeGenerator(cyclesToDo, v);
-			// Waveform generator
-			if (!v.test) {
-#if 1
-				unsigned int accPrev = v.accu;
-				// Update accumulator
-				v.accu += v.add;
-				// FIXME Apply ring modulation.
-				if (v.sync && !(accPrev & 0x8000000) && (v.accu & 0x8000000)
-           			)
-#else
-				v.accPrev = v.accu;
-				// Update accumulator if test bit not set
-				v.accu += v.add;
-				unsigned int accPrev = v.accPrev;
-				if (v.sync && !(v.accPrev & 0x8000000) && (v.accu & 0x8000000)
-    				&& !( v.modulatedBy->sync && !(v.modulatedBy->accPrev & 0x800000) && 
-        			(v.modulatedBy->accu & 0x800000)) 
-           			)
-#endif
-					v.modulatesThis->accu = 0;
-				if (v.freq) {
-					unsigned int accNext = accPrev;
-					unsigned int freq = v.freq << 4;
-					do {
-						accNext += freq;
-						// noise shift register is updating even when waveform is not selected
-						if (!(accPrev & 0x0800000) && (accNext & 0x0800000))
-							updateShiftReg(v);
-						accPrev = accNext;
-					} while ( accNext < v.accu );
-				}
-				// real accu is 24 bit but we use FP integer arithmetic
-				v.accu &= 0xFFFFFFF;
-			}
-			int output = v.disabled ? 0x0800 : getWaveSample(v);
-
-			if (v.filter)
-				sumFilteredOutput += (output - dcWave) * envelope + dcVoice;
-			else {
-				if (v.muted)
-					sumOutput += (0x0800 - dcWave) * envelope + dcVoice;
-				else
-					sumOutput += (output - dcWave) * envelope + dcVoice;
-			}
-		} while (j--);
-
-		int accu2 = (sumOutput + filterOutput(cyclesToDo, sumFilteredOutput) 
-			+ dcMixer + dcDigiBlaster) * volume;
-
-#if 1
-		sample = accu2 >> 12;
-#else
-		unsigned int interPolationFac = (clockDeltaRemainder - sidCyclesPerSampleInt) & 0xFF;
-		accu >>= 7;
-		sample = (prevAccu * (0xFF ^ interPolationFac) + accu * (interPolationFac)) >> 12;
-		prevAccu = accu;
-#endif
-
-	}
-}
-
-SIDsound::~SIDsound()
-{
-	masterVolume = volume;
-}

+ 0 - 179
soloud.mod/soloud/src/tools/tedsid2dump/sid.h

@@ -1,179 +0,0 @@
-#ifndef _SID_H
-#define _SID_H
-
-#define SOUND_FREQ_PAL_C64 985248
-
-enum { 
-	SID6581 = 0,
-	SID8580,
-	SID8580DB,
-	SID6581R1
-};
-
-// SID class
-class SIDsound 
-{
-public:
-	SIDsound(unsigned int model, unsigned int chnlDisableMask);
-	virtual ~SIDsound();
-	virtual void reset();
-	virtual void setReplayFreq() {
-		calcEnvelopeTable();
-	};
-	void setModel(unsigned int model);
-	void setFrequency(unsigned int sid_frequency);
-	void setSampleRate(unsigned int sampleRate_);
-	void calcEnvelopeTable();
-	unsigned char read(unsigned int adr);
-	void write(unsigned int adr, unsigned char byte);
-	void calcSamples(long count);
-	void enableDisableChannel(unsigned int ch, bool enabled) {
-		voice[ch].disabled = !enabled;
-	}
-
-private:
-
-	// SIDsound waveforms
-	enum {
-		WAVE_NONE, WAVE_TRI, WAVE_SAW, WAVE_TRISAW, WAVE_PULSE, 
-		WAVE_TRIPULSE, WAVE_SAWPULSE, WAVE_TRISAWPULSE,	WAVE_NOISE
-	};
-	// Envelope Genarator states
-	enum {
-		EG_FROZEN, EG_ATTACK, EG_DECAY, EG_RELEASE
-	};
-	// Filter types
-	enum { 
-		FILTER_NONE, FILTER_LP, FILTER_BP, FILTER_LPBP, FILTER_HP, FILTER_NOTCH, FILTER_HPBP, FILTER_ALL
-	};
-	// Class for SID voices
-	class SIDVoice {
-	public:
-		int wave;				// the selected waveform
-		int egState;			// state of the EG
-		SIDVoice *modulatedBy;	// the voice that modulates this one
-		SIDVoice *modulatesThis;// the voice that is modulated by this one
-
-		unsigned int accu;		// accumulator of the waveform generator, 8.16 fixed
-		unsigned int accPrev;	// previous accu value (for ring modulation)
-		unsigned int add;		// added to the accumulator for each sample
-		unsigned int shiftReg;	// shift register for noise waveform
-
-		unsigned short freq;	// voice frequency
-		unsigned short pw;		// pulse-width value
-
-		unsigned int envAttackAdd;
-		unsigned int envDecaySub;
-		unsigned int envSustainLevel;
-		unsigned int envReleaseSub;
-		unsigned int envCurrLevel;
-		unsigned int envCounter;
-		unsigned int envExpCounter;
-		unsigned int envCounterCompare;
-
-		unsigned int gate;		// EG gate flag
-		unsigned int ring;		// ring modulation flag
-		unsigned int test;		// test flag
-		unsigned int filter;	// voice filtered flag
-		unsigned int muted;		// voice muted flag (only for 3rd voice)
-		bool		disabled;	// voice disabled
-
-		// This bit is set for the modulating voice, 
-		// not for the modulated one (compared to the real one)
-		unsigned int sync; // sync modulation flag
-	};
-	int volume;			// SID Master volume
-	unsigned int sidBaseFreq;	// SID base frequency
-	unsigned int sidCyclesPerSampleInt;
-	unsigned int clockDeltaRemainder;
-	int dcMixer; // different for 6581 and 8580 (constant level output for digi)
-	int dcVoice;
-	int dcWave;
-	int dcDigiBlaster;
-	int extIn;
-	//
-	unsigned int clock();
-	// Wave generator functions
-	inline static int waveTriangle(SIDVoice &v);
-	inline static int waveSaw(SIDVoice &v);
-	inline static int wavePulse(SIDVoice &v);
-	inline static int waveTriSaw(SIDVoice &v);
-	inline static int waveTriPulse(SIDVoice &v);
-	inline static int waveSawPulse(SIDVoice &v);
-	inline static int waveTriSawPulse(SIDVoice &v);
-	inline static int waveNoise(SIDVoice &v);
-	inline static int getWaveSample(SIDVoice &v);
-	inline void updateShiftReg(SIDVoice &v);
-	// Envelope
-	inline int doEnvelopeGenerator(unsigned int cycles, SIDVoice &v);
-	static const unsigned int RateCountPeriod[16]; // Factors for A/D/S/R Timing
-	static const unsigned char envGenDRdivisors[256]; // For exponential approximation of D/R
-	static unsigned int masterVolume;
-	// voice array for the 3 channels
-	SIDVoice voice[3];
-	// filter stuff
-	unsigned char	filterType; // filter type
-	unsigned int	filterCutoff;	// SID filter frequency
-	unsigned char	filterResonance;	// filter resonance (0..15)
-	double cutOffFreq[2048];	// filter cutoff frequency register
-	int resonanceCoeffDiv1024;		// filter resonance * 1024
-	int w0;					// filter cutoff freq
-	void setResonance();
-	void setFilterCutoff();
-	int filterOutput(unsigned int cycles, int Vi);
-	int Vhp; // highpass
-	int Vbp; // bandpass
-	int Vlp; // lowpass
-	//
-	unsigned char lastByteWritten;// Last value written to the SID
-	int model_;
-	bool enableDigiBlaster;
-	unsigned int sampleRate;
-};
-
-/*
-	Wave outputs
-*/
-inline int SIDsound::waveTriangle(SIDVoice &v)
-{
-	unsigned int msb = (v.ring ? v.accu ^ v.modulatedBy->accu : v.accu)
-		& 0x8000000;
-	// triangle wave 15 bit only
- 	return ((msb ? ~v.accu : v.accu) >> 15) & 0xFFE;
-}
-
-inline int SIDsound::waveSaw(SIDVoice &v)
-{
-	return (v.accu >> 16) & 0xFFF;
-}
-
-inline int SIDsound::wavePulse(SIDVoice &v)
-{
-	// square wave starts high
-	return (v.test | ((v.accu >> 16) >= v.pw ? 0xFFF : 0x000));
-}
-
-inline int SIDsound::waveTriSaw(SIDVoice &v)
-{
-	unsigned int sm = (waveTriangle(v)) & (waveSaw(v));
-	return (sm>>1) & (sm<<1);
-}
-
-inline int SIDsound::waveTriPulse(SIDVoice &v)
-{
-	unsigned int sm = (waveTriangle(v)) & (wavePulse(v));
-	return (sm>>1) & (sm<<1);
-}
-
-inline int SIDsound::waveSawPulse(SIDVoice &v)
-{
-	return (waveSaw(v)) & (wavePulse(v));
-}
-
-inline int SIDsound::waveTriSawPulse(SIDVoice &v)
-{
-	unsigned int sm = (waveTriangle(v)) & (waveSaw(v)) & (wavePulse(v));
-	return (sm>>1) & (sm<<1);
-}
-
-#endif

+ 0 - 1382
soloud.mod/soloud/src/tools/tedsid2dump/tedmem.cpp

@@ -1,1382 +0,0 @@
-/*<empty clipboard>
-	YAPE - Yet Another Plus/4 Emulator
-
-	The program emulates the Commodore 264 family of 8 bit microcomputers
-
-	This program is free software, you are welcome to distribute it,
-	and/or modify it under certain conditions. For more information,
-	read 'Copying'.
-
-	(c) 2000, 2001, 2004, 2005 Attila Grósz
-*/
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include "Tedmem.h"
-#include "Sid.h"
-#include "Cpu.h"
-#include "roms.h"
-#include "Filter.h"
-
-#define TEXTMODE	0x00000000
-#define MULTICOLOR	0x00000010
-#define GRAPHMODE	0x00000020
-#define EXTCOLOR	0x00000040
-#define REVERSE		0x00000080
-#define ILLEGAL		0x0000000F
-
-static unsigned int		VertSubCount;
-static int				x,tmp;
-static unsigned char	*VideoBase;
-
-ClockCycle TED::CycleCounter;
-static bool ScreenOn, AttribFetch;
-static bool SideBorderFlipFlop, CharacterWindow;
-static unsigned int BadLine;
-static unsigned int	ClockingState;
-static unsigned int	CharacterCount = 0;
-static bool VertSubActive;
-static unsigned int	CharacterPosition;
-static unsigned int	CharacterPositionReload;
-static unsigned int	TVScanLineCounter;
-static bool HBlanking;
-static bool VBlanking;
-static bool aligned_write;
-static unsigned char *aw_addr_ptr;
-static unsigned char aw_value;
-static unsigned int ff1d_latch;
-TED *TED::instance_;
-
-enum {
-	TSS = 1 << 1,
-	TDS = 1 << 2,
-	TRFSH = 1 << 3,
-	THALT1 = 1 << 4,
-	THALT2 = 1 << 5,
-	THALT3 = 1 << 6,
-	TDMA = 1 << 7
-};
-
-TED::TED() : filter(0), sidCard(0)
-{
-	register unsigned int	i;
-
-	instance_ = this;
-	// clearing cartdridge ROMs
-	for (i=0;i<4;++i) {
-		memset(&(RomHi[i]),0,ROMSIZE);
-		memset(&(RomLo[i]),0,ROMSIZE);
-		memset(romlopath,0,sizeof(romlopath));
-		memset(romhighpath,0,sizeof(romhighpath));
-	};
-	// default ROM sets
-	strcpy(romlopath[0],"BASIC");
-	strcpy(romhighpath[0],"KERNAL");
-
-	// 64 kbytes of memory allocated
-	RAMMask=0xFFFF;
-
-	// actual ram bank pointer default setting
-	actram=Ram;
-
-	// setting screen memory pointer
-	scrptr=screen;
-	// pointer of the end of the screen memory
-	endptr=scrptr+456*312-8;
-	// setting the CPU to fast mode
-	fastmode=1;
-	// initial position of the electron beam (upper left corner)
-	irqline=VertSubCount=0;
-	beamy=0;
-	beamx=0;
-	hshift = 0;
-	scrblank= false;
-
-	charrombank=charrambank=cset=VideoBase=Ram;
-	scrattr=0;
-	timer1=timer2=timer3=0;
-	chrbuf = DMAbuf;
-	clrbuf = DMAbuf + 64;
-	tmpClrbuf = DMAbuf + 128;
-	memset(DMAbuf, 0, sizeof(DMAbuf));
-
-	// create an instance of the keyboard class
-//	keys = new KEYS;
-//	tap = new TAP;
-	// setting the TAP::mem pointer to this MEM class
-//	tap->mem=this;
-//	tcbmbus = NULL;
-	crsrblinkon = false;
-	VertSubActive = false;
-	CharacterPositionReload = CharacterPosition = 0;
-	SideBorderFlipFlop = false;
-	render_ok = false;
-
-	BadLine = 0;
-	CycleCounter = 0;
-	oscillatorInit();
-	memset(protectedPlayerMemory, 0xfe, sizeof(protectedPlayerMemory));
-	enableSidCard(true, 0);
-}
-
-void TED::Reset()
-{
-	// clear RAM with powerup pattern
-	int i;
-	for (i = 0; i < RAMSIZE; i++)
-		Ram[i] = ((i >> 1) << 1 == i) ? 0 : 0xff;
-	// reset oscillators
-	oscillatorReset();
-	if (sidCard) sidCard->reset();
-	lastResetCycle = CycleCounter;
-}
-
-void TED::forcedReset()
-{
-	ChangeMemBankSetup(false);
-	Reset();
-}
-
-void TED::texttoscreen(int x,int y, const char *scrtxt)
-{
-	int i = 0;
-	
-	while (scrtxt[i] != 0)
-	{
-		chrtoscreen(x + i * 8, y, scrtxt[i]);
-		i++;
-	}
-}
-
-void TED::chrtoscreen(int x,int y, char scrchr)
-{
-	register int j, k;
-	unsigned char *charset = (unsigned char *) kernal+0x1000;
-
-	if (isalpha(scrchr)) {
-		scrchr=toupper(scrchr)-64;
-		charset+=(scrchr<<3);
-		for (j=0;j<8;j++)
-			for (k=0;k<8;k++)
-				(*(charset+j) & (0x80>>k)) ? screen[(y+j)*456+x+k]=0x00 : screen[(y+j)*456+x+k]=0x71;
-		return;
-	}
-	charset+=(scrchr<<3);
-	for (j=0;j<8;j++)
-		for (k=0;k<8;k++)
-			(*(charset+j) & (0x80>>k)) ? screen[(y+j)*456+x+k]=0x00 : screen[(y+j)*456+x+k]=0x71;
-}
-
-void TED::loadroms()
-{
-	for (int i=0;i<4;i++) {
-		loadhiromfromfile(i,romhighpath[i]);
-		loadloromfromfile(i,romlopath[i]);
-	}
-	mem_8000_bfff = actromlo = &(RomLo[0][0]);
-	mem_fc00_fcff = mem_c000_ffff = actromhi = &(RomHi[0][0]);
-}
-
-void TED::loadloromfromfile(int nr, char fname[512])
-{
-	FILE			*img;
-
-	if (fname[0]!='\0') {
-		if (img = fopen(fname, "rb")) {
-			// load low ROM file
-			fread(&(RomLo[nr]),ROMSIZE,1,img);
-			fclose(img);
-			return;
-		}
-		switch (nr) {
-			case 0: memcpy(&(RomLo[0]),basic,ROMSIZE);
-				break;
-			case 1: if (!strncmp(fname,"3PLUS1LOW",9))
-						memcpy(&(RomLo[1]),plus4lo,ROMSIZE);
-					else
-						memset(&(RomLo[1]),0,ROMSIZE);
-				break;
-			default : memset(&(RomLo[nr]),0,ROMSIZE);
-		}
-	} else
-		memset(&(RomLo[nr]),0,ROMSIZE);
-}
-
-void TED::loadhiromfromfile(int nr, char fname[512])
-{
-	FILE	*img;
-
-	if (fname[0]!='\0') {
-		if (img = fopen(fname, "rb")) {
-			// load high ROM file
-			fread(&(RomHi[nr]),ROMSIZE,1,img);
-			fclose(img);
-			return;
-		}
-		switch (nr) {
-			case 0:
-				memcpy(&(RomHi[0]),kernal,ROMSIZE);
-				break;
-			case 1: if (!strncmp(fname,"3PLUS1HIGH",10))
-						memcpy(&(RomHi[1]),plus4hi,ROMSIZE);
-					else
-						memset(&(RomHi[1]),0,ROMSIZE);
-				break;
-			default : memset(&(RomHi[nr]),0,ROMSIZE);
-		}
-	} else
-		memset(&(RomHi[nr]),0,ROMSIZE);
-}
-
-void TED::injectCodeToRAM(unsigned int address, unsigned char *from, size_t len)
-{
-	unsigned int bytes = (int)((address + len > 0xffff) ? 0xffff - address : len);
-	memcpy(actram + (address & 0xffff), from, bytes);
-}
-
-void TED::copyToKbBuffer(char *bufferString, unsigned int bufferLength)
-{
-	unsigned int bufferAddress = 0x0527;
-	if (bufferLength == -1) bufferLength = (unsigned int) strlen(bufferString);
-
-	for (unsigned int i=0; i < bufferLength; i++)
-		Write( bufferAddress + i, bufferString[i]);
-	
-	Write(0xEF, bufferLength);
-}
-
-ClockCycle TED::GetClockCount()
-{
-	return CycleCounter;
-}
-
-void TED::ChangeMemBankSetup(bool romoff)
-{
-	if (romoff) {
-		mem_8000_bfff = actram + (0x8000 & RAMMask);
-		mem_fc00_fcff = mem_c000_ffff = actram + (0xC000 & RAMMask);
-	} else {
-		mem_8000_bfff = actromlo;
-		mem_c000_ffff = actromhi;
-		mem_fc00_fcff = &(RomHi[0][0]);
-	}
-}
-
-unsigned char TED::Read(unsigned int addr)
-{
-	switch ( addr & 0xF000 ) {
-		case 0x0000:
-			switch ( addr & 0xFFFF ) {
-				case 0:
-					return prddr;
-				case 1:
-					{
-						unsigned char retval =
-							(
-							//ReadBus()&
-							0xC0)
-							//|(tap->ReadCSTIn(CycleCounter)&0x10)
-							;
-						return (prp&prddr)|(retval&~prddr);
-					}
-				default:
-					return actram[addr&0xFFFF];
-			}
-			break;
-		case 0x1000:
-		case 0x2000:
-		case 0x3000:
-			return actram[addr&0xFFFF];
-		case 0x4000:
-		case 0x5000:
-		case 0x6000:
-		case 0x7000:
-			return actram[addr&RAMMask];
-		case 0x8000:
-		case 0x9000:
-		case 0xA000:
-		case 0xB000:
-			return mem_8000_bfff[addr&0x3FFF];
-		case 0xC000:
-		case 0xD000:
-		case 0xE000:
-			return mem_c000_ffff[addr&0x3FFF];
-		case 0xF000:
-			switch ( addr >> 8 ) {
-				case 0xFF:
-					switch (addr) {
-						case 0xFF00 : return timer1&0xFF;
-						case 0xFF01 : return timer1>>8;
-						case 0xFF02 : return timer2&0xFF;
-						case 0xFF03 : return timer2>>8;
-						case 0xFF04 : return timer3&0xFF;
-						case 0xFF05 : return timer3>>8;
-						case 0xFF06 : return Ram[0xFF06];
-						case 0xFF07 : return Ram[0xFF07];
-						case 0xFF08 : 
-#if 0
-							if (joyemu)
-								  return keys->feedjoy(Ram[0xFF08])&(keys->feedkey(Ram[0xFD30]));
-							  else
-								  return keys->feedkey(Ram[0xFD30]);
-#else
-							return 0xFF;
-#endif
-						case 0xFF09 : return Ram[0xFF09]|(0x25);
-						case 0xFF0A : return Ram[0xFF0A]|(0xA0);
-						case 0xFF0B : return irqline & 0xFF;
-						case 0xFF0C : return ((crsrpos>>8)&0x03)|0xFC;
-						case 0xFF0D : return crsrpos&0xFF;
-						case 0xFF0E :
-						case 0xFF0F :
-						case 0xFF10 :
-						case 0xFF11 :
-						case 0xFF12 :
-						case 0xFF13 :
-						case 0xFF14 :
-							return Ram[addr];
-						case 0xFF15 : return ecol[0]|0x80;	// The highest bit is not used and so always 1
-						case 0xFF16 : return ecol[1]|0x80;	// A few games (Rockman) used it...
-						case 0xFF17 : return ecol[2]|0x80;
-						case 0xFF18 : return ecol[3]|0x80;
-						case 0xFF19 : return (framecol&0xFF)|0x80;
-						case 0xFF1A : return (CharacterPositionReload>>8)&0xFF;
-						case 0xFF1B : return CharacterPositionReload&0xFF;
-						case 0xFF1C : return (beamy>>8)|0xFE;
-						case 0xFF1D : return beamy&0xFF; /// 1-8. bit of the rasterline counter
-						case 0xFF1E : return ((98+beamx)<<1)%228; // raster column
-						case 0xFF1F : return 0x80|(crsrphase<<3)|VertSubCount;
-						default:
-							return mem_c000_ffff[addr&0x3FFF];
-					}
-					break;
-				case 0xFE:
-					//return tcbmbus->Read(addr);
-					//return 0xFE;
-					return protectedPlayerMemory[addr & 0xfff];
-				case 0xFD:
-					switch (addr>>4) {
-						case 0xFD0: // RS232
-							return 0xFD;
-						case 0xFD1: // User port, PIO & 256 RAM expansion
-							//return (tap->IsButtonPressed()<<2)^0xFF;
-							return 0xFF;
-						case 0xFD2: // Speech hardware
-						case 0xFD4: // SID Card
-						case 0xFD5:
-							if (sidCard) {
-								return sidCard->read(addr & 0x1f);
-							}
-							return 0xFD;
-						case 0xFD3:
-							return Ram[0xFD30];
-					}
-					return 0xFD;
-				case 0xFC:
-					return mem_fc00_fcff[addr&0x3FFF];
-				default:
-					return mem_c000_ffff[addr&0x3FFF];
-			}
-	}
-	//fprintf(stderr,"Unhandled read %04X\n", addr);
-	return 0;
-}
-
-void TED::UpdateSerialState(unsigned char portVal)
-{
-	static unsigned char prevVal = 0xC0;
-
-	//if ((prevVal ^ portVal)&8)
-//		tap->SetTapeMotor(CycleCounter, portVal&8);
-
-	prevVal = portVal;
-}
-
-void TED::Write(unsigned int addr, unsigned char value)
-{
-	switch (addr&0xF000) {
-		case 0x0000:
-			switch ( addr & 0xFFFF ) {
-				case 0:
-					//fprintf(stderr,"$00 write: %02X\n", value);
-					prddr = value & 0xDF;
-					UpdateSerialState(prddr&~prp);
-					return;
-				case 1:
-					//fprintf(stderr,"$01 write: %02X\n", value);
-					prp = value;
-					UpdateSerialState(prddr&~prp);
-					return;
-				default:
-					actram[addr&0xFFFF] = value;
-			}
-			return;
-		case 0x1000:
-		case 0x2000:
-		case 0x3000:
-			actram[addr&0xFFFF] = value;
-			return;
-		case 0xD000:
-			if (sidCard) {
-				sidCard->write(addr & 0x1f, value);
-				sidCard->setFrequency(1);
-			}
-		case 0x4000:
-		case 0x5000:
-		case 0x6000:
-		case 0x7000:
-		case 0x8000:
-		case 0x9000:
-		case 0xA000:
-		case 0xB000:
-		case 0xC000:
-		case 0xE000:
-			actram[addr&RAMMask] = value;
-			return;
-		case 0xF000:
-			switch ( addr >> 8 ) {
-				case 0xFF:
-					switch (addr) {
-						case 0xFF00 :
-							t1on=false; // Timer1 disabled
-							t1start=(t1start & 0xFF00)|value;
-							timer1=(timer1 & 0xFF00)|value;
-							return;
-						case 0xFF01 :
-							t1on=true; // Timer1 enabled
-							t1start=(t1start & 0xFF)|(value<<8);
-							timer1=(timer1 & 0x00FF)|(value<<8);
-							return;
-						case 0xFF02 :
-							t2on=false; // Timer2 disabled
-							timer2=(timer2 & 0xFF00)|value;
-							return;
-						case 0xFF03 :
-							t2on=true; // Timer2 enabled
-							timer2=(timer2&0x00FF)|(value<<8);
-							return;
-						case 0xFF04 :
-							t3on=false;  // Timer3 disabled
-							timer3=(timer3&0xFF00)|value;
-							return;
-						case 0xFF05 :
-							t3on=true; // Timer3 enabled
-							timer3=(timer3&0x00FF)|(value<<8);
-							return;
-						case 0xFF06 :
-							Ram[0xFF06]=value;
-							// get vertical offset of screen when smooth scroll
-							vshift = value&0x07;
-							// Check if screen is turned on
-							if (value&0x10 && beamy == 0 && !AttribFetch) {
-								AttribFetch = true;
-								VertSubCount = 7;
-								if (vshift != (beamy&7)) {
-									// FIXME: this is actually delayed by one cycle
-									if (beamx>4 && beamx<84)
-										ClockingState = TSS;
-								}
-							}
-							if ( (Ram[0xFF06] ^ value) & 0x1F) {
-								if (AttribFetch) {
-									if (vshift == (beamy&7)) {
-										BadLine |= 1;
-										if (beamx>=3 && beamx<89) {
-											unsigned char idleread = Read((cpuptr->getPC()+1)&0xFFFF);
-											unsigned int delay = (BadLine & 2) ? 0 : (beamx - 1) >> 1;
-											unsigned int invalidcount = (delay > 3) ? 3 : delay;
-											unsigned int invalidpos = delay - invalidcount;
-											invalidcount = (invalidcount < 40-invalidpos) ? invalidcount : 40-invalidpos;
-											unsigned int newdmapos = (invalidpos+invalidcount < 40) ? invalidpos+invalidcount : 40;
-											unsigned int newdmacount = 40 - newdmapos ;
-											unsigned int oldcount = 40 - newdmacount - invalidcount;
-											memcpy( DMAbuf, clrbuf, oldcount);
-											memset( DMAbuf+oldcount, idleread, invalidcount);
-											memcpy( DMAbuf+oldcount+invalidcount, VideoBase + CharacterCount + oldcount
-												+ invalidcount, newdmacount);
-											//DoDMA(tmpClrbuf + delay, 0);
-											ClockingState = THALT1;
-										} else if (beamx<111 && beamx>=89) {
-											// FIXME this breaks on FF1E writes
-											// swap DMA fetch pointers for colour DMA...
-											if (!(BadLine & 1) && beamx < 94) {
-												unsigned char *tmpbuf = clrbuf;
-												clrbuf = tmpClrbuf;
-												tmpClrbuf = tmpbuf;
-											}
-											//BadLine |= 1;
-										}
-									} else if (BadLine & 1 /*beamx>=91*/) {
-										if (beamx>=94) {
-											BadLine &= ~1;
-										} else if (beamx >= 91) {
-											unsigned char *tmpbuf = clrbuf;
-											clrbuf = tmpClrbuf;
-											tmpClrbuf = tmpbuf;
-											BadLine &= ~1;
-										}
-									}
-								}
-							}
-							// Delayed DMA?
-							// check for flat screen (23 rows)
-							fltscr = !(value&0x08);
-							// check for extended mode
-							ecmode=value&EXTCOLOR;
-							if (ecmode) {
-								tmp=(0xF800)&RAMMask;
-								scrattr|=EXTCOLOR;
-							} else {
-								tmp=(0xFC00)&RAMMask;
-								scrattr&=~EXTCOLOR;
-							}
-							charrambank=Ram+((Ram[0xFF13]<<8)&tmp);
-							charrombank=&(RomHi[0][((Ram[0xFF13] & 0x3C)<<8)&tmp]);
-							// check for graphics mode (5th b14it)
-							scrattr=(scrattr&~GRAPHMODE)|(value&GRAPHMODE);
-							return;
-						case 0xFF07 : 
-							Ram[0xFF07]=value;
-							// check for narrow screen (38 columns)
-							nrwscr=value&0x08;
-							// get horizontal offset of screen when smooth scroll
-							hshift=value&0x07;
-							// check for reversed mode
-							rvsmode=value&0x80;
-							if (rvsmode) {
-								tmp=(0xF800)&RAMMask;
-								scrattr|=REVERSE;
-							} else {
-								tmp=(0xFC00)&RAMMask;
-								scrattr&=~REVERSE;
-							}
-							charrombank=&(RomHi[0][((Ram[0xFF13] & 0x3C)<<8)&tmp]);
-							charrambank=Ram+((Ram[0xFF13]<<8)&tmp);
-							cset = charrom ? charrombank : charrambank;
-							// check for multicolor mode
-							scrattr=(scrattr&~MULTICOLOR)|(value&0x10);
-							return;
-						case 0xFF08 :
-							Ram[0xFF08] = value;
-							return;
-						case 0xFF09 :
-							// clear the interrupt requester bits
-							// by writing 1 into them (!!)
-							Ram[0xFF09]=(Ram[0xFF09]&0x7F)&(~value);
-							return;
-						case 0xFF0A :
-							{
-								Ram[0xFF0A]=value;
-								// change the raster irq line
-								unsigned int newirqline = (irqline&0xFF)|((value&0x01)<<8);
-								if (newirqline != irqline) {
-									if (beamy == newirqline)
-										Ram[0xFF0A]&0x02 ? Ram[0xFF09]|=0x82 : Ram[0xFF09]|=0x02;
-									irqline = newirqline;
-								}
-							}
-							return;
-						case 0xFF0B :
-							{
-								Ram[0xFF0B]=value;
-								unsigned int newirqline = value|(irqline&0x0100);
-								if (newirqline != irqline) {
-									if (beamy == newirqline)
-										Ram[0xFF0A]&0x02 ? Ram[0xFF09]|=0x82 : Ram[0xFF09]|=0x02;
-									irqline = newirqline;
-								}
-							}
-							return;
-						case 0xFF0C :
-							crsrpos=((value<<8)|(crsrpos&0xFF))&0x3FF;
-							return;
-						case 0xFF0D :
-							crsrpos=value|(crsrpos&0xFF00);
-							return;
-						case 0xFF0E :
-							writeSoundReg(0, value);
-							Ram[0xFF0E]=value;
-							return;
-						case 0xFF0F :
-							writeSoundReg(1, value);
-							Ram[0xFF0F]=value;
-							return;
-						case 0xFF10 :
-							writeSoundReg(2, value & 3);
-							Ram[0xFF10]=value;
-							return;
-						case 0xFF11 :
-							Ram[0xFF11]=value;
-							writeSoundReg(3, value);
-							return;
-						case 0xFF12:
-							grbank=Ram+((value&0x38)<<10);
-							if ((value ^ Ram[0xFF12]) & 3)
-								writeSoundReg(4, value & 3);
-							// if the 2nd bit is set the chars are read from ROM
-							charrom=(value&0x04)>0;
-							if (charrom && Ram[0xFF13]<0x80)
-								scrattr|=ILLEGAL;
-							else {
-								scrattr&=~ILLEGAL;
-								cset = (charrom) ? charrombank : charrambank;
-							}
-							Ram[0xFF12]=value;
-							return;
-						case 0xFF13 :
-							// the 0th bit is not writable, it indicates if the ROMs are on
-							Ram[0xFF13]=(value&0xFE)|(Ram[0xFF13]&0x01);
-							// bit 1 is the fast/slow mode switch
-							fastmode = !(value&0x02);
-							(ecmode || rvsmode) ? tmp=(0xF800)&RAMMask : tmp=(0xFC00)&RAMMask;
-							charbank = ((value)<<8)&tmp;
-							charrambank=Ram+charbank;
-							charrombank=&(RomHi[0][charbank & 0x3C00]);
-							if (charrom && value<0x80)
-								scrattr|=ILLEGAL;
-							else {
-								scrattr&=~ILLEGAL;
-								(charrom) ? cset = charrombank : cset = charrambank;
-							}
-							return;
-						case 0xFF14 :
-							Ram[0xFF14]=value;
-							VideoBase=colorbank=Ram+(((value&0xF8)<<8)&RAMMask);
-							return;
-						case 0xFF15 :
-							ecol[0]=bmmcol[0]=mcol[0]=value&0x7F;
-							return;
-						case 0xFF16 :
-							ecol[1]=bmmcol[3]=mcol[1]=value&0x7F;
-							return;
-						case 0xFF17 :
-							ecol[2]=mcol[2]=value&0x7F;
-							return;
-						case 0xFF18 :
-							ecol[3]=value&0x7F;
-							return;
-						case 0xFF19 :
-							value &= 0x7F;
-							framecol=(value<<24)|(value<<16)|(value<<8)|value;
-							return;
-						case 0xFF1A :
-							CharacterPositionReload = (CharacterPositionReload & 0xFF) | ((value&3)<<8);
-							return;
-						case 0xFF1B :
-							CharacterPositionReload = (CharacterPositionReload & 0x300) | value;
-							return;
-						case 0xFF1C :
-							beamy=((value&0x01)<<8)|(beamy&0xFF);
-							return;
-						case 0xFF1D :
-							beamy=(beamy&0x0100)|value;
-							return;
-						case 0xFF1E :
-							{
-								unsigned int low_x = beamx&1;
-								// lowest 2 bits are not writable
-								// inverted value must be written
-								unsigned int new_beamx=((~value))&0xFC;
-								new_beamx >>= 1;
-								new_beamx>=98 ?  new_beamx -= 98 : new_beamx += 16;
-								// writes are aligned to single clock cycles
-								if (low_x) {
-									aligned_write = true;
-									aw_addr_ptr = (unsigned char*)(&beamx);
-									aw_value = new_beamx;
-								} else {
-									beamx = new_beamx;
-								}
-							}
-							return;
-						case 0xFF1F :
-							VertSubCount=value&0x07;
-							crsrphase=(value&0x78)>>3;
-							return;
-						case 0xFF3E :
-							Ram[0xFF13]|=0x01;
-							RAMenable=false;
-							ChangeMemBankSetup(RAMenable);
-							return;
-						case 0xFF3F :
-							Ram[0xFF13]&=0xFE;
-							RAMenable=true;
-							ChangeMemBankSetup(RAMenable);
-							return;
-					}
-					actram[addr&RAMMask] = value;
-					return;
-				case 0xFE:
-					//tcbmbus->Write(addr,value);
-					return;
-				case 0xFD:
-					switch (addr>>4) {
-						case 0xFD0: // RS232
-						case 0xFD1: // User port, PIO & 256 RAM expansion
-						case 0xFD2: // Speech hardware
-							return;
-						case 0xFD3:
-							Ram[0xFD30] = value;
-							return;
-						case 0xFD4: // SID Card
-						case 0xFD5:
-							if (sidCard) {
-								sidCard->setFrequency(0);
-								sidCard->write(addr & 0x1f, value);
-							}
-							return;
-						case 0xFDD:
-							actromlo=&(RomLo[addr&0x03][0]);
-							actromhi=&(RomHi[(addr&0x0c)>>2][0]);
-							return;
-					}
-					return;
-				default:
-					actram[addr&RAMMask] = value;
-					return;
-			}
-	}
-	return;
-}
-
-void TED::dump(void *img)
-{
-	// this is ugly :-P
-   	fwrite(Ram,RAMSIZE,1,(FILE *) img);
-	fwrite(&RAMenable,sizeof(RAMenable),1,(FILE *) img);
-	fwrite(&t1start,sizeof(t1start),1, (FILE *) img);
-	fwrite(&t1on,sizeof(t1on),1, (FILE *) img);
-	fwrite(&t2on,sizeof(t2on),1, (FILE *) img);
-	fwrite(&t3on,sizeof(t3on),1, (FILE *) img);
-	fwrite(&timer1,sizeof(timer1),1, (FILE *) img);
-	fwrite(&timer2,sizeof(timer2),1, (FILE *) img);
-	fwrite(&timer3,sizeof(timer3),1, (FILE *) img);
-	fwrite(&beamx,sizeof(beamx),1, (FILE *) img);
-	fwrite(&beamy,sizeof(beamy),1, (FILE *) img);
-	//fwrite(&x,sizeof(x),1, (FILE *) img);
-	fwrite(&irqline,sizeof(irqline),1, (FILE *) img);
-	fwrite(&crsrpos,sizeof(crsrpos),1, (FILE *) img);
-	fwrite(&scrattr,sizeof(scrattr),1, (FILE *) img);
-	fwrite(&tmp,sizeof(tmp),1, (FILE *) img);
-	fwrite(&nrwscr,sizeof(nrwscr),1, (FILE *) img);
-	fwrite(&hshift,sizeof(hshift),1, (FILE *) img);
-	fwrite(&vshift,sizeof(vshift),1, (FILE *) img);
-	fwrite(&fltscr,sizeof(fltscr),1, (FILE *) img);
-	fwrite(&mcol,sizeof(mcol),1, (FILE *) img);
-	fwrite(chrbuf,40,1, (FILE *) img);
-	fwrite(clrbuf,40,1, (FILE *) img);
-	fwrite(&charrom,sizeof(charrom),1, (FILE *) img);
-	fwrite(&charbank,sizeof(charbank),1, (FILE *) img);
-//	fwrite(&TEDfreq1,sizeof(TEDfreq1),1, (FILE *) img);
-//	fwrite(&TEDfreq2,sizeof(TEDfreq2),1, (FILE *) img);
-//	fwrite(&TEDVolume,sizeof(TEDVolume),1, (FILE *) img);
-//	fwrite(&TEDDA,sizeof(TEDDA),1, (FILE *) img);
-	fwrite(&framecol,sizeof(framecol),1, (FILE *) img);
-}
-
-void TED::memin(void *img)
-{
-
-	// this is ugly :-P
-   	fread(Ram,RAMSIZE,1,(FILE *) img);
-
-	fread(&RAMenable,sizeof(RAMenable),1,(FILE *) img);
-	fread(&t1start,sizeof(t1start),1, (FILE *) img);
-	fread(&t1on,sizeof(t1on),1, (FILE *) img);
-	fread(&t2on,sizeof(t2on),1, (FILE *) img);
-	fread(&t3on,sizeof(t3on),1, (FILE *) img);
-	fread(&timer1,sizeof(timer1),1, (FILE *) img);
-	fread(&timer2,sizeof(timer2),1, (FILE *) img);
-	fread(&timer3,sizeof(timer3),1, (FILE *) img);
-	fread(&beamx,sizeof(beamx),1, (FILE *) img);
-	fread(&beamy,sizeof(beamy),1, (FILE *) img);
-	//fread(&x,sizeof(x),1, (FILE *) img);
-	fread(&irqline,sizeof(irqline),1, (FILE *) img);
-	fread(&crsrpos,sizeof(crsrpos),1, (FILE *) img);
-	fread(&scrattr,sizeof(scrattr),1, (FILE *) img);
-	fread(&tmp,sizeof(tmp),1, (FILE *) img);
-	fread(&nrwscr,sizeof(nrwscr),1, (FILE *) img);
-	fread(&hshift,sizeof(hshift),1, (FILE *) img);
-	fread(&vshift,sizeof(vshift),1, (FILE *) img);
-	fread(&fltscr,sizeof(fltscr),1, (FILE *) img);
-	fread(&mcol,sizeof(mcol),1, (FILE *) img);
-	fread(chrbuf,40,1, (FILE *) img);
-	fread(clrbuf,40,1, (FILE *) img);
-	fread(&charrom,sizeof(charrom),1, (FILE *) img);
-	fread(&charbank,sizeof(charbank),1, (FILE *) img);
-//	fread(&TEDfreq1,sizeof(TEDfreq1),1, (FILE *) img);
-//	fread(&TEDfreq2,sizeof(TEDfreq2),1, (FILE *) img);
-//	fread(&TEDVolume,sizeof(TEDVolume),1, (FILE *) img);
-//	fread(&TEDDA,sizeof(TEDDA),1, (FILE *) img);
-	fread(&framecol,sizeof(framecol),1, (FILE *) img);
-
-	for (int i=0; i<5; i++)
-		writeSoundReg(i, Ram[0xFF0E + i]);
-	beamy=0;
-	beamx=0;
-	scrptr=&(screen[0]);
-	charrambank=Ram+charbank;
-	charrombank=&(RomHi[0][charbank & 0x3C00]);
-	(charrom) ? cset = charrombank : cset = charrambank;
-
-}
-
-// when multi and extended color modes are all on the screen is blank
-inline void TED::mcec()
-{
-	memset( scrptr, 0, 8);
-}
-
-// renders hires text with reverse (128 chars)
-inline void TED::hi_text()
-{
-    unsigned char	chr;
-	unsigned char	charcol;
-	unsigned char	mask;
-	unsigned char	*wbuffer = scrptr + hshift;
-
-	// get the actual physical character column
-	charcol=clrbuf[x];
-	chr=chrbuf[x];
-
-	if ((charcol)&0x80 && !crsrblinkon)
-		mask = 00;
-	else
-		mask = cset[((chr&0x7F)<<3)|VertSubCount];
-
-	if (chr&0x80)
-		mask ^= 0xFF;
-	if (crsrpos==((CharacterPosition+x)&0x3FF) && crsrblinkon )
-		mask ^= 0xFF;
-
-	wbuffer[0] = (mask & 0x80) ? charcol : mcol[0];
-	wbuffer[1] = (mask & 0x40) ? charcol : mcol[0];
-	wbuffer[2] = (mask & 0x20) ? charcol : mcol[0];
-	wbuffer[3] = (mask & 0x10) ? charcol : mcol[0];
-	wbuffer[4] = (mask & 0x08) ? charcol : mcol[0];
-	wbuffer[5] = (mask & 0x04) ? charcol : mcol[0];
-	wbuffer[6] = (mask & 0x02) ? charcol : mcol[0];
-	wbuffer[7] = (mask & 0x01) ? charcol : mcol[0];
-}
-
-// renders text without the reverse (all 256 chars)
-inline void TED::rv_text()
-{
-	unsigned char	chr;
-	unsigned char	charcol;
-	unsigned char	mask;
-	unsigned char	*wbuffer = scrptr + hshift;
-
-	// get the actual physical character column
-	charcol=clrbuf[x];
-	chr=chrbuf[x];
-
-	if ((charcol)&0x80 && !crsrblinkon)
-		mask = 00;
-	else
-		mask = cset[(chr<<3)|VertSubCount];
-
-	if (crsrpos==((CharacterPosition+x)&0x3FF) && crsrblinkon )
-		mask ^= 0xFF;
-
-	wbuffer[0] = (mask & 0x80) ? charcol : mcol[0];
-	wbuffer[1] = (mask & 0x40) ? charcol : mcol[0];
-	wbuffer[2] = (mask & 0x20) ? charcol : mcol[0];
-	wbuffer[3] = (mask & 0x10) ? charcol : mcol[0];
-	wbuffer[4] = (mask & 0x08) ? charcol : mcol[0];
-	wbuffer[5] = (mask & 0x04) ? charcol : mcol[0];
-	wbuffer[6] = (mask & 0x02) ? charcol : mcol[0];
-	wbuffer[7] = (mask & 0x01) ? charcol : mcol[0];
-}
-
-// renders extended color text
-inline void TED::ec_text()
-{
-	unsigned char charcol;
-	unsigned char chr;
-	unsigned char mask;
-	unsigned char *wbuffer = scrptr + hshift;
-
-	// get the actual physical character column
-	charcol = clrbuf[x];
-	chr = chrbuf[x];
-
-	mask = cset[ ((chr&0x3F)<<3)|VertSubCount ];
-
-	chr = (chr&0xC0)>>6;
-
-	wbuffer[0] = (mask & 0x80) ? charcol : ecol[chr];
-	wbuffer[1] = (mask & 0x40) ? charcol : ecol[chr];
-	wbuffer[2] = (mask & 0x20) ? charcol : ecol[chr];
-	wbuffer[3] = (mask & 0x10) ? charcol : ecol[chr];
-	wbuffer[4] = (mask & 0x08) ? charcol : ecol[chr];
-	wbuffer[5] = (mask & 0x04) ? charcol : ecol[chr];
-	wbuffer[6] = (mask & 0x02) ? charcol : ecol[chr];
-	wbuffer[7] = (mask & 0x01) ? charcol : ecol[chr];
-}
-
-// renders multicolor text
-inline void TED::mc_text_rvs()
-{
-	unsigned char chr=chrbuf[x];
-	unsigned char charcol=clrbuf[x];
-	unsigned char *wbuffer = scrptr + hshift;
-	unsigned char mask;
-
-	mask = cset[ (chr<<3)|VertSubCount ];
-
-	if (charcol&0x08) { // if character is multicolored
-
-		mcol[3]=charcol&0xF7;
-
-		wbuffer[0] = wbuffer[1] = mcol[ (mask & 0xC0) >> 6 ];
-		wbuffer[2] = wbuffer[3] = mcol[ (mask & 0x30) >> 4 ];
-		wbuffer[4] = wbuffer[5] = mcol[ (mask & 0x0C) >> 2 ];
-		wbuffer[6] = wbuffer[7] = mcol[  mask & 0x03 ];
-
-	} else { // this is a normally colored character
-
-		wbuffer[0] = (mask & 0x80) ? charcol : mcol[0];
-		wbuffer[1] = (mask & 0x40) ? charcol : mcol[0];
-		wbuffer[2] = (mask & 0x20) ? charcol : mcol[0];
-		wbuffer[3] = (mask & 0x10) ? charcol : mcol[0];
-		wbuffer[4] = (mask & 0x08) ? charcol : mcol[0];
-		wbuffer[5] = (mask & 0x04) ? charcol : mcol[0];
-		wbuffer[6] = (mask & 0x02) ? charcol : mcol[0];
-		wbuffer[7] = (mask & 0x01) ? charcol : mcol[0];
-	}
-}
-
-// renders multicolor text with reverse bit set
-inline void TED::mc_text()
-{
-	unsigned char charcol=clrbuf[x];
-	unsigned char chr=chrbuf[x]&0x7F;
-	unsigned char *wbuffer = scrptr + hshift;
-	unsigned char mask;
-
-	mask = cset[ (chr<<3)|VertSubCount ];
-
-	if ((charcol)&0x08) { // if character is multicolored
-
-		mcol[3]=(charcol)&0xF7;
-
-		wbuffer[0] = wbuffer[1] = mcol[ (mask & 0xC0) >> 6 ];
-		wbuffer[2] = wbuffer[3] = mcol[ (mask & 0x30) >> 4 ];
-		wbuffer[4] = wbuffer[5] = mcol[ (mask & 0x0C) >> 2 ];
-		wbuffer[6] = wbuffer[7] = mcol[ mask & 0x03 ];
-
-	} else { // this is a normally colored character
-
-		wbuffer[0] = (mask & 0x80) ? charcol : mcol[0];
-		wbuffer[1] = (mask & 0x40) ? charcol : mcol[0];
-		wbuffer[2] = (mask & 0x20) ? charcol : mcol[0];
-		wbuffer[3] = (mask & 0x10) ? charcol : mcol[0];
-		wbuffer[4] = (mask & 0x08) ? charcol : mcol[0];
-		wbuffer[5] = (mask & 0x04) ? charcol : mcol[0];
-		wbuffer[6] = (mask & 0x02) ? charcol : mcol[0];
-		wbuffer[7] = (mask & 0x01) ? charcol : mcol[0];
-	}
-}
-
-// renders hires bitmap graphics
-inline void TED::hi_bitmap()
-{
-	unsigned char mask;
-	unsigned char *wbuffer = scrptr + hshift;
-	// get the actual color attributes
-	hcol[0]=(chrbuf[x]&0x0F)|(clrbuf[x]&0x70);
-	hcol[1]=((chrbuf[x]&0xF0)>>4)|((clrbuf[x]&0x07)<<4);
-
-	mask = grbank[ (((CharacterPosition+x)<<3)&0x1FFF)|VertSubCount ];
-
-	wbuffer[0] = (mask & 0x80) ? hcol[1] : hcol[0];
-	wbuffer[1] = (mask & 0x40) ? hcol[1] : hcol[0];
-	wbuffer[2] = (mask & 0x20) ? hcol[1] : hcol[0];
-	wbuffer[3] = (mask & 0x10) ? hcol[1] : hcol[0];
-	wbuffer[4] = (mask & 0x08) ? hcol[1] : hcol[0];
-	wbuffer[5] = (mask & 0x04) ? hcol[1] : hcol[0];
-	wbuffer[6] = (mask & 0x02) ? hcol[1] : hcol[0];
-	wbuffer[7] = (mask & 0x01) ? hcol[1] : hcol[0];
-
-}
-
-// renders multicolor bitmap graphics
-inline void TED::mc_bitmap()
-{
-	unsigned char	mask;
-	unsigned char	*wbuffer = scrptr + hshift;
-	// get the actual color attributes
-	bmmcol[1]=((chrbuf[x]&0xF0)>>4)|((clrbuf[x]&0x07)<<4);
-	bmmcol[2]=(chrbuf[x]&0x0F)|(clrbuf[x]&0x70);
-
-	mask = grbank[ (((CharacterPosition+x)<<3)&0x1FFF)+VertSubCount ];
-
-	wbuffer[0]= wbuffer[1] = bmmcol[ (mask & 0xC0) >> 6 ];
-	wbuffer[2]= wbuffer[3] = bmmcol[ (mask & 0x30) >> 4 ];
-	wbuffer[4]= wbuffer[5] = bmmcol[ (mask & 0x0C) >> 2 ];
-	wbuffer[6]= wbuffer[7] = bmmcol[  mask & 0x03 ];
-}
-
-// "illegal" mode: when $FF13 points to an illegal ROM address
-//  the current data on the bus is displayed
-inline void TED::illegalbank()
-{
-	unsigned char	chr = chrbuf[x];
-	unsigned char	charcol = clrbuf[x];
-	unsigned char	mask;
-	unsigned char	*wbuffer = scrptr + hshift;
-
-	if (charcol&0x80 && crsrblinkon)
-		mask = 00;
-	else {
-		if (BadLine==1)
-			mask = clrbuf[x];
-		else if (BadLine==2)
-			mask = chrbuf[x];
-		else
-			mask = Read(cpuptr->getPC());
-	}
-
-	if (chr&0x80)
-		mask ^= 0xFF;
-	if (crsrpos==((CharacterPosition+x)&0x3FF) && crsrblinkon)
-		mask ^= 0xFF;
-
-	wbuffer[0] = (mask & 0x80) ? charcol : mcol[0];
-	wbuffer[1] = (mask & 0x40) ? charcol : mcol[0];
-	wbuffer[2] = (mask & 0x20) ? charcol : mcol[0];
-	wbuffer[3] = (mask & 0x10) ? charcol : mcol[0];
-	wbuffer[4] = (mask & 0x08) ? charcol : mcol[0];
-	wbuffer[5] = (mask & 0x04) ? charcol : mcol[0];
-	wbuffer[6] = (mask & 0x02) ? charcol : mcol[0];
-	wbuffer[7] = (mask & 0x01) ? charcol : mcol[0];
-}
-
-inline void TED::DoDMA( unsigned char *Buf, unsigned int Offset )
-{
-	if ( CharacterCount>=0x03D8 ) {
-		memcpy( Buf, VideoBase + CharacterCount + Offset, 0x400 - CharacterCount);
-		memcpy( Buf + 0x400 - CharacterCount, VideoBase + Offset, (CharacterCount + 40)&0x03FF);
-	} else {
-		memcpy( Buf, VideoBase + CharacterCount + Offset, 40);
-	}
-}
-
-extern int currtime;
-
-// main loop of the whole emulation as the TED feeds the CPU with clock cycles
-void TED::ted_process(unsigned int count)
-{
-    do {
-        switch(++beamx) {
-
-            default:
-                break;
-
-            case 2:
-                if (VertSubActive)
-                	VertSubCount = (VertSubCount+1)&7;
-                break;
-
-            case 3:
-				if (AttribFetch && beamy==0) {
-					VertSubCount = 7;
-				}
-				break;
-
-             case 4:
-                 if (AttribFetch) {
-					BadLine |= ((vshift)&7) == (beamy&7);
-					if ( BadLine ) {
-						ClockingState = THALT1;
-					} else
-                 		ClockingState = TSS;
-                 	if (beamy==203) {
-						AttribFetch = false;
-						if (!(BadLine & 2)) ClockingState = TSS;
-					}
-				}
-                break;
-
-            case 8:
-				HBlanking = false;
-				break;
-
-            case 10:
-				if (VertSubActive)
-					CharacterPosition = CharacterPositionReload;
-                break;
-
-            case 16:
-				if (ScreenOn) {
-					SideBorderFlipFlop = true;
-					memset( scrptr, mcol[0], hshift);
-					if (nrwscr)
-						CharacterWindow = true;
-					x = 0;
-				}
-				if (BadLine & 1)
-					DoDMA(tmpClrbuf, 0);
-				if (BadLine & 2)
-					DoDMA(chrbuf, (BadLine & 1) ? 0 : 0x400);
-                break;
-
-			case 18:
-				if (ScreenOn && !nrwscr) {
-					CharacterWindow = true;
-				}
-				break;
-
-			case 89:
-				if (/*VertSubActive &&*/ VertSubCount == 6)
-					CharacterCount = (CharacterCount + 40)&0x3FF;
-				break;
-
-            case 90:
-    			if ( VertSubActive && VertSubCount == 7 )
-					CharacterPositionReload = (CharacterPosition + 40)&0x3FF;
-				break;
-
-            case 91:
-		    	ClockingState = TRFSH;
-		    	break;
-
-			case 94:
-				if (ScreenOn && !nrwscr)
-  					SideBorderFlipFlop = CharacterWindow = false;
-				break;
-
-  			case 96:
-				if (ScreenOn && nrwscr)
-  					SideBorderFlipFlop = CharacterWindow = false;
-				// FIXME this breaks on FF1E writes
-				if (BadLine & 1) {
-					// swap DMA fetch pointers for colour DMA...
-					unsigned char *tmpbuf = clrbuf;
-					clrbuf = tmpClrbuf;
-					tmpClrbuf = tmpbuf;
-				}
-  			    break;
-
-			case 111:
-				if ((BadLine&1)) {
-    			    BadLine = 2;
-					VertSubActive = true;
-				} else if (BadLine&2) {// in the second bad line, we're finished...
-   					BadLine &= ~2;
-				}
-				break;
-
-            case 102:
-		    	ClockingState = fastmode ? TDS : TSS;
-		    	break;
-
-		    case 104:
-				HBlanking = true;
-				break;
-
-		    case 107: // HSYNC start
-				break;
-
-			case 256:
-			case 128:
-				beamx = 15;
-				break;
-			case 114: // HSYNC end
-    			beamx=0;
-    			// the beam reached a new line
-    			TVScanLineCounter += 1;
-    			if ( TVScanLineCounter >= 340 ) {
-					TVScanLineCounter = 0;
-					scrptr=screen;
-//					render_ok=true;
-				}
-    			switch (++beamy) {
-
-    			    case 4:
-    			        if (!fltscr) ScreenOn = AttribFetch;
-    			        break;
-
-    			    case 8:
-						if (fltscr) ScreenOn = AttribFetch;
-    			        break;
-
-					case 200:
-						if (fltscr) ScreenOn = false;
-						break;
-
-    			    case 204:
-						if (!fltscr) ScreenOn = false;
-						break;
-
-    			    case 205:
-						CharacterCount = 0;
-					    // cursor phase counter in TED register $1F
-						VertSubActive = false;
-						if ((++crsrphase&0x0F) == 0x0F)
-    			        	crsrblinkon ^= 1;
-    			        break;
-
-					case 251:
-						VBlanking = true;
-						break;
-
-    			    case 261: // Vertical retrace
-						// frame ready...
-						//render_ok=true;
-						// reset screen pointer ("TV" electron beam)
-						scrptr=screen;
-						TVScanLineCounter = 0;
-						break;
-
-					case 271:
-						VBlanking = false;
-						break;
-
-					case 512:
-					case 312:
-					    beamy = 0;
-					    CharacterPosition = CharacterPositionReload = 0;
-					    AttribFetch = (Ram[0xFF06]&0x10) != 0;
-				}
-				// is there raster interrupt?
-				if (beamy == irqline)
-					Ram[0xFF09] |= Ram[0xFF0A]&0x02 ? 0x82 : 0x02;
-		}
-
-		if (beamx&1) {	// perform these only in every second cycle
-			if (t2on && !((timer2--)&0xFFFF)) {// Timer2 permitted
-				timer2=0xFFFF;
-				Ram[0xFF09] |= Ram[0xFF0A]&0x10 ? 0x90 : 0x10; // interrupt
-			}
-			if (t3on && !((timer3--)&0xFFFF)) {// Timer3 permitted
-				timer3=0xFFFF;
-				Ram[0xFF09] |= Ram[0xFF0A]&0x40 ? 0xC0 : 0x40; // interrupt
-			}
-			if (!CharacterWindow && !HBlanking && !VBlanking) {
-				// we are on the border area, so use the frame color
-				*((int*)(scrptr+4)) = framecol;
-			}
-			if (scrptr != endptr)
-				scrptr+=8;
-		} else {
-			if (t1on && !timer1--) { // Timer1 permitted decreased and zero
-				timer1=(t1start-1)&0xFFFF;
-				Ram[0xFF09] |= Ram[0xFF0A]&0x08 ? 0x88 : 0x08; // interrupt
-			}
-
-			if (!(HBlanking |VBlanking)) {
-				if (SideBorderFlipFlop) { // drawing the visible part of the screen
-					// call the relevant rendering function
-					//switch (scrattr) {
-					//	case 0:
-					//		hi_text();
-					//		break;
-					//	case REVERSE :
-					//		rv_text();
-					//		break;
-					//	case MULTICOLOR|REVERSE :
-					//	    mc_text_rvs();
-					//	    break;
-					//	case MULTICOLOR :
-					//		mc_text();
-					//		break;
-					//	case EXTCOLOR|REVERSE :
-					//	case EXTCOLOR :
-					//		ec_text();
-					//		break;
-					//	case GRAPHMODE|REVERSE :
-					//	case GRAPHMODE :
-					//		hi_bitmap();
-					//		break;
-					//	case EXTCOLOR|MULTICOLOR :
-					//	case GRAPHMODE|EXTCOLOR :
-					//	case GRAPHMODE|MULTICOLOR|EXTCOLOR :
-					//	case REVERSE|MULTICOLOR|EXTCOLOR :
-					//	case GRAPHMODE|MULTICOLOR|EXTCOLOR|REVERSE :
-					//		mcec();
-					//		break;
-					//	case GRAPHMODE|MULTICOLOR :
-					//	case GRAPHMODE|MULTICOLOR|REVERSE :
-					//		mc_bitmap();
-					//		break;
-					//	default:
-				 //   		illegalbank();
-				 //   		break;
-					//}
-					x = (x + 1) & 0x3F;
-				}
-				if (!CharacterWindow) {
-					// we are on the border area, so use the frame color
-					*((int*)scrptr) = framecol;
-				}
-			}
-
-			CycleCounter++;
-			if (!(CycleCounter & 0x03) && int(count) > 0) {
-				static unsigned int remainder = 0;
-				unsigned int samples = (playbackSpeed + remainder) / 4;
-				if (samples) {
-					renderSound(samples);
-					if (sidCard) {
-						sidCard->calcSamples(samples);
-					}
-				}
-				remainder = (playbackSpeed + remainder) % 4;
-				count -= samples;
-				currtime += samples;
-			}
-		}
-		if (aligned_write) {
-			*aw_addr_ptr = aw_value;
-			aligned_write = false;
-		}
-		switch (ClockingState|(beamx&1)) {
-        	case TRFSH|1:
- 	    	case TSS|1:
- 	    	case TDS|1:
-       		case TDS:
-     	    	cpuptr->process();
-     	    	break;
-      		case THALT1|1:
-  	    	case THALT2|1:
-        	case THALT3|1:
-            	cpuptr->stopcycle();
-            	ClockingState<<=1;
-            	break;
-		}
-
-	} while (int(count) > 0);
-
-	render_ok = false;
-}
-
-void TED::enableChannel(unsigned int channel, bool enable) 
-{
-	channelMask[channel % 3] = enable ? -1 : 0;
-	if (sidCard) sidCard->enableDisableChannel(channel, enable);
-}
-
-void TED::enableSidCard(bool enable, unsigned int disableMask)
-{
-	if (enable) {
-		if (sidCard)
-			return;
-		sidCard = new SIDsound(SID8580, disableMask);
-		sidCard->setSampleRate(TED_SOUND_CLOCK);
-	} else {
-		if (!sidCard)
-			return;
-		delete sidCard;
-		sidCard = 0;
-	}
-}
-
-TED::~TED()
-{
-}
-//--------------------------------------------------------------
-

+ 0 - 205
soloud.mod/soloud/src/tools/tedsid2dump/tedmem.h

@@ -1,205 +0,0 @@
-/*
-	YAPE - Yet Another Plus/4 Emulator
-
-	The program emulates the Commodore 264 family of 8 bit microcomputers
-
-	This program is free software, you are welcome to distribute it,
-	and/or modify it under certain conditions. For more information,
-	read 'Copying'.
-
-	(c) 2000, 2001, 2004, 2007 Attila Grósz
-*/
-#ifndef _TEDMEM_H
-#define _TEDMEM_H
-
-#define RAMSIZE 65536
-#define ROMSIZE 16384
-#define SCR_HSIZE 456
-#define SCR_VSIZE 312
-#define TED_SOUND_CLOCK (221680)
-
-#include "types.h"
-#include "mem.h"
-//#include "serial.h"
-
-class CPU;
-class KEYS;
-class TAP;
-class Filter;
-class SIDsound;
-
-class TED : public MemoryHandler {
-  public:
-  	TED();
-  	~TED();
-	KEYS *keys;
-	TAP	*tap;
-	virtual void UpdateSerialState(unsigned char portval);
-	virtual void Reset();
-	// read memory through memory decoder
-  	virtual unsigned char Read(unsigned int addr);
-  	virtual void Write(unsigned int addr, unsigned char value);
-	// read memory directly
-	unsigned char readDMA(unsigned int addr) { return Ram[addr]; }
-	// same as above but with writing
-	void wrtDMA(unsigned int addr, unsigned char value) { Ram[addr]=value; }
-	void setRamMask(unsigned int value) { RAMMask=value;}
-	unsigned int getRamMask(void) { return RAMMask;}
-	// are the ROMs disabled?
-  	bool RAMenable;
-	// indicates whether 256K RAM is on
-	bool bigram, bramsm;
-	// /ram/rom path/load variables
-	void loadroms(void);
-	void loadloromfromfile(int nr, char fname[256]);
-	void loadhiromfromfile(int nr, char fname[256]);
-	char romlopath[4][256];
-	char romhighpath[4][256];
-	// this is for the FRE support
-  	void dump(void *img);
-	void memin(void *img);
-	// screen rendering
-	// raster co-ordinates and boundaries
-	unsigned int beamx, beamy;
-	unsigned char screen[SCR_HSIZE*(SCR_VSIZE*2)];
-	bool render_ok;
-	void texttoscreen(int x,int y, const char *scrtxt);
-	void chrtoscreen(int x,int y, char scrchr);
-	// cursor stuff
-	unsigned int crsrpos;
-	int crsrphase;
-	bool crsrblinkon;
-	// is joy emulated?
-	bool joyemu;
-	// CPU class pointer
-	CPU	*cpuptr;
-	// TED process (main loop of emulation)
-	void ted_process(unsigned int count);
-	void setDS( void *ds);
-
- 	unsigned char Ram[RAMSIZE];
-  	unsigned char RomHi[4][ROMSIZE];
-	void ChangeMemBankSetup(bool romoff);
-
-	// timer stuff
-	bool t1on, t2on, t3on;
-	unsigned int timer1, timer2, timer3, t1start;
-
-	ClockCycle GetClockCount();
-	static TED *instance() { return instance_; };
-	void forcedReset();
-	// PSID support
-	void setMasterVolume(unsigned int shift);
-	void setSampleRate(unsigned int value);
-	void setFilterOrder(unsigned int value);
-	void initFilter(unsigned int sampleRate_, unsigned int filterOrder_);
-	unsigned int getSampleRate() { return sampleRate; };
-	void injectCodeToRAM(unsigned int address, unsigned char *from, size_t len);
-	void oscillatorInit();
-	void oscillatorReset();
-	void setPsidPlayAddress(unsigned int addr) { psidReplayAddr = addr; };
-	unsigned int getPsidPlayAddress() { return psidReplayAddr; };
-	void setPsid(bool isPsidFormat) { psidFormat = isPsidFormat; };
-	unsigned int isPsid() { return psidFormat; };
-	void selectWaveForm(unsigned int channel, unsigned int wave);
-	unsigned int getWaveForm(unsigned int channel) { return waveForm[channel]; }
-	void writeProtectedPlayerMemory(unsigned int addr, unsigned char *byte, unsigned int len) {
-		for(unsigned int i = 0; i < len; i++)
-			protectedPlayerMemory[(addr + i) & 0xfff] = *byte++;
-	}
-	void setplaybackSpeed(unsigned int speed);
-	void enableChannel(unsigned int channel, bool enable);
-	bool isChannelEnabled(unsigned int channel) {
-		return channelMask[channel % 3] != 0;
-	}
-	void storeToBuffer(short *buffer,unsigned int count = 1);
-	void copyToKbBuffer(char *bufferString, unsigned int bufferLength = -1);
-	unsigned int getTimeSinceLastReset();
-	void resetCycleCounter() { lastResetCycle = CycleCounter; }
-	SIDsound *getSidCard() { return sidCard; };
-	void enableSidCard(bool enable, unsigned int disableMask);
-	static unsigned int masterVolume;
-
-  private:
-	static TED *instance_;
-    Filter *filter;
-	// memory variables
-  	unsigned char RomLo[4][ROMSIZE];
-	unsigned char *actromlo, *actromhi;
-	unsigned char *mem_8000_bfff, *mem_c000_ffff, *mem_fc00_fcff;
-  	unsigned int RAMMask;
-	unsigned char RamExt[4][RAMSIZE];	// Ram slots for 256 K RAM
-	unsigned char *actram;
-	unsigned char prp, prddr;
-	unsigned char pio1;
-	// indicates if screen blank is off
-	bool scrblank;
-	// for vertical/horizontal smooth scroll
-	unsigned int hshift, vshift;
-	unsigned int nrwscr, fltscr;
-	// char/color buffers
-	unsigned char DMAbuf[64*3];
-	unsigned char *chrbuf, *clrbuf, *tmpClrbuf;
-	int cposy;
-	// rendering functions
-	void	(TED::*scrmode)();
-	inline void	hi_text();
-	void	mc_text();
-	void 	mc_text_rvs();
-	void	ec_text();
-	void	mcec();
-	void	rv_text();
-	void	hi_bitmap();
-	void	mc_bitmap();
-	void	illegalbank();
-	bool	charrom;
-	int		rvsmode, grmode, ecmode;
-	int		scrattr, charbank;
-
-	// border color
-	unsigned int framecol;
-	// various memory pointers
-	unsigned char *colorbank, *charrombank, *charrambank;
-	unsigned char *grbank;
-	unsigned char *scrptr, *endptr, *ramptr;
-	const char *DMAptr;
-	unsigned int fastmode, irqline;
-	unsigned char hcol[2], mcol[4], ecol[4], bmmcol[4], *cset;
-	static ClockCycle CycleCounter;
-	ClockCycle lastResetCycle;
-	//
-	void DoDMA( unsigned char *Buf, unsigned int Offset  );
-	//
-	void setFreq(unsigned int channel, int freq);
-	void writeSoundReg(unsigned int reg, unsigned char value);
-	void renderSound(unsigned int nrsamples);
-	unsigned int psidReplayAddr;
-	bool psidFormat;
-	unsigned int waveForm[2];
-	unsigned int getWaveSample(unsigned int channel, unsigned int wave);
-	unsigned int waveSquare(unsigned int channel);
-	unsigned int waveSawTooth(unsigned int channel);
-	unsigned int waveTriangle(unsigned int channel);
-	unsigned char protectedPlayerMemory[0x1000];
-	unsigned int playbackSpeed;
-	unsigned int channelMask[3];
-	unsigned int sampleRate;
-	unsigned int filterOrder;
-	SIDsound *sidCard;
-};
-
-const short HUE[16] = { 0, 0,
-/*RED*/	103, /*CYAN	*/ 283,
-/*MAGENTA*/	53,/*GREEN*/ 241, /*BLUE*/347,
-/*YELLOW*/ 167,/*ORANGE*/123, /*BROWN*/	148,
-/*YLLW-GRN*/ 195, /*PINK*/ 83, /*BLU-GRN*/ 265,
-/*LT-BLU*/ 323, /*DK-BLU*/ /*23 original, but wrong...*/ 355, /*LT-GRN	*/ 213
-};
-
-const double luma[9] = {
-/*
-	Luminancia Voltages
-*/
-	2.00, 2.4, 2.55, 2.7, 2.9, 3.3, 3.6, 4.1, 4.8 };
-
-#endif //_TEDMEM_H

+ 0 - 553
soloud.mod/soloud/src/tools/tedsid2dump/tedplay.cpp

@@ -1,553 +0,0 @@
-#include <iostream>
-#include <fstream>
-#include <sstream>
-#include <string>
-#include <cstdio>
-#include "psid.h"
-#include "CbmTune.h"
-#include "Tedmem.h"
-#include "Cpu.h"
-#include "Sid.h"
-
-#define MAX_BUFFER_SIZE 0x10000
-
-static unsigned char inputBuffer[MAX_BUFFER_SIZE];
-static const unsigned int playerStartAddress = 0xfe00;
-static unsigned char psidPlayer[] = {
-	0xA9, 0x00 // song nr (offset 2)
-	,0x20 ,
-	0x33 , 0xfe, // song init (offset 4)
-	0x78 , 0xA9 , 0x00 , 0x8D ,
-	0x0B , 0xFF , 0xA9 , 0x38 ,
-	0xCD , 0x1D , 0xFF , 0xD0 ,
-	0xFB , 0xCE , 0x19 , 0xFF ,
-	0x20 , 0x33 , 0xfe  // song play (offset 23)
-	, 0xEE , 0x19 , 0xFF , 0x4C , 0x0B , 0xfe, 
-	0x00 , 0x60 // fake RTS at $FE33
-};
-
-static unsigned char rsidPlayer[] = {
-	0xA9, 0x00, // song nr (offset 2)
-	0x20,
-	0xea, 0xe2, // song init (offset 3)
-	0x18, 0x90, 0xfe // song init (offset 5)
-};
-
-static unsigned char prgPlayer[] = {
-	0x20, 0xbe, 0x8b,
-	0x4c, 0xdc, 0x8b
-};
-
-static TED *ted = NULL;
-static CPU *cpu;
-static PsidHeader psidHdr;
-static int playState = 1;
-
-void process(int ticks)
-{
-	ted->ted_process(ticks);
-}
-
-PsidHeader &getPsidHeader()
-{
-	return psidHdr;
-}
-
-unsigned int parsePsid(unsigned char *buf, PsidHeader &psidHdr_)
-{
-	char *buffer = (char *) buf;
-
-	if (buf) {
-		memset(psidHdr_.title, 0, sizeof(psidHdr_.title));
-		strncpy(psidHdr_.title, buffer + PSID_NAME, 32);
-		psidHdr_.title[PSID_NAME + 32] = 0;
-		strncpy(psidHdr_.author, buffer + PSID_AUTHOR, 32);
-		psidHdr_.author[PSID_AUTHOR + 32] = 0;
-		strncpy(psidHdr_.copyright, buffer + PSID_COPYRIGHT, 32);
-		psidHdr_.copyright[PSID_COPYRIGHT + 32] = 0;
-	} else {
-		memset(psidHdr_.title, 0, sizeof(psidHdr_.title));
-		memset(psidHdr_.author, 0, 32);
-		memset(psidHdr_.copyright, 0, 32);
-		memset(psidHdr_.copyright, 0, 32);
-	}
-	return 0;
-}
-
-void getPsidProperties(PsidHeader &psidHdr_, char *os)
-{
-	char temp[1024];
-
-	if (!psidHdr_.tracks) {
-		strcat(os, "");
-		return;
-	}
-	std::string mType;
-	switch (psidHdr_.type) {
-		default:
-			mType = "Other";
-			break;
-		case 0:
-			mType = "PSID";
-			break;
-		case 1:
-			mType = "RSID";
-			break;
-		case 2:
-			mType = "CBM8M";
-			break;
-	}
-	sprintf(os,   "Type:         %s\r\n", mType.c_str());
-	sprintf(temp, "Chip:         %s\r\n", psidHdr_.model);
-	strcat(os, temp);
-	sprintf(temp, "Module:       %s\r\n", psidHdr_.title);
-	strcat(os, temp);
-	sprintf(temp, "Author:       %s\r\n", psidHdr_.author);
-	strcat(os, temp);
-	sprintf(temp, "Released:     %s\r\n", psidHdr_.copyright);
-	strcat(os, temp);
-	sprintf(temp, "Total tunes:  %u\r\n", psidHdr_.tracks);
-	strcat(os, temp);
-	sprintf(temp, "Default tune: %u\r\n", psidHdr_.defaultTune);
-	strcat(os, temp);
-	sprintf(temp, "Init        : $%04X\r\n", psidHdr_.initAddress);
-	strcat(os, temp);
-	sprintf(temp, "Play address: $%04X\r\n", psidHdr_.replayAddress);
-	strcat(os, temp);
-}
-
-void printPsidInfo(PsidHeader &psidHdr_)
-{
-	char output[1024];
-	getPsidProperties(psidHdr_, output);
-	std::cout << std::string(output) << std::endl;
-}
-
-unsigned int readFile(char *fName, unsigned char **bufferPtr, size_t *bLen)
-{
-	std::FILE *file = (std::FILE *) 0;
-
-	if (!fName)
-		return 2;
-
-	try {
-		size_t flen;
-		file = std::fopen(fName, "rb");
-		if (!file)
-		{
-			std::cerr << "File not found " << fName << std::endl;
-			return 3;
-		}
-		std::fseek(file, 0, SEEK_END);
-		flen = std::ftell(file);
-		if (flen > MAX_BUFFER_SIZE) flen = MAX_BUFFER_SIZE;
-		std::fseek(file, 0, SEEK_SET);
-		*bufferPtr = inputBuffer;
-		size_t r = std::fread(*bufferPtr, flen, 1, file);
-		*bLen = flen;
-		fclose(file);
-	} catch(char *str) {
-		std::cerr << "Error opening " << fName << std::endl;
-		std::cerr << "    exception: " << str << std::endl;
-		return 1;
-	}
-	return 0;
-}
-
-bool psidChangeTrack(int direction)
-{
-	if (direction > 0) {
-		if (psidHdr.tracks > psidHdr.current) {
-			psidPlayer[1] += direction;
-			rsidPlayer[1] += direction;
-			psidHdr.current += direction;
-		} else {
-			std::cerr << "No more tracks." << std::endl;
-			return false;
-		}
-	} else {
-		if (1 < psidHdr.current) {
-			psidPlayer[1] += direction;
-			rsidPlayer[1] += direction;
-			psidHdr.current += direction;
-		} else {
-			std::cerr << "No more tracks." << std::endl;
-			return false;
-		}
-	}
-	if (psidHdr.type == 1 || (psidHdr.type == 2 && !psidHdr.replayAddress)) {
-		ted->writeProtectedPlayerMemory(playerStartAddress, rsidPlayer, sizeof(rsidPlayer));
-	} else {
-		ted->writeProtectedPlayerMemory(playerStartAddress, psidPlayer, sizeof(psidPlayer));
-	}
-	cpu->setPC(playerStartAddress);
-	return true;
-}
-
-void machineReset()
-{
-	ted->forcedReset();
-	cpu->Reset();
-}
-
-TED *machineInit()
-{
-	ted = new TED;
-	cpu = new CPU(ted, ted->Ram + 0xff09, ted->Ram + 0x100);
-	ted->cpuptr = cpu;
-	ted->loadroms();
-	machineReset();
-	return ted;
-}
-
-void tedPlaySetFilterOrder(unsigned int filterOrder)
-{
-	if (ted) {
-		ted->setFilterOrder(filterOrder);
-	}
-}
-
-void dumpMem(std::string name)
-{
-	FILE *fp = fopen(name.c_str(), "wb");
-	if (!fp)
-		return;
-	for(unsigned int i = 0; i <= 0xffff; i++) {
-		fputc(ted->Read(i), fp);
-	}
-	fclose(fp);
-}
-
-void machineDoSomeFrames(unsigned int count)
-{
-}
-
-void machineShutDown()
-{
-	if(ted) {
-		delete ted;
-		ted = 0;
-	}
-	if (cpu) {
-		delete cpu;
-		cpu = 0;
-	}
-}
-
-void tedplayPause()
-{
-}
-
-void tedplayPlay()
-{
-}
-
-void tedplayStop()
-{
-}
-
-unsigned int tedplayGetSecondsPlayed()
-{
-	unsigned int sec = ted->getTimeSinceLastReset();
-	return sec;
-}
-
-void tedPlayResetCycleCounter()
-{
-	ted->resetCycleCounter();
-}
-
-int tedPlayGetState()
-{
-	return playState;
-}
-
-unsigned int tedPlayGetWaveform(unsigned int channel)
-{
-	if (ted) {
-		return ted->getWaveForm(channel);
-	}
-	return 0;
-}
-
-void tedPlaySetWaveform(unsigned int channel, unsigned int wave)
-{
-	bool wasPlaying = (playState == 1);
-	
-	if (wasPlaying)
-		tedplayPause();
-	if (ted) {
-		ted->selectWaveForm(channel, wave);
-	}
-	if (wasPlaying)
-		tedplayPlay();
-}
-
-void tedplayClose()
-{
-	machineShutDown();
-}
-
-void tedPlayGetInfo(void *file, PsidHeader &hdr)
-{
-	unsigned char buf[256];
-	FILE *fp = reinterpret_cast<FILE *>(file);
-
-	memset(hdr.title, 0, sizeof(hdr.title));
-	strcpy(hdr.title, "Unknown");
-	memset(hdr.author, 0, sizeof(hdr.author));
-	strcpy(hdr.author, "Unknown");
-	memset(hdr.copyright, 0, sizeof(hdr.copyright));
-	strcpy(hdr.copyright, "Unknown");
-
-	if (fread(buf, 1, 256, fp) >= 64) {
-		if (!strncmp((const char *) buf + 1, "SID", 3)) {
-			parsePsid(buf, hdr);
-			hdr.loadAddress = buf[PSID_START + 1] + (buf[PSID_START] << 8);
-			if (!hdr.loadAddress)
-				hdr.loadAddress = buf[PSID_MAX_HEADER_LENGTH] + (buf[PSID_MAX_HEADER_LENGTH + 1] << 8);
-			if (buf[0] == 'P') {
-				hdr.typeName = "PSID";
-			} else {
-				hdr.typeName = "RSID";
-			}
-		} else if (!strncmp((const char *) buf, "CBM8M", 5)) {
-			CbmTune tune;
-			//tune.parse(
-			hdr.typeName = "CBM8M";
-		} else {
-			hdr.typeName = "PRG";
-			hdr.loadAddress = buf[0] + (buf[1] << 8);
-		}
-	}
-}
-
-int selected_model = 1;
-
-int tedplayMain(char *fileName, int model)
-{
-	size_t bufLength;
-	unsigned char *buf = 0;
-
-	if (!readFile(fileName, &buf, &bufLength)) {
-
-		tedplayPause();
-		machineReset();
-		tedplayPlay();
-		
-		int i;
-		for (i = 0; i < 100; i++)
-		process(8192); // reset sequence
-
-		tedplayStop();
-
-		psidHdr.fileName = fileName;
-
-		if (!strncmp((const char *) buf + 1, "SID", 3)) {
-			psidHdr.loadAddress = buf[PSID_START + 1] + (buf[PSID_START] << 8);
-			unsigned int corr = 0;
-			// zero load address means PRG module
-			if (!psidHdr.loadAddress) {
-				psidHdr.loadAddress = buf[PSID_MAX_HEADER_LENGTH] + (buf[PSID_MAX_HEADER_LENGTH + 1] << 8);
-				corr = 2;
-			}
-			unsigned short initAddr = buf[PSID_INIT + 1] + (buf[PSID_INIT] << 8);
-			unsigned short replayAddr = buf[PSID_MAIN + 1] + (buf[PSID_MAIN] << 8);
-			// zero init address means equal to load address
-			psidHdr.initAddress = initAddr ? initAddr : psidHdr.loadAddress;
-			// 0 means an IRQ handler will be installed in the init routine
-			// (most likely nothing happens)
-			psidHdr.replayAddress = replayAddr ? replayAddr : 0xfe33;
-			psidHdr.defaultTune = readPsid16(buf, PSID_DEFSONG);
-			psidHdr.current = psidHdr.defaultTune;
-			psidHdr.version = readPsid16(buf, PSID_VERSION);
-			psidHdr.tracks = readPsid16(buf, PSID_NUMBER);
-			parsePsid(buf, psidHdr);
-
-			// setup the SID card
-			SIDsound *sid = ted->getSidCard();
-			if (sid) {
-				// Disable the ROM & IRQ's, so almost the entire memory is RAM
-				// more SID's are likely to play
-				ted->cpuptr->setST(ted->cpuptr->getST() | 4);
-				ted->ChangeMemBankSetup(true);
-				// v2 SID files have flags
-				if (1) {//psidHdr.version == 2 && (readPsid16(buf, PSID_FLAGS) & 0x20)) {
-					sid->setModel(SID8580);
-					selected_model = SID8580;
-					strcpy(psidHdr.model, "SID8580");
-				} else {
-					sid->setModel(SID6581);
-					selected_model = SID6581;
-					strcpy(psidHdr.model, "SID6581");
-				}
-			} else {
-				strcpy(psidHdr.model, "TED8360?");
-			}
-			if (buf[0] == 'P') { // PSID
-				psidHdr.type = 0;
-				psidPlayer[1] = psidHdr.defaultTune - 1;
-				psidPlayer[3] = psidHdr.initAddress & 0xff;
-				psidPlayer[4] = psidHdr.initAddress >> 8;
-				psidPlayer[22] = psidHdr.replayAddress & 0xff;
-				psidPlayer[23] = psidHdr.replayAddress >> 8;
-				ted->writeProtectedPlayerMemory(playerStartAddress, psidPlayer, sizeof(psidPlayer));
-			} else if (buf[0] == 'R') { // RSID
-				psidHdr.type = 1;
-				rsidPlayer[1] = psidHdr.defaultTune - 1;
-				rsidPlayer[3] = psidHdr.initAddress & 0xff;
-				rsidPlayer[4] = psidHdr.initAddress >> 8;
-				if (replayAddr != 0) {
-					rsidPlayer[5] = 0x4C; // JMP
-					rsidPlayer[6] = psidHdr.replayAddress & 0xff;
-					rsidPlayer[7] = psidHdr.replayAddress >> 8;
-				} else {
-					rsidPlayer[5] = 0x18; // CLC
-					rsidPlayer[6] = 0x90; // BCC *-2
-					rsidPlayer[7] = 0xfe;
-				}
-				ted->writeProtectedPlayerMemory(playerStartAddress, rsidPlayer, sizeof(rsidPlayer));
-			}
-			ted->injectCodeToRAM(psidHdr.loadAddress, buf + PSID_MAX_HEADER_LENGTH + corr,
-				bufLength - PSID_MAX_HEADER_LENGTH - corr);
-
-		} else if (!strncmp((const char *) buf, "CBM8M", 5)) {
-			CbmTune tune;
-			tune.parse(fileName);
-			psidHdr.type = 2;
-			strcpy(psidHdr.title, tune.getName());
-			strcpy(psidHdr.author, tune.getAuthor());
-			strcpy(psidHdr.copyright, tune.getReleaseDate());
-			unsigned int dataLen = tune.getDumpLength(0);
-			psidHdr.loadAddress = tune.getLoadAddress(0);
-			unsigned short initAddr = tune.getInitAddress(0);
-			unsigned short replayAddr = tune.getPlayAddress(0);
-			unsigned char *playerData;
-			unsigned int playerLength;
-			psidHdr.version = 1;
-			psidHdr.tracks = tune.getNrOfSubtunes() + 1;
-			psidHdr.defaultTune = tune.getDefaultSubtune() + 1;
-			psidHdr.current = psidHdr.defaultTune;
-			psidHdr.initAddress = initAddr;
-			psidHdr.replayAddress = replayAddr;
-			if (replayAddr) {
-				psidPlayer[1] = psidHdr.defaultTune;
-				psidPlayer[3] = psidHdr.loadAddress & 0xff;
-				psidPlayer[4] = psidHdr.loadAddress >> 8;
-				psidPlayer[22] = psidHdr.replayAddress & 0xff;
-				psidPlayer[23] = psidHdr.replayAddress >> 8;
-				playerLength = 33;
-				playerData = psidPlayer;
-			} else {
-				rsidPlayer[1] = psidHdr.defaultTune;
-				rsidPlayer[2] = 0x4C; // JMP
-				rsidPlayer[3] = psidHdr.loadAddress & 0xff;
-				rsidPlayer[4] = psidHdr.loadAddress >> 8;
-				playerLength = 8;
-				playerData = rsidPlayer;
-			}
-			strcpy(psidHdr.model, "TED8360");
-
-			ted->injectCodeToRAM(psidHdr.loadAddress, tune.getBinaryData(0), dataLen - 2);
-			ted->writeProtectedPlayerMemory(playerStartAddress, playerData, playerLength);
-		} else { // PRG
-			psidHdr.type = -1;
-			psidHdr.version = 0;
-			psidHdr.tracks = psidHdr.defaultTune = 1;
-			psidHdr.current = 1;
-			psidHdr.replayAddress = playerStartAddress;
-			strcpy(psidHdr.title, fileName);
-			strcpy(psidHdr.author, "Unknown");
-			strcpy(psidHdr.copyright, "Unknown");
-			strcpy(psidHdr.model, "Unknown");
-			psidHdr.loadAddress = buf[0] + (buf[1] << 8);
-
-			ted->injectCodeToRAM(psidHdr.loadAddress, buf + 2, bufLength - 2);
-			ted->writeProtectedPlayerMemory(playerStartAddress, prgPlayer, sizeof(prgPlayer));
-			SIDsound *sid = ted->getSidCard();
-			if (sid)
-			{
-				sid->setModel(SID8580);
-				selected_model = SID8580;
-			}
-		}
-#if 1
-		cpu->setPC(playerStartAddress);
-#else
-		char start[64];
-		ted->copyToKbBuffer("M\317:\r");
-		player->sleep(200);
-		sprintf(start, "G%04X\r", playerStartAddress);
-		ted->copyToKbBuffer(start);
-#endif
-		try {
-			tedplayPlay();
-		} catch (char *txt) {
-			std::cerr << "Exception: " << txt << std::endl;
-			exit(2);
-		}
-#if 0 //_DEBUG
-		//Sleep(3000);
-		if (fileName) {
-			std::string fn = fileName;
-			fn += ".bin";
-			dumpMem(fn);
-		}
-#endif
-
-		// model override
-		if (model >= 0)
-		{
-			SIDsound *sid = ted->getSidCard();
-			if (sid)
-			{
-				sid->setModel(model);
-				selected_model = model;
-			}
-		}
-		return 0;
-	}
-	return -1;
-}
-
-void tedPlaySetVolume(unsigned int masterVolume)
-{
-	if (ted)
-		ted->setMasterVolume(masterVolume);
-}
-
-void tedPlaySetSpeed(unsigned int speedPct)
-{
-	if (ted)
-		ted->setplaybackSpeed(speedPct);
-}
-
-void tedPlayGetSongs(unsigned int &current, unsigned int &total)
-{
-	current = psidHdr.current;
-	total = psidHdr.tracks;
-}
-
-bool tedPlayIsChannelEnabled(unsigned int channel)
-{
-	return ted->isChannelEnabled(channel);
-}
-
-void tedPlayChannelEnable(unsigned int channel, bool enable)
-{
-	ted->enableChannel(channel, enable);
-}
-
-void tedPlaySidEnable(bool enable, unsigned int disableMask)
-{
-	ted->enableSidCard(enable, disableMask);
-}
-
-bool tedPlayCreateWav(const char *fileName)
-{
-	return false;
-}
-
-void tedPlayCloseWav()
-{
-}

+ 0 - 32
soloud.mod/soloud/src/tools/tedsid2dump/tedplay.h

@@ -1,32 +0,0 @@
-#pragma once
-
-#include <string>
-#include "psid.h"
-
-class TED;
-
-extern TED *machineInit();
-extern void tedPlayGetInfo(void *file, PsidHeader &hdr);
-extern int tedplayMain(char *fileName, int model);
-extern void tedPlaySetVolume(unsigned int masterVolume);
-extern void tedPlaySetSpeed(unsigned int speedPct);
-extern void tedplayPause();
-extern void tedplayPlay();
-extern void tedplayStop();
-extern void tedplayClose();
-extern void tedPlayGetSongs(unsigned int &current, unsigned int &total);
-extern bool tedPlayIsChannelEnabled(unsigned int channel);
-extern void tedPlayChannelEnable(unsigned int channel, bool enable);
-extern int tedPlayGetState();
-extern void tedPlaySidEnable(bool enable, unsigned int disableMask);
-extern void tedPlaySetFilterOrder(unsigned int filterOrder);
-extern unsigned int tedPlayGetWaveform(unsigned int channel);
-extern void tedPlaySetWaveform(unsigned int channel, unsigned int wave);
-extern bool tedPlayCreateWav(const char *fileName);
-extern void tedPlayCloseWav();
-extern unsigned int tedplayGetSecondsPlayed();
-extern void tedPlayResetCycleCounter();
-//
-extern void machineReset();
-extern void machineDoSomeFrames(unsigned int count);
-extern void dumpMem(std::string name);

+ 0 - 262
soloud.mod/soloud/src/tools/tedsid2dump/tedsound.cpp

@@ -1,262 +0,0 @@
-#include "tedmem.h"
-#include <math.h>
-#ifdef _DEBUG
-#include <cstdio>
-#endif
-
-#define PRECISION 0
-#define OSCRELOADVAL (0x3FF << PRECISION)
-
-unsigned int		   TED::masterVolume;
-static int             Volume;
-static int             Snd1Status;
-static int             Snd2Status;
-static int             SndNoiseStatus;
-static int             DAStatus;
-static unsigned short  Freq1;
-static unsigned short  Freq2;
-static int             NoiseCounter;
-static int             FlipFlop[2];
-static int             dcOutput[2];
-static int             oscCount[2];
-static int             OscReload[2];
-static int             oscStep;
-static unsigned char   noise[256]; // 0-8
-
-inline void TED::setFreq(unsigned int channel, int freq)
-{
-	dcOutput[channel] = (freq == 0x3FE) ? 1 : 0;
-	OscReload[channel] = ((freq + 1)&0x3FF) << PRECISION;
-}
-
-void TED::oscillatorReset()
-{
-	FlipFlop[0] = dcOutput[0] = 0;
-	FlipFlop[1] = dcOutput[1] = 0;
-	oscCount[0] = 0;
-	oscCount[1] = 0;
-	NoiseCounter = 0;
-	Freq1 = Freq2 = 0;
-	DAStatus = Snd1Status = Snd2Status = 0;
-}
-
-// call only once!
-void TED::oscillatorInit()
-{
-	oscillatorReset();
-	/* initialise im with 0xa8 */
-	int im = 0xa8;
-    for (unsigned int i = 0; i<256; i++) {
-		noise[i] = im & 1;
-		im = (im<<1)+(1^((im>>7)&1)^((im>>5)&1)^((im>>4)&1)^((im>>1)&1));
-    }
-	oscStep = (1 << PRECISION) << 0;
-
-	// set player specific parameters
-	waveForm[0] = waveForm[1] = 1;
-	masterVolume = 8;
-	setplaybackSpeed(3);// 5);// 3);
-	enableChannel(0, true);
-	enableChannel(1, true);
-	enableChannel(2, true);
-}
-
-extern void storeregwrite(int reg, int value);
-
-void TED::writeSoundReg(unsigned int reg, unsigned char value)
-{
-	storeregwrite(reg + 64, value);
-
-	switch (reg) {
-		case 0:
-			Freq1 = (Freq1 & 0x300) | value;
-			setFreq(0, Freq1);
-			break;
-		case 1:
-			Freq2 = (Freq2 & 0x300) | value;
-			setFreq(1, Freq2);
-			break;
-		case 2:
-			Freq2 = (Freq2 & 0xFF) | (value << 8);
-			setFreq(1, Freq2);
-			break;
-		case 3:
-			if (DAStatus = value & 0x80) {
-				FlipFlop[0] = 1;
-				FlipFlop[1] = 1;
-				oscCount[0] = OscReload[0];
-				oscCount[1] = OscReload[1];
-				NoiseCounter = 0xFF;
-			}
-			Volume = value & 0x0F;
-			if (Volume > 8) Volume = 8;
-			Volume = (Volume << 8) * masterVolume / 10;
-			Snd1Status = value & 0x10;
-			Snd2Status = value & 0x20;
-			SndNoiseStatus = value & 0x40;
-			break;
-		case 4:
-			Freq1 = (Freq1 & 0xFF) | (value << 8);
-			setFreq(0, Freq1);
-			break;
-	}
-}
-
-inline unsigned int TED::waveSquare(unsigned int channel)
-{
-	return Volume;
-}
-
-inline unsigned int TED::waveSawTooth(unsigned int channel)
-{
-	unsigned int mod;
-
-#if 0
-	int msb = OSCRELOADVAL + 1 - OscReload[channel];
-	int diff = 2 * msb - int(FlipFlop[channel]) * msb - int(oscCount[channel]) + int(OscReload[channel]);
-	//if (diff < 0) diff = 0;
-	//if (oscCount[channel] >= 0x3fa) diff = 0;
-	mod = (Volume * diff) / (2 * msb);
-#else
-	int diff = int(oscCount[channel]) - int(OscReload[channel]);
-	if (diff < 0) diff = 0;
-	mod = (Volume * diff) / (OSCRELOADVAL + 1 - OscReload[channel]);
-#endif
-	return mod;
-}
-
-inline unsigned int TED::waveTriangle(unsigned int channel)
-{
-	unsigned int mod;
-	int msb;
-
-#if 0
-	msb = OSCRELOADVAL + 1 - OscReload[channel];
-	int diff = FlipFlop[channel] ? int(oscCount[channel]) - int(OscReload[channel]) 
-		: int(OSCRELOADVAL) - int(oscCount[channel]);
-	//if (diff < 0) diff = 0;
-	//if (oscCount[channel] >= 0x3fa) diff = 0;
-	mod = (3 * Volume * diff / msb / 2);
-#else
-	/*
-		msb = (OscReload[channel] + OSCRELOADVAL) / 2;
-	int diff = oscCount[channel] < msb ? oscCount[channel] - OscReload[channel] : OSCRELOADVAL - oscCount[channel];
-	mod = (2 * diff * Volume / (OSCRELOADVAL - OscReload[channel] + 1));
-	if (mod > Volume) mod = Volume;
-	*/
-	msb = (OscReload[channel] + OSCRELOADVAL) / 2;
-	mod = oscCount[channel] < msb ? oscCount[channel] : (oscCount[channel] - msb);
-	mod = (mod * Volume / msb);
-#endif
-	return mod;
-}
-
-inline unsigned int TED::getWaveSample(unsigned int channel, unsigned int wave)
-{
-	unsigned int sm;
-
-	switch (wave) {
-		default:
-		case 1: // square
-			return waveSquare(channel);
-			break;
-		case 2: // sawtooth
-			return waveSawTooth(channel);
-			break;
-		case 4: // triangle
-			return waveTriangle(channel);
-			break;
-
-		// combined waveforms á la SID
-		case 3: // square + sawtooth
-			sm = waveSawTooth(channel) + waveSquare(channel);
-			return sm /= 2;
-			break;
-		case 5: // square + triangle
-			sm = waveTriangle(channel) + waveSquare(channel);
-			return sm /= 2;
-			break;
-		case 6: // sawtooth + triangle
-			sm = waveTriangle(channel) + waveSawTooth(channel);
-			return sm /= 2;
-			break;
-		case 7: // square + sawtooth + triangle
-			sm = waveTriangle(channel) + waveSawTooth(channel) + waveSquare(channel);
-			return sm /= 3;
-			break;
-	}
-}
-
-void TED::renderSound(unsigned int nrsamples)
-{
-	// Calculate the buffer...
-	if (DAStatus) {// digi?
-	} else {
-		unsigned int result;
-		for (;nrsamples--;) {
-			// Channel 1
-			if (dcOutput[0]) {
-				FlipFlop[0] = 1;
-			} else if ((oscCount[0] += oscStep) >= OSCRELOADVAL) {
-				FlipFlop[0] ^= 1;
-				oscCount[0] = OscReload[0] + (oscCount[0] - OSCRELOADVAL);
-			}
-			// Channel 2
-			if (dcOutput[1]) {
-				FlipFlop[1] = 1;
-			} else if ((oscCount[1] += oscStep) >= OSCRELOADVAL) {
-				NoiseCounter = (NoiseCounter + 1) & 0xFF;
-				FlipFlop[1] ^= 1;
-				oscCount[1] = OscReload[1] + (oscCount[1] - OSCRELOADVAL);
-			}
-			result = (Snd1Status && FlipFlop[0]) ? (getWaveSample(0, waveForm[0]) & channelMask[0]) : 0;
-			if (Snd2Status && FlipFlop[1]) {
-				result += getWaveSample(1, waveForm[1]) & channelMask[1];
-			} else if (SndNoiseStatus && noise[NoiseCounter] & channelMask[2]) {
-				result += Volume;
-			}
-		}   // for
-	}
-}
-
-void TED::setMasterVolume(unsigned int shift)
-{
-	unsigned int vol = Ram[0xFF11] & 0x0f;
-	if (vol > 8) vol = 8;
-	Volume = (vol << 8) * shift / 10;
-	masterVolume = shift;
-}
-
-void TED::selectWaveForm(unsigned int channel, unsigned int wave)
-{
-	waveForm[channel] = wave;
-}
-
-void TED::setplaybackSpeed(unsigned int speed)
-{
-	unsigned int speeds[] = { 16, 8, 4, 3, 2, 1 };
-	playbackSpeed = speeds[(speed - 1) % (sizeof(speeds) / sizeof(unsigned int))];
-}
-
-unsigned int TED::getTimeSinceLastReset()
-{
-	ClockCycle elapsedCycles = CycleCounter - lastResetCycle;
-	unsigned int secondsPlayed = (unsigned int)(double(elapsedCycles) / double(TED_SOUND_CLOCK * 4) + 0.5);
-	return secondsPlayed;
-}
-
-void TED::setSampleRate(unsigned int value)
-{
-	initFilter(value, filterOrder);
-}
-
-void TED::setFilterOrder(unsigned int value)
-{
-	initFilter(sampleRate, value);
-}
-
-void TED::initFilter(unsigned int sampleRate_, unsigned int filterOrder_)
-{
-	filterOrder = filterOrder_;
-	sampleRate = sampleRate_;
-}

+ 0 - 39
soloud.mod/soloud/src/tools/tedsid2dump/types.h

@@ -1,39 +0,0 @@
-#ifndef _TYPES_H
-#define _TYPES_H
-
-#ifdef HAVE_SDL
-#include <SDL.h>
-#else
-//#include <stdint.h>
-#endif
-
-#include <stdlib.h>
-
-typedef struct _MEM_PATCH {
-	unsigned int addr;
-	unsigned char byte;
-} mem_patch;
-
-#ifdef __GNUC__ /*__GNUC__*/
-typedef unsigned long long ClockCycle;
-#define TSTATE_T_MID (((long long) -1LL)/2ULL)
-#define TSTATE_T_LEN "Lu"
-#else
-typedef unsigned __int64 ClockCycle;
-#define TSTATE_T_MID (((__int64) -1L)/2UL)
-#define TSTATE_T_LEN "lu"
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#if ( defined(_MSC_VER) && (_MSC_VER == 1200) && defined(_MSC_EXTENSIONS) )
-#define inline __forceinline  // For MSVC++ 6.0 with Microsoft extensions.
-#endif
-
-#endif // _TYPES_H

+ 9 - 0
soloud.mod/source.bmx

@@ -50,6 +50,7 @@ Import "soloud/src/filter/soloud_bassboostfilter.cpp"
 Import "soloud/src/filter/soloud_biquadresonantfilter.cpp"
 Import "soloud/src/filter/soloud_dcremovalfilter.cpp"
 Import "soloud/src/filter/soloud_echofilter.cpp"
+Import "soloud/src/filter/soloud_eqfilter.cpp"
 Import "soloud/src/filter/soloud_fftfilter.cpp"
 Import "soloud/src/filter/soloud_flangerfilter.cpp"
 Import "soloud/src/filter/soloud_freeverbfilter.cpp"
@@ -89,6 +90,14 @@ Import "soloud/src/backend/wasapi/soloud_wasapi.cpp"
 ' backend - winmm
 Import "soloud/src/backend/winmm/soloud_winmm.cpp"
 
+' audiosource - ay
+Import "soloud/src/audiosource/ay/*.h"
+Import "soloud/src/audiosource/ay/chipplayer.cpp"
+Import "soloud/src/audiosource/ay/sndbuffer.cpp"
+Import "soloud/src/audiosource/ay/sndchip.cpp"
+Import "soloud/src/audiosource/ay/sndrender.cpp"
+Import "soloud/src/audiosource/ay/soloud_ay.cpp"
+
 ' audiosource - monotone
 Import "soloud/src/audiosource/monotone/soloud_monotone.cpp"
 

+ 19 - 1
soloudaudio.mod/soloudaudio.bmx

@@ -27,10 +27,12 @@ about: Provides Soloud driver for use with the BRL.Audio module.
 End Rem
 Module Audio.soloudaudio
 
-ModuleInfo "Version: 1.00"
+ModuleInfo "Version: 1.01"
 ModuleInfo "License: zlib/libpng"
 ModuleInfo "Copyright: 2016-2020 Bruce A Henderson"
 
+ModuleInfo "History: 1.01"
+ModuleInfo "History: Added support for Ay (in .zap format) loading."
 ModuleInfo "History: 1.00"
 ModuleInfo "History: Initial Release."
 
@@ -52,6 +54,7 @@ Const SOLOUD_SOUND_OPENMPT:Int =   $00008000
 Const SOLOUD_SOUND_MONOTONE:Int =  $00010000
 Const SOLOUD_SOUND_TEDSID:Int =    $00020000
 Const SOLOUD_SOUND_SPEECH:Int =    $00040000
+Const SOLOUD_SOUND_AY:Int =        $00080000
 
 Const SOLOUD_SOUND_PAUSE_INAUDIBLE:Int = $10000000
 Const SOLOUD_SOUND_PROTECT:Int = $20000000
@@ -169,6 +172,8 @@ Type TSoloudSound Extends TSound
 			sound = New TSLMonotone
 		Else If loopFlag & SOLOUD_SOUND_TEDSID Then
 			sound = New TSLTedSid
+		Else If loopFlag & SOLOUD_SOUND_AY Then
+			sound = New TSLAy
 		End If
 		
 		Local this:TSoloudSound = New TSoloudSound
@@ -391,6 +396,7 @@ Public
 
 New TSoloudWavLoader(5)
 New TSoloudMonotoneLoader(10)
+New TSoloudAyLoader(15)
 
 Rem
 bbdoc: 
@@ -452,3 +458,15 @@ Type TSoloudMonotoneLoader Extends TAudioSourceLoader
 	End Method
 	
 End Type
+
+Type TSoloudAyLoader Extends TAudioSourceLoader
+
+	Method LoadAudioSource:TSLLoadableAudioSource( stream:TStream )
+		Local sound:TSLLoadableAudioSource = New TSLAy
+		If sound.loadStream(stream) = SO_NO_ERROR Then
+			Return sound
+		End If
+		sound.destroy()
+	End Method
+	
+End Type

+ 18 - 18
soloudaudiosdl.mod/soloudaudiosdl.bmx

@@ -27,7 +27,7 @@ Import Audio.SoloudSDL
 Import Audio.SoloudAudio
 
 Type TSDLSoloudAudioDriver Extends TSoloudAudioDriver
-	Method Backend:Int()
+	Method Backend:Int() Override
 		Return SOLOUD_SDL2
 	End Method
 End Type
@@ -39,11 +39,11 @@ New TDefaultSoloudAudioDriver
 
 Type TDirectSoundSoloudAudioDriver Extends TSDLSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud::DirectSound"
 	End Method
 
-	Method Startup:Int()
+	Method Startup:Int() Override
 		SDLAudioInit("directsound")
 		Return Super.Startup()
 	End Method
@@ -52,11 +52,11 @@ End Type
 
 Type TWinmMMSoloudAudioDriver Extends TSDLSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud::WinMM"
 	End Method
 
-	Method Startup:Int()
+	Method Startup:Int() Override
 		SDLAudioInit("winmm")
 		Return Super.Startup()
 	End Method
@@ -65,7 +65,7 @@ End Type
 
 Type TDefaultSoloudAudioDriver Extends TDirectSoundSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud"
 	End Method
 
@@ -79,11 +79,11 @@ New TDefaultSoloudAudioDriver
 
 Type TALSASoloudAudioDriver Extends TSDLSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud::ALSA"
 	End Method
 
-	Method Startup:Int()
+	Method Startup:Int() Override
 		SDLAudioInit("alsa")
 		Return Super.Startup()
 	End Method
@@ -92,11 +92,11 @@ End Type
 
 Type TPulseAudioSoloudAudioDriver Extends TSDLSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud::PulseAudio"
 	End Method
 
-	Method Startup:Int()
+	Method Startup:Int() Override
 		SDLAudioInit("pulseaudio")
 		Return Super.Startup()
 	End Method
@@ -105,11 +105,11 @@ End Type
 
 Type TOSSSoloudAudioDriver Extends TSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud::OSS"
 	End Method
 
-	Method Startup:Int()
+	Method Startup:Int() Override
 		SDLAudioInit("dsp")
 		Return Super.Startup()
 	End Method
@@ -118,11 +118,11 @@ End Type
 
 Type TNASSoloudAudioDriver Extends TSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud::NAS"
 	End Method
 
-	Method Startup:Int()
+	Method Startup:Int() Override
 		SDLAudioInit("nas")
 		Return Super.Startup()
 	End Method
@@ -131,7 +131,7 @@ End Type
 
 Type TDefaultSoloudAudioDriver Extends TPulseAudioSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud"
 	End Method
 
@@ -142,11 +142,11 @@ New TDefaultSoloudAudioDriver
 
 Type TCoreAudioSoloudAudioDriver Extends TSDLSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud::CoreAudio"
 	End Method
 
-	Method Startup:Int()
+	Method Startup:Int() Override
 		SDLAudioInit("coreaudio")
 		Return Super.Startup()
 	End Method
@@ -155,7 +155,7 @@ End Type
 
 Type TDefaultSoloudAudioDriver Extends TCoreAudioSoloudAudioDriver
 
-	Method Name$()
+	Method Name$() Override
 		Return "SoLoud"
 	End Method