Compare commits

...

169 commits

Author SHA1 Message Date
ladyada
b709c78954 Merge branch 'master' of https://github.com/arduino/ArduinoCore-samd into catchup_2019_10_26
(not working tho)
2019-10-26 21:35:56 -04:00
Martino Facchin
2ca7f7531d
Merge pull request #466 from nmaas87/master
Updated faulty gcc path in bootloader makefile
2019-10-24 13:01:25 +02:00
Nico Maas
f9521bbfc0 Updated faulty gcc path
Signed-off-by: Nico Maas <mail@nico-maas.de>
2019-10-24 12:24:00 +02:00
Martino Facchin
142814a5d2 Publish 1.8.4 2019-10-09 16:37:37 +02:00
Martino Facchin
eef7c6febc Revert "Temporarily remove mkrwan1310 from boards list"
This reverts commit e0d15ce0f7.
2019-10-09 16:36:56 +02:00
Martino Facchin
b0eb400803
Merge pull request #456 from arduino/remove-genuino
Remove Genuino Occurrences
2019-09-20 11:34:52 +02:00
Cristian Maglie
ed164f67be Remove Genuino and replace with Arduino on sketch upload 2019-09-20 11:31:10 +02:00
Luca Cipriani
01c0951313 remove geuino from build and .h files 2019-09-19 15:39:04 +02:00
Luca Cipriani
f3e6119a77 Remove Genuino 2019-09-19 15:15:50 +02:00
Nico Maas
ac5a61119f Update Bootloader_D21_M0_Pro_150427.hex
Remove erroneous two empty lines in the end as reported by @paul-hoffmann in #263 / https://github.com/arduino/ArduinoCore-samd/issues/263
2019-09-18 16:33:34 +02:00
Nico Maas
eb447919be Update Bootloader_D21_M0_150515.hex
Remove erroneous two empty lines in the end as reported by @paul-hoffmann in #263 / https://github.com/arduino/ArduinoCore-samd/issues/263
2019-09-18 16:33:34 +02:00
Jeff Rowberg
590b21b753 Add null pointer test to String destructor 2019-09-16 16:00:56 +02:00
Martino Facchin
d2de78ad7b
Merge pull request #449 from arduino/execute-notone-only-after-tone
Fixing infinite hang within 'noTone' if it is called before 'tone'
2019-09-16 11:29:51 +02:00
Alexander Entinger
5d74235ba2 Fixing infinite hang within 'noTone' if it is called before 'tone' was called at least once 2019-09-16 10:58:20 +02:00
Alexander Entinger
aef4af4c1e Bugfix - waiting for first ADC read to complete after ADC enable. 2019-09-03 10:45:55 +02:00
Martino Facchin
163ef56bbd Fix post_install script on Windows x86 (32bit) 2019-07-08 13:50:17 +02:00
Martino Facchin
dbd25c6e03 Release 1.8.3
Maintenance release to add Nano33IoT drivers
2019-07-08 12:38:31 +02:00
Martino Facchin
6762e4b9fb Update drivers to 1.4.3.0 2019-07-08 12:22:03 +02:00
Martino Facchin
4540784f35 Publish 1.8.2 2019-07-01 14:47:00 +02:00
Martino Facchin
eb629113e2 Fix commands for openocd 0.10.0
Fix bug introduced by 5704a06f
Double/triple {} surrounding filenames are not needed on unix but are on Win.

openocd 0.10.0 tcl interpreter (jimtcl) doesn't resolve curly braces recursively, while old did.

By surrounding with just one curly brace 0.10.0 is happy

Fixes #426 and #422
2019-06-28 17:17:28 +02:00
The Possessor
3ee886bc4f Fix array out of bounds in USB core 2019-06-28 10:00:08 +02:00
Martino Facchin
f80361f6bd Revert "USBDevice: interrupts are now enabled on init"
This reverts commit a8d208af70.

Fixes https://github.com/arduino/ArduinoCore-samd/issues/423 on Linux/Mac (and Windows when Arduino standard drivers are uninstalled)

Fix for normal behaviour on Windows is ongoing
2019-06-28 09:55:42 +02:00
Riccardo Rizzo
284bc5a318
Merge pull request #416 from Rocketct/master
Changed MKRGSM1400 variant to increase the reliability
2019-06-19 15:19:09 +02:00
Riccardo Rizzo
45163fae62 Changed MKRGSM1400 variant to increase the reliability
Changed input source control register value to avoid module's  hung due to discharge peak
this change increase the reliability  of the SARA when 2G band's are used
2019-06-05 15:35:29 +02:00
Martino Facchin
5c4d667dc7 Merge remote-tracking branch 'origin/beta' 2019-05-27 14:04:01 +02:00
Martino Facchin
566feb71d6
Merge pull request #413 from arduino/refactor-usb-stack
Using available defines instead of hardcoded values within USB stack
2019-05-27 13:59:57 +02:00
Martino Facchin
020b419fc1
Merge pull request #412 from James-Aylward/patch-1
Fixed an issue with interrupt pins
2019-05-27 13:59:41 +02:00
Martino Facchin
4d2bb9d0fb Merge remote-tracking branch 'origin/master' into staging 2019-05-27 13:58:09 +02:00
Alexander Entinger
3586e27dcb Using available defines/constants instead of hardcoded values for linestate 2019-05-27 08:44:04 +02:00
James Aylward
fa5075572f
Fixed an issue with interrupt pins
https://learn.adafruit.com/assets/47156
Fixed the discrepancy between the circuit playground diagram and the code. In the diagram, button A is labelled as an interrupt pin even though the code does not reflect this. This change fixes the issue.
2019-05-26 11:48:35 +10:00
Martino Facchin
0997a2e321 Update platform version to 1.8.1 2019-05-16 14:34:38 +02:00
Martino Facchin
980a990f9f Remove SoftwareSerial and MixedSerial libraries 2019-05-16 14:30:51 +02:00
Martino Facchin
4505276b03 NANO 33 IoT: remove references to R0 2019-05-16 14:30:51 +02:00
Martino Facchin
76416c01d2 Delete boards.txt.disabled 2019-05-16 14:30:51 +02:00
Martino Facchin
2b8150c36b [MKRNBV3] Reduce USB voltage limit to 3880mV
On module powerup there can be current spikes that make the USB voltage drop under 4.36V. This results in PGOOD fault and module lockup.
Only V3 seems affected, and FW A.02.01 even more.
2019-05-16 14:30:51 +02:00
Martino Facchin
eab09b44db USB: only clear pending interrupts explicitely 2019-05-16 14:30:51 +02:00
Martino Facchin
f87866ef59 USB: properly handle IRQ clash in DoubleBuffer endpoint 2019-05-16 14:30:51 +02:00
Martino Facchin
4e9cbc03af Use auxiliary RingBuffer for CDC Serial rx 2019-05-16 14:30:51 +02:00
Martino Facchin
a79f82b493 Remove CMSIS + gcc7 warnings 2019-05-16 14:30:51 +02:00
Martino Facchin
e0d15ce0f7 Temporarily remove mkrwan1310 from boards list 2019-05-16 14:30:51 +02:00
Martino Facchin
92efd74540 Add missing forward declaration of PINCOUNT_fn() 2019-05-16 14:28:46 +02:00
Martino Facchin
932537071b Rebuild MKRWAN1310 BL with I2C timeouts 2019-05-16 14:28:46 +02:00
Martino Facchin
206956dd47 [WIP] Enable battery charging on MKRWAN1310
Since MKRWAN1310 battery sense ADC pin is not connected we must enable the PMIC, check if it starts charging, eventually disable the charging circuitry.
ATM the bootloader is a bit pick and could hang the board on first upload.
2019-05-16 14:28:46 +02:00
Dario Pennisi
86081cbf35
Merge pull request #395 from per1234/digitalpotcontrol-delays
Add necessary delays to SPI DigitalPotControl example
2019-05-07 16:54:20 +02:00
Martino Facchin
c8094e7a37 Add 1 to available() if peek has been previously called
Fixes https://github.com/arduino/ArduinoCore-samd/issues/405; a proper fix require to use another RingBuffer (useless since the USB data is already internally buffered)
2019-04-29 14:24:40 +02:00
Martino Facchin
154166d321 Merge branch 'mkrwan1310' into beta 2019-04-29 13:08:33 +02:00
Martino Facchin
3c0fc11a43
Merge pull request #404 from arduino/cdc-bugfix
Removal of delay within USBDevice::ISRHandler
2019-04-29 12:59:07 +02:00
Sandeep Mistry
31104a1828 Correct and update keywords.txt 2019-04-26 09:17:20 -04:00
Sandeep Mistry
6802376ac8 I2S: Add API to set the buffer size (in bytes) 2019-04-26 09:17:20 -04:00
Alexander Entinger
4c5ac51cc9 Deleting superflous call to 'usbd.epBank0ResetReady' - this function is already called within 'USBDeviceClass::ISRHandler' and 'USBDeviceClass::recvControl' is called by 'handleClassInterfaceSetup' within the ISR
Bugfix - removal of delay within USBDeviceClass::ISRHandler
- remove stall requests of endpoint #0 OUT (bank #0) if present
- copy data from cache into structure instead of referencing it via pointer. When referencing via pointer the content of the structure can change if new data is written to the buffer.
- Fixing MULTI_PACKET_SIZE parameter of call to 'usbd.epBank0SetMultiPacketSize' within 'USBDeviceClass::armRecvCtrlOUT' to correct size, MULTI_PACKET_SIZE should not be set to a value < SIZE, this means at least to 64.
- resetting byte count for endpoint #0 seems to eliminate issue of the bootloader not being triggered.
2019-04-25 08:23:15 +02:00
Alexander Entinger
f6ae6d843d Fixing typo - although control endpoints are located at endpoint #0 we should leave this choice to the caller of the function and be consistent within the rest of the code 2019-04-24 16:32:26 +02:00
Six
e3e85d5591 deadlock detect and early return in startTransmissionWIRE 2019-04-24 11:43:23 +02:00
Martino Facchin
08629f90b1 Rename NONA_WLAN in NANO 33 IoT 2019-04-19 14:44:12 +02:00
Martino Facchin
169ec9c1d1 Mark mkrfox1200 and mkrwan1310 as very low power 2019-04-19 14:30:12 +02:00
Jonni Westphalen
a536cc8016 make PINS_COUNT dynamic 2019-04-19 14:30:12 +02:00
Jonni Westphalen
52e005278a allow the Low Power library to not break the Serial connection 2019-04-19 14:16:39 +02:00
Martino Facchin
3645829901 Allow boards to skip pinMode(INPUT) initialization 2019-04-19 14:11:30 +02:00
Martino Facchin
cd66b993c8 MKRWAN1310: fix FLASH_CS define 2019-04-19 14:11:02 +02:00
Martino Facchin
d44a9290a8 MKRWAN1310: add bootloader 2019-04-19 11:40:43 +02:00
Martino Facchin
a03e17cef2 MKRWAN1310: start integration 2019-04-19 11:40:00 +02:00
Martino Facchin
df57f9f2ec TEMP: NONA_WLAN: add workaround for R0 2019-04-19 11:03:45 +02:00
Martino Facchin
67d55562b3 NONA_WLAN: add SerialHCI support for BLE 2019-04-19 11:03:45 +02:00
Martino Facchin
4ed0be9045 Rebuild all bootloaders 2019-04-19 11:03:45 +02:00
Martino Facchin
d502e29b3a BL: borrow system_init from uf2
works way better in crystalless mode
2019-04-19 11:03:45 +02:00
Martino Facchin
57830a4c10 TEMP: update to fake version 1.6.28 2019-04-19 11:03:45 +02:00
Martino Facchin
1cc8f7c20f NONA_WLAN: update comments 2019-04-19 11:03:45 +02:00
Martino Facchin
4667e887a5 BL: NONW_WLAN: update bootloaders 2019-04-19 11:03:45 +02:00
Martino Facchin
37b592afdc Bootloader: allow crystalless configuration 2019-04-19 11:03:45 +02:00
Martino Facchin
a46d49aedf Allow reconfiguration of MixedSerial baud rate 2019-04-19 11:03:45 +02:00
Martino Facchin
1eaa6bfd37 Add Mixed Serial library to save the boards :)
Flash nina firmware with ./esptool.py --baud 115200 -p /dev/ttyACM0 write_flash 0x0 NINA_W102.bin
2019-04-19 11:03:45 +02:00
Martino Facchin
bef66cddc4 Fix sercoms 2019-04-19 11:03:45 +02:00
agdl
6a178b4048 Fixed software serial library inspired by https://github.com/arduino-org/Arduino/tree/master/hardware/arduino/samd/libraries/SoftwareSerial 2019-04-19 11:03:45 +02:00
Martino Facchin
996b3cd269 INITIAL: NONA WLAN
Bootloader not working, we need to define CRYSTALLESS mode
2019-04-19 11:03:45 +02:00
per1234
456afbb1d3 Add necessary delays to SPI DigitalPotControl example
According to https://github.com/arduino/Arduino/issues/6395, these delays are required for the code to work.
2019-03-26 00:24:27 -07:00
Martino Facchin
67bf93e52e Publish 1.6.25 (beta) 2018-11-21 17:14:42 +01:00
Martino Facchin
37c8d4f36a Allow precompiled libraries on samd core 2018-11-16 18:18:56 +01:00
Martino Facchin
aab0390111 Slow down USB ISRHandler to workaroung missing 1200bps touch 2018-11-16 18:02:52 +01:00
Martino Facchin
3acaa0365b Publish 1.6.24 (beta) 2018-09-06 17:33:52 +02:00
Martino Facchin
7b6434aa4a TEMP: remove verification from bossacI tool
This completely removes the verification phase, speeding up the compile/upload/test cycle.
The patch can be reverted if:
* we release a new version of bootloader + VidorBoot combo where checksum is internally calculated by the FPGA
* we patch bossac to avoid asking the checksum for locations over internal flash size
2018-09-04 18:36:00 +02:00
Sandeep Mistry
8575a52acf Add -Wno-expansion-to-defined compile warning flag 2018-08-29 16:31:06 +02:00
Sandeep Mistry
bffa9c0492 Remove some incorrect SD lib related lines 2018-08-29 16:31:06 +02:00
Sandeep Mistry
073c992816 Update some variant comments 2018-08-29 16:31:06 +02:00
Cristian Maglie
e5bb5c76bd Release samd-beta 1.6.23 2018-08-29 16:31:06 +02:00
Cristian Maglie
93b1392fa2 UpdateBootloader now accepts no-newline inputs 2018-08-29 16:31:06 +02:00
Sandeep Mistry
f9015a04a9 Remove FPGA bitstream based defines from variant 2018-08-29 16:31:06 +02:00
Sandeep Mistry
c0da99a336 Add comment about line ending setting in the serial monitor 2018-08-29 16:31:06 +02:00
Sandeep Mistry
78b0a5b02e Make SAMD_BootloaderUpdater samd_beta only for now 2018-08-29 16:31:06 +02:00
Sandeep Mistry
2facb399d3 Rebuild MKR Vidor 4000 bootloaders 2018-08-29 16:31:06 +02:00
Sandeep Mistry
b26dca4e85 Add 10ms delay at start of double detector for boards with EZ6301QI to settle
Without this change the board would stay in boot loader when USB cable
is freshly plugged in.
2018-08-29 16:31:06 +02:00
Sandeep Mistry
40b3dcfa20 Add retry count when waiting for JTAG response 2018-08-29 16:31:06 +02:00
Sandeep Mistry
e72779d5c8 Store new boot loader in flash (const), only update user row if needed, increase flash chunk size 2018-08-29 16:31:06 +02:00
Sandeep Mistry
7eb793a438 Add initial SAMD Bootloader Updater library 2018-08-29 16:31:06 +02:00
Sandeep Mistry
6564319619 Add updated MKR Vidor 4000 bootloader 2018-08-29 16:31:06 +02:00
Sandeep Mistry
92c0774edf Check bitstream version before reloading, also check + reload before jumping to app 2018-08-29 16:31:06 +02:00
Sandeep Mistry
e500e2b127 [bootloader] reset JTAG on boot 2018-08-29 16:31:06 +02:00
Sandeep Mistry
c637aa24ff [bootloader] fail fast if JTAG init fails 2018-08-29 16:31:06 +02:00
Sandeep Mistry
e58f0eb0b2 [bootloader] Allow current USB current values 2018-08-29 16:31:06 +02:00
Sandeep Mistry
9398c530f5 correct boot loader filename 2018-08-29 16:31:06 +02:00
Sandeep Mistry
d355bbd7ad Rename the SPIWIFI_* pins to FPGA_SPIWIFI_* 2018-08-29 16:31:06 +02:00
Sandeep Mistry
4ac6becde9 [TEMP] only define ARDUINO_ARCH_SAMD if not defined 2018-08-29 16:31:06 +02:00
Sandeep Mistry
89f5ba36e9 [MKR Vidor 4000] correct FQBN 2018-08-29 16:31:06 +02:00
Martino Facchin
b9c71478d4 Revert "VIDOR: let library tweak digital* to allow virtual pins"
This reverts commit e41aa63d5a1d1e18884eda0403a3c59dc03a9c2e.
This reverts commit 1c1d59b6a147f27a7e2c6b66c94cc5c9bb5e93b4.
This reverts commit 68c73349b8b3c463878c4fedbd0b9e64dc4119cb.
2018-08-29 16:31:06 +02:00
Martino Facchin
a18b1017cb [TEMP] allow using libraries that define ARDUINO_ARCH_SAMD on Beta 2018-08-29 16:31:06 +02:00
Martino Facchin
ec243a52e7 [TEMP] disable all boards except MKRVidor
This way there is no clash if both MKRVidor and normal SAMD core are both installed.
The "beta" situation will continue (with regular rebases) until the new tools have been validated.

To test all boards with the new toolchain, simply replace boards.txt with boards.txt.disabled
2018-08-29 16:31:06 +02:00
Martino Facchin
92e812bf69 [TEMP] Rename the core to Beta 2018-08-29 16:31:06 +02:00
Martino Facchin
f06ecfd613 Add startFPGA weak hook to allow bitstream autostart 2018-08-29 16:31:06 +02:00
Martino Facchin
5839907666 [INITIAL] Start supporting internal SPI for NiNa 2018-08-29 16:31:06 +02:00
Martino Facchin
501b140c88 Force SerialUSB not to be stripped even if unused 2018-08-29 16:31:06 +02:00
Cristian Maglie
26ba1b0b83 USBDevice: removed useless resetReady 2018-08-29 16:31:06 +02:00
Cristian Maglie
a8d208af70 USBDevice: interrupts are now enabled on init
This change allow to rationalize EP initalization logic in one
single place.
2018-08-29 16:31:06 +02:00
Cristian Maglie
8ac782d179 USBDevice: pending interrupts flag are now automatically acknowledged 2018-08-29 16:31:06 +02:00
Cristian Maglie
a46a5b0c61 USBDevice: EPOUTHandler ISR now has a single exit point 2018-08-29 16:31:06 +02:00
Cristian Maglie
3c84f7cdd1 USBDevice: BULK-IN endpoints automatically clears BK1RDY flag 2018-08-29 16:31:06 +02:00
Cristian Maglie
02657fbe30 USBDevice: added missing ep interrupts in USBDevice_SAMD21G18x 2018-08-29 16:31:06 +02:00
Cristian Maglie
f051e7433a USBDevice: factored out a function to release OUT eps 2018-08-29 16:31:06 +02:00
Cristian Maglie
2397c45711 fixed indent and slightly simplified ifdef 2018-08-29 16:31:06 +02:00
Cristian Maglie
ba95a6ab6f USBDevice: Added missing packed attribute 2018-08-29 16:31:06 +02:00
Cristian Maglie
1fdbc69e46 USBDevice: simplified handling of endpoints
The previous way was a lot more complicated for a very little perfomance
benefit.
2018-08-29 16:31:06 +02:00
Cristian Maglie
bebea1acff USBDevice: slightly optimized ISR handler 2018-08-29 16:31:06 +02:00
Cristian Maglie
fc530e205c USBDevice: made recv fallthru to a single return 2018-08-29 16:31:06 +02:00
Cristian Maglie
3316756b0c USBDevice: do not use automatic multi-packet USB transactions
If the host sends an unfinished OUT transaction (=> a transaction
that ends with a data packet filled to the maximum allowed size but
not followed by another shorter packet or a ZLP) the Transaction
Completed interrupt is not fired and the incoming data remains
suspendend until the host sends more data.

This commit fix the problem by disabilng multi-packet transactions.
2018-08-29 16:31:06 +02:00
Cristian Maglie
c7894e82ea USBDevice: immediately ack EOR (it's just a bit more readable) 2018-08-29 16:30:33 +02:00
Cristian Maglie
639303de0b USBDevice: removed useless internal armRecv(..) method 2018-08-29 16:30:33 +02:00
Cristian Maglie
c1c082ee86 Using __attribute__((packed)) instead of pragmas 2018-08-29 16:30:33 +02:00
Cristian Maglie
8f1ccb3df8 Fixed uninitialized use of variable 2018-08-29 16:30:33 +02:00
Cristian Maglie
8f2dc6984d USBDevice: fixed some minor warnings 2018-08-29 16:30:33 +02:00
Martino Facchin
f72479d2a3 Add weak hook to trigger companion chip reinitialization 2018-08-29 16:30:33 +02:00
Martino Facchin
d81ee4f8fb Add disableFpgaClock function 2018-08-29 16:30:33 +02:00
Martino Facchin
18bcded0f1 Fix compilation if USBCON is not defined 2018-08-29 16:30:33 +02:00
Martino Facchin
b6ccd4f9ed [WORKAROUND] add 10uS of delay befor handling Setup packet 2018-08-29 16:30:33 +02:00
Martino Facchin
10432a3cbd Porting CDC to PluggableUSB 2018-08-29 16:30:33 +02:00
Martino Facchin
5c562e143d [FIXME] Reenable full EP_SIZE USB send 2018-08-29 16:30:33 +02:00
Martino Facchin
25ebd44179 Allow complete override of USB SerialNumber 2018-08-29 16:30:33 +02:00
Martino Facchin
ecdbde97fa Allow removing CDC_ENABLED with define switch 2018-08-29 16:30:33 +02:00
Martino Facchin
f9348d2193 [VIDOR] Let the library call enableFpgaClock 2018-08-29 16:30:33 +02:00
Martino Facchin
423c29aa30 Vidor: update bootloader binaries 2018-08-29 16:30:33 +02:00
Martino Facchin
d4c7854e55 [VIDORBL] Add timeouts to i2c operations 2018-08-29 16:30:33 +02:00
Martino Facchin
e66adeafc2 [VIDOR][PMIC] Check return value of Wire.startTransmission 2018-08-29 16:30:33 +02:00
Martino Facchin
bc51bc5184 [TEST][DANGER]Add timeout to startTransmissionWIRE 2018-08-29 16:30:33 +02:00
Alberto Mannari
4146aa8e45 Add check for arbitration in I2C master read
Add check for errors during I2C master read (likely loss of arbitration) so that the operation can be aborted and code does not get stuck in an infinite loop
2018-08-29 16:30:33 +02:00
Martino Facchin
bc2c7796c4 Make CDC/UART interface configurable from Makefile 2018-08-29 16:30:33 +02:00
Martino Facchin
2267161b19 [VIDORBL] port to IRQ architecture 2018-08-29 16:30:33 +02:00
Martino Facchin
91e34f568e Restore flash speedup via signature 2018-08-29 16:30:33 +02:00
Martino Facchin
5704a06f78 Mass rename old vidor2000 2018-08-29 16:30:33 +02:00
Martino Facchin
2f97fc2a19 Update openocd to 0.10.0-arduino7 2018-08-29 16:30:33 +02:00
Martino Facchin
606eb9aa12 Fix runtime paths for new tools
http://downloads.arduino.cc/packages/package_newboards_index.json contains all the needed tools
2018-08-29 16:30:33 +02:00
Martino Facchin
acbf2dbaee Don't reverse nibbles in jtagRead 2018-08-29 16:30:33 +02:00
Martino Facchin
fe8e0e2385 Add full 2M support to fpga flash 2018-08-29 16:30:33 +02:00
Martino Facchin
c434b44157 Move ACK pin for complete passthrough 2018-08-29 16:30:33 +02:00
Martino Facchin
e78bb78419 Configure PMIC before clocking the fpga
If the fpga is configured to boot from flash it easily passes to 100mA limit of default BQ config.
So configure it before clocking the fpga
2018-08-29 16:30:33 +02:00
Martino Facchin
dfdf5a0a9f Rename MKRVidor 2018-08-29 16:30:33 +02:00
Martino Facchin
fd116ad548 TEMP: set BQ power settings from user sketch
Will revert if i2c will ever fit in the bootloader
2018-08-29 16:30:33 +02:00
Martino Facchin
d0dc254c76 TEMP: add bossacI upload tool for Vidor 2018-08-29 16:30:33 +02:00
Martino Facchin
0411b6b067 [PROPOSAL] SPI: add getters for private fields
If we want to create an SPI-compatible class it needs to be able to access these fields, but only SPIClass can do it (since they are friends).
The other way is to make these fields public, but than users could try to change them at runtime (is there any performance issue with it?)
2018-08-29 16:30:33 +02:00
Martino Facchin
a16e8f3b6f Cache last used SPISettings
There's no need to disable and reenable the SPI peripheral if the settings didn't change
2018-08-29 16:30:33 +02:00
Martino Facchin
4a2012a868 Allow analogWrite for extended pins 2018-08-29 16:30:33 +02:00
Martino Facchin
b32d93eff2 Fix fpga_bitstream_section being included in all sketches 2018-08-29 16:30:33 +02:00
Martino Facchin
b02d829449 Fix PINS_COUNT 2018-08-29 16:30:33 +02:00
Martino Facchin
5ecc126b7e WiringExtended: silence warnings 2018-08-29 16:30:33 +02:00
Martino Facchin
56fb81ff92 [VIDORBL] add descriptor and configurable offset 2018-08-29 16:30:33 +02:00
Martino Facchin
a763a37b20 BL: add flashing routines 2018-08-29 16:30:33 +02:00
Martino Facchin
8eedb8b5c8 [VidorBL] fix all jtag ifdefs 2018-08-29 16:30:33 +02:00
Martino Facchin
7915d1f4d7 TEST: start porting jtag to bootloader
lto and a recent compiler are needed to occupy less than 8KB
2018-08-29 16:30:33 +02:00
Martino Facchin
64fddfa44a VIDOR: add proper bootloader 2018-08-29 16:30:33 +02:00
Martino Facchin
73af72d220 EXPERIMENTAL: add fpga bitstream to Vidor binary 2018-08-29 16:30:33 +02:00
Martino Facchin
1b0e383c53 VIDOR: let library tweak digital* to allow virtual pins 2018-08-29 16:30:33 +02:00
Martino Facchin
040c851a72 Remove initialization of all pins as INPUT 2018-08-29 16:30:33 +02:00
Martino Facchin
e87e10bd8a VIDOR: fix some pinuxing and enable clkout 2018-08-29 16:30:33 +02:00
Martino Facchin
8c1209c40b Initial import of MKRVidor (based on MKRZero) 2018-08-29 16:30:33 +02:00
124 changed files with 9810 additions and 4515 deletions

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:1000600000000000A818000008B5084B002B03D0C2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A4180000600000205800002000000000AC
:10009000A8180000600000205800002000000000A8
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D8FA207970BDE6
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F044F938BD0004004018
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F003F901990F480835A9
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AEF80123EB550023337000E01C1CE3
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,326 +78,326 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A40300205C000020BB
:10066000A81800002E4A38B51368141C01331ED098
:10067000D1B200291BD12B4B1878012318402A4BEB
:100680000AD11D6829498D4201D118600FE0196017
:10069000274901390029FCD11960236883F30888B0
:1006A000FF239A43234B9A601D4B5B681847FFF763
:1006B00029FF62B600F09AFD00F04CF81E4B802234
:1006C00052039A601D4B1E4A041C5A60194AC021ED
:1006D000106A09060002000A0143116200229A60B2
:1006E00007221A60A368201C9847164B002801D0E7
:1006F00001221A701A78002A05D0002000F088FA2A
:1007000000F000FBFCE71B78002BEBD100F0E2FDD2
:100710000028E7D0012000F07BFA00F0F3FAFCE7B4
:100720000020000038040040FC7F00203581730762
:1007300048E8010000ED00E00044004110E000E066
:10074000E70300007B00002008B5FFF7A9FC00F0DC
:10075000C3FA08BD10B5054B054C2360FFF770FDCB
:10076000201C2168FFF75EFD201C10BD00500041D9
:100770001802002070B5051CC0B0081C161C0C1C0B
:1007800000F017FF40006A460323023053701070D8
:1007900076080123E218013A11785A00002906D19F
:1007A000281C69460023FFF7CFFD40B070BDB3425F
:1007B000F6DA684681520133ECE70000F7B5BA4A31
:1007C00004681378B949271CFF37051C10203872BC
:1007D0000B705378B648B74E037093783380D17856
:1007E000338809020B4333801179B34B1980517957
:1007F00018880902084318809079B0490880D27996
:100800000888120202430A8040227A71A84F3A787F
:10081000A64F120238780F1C0243A9488446181CC0
:10082000624500D1C2E020DC802149008A4200D12B
:100830006EE109DC812A00D192E0822A00D195E0A4
:10084000802A00D064E18BE081235B009A4200D1D2
:10085000CFE000DA58E1C0239B009A4200D157E173
:10086000984B9A4200D14FE152E190231B019A42EA
:1008700069D015DCD023DB009A4222D088231B01EB
:100880009A4269D0A023DB009A4200D040E1201CAC
:10089000FFF7EAFD3188286889B2FFF7F9FD3BE1EF
:1008A000894B9A4200D12FE100DC31E1874B9A421B
:1008B00000D11DE1864B9A4200D029E133886B714B
:1008C00022E133881B0A012B08D10B8812222868E9
:1008D000934201D80A8892B27E4911E133881B0AFB
:1008E000022B08D10B8843222868934201D80A883A
:1008F00092B2794904E133881B0A032B00D007E147
:100900003388DBB2012B17D0002B07D0022B00D08D
:10091000FEE00A882868D2B2704911E0042201A8DA
:100920006F4900F035FE3B8804222868934201D8C5
:100930003A8892B201A9E3E00A8828686949D2B2EC
:10094000FFF718FFE8E03388201C2B71FFF78CFDC0
:10095000201CFFF7A3FDDFE0291C01C90122CFE025
:10096000614900230B8028680222CAE05E49002208
:100970000A801888502210405C4A10701E880F2090
:10098000304018801888032800D9C1E012781B88ED
:1009900008335B01E418A379002A01D09B0600E02C
:1009A000DB06DB0F0B8028680222A9E019887F2272
:1009B00091434E4AC9B2117018880F210140198025
:1009C0003188002900D0A3E01988002900D19FE0D8
:1009D0001988032900D99BE012781B8808335B0132
:1009E000E318002A02D020225A718DE0102159719B
:1009F0008AE002887F239A433C4BD2B21A70018866
:100A00000F220A4002803288002A00D080E002884B
:100A1000002A00D17CE00288032A00D978E01B7804
:100A2000002B1FD0038808335B01E3189B799A06DB
:100A30006AD50388202208335B01E3181A71038802
:100A400008335B01E318DB795F065DD5038840223C
:100A500008335B01E318DA710388022208335B0173
:100A6000E3181EE0038808335B01E3189B79D9067D
:100A70004AD50388102208335B01E3181A710388F2
:100A800008335B01E318DB799A063DD50388202201
:100A900008335B01E318DA710388012208335B0134
:100AA000E3181A7130E0C046980000207D00002055
:100AB00082000020840000208600002080000020AA
:100AC000020300000103000021200000A12100001A
:100AD00021220000F815000004000020E8150000A5
:100AE000D8150000DC1500007E0000207C000020EE
:100AF0000B8808222868934201D80A8892B20749D5
:100B00000023FFF721FC07E0201CFFF7ADFC03E00A
:100B1000201C0121FFF79EFCF7BDC04648000020C5
:100B200007B5054B0122019001A91868131CFFF7B6
:100B30000BFC01200EBDC0461802002013B5054B6A
:100B40006C4607341868211C0122FFF745FC207809
:100B500016BDC0461802002010B5074C201CFFF738
:100B60001FFB031C0020834205D022684823FF336B
:100B7000D05C0123184010BD1802002010B5054AB2
:100B80000C1C031C191C10680123221CFFF7DCFB42
:100B9000201C10BD1802002070B5084C061C201C3B
:100BA0000D1CFFF7FDFA0023984205D02068311C88
:100BB0002A1CFFF711FC031C181C70BD1802002032
:100BC000F8B50C4C051C201C0E1CFFF7E9FA00239D
:100BD000271C341C98420AD0002C07D0291C221C48
:100BE0003868FFF7F9FB241A2D18F5E7331C181C99
:100BF000F8BDC0461802002008B5031C081C111CD3
:100C00009847024B64221A8008BDC0468C00002021
:100C1000012805D1054B064A1A60064B187004E0FE
:100C2000002802D1044A014B1A6070478802002054
:100C30002C160000940000207816000030B50A1C25
:100C40001C4985B00978031C00292AD0042A01D147
:100C5000006804E0022A01D1008800E00078520018
:100C600004A98B180B3B9C1AA3420BD00F21014007
:100C7000092902D83025294300E0373119700009CD
:100C8000013BF1E701A930230B7078234B700A2058
:100C90008B1898700D20D870074B04321B68D868E9
:100CA00003E005490968C868191CFFF7A5FF05B0EE
:100CB00030BDC046880000208802002072B6EFF3E5
:100CC0000883044A1360036883F30888436818475D
:100CD0007047C0468C020020084B1A88002A03D0B7
:100CE0001A88013A92B21A80054B1A88002A03D05A
:100CF0001A88013A92B21A807047C0468C000020D0
:100D00008A000020F0B591B008A9CC4A0B1C31CA6A
:100D100031C351CA51C360CA60C3C94BC9489A683C
:100D20007A255203520F92005258C74902609C68BC
:100D3000A4B262430C60C54900240A60C44A14602E
:100D4000C44C2570C44CC54D2368281C1B69402128
:100D50009847002802D0C24B64221A80C14B00225F
:100D60001860C14B1D60C14BC04DBE4F1A602A6850
:100D70003B689A42E6D2BC4B1B681A78FF2A00D126
:100D800014E2232A00D0EBE1B94E3378002B06D0D1
:100D9000B14BB8491B680222D868FFF72DFFAD4B55
:100DA0001B78532B3CD13B682A6893421ED9AE482E
:100DB00001322A609A1AB04B01681B680131016048
:100DC000AE4E9A4201D2326000E03360A0483268F1
:100DD0000068049000F0DCFB336829685A182A6028
:100DE000A14A1668F1181160A54A13702B68013BDF
:100DF0002B609D4B1A68013A1A60A14B9E4A1B78E2
:100E000011688B420AD222689148C91A0068926917
:100E10009047002802D0924B64221A80C0468DE190
:100E2000522B0AD18A48944A2368006811685B698A
:100E3000039098476422934B0DE04F2B05D1844BD0
:100E40008D4A1B6812681A7078E1482B05D1804BD7
:100E5000894A1B6812681A8070E1572B05D17C4BB8
:100E6000854A1B6812681A6068E16F2B03D1784BC2
:100E70000121186807E0682B08D1754B7E481B6874
:100E800002211B880360FFF7D9FE57E1772B06D1BB
:100E90006F4B79481B6804211B680360F3E7472BFD
:100EA00013D1754B1868FFF709FF774B1B6883F365
:100EB000088862B6754B1B78002B00D13EE1664B6B
:100EC00006201B681B68984738E1542B04D1012386
:100ED0003370614B1B6864E04E2B0CD13378002BD0
:100EE00006D15D4B63491B680222D868FFF784FE78
:100EF0000023337022E1562B57D123686449D86808
:100F00000122FFF779FE23686249D8680322FFF7C0
:100F100073FE614D2368291CD8680122FFF76CFE1F
:100F200023685E49D8680D22FFF766FE2368291CF6
:100F3000D8680122FFF760FE4B4F4C4D5849002303
:100F400039602B603A1C281C13685E1C16601B78E5
:100F50000593002B03D0036801330360F4E73E4E92
:100F60002A683368D868FFF747FE33684A49D8686B
:100F70000122FFF741FE059929604A4939603A4A42
:100F80001368581C10601B78002B04D0374B1A686C
:100F900001321A60F3E733682A68D868FFF72CFE3D
:100FA0003368D86833490222C6E0334A582B17D138
:100FB000244E264D366813682A68B10093420AD23F
:100FC0001F4D5808E861384828801D4D287DC60708
:100FD000FBD55B18F2E7204B34491B68D868AAE0C0
:100FE000592B79D112681A4B3149002A02D11B685A
:100FF0000B606CE0124D086819686B68104E802514
:10100000AB4392087360002A61D02A4B0C4D2B80B1
:101010000B4E337DDD07FBD500230A4D2D6801956E
:10102000AD08AB4203D3244D054E358046E09342D4
:10103000F9D09D00465901334E51EEE70C160000E1
:10104000004000414002002038020020340200200D
:101050008402002030020020880200204402002088
:101060008A000020280200202C0200203C020020E0
:10107000880000206C1600009002002094020020DE
:10108000240200208C0000208C020020940000200C
:1010900048160000711600004A1600009416000061
:1010A0004C1600005816000002A5FFFF6116000054
:1010B0009000002044A5FFFF04A5FFFF3F4E357DB3
:1010C000EE07FBD59D0049194019D21A9BE73C4B0E
:1010D0003C491B68D8682EE05A2B2FD13A4B176831
:1010E0001D680026EF19BD4206D02878311C00F09B
:1010F00013F90135061CF6E7314B34491B68012210
:10110000D868FFF779FD07230F223240111C3609FA
:101110003031092A00DD07311820C0186A46815491
:10112000013BF1D2236806A9D8680822FFF764FDC5
:1011300023682749D8680322FFF75EFD254B7A22F2
:101140001A70254B00221A60244B1B7893422DD035
:101150001B4B23491B680122D868FFF74DFD25E092
:10116000111C3039C8B21C4B092804D81D682A014B
:10117000114319601AE0111C4139052903D81E6872
:10118000373A310106E0111C6139052904D8186885
:10119000573A01010A4308E02C2A03D10A4A196888
:1011A000116001E00B490A7000221A600D4B1A68A9
:1011B00001321A600C4B1A680132D5E5004000413B
:1011C00088020020651600008402002069160000D5
:1011D0006B160000300200209002002088000020E2
:1011E0006F1600003C0200202C02002010B51C4BA2
:1011F00001201A78022402431A701A4B0F22197820
:101200009143197019782143197017490C782043BC
:10121000087019780A401A701A7820210A431A7047
:10122000124B04211A6A0A431A62114B114A5A805E
:101230005A7852B2002AFBDBC4220F480F499203AE
:10124000FEF762FF0E4A002313700E4A13700E4A17
:1012500013700E4A13700E4A13700E4A137010BDAD
:101260004A440041354400414B44004100040040E1
:10127000000C004014400000000800422AF6000064
:10128000980200201F030020990200209C020020E9
:10129000200300201D03002008B5C1B20248FEF75C
:1012A00061FF012008BDC04600080042024B187EC5
:1012B0004007C00F7047C0460008004208B5FFF75E
:1012C000F5FF0028FBD00248FEF752FF08BDC046DC
:1012D0000008004208B5FFF7E9FF0023984205D057
:1012E000FFF7ECFF031C233B5A425341181C08BD77
:1012F00070B5041C0D1C4618B44204D02078FFF7CA
:10130000CBFF0134F8E7281C70BD10B5041CFFF7B3
:10131000D5FF2070012010BD0B0A5840034B400040
:10132000C05A0902484080B27047C046A216000069
:10133000F7B50024051C0F1C261CBC4220D0FFF76B
:10134000BDFF114BC0B21B780190002B1AD1311C8C
:10135000FFF7E2FF0D4B061C1A88002A04D10C4A45
:1013600011782A1C002907D001996A1C2970802F46
:1013700002D11988013919800134A4B2151CDCE7A7
:10138000301C00E00120FEBD1D0300209A02002059
:101390001E030020F0B53E4E85B0002203900C1CC9
:1013A00032703C4B914201D1012201E03A490C805C
:1013B0001A707F231C4201D080349C43FFF77EFFCC
:1013C0003378C0B2002B07D000253570FFF776FFC9
:1013D0003378C0B2AB4236D1432803D0712853D002
:1013E0001528EBD1012300930120FFF755FF00984A
:1013F000FFF752FF00998025C843C0B2FFF74CFFAA
:10140000039B00270293244A1388002B1DD12149F6
:1014100001930978002918D10198FFF73DFF391C85
:101420000198FFF779FF013D071C002DEBD1000A61
:10143000C0B2FFF731FFF8B2FFF72EFFFFF73EFF14
:101440003378002B0AD035701FE00299013B0978F0
:101450001380029B019101330293DDE7C0B206289D
:1014600007D1009B03990133DBB280310093803CAC
:101470000391002CB8D10420FFF70EFFFFF71EFFE9
:10148000044B01251C7000E00025281C05B0F0BDB0
:101490001D0300201E0300209A020020F0B5384CE6
:1014A00087B0002301902370994201D1012301E00C
:1014B000344A1180344A642613704320FFF7ECFE4F
:1014C000324FFFF7F3FE002803D1002F03D0013F76
:1014D000F7E7002F03D1013E002EEED14DE00125AC
:1014E000FFF7ECFE2378002B38D1C0B20290012820
:1014F00005D004283DD10620FFF7CEFE39E005AE29
:101500000221301CFFF714FF01988021FFF710FF24
:1015100023780390002B18D1FFF7D0FE0702FFF7C6
:10152000CDFEBFB223783F18BFB2012B0DD0039B75
:101530009F4207D13378AB4204D1EB437278DBB2E0
:101540009A4204D01820FFF7A7FE002303E00620EC
:10155000FFF7A2FE029B2278002A02D00026267006
:101560000BE0012B05D1019A6B1C8032DDB2019298
:10157000B6E7054A002313700126301C07B0F0BD02
:101580001D0300209A0200201E03002000350C00DD
:1015900010B50023934203D0CC5CC4540133F9E767
:1015A00010BD031C8218934202D019700133FAE770
:1015B00070470023C25C0133002AFBD1581E7047DC
:1015C000F8B5C046F8BC08BC9E467047F8B5C046A2
:1015D000F8BC08BC9E467047040309044172647558
:1015E000696E6F204C4C430041726475696E6F20C8
:1015F0004D4B5231303030001201000202000040E9
:1016000041234E000002010200010000080000001A
:1016100010000000200000004000000080000000DA
:101620000001000000020000000400009912000008
:10163000BD120000AD120000F11200000B130000FB
:10164000951300009D14000076002000446563207F
:10165000323020323031360031353A33363A343395
:1016600000580A0D00590A0D005A00230A0D003EC9
:1016700000322E3000000000210B00003D0B000066
:10168000590B00007D0B0000990B00007D0B000042
:10169000C10B00005B41726475696E6F3A58595A0C
:1016A0005D0000002110422063308440A550C660D8
:1016B000E770088129914AA16BB18CC1ADD1CEE10F
:1016C000EFF13112100273325222B5529442F77286
:1016D000D662399318837BB35AA3BDD39CC3FFF35F
:1016E000DEE36224433420040114E664C774A44496
:1016F00085546AA54BB528850995EEE5CFF5ACC5AF
:101700008DD55336722611163006D776F666955665
:10171000B4465BB77AA719973887DFF7FEE79DD7FE
:10172000BCC7C448E5588668A778400861180228F5
:101730002338CCC9EDD98EE9AFF9488969990AA94E
:101740002BB9F55AD44AB77A966A711A500A333AC5
:10175000122AFDDBDCCBBFFB9EEB799B588B3BBB9E
:101760001AABA66C877CE44CC55C222C033C600C55
:10177000411CAEED8FFDECCDCDDD2AAD0BBD688DEE
:10178000499D977EB66ED55EF44E133E322E511EA5
:10179000700E9FFFBEEFDDDFFCCF1BBF3AAF599F3E
:1017A000788F8891A981CAB1EBA10CD12DC14EF1DE
:1017B0006FE18010A100C230E32004502540467044
:1017C0006760B9839893FBA3DAB33DC31CD37FE36F
:1017D0005EF3B1029012F322D23235421452776294
:1017E0005672EAB5CBA5A89589856EF54FE52CD53F
:1017F0000DC5E234C324A0148104667447642454E4
:101800000544DBA7FAB79987B8975FE77EF71DC74E
:101810003CD7D326F2369106B01657667676154633
:1018200034564CD96DC90EF92FE9C899E9898AB99E
:10183000ABA94458654806782768C018E108823883
:10184000A3287DCB5CDB3FEB1EFBF98BD89BBBABAE
:101850009ABB754A545A376A167AF10AD01AB32AD3
:10186000923A2EFD0FED6CDD4DCDAABD8BADE89DFE
:10187000C98D267C076C645C454CA23C832CE01C23
:10188000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F8E
:10189000F89F176E367E554E745E932EB23ED10E73
:0818A000F01E00000000000032
:1018A800011400000902430002010080320904000B
:1018B80000010202000005240010010424020005B2
:1018C800240600010524010001070583030800FF21
:1018D80009040100020A0000000705810240000017
:1018E800070502024000000000C2010000000800D5
:0C18F8006900000041000000000000003A
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020AC18000038B5304B27
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B80225203FF
:1006C0009A601F4B1F4A041C5A601B4AC021106AC3
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E00044004106
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A121000021220000FC15000004000020DC
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C02002030160000940000207C1600007A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001016000000400041440200203C02002035
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:10107000400200208800002070160000940200202A
:1010800098020020280200208C00002090020020FE
:10109000940000204C160000751600004E1600004B
:1010A00098160000501600005C16000002A5FFFF15
:1010B000651600009000002044A5FFFF04A5FFFF77
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200206916000088020020C7
:1011D0006D1600006F1600003402002094020020FB
:1011E000880000207316000040020020300200201A
:1011F00010B51C4B01201A78022402431A701A4BB6
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78202137
:101220000A431A70124B04211A6A0A431A62114BBC
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BD4A440041354400414B440041D5
:1012700000040040000C0040144000000008004240
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046000800426B
:1012B000024B187E4007C00F7047C046000800422E
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC0460008004208B5FFF7E9FF00233B
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000A6160000F7B50024051C0F1C261CBC4295
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B52313030300012010002C5
:101600000200004041234E000002010200010000E0
:101610000800000010000000200000004000000052
:101620008000000000010000000200000004000033
:101630009D120000C1120000B1120000F51200005E
:101640000F13000099130000A11400007600200081
:1016500041707220313120323031390031333A302B
:10166000393A353100580A0D00590A0D005A002345
:101670000A0D003E00322E3000000000250B000055
:10168000410B00005D0B0000810B00009D0B000072
:10169000810B0000C50B00005B41726475696E6FC1
:1016A0003A58595A5D0000002110422063308440AE
:1016B000A550C660E770088129914AA16BB18CC121
:1016C000ADD1CEE1EFF13112100273325222B55298
:1016D0009442F772D662399318837BB35AA3BDD371
:1016E0009CC3FFF3DEE36224433420040114E66468
:1016F000C774A44485546AA54BB528850995EEE5C1
:10170000CFF5ACC58DD55336722611163006D77677
:10171000F6669556B4465BB77AA719973887DFF710
:10172000FEE79DD7BCC7C448E5588668A77840083F
:10173000611802282338CCC9EDD98EE9AFF9488960
:1017400069990AA92BB9F55AD44AB77A966A711AD7
:10175000500A333A122AFDDBDCCBBFFB9EEB799BB0
:10176000588B3BBB1AABA66C877CE44CC55C222C27
:10177000033C600C411CAEED8FFDECCDCDDD2AAD00
:101780000BBD688D499D977EB66ED55EF44E133EB7
:10179000322E511E700E9FFFBEEFDDDFFCCF1BBF50
:1017A0003AAF599F788F8891A981CAB1EBA10CD12A
:1017B0002DC14EF16FE18010A100C230E320045032
:1017C000254046706760B9839893FBA3DAB33DC3A5
:1017D0001CD37FE35EF3B1029012F322D232354282
:1017E000145277625672EAB5CBA5A89589856EF535
:1017F0004FE52CD50DC5E234C324A01481046674D2
:10180000476424540544DBA7FAB79987B8975FE784
:101810007EF71DC73CD7D326F2369106B016576621
:101820007676154634564CD96DC90EF92FE9C8990C
:10183000E9898AB9ABA94458654806782768C01871
:10184000E1088238A3287DCB5CDB3FEB1EFBF98BE4
:10185000D89BBBAB9ABB754A545A376A167AF10AC1
:10186000D01AB32A923A2EFD0FED6CDD4DCDAABDF4
:101870008BADE89DC98D267C076C645C454CA23C11
:10188000832CE01CC10C1FEF3EFF5DCF7CDF9BAFC4
:10189000BABFD98FF89F176E367E554E745E932E61
:0C18A000B23ED10EF01E0000000000005F
:1018AC000114000009024300020100803209040007
:1018BC0000010202000005240010010424020005AE
:1018CC00240600010524010001070583030800FF1D
:1018DC0009040100020A0000000705810240000013
:1018EC00070502024000000000C2010000000800D1
:0C18FC0069000000410000000000000036
:040000030000060DE6
:00000001FF

View file

@ -1,403 +0,0 @@
:10000000FC7F002015060000050600000906000020
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A4180000600000205800002000000000AC
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B5203DA6170477800002001000020B1
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D8FA207970BDE6
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F044F938BD0004004018
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F003F901990F480835A9
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AEF80123EB550023337000E01C1CE3
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
:1004700092035A6102230372827980235B42134301
:100480008371037A9A07FCD57047C0469801002013
:1004900080235B421943C9B28172704770B5A023B3
:1004A00003225B00C254134B134A5C6CC0211440FE
:1004B00089050C4346255C64FF35402444550F4DA7
:1004C00030261D6490256D0046555D6B154029430F
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A40300205C000020BB
:10066000A81800002E4A38B51368141C01331ED098
:10067000D1B200291BD12B4B1878012318402A4BEB
:100680000AD11D6829498D4201D118600FE0196017
:10069000274901390029FCD11960236883F30888B0
:1006A000FF239A43234B9A601D4B5B681847FFF763
:1006B00029FF62B600F09AFD00F04CF81E4B802234
:1006C00052039A601D4B1E4A041C5A60194AC021ED
:1006D000106A09060002000A0143116200229A60B2
:1006E00007221A60A368201C9847164B002801D0E7
:1006F00001221A701A78002A05D0002000F088FA2A
:1007000000F000FBFCE71B78002BEBD100F0E2FDD2
:100710000028E7D0012000F07BFA00F0F3FAFCE7B4
:100720000020000038040040FC7F00203581730762
:1007300048E8010000ED00E00044004110E000E066
:10074000E70300007B00002008B5FFF7A9FC00F0DC
:10075000C3FA08BD10B5054B054C2360FFF770FDCB
:10076000201C2168FFF75EFD201C10BD00500041D9
:100770001802002070B5051CC0B0081C161C0C1C0B
:1007800000F017FF40006A460323023053701070D8
:1007900076080123E218013A11785A00002906D19F
:1007A000281C69460023FFF7CFFD40B070BDB3425F
:1007B000F6DA684681520133ECE70000F7B5BA4A31
:1007C00004681378B949271CFF37051C10203872BC
:1007D0000B705378B648B74E037093783380D17856
:1007E000338809020B4333801179B34B1980517957
:1007F00018880902084318809079B0490880D27996
:100800000888120202430A8040227A71A84F3A787F
:10081000A64F120238780F1C0243A9488446181CC0
:10082000624500D1C2E020DC802149008A4200D12B
:100830006EE109DC812A00D192E0822A00D195E0A4
:10084000802A00D064E18BE081235B009A4200D1D2
:10085000CFE000DA58E1C0239B009A4200D157E173
:10086000984B9A4200D14FE152E190231B019A42EA
:1008700069D015DCD023DB009A4222D088231B01EB
:100880009A4269D0A023DB009A4200D040E1201CAC
:10089000FFF7EAFD3188286889B2FFF7F9FD3BE1EF
:1008A000894B9A4200D12FE100DC31E1874B9A421B
:1008B00000D11DE1864B9A4200D029E133886B714B
:1008C00022E133881B0A012B08D10B8812222868E9
:1008D000934201D80A8892B27E4911E133881B0AFB
:1008E000022B08D10B8843222868934201D80A883A
:1008F00092B2794904E133881B0A032B00D007E147
:100900003388DBB2012B17D0002B07D0022B00D08D
:10091000FEE00A882868D2B2704911E0042201A8DA
:100920006F4900F035FE3B8804222868934201D8C5
:100930003A8892B201A9E3E00A8828686949D2B2EC
:10094000FFF718FFE8E03388201C2B71FFF78CFDC0
:10095000201CFFF7A3FDDFE0291C01C90122CFE025
:10096000614900230B8028680222CAE05E49002208
:100970000A801888502210405C4A10701E880F2090
:10098000304018801888032800D9C1E012781B88ED
:1009900008335B01E418A379002A01D09B0600E02C
:1009A000DB06DB0F0B8028680222A9E019887F2272
:1009B00091434E4AC9B2117018880F210140198025
:1009C0003188002900D0A3E01988002900D19FE0D8
:1009D0001988032900D99BE012781B8808335B0132
:1009E000E318002A02D020225A718DE0102159719B
:1009F0008AE002887F239A433C4BD2B21A70018866
:100A00000F220A4002803288002A00D080E002884B
:100A1000002A00D17CE00288032A00D978E01B7804
:100A2000002B1FD0038808335B01E3189B799A06DB
:100A30006AD50388202208335B01E3181A71038802
:100A400008335B01E318DB795F065DD5038840223C
:100A500008335B01E318DA710388022208335B0173
:100A6000E3181EE0038808335B01E3189B79D9067D
:100A70004AD50388102208335B01E3181A710388F2
:100A800008335B01E318DB799A063DD50388202201
:100A900008335B01E318DA710388012208335B0134
:100AA000E3181A7130E0C046980000207D00002055
:100AB00082000020840000208600002080000020AA
:100AC000020300000103000021200000A12100001A
:100AD00021220000F815000004000020E8150000A5
:100AE000D8150000DC1500007E0000207C000020EE
:100AF0000B8808222868934201D80A8892B20749D5
:100B00000023FFF721FC07E0201CFFF7ADFC03E00A
:100B1000201C0121FFF79EFCF7BDC04648000020C5
:100B200007B5054B0122019001A91868131CFFF7B6
:100B30000BFC01200EBDC0461802002013B5054B6A
:100B40006C4607341868211C0122FFF745FC207809
:100B500016BDC0461802002010B5074C201CFFF738
:100B60001FFB031C0020834205D022684823FF336B
:100B7000D05C0123184010BD1802002010B5054AB2
:100B80000C1C031C191C10680123221CFFF7DCFB42
:100B9000201C10BD1802002070B5084C061C201C3B
:100BA0000D1CFFF7FDFA0023984205D02068311C88
:100BB0002A1CFFF711FC031C181C70BD1802002032
:100BC000F8B50C4C051C201C0E1CFFF7E9FA00239D
:100BD000271C341C98420AD0002C07D0291C221C48
:100BE0003868FFF7F9FB241A2D18F5E7331C181C99
:100BF000F8BDC0461802002008B5031C081C111CD3
:100C00009847024B64221A8008BDC0468C00002021
:100C1000012805D1054B064A1A60064B187004E0FE
:100C2000002802D1044A014B1A6070478802002054
:100C30002C160000940000207816000030B50A1C25
:100C40001C4985B00978031C00292AD0042A01D147
:100C5000006804E0022A01D1008800E00078520018
:100C600004A98B180B3B9C1AA3420BD00F21014007
:100C7000092902D83025294300E0373119700009CD
:100C8000013BF1E701A930230B7078234B700A2058
:100C90008B1898700D20D870074B04321B68D868E9
:100CA00003E005490968C868191CFFF7A5FF05B0EE
:100CB00030BDC046880000208802002072B6EFF3E5
:100CC0000883044A1360036883F30888436818475D
:100CD0007047C0468C020020084B1A88002A03D0B7
:100CE0001A88013A92B21A80054B1A88002A03D05A
:100CF0001A88013A92B21A807047C0468C000020D0
:100D00008A000020F0B591B008A9CC4A0B1C31CA6A
:100D100031C351CA51C360CA60C3C94BC9489A683C
:100D20007A255203520F92005258C74902609C68BC
:100D3000A4B262430C60C54900240A60C44A14602E
:100D4000C44C2570C44CC54D2368281C1B69402128
:100D50009847002802D0C24B64221A80C14B00225F
:100D60001860C14B1D60C14BC04DBE4F1A602A6850
:100D70003B689A42E6D2BC4B1B681A78FF2A00D126
:100D800014E2232A00D0EBE1B94E3378002B06D0D1
:100D9000B14BB8491B680222D868FFF72DFFAD4B55
:100DA0001B78532B3CD13B682A6893421ED9AE482E
:100DB00001322A609A1AB04B01681B680131016048
:100DC000AE4E9A4201D2326000E03360A0483268F1
:100DD0000068049000F0DCFB336829685A182A6028
:100DE000A14A1668F1181160A54A13702B68013BDF
:100DF0002B609D4B1A68013A1A60A14B9E4A1B78E2
:100E000011688B420AD222689148C91A0068926917
:100E10009047002802D0924B64221A80C0468DE190
:100E2000522B0AD18A48944A2368006811685B698A
:100E3000039098476422934B0DE04F2B05D1844BD0
:100E40008D4A1B6812681A7078E1482B05D1804BD7
:100E5000894A1B6812681A8070E1572B05D17C4BB8
:100E6000854A1B6812681A6068E16F2B03D1784BC2
:100E70000121186807E0682B08D1754B7E481B6874
:100E800002211B880360FFF7D9FE57E1772B06D1BB
:100E90006F4B79481B6804211B680360F3E7472BFD
:100EA00013D1754B1868FFF709FF774B1B6883F365
:100EB000088862B6754B1B78002B00D13EE1664B6B
:100EC00006201B681B68984738E1542B04D1012386
:100ED0003370614B1B6864E04E2B0CD13378002BD0
:100EE00006D15D4B63491B680222D868FFF784FE78
:100EF0000023337022E1562B57D123686449D86808
:100F00000122FFF779FE23686249D8680322FFF7C0
:100F100073FE614D2368291CD8680122FFF76CFE1F
:100F200023685E49D8680D22FFF766FE2368291CF6
:100F3000D8680122FFF760FE4B4F4C4D5849002303
:100F400039602B603A1C281C13685E1C16601B78E5
:100F50000593002B03D0036801330360F4E73E4E92
:100F60002A683368D868FFF747FE33684A49D8686B
:100F70000122FFF741FE059929604A4939603A4A42
:100F80001368581C10601B78002B04D0374B1A686C
:100F900001321A60F3E733682A68D868FFF72CFE3D
:100FA0003368D86833490222C6E0334A582B17D138
:100FB000244E264D366813682A68B10093420AD23F
:100FC0001F4D5808E861384828801D4D287DC60708
:100FD000FBD55B18F2E7204B34491B68D868AAE0C0
:100FE000592B79D112681A4B3149002A02D11B685A
:100FF0000B606CE0124D086819686B68104E802514
:10100000AB4392087360002A61D02A4B0C4D2B80B1
:101010000B4E337DDD07FBD500230A4D2D6801956E
:10102000AD08AB4203D3244D054E358046E09342D4
:10103000F9D09D00465901334E51EEE70C160000E1
:10104000004000414002002038020020340200200D
:101050008402002030020020880200204402002088
:101060008A000020280200202C0200203C020020E0
:10107000880000206C1600009002002094020020DE
:10108000240200208C0000208C020020940000200C
:1010900048160000711600004A1600009416000061
:1010A0004C1600005816000002A5FFFF6116000054
:1010B0009000002044A5FFFF04A5FFFF3F4E357DB3
:1010C000EE07FBD59D0049194019D21A9BE73C4B0E
:1010D0003C491B68D8682EE05A2B2FD13A4B176831
:1010E0001D680026EF19BD4206D02878311C00F09B
:1010F00013F90135061CF6E7314B34491B68012210
:10110000D868FFF779FD07230F223240111C3609FA
:101110003031092A00DD07311820C0186A46815491
:10112000013BF1D2236806A9D8680822FFF764FDC5
:1011300023682749D8680322FFF75EFD254B7A22F2
:101140001A70254B00221A60244B1B7893422DD035
:101150001B4B23491B680122D868FFF74DFD25E092
:10116000111C3039C8B21C4B092804D81D682A014B
:10117000114319601AE0111C4139052903D81E6872
:10118000373A310106E0111C6139052904D8186885
:10119000573A01010A4308E02C2A03D10A4A196888
:1011A000116001E00B490A7000221A600D4B1A68A9
:1011B00001321A600C4B1A680132D5E5004000413B
:1011C00088020020651600008402002069160000D5
:1011D0006B160000300200209002002088000020E2
:1011E0006F1600003C0200202C02002010B51C4BA2
:1011F00001201A78022402431A701A4B0F22197820
:101200009143197019782143197017490C782043BC
:10121000087019780A401A701A7820210A431A7047
:10122000124B04211A6A0A431A62114B114A5A805E
:101230005A7852B2002AFBDBC4220F480F499203AE
:10124000FEF762FF0E4A002313700E4A13700E4A17
:1012500013700E4A13700E4A13700E4A137010BDAD
:101260004A440041354400414B44004100040040E1
:10127000000C004014400000000800422AF6000064
:10128000980200201F030020990200209C020020E9
:10129000200300201D03002008B5C1B20248FEF75C
:1012A00061FF012008BDC04600080042024B187EC5
:1012B0004007C00F7047C0460008004208B5FFF75E
:1012C000F5FF0028FBD00248FEF752FF08BDC046DC
:1012D0000008004208B5FFF7E9FF0023984205D057
:1012E000FFF7ECFF031C233B5A425341181C08BD77
:1012F00070B5041C0D1C4618B44204D02078FFF7CA
:10130000CBFF0134F8E7281C70BD10B5041CFFF7B3
:10131000D5FF2070012010BD0B0A5840034B400040
:10132000C05A0902484080B27047C046A216000069
:10133000F7B50024051C0F1C261CBC4220D0FFF76B
:10134000BDFF114BC0B21B780190002B1AD1311C8C
:10135000FFF7E2FF0D4B061C1A88002A04D10C4A45
:1013600011782A1C002907D001996A1C2970802F46
:1013700002D11988013919800134A4B2151CDCE7A7
:10138000301C00E00120FEBD1D0300209A02002059
:101390001E030020F0B53E4E85B0002203900C1CC9
:1013A00032703C4B914201D1012201E03A490C805C
:1013B0001A707F231C4201D080349C43FFF77EFFCC
:1013C0003378C0B2002B07D000253570FFF776FFC9
:1013D0003378C0B2AB4236D1432803D0712853D002
:1013E0001528EBD1012300930120FFF755FF00984A
:1013F000FFF752FF00998025C843C0B2FFF74CFFAA
:10140000039B00270293244A1388002B1DD12149F6
:1014100001930978002918D10198FFF73DFF391C85
:101420000198FFF779FF013D071C002DEBD1000A61
:10143000C0B2FFF731FFF8B2FFF72EFFFFF73EFF14
:101440003378002B0AD035701FE00299013B0978F0
:101450001380029B019101330293DDE7C0B206289D
:1014600007D1009B03990133DBB280310093803CAC
:101470000391002CB8D10420FFF70EFFFFF71EFFE9
:10148000044B01251C7000E00025281C05B0F0BDB0
:101490001D0300201E0300209A020020F0B5384CE6
:1014A00087B0002301902370994201D1012301E00C
:1014B000344A1180344A642613704320FFF7ECFE4F
:1014C000324FFFF7F3FE002803D1002F03D0013F76
:1014D000F7E7002F03D1013E002EEED14DE00125AC
:1014E000FFF7ECFE2378002B38D1C0B20290012820
:1014F00005D004283DD10620FFF7CEFE39E005AE29
:101500000221301CFFF714FF01988021FFF710FF24
:1015100023780390002B18D1FFF7D0FE0702FFF7C6
:10152000CDFEBFB223783F18BFB2012B0DD0039B75
:101530009F4207D13378AB4204D1EB437278DBB2E0
:101540009A4204D01820FFF7A7FE002303E00620EC
:10155000FFF7A2FE029B2278002A02D00026267006
:101560000BE0012B05D1019A6B1C8032DDB2019298
:10157000B6E7054A002313700126301C07B0F0BD02
:101580001D0300209A0200201E03002000350C00DD
:1015900010B50023934203D0CC5CC4540133F9E767
:1015A00010BD031C8218934202D019700133FAE770
:1015B00070470023C25C0133002AFBD1581E7047DC
:1015C000F8B5C046F8BC08BC9E467047F8B5C046A2
:1015D000F8BC08BC9E467047040309044172647558
:1015E000696E6F204C4C430047656E75696E6F20C5
:1015F0004D4B5231303030001201000202000040E9
:1016000041234E0200020102000100000800000018
:1016100010000000200000004000000080000000DA
:101620000001000000020000000400009912000008
:10163000BD120000AD120000F11200000B130000FB
:10164000951300009D14000076002000446563207F
:10165000323020323031360031353A33363A343494
:1016600000580A0D00590A0D005A00230A0D003EC9
:1016700000322E3000000000210B00003D0B000066
:10168000590B00007D0B0000990B00007D0B000042
:10169000C10B00005B41726475696E6F3A58595A0C
:1016A0005D0000002110422063308440A550C660D8
:1016B000E770088129914AA16BB18CC1ADD1CEE10F
:1016C000EFF13112100273325222B5529442F77286
:1016D000D662399318837BB35AA3BDD39CC3FFF35F
:1016E000DEE36224433420040114E664C774A44496
:1016F00085546AA54BB528850995EEE5CFF5ACC5AF
:101700008DD55336722611163006D776F666955665
:10171000B4465BB77AA719973887DFF7FEE79DD7FE
:10172000BCC7C448E5588668A778400861180228F5
:101730002338CCC9EDD98EE9AFF9488969990AA94E
:101740002BB9F55AD44AB77A966A711A500A333AC5
:10175000122AFDDBDCCBBFFB9EEB799B588B3BBB9E
:101760001AABA66C877CE44CC55C222C033C600C55
:10177000411CAEED8FFDECCDCDDD2AAD0BBD688DEE
:10178000499D977EB66ED55EF44E133E322E511EA5
:10179000700E9FFFBEEFDDDFFCCF1BBF3AAF599F3E
:1017A000788F8891A981CAB1EBA10CD12DC14EF1DE
:1017B0006FE18010A100C230E32004502540467044
:1017C0006760B9839893FBA3DAB33DC31CD37FE36F
:1017D0005EF3B1029012F322D23235421452776294
:1017E0005672EAB5CBA5A89589856EF54FE52CD53F
:1017F0000DC5E234C324A0148104667447642454E4
:101800000544DBA7FAB79987B8975FE77EF71DC74E
:101810003CD7D326F2369106B01657667676154633
:1018200034564CD96DC90EF92FE9C899E9898AB99E
:10183000ABA94458654806782768C018E108823883
:10184000A3287DCB5CDB3FEB1EFBF98BD89BBBABAE
:101850009ABB754A545A376A167AF10AD01AB32AD3
:10186000923A2EFD0FED6CDD4DCDAABD8BADE89DFE
:10187000C98D267C076C645C454CA23C832CE01C23
:10188000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F8E
:10189000F89F176E367E554E745E932EB23ED10E73
:0818A000F01E00000000000032
:1018A800011400000902430002010080320904000B
:1018B80000010202000005240010010424020005B2
:1018C800240600010524010001070583030800FF21
:1018D80009040100020A0000000705810240000017
:1018E800070502024000000000C2010000000800D5
:0C18F8006900000041000000000000003A
:0400000300000615DE
:00000001FF

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:10003000000000000000000011060000550700004D
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000B818000008B5084B002B03D0B2
:1000600000000000B018000008B5084B002B03D0BA
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000B818000060000020580000200000000098
:10009000B0180000600000205800002000000000A0
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F04AF938BD0004004012
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F009F901990F480835A3
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0B4F80123EB550023337000E01C1CDD
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,327 +78,327 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A80300205C000020B7
:10066000BC18000038B5304B1A681C1C013221D070
:100670002E4A191D1160D9B200291BD12C4A1078BD
:10068000012210402B4A0AD115682B498D4201D115
:1006900010600FE01160294901390029FCD1116077
:1006A000226882F30888FF229343254A93601E4BF9
:1006B0005B681847FFF726FF62B600F09DFD00F06B
:1006C0004FF8204B802252039A601F4B1F4A041C94
:1006D0005A601B4AC021106A09060002000A014341
:1006E000116200229A6007221A60A368201C9847B2
:1006F000174B002801D001221A701A78002A05D061
:10070000002000F08BFA00F003FBFCE71B78002BC5
:10071000EBD100F0E5FD0028E7D0012000F07EFAE3
:1007200000F0F6FAFCE7C0460020000018020020A6
:1007300038040040FC7F00203581730748E8010041
:1007400000ED00E00044004110E000E0E70300009D
:100750007B00002008B5FFF7A3FC00F0C3FA08BD3A
:1007600010B5054B054C2360FFF76AFD201C21687E
:10077000FFF758FD201C10BD005000411C02002056
:1007800070B5051CC0B0081C161C0C1C00F017FF2F
:1007900040006A460323023053701070760801232C
:1007A000E218013A11785A00002906D1281C69463E
:1007B0000023FFF7C9FD40B070BDB342F6DA6846CA
:1007C00081520133ECE70000F7B5BA4A04681378A8
:1007D000B949271CFF37051C102038720B7053785D
:1007E000B648B74E037093783380D17833880902C6
:1007F0000B4333801179B34B198051791888090262
:10080000084318809079B0490880D279088812028C
:1008100002430A8040227A71A84F3A78A64F12020A
:1008200038780F1C0243A9488446181C624500D141
:10083000C2E020DC802149008A4200D16EE109DC5F
:10084000812A00D192E0822A00D195E0802A00D04E
:1008500064E18BE081235B009A4200D1CFE000DAB3
:1008600058E1C0239B009A4200D157E1984B9A422D
:1008700000D14FE152E190231B019A4269D015DC6F
:10088000D023DB009A4222D088231B019A4269D0F0
:10089000A023DB009A4200D040E1201CFFF7E4FDDA
:1008A0003188286889B2FFF7F3FD3BE1894B9A4212
:1008B00000D12FE100DC31E1874B9A4200D11DE1EC
:1008C000864B9A4200D029E133886B7122E133884C
:1008D0001B0A012B08D10B8812222868934201D8E9
:1008E0000A8892B27E4911E133881B0A022B08D193
:1008F0000B8843222868934201D80A8892B279492A
:1009000004E133881B0A032B00D007E13388DBB2F4
:10091000012B17D0002B07D0022B00D0FEE00A8855
:100920002868D2B2704911E0042201A86F4900F092
:1009300035FE3B8804222868934201D83A8892B257
:1009400001A9E3E00A8828686949D2B2FFF718FFD5
:10095000E8E03388201C2B71FFF786FD201CFFF791
:100960009DFDDFE0291C01C90122CFE06149002380
:100970000B8028680222CAE05E4900220A8018889B
:10098000502210405C4A10701E880F2030401880A2
:100990001888032800D9C1E012781B8808335B014E
:1009A000E418A379002A01D09B0600E0DB06DB0FE8
:1009B0000B8028680222A9E019887F2291434E4AC1
:1009C000C9B2117018880F2101401980318800299F
:1009D00000D0A3E01988002900D19FE019880329DD
:1009E00000D99BE012781B8808335B01E318002ACA
:1009F00002D020225A718DE0102159718AE00288BC
:100A00007F239A433C4BD2B21A7001880F220A40CE
:100A100002803288002A00D080E00288002A00D1BB
:100A20007CE00288032A00D978E01B78002B1FD0D5
:100A3000038808335B01E3189B799A066AD503881B
:100A4000202208335B01E3181A71038808335B0125
:100A5000E318DB795F065DD50388402208335B012C
:100A6000E318DA710388022208335B01E3181EE001
:100A7000038808335B01E3189B79D9064AD50388BC
:100A8000102208335B01E3181A71038808335B01F5
:100A9000E318DB799A063DD50388202208335B01F1
:100AA000E318DA710388012208335B01E3181A7135
:100AB00030E0C046980000207D0000208200002029
:100AC0008400002086000020800000200203000037
:100AD0000103000021200000A121000021220000CC
:100AE0000C16000004000020F4150000E4150000BE
:100AF000E81500007E0000207C0000200B88082202
:100B00002868934201D80A8892B207490023FFF768
:100B10001BFC07E0201CFFF7A7FC03E0201C0121C1
:100B2000FFF798FCF7BDC0464800002007B5054B0D
:100B30000122019001A91868131CFFF705FC012090
:100B40000EBDC0461C02002013B5054B6C46073491
:100B50001868211C0122FFF73FFC207816BDC04613
:100B60001C02002010B5074C201CFFF719FB031CCA
:100B70000020834205D022684823FF33D05C012344
:100B8000184010BD1C02002010B5054A0C1C031CA7
:100B9000191C10680123221CFFF7D6FB201C10BD76
:100BA0001C02002070B5084C061C201C0D1CFFF711
:100BB000F7FA0023984205D02068311C2A1CFFF761
:100BC0000BFC031C181C70BD1C020020F8B50C4C5B
:100BD000051C201C0E1CFFF7E3FA0023271C341C05
:100BE00098420AD0002C07D0291C221C3868FFF735
:100BF000F3FB241A2D18F5E7331C181CF8BDC0466A
:100C00001C02002008B5031C081C111C9847024B4D
:100C100064221A8008BDC0468C000020012805D13E
:100C2000054B064A1A60064B187004E0002802D1F2
:100C3000044A014B1A6070478C02002040160000E5
:100C4000940000208C16000030B50A1C1C4985B0A9
:100C50000978031C00292AD0042A01D1006804E085
:100C6000022A01D1008800E00078520004A98B1804
:100C70000B3B9C1AA3420BD00F210140092902D83B
:100C80003025294300E0373119700009013BF1E7B5
:100C900001A930230B7078234B700A208B189870B1
:100CA0000D20D870074B04321B68D86803E0054953
:100CB0000968C868191CFFF7A5FF05B030BDC0461C
:100CC000880000208C02002072B6EFF30883044AEB
:100CD0001360036883F30888436818477047C04669
:100CE00090020020084B1A88002A03D01A88013A83
:100CF00092B21A80054B1A88002A03D01A88013A4A
:100D000092B21A807047C0468C0000208A000020F2
:100D1000F0B591B008A9CC4A0B1C31CA31C351CAF5
:100D200051C360CA60C3C94BC9489A687A25520347
:100D3000520F92005258C74902609C68A4B26243A5
:100D40000C60C54900240A60C44A1460C44C257074
:100D5000C44CC54D2368281C1B69402198470028B6
:100D600002D0C24B64221A80C14B00221860C14BD2
:100D70001D60C14BC04DBE4F1A602A683B689A4245
:100D8000E6D2BC4B1B681A78FF2A00D114E2232A52
:100D900000D0EBE1B94E3378002B06D0B14BB84907
:100DA0001B680222D868FFF72DFFAD4B1B78532B31
:100DB0003CD13B682A6893421ED9AE4801322A6072
:100DC0009A1AB04B01681B6801310160AE4E9A421D
:100DD00001D2326000E03360A048326800680490BD
:100DE00000F0DCFB336829685A182A60A14A1668AB
:100DF000F1181160A54A13702B68013B2B609D4BC5
:100E00001A68013A1A60A14B9E4A1B7811688B42FE
:100E10000AD222689148C91A00689269904700284E
:100E200002D0924B64221A80C0468DE1522B0AD127
:100E30008A48944A2368006811685B690390984760
:100E40006422934B0DE04F2B05D1844B8D4A1B68D8
:100E500012681A7078E1482B05D1804B894A1B68CB
:100E600012681A8070E1572B05D17C4B854A1B68AC
:100E700012681A6068E16F2B03D1784B0121186862
:100E800007E0682B08D1754B7E481B6802211B8840
:100E90000360FFF7D9FE57E1772B06D16F4B7948F6
:100EA0001B6804211B680360F3E7472B13D1754BC4
:100EB0001868FFF709FF774B1B6883F3088862B651
:100EC000754B1B78002B00D13EE1664B06201B685A
:100ED0001B68984738E1542B04D101233370614BD0
:100EE0001B6864E04E2B0CD13378002B06D15D4B90
:100EF00063491B680222D868FFF784FE0023337021
:100F000022E1562B57D123686449D8680122FFF7A4
:100F100079FE23686249D8680322FFF773FE614DAA
:100F20002368291CD8680122FFF76CFE23685E49FC
:100F3000D8680D22FFF766FE2368291CD8680122B5
:100F4000FFF760FE4B4F4C4D5849002339602B6032
:100F50003A1C281C13685E1C16601B780593002B36
:100F600003D0036801330360F4E73E4E2A68336818
:100F7000D868FFF747FE33684A49D8680122FFF76F
:100F800041FE059929604A4939603A4A1368581C5C
:100F900010601B78002B04D0374B1A6801321A609E
:100FA000F3E733682A68D868FFF72CFE3368D868FF
:100FB00033490222C6E0334A582B17D1244E264D1E
:100FC000366813682A68B10093420AD21F4D580848
:100FD000E861384828801D4D287DC607FBD55B1881
:100FE000F2E7204B34491B68D868AAE0592B79D125
:100FF00012681A4B3149002A02D11B680B606CE061
:10100000124D086819686B68104E8025AB43920832
:101010007360002A61D02A4B0C4D2B800B4E337D20
:10102000DD07FBD500230A4D2D680195AD08AB42C5
:1010300003D3244D054E358046E09342F9D09D0000
:10104000465901334E51EEE72016000000400041A2
:10105000440200203C0200203802002088020020C8
:10106000340200208C020020480200208A00002068
:101070002C020020300200204002002088000020C6
:101080008016000094020020980200202802002010
:101090008C00002090020020940000205C160000CC
:1010A000851600005E160000A816000060160000FD
:1010B0006C16000002A5FFFF7516000090000020CE
:1010C00044A5FFFF04A5FFFF3F4E357DEE07FBD58E
:1010D0009D0049194019D21A9BE73C4B3C491B68BB
:1010E000D8682EE05A2B2FD13A4B17681D6800267E
:1010F000EF19BD4206D02878311C00F013F90135F4
:10110000061CF6E7314B34491B680122D868FFF70B
:1011100079FD07230F223240111C36093031092A8C
:1011200000DD07311820C0186A468154013BF1D216
:10113000236806A9D8680822FFF764FD23682749B9
:10114000D8680322FFF75EFD254B7A221A70254BE3
:1011500000221A60244B1B7893422DD01B4B23494D
:101160001B680122D868FFF74DFD25E0111C3039BE
:10117000C8B21C4B092804D81D682A011143196004
:101180001AE0111C4139052903D81E68373A31018C
:1011900006E0111C6139052904D81868573A010185
:1011A0000A4308E02C2A03D10A4A1968116001E0B9
:1011B0000B490A7000221A600D4B1A6801321A603E
:1011C0000C4B1A680132D5E5004000418C0200202A
:1011D00079160000880200207D1600007F160000AE
:1011E00034020020940200208800002083160000B2
:1011F000400200203002002010B51C4B01201A785C
:10120000032402431A701A4B0F2219789143197064
:1012100019782143197017490C7820430870197800
:101220000A401A701A7830210A431A70124B802132
:101230001A6A0A431A62114B114A5A805A7852B2FA
:10124000002AFBDBC4220F480F499203FEF75CFF24
:101250000E4A002313700E4A13700E4A13700E4A82
:1012600013700E4A13700E4A137010BDD64400411D
:10127000BB440041D744004100040040000C004042
:1012800019400000001C00422AF600009C020020C9
:10129000230300209D020020A00200202403002040
:1012A0002103002008B5C1B20248FEF75BFF012010
:1012B00008BDC046001C0042024B187E4007C00F0C
:1012C0007047C046001C004208B5FFF7F5FF002834
:1012D000FBD00248FEF74CFF08BDC046001C004290
:1012E00008B5FFF7E9FF0023984205D0FFF7ECFFB0
:1012F000031C233B5A425341181C08BD70B5041C03
:101300000D1C4618B44204D02078FFF7CBFF0134FF
:10131000F8E7281C70BD10B5041CFFF7D5FF20703E
:10132000012010BD0B0A5840034B4000C05A09026F
:10133000484080B27047C046B6160000F7B500249A
:10134000051C0F1C261CBC4220D0FFF7BDFF114B13
:10135000C0B21B780190002B1AD1311CFFF7E2FFBD
:101360000D4B061C1A88002A04D10C4A11782A1C3D
:10137000002907D001996A1C2970802F02D1198891
:10138000013919800134A4B2151CDCE7301C00E0DF
:101390000120FEBD210300209E0200202203002028
:1013A000F0B53E4E85B0002203900C1C32703C4BD1
:1013B000914201D1012201E03A490C801A707F2349
:1013C0001C4201D080349C43FFF77EFF3378C0B2CB
:1013D000002B07D000253570FFF776FF3378C0B2B9
:1013E000AB4236D1432803D0712853D01528EBD116
:1013F000012300930120FFF755FF0098FFF752FFEC
:1014000000998025C843C0B2FFF74CFF039B00271B
:101410000293244A1388002B1DD121490193097896
:10142000002918D10198FFF73DFF391C0198FFF7FB
:1014300079FF013D071C002DEBD1000AC0B2FFF778
:1014400031FFF8B2FFF72EFFFFF73EFF3378002B96
:101450000AD035701FE00299013B09781380029B86
:10146000019101330293DDE7C0B2062807D1009B4A
:1014700003990133DBB280310093803C0391002C4F
:10148000B8D10420FFF70EFFFFF71EFF044B012524
:101490001C7000E00025281C05B0F0BD21030020D1
:1014A000220300209E020020F0B5384C87B00023B4
:1014B00001902370994201D1012301E0344A118047
:1014C000344A642613704320FFF7ECFE324FFFF7D7
:1014D000F3FE002803D1002F03D0013FF7E7002FD0
:1014E00003D1013E002EEED14DE00125FFF7ECFEC9
:1014F0002378002B38D1C0B20290012805D00428EF
:101500003DD10620FFF7CEFE39E005AE0221301CAA
:10151000FFF714FF01988021FFF710FF2378039055
:10152000002B18D1FFF7D0FE0702FFF7CDFEBFB2A8
:1015300023783F18BFB2012B0DD0039B9F4207D1E8
:101540003378AB4204D1EB437278DBB29A4204D0D9
:101550001820FFF7A7FE002303E00620FFF7A2FEF6
:10156000029B2278002A02D0002626700BE0012B75
:1015700005D1019A6B1C8032DDB20192B6E7054AB3
:10158000002313700126301C07B0F0BD210300209A
:101590009E0200202203002000350C0010B500231D
:1015A000934203D0CC5CC4540133F9E710BD031C53
:1015B0008218934202D019700133FAE77047002372
:1015C000C25C0133002AFBD1581E7047F8B5C046F3
:1015D000F8BC08BC9E467047F8B5C046F8BC08BCCD
:1015E0009E4670470403090441726475696E6F205A
:1015F0004C4C430041726475696E6F204D4B522014
:10160000464F5820313230300000000012010002F5
:1016100002000040412350000002010200010000CE
:101620000800000010000000200000004000000042
:101630008000000000010000000200000004000023
:10164000A5120000C9120000B9120000FD1200002E
:1016500017130000A1130000A91400007600200059
:101660004E6F7620333020323031370031303A310E
:10167000333A313900580A0D00590A0D005A002337
:101680000A0D003E00322E30000000002D0B00003D
:10169000490B0000650B0000890B0000A50B000042
:1016A000890B0000CD0B00005B41726475696E6FA1
:1016B0003A58595A5D00000021104220633084409E
:1016C000A550C660E770088129914AA16BB18CC111
:1016D000ADD1CEE1EFF13112100273325222B55288
:1016E0009442F772D662399318837BB35AA3BDD361
:1016F0009CC3FFF3DEE36224433420040114E66458
:10170000C774A44485546AA54BB528850995EEE5B0
:10171000CFF5ACC58DD55336722611163006D77667
:10172000F6669556B4465BB77AA719973887DFF700
:10173000FEE79DD7BCC7C448E5588668A77840082F
:10174000611802282338CCC9EDD98EE9AFF9488950
:1017500069990AA92BB9F55AD44AB77A966A711AC7
:10176000500A333A122AFDDBDCCBBFFB9EEB799BA0
:10177000588B3BBB1AABA66C877CE44CC55C222C17
:10178000033C600C411CAEED8FFDECCDCDDD2AADF0
:101790000BBD688D499D977EB66ED55EF44E133EA7
:1017A000322E511E700E9FFFBEEFDDDFFCCF1BBF40
:1017B0003AAF599F788F8891A981CAB1EBA10CD11A
:1017C0002DC14EF16FE18010A100C230E320045022
:1017D000254046706760B9839893FBA3DAB33DC395
:1017E0001CD37FE35EF3B1029012F322D232354272
:1017F000145277625672EAB5CBA5A89589856EF525
:101800004FE52CD50DC5E234C324A01481046674C1
:10181000476424540544DBA7FAB79987B8975FE774
:101820007EF71DC73CD7D326F2369106B016576611
:101830007676154634564CD96DC90EF92FE9C899FC
:10184000E9898AB9ABA94458654806782768C01861
:10185000E1088238A3287DCB5CDB3FEB1EFBF98BD4
:10186000D89BBBAB9ABB754A545A376A167AF10AB1
:10187000D01AB32A923A2EFD0FED6CDD4DCDAABDE4
:101880008BADE89DC98D267C076C645C454CA23C01
:10189000832CE01CC10C1FEF3EFF5DCF7CDF9BAFB4
:1018A000BABFD98FF89F176E367E554E745E932E51
:0C18B000B23ED10EF01E0000000000004F
:1018BC0001140000090243000201008032090400F7
:1018CC00000102020000052400100104240200059E
:1018DC00240600010524010001070583030800FF0D
:1018EC0009040100020A0000000705810240000003
:1018FC00070502024000000000C2010000000800C1
:0C190C0069000000410000000000000025
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020B418000038B5304B1F
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B80225203FF
:1006C0009A601F4B1F4A041C5A601B4AC021106AC3
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E00044004106
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A1210000212200000416000004000020D3
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C0200203816000094000020841600006A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001816000000400041440200203C0200202D
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:101070004002002088000020781600009402002022
:1010800098020020280200208C00002090020020FE
:1010900094000020541600007D1600005616000033
:1010A000A0160000581600006416000002A5FFFFFD
:1010B0006D1600009000002044A5FFFF04A5FFFF6F
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200207116000088020020BF
:1011D00075160000771600003402002094020020EB
:1011E000880000207B160000400200203002002012
:1011F00010B51C4B01201A78032402431A701A4BB5
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78302127
:101220000A431A70124B80211A6A0A431A62114B40
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BDD6440041BB440041D744004137
:1012700000040040000C004019400000001C004227
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046001C004257
:1012B000024B187E4007C00F7047C046001C00421A
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC046001C004208B5FFF7E9FF002327
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000AE160000F7B50024051C0F1C261CBC428D
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B5220464F582031323030AB
:1016000000000000120100020200004041235000CF
:1016100000020102000100000800000010000000AC
:1016200020000000400000008000000000010000D9
:1016300000020000000400009D120000C112000022
:10164000B1120000F51200000F1300009913000002
:10165000A114000076002000417072203131203248
:101660003031390031333A30393A353300580A0DC8
:1016700000590A0D005A00230A0D003E00322E3098
:1016800000000000250B0000410B00005D0B000076
:10169000810B00009D0B0000810B0000C50B0000BA
:1016A0005B41726475696E6F3A58595A5D0000006B
:1016B0002110422063308440A550C660E770088145
:1016C00029914AA16BB18CC1ADD1CEE1EFF13112BC
:1016D000100273325222B5529442F772D662399395
:1016E00018837BB35AA3BDD39CC3FFF3DEE362240C
:1016F000433420040114E664C774A44485546AA5E5
:101700004BB528850995EEE5CFF5ACC58DD553369B
:10171000722611163006D776F6669556B4465BB734
:101720007AA719973887DFF7FEE79DD7BCC7C4486B
:10173000E5588668A7784008611802282338CCC984
:10174000EDD98EE9AFF9488969990AA92BB9F55AFB
:10175000D44AB77A966A711A500A333A122AFDDBD4
:10176000DCCBBFFB9EEB799B588B3BBB1AABA66CCB
:10177000877CE44CC55C222C033C600C411CAEED24
:101780008FFDECCDCDDD2AAD0BBD688D499D977EDB
:10179000B66ED55EF44E133E322E511E700E9FFF74
:1017A000BEEFDDDFFCCF1BBF3AAF599F788F88912A
:1017B000A981CAB1EBA10CD12DC14EF16FE180100E
:1017C000A100C230E3200450254046706760B98311
:1017D0009893FBA3DAB33DC31CD37FE35EF3B1025E
:1017E0009012F322D2323542145277625672EAB521
:1017F000CBA5A89589856EF54FE52CD50DC5E234AE
:10180000C324A01481046674476424540544DBA7F0
:10181000FAB79987B8975FE77EF71DC73CD7D326FD
:10182000F2369106B01657667676154634564CD980
:101830006DC90EF92FE9C899E9898AB9ABA944584D
:10184000654806782768C018E1088238A3287DCB50
:101850005CDB3FEB1EFBF98BD89BBBAB9ABB754A9D
:10186000545A376A167AF10AD01AB32A923A2EFDE0
:101870000FED6CDD4DCDAABD8BADE89DC98D267CED
:10188000076C645C454CA23C832CE01CC10C1FEF30
:101890003EFF5DCF7CDF9BAFBABFD98FF89F176E3D
:1018A000367E554E745E932EB23ED10EF01E000071
:0418B0000000000034
:1018B40001140000090243000201008032090400FF
:1018C40000010202000005240010010424020005A6
:1018D400240600010524010001070583030800FF15
:1018E40009040100020A000000070581024000000B
:1018F400070502024000000000C2010000000800C9
:0C1904006900000041000000000000002D
:040000030000060DE6
:00000001FF

View file

@ -1,20 +1,20 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:10000000FC7F0020790B0000690B00006D0B0000E5
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:10002000000000000000000000000000710B000054
:100030000000000000000000750B0000CD0C000067
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:1000600000000000D01E000008B5084B002B03D094
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:10009000D01E00006000002058000020000000007A
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:1001000001F008FD421EE068FF231A4098431043A7
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
@ -117,7 +117,7 @@
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:1007700002D5201C00F0E4FA207970BD9C01002015
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
@ -134,14 +134,14 @@
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:10088000802201F0A0F938BD000400405844004126
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:1008F000221C01F05FF901990F4808354218176171
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
@ -151,7 +151,7 @@
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:100990005C6CA404A40C081C221C074901F00AF991
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
@ -165,338 +165,338 @@
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020DC1E000064
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:101060002C1C000004000020141C0000041C0000C4
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A60704790020020601C000036
:1011C00098000020AC1C000030B50A1C1C4985B0FA
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE7401C000000400041F7
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:10160000A01C0000980200209C0200202C02002058
:101610009200002094020020980000207C1C000012
:10162000A51C00007E1C0000C81C0000801C0000DF
:101630008C1C000002A5FFFF951C000094000020F8
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000991C00008C0200209D1C00009F1C0000B2
:1017600038020020980200208E000020A31C0000F8
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D61C0000F7B50024EF
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C200047534D20313430300000000012010002D3
:101C300002000040412352000002010200010000A6
:101C4000080000001000000020000000400000001C
:101C500080000000000100000002000000040000FD
:101C60002518000049180000391800007D180000F0
:101C70009718000021190000291A000076002000A2
:101C80004E6F7620333020323031370031303A31E8
:101C9000333A323100580A0D00590A0D005A002318
:101CA0000A0D003E00322E3000000000AD10000092
:101CB000C9100000E5100000091100002511000006
:101CC000091100004D1100005B41726475696E6F6F
:101CD0003A58595A5D000000211042206330844078
:101CE000A550C660E770088129914AA16BB18CC1EB
:101CF000ADD1CEE1EFF13112100273325222B55262
:101D00009442F772D662399318837BB35AA3BDD33A
:101D10009CC3FFF3DEE36224433420040114E66431
:101D2000C774A44485546AA54BB528850995EEE58A
:101D3000CFF5ACC58DD55336722611163006D77641
:101D4000F6669556B4465BB77AA719973887DFF7DA
:101D5000FEE79DD7BCC7C448E5588668A778400809
:101D6000611802282338CCC9EDD98EE9AFF948892A
:101D700069990AA92BB9F55AD44AB77A966A711AA1
:101D8000500A333A122AFDDBDCCBBFFB9EEB799B7A
:101D9000588B3BBB1AABA66C877CE44CC55C222CF1
:101DA000033C600C411CAEED8FFDECCDCDDD2AADCA
:101DB0000BBD688D499D977EB66ED55EF44E133E81
:101DC000322E511E700E9FFFBEEFDDDFFCCF1BBF1A
:101DD0003AAF599F788F8891A981CAB1EBA10CD1F4
:101DE0002DC14EF16FE18010A100C230E3200450FC
:101DF000254046706760B9839893FBA3DAB33DC36F
:101E00001CD37FE35EF3B1029012F322D23235424B
:101E1000145277625672EAB5CBA5A89589856EF5FE
:101E20004FE52CD50DC5E234C324A014810466749B
:101E3000476424540544DBA7FAB79987B8975FE74E
:101E40007EF71DC73CD7D326F2369106B0165766EB
:101E50007676154634564CD96DC90EF92FE9C899D6
:101E6000E9898AB9ABA94458654806782768C0183B
:101E7000E1088238A3287DCB5CDB3FEB1EFBF98BAE
:101E8000D89BBBAB9ABB754A545A376A167AF10A8B
:101E9000D01AB32A923A2EFD0FED6CDD4DCDAABDBE
:101EA0008BADE89DC98D267C076C645C454CA23CDB
:101EB000832CE01CC10C1FEF3EFF5DCF7CDF9BAF8E
:101EC000BABFD98FF89F176E367E554E745E932E2B
:0C1ED000B23ED10EF01E00000000000029
:101EDC0001140000090243000201008032090400D1
:101EEC000001020200000524001001042402000578
:101EFC00240600010524010001070583030800FFE7
:101F0C0009040100020A00000007058102400000DC
:101F1C00070502024000000000C20100000008009A
:0C1F2C00690000004100000000000000FF
:0400000300000B816D
:100A7000024B5B785BB2002BFADB7047000C004046
:100A8000024BDB68DA06FBD57047C0460008004021
:100A9000F8B52A4B1E22596891430222114359602E
:100AA000274B28491E1C9982998A0A439A82F36827
:100AB0000227234C3B42FAD0234D0123AB60FFF7C2
:100AC000D7FF224B6B60FFF7D3FF8223DB016B80E4
:100AD000FFF7CEFFA38C80229343A384FFF7D0FFC0
:100AE0001B4BE362FFF7CCFFA38C1A4A1343A3848A
:100AF000FFF7C6FFA38C1F43A784F3681A06FCD533
:100B00000F4BDB685A06F8D50024FFF7B9FFAC603D
:100B1000FFF7AEFF104B6B60FFF7AAFF0F4B104AB9
:100B2000C0215A600F4A0906106A0002000A0143F8
:100B3000116207229C601A60F8BDC0460040004167
:100B4000000800400C060000000C004001050100F8
:100B5000B805FF7D040A00000007030010E000E074
:100B6000E703000000ED00E00EBEFEE70DBEFEE76D
:100B700005BEFEE702BEFEE70E4A0F4838B58242C8
:100B800004D10E4A0E4B93420ED10AE00D4C944212
:100B9000F7D00023D1188842F3D9E55804330D600B
:100BA000F8E700F011F804E09342FAD2002102C302
:100BB000FAE7FEE7000000205C000020AC03002004
:100BC0005C000020D41E000038B5344D2B68013382
:100BD0001AD0334B2A1D1A60EAB2002A14D1314BC5
:100BE000197801231940304B0AD118682F4A9042D6
:100BF00001D1196008E01A602D4A013A002AFCD19F
:100C00001A602C4B01221A70FFF742FF62B6FFF701
:100C100027FD284B284C1B78002B0AD02B6883F328
:100C200008881E4BFF229343A3601D4B1B681B6863
:100C3000184700F09DFD00F04FF8204B8022520332
:100C40009A601F4B1F4A051C5A60216AC022090284
:100C5000090A12060A43226200229A6007221A60D9
:100C6000AB68281C9847184B002801D001221A7045
:100C70001A78002A05D0002000F08CFA00F004FB5E
:100C8000FCE71B78002BEBD100F0E6FD0028E7D055
:100C9000012000F07FFA00F0F7FAFCE700200000E6
:100CA0001C02002038040040FC7F002035817307BF
:100CB00048E801008000002000ED00E00044004111
:100CC00010E000E0E70300008100002008B5FFF716
:100CD00033FB00F0C3FA08BD10B5054B054C23608B
:100CE000FFF764FD201C2168FFF752FD201C10BD9A
:100CF000005000412002002070B5051CC0B0081C47
:100D0000161C0C1C00F067FF40006A4603230230EB
:100D10005370107076080123E218013A11785A00D6
:100D2000002906D1281C69460023FFF7C3FD40B007
:100D300070BDB342F6DA684681520133ECE7000039
:100D4000F7B5BA4A04681378B949271CFF37051C60
:100D5000102038720B705378B648B74E03709378F2
:100D60003380D178338809020B4333801179B34B38
:100D70001980517918880902084318809079B04980
:100D80000880D2790888120202430A8040227A71D0
:100D9000A84F3A78A64F120238780F1C0243A94890
:100DA0008446181C624500D1C2E020DC8021490045
:100DB0008A4200D16EE109DC812A00D192E0822AC8
:100DC00000D195E0802A00D064E18BE081235B00B4
:100DD0009A4200D1CFE000DA58E1C0239B009A424A
:100DE00000D157E1984B9A4200D14FE152E1902354
:100DF0001B019A4269D015DCD023DB009A4222D035
:100E000088231B019A4269D0A023DB009A4200D0BC
:100E100040E1201CFFF7DEFD3188286889B2FFF72A
:100E2000EDFD3BE1894B9A4200D12FE100DC31E13D
:100E3000874B9A4200D11DE1864B9A4200D029E1AE
:100E400033886B7122E133881B0A012B08D10B8890
:100E500012222868934201D80A8892B27E4911E191
:100E600033881B0A022B08D10B884322286893423F
:100E700001D80A8892B2794904E133881B0A032B0E
:100E800000D007E13388DBB2012B17D0002B07D04D
:100E9000022B00D0FEE00A882868D2B2704911E027
:100EA000042201A86F4900F085FE3B8804222868CF
:100EB000934201D83A8892B201A9E3E00A882868EF
:100EC0006949D2B2FFF718FFE8E03388201C2B7184
:100ED000FFF780FD201CFFF797FDDFE0291C01C90B
:100EE0000122CFE0614900230B8028680222CAE07A
:100EF0005E4900220A801888502210405C4A107017
:100F00001E880F20304018801888032800D9C1E0BF
:100F100012781B8808335B01E418A379002A01D0FA
:100F20009B0600E0DB06DB0F0B8028680222A9E0AD
:100F300019887F2291434E4AC9B2117018880F2137
:100F4000014019803188002900D0A3E019880029C8
:100F500000D19FE01988032900D99BE012781B88F3
:100F600008335B01E318002A02D020225A718DE079
:100F7000102159718AE002887F239A433C4BD2B2F8
:100F80001A7001880F220A4002803288002A00D09D
:100F900080E00288002A00D17CE00288032A00D980
:100FA00078E01B78002B1FD0038808335B01E3181F
:100FB0009B799A066AD50388202208335B01E318DF
:100FC0001A71038808335B01E318DB795F065DD58E
:100FD0000388402208335B01E318DA710388022298
:100FE00008335B01E3181EE0038808335B01E31854
:100FF0009B79D9064AD50388102208335B01E31890
:101000001A71038808335B01E318DB799A063DD532
:101010000388202208335B01E318DA710388012278
:1010200008335B01E3181A7130E0C0469C000020D1
:1010300083000020880000208A0000208C0000200F
:1010400086000020020300000103000021200000B0
:10105000A121000021220000241C00000400002027
:101060000C1C0000FC1B0000001C00008400002081
:10107000820000200B8808222868934201D80A8841
:1010800092B207490023FFF715FC07E0201CFFF789
:10109000A1FC03E0201C0121FFF792FCF7BDC04634
:1010A0004800002007B5054B0122019001A91868EE
:1010B000131CFFF7FFFB01200EBDC04620020020DD
:1010C00013B5054B6C4607341868211C0122FFF745
:1010D00039FC207816BDC0462002002010B5074C10
:1010E000201CFFF713FB031C0020834205D022685D
:1010F0004823FF33D05C0123184010BD200200209C
:1011000010B5054A0C1C031C191C10680123221C75
:10111000FFF7D0FB201C10BD2002002070B5084C4A
:10112000061C201C0D1CFFF7F1FA0023984205D085
:101130002068311C2A1CFFF705FC031C181C70BD1D
:1011400020020020F8B50C4C051C201C0E1CFFF7DB
:10115000DDFA0023271C341C98420AD0002C07D04B
:10116000291C221C3868FFF7EDFB241A2D18F5E71F
:10117000331C181CF8BDC0462002002008B5031C13
:10118000081C111C9847024B64221A8008BDC046F7
:1011900092000020012805D1054B064A1A60064B33
:1011A000187004E0002802D1044A014B1A6070470D
:1011B00090020020581C000098000020A41C000091
:1011C00030B50A1C1C4985B00978031C00292AD0B7
:1011D000042A01D1006804E0022A01D1008800E05D
:1011E0000078520004A98B180B3B9C1AA3420BD029
:1011F0000F210140092902D83025294300E0373169
:1012000019700009013BF1E701A930230B70782325
:101210004B700A208B1898700D20D870074B043241
:101220001B68D86803E005490968C868191CFFF7FE
:10123000A5FF05B030BDC0468E0000209002002002
:1012400072B6EFF30883044A1360036883F30888D7
:10125000436818477047C04694020020084B1A881C
:10126000002A03D01A88013A92B21A80054B1A88D4
:10127000002A03D01A88013A92B21A807047C046F9
:101280009200002090000020F0B591B008A9CC4A4F
:101290000B1C31CA31C351CA51C360CA60C3C94BA8
:1012A000C9489A687A255203520F92005258C7498A
:1012B00002609C68A4B262430C60C54900240A60C5
:1012C000C44A1460C44C2570C44CC54D2368281C06
:1012D0001B6940219847002802D0C24B64221A8023
:1012E000C14B00221860C14B1D60C14BC04DBE4FA9
:1012F0001A602A683B689A42E6D2BC4B1B681A788F
:10130000FF2A00D114E2232A00D0EBE1B94E337852
:10131000002B06D0B14BB8491B680222D868FFF7F2
:101320002DFFAD4B1B78532B3CD13B682A68934271
:101330001ED9AE4801322A609A1AB04B01681B6868
:1013400001310160AE4E9A4201D2326000E033605A
:10135000A04832680068049000F02CFC33682968CB
:101360005A182A60A14A1668F1181160A54A13702C
:101370002B68013B2B609D4B1A68013A1A60A14B08
:101380009E4A1B7811688B420AD222689148C91A7A
:10139000006892699047002802D0924B64221A801C
:1013A000C0468DE1522B0AD18A48944A23680068CE
:1013B00011685B69039098476422934B0DE04F2BB3
:1013C00005D1844B8D4A1B6812681A7078E1482B4E
:1013D00005D1804B894A1B6812681A8070E1572B2F
:1013E00005D17C4B854A1B6812681A6068E16F2B37
:1013F00003D1784B0121186807E0682B08D1754BA1
:101400007E481B6802211B880360FFF7D9FE57E165
:10141000772B06D16F4B79481B6804211B6803604A
:10142000F3E7472B13D1754B1868FFF709FF774B8C
:101430001B6883F3088862B6754B1B78002B00D1BC
:101440003EE1664B06201B681B68984738E1542B29
:1014500004D101233370614B1B6864E04E2B0CD127
:101460003378002B06D15D4B63491B680222D86894
:10147000FFF784FE0023337022E1562B57D12368F7
:101480006449D8680122FFF779FE23686249D86869
:101490000322FFF773FE614D2368291CD8680122DF
:1014A000FFF76CFE23685E49D8680D22FFF766FEE1
:1014B0002368291CD8680122FFF760FE4B4F4C4D72
:1014C0005849002339602B603A1C281C13685E1CA5
:1014D00016601B780593002B03D00368013303606B
:1014E000F4E73E4E2A683368D868FFF747FE336852
:1014F0004A49D8680122FFF741FE059929604A4907
:1015000039603A4A1368581C10601B78002B04D0CD
:10151000374B1A6801321A60F3E733682A68D868D3
:10152000FFF72CFE3368D86833490222C6E0334AFD
:10153000582B17D1244E264D366813682A68B100FF
:1015400093420AD21F4D5808E861384828801D4D43
:10155000287DC607FBD55B18F2E7204B34491B6892
:10156000D868AAE0592B79D112681A4B3149002A60
:1015700002D11B680B606CE0124D086819686B683B
:10158000104E8025AB4392087360002A61D02A4B2D
:101590000C4D2B800B4E337DDD07FBD500230A4D10
:1015A0002D680195AD08AB4203D3244D054E35801F
:1015B00046E09342F9D09D00465901334E51EEE783
:1015C000381C00000040004148020020400200207A
:1015D0003C0200208C0200203802002090020020F3
:1015E0004C02002090000020300200203402002035
:1015F000440200208E000020981C00009802002069
:101600009C0200202C020020920000209402002066
:1016100098000020741C00009D1C0000761C000037
:10162000C01C0000781C0000841C000002A5FFFF05
:101630008D1C00009400002044A5FFFF04A5FFFFBF
:101640003F4E357DEE07FBD59D0049194019D21A52
:101650009BE73C4B3C491B68D8682EE05A2B2FD1A6
:101660003A4B17681D680026EF19BD4206D028784E
:10167000311C00F013F90135061CF6E7314B3449F3
:101680001B680122D868FFF779FD07230F2232403B
:10169000111C36093031092A00DD07311820C01825
:1016A0006A468154013BF1D2236806A9D868082212
:1016B000FFF764FD23682749D8680322FFF75EFD22
:1016C000254B7A221A70254B00221A60244B1B7876
:1016D00093422DD01B4B23491B680122D868FFF78A
:1016E0004DFD25E0111C3039C8B21C4B092804D827
:1016F0001D682A01114319601AE0111C413905299E
:1017000003D81E68373A310106E0111C61390529FA
:1017100004D81868573A01010A4308E02C2A03D17B
:101720000A4A1968116001E00B490A7000221A6028
:101730000D4B1A6801321A600C4B1A680132D5E55C
:101740000040004190020020911C00008C0200200B
:10175000951C0000971C0000380200209802002011
:101760008E0000209B1C0000440200203402002058
:1017700010B51C4B01201A78032402431A701A4B2F
:101780000F2219789143197019782143197017495C
:101790000C782043087019780A401A701A783021A2
:1017A0000A431A70124B80211A6A0A431A62114BBB
:1017B000114A5A805A7852B2002AFBDBC4220F48E1
:1017C0000F499203FEF756FF0E4A002313700E4A8C
:1017D00013700E4A13700E4A13700E4A13700E4A9D
:1017E000137010BDD6440041BB440041D7440041B2
:1017F00000040040000C004019400000001C0042A2
:101800002AF60000A002002027030020A1020020E9
:10181000A4020020280300202503002008B5C1B23F
:101820000248FEF755FF012008BDC046001C0042DB
:10183000024B187E4007C00F7047C046001C004294
:1018400008B5FFF7F5FF0028FBD00248FEF746FF7A
:1018500008BDC046001C004208B5FFF7E9FF0023A1
:10186000984205D0FFF7ECFF031C233B5A4253413B
:10187000181C08BD70B5041C0D1C4618B44204D0D9
:101880002078FFF7CBFF0134F8E7281C70BD10B5B6
:10189000041CFFF7D5FF2070012010BD0B0A584033
:1018A000034B4000C05A0902484080B27047C0460E
:1018B000CE1C0000F7B50024051C0F1C261CBC42E2
:1018C00020D0FFF7BDFF114BC0B21B780190002B59
:1018D0001AD1311CFFF7E2FF0D4B061C1A88002AB3
:1018E00004D10C4A11782A1C002907D001996A1CDE
:1018F0002970802F02D11988013919800134A4B2CE
:10190000151CDCE7301C00E00120FEBD2503002093
:10191000A202002026030020F0B53E4E85B0002232
:1019200003900C1C32703C4B914201D1012201E02A
:101930003A490C801A707F231C4201D080349C43AA
:10194000FFF77EFF3378C0B2002B07D0002535703B
:10195000FFF776FF3378C0B2AB4236D1432803D0CD
:10196000712853D01528EBD1012300930120FFF7F4
:1019700055FF0098FFF752FF00998025C843C0B279
:10198000FFF74CFF039B00270293244A1388002B88
:101990001DD1214901930978002918D10198FFF739
:1019A0003DFF391C0198FFF779FF013D071C002D11
:1019B000EBD1000AC0B2FFF731FFF8B2FFF72EFFFC
:1019C000FFF73EFF3378002B0AD035701FE00299F5
:1019D000013B09781380029B019101330293DDE7FB
:1019E000C0B2062807D1009B03990133DBB28031D6
:1019F0000093803C0391002CB8D10420FFF70EFF28
:101A0000FFF71EFF044B01251C7000E00025281C79
:101A100005B0F0BD2503002026030020A20200200F
:101A2000F0B5384C87B0002301902370994201D162
:101A3000012301E0344A1180344A642613704320A4
:101A4000FFF7ECFE324FFFF7F3FE002803D1002F23
:101A500003D0013FF7E7002F03D1013E002EEED166
:101A60004DE00125FFF7ECFE2378002B38D1C0B202
:101A70000290012805D004283DD10620FFF7CEFEB4
:101A800039E005AE0221301CFFF714FF01988021D8
:101A9000FFF710FF23780390002B18D1FFF7D0FE3B
:101AA0000702FFF7CDFEBFB223783F18BFB2012B6C
:101AB0000DD0039B9F4207D13378AB4204D1EB4357
:101AC0007278DBB29A4204D01820FFF7A7FE0023F9
:101AD00003E00620FFF7A2FE029B2278002A02D034
:101AE000002626700BE0012B05D1019A6B1C803279
:101AF000DDB20192B6E7054A002313700126301CBF
:101B000007B0F0BD25030020A2020020260300201C
:101B100000350C00002934D00123002210B4884283
:101B20002CD301242407A14204D2814202D209010C
:101B30001B01F8E7E400A14204D2814202D249002D
:101B40005B00F8E7884201D3401A1A434C08A042D0
:101B500002D3001B5C0822438C08A04202D3001B66
:101B60009C082243CC08A04202D3001BDC0822437D
:101B7000002803D01B0901D00909E3E7101C10BCA1
:101B80007047002801D00020C04307B4024802A1DA
:101B90004018029003BDC046190000000029F0D093
:101BA00003B5FFF7B9FF0EBC4243891A1847C04678
:101BB0007047C04610B50023934203D0CC5CC45498
:101BC0000133F9E710BD031C8218934202D019704B
:101BD0000133FAE770470023C25C0133002AFBD1CE
:101BE000581E7047F8B5C046F8BC08BC9E46704702
:101BF000F8B5C046F8BC08BC9E467047040309040B
:101C000041726475696E6F204C4C4300417264757B
:101C1000696E6F204D4B522047534D203134303088
:101C200000000000120100020200004041235200A7
:101C30000002010200010000080000001000000086
:101C400020000000400000008000000000010000B3
:101C500000020000000400001D18000041180000F0
:101C600031180000751800008F18000019190000C5
:101C7000211A00007600200041707220313120329C
:101C80003031390031333A30393A353400580A0DA1
:101C900000590A0D005A00230A0D003E00322E3072
:101CA00000000000A5100000C1100000DD100000C1
:101CB000011100001D11000001110000451100007C
:101CC0005B41726475696E6F3A58595A5D00000045
:101CD0002110422063308440A550C660E77008811F
:101CE00029914AA16BB18CC1ADD1CEE1EFF1311296
:101CF000100273325222B5529442F772D66239936F
:101D000018837BB35AA3BDD39CC3FFF3DEE36224E5
:101D1000433420040114E664C774A44485546AA5BE
:101D20004BB528850995EEE5CFF5ACC58DD5533675
:101D3000722611163006D776F6669556B4465BB70E
:101D40007AA719973887DFF7FEE79DD7BCC7C44845
:101D5000E5588668A7784008611802282338CCC95E
:101D6000EDD98EE9AFF9488969990AA92BB9F55AD5
:101D7000D44AB77A966A711A500A333A122AFDDBAE
:101D8000DCCBBFFB9EEB799B588B3BBB1AABA66CA5
:101D9000877CE44CC55C222C033C600C411CAEEDFE
:101DA0008FFDECCDCDDD2AAD0BBD688D499D977EB5
:101DB000B66ED55EF44E133E322E511E700E9FFF4E
:101DC000BEEFDDDFFCCF1BBF3AAF599F788F889104
:101DD000A981CAB1EBA10CD12DC14EF16FE18010E8
:101DE000A100C230E3200450254046706760B983EB
:101DF0009893FBA3DAB33DC31CD37FE35EF3B10238
:101E00009012F322D2323542145277625672EAB5FA
:101E1000CBA5A89589856EF54FE52CD50DC5E23487
:101E2000C324A01481046674476424540544DBA7CA
:101E3000FAB79987B8975FE77EF71DC73CD7D326D7
:101E4000F2369106B01657667676154634564CD95A
:101E50006DC90EF92FE9C899E9898AB9ABA9445827
:101E6000654806782768C018E1088238A3287DCB2A
:101E70005CDB3FEB1EFBF98BD89BBBAB9ABB754A77
:101E8000545A376A167AF10AD01AB32A923A2EFDBA
:101E90000FED6CDD4DCDAABD8BADE89DC98D267CC7
:101EA000076C645C454CA23C832CE01CC10C1FEF0A
:101EB0003EFF5DCF7CDF9BAFBABFD98FF89F176E17
:101EC000367E554E745E932EB23ED10EF01E00004B
:041ED000000000000E
:101ED40001140000090243000201008032090400D9
:101EE4000001020200000524001001042402000580
:101EF400240600010524010001070583030800FFEF
:101F040009040100020A00000007058102400000E4
:101F1400070502024000000000C2010000000800A2
:0C1F240069000000410000000000000007
:0400000300000B7975
:00000001FF

View file

@ -1,20 +1,20 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:10000000FC7F0020790B0000690B00006D0B0000E5
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:10002000000000000000000000000000710B000054
:100030000000000000000000750B0000CD0C000067
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D41E000008B5084B002B03D090
:1000600000000000CC1E000008B5084B002B03D098
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D41E000060000020580000200000000076
:10009000CC1E00006000002058000020000000007E
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:1001000001F008FD421EE068FF231A4098431043A7
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
@ -117,7 +117,7 @@
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:1007700002D5201C00F0E4FA207970BD9C01002015
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
@ -134,14 +134,14 @@
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:10088000802201F0A0F938BD000400405844004126
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:1008F000221C01F05FF901990F4808354218176171
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
@ -151,7 +151,7 @@
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:100990005C6CA404A40C081C221C074901F00AF991
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
@ -165,338 +165,337 @@
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020D81E000068
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:10106000281C000004000020141C0000041C0000C8
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A607047900200205C1C00003A
:1011C00098000020A81C000030B50A1C1C4985B0FE
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE73C1C000000400041FB
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:101600009C1C0000980200209C0200202C0200205C
:10161000920000209402002098000020781C000016
:10162000A11C00007A1C0000C41C00007C1C0000EF
:10163000881C000002A5FFFF911C00009400002000
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000951C00008C020020991C00009B1C0000BE
:1017600038020020980200208E0000209F1C0000FC
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D21C0000F7B50024F3
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C20004E422031353030001201000202000040E7
:101C300041235500000201020001000008000000DD
:101C400010000000200000004000000080000000A4
:101C50000001000000020000000400002518000040
:101C600049180000391800007D180000971800007E
:101C700021190000291A0000760020004E6F7620FE
:101C8000323620323031380031343A32383A333754
:101C900000580A0D00590A0D005A00230A0D003E93
:101CA00000322E3000000000AD100000C91000000E
:101CB000E5100000091100002511000009110000C5
:101CC0004D1100005B41726475696E6F3A58595A44
:101CD0005D0000002110422063308440A550C660A2
:101CE000E770088129914AA16BB18CC1ADD1CEE1D9
:101CF000EFF13112100273325222B5529442F77250
:101D0000D662399318837BB35AA3BDD39CC3FFF328
:101D1000DEE36224433420040114E664C774A4445F
:101D200085546AA54BB528850995EEE5CFF5ACC578
:101D30008DD55336722611163006D776F66695562F
:101D4000B4465BB77AA719973887DFF7FEE79DD7C8
:101D5000BCC7C448E5588668A778400861180228BF
:101D60002338CCC9EDD98EE9AFF9488969990AA918
:101D70002BB9F55AD44AB77A966A711A500A333A8F
:101D8000122AFDDBDCCBBFFB9EEB799B588B3BBB68
:101D90001AABA66C877CE44CC55C222C033C600C1F
:101DA000411CAEED8FFDECCDCDDD2AAD0BBD688DB8
:101DB000499D977EB66ED55EF44E133E322E511E6F
:101DC000700E9FFFBEEFDDDFFCCF1BBF3AAF599F08
:101DD000788F8891A981CAB1EBA10CD12DC14EF1A8
:101DE0006FE18010A100C230E3200450254046700E
:101DF0006760B9839893FBA3DAB33DC31CD37FE339
:101E00005EF3B1029012F322D2323542145277625D
:101E10005672EAB5CBA5A89589856EF54FE52CD508
:101E20000DC5E234C324A0148104667447642454AD
:101E30000544DBA7FAB79987B8975FE77EF71DC718
:101E40003CD7D326F2369106B016576676761546FD
:101E500034564CD96DC90EF92FE9C899E9898AB968
:101E6000ABA94458654806782768C018E10882384D
:101E7000A3287DCB5CDB3FEB1EFBF98BD89BBBAB78
:101E80009ABB754A545A376A167AF10AD01AB32A9D
:101E9000923A2EFD0FED6CDD4DCDAABD8BADE89DC8
:101EA000C98D267C076C645C454CA23C832CE01CED
:101EB000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F58
:101EC000F89F176E367E554E745E932EB23ED10E3D
:081ED000F01E000000000000FC
:101ED80001140000090243000201008032090400D5
:101EE800000102020000052400100104240200057C
:101EF800240600010524010001070583030800FFEB
:101F080009040100020A00000007058102400000E0
:101F1800070502024000000000C20100000008009E
:0C1F280069000000410000000000000003
:0400000300000B816D
:100A7000024B5B785BB2002BFADB7047000C004046
:100A8000024BDB68DA06FBD57047C0460008004021
:100A9000F8B52A4B1E22596891430222114359602E
:100AA000274B28491E1C9982998A0A439A82F36827
:100AB0000227234C3B42FAD0234D0123AB60FFF7C2
:100AC000D7FF224B6B60FFF7D3FF8223DB016B80E4
:100AD000FFF7CEFFA38C80229343A384FFF7D0FFC0
:100AE0001B4BE362FFF7CCFFA38C1A4A1343A3848A
:100AF000FFF7C6FFA38C1F43A784F3681A06FCD533
:100B00000F4BDB685A06F8D50024FFF7B9FFAC603D
:100B1000FFF7AEFF104B6B60FFF7AAFF0F4B104AB9
:100B2000C0215A600F4A0906106A0002000A0143F8
:100B3000116207229C601A60F8BDC0460040004167
:100B4000000800400C060000000C004001050100F8
:100B5000B805FF7D040A00000007030010E000E074
:100B6000E703000000ED00E00EBEFEE70DBEFEE76D
:100B700005BEFEE702BEFEE70E4A0F4838B58242C8
:100B800004D10E4A0E4B93420ED10AE00D4C944212
:100B9000F7D00023D1188842F3D9E55804330D600B
:100BA000F8E700F011F804E09342FAD2002102C302
:100BB000FAE7FEE7000000205C000020AC03002004
:100BC0005C000020D01E000038B5344D2B68013386
:100BD0001AD0334B2A1D1A60EAB2002A14D1314BC5
:100BE000197801231940304B0AD118682F4A9042D6
:100BF00001D1196008E01A602D4A013A002AFCD19F
:100C00001A602C4B01221A70FFF742FF62B6FFF701
:100C100027FD284B284C1B78002B0AD02B6883F328
:100C200008881E4BFF229343A3601D4B1B681B6863
:100C3000184700F09DFD00F04FF8204B8022520332
:100C40009A601F4B1F4A051C5A60216AC022090284
:100C5000090A12060A43226200229A6007221A60D9
:100C6000AB68281C9847184B002801D001221A7045
:100C70001A78002A05D0002000F08CFA00F004FB5E
:100C8000FCE71B78002BEBD100F0E6FD0028E7D055
:100C9000012000F07FFA00F0F7FAFCE700200000E6
:100CA0001C02002038040040FC7F002035817307BF
:100CB00048E801008000002000ED00E00044004111
:100CC00010E000E0E70300008100002008B5FFF716
:100CD00033FB00F0C3FA08BD10B5054B054C23608B
:100CE000FFF764FD201C2168FFF752FD201C10BD9A
:100CF000005000412002002070B5051CC0B0081C47
:100D0000161C0C1C00F067FF40006A4603230230EB
:100D10005370107076080123E218013A11785A00D6
:100D2000002906D1281C69460023FFF7C3FD40B007
:100D300070BDB342F6DA684681520133ECE7000039
:100D4000F7B5BA4A04681378B949271CFF37051C60
:100D5000102038720B705378B648B74E03709378F2
:100D60003380D178338809020B4333801179B34B38
:100D70001980517918880902084318809079B04980
:100D80000880D2790888120202430A8040227A71D0
:100D9000A84F3A78A64F120238780F1C0243A94890
:100DA0008446181C624500D1C2E020DC8021490045
:100DB0008A4200D16EE109DC812A00D192E0822AC8
:100DC00000D195E0802A00D064E18BE081235B00B4
:100DD0009A4200D1CFE000DA58E1C0239B009A424A
:100DE00000D157E1984B9A4200D14FE152E1902354
:100DF0001B019A4269D015DCD023DB009A4222D035
:100E000088231B019A4269D0A023DB009A4200D0BC
:100E100040E1201CFFF7DEFD3188286889B2FFF72A
:100E2000EDFD3BE1894B9A4200D12FE100DC31E13D
:100E3000874B9A4200D11DE1864B9A4200D029E1AE
:100E400033886B7122E133881B0A012B08D10B8890
:100E500012222868934201D80A8892B27E4911E191
:100E600033881B0A022B08D10B884322286893423F
:100E700001D80A8892B2794904E133881B0A032B0E
:100E800000D007E13388DBB2012B17D0002B07D04D
:100E9000022B00D0FEE00A882868D2B2704911E027
:100EA000042201A86F4900F085FE3B8804222868CF
:100EB000934201D83A8892B201A9E3E00A882868EF
:100EC0006949D2B2FFF718FFE8E03388201C2B7184
:100ED000FFF780FD201CFFF797FDDFE0291C01C90B
:100EE0000122CFE0614900230B8028680222CAE07A
:100EF0005E4900220A801888502210405C4A107017
:100F00001E880F20304018801888032800D9C1E0BF
:100F100012781B8808335B01E418A379002A01D0FA
:100F20009B0600E0DB06DB0F0B8028680222A9E0AD
:100F300019887F2291434E4AC9B2117018880F2137
:100F4000014019803188002900D0A3E019880029C8
:100F500000D19FE01988032900D99BE012781B88F3
:100F600008335B01E318002A02D020225A718DE079
:100F7000102159718AE002887F239A433C4BD2B2F8
:100F80001A7001880F220A4002803288002A00D09D
:100F900080E00288002A00D17CE00288032A00D980
:100FA00078E01B78002B1FD0038808335B01E3181F
:100FB0009B799A066AD50388202208335B01E318DF
:100FC0001A71038808335B01E318DB795F065DD58E
:100FD0000388402208335B01E318DA710388022298
:100FE00008335B01E3181EE0038808335B01E31854
:100FF0009B79D9064AD50388102208335B01E31890
:101000001A71038808335B01E318DB799A063DD532
:101010000388202208335B01E318DA710388012278
:1010200008335B01E3181A7130E0C0469C000020D1
:1010300083000020880000208A0000208C0000200F
:1010400086000020020300000103000021200000B0
:10105000A121000021220000201C0000040000202B
:101060000C1C0000FC1B0000001C00008400002081
:10107000820000200B8808222868934201D80A8841
:1010800092B207490023FFF715FC07E0201CFFF789
:10109000A1FC03E0201C0121FFF792FCF7BDC04634
:1010A0004800002007B5054B0122019001A91868EE
:1010B000131CFFF7FFFB01200EBDC04620020020DD
:1010C00013B5054B6C4607341868211C0122FFF745
:1010D00039FC207816BDC0462002002010B5074C10
:1010E000201CFFF713FB031C0020834205D022685D
:1010F0004823FF33D05C0123184010BD200200209C
:1011000010B5054A0C1C031C191C10680123221C75
:10111000FFF7D0FB201C10BD2002002070B5084C4A
:10112000061C201C0D1CFFF7F1FA0023984205D085
:101130002068311C2A1CFFF705FC031C181C70BD1D
:1011400020020020F8B50C4C051C201C0E1CFFF7DB
:10115000DDFA0023271C341C98420AD0002C07D04B
:10116000291C221C3868FFF7EDFB241A2D18F5E71F
:10117000331C181CF8BDC0462002002008B5031C13
:10118000081C111C9847024B64221A8008BDC046F7
:1011900092000020012805D1054B064A1A60064B33
:1011A000187004E0002802D1044A014B1A6070470D
:1011B00090020020541C000098000020A01C000099
:1011C00030B50A1C1C4985B00978031C00292AD0B7
:1011D000042A01D1006804E0022A01D1008800E05D
:1011E0000078520004A98B180B3B9C1AA3420BD029
:1011F0000F210140092902D83025294300E0373169
:1012000019700009013BF1E701A930230B70782325
:101210004B700A208B1898700D20D870074B043241
:101220001B68D86803E005490968C868191CFFF7FE
:10123000A5FF05B030BDC0468E0000209002002002
:1012400072B6EFF30883044A1360036883F30888D7
:10125000436818477047C04694020020084B1A881C
:10126000002A03D01A88013A92B21A80054B1A88D4
:10127000002A03D01A88013A92B21A807047C046F9
:101280009200002090000020F0B591B008A9CC4A4F
:101290000B1C31CA31C351CA51C360CA60C3C94BA8
:1012A000C9489A687A255203520F92005258C7498A
:1012B00002609C68A4B262430C60C54900240A60C5
:1012C000C44A1460C44C2570C44CC54D2368281C06
:1012D0001B6940219847002802D0C24B64221A8023
:1012E000C14B00221860C14B1D60C14BC04DBE4FA9
:1012F0001A602A683B689A42E6D2BC4B1B681A788F
:10130000FF2A00D114E2232A00D0EBE1B94E337852
:10131000002B06D0B14BB8491B680222D868FFF7F2
:101320002DFFAD4B1B78532B3CD13B682A68934271
:101330001ED9AE4801322A609A1AB04B01681B6868
:1013400001310160AE4E9A4201D2326000E033605A
:10135000A04832680068049000F02CFC33682968CB
:101360005A182A60A14A1668F1181160A54A13702C
:101370002B68013B2B609D4B1A68013A1A60A14B08
:101380009E4A1B7811688B420AD222689148C91A7A
:10139000006892699047002802D0924B64221A801C
:1013A000C0468DE1522B0AD18A48944A23680068CE
:1013B00011685B69039098476422934B0DE04F2BB3
:1013C00005D1844B8D4A1B6812681A7078E1482B4E
:1013D00005D1804B894A1B6812681A8070E1572B2F
:1013E00005D17C4B854A1B6812681A6068E16F2B37
:1013F00003D1784B0121186807E0682B08D1754BA1
:101400007E481B6802211B880360FFF7D9FE57E165
:10141000772B06D16F4B79481B6804211B6803604A
:10142000F3E7472B13D1754B1868FFF709FF774B8C
:101430001B6883F3088862B6754B1B78002B00D1BC
:101440003EE1664B06201B681B68984738E1542B29
:1014500004D101233370614B1B6864E04E2B0CD127
:101460003378002B06D15D4B63491B680222D86894
:10147000FFF784FE0023337022E1562B57D12368F7
:101480006449D8680122FFF779FE23686249D86869
:101490000322FFF773FE614D2368291CD8680122DF
:1014A000FFF76CFE23685E49D8680D22FFF766FEE1
:1014B0002368291CD8680122FFF760FE4B4F4C4D72
:1014C0005849002339602B603A1C281C13685E1CA5
:1014D00016601B780593002B03D00368013303606B
:1014E000F4E73E4E2A683368D868FFF747FE336852
:1014F0004A49D8680122FFF741FE059929604A4907
:1015000039603A4A1368581C10601B78002B04D0CD
:10151000374B1A6801321A60F3E733682A68D868D3
:10152000FFF72CFE3368D86833490222C6E0334AFD
:10153000582B17D1244E264D366813682A68B100FF
:1015400093420AD21F4D5808E861384828801D4D43
:10155000287DC607FBD55B18F2E7204B34491B6892
:10156000D868AAE0592B79D112681A4B3149002A60
:1015700002D11B680B606CE0124D086819686B683B
:10158000104E8025AB4392087360002A61D02A4B2D
:101590000C4D2B800B4E337DDD07FBD500230A4D10
:1015A0002D680195AD08AB4203D3244D054E35801F
:1015B00046E09342F9D09D00465901334E51EEE783
:1015C000341C00000040004148020020400200207E
:1015D0003C0200208C0200203802002090020020F3
:1015E0004C02002090000020300200203402002035
:1015F000440200208E000020941C0000980200206D
:101600009C0200202C020020920000209402002066
:1016100098000020701C0000991C0000721C000043
:10162000BC1C0000741C0000801C000002A5FFFF11
:10163000891C00009400002044A5FFFF04A5FFFFC3
:101640003F4E357DEE07FBD59D0049194019D21A52
:101650009BE73C4B3C491B68D8682EE05A2B2FD1A6
:101660003A4B17681D680026EF19BD4206D028784E
:10167000311C00F013F90135061CF6E7314B3449F3
:101680001B680122D868FFF779FD07230F2232403B
:10169000111C36093031092A00DD07311820C01825
:1016A0006A468154013BF1D2236806A9D868082212
:1016B000FFF764FD23682749D8680322FFF75EFD22
:1016C000254B7A221A70254B00221A60244B1B7876
:1016D00093422DD01B4B23491B680122D868FFF78A
:1016E0004DFD25E0111C3039C8B21C4B092804D827
:1016F0001D682A01114319601AE0111C413905299E
:1017000003D81E68373A310106E0111C61390529FA
:1017100004D81868573A01010A4308E02C2A03D17B
:101720000A4A1968116001E00B490A7000221A6028
:101730000D4B1A6801321A600C4B1A680132D5E55C
:1017400000400041900200208D1C00008C0200200F
:10175000911C0000931C0000380200209802002019
:101760008E000020971C000044020020340200205C
:1017700010B51C4B01201A78032402431A701A4B2F
:101780000F2219789143197019782143197017495C
:101790000C782043087019780A401A701A783021A2
:1017A0000A431A70124B80211A6A0A431A62114BBB
:1017B000114A5A805A7852B2002AFBDBC4220F48E1
:1017C0000F499203FEF756FF0E4A002313700E4A8C
:1017D00013700E4A13700E4A13700E4A13700E4A9D
:1017E000137010BDD6440041BB440041D7440041B2
:1017F00000040040000C004019400000001C0042A2
:101800002AF60000A002002027030020A1020020E9
:10181000A4020020280300202503002008B5C1B23F
:101820000248FEF755FF012008BDC046001C0042DB
:10183000024B187E4007C00F7047C046001C004294
:1018400008B5FFF7F5FF0028FBD00248FEF746FF7A
:1018500008BDC046001C004208B5FFF7E9FF0023A1
:10186000984205D0FFF7ECFF031C233B5A4253413B
:10187000181C08BD70B5041C0D1C4618B44204D0D9
:101880002078FFF7CBFF0134F8E7281C70BD10B5B6
:10189000041CFFF7D5FF2070012010BD0B0A584033
:1018A000034B4000C05A0902484080B27047C0460E
:1018B000CA1C0000F7B50024051C0F1C261CBC42E6
:1018C00020D0FFF7BDFF114BC0B21B780190002B59
:1018D0001AD1311CFFF7E2FF0D4B061C1A88002AB3
:1018E00004D10C4A11782A1C002907D001996A1CDE
:1018F0002970802F02D11988013919800134A4B2CE
:10190000151CDCE7301C00E00120FEBD2503002093
:10191000A202002026030020F0B53E4E85B0002232
:1019200003900C1C32703C4B914201D1012201E02A
:101930003A490C801A707F231C4201D080349C43AA
:10194000FFF77EFF3378C0B2002B07D0002535703B
:10195000FFF776FF3378C0B2AB4236D1432803D0CD
:10196000712853D01528EBD1012300930120FFF7F4
:1019700055FF0098FFF752FF00998025C843C0B279
:10198000FFF74CFF039B00270293244A1388002B88
:101990001DD1214901930978002918D10198FFF739
:1019A0003DFF391C0198FFF779FF013D071C002D11
:1019B000EBD1000AC0B2FFF731FFF8B2FFF72EFFFC
:1019C000FFF73EFF3378002B0AD035701FE00299F5
:1019D000013B09781380029B019101330293DDE7FB
:1019E000C0B2062807D1009B03990133DBB28031D6
:1019F0000093803C0391002CB8D10420FFF70EFF28
:101A0000FFF71EFF044B01251C7000E00025281C79
:101A100005B0F0BD2503002026030020A20200200F
:101A2000F0B5384C87B0002301902370994201D162
:101A3000012301E0344A1180344A642613704320A4
:101A4000FFF7ECFE324FFFF7F3FE002803D1002F23
:101A500003D0013FF7E7002F03D1013E002EEED166
:101A60004DE00125FFF7ECFE2378002B38D1C0B202
:101A70000290012805D004283DD10620FFF7CEFEB4
:101A800039E005AE0221301CFFF714FF01988021D8
:101A9000FFF710FF23780390002B18D1FFF7D0FE3B
:101AA0000702FFF7CDFEBFB223783F18BFB2012B6C
:101AB0000DD0039B9F4207D13378AB4204D1EB4357
:101AC0007278DBB29A4204D01820FFF7A7FE0023F9
:101AD00003E00620FFF7A2FE029B2278002A02D034
:101AE000002626700BE0012B05D1019A6B1C803279
:101AF000DDB20192B6E7054A002313700126301CBF
:101B000007B0F0BD25030020A2020020260300201C
:101B100000350C00002934D00123002210B4884283
:101B20002CD301242407A14204D2814202D209010C
:101B30001B01F8E7E400A14204D2814202D249002D
:101B40005B00F8E7884201D3401A1A434C08A042D0
:101B500002D3001B5C0822438C08A04202D3001B66
:101B60009C082243CC08A04202D3001BDC0822437D
:101B7000002803D01B0901D00909E3E7101C10BCA1
:101B80007047002801D00020C04307B4024802A1DA
:101B90004018029003BDC046190000000029F0D093
:101BA00003B5FFF7B9FF0EBC4243891A1847C04678
:101BB0007047C04610B50023934203D0CC5CC45498
:101BC0000133F9E710BD031C8218934202D019704B
:101BD0000133FAE770470023C25C0133002AFBD1CE
:101BE000581E7047F8B5C046F8BC08BC9E46704702
:101BF000F8B5C046F8BC08BC9E467047040309040B
:101C000041726475696E6F204C4C4300417264757B
:101C1000696E6F204D4B52204E42203135303000DE
:101C2000120100020200004041235500000201029F
:101C3000000100000800000010000000200000006B
:101C400040000000800000000001000000020000D1
:101C5000000400001D1800004118000031180000A9
:101C6000751800008F18000019190000211A0000D3
:101C7000760020004170722031312032303139003D
:101C800031333A30393A353700580A0D00590A0DC8
:101C9000005A00230A0D003E00322E3000000000E2
:101CA000A5100000C1100000DD10000001110000AF
:101CB0001D11000001110000451100005B4172641C
:101CC00075696E6F3A58595A5D0000002110422024
:101CD00063308440A550C660E770088129914AA10D
:101CE0006BB18CC1ADD1CEE1EFF131121002733284
:101CF0005222B5529442F772D662399318837BB35D
:101D00005AA3BDD39CC3FFF3DEE362244334200413
:101D10000114E664C774A44485546AA54BB52885AC
:101D20000995EEE5CFF5ACC58DD553367226111663
:101D30003006D776F6669556B4465BB77AA71997FC
:101D40003887DFF7FEE79DD7BCC7C448E5588668EB
:101D5000A7784008611802282338CCC9EDD98EE94C
:101D6000AFF9488969990AA92BB9F55AD44AB77AC3
:101D7000966A711A500A333A122AFDDBDCCBBFFB9C
:101D80009EEB799B588B3BBB1AABA66C877CE44CD3
:101D9000C55C222C033C600C411CAEED8FFDECCDEC
:101DA000CDDD2AAD0BBD688D499D977EB66ED55EA3
:101DB000F44E133E322E511E700E9FFFBEEFDDDF3C
:101DC000FCCF1BBF3AAF599F788F8891A981CAB1C8
:101DD000EBA10CD12DC14EF16FE18010A100C230FA
:101DE000E3200450254046706760B9839893FBA3B5
:101DF000DAB33DC31CD37FE35EF3B1029012F3224A
:101E0000D2323542145277625672EAB5CBA5A89504
:101E100089856EF54FE52CD50DC5E234C324A01499
:101E200081046674476424540544DBA7FAB7998794
:101E3000B8975FE77EF71DC73CD7D326F2369106E9
:101E4000B01657667676154634564CD96DC90EF9DC
:101E50002FE9C899E9898AB9ABA944586548067839
:101E60002768C018E1088238A3287DCB5CDB3FEBF4
:101E70001EFBF98BD89BBBAB9ABB754A545A376A89
:101E8000167AF10AD01AB32A923A2EFD0FED6CDDC4
:101E90004DCDAABD8BADE89DC98D267C076C645CD9
:101EA000454CA23C832CE01CC10C1FEF3EFF5DCFD4
:101EB0007CDF9BAFBABFD98FF89F176E367E554E29
:101EC000745E932EB23ED10EF01E000000000000A2
:101ED00001140000090243000201008032090400DD
:101EE0000001020200000524001001042402000584
:101EF000240600010524010001070583030800FFF3
:101F000009040100020A00000007058102400000E8
:101F1000070502024000000000C2010000000800A6
:0C1F20006900000041000000000000000B
:0400000300000B7975
:00000001FF

View file

@ -0,0 +1 @@
samd21_sam_ba_arduino_mkrvidor4000.elf.ltrans0.o

View file

@ -0,0 +1,512 @@
:10000000FC7F0020C516000099010000950100004A
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000910100003E
:1000300000000000000000008D0100001101000020
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:10006000000000007C1F0000044B10B5002B03D0E3
:100070000349044800E000BF10BDC0460000000076
:10008000600000207C1F0000030010B50800110074
:1000900098476422014B1A8010BDC04678000020AA
:1000A000F0B5194B0A00997885B05C68002929D011
:1000B000042A1FD100680F263027520004AB9B187A
:1000C0000B3B9D1A01003140092919D83943197099
:1000D000013B00099D42F5D10A200C4B01A90B8080
:1000E0008B1898700330D8700432E068FFF7CCFFAB
:1000F00005B0F0BD022A01D10088DCE70078DAE71C
:100100003731E4E70100F0E77800002030780000A4
:100110001B4A1C4B117A002908D119785878091804
:100120008020C9B25970184940000860117A013125
:10013000C9B211725978F02902D85978092908D81A
:100140001978494249B21970197858780918C9B212
:100150005970117A5B78994203D180210A4B49008A
:1001600019601388002B03D01388013B9BB21380C6
:100170005389002B03D05389013B9BB253817047B5
:1001800078000020000000209C44004102BEFEE7F1
:1001900005BEFEE70DBEFEE70EBEFEE7074AFF30D6
:1001A00053699B0B9B035361022303728279823B49
:1001B00013438371037A9B07FCD570472C02002000
:1001C000802102000A4BC90100280ED099618021CC
:1001D000890199615961074B187B40008018064AD4
:1001E000800080581873C0B270475961EFE7C0466D
:1001F0000044004178000020AC1C00000C4B10B5FE
:100200001B7B082B10D00F2B0ED00120FFF7D8FF3F
:100210000120FFF7D5FF0120FFF7D2FF0120FFF7F4
:10022000CFFF0120FFF7CCFF0020FFF7C9FF10BD73
:10023000780000200D4B10B51B7B0F2B0AD0082B2C
:1002400008D00124A3420FD80020FFF7B9FF0020F7
:10025000FFF7B6FF0120FFF7B3FF0020FFF7B0FF65
:100260000020FFF7ADFF0024200010BD7800002023
:10027000074B10B51B7B01240B2B06D12000FFF789
:100280009FFF2000FFF79CFF0024200010BDC04608
:1002900078000020F0B587B003900020012604000C
:1002A0000700B4465E4001920596039B9F4201D130
:1002B00007B0F0BD002C04D1FF25002901D00D7836
:1002C00001316246184B40081E6AF60B1640F601D3
:1002D00030436646039A2E400496561E62460292AA
:1002E000BE4201D1059A0292049A002A18D08022B7
:1002F00052019A61029A002A03D08026B6019E61BB
:100300005E6107236D080134EDB21C4006D1019BEC
:10031000002B03D018702000013301930137C4E78C
:10032000802252015A61E5E700440041F7B50124FB
:100330006240019280220023520106009446180078
:10034000B34200D1FEBD0F4A2700156AED0B2540D0
:100350009D4028430D0025400095751E9D4200D10B
:10036000019F009D002D0AD065469561002F03D0A6
:100370008025AD019561556149100133E0E765467F
:100380005561F3E700440041154B10B51B7B040099
:10039000012B01D9FFF732FF0020FFF711FF0120E9
:1003A000FFF70EFF0120FFF70BFF0020FFF708FF0C
:1003B0000020FFF705FF012221000A20FFF7B6FF0A
:1003C0005623FF33984207D10120FFF7F9FE0120A1
:1003D000FFF7F6FE002010BD01204042FBE7C046BB
:1003E00078000020F7B50D4D0700EB7B0E202C7C2C
:1003F0000193FFF7C9FF061E0EDBFFF71BFF019BF2
:10040000611C9940E87BAB7B3943C0180122FFF7A0
:100410008DFFFFF72DFF6F743000FEBD78000020C8
:1004200037B505000020124B01905B7C0C00834225
:1004300018D10C20FFF7A8FFFFF7FCFE019B01A9D4
:100440009A00032313430193002320201A00FFF78F
:1004500021FF0023600102301A002900FFF71AFF74
:1004600020003EBDFFF7BEFF0028FADBE1E7C046F3
:10047000780000200222634BF0B51A708023624C92
:100480008027802680251B026360002385B0AD0194
:10049000FF017601A7600121A66003A8A560039370
:1004A000FFF7BEFF80235B05A3606361A761A661C0
:1004B0006561FFF7A3FE554D2B7B012B01D9FFF79B
:1004C0009DFE0020FFF77CFE0120FFF779FE012052
:1004D000FFF776FE0020FFF773FE0020FFF770FEA7
:1004E000012204210A20FFF721FF0120FFF768FE07
:1004F0000120FFF765FE9A27FFF79CFE80228023EC
:10050000FF3752019B01013F6261A3616361002FCC
:10051000F9D13A0039000120FFF708FF0400FFF786
:10052000A7FEFFF76BFE002C03D10120404205B06F
:10053000F0BD0E20FFF728FFFFF77CFE3A003900E0
:100540004020FFF7F3FEFFF793FE0C20FFF71CFFA0
:1005500008263C00FFF76EFE002204201100FFF782
:10056000E5FE24090007013E0443FFF781FEFFF783
:1005700045FE002EEED1FF2362032B746B74520DE7
:100580006E2AD2D131000120E20C009313406A732D
:10059000AE7301933200009BF7B21A4094460200FA
:1005A00063469A40019B0136934226DA002900D027
:1005B000AF730027EC736B7B9F42B6DA08260024EA
:1005C000FFF738FE002204201100FFF7AFFE2409D8
:1005D0000007013E0443FFF74BFEFFF70FFE002E1E
:1005E000EED1FF22E30C1340842B08D16403640D89
:1005F0006E2C04D12F74300099E70100CAE701374F
:10060000D9E7C0464F440041004400417800002033
:1006100003210A4B01405A68094809041040084365
:10062000084A5860D8694007C00F00D17047013AA6
:10063000002AF7D101204042F8E7C04600080042F6
:10064000FFFFFCFF52C30000F8B52A4D2A4A2900DB
:10065000937C2A485B00DCB26B8B9B069B0F012BC3
:1006600004D06B8B9B069B0F022B17D14B6ADB0AC6
:10067000DB0223434B620B7EDB0718D54B8B5B07FA
:10068000DB0F0ED118000127D47C002C13D10028D9
:1006900000D0D4740320FFF7BBFF06E00138831CB1
:1006A000DAD10320FFF7B4FF02242000F8BD01389F
:1006B000831CE0D1F5E7124D124E5D5D3570124D91
:1006C0000E7EF60707D54D8B01336D0706D4013C2E
:1006D000E4B23800D9E7013D002D07D1002800D051
:1006E000D4740320FFF794FF0324DEE74E8BF60754
:1006F000E6D5F3E7000800427800002050C3000070
:100700008C0000202808004252C3000010B56B2264
:100710000224044B9A741875DC745975FFF794FF22
:10072000200010BD780000206B2310B5234CA3746B
:100730006A3BE3742075FFF787FF002398422ED1B0
:10074000A0751F481F4A0300418B8906890F0129A4
:100750001CD1D720596AC90AC90201435962197EBE
:1007600089071ED55A8B520718D40122A2751A7E0A
:100770009207FCD5144A03201278E275802259684A
:10078000D2020A435A60FFF743FF07E0418B890614
:10079000890F0229DDD0013A911CD5D1E37D1800E3
:1007A00010BD013A911CF9D0197EC907D7D5C022D6
:1007B000596892020A435A60F0E7C0467800002068
:1007C0000008004250C300002808004237B5194C09
:1007D0000190637C0D00002B1FD10C20FFF7D4FD8E
:1007E000FFF728FD019B01A99A00032313430193FE
:1007F000002320201A00FFF74DFD637C012B12D14E
:100800000C20FFF7C1FDFFF715FD002320202A0073
:100810001900FFF73FFD002004E00020FFF7E2FD94
:100820000028DADA3EBD0120FFF7DCFD0028F9DB05
:10083000E6E7C0467800002013B50C00FFF7F0FD96
:100840000190A04215D180220C4B52050C4C9A61AC
:100850005A61013C002C0FD001A90020FFF7B6FF20
:10086000019B002BF5D101A90120FFF7AFFF0198F3
:1008700016BD0A204042FBE70120FBE7004400418F
:10088000EA030000F0B5124C0D00A544114B019095
:10089000029168460321160000930227FFF7CCFF60
:1008A000EC1CA4080134B90038006944FFF78EFF3E
:1008B0007B1E01379C42F6DC00231A006A44127B3F
:1008C000F2540133AB42F8D1034B9D44F0BDC04616
:1008D000FCFBFFFF0500000104040000F8B51A4FFF
:1008E00006003B7E08001400002B12D1174B184A5B
:1008F00018491A645A6C920B92035A645A6C0A4053
:100900005A64A22240235200B15C0B43B35401232A
:100910003B764825FF35735DDB07DB0F12D00B4AB2
:10092000536C9B049B0C9C4202D9546CA404A40CF1
:100930002200074901F069F90123735500233B7632
:100940002000F8BD1C00FBE7780000202C020020EE
:10095000EC010020FF3F00F013B56B46DC1D044B9B
:1009600001222100D869FFF7B9FF207816BDC046E3
:1009700078000020F7B5009001201C4D1C005B01A1
:1009800016000193EA18536910325B005B0F0333C2
:100990009840B04221D8802350681B06034353601F
:1009A0006301ED1829616B69B1049B0B890C9B03F2
:1009B0000B436B616B690E4908340B406B61009B04
:1009C00064011C190223E3716279823B1343637152
:1009D000E3799B07FCD53000FEBD064BA701FF184D
:1009E0003200380001F011F93900D9E72C0200205B
:1009F000FF3F00F02C01002010B50C000A000100A0
:100A000003480123C069FFF7B5FF200010BDC046B1
:100A100078000020012307B5019004481A0001A9BD
:100A2000C069FFF7A7FF01200EBDC0467800002077
:100A300010B50B4C0B4BA5440C000190110003A802
:100A400022000093029401F0E0F8E11C89080331D0
:100A50006846FFF7F1FE8023DB009D4410BDC046D1
:100A600000FCFFFF04000001F0B5CB4BCB4CCA48A3
:100A70005B68A54400AF28301B69402198470028D7
:100A800002D06423C44A5381C34BC34A98662833B7
:100A9000D36600231367C04B1B6FFB60BE4B9B6E7E
:100AA000BB60BA68FB68934200D3B2E1BA4BDB6E1D
:100AB000FB601B78FF2B63D0232B00D05CE3B64B8D
:100AC0009B78002B06D0B44B02225B68B449D868EF
:100AD000FFF7DAFAB04874300378532B5DD1AE4B90
:100AE000AD4A9B6E146FA3421FD9AB49926FC96E7A
:100AF00001344D1CF960A8491B1BCD660C6793425D
:100B000048D2CB67A44BA74EDB6F29001A00306890
:100B1000FB6001F07AF8FB68E4189F4B1C67FB68E8
:100B2000ED189D4BDD663B7B33719B4B9A4A1B6FE7
:100B30009949013B1367D36E896FFB60013BD36614
:100B4000984B1A798A420AD2891A934A18685268CD
:100B500092699047002802D064238F4A5381C0468F
:100B60007A228D4B74331A7000238B4A93679378E3
:100B7000002B05D053688C490122D868FFF784FA0E
:100B8000854B854A1B6F01331367D36EFB600133BE
:100B9000D36680E7804BDA67B4E7522B09D17E4BEE
:100BA0007D4A5B687F49926F09685869FFF76CFA64
:100BB000D6E74F2B07D1784A7A4B926F1B68FA60C1
:100BC0003A7B1A70CCE7482B07D1734A754B926F6A
:100BD0001B68FA60BA891A80C2E7572B06D1714B9D
:100BE0006D4A1B68926FFA601A60B9E76F2B05D1E6
:100BF00001216C4B1868FFF753FAB1E7682B07D156
:100C0000684B654A1B6804301B8802219367F2E732
:100C1000772B09D1634B04301B6804211B68FB60F0
:100C2000FA685D4B9A67E6E7472B19D15A4B996FE3
:100C300072B6EFF308825B4B9A600A6882F3088809
:100C40004A6810479A6882F3088862B61B7B002BBB
:100C500000D185E7504B06205B681B6898477FE70B
:100C6000542B0AD14C4A533B9370130002225B6809
:100C70004B49D868FFF708FA72E74E2B0ED1464B66
:100C80009B78002B06D1444B02225B684449D8680C
:100C9000FFF7FAF90023404A937061E7562B62D1BF
:100CA0003D4B01225B684149D868FFF7EDF93A4BAB
:100CB0003F4D5B6803222900D868FFF7E5F9364B02
:100CC0003C4C5B6801222100D868FFF7DDF9324B0C
:100CD000291D5B680D22D868FFF7D6F92E4B01223B
:100CE0005B682100D868FFF7CFF9002301202A4A6A
:100CF000844613671A0030494E1C8D5CB018002DD5
:100D00002BD1002B01D0244B1A67234B224AD866E3
:100D10005B68126FD868FFF7B7F91F4B01225B6859
:100D20002100D868FFF7B0F900231B4A012613679A
:100D30001A0022494D1C8C5CA818002C10D1002BE5
:100D400001D0154B1A67144B134AD8665B68126FB3
:100D5000D868FFF799F9104B88E701326346CCE772
:100D600001323300E7E7582B30D10E4A0A4B1069A5
:100D700052699B6F1249134C9200984204D8064B5B
:100D800003225B68104974E75D08CD610C800D7D1E
:100D9000ED07FCD59B18F0E7780000205CEFFFFF23
:100DA000541F0000F8000020571F00002C1F0000F7
:100DB000441C00002E1F0000301F00003C1F0000DC
:100DC0000040004102A5FFFF451F0000592B00D045
:100DD00041E1C94BC94A9B6F1468002B05D194614E
:100DE000C54B03225B68C64943E79B08FB609369D8
:100DF000BB608023DB029C4200D0C6E0FFF73AFBD9
:100E0000051E0AD0BC4B03225B68BE49D868FFF7B9
:100E10003BF9BD46BC4B9D44F0BD1023FE1832008B
:100E20009021BA48FFF72EFD08233E60BC68B84EFB
:100E30007B60220023002D322C3312781B781202A3
:100E40001A4323002E331B781B041A4323002F332D
:100E50001B781B06134351D06278237812021A4381
:100E6000A3781B041A43E3781B061343A84A536074
:100E70000122A24B1A770024BB6819190A000B0043
:100E80002932283312781B7812021A430B002A33B6
:100E90001B781B041A430B002B331B781B061343D0
:100EA000013305D01023FB181819302200F0ADFED5
:100EB0003034902CE0D110219022964B791889186B
:100EC00010200B60942102233818411810200B6069
:100ED000FF239821381841185B030B608018032109
:100EE000FFF7AAFC7134FF34FB68AB4240D81023F3
:100EF0009021FA188548FFF79BFD71E77A683B68F7
:100F00009B182200196A23002932283312781B7893
:100F100012021A4323002A331B781B041A432300AE
:100F20002B331B781B061343994201D04B1C17D15E
:100F30006278237812021A43A3781B041A43E378D9
:100F40001B0613437268934200D2736021007A68D3
:100F50003B6808319818202200F048FE002887D10D
:100F60007B68303430337B60982B00D061E782E7B8
:100F7000FF23DB02E818684B8000C218BB68210021
:100F80009A18FFF755FD8035AEE7644B9C4239D97E
:100F9000137F002B00D123E75D4B614A5B689B18F0
:100FA0001C19A3B2002B12D110219022594B791891
:100FB000891810200B6094210223381841180B6007
:100FC0009633C318032180181C60FFF735FCFB68BB
:100FD00080267F33DB095A02802320009B00E31820
:100FE000D318FB60B60080239B00C518FB689D42A8
:100FF00000D1F5E6BB6831001A18121BFFF718FD87
:101000002800F0E78020474B5968814359605169B7
:10101000454A89089446FA68002A00D1E0E6434A26
:101020001A801A7DD207FCD520000022BD6804007A
:10103000BD60914202D0FE68964208D16046188099
:10104000187DC007FCD5F868821AFA60E3E710CD76
:10105000013210C0EBE75A2B00D081E5264B9D6F83
:10106000264B1C688023DB029C423FD18026002453
:1010700076000CE010229023BA18D3181A19FF2317
:101080005B03E0183100FFF7FDFB0134FF34A5429C
:10109000F0D810229023BA18D4180026244A6519D3
:1010A000AC425FD1144B01225B682249D868FEF73D
:1010B000EBFF0F24072332002240D0B20100360993
:1010C0003031092A00DD07311022BA18D154013B12
:1010D000F1D21021084B08225B687918D868FEF716
:1010E000D3FF054B03225B681349C2E50B4B9C42BF
:1010F000D3D9002633E0C04678000020F800002055
:101100004D1F0000491F0000A410000000F01F0048
:1011100000000020030000010020E0FFFF0F04009A
:1011200000F0FBFF0040004104A5FFFF44A5FFFFC6
:101130002C1D0000511F0000531F0000102290239F
:101140008021BA18D3189A19244B49005868244BA7
:10115000C01820188019FFF795FB0136FF36AE4204
:10116000ECD396E72178330A4B405B0031029E5A5C
:1011700001344E40B6B293E71A00303AD1B2092991
:1011800007D8184B9B6FFB601B011343154A9367ED
:10119000F6E41A00413A052A05D8124A373B926F05
:1011A000FA601201F1E71A00613A052A05D80D4AE2
:1011B000573B926FFA601201E7E700222C2B08D10F
:1011C000084B9B6FFB60F968074B1960054B9A67EA
:1011D000D6E4044974310B70F8E7C04600000020E3
:1011E00000F0FBFF78000020F800002070B505003B
:1011F000C0B0080016000C0000F010FD6B46400067
:10120000023018706A46032376085370023B5A1E58
:10121000A15C5A00002901D09E4206DC00236946E9
:101220002800FFF7A7FB40B070BD6846013381522C
:10123000EDE7F7B5056808222900AB8B06001340DF
:10124000FF31002B27D080234020C024AA830932FD
:10125000AB724A7088714B71B34BB44D5A68A40598
:101260002A4022435A605A692A401443B04A5C61BA
:101270001A60B04AB04C1A615A6814408022920237
:1012800022435A605A68920B92035A6000234871B5
:1012900033713079FEBD10200A7A0242F9D0A44A97
:1012A000A64C1778087267775778A77797782784BE
:1012B000278CBC466046D7783F02074327841779BE
:1012C00067845779608C3F02074367849779A784C6
:1012D000D279A78C12023A434027A2844F71A27F91
:1012E000607F120202439648824200D1F2E026DC7F
:1012F0008020400082421CD00BDC812A04D0822A4C
:1013000000D1BEE0802A14D12100E38426310222DC
:101310004EE081235B009A4200D127E100DAF8E039
:10132000FF33FF339A4200D1CFE0864B9A4200D17F
:10133000EFE02023FF35AA791343AB71A9E7902191
:1013400009018A426CD017DCD021C9008A4222D020
:10135000882109018A4200D190E0A023DB009A4253
:10136000E7D12800FEF71AFF8023228C5B4213434B
:101370003268DBB293728CE7734B9A4200D1C8E0BB
:10138000D7DD724B9A4200D14DE1714B9A42D0D1D8
:10139000238C7371BDE0238C1B0A012B0CD112220C
:1013A000A38C934201D8A28C92B2002369491431D4
:1013B0002800FFF7DFFA6CE7238C1B0A022B09D108
:1013C0004322A38C934201D8A28C92B2624900239B
:1013D0000831EDE7238C1B0A032BAAD1238CDBB247
:1013E000012B16D0002B05D0022BA2D1A28C5B4979
:1013F000D2B211E057490422263101A800F005FCC1
:101400000422A38C934201D8A28C92B2002301A99A
:10141000CEE7A28C5249D2B22800FFF7E7FE38E7A8
:10142000238C28003371FEF7B9FEA0230322C021CC
:101430005B00EA543C4B3D485A6C890502400A4324
:101440005A644622FF32AF54464A30241A6490222E
:101450005200AC545A6B02401143922259638021CE
:101460005200A954404A1A63B0225200AF545A6F36
:1014700010405867B2235B00E9540AE7311D01228E
:1014800096E75022E384638C0F2013402200283219
:101490001370638C03406384638C032B15D813781B
:1014A000002B0BD0638C08335B01EB189B799B06F8
:1014B0002100DB0FE3842631002328E7638C083307
:1014C0005B01EB189B79DB06F2E720238A79134353
:1014D0008B71DEE68022638C0F21134022002832BC
:1014E0001370638C0B406384238C002B00D020E7A7
:1014F000638C002B00D11CE7638C032B00D918E709
:101500001378002B09D02022638C08335B01EB1881
:101510005A712800FEF742FEBBE6638C10220833A6
:101520005B01EB18F4E7C0462C020020FFFFFF8FA1
:10153000AC0100202C010020FF3F00F0F80000204B
:10154000020300000103000021200000A12100008F
:1015500021220000441C000000000020651F000044
:10156000591F0000EC0100206C0100208022638CD8
:1015700013402200283213700F22638C13406384BF
:10158000238C002B00D0D4E6638C002B00D1D0E656
:10159000638C032B00D9CCE6230028331B78002B67
:1015A00020D0638C08335B01EB189B799B06B0D588
:1015B000638C113208335B01EB181A71638C0833AA
:1015C0005B01EB18DB795B06A3D5638C2032083313
:1015D0005B01EB18DA71638C3E3A08335B01EB1860
:1015E0001A7196E7638C08335B01EB189B79DB0675
:1015F0008FD51022638C08335B01EB181A71638C52
:1016000008335B01EB18DB799B0600D481E7638C20
:10161000921808335B01EB18DA71638C1F3A0833B8
:101620005B01EB18DCE70822A38C934201D8A28C63
:1016300092B2024900234C31BAE6C04600000020B5
:10164000F8B50B4F060038001C300D00FFF7F1FD18
:101650002C00002808D1050008E022003100F869BC
:10166000FFF73CF9241A3618002CF6D12800F8BDF3
:101670007800002070B5084C050020001C300E00DA
:10168000FFF7D7FD03000020834204D03200290079
:10169000E069FFF723F970BD7800002010B5084C11
:1016A00020001C30FFF7C5FD03000020834205D059
:1016B0004823E269FF33D05CC007C00F10BDC046AD
:1016C000780000200D4A0E4870B5824206D10D4ABE
:1016D0000D4B002193420DD100F01AF80B4C002362
:1016E0009442F4D0D1188842F1D9E55804330D6002
:1016F000F8E702C39342FCD3EEE7C04600000020A7
:101700005C000020AC0200205C000020801F000074
:10171000F0B50B498BB00B6800AF013320D00948FE
:10172000094BC9B2C36200291AD1084B084A1B7879
:10173000DB07DB0F0ED011600123303003700FE0A8
:1017400000200000F80000200420000038040040C1
:10175000FC7F00201468DA498C4200D028E2136034
:101760001E22D8494B6893431C3A13434B6008230D
:10177000D549886903438B61D448D54B9882988AB0
:1017800010439882D8681042FCD00122D1480270E0
:101790000478144203D0447864B2002CF8DB0122B0
:1017A0008260427852B2002AFBDBCB4A4260427828
:1017B00052B2002AFBDB8222D2014280427852B22E
:1017C000002AFBDB80249A8CA2439A841022DC68D6
:1017D0001442FCD0C14ADA621022DC681442FCD008
:1017E0009C8CBF4A22439A841022DC681442FCD0AD
:1017F00002229C8C802522439A844022DC682C4261
:10180000FCD0DC681442F9D01022DC681442FCD011
:101810000023836043785BB2002BFBDBB14B43605A
:101820007B6043785BB2002BFBDB00230B724B72B7
:101830008B72CB7262B6AC4B438043785BB2002BA9
:10184000FBDB04230A6AA94C13430B6201232268C1
:10185000134323602368DB07FCD4E369DB07F9D477
:101860001423FF222360E36893431A00EF231343FA
:10187000E3600223226813432360E3699B07FCD4DF
:101880003022638B93431A00102313436383E5696B
:101890006D07ED0FFBD101260F200221944A13782A
:1018A00033431370934B1A7882431A701A780A43A1
:1018B0001A70914A1178314311701A7802401A70E7
:1018C000202219780A380A431A70FEF72DFF0028E3
:1018D0003BD0CE2101400520FEF718FF3000FEF777
:1018E00023FF30239843C1B23000FEF70FFF2800DA
:1018F000FEF71AFF782301009943483B1943C9B208
:101900002800FEF703FF2800FEF70EFF0721014322
:10191000C9B22800FEF7FAFE0220FEF705FF01001B
:1019200002203140FEF7F2FE0420FEF7FDFE032107
:101930000140982001439438FEF7E8FE0222236814
:1019400093432360E3699B07FCD40F226B49012575
:101950000B78604C1A4070231343694A0B7013785C
:101960002B43137080235B00A36080237A681B03E2
:1019700013436360FEF77EFD08232900F818BD605D
:10198000FEF75AFF000EB02804D02800FEF7FCFC3A
:10199000FEF750FC5B4D2B0030331B78002B0AD038
:1019A000594B1A6882F30888FF229343574A936081
:1019B000EB6A1B6818472023434A0F20D1690B4369
:1019C000D361012352490A781A430A70514A1178A7
:1019D0008143117006211678314311704E490E78FB
:1019E00033430B70137803401370602311780B435B
:1019F00013704A4B638063785BB2002BFBDB0123DF
:101A0000474E327813433370B378DB07FCD41F2181
:101A1000444A13685B0B0B408B4200D10523308D89
:101A2000414C0B409B0120400343338513689B0CC2
:101A30000B401F2B00D1023B1F20318D03408143FF
:101A40000B43338513680722DB0D13407A60934202
:101A500000D103230721328D0B4034491B030A4078
:101A600013437F2233853378314813403370042386
:101A70003278002113430C22337070623389934310
:101A8000338133890B3A934333817F3200F0A6F8D8
:101A90000021284C284BE6616362022321843278BE
:101AA0001A48134380223370C026244B52001A6018
:101AB000234A244B36065360036A1B021B0A43E089
:101AC0003581730700400041000400400C0600000F
:101AD00000080040000C004001050100B805FF7D32
:101AE000040A000000070300144000000008004240
:101AF0004844004134440041494400413D440041D0
:101B00005B440041F80000200020000000ED00E0F0
:101B1000584400413C440041594400410640000003
:101B200000500041246080003FF8FFFFFF8FFFFF5F
:101B30002C0200207800002033120000884400416D
:101B400010E000E0E70300003343036207230126AF
:101B5000916013602000636A1C309847002801D010
:101B6000194B1E70184B1B78002BF3D0174B1A0023
:101B70002C32626008224833BA1843CB43C243CBAD
:101B800043C203CB03C20821114A79189368743405
:101B90005B035B0F9B00CB586B61926892B253431F
:101BA0002B6100232B607A332370FEF75DFFFCE787
:101BB000084B013B002BFCD1074B1160013B002B74
:101BC000FCD11360B8E5C04629010020441C000088
:101BD00000400041C409000048E801000300121859
:101BE000934200D1704719700133F9E730B50024F2
:101BF000A24201D1002005E0035D651C0C5DA342FB
:101C000001D0181B30BD2C00F2E7002310B59A421A
:101C100000D110BDCC5CC4540133F8E70023C25C92
:101C20000133002AFBD1581E70470000F8B5C046AA
:101C3000F8BC08BC9E467047F8B5C046F8BC08BC66
:101C40009E467047322E30005B41726475696E6F3C
:101C50003A58595A5D00000012010002020000408B
:101C600041235600000201020001040309040000A0
:101C7000150A0000590900009D160000F90900002E
:101C800075160000F9090000411600000800000068
:101C90001000000020000000400000008000000054
:101CA000000100000002000000040000010000002C
:101CB0000000000001000000090000000300000017
:101CC0000000000004000000050000000400000007
:101CD00005000000060000000800000006000000EB
:101CE00007000000040000000800000001000000E0
:101CF000090000000A000000020000000B000000C4
:101D00000C0000000B0000000C0000000D000000A3
:101D10000F0000000D0000000E0000000B0000008E
:101D20000F00000001000000090000000000211069
:101D3000422063308440A550C660E7700881299135
:101D40004AA16BB18CC1ADD1CEE1EFF131121002DD
:101D500073325222B5529442F772D6623993188385
:101D60007BB35AA3BDD39CC3FFF3DEE362244334A9
:101D700020040114E664C774A44485546AA54BB5D5
:101D800028850995EEE5CFF5ACC58DD5533672267D
:101D900011163006D776F6669556B4465BB77AA725
:101DA00019973887DFF7FEE79DD7BCC7C448E558C9
:101DB0008668A7784008611802282338CCC9EDD975
:101DC0008EE9AFF9488969990AA92BB9F55AD44A1D
:101DD000B77A966A711A500A333A122AFDDBDCCBC5
:101DE000BFFB9EEB799B588B3BBB1AABA66C877CE9
:101DF000E44CC55C222C033C600C411CAEED8FFD15
:101E0000ECCDCDDD2AAD0BBD688D499D977EB66EBC
:101E1000D55EF44E133E322E511E700E9FFFBEEF64
:101E2000DDDFFCCF1BBF3AAF599F788F8891A98126
:101E3000CAB1EBA10CD12DC14EF16FE18010A10010
:101E4000C230E3200450254046706760B983989300
:101E5000FBA3DAB33DC31CD37FE35EF3B102901260
:101E6000F322D2323542145277625672EAB5CBA5CC
:101E7000A89589856EF54FE52CD50DC5E234C324B0
:101E8000A01481046674476424540544DBA7FAB7A0
:101E90009987B8975FE77EF71DC73CD7D326F23600
:101EA0009106B01657667676154634564CD96DC9EC
:101EB0000EF92FE9C899E9898AB9ABA94458654850
:101EC00006782768C018E1088238A3287DCB5CDB40
:101ED0003FEB1EFBF98BD89BBBAB9ABB754A545AA0
:101EE000376A167AF10AD01AB32A923A2EFD0FED0C
:101EF0006CDD4DCDAABD8BADE89DC98D267C076CF0
:101F0000645C454CA23C832CE01CC10C1FEF3EFFDF
:101F10005DCF7CDF9BAFBABFD98FF89F176E367E3F
:101F2000554E745E932EB23ED10EF01E7600200008
:101F300041756720203920323031380031313A3153
:101F4000373A333000580A0D00790A0D00590A0D4E
:101F5000005A00230A0D003E0041726475696E6FDD
:101F6000204C4C430041726475696E6F204D4B529A
:101F7000205669646F722034303030000000000059
:101F800001140000FFFFFFFF09024300020100806F
:101F9000FA090400000102020000052400100104F7
:101FA0002402000524060001052401000107058321
:101FB000030800FF09040100020A00000007058170
:101FC00002400000070502024000000000C20100BC
:0C1FD00000000800690000004100000053
:04000003000016C51E
:00000001FF

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:10003000000000000000000011060000550700004D
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000B818000008B5084B002B03D0B2
:1000600000000000B018000008B5084B002B03D0BA
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000B818000060000020580000200000000098
:10009000B0180000600000205800002000000000A0
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012494003C8611178F3
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0DEFA207970BDE0
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F04AF938BD0004004012
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F009F901990F480835A3
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0B4F80123EB550023337000E01C1CDD
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,327 +78,327 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A80300205C000020B7
:10066000BC18000038B5304B1A681C1C013221D070
:100670002E4A191D1160D9B200291BD12C4A1078BD
:10068000012210402B4A0AD115682B498D4201D115
:1006900010600FE01160294901390029FCD1116077
:1006A000226882F30888FF229343254A93601E4BF9
:1006B0005B681847FFF726FF62B600F09DFD00F06B
:1006C0004FF8204B802252039A601F4B1F4A041C94
:1006D0005A601B4AC021106A09060002000A014341
:1006E000116200229A6007221A60A368201C9847B2
:1006F000174B002801D001221A701A78002A05D061
:10070000002000F08BFA00F003FBFCE71B78002BC5
:10071000EBD100F0E5FD0028E7D0012000F07EFAE3
:1007200000F0F6FAFCE7C0460020000018020020A6
:1007300038040040FC7F00203581730748E8010041
:1007400000ED00E00044004110E000E0E70300009D
:100750007B00002008B5FFF7A3FC00F0C3FA08BD3A
:1007600010B5054B054C2360FFF76AFD201C21687E
:10077000FFF758FD201C10BD005000411C02002056
:1007800070B5051CC0B0081C161C0C1C00F017FF2F
:1007900040006A460323023053701070760801232C
:1007A000E218013A11785A00002906D1281C69463E
:1007B0000023FFF7C9FD40B070BDB342F6DA6846CA
:1007C00081520133ECE70000F7B5BA4A04681378A8
:1007D000B949271CFF37051C102038720B7053785D
:1007E000B648B74E037093783380D17833880902C6
:1007F0000B4333801179B34B198051791888090262
:10080000084318809079B0490880D279088812028C
:1008100002430A8040227A71A84F3A78A64F12020A
:1008200038780F1C0243A9488446181C624500D141
:10083000C2E020DC802149008A4200D16EE109DC5F
:10084000812A00D192E0822A00D195E0802A00D04E
:1008500064E18BE081235B009A4200D1CFE000DAB3
:1008600058E1C0239B009A4200D157E1984B9A422D
:1008700000D14FE152E190231B019A4269D015DC6F
:10088000D023DB009A4222D088231B019A4269D0F0
:10089000A023DB009A4200D040E1201CFFF7E4FDDA
:1008A0003188286889B2FFF7F3FD3BE1894B9A4212
:1008B00000D12FE100DC31E1874B9A4200D11DE1EC
:1008C000864B9A4200D029E133886B7122E133884C
:1008D0001B0A012B08D10B8812222868934201D8E9
:1008E0000A8892B27E4911E133881B0A022B08D193
:1008F0000B8843222868934201D80A8892B279492A
:1009000004E133881B0A032B00D007E13388DBB2F4
:10091000012B17D0002B07D0022B00D0FEE00A8855
:100920002868D2B2704911E0042201A86F4900F092
:1009300035FE3B8804222868934201D83A8892B257
:1009400001A9E3E00A8828686949D2B2FFF718FFD5
:10095000E8E03388201C2B71FFF786FD201CFFF791
:100960009DFDDFE0291C01C90122CFE06149002380
:100970000B8028680222CAE05E4900220A8018889B
:10098000502210405C4A10701E880F2030401880A2
:100990001888032800D9C1E012781B8808335B014E
:1009A000E418A379002A01D09B0600E0DB06DB0FE8
:1009B0000B8028680222A9E019887F2291434E4AC1
:1009C000C9B2117018880F2101401980318800299F
:1009D00000D0A3E01988002900D19FE019880329DD
:1009E00000D99BE012781B8808335B01E318002ACA
:1009F00002D020225A718DE0102159718AE00288BC
:100A00007F239A433C4BD2B21A7001880F220A40CE
:100A100002803288002A00D080E00288002A00D1BB
:100A20007CE00288032A00D978E01B78002B1FD0D5
:100A3000038808335B01E3189B799A066AD503881B
:100A4000202208335B01E3181A71038808335B0125
:100A5000E318DB795F065DD50388402208335B012C
:100A6000E318DA710388022208335B01E3181EE001
:100A7000038808335B01E3189B79D9064AD50388BC
:100A8000102208335B01E3181A71038808335B01F5
:100A9000E318DB799A063DD50388202208335B01F1
:100AA000E318DA710388012208335B01E3181A7135
:100AB00030E0C046980000207D0000208200002029
:100AC0008400002086000020800000200203000037
:100AD0000103000021200000A121000021220000CC
:100AE0000C16000004000020F4150000E4150000BE
:100AF000E81500007E0000207C0000200B88082202
:100B00002868934201D80A8892B207490023FFF768
:100B10001BFC07E0201CFFF7A7FC03E0201C0121C1
:100B2000FFF798FCF7BDC0464800002007B5054B0D
:100B30000122019001A91868131CFFF705FC012090
:100B40000EBDC0461C02002013B5054B6C46073491
:100B50001868211C0122FFF73FFC207816BDC04613
:100B60001C02002010B5074C201CFFF719FB031CCA
:100B70000020834205D022684823FF33D05C012344
:100B8000184010BD1C02002010B5054A0C1C031CA7
:100B9000191C10680123221CFFF7D6FB201C10BD76
:100BA0001C02002070B5084C061C201C0D1CFFF711
:100BB000F7FA0023984205D02068311C2A1CFFF761
:100BC0000BFC031C181C70BD1C020020F8B50C4C5B
:100BD000051C201C0E1CFFF7E3FA0023271C341C05
:100BE00098420AD0002C07D0291C221C3868FFF735
:100BF000F3FB241A2D18F5E7331C181CF8BDC0466A
:100C00001C02002008B5031C081C111C9847024B4D
:100C100064221A8008BDC0468C000020012805D13E
:100C2000054B064A1A60064B187004E0002802D1F2
:100C3000044A014B1A6070478C02002040160000E5
:100C4000940000208C16000030B50A1C1C4985B0A9
:100C50000978031C00292AD0042A01D1006804E085
:100C6000022A01D1008800E00078520004A98B1804
:100C70000B3B9C1AA3420BD00F210140092902D83B
:100C80003025294300E0373119700009013BF1E7B5
:100C900001A930230B7078234B700A208B189870B1
:100CA0000D20D870074B04321B68D86803E0054953
:100CB0000968C868191CFFF7A5FF05B030BDC0461C
:100CC000880000208C02002072B6EFF30883044AEB
:100CD0001360036883F30888436818477047C04669
:100CE00090020020084B1A88002A03D01A88013A83
:100CF00092B21A80054B1A88002A03D01A88013A4A
:100D000092B21A807047C0468C0000208A000020F2
:100D1000F0B591B008A9CC4A0B1C31CA31C351CAF5
:100D200051C360CA60C3C94BC9489A687A25520347
:100D3000520F92005258C74902609C68A4B26243A5
:100D40000C60C54900240A60C44A1460C44C257074
:100D5000C44CC54D2368281C1B69402198470028B6
:100D600002D0C24B64221A80C14B00221860C14BD2
:100D70001D60C14BC04DBE4F1A602A683B689A4245
:100D8000E6D2BC4B1B681A78FF2A00D114E2232A52
:100D900000D0EBE1B94E3378002B06D0B14BB84907
:100DA0001B680222D868FFF72DFFAD4B1B78532B31
:100DB0003CD13B682A6893421ED9AE4801322A6072
:100DC0009A1AB04B01681B6801310160AE4E9A421D
:100DD00001D2326000E03360A048326800680490BD
:100DE00000F0DCFB336829685A182A60A14A1668AB
:100DF000F1181160A54A13702B68013B2B609D4BC5
:100E00001A68013A1A60A14B9E4A1B7811688B42FE
:100E10000AD222689148C91A00689269904700284E
:100E200002D0924B64221A80C0468DE1522B0AD127
:100E30008A48944A2368006811685B690390984760
:100E40006422934B0DE04F2B05D1844B8D4A1B68D8
:100E500012681A7078E1482B05D1804B894A1B68CB
:100E600012681A8070E1572B05D17C4B854A1B68AC
:100E700012681A6068E16F2B03D1784B0121186862
:100E800007E0682B08D1754B7E481B6802211B8840
:100E90000360FFF7D9FE57E1772B06D16F4B7948F6
:100EA0001B6804211B680360F3E7472B13D1754BC4
:100EB0001868FFF709FF774B1B6883F3088862B651
:100EC000754B1B78002B00D13EE1664B06201B685A
:100ED0001B68984738E1542B04D101233370614BD0
:100EE0001B6864E04E2B0CD13378002B06D15D4B90
:100EF00063491B680222D868FFF784FE0023337021
:100F000022E1562B57D123686449D8680122FFF7A4
:100F100079FE23686249D8680322FFF773FE614DAA
:100F20002368291CD8680122FFF76CFE23685E49FC
:100F3000D8680D22FFF766FE2368291CD8680122B5
:100F4000FFF760FE4B4F4C4D5849002339602B6032
:100F50003A1C281C13685E1C16601B780593002B36
:100F600003D0036801330360F4E73E4E2A68336818
:100F7000D868FFF747FE33684A49D8680122FFF76F
:100F800041FE059929604A4939603A4A1368581C5C
:100F900010601B78002B04D0374B1A6801321A609E
:100FA000F3E733682A68D868FFF72CFE3368D868FF
:100FB00033490222C6E0334A582B17D1244E264D1E
:100FC000366813682A68B10093420AD21F4D580848
:100FD000E861384828801D4D287DC607FBD55B1881
:100FE000F2E7204B34491B68D868AAE0592B79D125
:100FF00012681A4B3149002A02D11B680B606CE061
:10100000124D086819686B68104E8025AB43920832
:101010007360002A61D02A4B0C4D2B800B4E337D20
:10102000DD07FBD500230A4D2D680195AD08AB42C5
:1010300003D3244D054E358046E09342F9D09D0000
:10104000465901334E51EEE72016000000400041A2
:10105000440200203C0200203802002088020020C8
:10106000340200208C020020480200208A00002068
:101070002C020020300200204002002088000020C6
:101080008016000094020020980200202802002010
:101090008C00002090020020940000205C160000CC
:1010A000851600005E160000A816000060160000FD
:1010B0006C16000002A5FFFF7516000090000020CE
:1010C00044A5FFFF04A5FFFF3F4E357DEE07FBD58E
:1010D0009D0049194019D21A9BE73C4B3C491B68BB
:1010E000D8682EE05A2B2FD13A4B17681D6800267E
:1010F000EF19BD4206D02878311C00F013F90135F4
:10110000061CF6E7314B34491B680122D868FFF70B
:1011100079FD07230F223240111C36093031092A8C
:1011200000DD07311820C0186A468154013BF1D216
:10113000236806A9D8680822FFF764FD23682749B9
:10114000D8680322FFF75EFD254B7A221A70254BE3
:1011500000221A60244B1B7893422DD01B4B23494D
:101160001B680122D868FFF74DFD25E0111C3039BE
:10117000C8B21C4B092804D81D682A011143196004
:101180001AE0111C4139052903D81E68373A31018C
:1011900006E0111C6139052904D81868573A010185
:1011A0000A4308E02C2A03D10A4A1968116001E0B9
:1011B0000B490A7000221A600D4B1A6801321A603E
:1011C0000C4B1A680132D5E5004000418C0200202A
:1011D00079160000880200207D1600007F160000AE
:1011E00034020020940200208800002083160000B2
:1011F000400200203002002010B51C4B01201A785C
:10120000032402431A701A4B0F2219789143197064
:1012100019782143197017490C7820430870197800
:101220000A401A701A7830210A431A70124B802132
:101230001A6A0A431A62114B114A5A805A7852B2FA
:10124000002AFBDBC4220F480F499203FEF75CFF24
:101250000E4A002313700E4A13700E4A13700E4A82
:1012600013700E4A13700E4A137010BDD64400411D
:10127000BB440041D744004100040040000C004042
:1012800019400000001C00422AF600009C020020C9
:10129000230300209D020020A00200202403002040
:1012A0002103002008B5C1B20248FEF75BFF012010
:1012B00008BDC046001C0042024B187E4007C00F0C
:1012C0007047C046001C004208B5FFF7F5FF002834
:1012D000FBD00248FEF74CFF08BDC046001C004290
:1012E00008B5FFF7E9FF0023984205D0FFF7ECFFB0
:1012F000031C233B5A425341181C08BD70B5041C03
:101300000D1C4618B44204D02078FFF7CBFF0134FF
:10131000F8E7281C70BD10B5041CFFF7D5FF20703E
:10132000012010BD0B0A5840034B4000C05A09026F
:10133000484080B27047C046B6160000F7B500249A
:10134000051C0F1C261CBC4220D0FFF7BDFF114B13
:10135000C0B21B780190002B1AD1311CFFF7E2FFBD
:101360000D4B061C1A88002A04D10C4A11782A1C3D
:10137000002907D001996A1C2970802F02D1198891
:10138000013919800134A4B2151CDCE7301C00E0DF
:101390000120FEBD210300209E0200202203002028
:1013A000F0B53E4E85B0002203900C1C32703C4BD1
:1013B000914201D1012201E03A490C801A707F2349
:1013C0001C4201D080349C43FFF77EFF3378C0B2CB
:1013D000002B07D000253570FFF776FF3378C0B2B9
:1013E000AB4236D1432803D0712853D01528EBD116
:1013F000012300930120FFF755FF0098FFF752FFEC
:1014000000998025C843C0B2FFF74CFF039B00271B
:101410000293244A1388002B1DD121490193097896
:10142000002918D10198FFF73DFF391C0198FFF7FB
:1014300079FF013D071C002DEBD1000AC0B2FFF778
:1014400031FFF8B2FFF72EFFFFF73EFF3378002B96
:101450000AD035701FE00299013B09781380029B86
:10146000019101330293DDE7C0B2062807D1009B4A
:1014700003990133DBB280310093803C0391002C4F
:10148000B8D10420FFF70EFFFFF71EFF044B012524
:101490001C7000E00025281C05B0F0BD21030020D1
:1014A000220300209E020020F0B5384C87B00023B4
:1014B00001902370994201D1012301E0344A118047
:1014C000344A642613704320FFF7ECFE324FFFF7D7
:1014D000F3FE002803D1002F03D0013FF7E7002FD0
:1014E00003D1013E002EEED14DE00125FFF7ECFEC9
:1014F0002378002B38D1C0B20290012805D00428EF
:101500003DD10620FFF7CEFE39E005AE0221301CAA
:10151000FFF714FF01988021FFF710FF2378039055
:10152000002B18D1FFF7D0FE0702FFF7CDFEBFB2A8
:1015300023783F18BFB2012B0DD0039B9F4207D1E8
:101540003378AB4204D1EB437278DBB29A4204D0D9
:101550001820FFF7A7FE002303E00620FFF7A2FEF6
:10156000029B2278002A02D0002626700BE0012B75
:1015700005D1019A6B1C8032DDB20192B6E7054AB3
:10158000002313700126301C07B0F0BD210300209A
:101590009E0200202203002000350C0010B500231D
:1015A000934203D0CC5CC4540133F9E710BD031C53
:1015B0008218934202D019700133FAE77047002372
:1015C000C25C0133002AFBD1581E7047F8B5C046F3
:1015D000F8BC08BC9E467047F8B5C046F8BC08BCCD
:1015E0009E4670470403090441726475696E6F205A
:1015F0004C4C430041726475696E6F204D4B522014
:1016000057414E20313330300000000012010002FB
:1016100002000040412353000002010200010000CB
:101620000800000010000000200000004000000042
:101630008000000000010000000200000004000023
:10164000A5120000C9120000B9120000FD1200002E
:1016500017130000A1130000A91400007600200059
:101660004E6F7620333020323031370031303A310E
:10167000333A323200580A0D00590A0D005A00233D
:101680000A0D003E00322E30000000002D0B00003D
:10169000490B0000650B0000890B0000A50B000042
:1016A000890B0000CD0B00005B41726475696E6FA1
:1016B0003A58595A5D00000021104220633084409E
:1016C000A550C660E770088129914AA16BB18CC111
:1016D000ADD1CEE1EFF13112100273325222B55288
:1016E0009442F772D662399318837BB35AA3BDD361
:1016F0009CC3FFF3DEE36224433420040114E66458
:10170000C774A44485546AA54BB528850995EEE5B0
:10171000CFF5ACC58DD55336722611163006D77667
:10172000F6669556B4465BB77AA719973887DFF700
:10173000FEE79DD7BCC7C448E5588668A77840082F
:10174000611802282338CCC9EDD98EE9AFF9488950
:1017500069990AA92BB9F55AD44AB77A966A711AC7
:10176000500A333A122AFDDBDCCBBFFB9EEB799BA0
:10177000588B3BBB1AABA66C877CE44CC55C222C17
:10178000033C600C411CAEED8FFDECCDCDDD2AADF0
:101790000BBD688D499D977EB66ED55EF44E133EA7
:1017A000322E511E700E9FFFBEEFDDDFFCCF1BBF40
:1017B0003AAF599F788F8891A981CAB1EBA10CD11A
:1017C0002DC14EF16FE18010A100C230E320045022
:1017D000254046706760B9839893FBA3DAB33DC395
:1017E0001CD37FE35EF3B1029012F322D232354272
:1017F000145277625672EAB5CBA5A89589856EF525
:101800004FE52CD50DC5E234C324A01481046674C1
:10181000476424540544DBA7FAB79987B8975FE774
:101820007EF71DC73CD7D326F2369106B016576611
:101830007676154634564CD96DC90EF92FE9C899FC
:10184000E9898AB9ABA94458654806782768C01861
:10185000E1088238A3287DCB5CDB3FEB1EFBF98BD4
:10186000D89BBBAB9ABB754A545A376A167AF10AB1
:10187000D01AB32A923A2EFD0FED6CDD4DCDAABDE4
:101880008BADE89DC98D267C076C645C454CA23C01
:10189000832CE01CC10C1FEF3EFF5DCF7CDF9BAFB4
:1018A000BABFD98FF89F176E367E554E745E932E51
:0C18B000B23ED10EF01E0000000000004F
:1018BC0001140000090243000201008032090400F7
:1018CC00000102020000052400100104240200059E
:1018DC00240600010524010001070583030800FF0D
:1018EC0009040100020A0000000705810240000003
:1018FC00070502024000000000C2010000000800C1
:0C190C0069000000410000000000000025
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020B418000038B5304B1F
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B80225203FF
:1006C0009A601F4B1F4A041C5A601B4AC021106AC3
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E00044004106
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A1210000212200000416000004000020D3
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C0200203816000094000020841600006A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001816000000400041440200203C0200202D
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:101070004002002088000020781600009402002022
:1010800098020020280200208C00002090020020FE
:1010900094000020541600007D1600005616000033
:1010A000A0160000581600006416000002A5FFFFFD
:1010B0006D1600009000002044A5FFFF04A5FFFF6F
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200207116000088020020BF
:1011D00075160000771600003402002094020020EB
:1011E000880000207B160000400200203002002012
:1011F00010B51C4B01201A78032402431A701A4BB5
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78302127
:101220000A431A70124B80211A6A0A431A62114B40
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BDD6440041BB440041D744004137
:1012700000040040000C004019400000001C004227
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046001C004257
:1012B000024B187E4007C00F7047C046001C00421A
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC046001C004208B5FFF7E9FF002327
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000AE160000F7B50024051C0F1C261CBC428D
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B522057414E2031333030B1
:1016000000000000120100020200004041235300CC
:1016100000020102000100000800000010000000AC
:1016200020000000400000008000000000010000D9
:1016300000020000000400009D120000C112000022
:10164000B1120000F51200000F1300009913000002
:10165000A114000076002000417072203131203248
:101660003031390031333A30393A353500580A0DC6
:1016700000590A0D005A00230A0D003E00322E3098
:1016800000000000250B0000410B00005D0B000076
:10169000810B00009D0B0000810B0000C50B0000BA
:1016A0005B41726475696E6F3A58595A5D0000006B
:1016B0002110422063308440A550C660E770088145
:1016C00029914AA16BB18CC1ADD1CEE1EFF13112BC
:1016D000100273325222B5529442F772D662399395
:1016E00018837BB35AA3BDD39CC3FFF3DEE362240C
:1016F000433420040114E664C774A44485546AA5E5
:101700004BB528850995EEE5CFF5ACC58DD553369B
:10171000722611163006D776F6669556B4465BB734
:101720007AA719973887DFF7FEE79DD7BCC7C4486B
:10173000E5588668A7784008611802282338CCC984
:10174000EDD98EE9AFF9488969990AA92BB9F55AFB
:10175000D44AB77A966A711A500A333A122AFDDBD4
:10176000DCCBBFFB9EEB799B588B3BBB1AABA66CCB
:10177000877CE44CC55C222C033C600C411CAEED24
:101780008FFDECCDCDDD2AAD0BBD688D499D977EDB
:10179000B66ED55EF44E133E322E511E700E9FFF74
:1017A000BEEFDDDFFCCF1BBF3AAF599F788F88912A
:1017B000A981CAB1EBA10CD12DC14EF16FE180100E
:1017C000A100C230E3200450254046706760B98311
:1017D0009893FBA3DAB33DC31CD37FE35EF3B1025E
:1017E0009012F322D2323542145277625672EAB521
:1017F000CBA5A89589856EF54FE52CD50DC5E234AE
:10180000C324A01481046674476424540544DBA7F0
:10181000FAB79987B8975FE77EF71DC73CD7D326FD
:10182000F2369106B01657667676154634564CD980
:101830006DC90EF92FE9C899E9898AB9ABA944584D
:10184000654806782768C018E1088238A3287DCB50
:101850005CDB3FEB1EFBF98BD89BBBAB9ABB754A9D
:10186000545A376A167AF10AD01AB32A923A2EFDE0
:101870000FED6CDD4DCDAABD8BADE89DC98D267CED
:10188000076C645C454CA23C832CE01CC10C1FEF30
:101890003EFF5DCF7CDF9BAFBABFD98FF89F176E3D
:1018A000367E554E745E932EB23ED10EF01E000071
:0418B0000000000034
:1018B40001140000090243000201008032090400FF
:1018C40000010202000005240010010424020005A6
:1018D400240600010524010001070583030800FF15
:1018E40009040100020A000000070581024000000B
:1018F400070502024000000000C2010000000800C9
:0C1904006900000041000000000000002D
:040000030000060DE6
:00000001FF

Binary file not shown.

View file

@ -0,0 +1,508 @@
:10000000FC7F0020E10B0000D10B0000D50B0000AD
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000D90B0000EC
:100030000000000000000000DD0B0000350D000096
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000381F000008B5084B002B03D02B
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000381F000060000020580000200000000011
:1000A000094A0323184003040849506808401843CC
:1000B000074B5060D0694007C00F04D0013B002BB4
:1000C000F8D101204042704700080042FFFFFCFFCA
:1000D00052C3000070B5400008431D4BC0B21D4C18
:1000E0000325668B221C36092E40012E07D1546A47
:1000F000E40AE4022043506200290DD010E0648B32
:1001000024092540022DF2D0013B9A1CE7D10020A2
:100110001CE0013B581CFAD4117EC807F9D511E048
:10012000107E012440080B4920400BD1002BEEDB50
:100130000D7E013B2542F3D04A68C0239B02134346
:100140004B6003E0538B01209B08984370BDC04671
:1001500050C300000008004238B5284A284B5A8096
:100160005A7852B2002AFBDB264B04211A6A264D2C
:100170000A431A622B68012213432B602A68012369
:10018000214C1A42FAD1E2691A42F7D114232360B2
:1001900041001E4801F0F2FC421EE068FF231A40B5
:1001A00098431043E0602368022213432360EA6906
:1001B000154B9107FBD45A8B30218A4310210A43F7
:1001C0005A83EB6901205A07FBD4114B02241A7899
:1001D00002431A700F4B0F22197891431970197846
:1001E000214319700C490C782043087019780A4093
:1001F0001A701A7820210A431A7038BD1440000082
:10020000000C00400004004000080042006CDC02CA
:10021000484400413444004149440041044B022118
:100220001A688A431A60DA699107FCD47047C0469D
:1002300000080042F7B50D1C019234D01B4F00237B
:1002400001213B70FFF746FF00282BD001233B70B4
:10025000174C237E9907FBD5164A174B11780126B8
:1002600019706268AE4212D0144B022013406360D2
:10027000FFF716FF3B785A1C3A70227E9107FCD597
:100280000C4901360A780C49F6B2CA54E9E78023D2
:10029000DB0213436360019A002A04D00320FFF7B6
:1002A000FFFE00E0051C281CFEBDC04678000020B3
:1002B00000080042280800429D000020FFFFFBFFCD
:1002C000024B00221870024B1A7070477A0000200F
:1002D00079000020F8B51E4B051C00211878FFF7A7
:1002E000F9FE002804D10320FFF7DAFE02242CE0F7
:1002F000184A1678331C002B16D01748F11A405CA8
:100300001649174C087017480121077E0F4206D185
:10031000013C002C10D0408B0842F4D00CE0408B04
:10032000800808420ED007E013701C1C002D0CD072
:100330000320FFF7B5FE08E0032013700324FFF746
:10034000AFFE02E0013BDBB2D5E7201CF8BDC046A2
:100350007A000020790000207B000020280800425D
:1003600052C3000000080042034A1378591C117060
:10037000024AD05401207047790000207B00002001
:10038000154A164B1178002909D1154918780978B2
:100390004118C9B21970802012494003C861117810
:1003A0000131C9B211701978F02902D819780929D8
:1003B00009D80B4908784042C0B20870187809780B
:1003C0004118C9B2197012781B789A4203D1802261
:1003D000044B5203DA6170477D00002001000020C9
:1003E000000000200044004110B5041C6B20FFF702
:1003F00067FF201CFFF7B8FF0120FFF76BFF00230A
:10040000984206D101216B200A1CFFF713FF024B13
:100410001B78181C10BDC0469D00002038B5051C77
:100420006B200C1CFFF74CFF281CFFF79DFF201CC6
:10043000FFF79AFF0120FFF74DFF022038BD08B5F6
:100440000520FFF7D1FF0023984205D0CE210140BF
:100450000520FFF7E3FF0123181C08BD10B5041C9D
:100460000020FFF7C1FF78232D4A9843C1B2944280
:1004700042D018D82B4B9C4238D009D82A4B9C42EA
:1004800030D02A4B9C422FD0294B9C4245D13FE093
:10049000284B9C422CD0284B9C422BD0274B9C4273
:1004A0003BD1202333E0264A94422BD00AD8254B57
:1004B0009C4223D0244B9C4222D0244B9C422CD1E2
:1004C000402324E0224A94421ED004D8214B9C426F
:1004D00023D160231BE0204A944217D01F4A944244
:1004E00015D01AE0082312E0102310E018230EE0C4
:1004F00028230CE030230AE0382308E0482306E0F4
:10050000502304E0582302E0682300E070231943DD
:100510000020FFF783FF012000E0002010BDC0464F
:100520005811000018100000780F0000C80F0000DC
:10053000280F0000B810000008110000681000002B
:1005400098120000F811000048120000A8110000E5
:1005500038130000E812000088130000D8130000D0
:1005600010B5041C0020FFF73FFF07239843E1224A
:10057000C1B29200944220D008D8962C18D0FA2309
:100580005B009C4217D0642C22D11CE0114A94429B
:1005900015D005D89623DB009C4219D1042311E025
:1005A000FA22D20094420CD00B4A94420AD00FE0B7
:1005B0000124214307E0022304E0032302E0052392
:1005C00000E0062319430020FFF728FF012000E088
:1005D000002010BDDC050000B80B000070B504ACB5
:1005E000267805AC2578441EA041C401002901D01D
:1005F00040210C43002A01D020221443002B01D0BB
:1006000010231C43002E01D008231C43002D01D0D1
:1006100004231C430220FFF7E7FE0125011C2940AB
:1006200021430220FFF7FAFE281C70BD10B5041C00
:100630000420FFF7D9FE03231840084B9C4204D046
:10064000074B9C4208D1B02100E0982101430420CF
:10065000FFF7E4FE012000E0002010BD10100000B4
:100660007010000008B50120FFF7BEFECF23011C6B
:1006700019400120FFF7D2FE012008BD13B5FFF796
:10068000DEFE002817D0FFF7EDFF0C480024FFF72F
:10069000E5FE0B48FFF764FF211C221C231C00947D
:1006A0000194201CFFF79AFF0648FFF7BFFFFFF7F2
:1006B000B5FD201C01E00120404216BD08110000DC
:1006C000B80B00001010000008B50348FFF744FD08
:1006D000FFF7D4FF08BDC046A086010010B5C3696E
:1006E0009C07FCD403680224A3430360C46901236C
:1006F0001C42FBD10468234303600368DC07FCD47D
:10070000C46901231C42FBD1C469DC401C42F7D1FF
:10071000084B1A430260C3695A07FCD4C0239B02EA
:1007200043608181C3699C07FCD4036802221343A0
:10073000036010BD04000040037EDA07FCD501858C
:1007400070470000027E01235107FBD5428B1A42FD
:1007500007D1428BDA401A4203D1428B92081A42E7
:1007600002D0034B01221A70008DC0B27047C04600
:100770007E00002070B50368041C988B1A1C0821A9
:10078000FF32084226D0802099839872112353703B
:100790004021144B917150715E68134DC0202E4062
:1007A000800506435E605E693540284358610F4806
:1007B00018600F4818615D680E4828408025AD021A
:1007C000284358605868800B80035860002351719B
:1007D000237105E0137ADA0602D5201C00F0E4FA52
:1007E000207970BDA0010020FFFFFF8FA000002036
:1007F00020010020FF3F00F0002303714371044BF0
:10080000016083600B78022213430B707047C0466F
:100810007507000038B5364B2021DA6901200A43FC
:10082000DA61344B06241A7802431A70324B0F22D5
:100830001978914319701978214319702F490C7850
:100840002043087019780A401A701A7860210A4308
:100850001A702B4B2B4A5A805A7852B2002AFBDB73
:10086000294B01211A780A431A709A78D107FCD4CF
:1008700026480268510B1F221140914200D10521E8
:1008800011408C011D8D224929402143198504689E
:10089000A10C0A401F2A00D11D221C8D1F210A40D5
:1008A0008C4322431A8502680721D20D0A408A42EE
:1008B00000D103220A40188D1103164A02400A4350
:1008C0001A8519787F220A401A701A780421124872
:1008D0000A431A7058621A890C218A431A811A89AC
:1008E00001218A431A810021802201F0A0F938BD3C
:1008F00000040040584400413C4400415944004138
:10090000000C0040064000000050004124608000C0
:100910003FF8FFFFFF8FFFFFA0010020F7B5141C79
:100920001F4A5F0101971D1CD319061C5869271C1B
:100930004000400F03301033C74006D00F1C802208
:10094000596812060A435A6009E02F1C7B1E9F411A
:10095000144BBF01FF18381C221C01F05FF90199EC
:100960000F48083542181761131C5269A104920BF5
:10097000890C92030A435A6159690B4A0A405A6129
:100980006B01F3180222DA715979802252420A432C
:100990005A716B01F318DB799A07FAD5201CFEBD5A
:1009A000A001002020010020FF3F00F0F8B51A4E02
:1009B000051C3378141C002B12D1184B184A1A64EA
:1009C0005A6C920B92035A64586C164A02405A644D
:1009D000A2235B00EA5C40200243EA540123337007
:1009E0004827FF37EA5D0123134012D00B4B5A6CA6
:1009F0009204920CA24202D25C6CA404A40C081CC7
:100A0000221C074901F00AF90123EB55002333703A
:100A100000E01C1C201CF8BD7F000020A00100206D
:100A2000E0000020FF3F00F0FF3083792022002902
:100A300000D110221343837170470000084BFF3030
:100A40005A69920B92035A610223037282798023BE
:100A50005B4213438371037A9A07FCD57047C04603
:100A6000A001002080235B421943C9B28172704704
:100A700070B5A02303225B00C254134B134A5C6C75
:100A8000C021144089050C4346255C64FF35402491
:100A900044550F4D30261D6490256D0046555D6B05
:100AA00015402943922559636D0080214155094D18
:100AB0001D63B0256D0044555C6F22405A67B22318
:100AC0005B00C15470BDC046A0010020FFFFFF8F36
:100AD000E000002060010020024B5B785BB2002B3D
:100AE000FADB7047000C0040024BDB68DA06FBD5EE
:100AF0007047C04600080040F8B52A4B1E225968CE
:100B00009143022211435960274B28491E1C9982A8
:100B1000998A0A439A82F3680227234C3B42FAD00F
:100B2000234D0123AB60FFF7D7FF224B6B60FFF72C
:100B3000D3FF8223DB016B80FFF7CEFFA38C8022E3
:100B40009343A384FFF7D0FF1B4BE362FFF7CCFF77
:100B5000A38C1A4A1343A384FFF7C6FFA38C1F4339
:100B6000A784F3681A06FCD50F4BDB685A06F8D544
:100B70000024FFF7B9FFAC60FFF7AEFF104B6B60CE
:100B8000FFF7AAFF0F4B104AC0215A600F4A09060F
:100B9000106A0002000A0143116207229C601A6079
:100BA000F8BDC04600400041000800400C060000AF
:100BB000000C004001050100B805FF7D040A00009B
:100BC0000007030010E000E0E703000000ED00E094
:100BD0000EBEFEE70DBEFEE705BEFEE702BEFEE767
:100BE0000E4A0F4838B5824204D10E4A0E4B93424A
:100BF0000ED10AE00D4C9442F7D00023D118884260
:100C0000F3D9E55804330D60F8E700F011F804E07B
:100C10009342FAD2002102C3FAE7FEE70000002067
:100C20005C000020B00300205C0000203C1F00009E
:100C300038B5344D2B6801331AD0334B2A1D1A6056
:100C4000EAB2002A14D1314B197801231940304BF4
:100C50000AD118682F4A904201D1196008E01A6041
:100C60002D4A013A002AFCD11A602C4B01221A703D
:100C7000FFF742FF62B6FFF727FD284B284C1B7891
:100C8000002B0AD02B6883F308881E4BFF22934366
:100C9000A3601D4B1B681B68184700F09DFD00F00A
:100CA0004FF8204B802252039A601F4B1F4A051CAD
:100CB0005A60216AC0220902090A12060A43226206
:100CC00000229A6007221A60AB68281C9847184BCC
:100CD000002801D001221A701A78002A05D00020BD
:100CE00000F08CFA00F004FBFCE71B78002BEBD142
:100CF00000F0E6FD0028E7D0012000F07FFA00F0C8
:100D0000F7FAFCE700200000200200203804004031
:100D1000FC7F00203581730748E801008000002037
:100D200000ED00E00044004110E000E0E7030000B7
:100D30008100002008B5FFF723FB00F0C3FA08BDCF
:100D400010B5054B054C2360FFF764FD201C21689E
:100D5000FFF752FD201C10BD00500041240200206E
:100D600070B5051CC0B0081C161C0C1C00F067FFF9
:100D700040006A4603230230537010707608012346
:100D8000E218013A11785A00002906D1281C694658
:100D90000023FFF7C3FD40B070BDB342F6DA6846EA
:100DA00081520133ECE70000F7B5BA4A04681378C2
:100DB000B949271CFF37051C102038720B70537877
:100DC000B648B74E037093783380D17833880902E0
:100DD0000B4333801179B34B19805179188809027C
:100DE000084318809079B0490880D27908881202A7
:100DF00002430A8040227A71A84F3A78A64F120225
:100E000038780F1C0243A9488446181C624500D15B
:100E1000C2E020DC802149008A4200D16EE109DC79
:100E2000812A00D192E0822A00D195E0802A00D068
:100E300064E18BE081235B009A4200D1CFE000DACD
:100E400058E1C0239B009A4200D157E1984B9A4247
:100E500000D14FE152E190231B019A4269D015DC89
:100E6000D023DB009A4222D088231B019A4269D00A
:100E7000A023DB009A4200D040E1201CFFF7DEFDFA
:100E80003188286889B2FFF7EDFD3BE1894B9A4232
:100E900000D12FE100DC31E1874B9A4200D11DE106
:100EA000864B9A4200D029E133886B7122E1338866
:100EB0001B0A012B08D10B8812222868934201D803
:100EC0000A8892B27E4911E133881B0A022B08D1AD
:100ED0000B8843222868934201D80A8892B2794944
:100EE00004E133881B0A032B00D007E13388DBB20F
:100EF000012B17D0002B07D0022B00D0FEE00A8870
:100F00002868D2B2704911E0042201A86F4900F0AC
:100F100085FE3B8804222868934201D83A8892B221
:100F200001A9E3E00A8828686949D2B2FFF718FFEF
:100F3000E8E03388201C2B71FFF780FD201CFFF7B1
:100F400097FDDFE0291C01C90122CFE061490023A0
:100F50000B8028680222CAE05E4900220A801888B5
:100F6000502210405C4A10701E880F2030401880BC
:100F70001888032800D9C1E012781B8808335B0168
:100F8000E418A379002A01D09B0600E0DB06DB0F02
:100F90000B8028680222A9E019887F2291434E4ADB
:100FA000C9B2117018880F210140198031880029B9
:100FB00000D0A3E01988002900D19FE019880329F7
:100FC00000D99BE012781B8808335B01E318002AE4
:100FD00002D020225A718DE0102159718AE00288D6
:100FE0007F239A433C4BD2B21A7001880F220A40E9
:100FF00002803288002A00D080E00288002A00D1D6
:101000007CE00288032A00D978E01B78002B1FD0EF
:10101000038808335B01E3189B799A066AD5038835
:10102000202208335B01E3181A71038808335B013F
:10103000E318DB795F065DD50388402208335B0146
:10104000E318DA710388022208335B01E3181EE01B
:10105000038808335B01E3189B79D9064AD50388D6
:10106000102208335B01E3181A71038808335B010F
:10107000E318DB799A063DD50388202208335B010B
:10108000E318DA710388012208335B01E3181A714F
:1010900030E0C046A000002083000020880000202F
:1010A0008A0000208C00002086000020020300003F
:1010B0000103000021200000A121000021220000E6
:1010C0008C1C000004000020741C0000641C000044
:1010D000681C000084000020820000200B88082289
:1010E0002868934201D80A8892B207490023FFF783
:1010F00015FC07E0201CFFF7A1FC03E0201C0121E8
:10110000FFF792FCF7BDC0464800002007B5054B2D
:101110000122019001A91868131CFFF7FFFB0120B1
:101120000EBDC0462402002013B5054B6C460734A3
:101130001868211C0122FFF739FC207816BDC04633
:101140002402002010B5074C201CFFF713FB031CE2
:101150000020834205D022684823FF33D05C01235E
:10116000184010BD2402002010B5054A0C1C031CB9
:10117000191C10680123221CFFF7D0FB201C10BD96
:101180002402002070B5084C061C201C0D1CFFF723
:10119000F1FA0023984205D02068311C2A1CFFF781
:1011A00005FC031C181C70BD24020020F8B50C4C73
:1011B000051C201C0E1CFFF7DDFA0023271C341C25
:1011C00098420AD0002C07D0291C221C3868FFF74F
:1011D000EDFB241A2D18F5E7331C181CF8BDC0468A
:1011E0002402002008B5031C081C111C9847024B60
:1011F00064221A8008BDC04692000020012805D153
:10120000054B064A1A60064B187004E0002802D10C
:10121000044A014B1A60704794020020C01C000071
:10122000940000200C1D000030B50A1C1C4985B03C
:101230000978031C00292AD0042A01D1006804E09F
:10124000022A01D1008800E00078520004A98B181E
:101250000B3B9C1AA3420BD00F210140092902D855
:101260003025294300E0373119700009013BF1E7CF
:1012700001A930230B7078234B700A208B189870CB
:101280000D20D870074B04321B68D86803E005496D
:101290000968C868191CFFF7A5FF05B030BDC04636
:1012A0008E0000209402002072B6EFF30883044AF7
:1012B0001360036883F30888436818477047C04683
:1012C00098020020084B1A88002A03D01A88013A95
:1012D00092B21A80054B1A88002A03D01A88013A64
:1012E00092B21A807047C046920000209000002001
:1012F000F0B591B008A9CC4A0B1C31CA31C351CA10
:1013000051C360CA60C3C94BC9489A687A25520361
:10131000520F92005258C74902609C68A4B26243BF
:101320000C60C54900240A60C44A1460C44C25708E
:10133000C44CC54D2368281C1B69402198470028D0
:1013400002D0C24B64221A80C14B00221860C14BEC
:101350001D60C14BC04DBE4F1A602A683B689A425F
:10136000E6D2BC4B1B681A78FF2A00D114E2232A6C
:1013700000D0EBE1B94E3378002B06D0B14BB84921
:101380001B680222D868FFF72DFFAD4B1B78532B4B
:101390003CD13B682A6893421ED9AE4801322A608C
:1013A0009A1AB04B01681B6801310160AE4E9A4237
:1013B00001D2326000E03360A048326800680490D7
:1013C00000F02CFC336829685A182A60A14A166874
:1013D000F1181160A54A13702B68013B2B609D4BDF
:1013E0001A68013A1A60A14B9E4A1B7811688B4219
:1013F0000AD222689148C91A006892699047002869
:1014000002D0924B64221A80C0468DE1522B0AD141
:101410008A48944A2368006811685B69039098477A
:101420006422934B0DE04F2B05D1844B8D4A1B68F2
:1014300012681A7078E1482B05D1804B894A1B68E5
:1014400012681A8070E1572B05D17C4B854A1B68C6
:1014500012681A6068E16F2B03D1784B012118687C
:1014600007E0682B08D1754B7E481B6802211B885A
:101470000360FFF7D9FE57E1772B06D16F4B794810
:101480001B6804211B680360F3E7472B13D1754BDE
:101490001868FFF709FF774B1B6883F3088862B66B
:1014A000754B1B78002B00D13EE1664B06201B6874
:1014B0001B68984738E1542B04D101233370614BEA
:1014C0001B6864E04E2B0CD13378002B06D15D4BAA
:1014D00063491B680222D868FFF784FE002333703B
:1014E00022E1562B57D123686449D8680122FFF7BF
:1014F00079FE23686249D8680322FFF773FE614DC5
:101500002368291CD8680122FFF76CFE23685E4916
:10151000D8680D22FFF766FE2368291CD8680122CF
:10152000FFF760FE4B4F4C4D5849002339602B604C
:101530003A1C281C13685E1C16601B780593002B50
:1015400003D0036801330360F4E73E4E2A68336832
:10155000D868FFF747FE33684A49D8680122FFF789
:1015600041FE059929604A4939603A4A1368581C76
:1015700010601B78002B04D0374B1A6801321A60B8
:10158000F3E733682A68D868FFF72CFE3368D86819
:1015900033490222C6E0334A582B17D1244E264D38
:1015A000366813682A68B10093420AD21F4D580862
:1015B000E861384828801D4D287DC607FBD55B189B
:1015C000F2E7204B34491B68D868AAE0592B79D13F
:1015D00012681A4B3149002A02D11B680B606CE07B
:1015E000124D086819686B68104E8025AB4392084D
:1015F0007360002A61D02A4B0C4D2B800B4E337D3B
:10160000DD07FBD500230A4D2D680195AD08AB42DF
:1016100003D3244D054E358046E09342F9D09D001A
:10162000465901334E51EEE7A01C00000040004136
:101630004C020020440200204002002090020020C2
:101640003C02002094020020500200209000002064
:101650003402002038020020480200208E000020C2
:10166000001D00009C020020A0020020300200208B
:10167000920000209802002094000020DC1C000052
:10168000051D0000DE1C0000281D0000E01C0000FD
:10169000EC1C000002A5FFFFF51C000098000020D4
:1016A00044A5FFFF04A5FFFF3F4E357DEE07FBD5A8
:1016B0009D0049194019D21A9BE73C4B3C491B68D5
:1016C000D8682EE05A2B2FD13A4B17681D68002698
:1016D000EF19BD4206D02878311C00F013F901350E
:1016E000061CF6E7314B34491B680122D868FFF726
:1016F00079FD07230F223240111C36093031092AA7
:1017000000DD07311820C0186A468154013BF1D230
:10171000236806A9D8680822FFF764FD23682749D3
:10172000D8680322FFF75EFD254B7A221A70254BFD
:1017300000221A60244B1B7893422DD01B4B234967
:101740001B680122D868FFF74DFD25E0111C3039D8
:10175000C8B21C4B092804D81D682A01114319601E
:101760001AE0111C4139052903D81E68373A3101A6
:1017700006E0111C6139052904D81868573A01019F
:101780000A4308E02C2A03D10A4A1968116001E0D3
:101790000B490A7000221A600D4B1A6801321A6058
:1017A0000C4B1A680132D5E500400041940200203C
:1017B000F91C000090020020FD1C0000FF1C00002E
:1017C0003C0200209C0200208E000020031D00002F
:1017D000480200203802002010B51C4B01201A7866
:1017E000032402431A701A4B0F221978914319707F
:1017F00019782143197017490C782043087019781B
:101800000A401A701A7830210A431A70124B80214C
:101810001A6A0A431A62114B114A5A805A7852B214
:10182000002AFBDBC4220F480F499203FEF756FF44
:101830000E4A002313700E4A13700E4A13700E4A9C
:1018400013700E4A13700E4A137010BDD644004137
:10185000BB440041D744004100040040000C00405C
:1018600019400000001C00422AF60000A4020020DB
:101870002B030020A5020020A80200202C0300203A
:101880002903002008B5C1B20248FEF755FF012028
:1018900008BDC046001C0042024B187E4007C00F26
:1018A0007047C046001C004208B5FFF7F5FF00284E
:1018B000FBD00248FEF746FF08BDC046001C0042B0
:1018C00008B5FFF7E9FF0023984205D0FFF7ECFFCA
:1018D000031C233B5A425341181C08BD70B5041C1D
:1018E0000D1C4618B44204D02078FFF7CBFF01341A
:1018F000F8E7281C70BD10B5041CFFF7D5FF207059
:10190000012010BD0B0A5840034B4000C05A090289
:10191000484080B27047C046361D0000F0B53E4ECC
:1019200085B0002203900C1C32703C4B914201D1D7
:10193000012201E03A490C801A707F231C4201D039
:1019400080349C43FFF7B0FF3378C0B2002B07D040
:1019500000253570FFF7A8FF3378C0B2AB4236D10F
:10196000432803D0712853D01528EBD101230093CD
:101970000120FFF787FF0098FFF784FF009980257B
:10198000C843C0B2FFF77EFF039B00270293244A9F
:101990001388002B1DD1214901930978002918D102
:1019A0000198FFF76FFF391C0198FFF7ABFF013D6E
:1019B000071C002DEBD1000AC0B2FFF763FFF8B29D
:1019C000FFF760FFFFF770FF3378002B0AD0357008
:1019D0001FE00299013B09781380029B01910133BA
:1019E0000293DDE7C0B2062807D1009B03990133BB
:1019F000DBB280310093803C0391002CB8D10420ED
:101A0000FFF740FFFFF750FF044B01251C7000E07B
:101A10000025281C05B0F0BD290300202A03002062
:101A2000A6020020F7B50024051C0F1C261CBC4292
:101A300020D0FFF739FF114BC0B21B780190002B6B
:101A40001AD1311CFFF75EFF0D4B061C1A88002AC5
:101A500004D10C4A11782A1C002907D001996A1C6C
:101A60002970802F02D11988013919800134A4B25C
:101A7000151CDCE7301C00E00120FEBD290300201E
:101A8000A60200202A030020F0B5384C87B00023BE
:101A900001902370994201D1012301E0344A118061
:101AA000344A642613704320FFF7ECFE324FFFF7F1
:101AB000F3FE002803D1002F03D0013FF7E7002FEA
:101AC00003D1013E002EEED14DE00125FFF7ECFEE3
:101AD0002378002B38D1C0B20290012805D0042809
:101AE0003DD10620FFF7CEFE39E005AE0221301CC5
:101AF000FFF798FF01988021FFF794FF2378039068
:101B0000002B18D1FFF7D0FE0702FFF7CDFEBFB2C2
:101B100023783F18BFB2012B0DD0039B9F4207D102
:101B20003378AB4204D1EB437278DBB29A4204D0F3
:101B30001820FFF7A7FE002303E00620FFF7A2FE10
:101B4000029B2278002A02D0002626700BE0012B8F
:101B500005D1019A6B1C8032DDB20192B6E7054ACD
:101B6000002313700126301C07B0F0BD29030020AC
:101B7000A60200202A03002000350C00002934D0E2
:101B80000123002210B488422CD301242407A1424F
:101B900004D2814202D209011B01F8E7E400A1420C
:101BA00004D2814202D249005B00F8E7884201D3A7
:101BB000401A1A434C08A04202D3001B5C0822437F
:101BC0008C08A04202D3001B9C082243CC08A042F0
:101BD00002D3001BDC082243002803D01B0901D0DC
:101BE0000909E3E7101C10BC7047002801D0002051
:101BF000C04307B4024802A14018029003BDC0468A
:101C0000190000000029F0D003B5FFF7B9FF0EBCA2
:101C10004243891A1847C0467047C04610B5002392
:101C2000934203D0CC5CC4540133F9E710BD031CCC
:101C30008218934202D019700133FAE770470023EB
:101C4000C25C0133002AFBD1581E7047F8B5C0466C
:101C5000F8BC08BC9E467047F8B5C046F8BC08BC46
:101C60009E4670470403090441726475696E6F20D3
:101C70004C4C430041726475696E6F204D4B52208D
:101C800057414E2031333130000000001201000274
:101C9000020000404123590000020102000100003F
:101CA00008000000100000002000000040000000BC
:101CB000800000000001000000020000000400009D
:101CC00085180000A918000099180000DD18000010
:101CD000F71800001D190000891A00007600200086
:101CE00041707220333020323031390031323A3491
:101CF000313A353700580A0D00590A0D005A0023B1
:101D00000A0D003E00322E30000000000D110000D0
:101D10002911000045110000691100008511000023
:101D200069110000AD1100005B41726475696E6F4E
:101D30003A58595A5D000000211042206330844017
:101D4000A550C660E770088129914AA16BB18CC18A
:101D5000ADD1CEE1EFF13112100273325222B55201
:101D60009442F772D662399318837BB35AA3BDD3DA
:101D70009CC3FFF3DEE36224433420040114E664D1
:101D8000C774A44485546AA54BB528850995EEE52A
:101D9000CFF5ACC58DD55336722611163006D776E1
:101DA000F6669556B4465BB77AA719973887DFF77A
:101DB000FEE79DD7BCC7C448E5588668A7784008A9
:101DC000611802282338CCC9EDD98EE9AFF94889CA
:101DD00069990AA92BB9F55AD44AB77A966A711A41
:101DE000500A333A122AFDDBDCCBBFFB9EEB799B1A
:101DF000588B3BBB1AABA66C877CE44CC55C222C91
:101E0000033C600C411CAEED8FFDECCDCDDD2AAD69
:101E10000BBD688D499D977EB66ED55EF44E133E20
:101E2000322E511E700E9FFFBEEFDDDFFCCF1BBFB9
:101E30003AAF599F788F8891A981CAB1EBA10CD193
:101E40002DC14EF16FE18010A100C230E32004509B
:101E5000254046706760B9839893FBA3DAB33DC30E
:101E60001CD37FE35EF3B1029012F322D2323542EB
:101E7000145277625672EAB5CBA5A89589856EF59E
:101E80004FE52CD50DC5E234C324A014810466743B
:101E9000476424540544DBA7FAB79987B8975FE7EE
:101EA0007EF71DC73CD7D326F2369106B01657668B
:101EB0007676154634564CD96DC90EF92FE9C89976
:101EC000E9898AB9ABA94458654806782768C018DB
:101ED000E1088238A3287DCB5CDB3FEB1EFBF98B4E
:101EE000D89BBBAB9ABB754A545A376A167AF10A2B
:101EF000D01AB32A923A2EFD0FED6CDD4DCDAABD5E
:101F00008BADE89DC98D267C076C645C454CA23C7A
:101F1000832CE01CC10C1FEF3EFF5DCF7CDF9BAF2D
:101F2000BABFD98FF89F176E367E554E745E932ECA
:0C1F3000B23ED10EF01E000000000000C8
:101F3C000114000009024300020100803209040070
:101F4C000001020200000524001001042402000517
:101F5C00240600010524010001070583030800FF86
:101F6C0009040100020A000000070581024000007C
:101F7C00070502024000000000C20100000008003A
:0C1F8C006900000041000000000000009F
:0400000300000BE10D
:00000001FF

View file

@ -1,20 +1,20 @@
:10000000FC7F0020810B0000710B0000750B0000CD
:10000000FC7F0020790B0000690B00006D0B0000E5
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000790B00004C
:1000300000000000000000007D0B0000D50C000057
:10002000000000000000000000000000710B000054
:100030000000000000000000750B0000CD0C000067
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000D81E000008B5084B002B03D08C
:1000600000000000D01E000008B5084B002B03D094
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000D81E000060000020580000200000000072
:10009000D01E00006000002058000020000000007A
:1000A000064B0322104002040549586808401043DB
:1000B0005860DA695107FCD47047C0460008004216
:1000C000FFFFFCFF38B5284A284B5A805A7852B2B5
:1000D000002AFBDB264B04211A6A264D0A431A62CA
:1000E0002B68012213432B602A680123214C1A42FA
:1000F000FAD1E2691A42F7D11423236041001E4865
:1001000001F00CFD421EE068FF231A4098431043A3
:1001000001F008FD421EE068FF231A4098431043A7
:10011000E0602368022213432360EA69154B9107CC
:10012000FBD45A8B30218A4310210A435A83EB694E
:1001300001205A07FBD4114B02241A7802431A708B
@ -117,7 +117,7 @@
:100740003540284358610F4818600F4818615D68AC
:100750000E4828408025AD02284358605868800B19
:100760008003586000235171237105E0137ADA0683
:1007700002D5201C00F0E8FA207970BD9C01002011
:1007700002D5201C00F0E4FA207970BD9C01002015
:10078000FFFFFF8F9C0000201C010020FF3F00F0B6
:10079000002303714371044B016083600B780222D4
:1007A00013430B707047C0460D07000038B5364B39
@ -134,14 +134,14 @@
:100850001103164A02400A431A8519787F220A407A
:100860001A701A78042112480A431A7058621A89B9
:100870000C218A431A811A8901218A431A81002195
:10088000802201F0A4F938BD000400405844004122
:10088000802201F0A0F938BD000400405844004126
:100890003C44004159440041000C00400640000027
:1008A00000500041246080003FF8FFFFFF8FFFFFF2
:1008B0009C010020F7B5141C1F4A5F0101971D1C05
:1008C000D319061C5869271C4000400F0330103311
:1008D000C74006D00F1C8022596812060A435A608E
:1008E00009E02F1C7B1E9F41144BBF01FF18381CD1
:1008F000221C01F063F901990F480835421817616D
:1008F000221C01F05FF901990F4808354218176171
:10090000131C5269A104920B890C92030A435A6189
:1009100059690B4A0A405A616B01F3180222DA71D5
:100920005979802252420A435A716B01F318DB79DC
@ -151,7 +151,7 @@
:10096000586C164A02405A64A2235B00EA5C40209D
:100970000243EA54012333704827FF37EA5D01231D
:10098000134012D00B4B5A6C9204920CA24202D22A
:100990005C6CA404A40C081C221C074901F00EF98D
:100990005C6CA404A40C081C221C074901F00AF991
:1009A0000123EB550023337000E01C1C201CF8BD14
:1009B0007F0000209C010020DC000020FF3F00F0B1
:1009C000FF3083792022002900D110221343837144
@ -165,338 +165,338 @@
:100A40006D0080214155094D1D63B0256D00445551
:100A50005C6F22405A67B2235B00C15470BDC04630
:100A60009C010020FFFFFF8FDC0000205C010020C4
:100A700030B5364A1E235168082099430223194392
:100A8000516033498A6902438A613248324A90820E
:100A9000908A03439382D3689807FCD52F4B01209B
:100AA00018701878C40704D52C48407840B2002844
:100AB000F7DB01209860587840B20028FBDB284C17
:100AC00026484460587840B20028FBDB8224234843
:100AD000E4014480587840B20028FBDB908C8024ED
:100AE000A0439084D068C506FCD51E4C1A48C46249
:100AF000D4681948E506FBD5848C1B4D2C438484AF
:100B0000D4681548E506FBD5848C02252C438484E3
:100B1000D0680406FCD51048C0684506F8D5D068F2
:100B2000C406FCD500229A605A7852B2002AFBDB38
:100B30000E480A4A50605A7852B2002AFBDB002362
:100B40000B724B728B72CB7230BDC04600400041BD
:100B5000000400400C06000000080040000C0040AB
:100B600001050100B805FF7D040A0000000703002D
:100B70000EBEFEE70DBEFEE705BEFEE702BEFEE7C7
:100B80000E4A0F4838B5824204D10E4A0E4B9342AA
:100B90000ED10AE00D4C9442F7D00023D1188842C0
:100BA000F3D9E55804330D60F8E700F011F804E0DC
:100BB0009342FAD2002102C3FAE7FEE700000020C8
:100BC0005C000020AC0300205C000020DC1E000064
:100BD00038B5344D2B6801331AD0334B2A1D1A60B7
:100BE000EAB2002A14D1314B197801231940304B55
:100BF0000AD118682F4A904201D1196008E01A60A2
:100C00002D4A013A002AFCD11A602C4B01221A709D
:100C1000FFF72EFF62B6FFF723FD284B284C1B7809
:100C2000002B0AD02B6883F308881E4BFF229343C6
:100C3000A3601D4B1B681B68184700F09DFD00F06A
:100C40004FF8204B802252039A601F4B1F4A051C0D
:100C50005A60216AC0220902090A12060A43226266
:100C600000229A6007221A60AB68281C9847184B2C
:100C7000002801D001221A701A78002A05D000201D
:100C800000F08CFA00F004FBFCE71B78002BEBD1A2
:100C900000F0E6FD0028E7D0012000F07FFA00F028
:100CA000F7FAFCE7002000001C0200203804004096
:100CB000FC7F00203581730748E801008000002098
:100CC00000ED00E00044004110E000E0E703000018
:100CD0008100002008B5FFF72FFB00F0C3FA08BD24
:100CE00010B5054B054C2360FFF760FD201C216803
:100CF000FFF74EFD201C10BD0050004120020020D7
:100D000070B5051CC0B0081C161C0C1C00F067FF59
:100D100040006A46032302305370107076080123A6
:100D2000E218013A11785A00002906D1281C6946B8
:100D30000023FFF7BFFD40B070BDB342F6DA68464E
:100D400081520133ECE70000F7B5BA4A0468137822
:100D5000B949271CFF37051C102038720B705378D7
:100D6000B648B74E037093783380D1783388090240
:100D70000B4333801179B34B1980517918880902DC
:100D8000084318809079B0490880D2790888120207
:100D900002430A8040227A71A84F3A78A64F120285
:100DA00038780F1C0243A9488446181C624500D1BC
:100DB000C2E020DC802149008A4200D16EE109DCDA
:100DC000812A00D192E0822A00D195E0802A00D0C9
:100DD00064E18BE081235B009A4200D1CFE000DA2E
:100DE00058E1C0239B009A4200D157E1984B9A42A8
:100DF00000D14FE152E190231B019A4269D015DCEA
:100E0000D023DB009A4222D088231B019A4269D06A
:100E1000A023DB009A4200D040E1201CFFF7DAFD5E
:100E20003188286889B2FFF7E9FD3BE1894B9A4296
:100E300000D12FE100DC31E1874B9A4200D11DE166
:100E4000864B9A4200D029E133886B7122E13388C6
:100E50001B0A012B08D10B8812222868934201D863
:100E60000A8892B27E4911E133881B0A022B08D10D
:100E70000B8843222868934201D80A8892B27949A4
:100E800004E133881B0A032B00D007E13388DBB26F
:100E9000012B17D0002B07D0022B00D0FEE00A88D0
:100EA0002868D2B2704911E0042201A86F4900F00D
:100EB00085FE3B8804222868934201D83A8892B282
:100EC00001A9E3E00A8828686949D2B2FFF718FF50
:100ED000E8E03388201C2B71FFF77CFD201CFFF716
:100EE00093FDDFE0291C01C90122CFE06149002305
:100EF0000B8028680222CAE05E4900220A80188816
:100F0000502210405C4A10701E880F20304018801C
:100F10001888032800D9C1E012781B8808335B01C8
:100F2000E418A379002A01D09B0600E0DB06DB0F62
:100F30000B8028680222A9E019887F2291434E4A3B
:100F4000C9B2117018880F21014019803188002919
:100F500000D0A3E01988002900D19FE01988032957
:100F600000D99BE012781B8808335B01E318002A44
:100F700002D020225A718DE0102159718AE0028836
:100F80007F239A433C4BD2B21A7001880F220A4049
:100F900002803288002A00D080E00288002A00D136
:100FA0007CE00288032A00D978E01B78002B1FD050
:100FB000038808335B01E3189B799A066AD5038896
:100FC000202208335B01E3181A71038808335B01A0
:100FD000E318DB795F065DD50388402208335B01A7
:100FE000E318DA710388022208335B01E3181EE07C
:100FF000038808335B01E3189B79D9064AD5038837
:10100000102208335B01E3181A71038808335B016F
:10101000E318DB799A063DD50388202208335B016B
:10102000E318DA710388012208335B01E3181A71AF
:1010300030E0C0469C000020830000208800002093
:101040008A0000208C00002086000020020300009F
:101050000103000021200000A12100002122000046
:101060002C1C000004000020141C0000041C0000C4
:10107000081C000084000020820000200B88082249
:101080002868934201D80A8892B207490023FFF7E3
:1010900011FC07E0201CFFF79DFC03E0201C012150
:1010A000FFF78EFCF7BDC0464800002007B5054B92
:1010B0000122019001A91868131CFFF7FBFB012016
:1010C0000EBDC0462002002013B5054B6C46073408
:1010D0001868211C0122FFF735FC207816BDC04698
:1010E0002002002010B5074C201CFFF70FFB031C4B
:1010F0000020834205D022684823FF33D05C0123BF
:10110000184010BD2002002010B5054A0C1C031C1D
:10111000191C10680123221CFFF7CCFB201C10BDFA
:101120002002002070B5084C061C201C0D1CFFF787
:10113000EDFA0023984205D02068311C2A1CFFF7E5
:1011400001FC031C181C70BD20020020F8B50C4CDB
:10115000051C201C0E1CFFF7D9FA0023271C341C89
:1011600098420AD0002C07D0291C221C3868FFF7AF
:10117000E9FB241A2D18F5E7331C181CF8BDC046EE
:101180002002002008B5031C081C111C9847024BC4
:1011900064221A8008BDC04692000020012805D1B3
:1011A000054B064A1A60064B187004E0002802D16D
:1011B000044A014B1A60704790020020601C000036
:1011C00098000020AC1C000030B50A1C1C4985B0FA
:1011D0000978031C00292AD0042A01D1006804E000
:1011E000022A01D1008800E00078520004A98B187F
:1011F0000B3B9C1AA3420BD00F210140092902D8B6
:101200003025294300E0373119700009013BF1E72F
:1012100001A930230B7078234B700A208B1898702B
:101220000D20D870074B04321B68D86803E00549CD
:101230000968C868191CFFF7A5FF05B030BDC04696
:101240008E0000209002002072B6EFF30883044A5B
:101250001360036883F30888436818477047C046E3
:1012600094020020084B1A88002A03D01A88013AF9
:1012700092B21A80054B1A88002A03D01A88013AC4
:1012800092B21A807047C046920000209000002061
:10129000F0B591B008A9CC4A0B1C31CA31C351CA70
:1012A00051C360CA60C3C94BC9489A687A255203C2
:1012B000520F92005258C74902609C68A4B2624320
:1012C0000C60C54900240A60C44A1460C44C2570EF
:1012D000C44CC54D2368281C1B6940219847002831
:1012E00002D0C24B64221A80C14B00221860C14B4D
:1012F0001D60C14BC04DBE4F1A602A683B689A42C0
:10130000E6D2BC4B1B681A78FF2A00D114E2232ACC
:1013100000D0EBE1B94E3378002B06D0B14BB84981
:101320001B680222D868FFF72DFFAD4B1B78532BAB
:101330003CD13B682A6893421ED9AE4801322A60EC
:101340009A1AB04B01681B6801310160AE4E9A4297
:1013500001D2326000E03360A04832680068049037
:1013600000F02CFC336829685A182A60A14A1668D4
:10137000F1181160A54A13702B68013B2B609D4B3F
:101380001A68013A1A60A14B9E4A1B7811688B4279
:101390000AD222689148C91A0068926990470028C9
:1013A00002D0924B64221A80C0468DE1522B0AD1A2
:1013B0008A48944A2368006811685B6903909847DB
:1013C0006422934B0DE04F2B05D1844B8D4A1B6853
:1013D00012681A7078E1482B05D1804B894A1B6846
:1013E00012681A8070E1572B05D17C4B854A1B6827
:1013F00012681A6068E16F2B03D1784B01211868DD
:1014000007E0682B08D1754B7E481B6802211B88BA
:101410000360FFF7D9FE57E1772B06D16F4B794870
:101420001B6804211B680360F3E7472B13D1754B3E
:101430001868FFF709FF774B1B6883F3088862B6CB
:10144000754B1B78002B00D13EE1664B06201B68D4
:101450001B68984738E1542B04D101233370614B4A
:101460001B6864E04E2B0CD13378002B06D15D4B0A
:1014700063491B680222D868FFF784FE002333709B
:1014800022E1562B57D123686449D8680122FFF71F
:1014900079FE23686249D8680322FFF773FE614D25
:1014A0002368291CD8680122FFF76CFE23685E4977
:1014B000D8680D22FFF766FE2368291CD868012230
:1014C000FFF760FE4B4F4C4D5849002339602B60AD
:1014D0003A1C281C13685E1C16601B780593002BB1
:1014E00003D0036801330360F4E73E4E2A68336893
:1014F000D868FFF747FE33684A49D8680122FFF7EA
:1015000041FE059929604A4939603A4A1368581CD6
:1015100010601B78002B04D0374B1A6801321A6018
:10152000F3E733682A68D868FFF72CFE3368D86879
:1015300033490222C6E0334A582B17D1244E264D98
:10154000366813682A68B10093420AD21F4D5808C2
:10155000E861384828801D4D287DC607FBD55B18FB
:10156000F2E7204B34491B68D868AAE0592B79D19F
:1015700012681A4B3149002A02D11B680B606CE0DB
:10158000124D086819686B68104E8025AB439208AD
:101590007360002A61D02A4B0C4D2B800B4E337D9B
:1015A000DD07FBD500230A4D2D680195AD08AB4240
:1015B00003D3244D054E358046E09342F9D09D007B
:1015C000465901334E51EEE7401C000000400041F7
:1015D00048020020400200203C0200208C02002033
:1015E00038020020900200204C02002090000020D1
:1015F0003002002034020020440200208E0000202F
:10160000A01C0000980200209C0200202C02002058
:101610009200002094020020980000207C1C000012
:10162000A51C00007E1C0000C81C0000801C0000DF
:101630008C1C000002A5FFFF951C000094000020F8
:1016400044A5FFFF04A5FFFF3F4E357DEE07FBD508
:101650009D0049194019D21A9BE73C4B3C491B6835
:10166000D8682EE05A2B2FD13A4B17681D680026F8
:10167000EF19BD4206D02878311C00F013F901356E
:10168000061CF6E7314B34491B680122D868FFF786
:1016900079FD07230F223240111C36093031092A07
:1016A00000DD07311820C0186A468154013BF1D291
:1016B000236806A9D8680822FFF764FD2368274934
:1016C000D8680322FFF75EFD254B7A221A70254B5E
:1016D00000221A60244B1B7893422DD01B4B2349C8
:1016E0001B680122D868FFF74DFD25E0111C303939
:1016F000C8B21C4B092804D81D682A01114319607F
:101700001AE0111C4139052903D81E68373A310106
:1017100006E0111C6139052904D81868573A0101FF
:101720000A4308E02C2A03D10A4A1968116001E033
:101730000B490A7000221A600D4B1A6801321A60B8
:101740000C4B1A680132D5E50040004190020020A0
:10175000991C00008C0200209D1C00009F1C0000B2
:1017600038020020980200208E000020A31C0000F8
:10177000440200203402002010B51C4B01201A78CE
:10178000032402431A701A4B0F22197891431970DF
:1017900019782143197017490C782043087019787B
:1017A0000A401A701A7830210A431A70124B8021AD
:1017B0001A6A0A431A62114B114A5A805A7852B275
:1017C000002AFBDBC4220F480F499203FEF752FFA9
:1017D0000E4A002313700E4A13700E4A13700E4AFD
:1017E00013700E4A13700E4A137010BDD644004198
:1017F000BB440041D744004100040040000C0040BD
:1018000019400000001C00422AF60000A00200203F
:1018100027030020A1020020A402002028030020AA
:101820002503002008B5C1B20248FEF751FF012090
:1018300008BDC046001C0042024B187E4007C00F86
:101840007047C046001C004208B5FFF7F5FF0028AE
:10185000FBD00248FEF742FF08BDC046001C004214
:1018600008B5FFF7E9FF0023984205D0FFF7ECFF2A
:10187000031C233B5A425341181C08BD70B5041C7D
:101880000D1C4618B44204D02078FFF7CBFF01347A
:10189000F8E7281C70BD10B5041CFFF7D5FF2070B9
:1018A000012010BD0B0A5840034B4000C05A0902EA
:1018B000484080B27047C046D61C0000F7B50024EF
:1018C000051C0F1C261CBC4220D0FFF7BDFF114B8E
:1018D000C0B21B780190002B1AD1311CFFF7E2FF38
:1018E0000D4B061C1A88002A04D10C4A11782A1CB8
:1018F000002907D001996A1C2970802F02D119880C
:10190000013919800134A4B2151CDCE7301C00E059
:101910000120FEBD25030020A20200202603002096
:10192000F0B53E4E85B0002203900C1C32703C4B4B
:10193000914201D1012201E03A490C801A707F23C3
:101940001C4201D080349C43FFF77EFF3378C0B245
:10195000002B07D000253570FFF776FF3378C0B233
:10196000AB4236D1432803D0712853D01528EBD190
:10197000012300930120FFF755FF0098FFF752FF66
:1019800000998025C843C0B2FFF74CFF039B002796
:101990000293244A1388002B1DD121490193097811
:1019A000002918D10198FFF73DFF391C0198FFF776
:1019B00079FF013D071C002DEBD1000AC0B2FFF7F3
:1019C00031FFF8B2FFF72EFFFFF73EFF3378002B11
:1019D0000AD035701FE00299013B09781380029B01
:1019E000019101330293DDE7C0B2062807D1009BC5
:1019F00003990133DBB280310093803C0391002CCA
:101A0000B8D10420FFF70EFFFFF71EFF044B01259E
:101A10001C7000E00025281C05B0F0BD2503002047
:101A200026030020A2020020F0B5384C87B0002326
:101A300001902370994201D1012301E0344A1180C1
:101A4000344A642613704320FFF7ECFE324FFFF751
:101A5000F3FE002803D1002F03D0013FF7E7002F4A
:101A600003D1013E002EEED14DE00125FFF7ECFE43
:101A70002378002B38D1C0B20290012805D0042869
:101A80003DD10620FFF7CEFE39E005AE0221301C25
:101A9000FFF714FF01988021FFF710FF23780390D0
:101AA000002B18D1FFF7D0FE0702FFF7CDFEBFB223
:101AB00023783F18BFB2012B0DD0039B9F4207D163
:101AC0003378AB4204D1EB437278DBB29A4204D054
:101AD0001820FFF7A7FE002303E00620FFF7A2FE71
:101AE000029B2278002A02D0002626700BE0012BF0
:101AF00005D1019A6B1C8032DDB20192B6E7054A2E
:101B0000002313700126301C07B0F0BD2503002010
:101B1000A20200202603002000350C00002934D04A
:101B20000123002210B488422CD301242407A142AF
:101B300004D2814202D209011B01F8E7E400A1426C
:101B400004D2814202D249005B00F8E7884201D307
:101B5000401A1A434C08A04202D3001B5C082243DF
:101B60008C08A04202D3001B9C082243CC08A04250
:101B700002D3001BDC082243002803D01B0901D03C
:101B80000909E3E7101C10BC7047002801D00020B1
:101B9000C04307B4024802A14018029003BDC046EA
:101BA000190000000029F0D003B5FFF7B9FF0EBC03
:101BB0004243891A1847C0467047C04610B50023F3
:101BC000934203D0CC5CC4540133F9E710BD031C2D
:101BD0008218934202D019700133FAE7704700234C
:101BE000C25C0133002AFBD1581E7047F8B5C046CD
:101BF000F8BC08BC9E467047F8B5C046F8BC08BCA7
:101C00009E4670470403090441726475696E6F2033
:101C10004C4C430041726475696E6F204D4B5220ED
:101C2000576946692031303130000000120100024E
:101C300002000040412354000002010200010000A4
:101C4000080000001000000020000000400000001C
:101C500080000000000100000002000000040000FD
:101C60002518000049180000391800007D180000F0
:101C70009718000021190000291A000076002000A2
:101C80004D617220313920323031380030393A34E8
:101C9000353A313400580A0D00590A0D005A002314
:101CA0000A0D003E00322E3000000000AD10000092
:101CB000C9100000E5100000091100002511000006
:101CC000091100004D1100005B41726475696E6F6F
:101CD0003A58595A5D000000211042206330844078
:101CE000A550C660E770088129914AA16BB18CC1EB
:101CF000ADD1CEE1EFF13112100273325222B55262
:101D00009442F772D662399318837BB35AA3BDD33A
:101D10009CC3FFF3DEE36224433420040114E66431
:101D2000C774A44485546AA54BB528850995EEE58A
:101D3000CFF5ACC58DD55336722611163006D77641
:101D4000F6669556B4465BB77AA719973887DFF7DA
:101D5000FEE79DD7BCC7C448E5588668A778400809
:101D6000611802282338CCC9EDD98EE9AFF948892A
:101D700069990AA92BB9F55AD44AB77A966A711AA1
:101D8000500A333A122AFDDBDCCBBFFB9EEB799B7A
:101D9000588B3BBB1AABA66C877CE44CC55C222CF1
:101DA000033C600C411CAEED8FFDECCDCDDD2AADCA
:101DB0000BBD688D499D977EB66ED55EF44E133E81
:101DC000322E511E700E9FFFBEEFDDDFFCCF1BBF1A
:101DD0003AAF599F788F8891A981CAB1EBA10CD1F4
:101DE0002DC14EF16FE18010A100C230E3200450FC
:101DF000254046706760B9839893FBA3DAB33DC36F
:101E00001CD37FE35EF3B1029012F322D23235424B
:101E1000145277625672EAB5CBA5A89589856EF5FE
:101E20004FE52CD50DC5E234C324A014810466749B
:101E3000476424540544DBA7FAB79987B8975FE74E
:101E40007EF71DC73CD7D326F2369106B0165766EB
:101E50007676154634564CD96DC90EF92FE9C899D6
:101E6000E9898AB9ABA94458654806782768C0183B
:101E7000E1088238A3287DCB5CDB3FEB1EFBF98BAE
:101E8000D89BBBAB9ABB754A545A376A167AF10A8B
:101E9000D01AB32A923A2EFD0FED6CDD4DCDAABDBE
:101EA0008BADE89DC98D267C076C645C454CA23CDB
:101EB000832CE01CC10C1FEF3EFF5DCF7CDF9BAF8E
:101EC000BABFD98FF89F176E367E554E745E932E2B
:0C1ED000B23ED10EF01E00000000000029
:101EDC0001140000090243000201008032090400D1
:101EEC000001020200000524001001042402000578
:101EFC00240600010524010001070583030800FFE7
:101F0C0009040100020A00000007058102400000DC
:101F1C00070502024000000000C20100000008009A
:0C1F2C00690000004100000000000000FF
:0400000300000B816D
:100A7000024B5B785BB2002BFADB7047000C004046
:100A8000024BDB68DA06FBD57047C0460008004021
:100A9000F8B52A4B1E22596891430222114359602E
:100AA000274B28491E1C9982998A0A439A82F36827
:100AB0000227234C3B42FAD0234D0123AB60FFF7C2
:100AC000D7FF224B6B60FFF7D3FF8223DB016B80E4
:100AD000FFF7CEFFA38C80229343A384FFF7D0FFC0
:100AE0001B4BE362FFF7CCFFA38C1A4A1343A3848A
:100AF000FFF7C6FFA38C1F43A784F3681A06FCD533
:100B00000F4BDB685A06F8D50024FFF7B9FFAC603D
:100B1000FFF7AEFF104B6B60FFF7AAFF0F4B104AB9
:100B2000C0215A600F4A0906106A0002000A0143F8
:100B3000116207229C601A60F8BDC0460040004167
:100B4000000800400C060000000C004001050100F8
:100B5000B805FF7D040A00000007030010E000E074
:100B6000E703000000ED00E00EBEFEE70DBEFEE76D
:100B700005BEFEE702BEFEE70E4A0F4838B58242C8
:100B800004D10E4A0E4B93420ED10AE00D4C944212
:100B9000F7D00023D1188842F3D9E55804330D600B
:100BA000F8E700F011F804E09342FAD2002102C302
:100BB000FAE7FEE7000000205C000020AC03002004
:100BC0005C000020D41E000038B5344D2B68013382
:100BD0001AD0334B2A1D1A60EAB2002A14D1314BC5
:100BE000197801231940304B0AD118682F4A9042D6
:100BF00001D1196008E01A602D4A013A002AFCD19F
:100C00001A602C4B01221A70FFF742FF62B6FFF701
:100C100027FD284B284C1B78002B0AD02B6883F328
:100C200008881E4BFF229343A3601D4B1B681B6863
:100C3000184700F09DFD00F04FF8204B8022520332
:100C40009A601F4B1F4A051C5A60216AC022090284
:100C5000090A12060A43226200229A6007221A60D9
:100C6000AB68281C9847184B002801D001221A7045
:100C70001A78002A05D0002000F08CFA00F004FB5E
:100C8000FCE71B78002BEBD100F0E6FD0028E7D055
:100C9000012000F07FFA00F0F7FAFCE700200000E6
:100CA0001C02002038040040FC7F002035817307BF
:100CB00048E801008000002000ED00E00044004111
:100CC00010E000E0E70300008100002008B5FFF716
:100CD00033FB00F0C3FA08BD10B5054B054C23608B
:100CE000FFF764FD201C2168FFF752FD201C10BD9A
:100CF000005000412002002070B5051CC0B0081C47
:100D0000161C0C1C00F067FF40006A4603230230EB
:100D10005370107076080123E218013A11785A00D6
:100D2000002906D1281C69460023FFF7C3FD40B007
:100D300070BDB342F6DA684681520133ECE7000039
:100D4000F7B5BA4A04681378B949271CFF37051C60
:100D5000102038720B705378B648B74E03709378F2
:100D60003380D178338809020B4333801179B34B38
:100D70001980517918880902084318809079B04980
:100D80000880D2790888120202430A8040227A71D0
:100D9000A84F3A78A64F120238780F1C0243A94890
:100DA0008446181C624500D1C2E020DC8021490045
:100DB0008A4200D16EE109DC812A00D192E0822AC8
:100DC00000D195E0802A00D064E18BE081235B00B4
:100DD0009A4200D1CFE000DA58E1C0239B009A424A
:100DE00000D157E1984B9A4200D14FE152E1902354
:100DF0001B019A4269D015DCD023DB009A4222D035
:100E000088231B019A4269D0A023DB009A4200D0BC
:100E100040E1201CFFF7DEFD3188286889B2FFF72A
:100E2000EDFD3BE1894B9A4200D12FE100DC31E13D
:100E3000874B9A4200D11DE1864B9A4200D029E1AE
:100E400033886B7122E133881B0A012B08D10B8890
:100E500012222868934201D80A8892B27E4911E191
:100E600033881B0A022B08D10B884322286893423F
:100E700001D80A8892B2794904E133881B0A032B0E
:100E800000D007E13388DBB2012B17D0002B07D04D
:100E9000022B00D0FEE00A882868D2B2704911E027
:100EA000042201A86F4900F085FE3B8804222868CF
:100EB000934201D83A8892B201A9E3E00A882868EF
:100EC0006949D2B2FFF718FFE8E03388201C2B7184
:100ED000FFF780FD201CFFF797FDDFE0291C01C90B
:100EE0000122CFE0614900230B8028680222CAE07A
:100EF0005E4900220A801888502210405C4A107017
:100F00001E880F20304018801888032800D9C1E0BF
:100F100012781B8808335B01E418A379002A01D0FA
:100F20009B0600E0DB06DB0F0B8028680222A9E0AD
:100F300019887F2291434E4AC9B2117018880F2137
:100F4000014019803188002900D0A3E019880029C8
:100F500000D19FE01988032900D99BE012781B88F3
:100F600008335B01E318002A02D020225A718DE079
:100F7000102159718AE002887F239A433C4BD2B2F8
:100F80001A7001880F220A4002803288002A00D09D
:100F900080E00288002A00D17CE00288032A00D980
:100FA00078E01B78002B1FD0038808335B01E3181F
:100FB0009B799A066AD50388202208335B01E318DF
:100FC0001A71038808335B01E318DB795F065DD58E
:100FD0000388402208335B01E318DA710388022298
:100FE00008335B01E3181EE0038808335B01E31854
:100FF0009B79D9064AD50388102208335B01E31890
:101000001A71038808335B01E318DB799A063DD532
:101010000388202208335B01E318DA710388012278
:1010200008335B01E3181A7130E0C0469C000020D1
:1010300083000020880000208A0000208C0000200F
:1010400086000020020300000103000021200000B0
:10105000A121000021220000241C00000400002027
:101060000C1C0000FC1B0000001C00008400002081
:10107000820000200B8808222868934201D80A8841
:1010800092B207490023FFF715FC07E0201CFFF789
:10109000A1FC03E0201C0121FFF792FCF7BDC04634
:1010A0004800002007B5054B0122019001A91868EE
:1010B000131CFFF7FFFB01200EBDC04620020020DD
:1010C00013B5054B6C4607341868211C0122FFF745
:1010D00039FC207816BDC0462002002010B5074C10
:1010E000201CFFF713FB031C0020834205D022685D
:1010F0004823FF33D05C0123184010BD200200209C
:1011000010B5054A0C1C031C191C10680123221C75
:10111000FFF7D0FB201C10BD2002002070B5084C4A
:10112000061C201C0D1CFFF7F1FA0023984205D085
:101130002068311C2A1CFFF705FC031C181C70BD1D
:1011400020020020F8B50C4C051C201C0E1CFFF7DB
:10115000DDFA0023271C341C98420AD0002C07D04B
:10116000291C221C3868FFF7EDFB241A2D18F5E71F
:10117000331C181CF8BDC0462002002008B5031C13
:10118000081C111C9847024B64221A8008BDC046F7
:1011900092000020012805D1054B064A1A60064B33
:1011A000187004E0002802D1044A014B1A6070470D
:1011B00090020020581C000098000020A41C000091
:1011C00030B50A1C1C4985B00978031C00292AD0B7
:1011D000042A01D1006804E0022A01D1008800E05D
:1011E0000078520004A98B180B3B9C1AA3420BD029
:1011F0000F210140092902D83025294300E0373169
:1012000019700009013BF1E701A930230B70782325
:101210004B700A208B1898700D20D870074B043241
:101220001B68D86803E005490968C868191CFFF7FE
:10123000A5FF05B030BDC0468E0000209002002002
:1012400072B6EFF30883044A1360036883F30888D7
:10125000436818477047C04694020020084B1A881C
:10126000002A03D01A88013A92B21A80054B1A88D4
:10127000002A03D01A88013A92B21A807047C046F9
:101280009200002090000020F0B591B008A9CC4A4F
:101290000B1C31CA31C351CA51C360CA60C3C94BA8
:1012A000C9489A687A255203520F92005258C7498A
:1012B00002609C68A4B262430C60C54900240A60C5
:1012C000C44A1460C44C2570C44CC54D2368281C06
:1012D0001B6940219847002802D0C24B64221A8023
:1012E000C14B00221860C14B1D60C14BC04DBE4FA9
:1012F0001A602A683B689A42E6D2BC4B1B681A788F
:10130000FF2A00D114E2232A00D0EBE1B94E337852
:10131000002B06D0B14BB8491B680222D868FFF7F2
:101320002DFFAD4B1B78532B3CD13B682A68934271
:101330001ED9AE4801322A609A1AB04B01681B6868
:1013400001310160AE4E9A4201D2326000E033605A
:10135000A04832680068049000F02CFC33682968CB
:101360005A182A60A14A1668F1181160A54A13702C
:101370002B68013B2B609D4B1A68013A1A60A14B08
:101380009E4A1B7811688B420AD222689148C91A7A
:10139000006892699047002802D0924B64221A801C
:1013A000C0468DE1522B0AD18A48944A23680068CE
:1013B00011685B69039098476422934B0DE04F2BB3
:1013C00005D1844B8D4A1B6812681A7078E1482B4E
:1013D00005D1804B894A1B6812681A8070E1572B2F
:1013E00005D17C4B854A1B6812681A6068E16F2B37
:1013F00003D1784B0121186807E0682B08D1754BA1
:101400007E481B6802211B880360FFF7D9FE57E165
:10141000772B06D16F4B79481B6804211B6803604A
:10142000F3E7472B13D1754B1868FFF709FF774B8C
:101430001B6883F3088862B6754B1B78002B00D1BC
:101440003EE1664B06201B681B68984738E1542B29
:1014500004D101233370614B1B6864E04E2B0CD127
:101460003378002B06D15D4B63491B680222D86894
:10147000FFF784FE0023337022E1562B57D12368F7
:101480006449D8680122FFF779FE23686249D86869
:101490000322FFF773FE614D2368291CD8680122DF
:1014A000FFF76CFE23685E49D8680D22FFF766FEE1
:1014B0002368291CD8680122FFF760FE4B4F4C4D72
:1014C0005849002339602B603A1C281C13685E1CA5
:1014D00016601B780593002B03D00368013303606B
:1014E000F4E73E4E2A683368D868FFF747FE336852
:1014F0004A49D8680122FFF741FE059929604A4907
:1015000039603A4A1368581C10601B78002B04D0CD
:10151000374B1A6801321A60F3E733682A68D868D3
:10152000FFF72CFE3368D86833490222C6E0334AFD
:10153000582B17D1244E264D366813682A68B100FF
:1015400093420AD21F4D5808E861384828801D4D43
:10155000287DC607FBD55B18F2E7204B34491B6892
:10156000D868AAE0592B79D112681A4B3149002A60
:1015700002D11B680B606CE0124D086819686B683B
:10158000104E8025AB4392087360002A61D02A4B2D
:101590000C4D2B800B4E337DDD07FBD500230A4D10
:1015A0002D680195AD08AB4203D3244D054E35801F
:1015B00046E09342F9D09D00465901334E51EEE783
:1015C000381C00000040004148020020400200207A
:1015D0003C0200208C0200203802002090020020F3
:1015E0004C02002090000020300200203402002035
:1015F000440200208E000020981C00009802002069
:101600009C0200202C020020920000209402002066
:1016100098000020741C00009D1C0000761C000037
:10162000C01C0000781C0000841C000002A5FFFF05
:101630008D1C00009400002044A5FFFF04A5FFFFBF
:101640003F4E357DEE07FBD59D0049194019D21A52
:101650009BE73C4B3C491B68D8682EE05A2B2FD1A6
:101660003A4B17681D680026EF19BD4206D028784E
:10167000311C00F013F90135061CF6E7314B3449F3
:101680001B680122D868FFF779FD07230F2232403B
:10169000111C36093031092A00DD07311820C01825
:1016A0006A468154013BF1D2236806A9D868082212
:1016B000FFF764FD23682749D8680322FFF75EFD22
:1016C000254B7A221A70254B00221A60244B1B7876
:1016D00093422DD01B4B23491B680122D868FFF78A
:1016E0004DFD25E0111C3039C8B21C4B092804D827
:1016F0001D682A01114319601AE0111C413905299E
:1017000003D81E68373A310106E0111C61390529FA
:1017100004D81868573A01010A4308E02C2A03D17B
:101720000A4A1968116001E00B490A7000221A6028
:101730000D4B1A6801321A600C4B1A680132D5E55C
:101740000040004190020020911C00008C0200200B
:10175000951C0000971C0000380200209802002011
:101760008E0000209B1C0000440200203402002058
:1017700010B51C4B01201A78032402431A701A4B2F
:101780000F2219789143197019782143197017495C
:101790000C782043087019780A401A701A783021A2
:1017A0000A431A70124B80211A6A0A431A62114BBB
:1017B000114A5A805A7852B2002AFBDBC4220F48E1
:1017C0000F499203FEF756FF0E4A002313700E4A8C
:1017D00013700E4A13700E4A13700E4A13700E4A9D
:1017E000137010BDD6440041BB440041D7440041B2
:1017F00000040040000C004019400000001C0042A2
:101800002AF60000A002002027030020A1020020E9
:10181000A4020020280300202503002008B5C1B23F
:101820000248FEF755FF012008BDC046001C0042DB
:10183000024B187E4007C00F7047C046001C004294
:1018400008B5FFF7F5FF0028FBD00248FEF746FF7A
:1018500008BDC046001C004208B5FFF7E9FF0023A1
:10186000984205D0FFF7ECFF031C233B5A4253413B
:10187000181C08BD70B5041C0D1C4618B44204D0D9
:101880002078FFF7CBFF0134F8E7281C70BD10B5B6
:10189000041CFFF7D5FF2070012010BD0B0A584033
:1018A000034B4000C05A0902484080B27047C0460E
:1018B000CE1C0000F7B50024051C0F1C261CBC42E2
:1018C00020D0FFF7BDFF114BC0B21B780190002B59
:1018D0001AD1311CFFF7E2FF0D4B061C1A88002AB3
:1018E00004D10C4A11782A1C002907D001996A1CDE
:1018F0002970802F02D11988013919800134A4B2CE
:10190000151CDCE7301C00E00120FEBD2503002093
:10191000A202002026030020F0B53E4E85B0002232
:1019200003900C1C32703C4B914201D1012201E02A
:101930003A490C801A707F231C4201D080349C43AA
:10194000FFF77EFF3378C0B2002B07D0002535703B
:10195000FFF776FF3378C0B2AB4236D1432803D0CD
:10196000712853D01528EBD1012300930120FFF7F4
:1019700055FF0098FFF752FF00998025C843C0B279
:10198000FFF74CFF039B00270293244A1388002B88
:101990001DD1214901930978002918D10198FFF739
:1019A0003DFF391C0198FFF779FF013D071C002D11
:1019B000EBD1000AC0B2FFF731FFF8B2FFF72EFFFC
:1019C000FFF73EFF3378002B0AD035701FE00299F5
:1019D000013B09781380029B019101330293DDE7FB
:1019E000C0B2062807D1009B03990133DBB28031D6
:1019F0000093803C0391002CB8D10420FFF70EFF28
:101A0000FFF71EFF044B01251C7000E00025281C79
:101A100005B0F0BD2503002026030020A20200200F
:101A2000F0B5384C87B0002301902370994201D162
:101A3000012301E0344A1180344A642613704320A4
:101A4000FFF7ECFE324FFFF7F3FE002803D1002F23
:101A500003D0013FF7E7002F03D1013E002EEED166
:101A60004DE00125FFF7ECFE2378002B38D1C0B202
:101A70000290012805D004283DD10620FFF7CEFEB4
:101A800039E005AE0221301CFFF714FF01988021D8
:101A9000FFF710FF23780390002B18D1FFF7D0FE3B
:101AA0000702FFF7CDFEBFB223783F18BFB2012B6C
:101AB0000DD0039B9F4207D13378AB4204D1EB4357
:101AC0007278DBB29A4204D01820FFF7A7FE0023F9
:101AD00003E00620FFF7A2FE029B2278002A02D034
:101AE000002626700BE0012B05D1019A6B1C803279
:101AF000DDB20192B6E7054A002313700126301CBF
:101B000007B0F0BD25030020A2020020260300201C
:101B100000350C00002934D00123002210B4884283
:101B20002CD301242407A14204D2814202D209010C
:101B30001B01F8E7E400A14204D2814202D249002D
:101B40005B00F8E7884201D3401A1A434C08A042D0
:101B500002D3001B5C0822438C08A04202D3001B66
:101B60009C082243CC08A04202D3001BDC0822437D
:101B7000002803D01B0901D00909E3E7101C10BCA1
:101B80007047002801D00020C04307B4024802A1DA
:101B90004018029003BDC046190000000029F0D093
:101BA00003B5FFF7B9FF0EBC4243891A1847C04678
:101BB0007047C04610B50023934203D0CC5CC45498
:101BC0000133F9E710BD031C8218934202D019704B
:101BD0000133FAE770470023C25C0133002AFBD1CE
:101BE000581E7047F8B5C046F8BC08BC9E46704702
:101BF000F8B5C046F8BC08BC9E467047040309040B
:101C000041726475696E6F204C4C4300417264757B
:101C1000696E6F204D4B5220576946692031303133
:101C20003000000012010002020000404123540075
:101C30000002010200010000080000001000000086
:101C400020000000400000008000000000010000B3
:101C500000020000000400001D18000041180000F0
:101C600031180000751800008F18000019190000C5
:101C7000211A00007600200041707220313120329C
:101C80003031390031333A30393A353600580A0D9F
:101C900000590A0D005A00230A0D003E00322E3072
:101CA00000000000A5100000C1100000DD100000C1
:101CB000011100001D11000001110000451100007C
:101CC0005B41726475696E6F3A58595A5D00000045
:101CD0002110422063308440A550C660E77008811F
:101CE00029914AA16BB18CC1ADD1CEE1EFF1311296
:101CF000100273325222B5529442F772D66239936F
:101D000018837BB35AA3BDD39CC3FFF3DEE36224E5
:101D1000433420040114E664C774A44485546AA5BE
:101D20004BB528850995EEE5CFF5ACC58DD5533675
:101D3000722611163006D776F6669556B4465BB70E
:101D40007AA719973887DFF7FEE79DD7BCC7C44845
:101D5000E5588668A7784008611802282338CCC95E
:101D6000EDD98EE9AFF9488969990AA92BB9F55AD5
:101D7000D44AB77A966A711A500A333A122AFDDBAE
:101D8000DCCBBFFB9EEB799B588B3BBB1AABA66CA5
:101D9000877CE44CC55C222C033C600C411CAEEDFE
:101DA0008FFDECCDCDDD2AAD0BBD688D499D977EB5
:101DB000B66ED55EF44E133E322E511E700E9FFF4E
:101DC000BEEFDDDFFCCF1BBF3AAF599F788F889104
:101DD000A981CAB1EBA10CD12DC14EF16FE18010E8
:101DE000A100C230E3200450254046706760B983EB
:101DF0009893FBA3DAB33DC31CD37FE35EF3B10238
:101E00009012F322D2323542145277625672EAB5FA
:101E1000CBA5A89589856EF54FE52CD50DC5E23487
:101E2000C324A01481046674476424540544DBA7CA
:101E3000FAB79987B8975FE77EF71DC73CD7D326D7
:101E4000F2369106B01657667676154634564CD95A
:101E50006DC90EF92FE9C899E9898AB9ABA9445827
:101E6000654806782768C018E1088238A3287DCB2A
:101E70005CDB3FEB1EFBF98BD89BBBAB9ABB754A77
:101E8000545A376A167AF10AD01AB32A923A2EFDBA
:101E90000FED6CDD4DCDAABD8BADE89DC98D267CC7
:101EA000076C645C454CA23C832CE01CC10C1FEF0A
:101EB0003EFF5DCF7CDF9BAFBABFD98FF89F176E17
:101EC000367E554E745E932EB23ED10EF01E00004B
:041ED000000000000E
:101ED40001140000090243000201008032090400D9
:101EE4000001020200000524001001042402000580
:101EF400240600010524010001070583030800FFEF
:101F040009040100020A00000007058102400000E4
:101F1400070502024000000000C2010000000800A2
:0C1F240069000000410000000000000007
:0400000300000B7975
:00000001FF

View file

@ -1,13 +1,13 @@
:10000000FC7F002015060000050600000906000020
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:100020000000000000000000000000000D060000BD
:100030000000000000000000110600004907000059
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600004D0700005D
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A418000008B5084B002B03D0C6
:1000600000000000A818000008B5084B002B03D0C2
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A4180000600000205800002000000000AC
:10009000A8180000600000205800002000000000A8
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B2197080201249400008601178B7
:1000C0000131C9B211701978F02902D819780929BB
@ -30,7 +30,7 @@
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D8FA207970BDE6
:10020000137ADA0602D5201C00F0DAFA207970BDE4
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
@ -47,14 +47,14 @@
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F044F938BD0004004018
:100310001A810021802201F046F938BD0004004016
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F003F901990F480835A9
:10038000FF18381C221C01F005F901990F480835A7
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
@ -65,7 +65,7 @@
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AEF80123EB550023337000E01C1CE3
:1004300001F0B0F80123EB550023337000E01C1CE1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
@ -78,326 +78,326 @@
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:100500005801002030B5364A1E235168082099430F
:1005100002231943516033498A6902438A61324890
:10052000324A9082908A03439382D3689807FCD51D
:100530002F4B012018701878C40704D52C48407838
:1005400040B20028F7DB01209860587840B20028BC
:10055000FBDB284C26484460587840B20028FBDB7F
:1005600082242348E4014480587840B20028FBDB11
:10057000908C8024A0439084D068C506FCD51E4C86
:100580001A48C462D4681948E506FBD5848C1B4D13
:100590002C438484D4681548E506FBD5848C022559
:1005A0002C438484D0680406FCD51048C0684506F6
:1005B000F8D5D068C406FCD500229A605A7852B2A9
:1005C000002AFBDB0E480A4A50605A7852B2002AD1
:1005D000FBDB00230B724B728B72CB7230BDC046BB
:1005E00000400041000400400C06000000080040EC
:1005F000000C004001050100B805FF7D040A000061
:10060000000703000EBEFEE70DBEFEE705BEFEE7D7
:1006100002BEFEE70E4A0F4838B5824204D10E4AA8
:100620000E4B93420ED10AE00D4C9442F7D00023BA
:10063000D1188842F3D9E55804330D60F8E700F08B
:1006400011F804E09342FAD2002102C3FAE7FEE770
:10065000000000205C000020A40300205C000020BB
:10066000A81800002E4A38B51368141C01331ED098
:10067000D1B200291BD12B4B1878012318402A4BEB
:100680000AD11D6829498D4201D118600FE0196017
:10069000274901390029FCD11960236883F30888B0
:1006A000FF239A43234B9A601D4B5B681847FFF763
:1006B00029FF62B600F09AFD00F04CF81E4B802234
:1006C00052001A601D4B1E4A041C5A60194AC02170
:1006D000106A09060002000A0143116200229A60B2
:1006E00007221A60A368201C9847164B002801D0E7
:1006F00001221A701A78002A05D0002000F088FA2A
:1007000000F000FBFCE71B78002BEBD100F0E2FDD2
:100710000028E7D0012000F07BFA00F0F3FAFCE7B4
:100720000020000038040040FC7F00203581730762
:1007300048E8010000ED00E08844004110E000E0DE
:10074000E70300007B00002008B5FFF7A9FC00F0DC
:10075000C3FA08BD10B5054B054C2360FFF770FDCB
:10076000201C2168FFF75EFD201C10BD00500041D9
:100770001802002070B5051CC0B0081C161C0C1C0B
:1007800000F017FF40006A460323023053701070D8
:1007900076080123E218013A11785A00002906D19F
:1007A000281C69460023FFF7CFFD40B070BDB3425F
:1007B000F6DA684681520133ECE70000F7B5BA4A31
:1007C00004681378B949271CFF37051C10203872BC
:1007D0000B705378B648B74E037093783380D17856
:1007E000338809020B4333801179B34B1980517957
:1007F00018880902084318809079B0490880D27996
:100800000888120202430A8040227A71A84F3A787F
:10081000A64F120238780F1C0243A9488446181CC0
:10082000624500D1C2E020DC802149008A4200D12B
:100830006EE109DC812A00D192E0822A00D195E0A4
:10084000802A00D064E18BE081235B009A4200D1D2
:10085000CFE000DA58E1C0239B009A4200D157E173
:10086000984B9A4200D14FE152E190231B019A42EA
:1008700069D015DCD023DB009A4222D088231B01EB
:100880009A4269D0A023DB009A4200D040E1201CAC
:10089000FFF7EAFD3188286889B2FFF7F9FD3BE1EF
:1008A000894B9A4200D12FE100DC31E1874B9A421B
:1008B00000D11DE1864B9A4200D029E133886B714B
:1008C00022E133881B0A012B08D10B8812222868E9
:1008D000934201D80A8892B27E4911E133881B0AFB
:1008E000022B08D10B8843222868934201D80A883A
:1008F00092B2794904E133881B0A032B00D007E147
:100900003388DBB2012B17D0002B07D0022B00D08D
:10091000FEE00A882868D2B2704911E0042201A8DA
:100920006F4900F035FE3B8804222868934201D8C5
:100930003A8892B201A9E3E00A8828686949D2B2EC
:10094000FFF718FFE8E03388201C2B71FFF78CFDC0
:10095000201CFFF7A3FDDFE0291C01C90122CFE025
:10096000614900230B8028680222CAE05E49002208
:100970000A801888502210405C4A10701E880F2090
:10098000304018801888032800D9C1E012781B88ED
:1009900008335B01E418A379002A01D09B0600E02C
:1009A000DB06DB0F0B8028680222A9E019887F2272
:1009B00091434E4AC9B2117018880F210140198025
:1009C0003188002900D0A3E01988002900D19FE0D8
:1009D0001988032900D99BE012781B8808335B0132
:1009E000E318002A02D020225A718DE0102159719B
:1009F0008AE002887F239A433C4BD2B21A70018866
:100A00000F220A4002803288002A00D080E002884B
:100A1000002A00D17CE00288032A00D978E01B7804
:100A2000002B1FD0038808335B01E3189B799A06DB
:100A30006AD50388202208335B01E3181A71038802
:100A400008335B01E318DB795F065DD5038840223C
:100A500008335B01E318DA710388022208335B0173
:100A6000E3181EE0038808335B01E3189B79D9067D
:100A70004AD50388102208335B01E3181A710388F2
:100A800008335B01E318DB799A063DD50388202201
:100A900008335B01E318DA710388012208335B0134
:100AA000E3181A7130E0C046980000207D00002055
:100AB00082000020840000208600002080000020AA
:100AC000020300000103000021200000A12100001A
:100AD00021220000F815000004000020E8150000A5
:100AE000D8150000DC1500007E0000207C000020EE
:100AF0000B8808222868934201D80A8892B20749D5
:100B00000023FFF721FC07E0201CFFF7ADFC03E00A
:100B1000201C0121FFF79EFCF7BDC04648000020C5
:100B200007B5054B0122019001A91868131CFFF7B6
:100B30000BFC01200EBDC0461802002013B5054B6A
:100B40006C4607341868211C0122FFF745FC207809
:100B500016BDC0461802002010B5074C201CFFF738
:100B60001FFB031C0020834205D022684823FF336B
:100B7000D05C0123184010BD1802002010B5054AB2
:100B80000C1C031C191C10680123221CFFF7DCFB42
:100B9000201C10BD1802002070B5084C061C201C3B
:100BA0000D1CFFF7FDFA0023984205D02068311C88
:100BB0002A1CFFF711FC031C181C70BD1802002032
:100BC000F8B50C4C051C201C0E1CFFF7E9FA00239D
:100BD000271C341C98420AD0002C07D0291C221C48
:100BE0003868FFF7F9FB241A2D18F5E7331C181C99
:100BF000F8BDC0461802002008B5031C081C111CD3
:100C00009847024B64221A8008BDC0468C00002021
:100C1000012805D1054B064A1A60064B187004E0FE
:100C2000002802D1044A014B1A6070478802002054
:100C30002C160000940000207816000030B50A1C25
:100C40001C4985B00978031C00292AD0042A01D147
:100C5000006804E0022A01D1008800E00078520018
:100C600004A98B180B3B9C1AA3420BD00F21014007
:100C7000092902D83025294300E0373119700009CD
:100C8000013BF1E701A930230B7078234B700A2058
:100C90008B1898700D20D870074B04321B68D868E9
:100CA00003E005490968C868191CFFF7A5FF05B0EE
:100CB00030BDC046880000208802002072B6EFF3E5
:100CC0000883044A1360036883F30888436818475D
:100CD0007047C0468C020020084B1A88002A03D0B7
:100CE0001A88013A92B21A80054B1A88002A03D05A
:100CF0001A88013A92B21A807047C0468C000020D0
:100D00008A000020F0B591B008A9CC4A0B1C31CA6A
:100D100031C351CA51C360CA60C3C94BC9489A683C
:100D20007A255203520F92005258C74902609C68BC
:100D3000A4B262430C60C54900240A60C44A14602E
:100D4000C44C2570C44CC54D2368281C1B69402128
:100D50009847002802D0C24B64221A80C14B00225F
:100D60001860C14B1D60C14BC04DBE4F1A602A6850
:100D70003B689A42E6D2BC4B1B681A78FF2A00D126
:100D800014E2232A00D0EBE1B94E3378002B06D0D1
:100D9000B14BB8491B680222D868FFF72DFFAD4B55
:100DA0001B78532B3CD13B682A6893421ED9AE482E
:100DB00001322A609A1AB04B01681B680131016048
:100DC000AE4E9A4201D2326000E03360A0483268F1
:100DD0000068049000F0DCFB336829685A182A6028
:100DE000A14A1668F1181160A54A13702B68013BDF
:100DF0002B609D4B1A68013A1A60A14B9E4A1B78E2
:100E000011688B420AD222689148C91A0068926917
:100E10009047002802D0924B64221A80C0468DE190
:100E2000522B0AD18A48944A2368006811685B698A
:100E3000039098476422934B0DE04F2B05D1844BD0
:100E40008D4A1B6812681A7078E1482B05D1804BD7
:100E5000894A1B6812681A8070E1572B05D17C4BB8
:100E6000854A1B6812681A6068E16F2B03D1784BC2
:100E70000121186807E0682B08D1754B7E481B6874
:100E800002211B880360FFF7D9FE57E1772B06D1BB
:100E90006F4B79481B6804211B680360F3E7472BFD
:100EA00013D1754B1868FFF709FF774B1B6883F365
:100EB000088862B6754B1B78002B00D13EE1664B6B
:100EC00006201B681B68984738E1542B04D1012386
:100ED0003370614B1B6864E04E2B0CD13378002BD0
:100EE00006D15D4B63491B680222D868FFF784FE78
:100EF0000023337022E1562B57D123686449D86808
:100F00000122FFF779FE23686249D8680322FFF7C0
:100F100073FE614D2368291CD8680122FFF76CFE1F
:100F200023685E49D8680D22FFF766FE2368291CF6
:100F3000D8680122FFF760FE4B4F4C4D5849002303
:100F400039602B603A1C281C13685E1C16601B78E5
:100F50000593002B03D0036801330360F4E73E4E92
:100F60002A683368D868FFF747FE33684A49D8686B
:100F70000122FFF741FE059929604A4939603A4A42
:100F80001368581C10601B78002B04D0374B1A686C
:100F900001321A60F3E733682A68D868FFF72CFE3D
:100FA0003368D86833490222C6E0334A582B17D138
:100FB000244E264D366813682A68B10093420AD23F
:100FC0001F4D5808E861384828801D4D287DC60708
:100FD000FBD55B18F2E7204B34491B68D868AAE0C0
:100FE000592B79D112681A4B3149002A02D11B685A
:100FF0000B606CE0124D086819686B68104E802514
:10100000AB4392087360002A61D02A4B0C4D2B80B1
:101010000B4E337DDD07FBD500230A4D2D6801956E
:10102000AD08AB4203D3244D054E358046E09342D4
:10103000F9D09D00465901334E51EEE70C160000E1
:10104000004000414002002038020020340200200D
:101050008402002030020020880200204402002088
:101060008A000020280200202C0200203C020020E0
:10107000880000206C1600009002002094020020DE
:10108000240200208C0000208C020020940000200C
:1010900048160000711600004A1600009416000061
:1010A0004C1600005816000002A5FFFF6116000054
:1010B0009000002044A5FFFF04A5FFFF3F4E357DB3
:1010C000EE07FBD59D0049194019D21A9BE73C4B0E
:1010D0003C491B68D8682EE05A2B2FD13A4B176831
:1010E0001D680026EF19BD4206D02878311C00F09B
:1010F00013F90135061CF6E7314B34491B68012210
:10110000D868FFF779FD07230F223240111C3609FA
:101110003031092A00DD07311820C0186A46815491
:10112000013BF1D2236806A9D8680822FFF764FDC5
:1011300023682749D8680322FFF75EFD254B7A22F2
:101140001A70254B00221A60244B1B7893422DD035
:101150001B4B23491B680122D868FFF74DFD25E092
:10116000111C3039C8B21C4B092804D81D682A014B
:10117000114319601AE0111C4139052903D81E6872
:10118000373A310106E0111C6139052904D8186885
:10119000573A01010A4308E02C2A03D10A4A196888
:1011A000116001E00B490A7000221A600D4B1A68A9
:1011B00001321A600C4B1A680132D5E5004000413B
:1011C00088020020651600008402002069160000D5
:1011D0006B160000300200209002002088000020E2
:1011E0006F1600003C0200202C02002010B51C4BA2
:1011F00001201A78032402431A701A4B0F2219781F
:101200009143197019782143197017490C782043BC
:10121000087019780A401A701A7830210A431A7037
:10122000124B80211A6A0A431A62114B114A5A80E2
:101230005A7852B2002AFBDBC4220F480F499203AE
:10124000FEF762FF0E4A002313700E4A13700E4A17
:1012500013700E4A13700E4A13700E4A137010BDAD
:10126000D6440041BB440041D74400410004004043
:10127000000C004019400000001C00422AF600004B
:10128000980200201F030020990200209C020020E9
:10129000200300201D03002008B5C1B20248FEF75C
:1012A00061FF012008BDC046001C0042024B187EB1
:1012B0004007C00F7047C046001C004208B5FFF74A
:1012C000F5FF0028FBD00248FEF752FF08BDC046DC
:1012D000001C004208B5FFF7E9FF0023984205D043
:1012E000FFF7ECFF031C233B5A425341181C08BD77
:1012F00070B5041C0D1C4618B44204D02078FFF7CA
:10130000CBFF0134F8E7281C70BD10B5041CFFF7B3
:10131000D5FF2070012010BD0B0A5840034B400040
:10132000C05A0902484080B27047C046A216000069
:10133000F7B50024051C0F1C261CBC4220D0FFF76B
:10134000BDFF114BC0B21B780190002B1AD1311C8C
:10135000FFF7E2FF0D4B061C1A88002A04D10C4A45
:1013600011782A1C002907D001996A1C2970802F46
:1013700002D11988013919800134A4B2151CDCE7A7
:10138000301C00E00120FEBD1D0300209A02002059
:101390001E030020F0B53E4E85B0002203900C1CC9
:1013A00032703C4B914201D1012201E03A490C805C
:1013B0001A707F231C4201D080349C43FFF77EFFCC
:1013C0003378C0B2002B07D000253570FFF776FFC9
:1013D0003378C0B2AB4236D1432803D0712853D002
:1013E0001528EBD1012300930120FFF755FF00984A
:1013F000FFF752FF00998025C843C0B2FFF74CFFAA
:10140000039B00270293244A1388002B1DD12149F6
:1014100001930978002918D10198FFF73DFF391C85
:101420000198FFF779FF013D071C002DEBD1000A61
:10143000C0B2FFF731FFF8B2FFF72EFFFFF73EFF14
:101440003378002B0AD035701FE00299013B0978F0
:101450001380029B019101330293DDE7C0B206289D
:1014600007D1009B03990133DBB280310093803CAC
:101470000391002CB8D10420FFF70EFFFFF71EFFE9
:10148000044B01251C7000E00025281C05B0F0BDB0
:101490001D0300201E0300209A020020F0B5384CE6
:1014A00087B0002301902370994201D1012301E00C
:1014B000344A1180344A642613704320FFF7ECFE4F
:1014C000324FFFF7F3FE002803D1002F03D0013F76
:1014D000F7E7002F03D1013E002EEED14DE00125AC
:1014E000FFF7ECFE2378002B38D1C0B20290012820
:1014F00005D004283DD10620FFF7CEFE39E005AE29
:101500000221301CFFF714FF01988021FFF710FF24
:1015100023780390002B18D1FFF7D0FE0702FFF7C6
:10152000CDFEBFB223783F18BFB2012B0DD0039B75
:101530009F4207D13378AB4204D1EB437278DBB2E0
:101540009A4204D01820FFF7A7FE002303E00620EC
:10155000FFF7A2FE029B2278002A02D00026267006
:101560000BE0012B05D1019A6B1C8032DDB2019298
:10157000B6E7054A002313700126301C07B0F0BD02
:101580001D0300209A0200201E03002000350C00DD
:1015900010B50023934203D0CC5CC4540133F9E767
:1015A00010BD031C8218934202D019700133FAE770
:1015B00070470023C25C0133002AFBD1581E7047DC
:1015C000F8B5C046F8BC08BC9E467047F8B5C046A2
:1015D000F8BC08BC9E467047040309044172647558
:1015E000696E6F204C4C430041726475696E6F20C8
:1015F0004D4B525A65726F0012010002020000400A
:1016000041234F0000020102000100000800000019
:1016100010000000200000004000000080000000DA
:101620000001000000020000000400009912000008
:10163000BD120000AD120000F11200000B130000FB
:10164000951300009D14000076002000446563207F
:10165000323020323031360031353A33363A343692
:1016600000580A0D00590A0D005A00230A0D003EC9
:1016700000322E3000000000210B00003D0B000066
:10168000590B00007D0B0000990B00007D0B000042
:10169000C10B00005B41726475696E6F3A58595A0C
:1016A0005D0000002110422063308440A550C660D8
:1016B000E770088129914AA16BB18CC1ADD1CEE10F
:1016C000EFF13112100273325222B5529442F77286
:1016D000D662399318837BB35AA3BDD39CC3FFF35F
:1016E000DEE36224433420040114E664C774A44496
:1016F00085546AA54BB528850995EEE5CFF5ACC5AF
:101700008DD55336722611163006D776F666955665
:10171000B4465BB77AA719973887DFF7FEE79DD7FE
:10172000BCC7C448E5588668A778400861180228F5
:101730002338CCC9EDD98EE9AFF9488969990AA94E
:101740002BB9F55AD44AB77A966A711A500A333AC5
:10175000122AFDDBDCCBBFFB9EEB799B588B3BBB9E
:101760001AABA66C877CE44CC55C222C033C600C55
:10177000411CAEED8FFDECCDCDDD2AAD0BBD688DEE
:10178000499D977EB66ED55EF44E133E322E511EA5
:10179000700E9FFFBEEFDDDFFCCF1BBF3AAF599F3E
:1017A000788F8891A981CAB1EBA10CD12DC14EF1DE
:1017B0006FE18010A100C230E32004502540467044
:1017C0006760B9839893FBA3DAB33DC31CD37FE36F
:1017D0005EF3B1029012F322D23235421452776294
:1017E0005672EAB5CBA5A89589856EF54FE52CD53F
:1017F0000DC5E234C324A0148104667447642454E4
:101800000544DBA7FAB79987B8975FE77EF71DC74E
:101810003CD7D326F2369106B01657667676154633
:1018200034564CD96DC90EF92FE9C899E9898AB99E
:10183000ABA94458654806782768C018E108823883
:10184000A3287DCB5CDB3FEB1EFBF98BD89BBBABAE
:101850009ABB754A545A376A167AF10AD01AB32AD3
:10186000923A2EFD0FED6CDD4DCDAABD8BADE89DFE
:10187000C98D267C076C645C454CA23C832CE01C23
:10188000C10C1FEF3EFF5DCF7CDF9BAFBABFD98F8E
:10189000F89F176E367E554E745E932EB23ED10E73
:0818A000F01E00000000000032
:1018A800011400000902430002010080320904000B
:1018B80000010202000005240010010424020005B2
:1018C800240600010524010001070583030800FF21
:1018D80009040100020A0000000705810240000017
:1018E800070502024000000000C2010000000800D5
:0C18F8006900000041000000000000003A
:0400000300000615DE
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C000020AC18000038B5304B27
:100660001A681C1C013221D02E4A191D1160D9B202
:1006700000291BD12C4A1078012210402B4A0AD1A4
:1006800015682B498D4201D110600FE01160294996
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343254A93601E4B5B681847FFF73AFF58
:1006B00062B600F09DFD00F04FF8204B8022520002
:1006C0001A601F4B1F4A041C5A601B4AC021106A43
:1006D00009060002000A0143116200229A60072203
:1006E0001A60A368201C9847174B002801D00122EC
:1006F0001A701A78002A05D0002000F08BFA00F05A
:1007000003FBFCE71B78002BEBD100F0E5FD002894
:10071000E7D0012000F07EFA00F0F6FAFCE7C046D0
:10072000002000001802002038040040FC7F002058
:100730003581730748E8010000ED00E0884400417E
:1007400010E000E0E70300007B00002008B5FFF7A1
:10075000A7FC00F0C3FA08BD10B5054B054C23609B
:10076000FFF76EFD201C2168FFF75CFD201C10BD0B
:10077000005000411C02002070B5051CC0B0081CD0
:10078000161C0C1C00F017FF40006A4603230230C1
:100790005370107076080123E218013A11785A005C
:1007A000002906D1281C69460023FFF7CDFD40B083
:1007B00070BDB342F6DA684681520133ECE70000BF
:1007C000F7B5BA4A04681378B949271CFF37051CE6
:1007D000102038720B705378B648B74E0370937878
:1007E0003380D178338809020B4333801179B34BBE
:1007F0001980517918880902084318809079B04906
:100800000880D2790888120202430A8040227A7155
:10081000A84F3A78A64F120238780F1C0243A94815
:100820008446181C624500D1C2E020DC80214900CA
:100830008A4200D16EE109DC812A00D192E0822A4D
:1008400000D195E0802A00D064E18BE081235B0039
:100850009A4200D1CFE000DA58E1C0239B009A42CF
:1008600000D157E1984B9A4200D14FE152E19023D9
:100870001B019A4269D015DCD023DB009A4222D0BA
:1008800088231B019A4269D0A023DB009A4200D042
:1008900040E1201CFFF7E8FD3188286889B2FFF7A6
:1008A000F7FD3BE1894B9A4200D12FE100DC31E1B9
:1008B000874B9A4200D11DE1864B9A4200D029E134
:1008C00033886B7122E133881B0A012B08D10B8816
:1008D00012222868934201D80A8892B27E4911E117
:1008E00033881B0A022B08D10B88432228689342C5
:1008F00001D80A8892B2794904E133881B0A032B94
:1009000000D007E13388DBB2012B17D0002B07D0D2
:10091000022B00D0FEE00A882868D2B2704911E0AC
:10092000042201A86F4900F035FE3B8804222868A4
:10093000934201D83A8892B201A9E3E00A88286874
:100940006949D2B2FFF718FFE8E03388201C2B7109
:10095000FFF78AFD201CFFF7A1FDDFE0291C01C97C
:100960000122CFE0614900230B8028680222CAE0FF
:100970005E4900220A801888502210405C4A10709C
:100980001E880F20304018801888032800D9C1E045
:1009900012781B8808335B01E418A379002A01D080
:1009A0009B0600E0DB06DB0F0B8028680222A9E033
:1009B00019887F2291434E4AC9B2117018880F21BD
:1009C000014019803188002900D0A3E0198800294E
:1009D00000D19FE01988032900D99BE012781B8879
:1009E00008335B01E318002A02D020225A718DE0FF
:1009F000102159718AE002887F239A433C4BD2B27E
:100A00001A7001880F220A4002803288002A00D022
:100A100080E00288002A00D17CE00288032A00D905
:100A200078E01B78002B1FD0038808335B01E318A4
:100A30009B799A066AD50388202208335B01E31864
:100A40001A71038808335B01E318DB795F065DD513
:100A50000388402208335B01E318DA71038802221D
:100A600008335B01E3181EE0038808335B01E318D9
:100A70009B79D9064AD50388102208335B01E31815
:100A80001A71038808335B01E318DB799A063DD5B8
:100A90000388202208335B01E318DA7103880122FE
:100AA00008335B01E3181A7130E0C046980000205B
:100AB0007D000020820000208400002086000020AD
:100AC000800000200203000001030000212000003C
:100AD000A121000021220000FC15000004000020DC
:100AE000EC150000DC150000E01500007E00002081
:100AF0007C0000200B8808222868934201D80A88CD
:100B000092B207490023FFF71FFC07E0201CFFF704
:100B1000ABFC03E0201C0121FFF79CFCF7BDC046A5
:100B20004800002007B5054B0122019001A9186873
:100B3000131CFFF709FC01200EBDC0461C0200205B
:100B400013B5054B6C4607341868211C0122FFF7CA
:100B500043FC207816BDC0461C02002010B5074C8F
:100B6000201CFFF71DFB031C0020834205D02268D8
:100B70004823FF33D05C0123184010BD1C02002025
:100B800010B5054A0C1C031C191C10680123221CFB
:100B9000FFF7DAFB201C10BD1C02002070B5084CCA
:100BA000061C201C0D1CFFF7FBFA0023984205D001
:100BB0002068311C2A1CFFF70FFC031C181C70BD99
:100BC0001C020020F8B50C4C051C201C0E1CFFF765
:100BD000E7FA0023271C341C98420AD0002C07D0C7
:100BE000291C221C3868FFF7F7FB241A2D18F5E79B
:100BF000331C181CF8BDC0461C02002008B5031C9D
:100C0000081C111C9847024B64221A8008BDC0467C
:100C10008C000020012805D1054B064A1A60064BBE
:100C2000187004E0002802D1044A014B1A60704792
:100C30008C02002030160000940000207C1600007A
:100C400030B50A1C1C4985B00978031C00292AD03C
:100C5000042A01D1006804E0022A01D1008800E0E2
:100C60000078520004A98B180B3B9C1AA3420BD0AE
:100C70000F210140092902D83025294300E03731EE
:100C800019700009013BF1E701A930230B707823AB
:100C90004B700A208B1898700D20D870074B0432C7
:100CA0001B68D86803E005490968C868191CFFF784
:100CB000A5FF05B030BDC046880000208C02002092
:100CC00072B6EFF30883044A1360036883F308885D
:100CD000436818477047C04690020020084B1A88A6
:100CE000002A03D01A88013A92B21A80054B1A885A
:100CF000002A03D01A88013A92B21A807047C0467F
:100D00008C0000208A000020F0B591B008A9CC4AE0
:100D10000B1C31CA31C351CA51C360CA60C3C94B2D
:100D2000C9489A687A255203520F92005258C7490F
:100D300002609C68A4B262430C60C54900240A604A
:100D4000C44A1460C44C2570C44CC54D2368281C8B
:100D50001B6940219847002802D0C24B64221A80A8
:100D6000C14B00221860C14B1D60C14BC04DBE4F2E
:100D70001A602A683B689A42E6D2BC4B1B681A7814
:100D8000FF2A00D114E2232A00D0EBE1B94E3378D8
:100D9000002B06D0B14BB8491B680222D868FFF778
:100DA0002DFFAD4B1B78532B3CD13B682A689342F7
:100DB0001ED9AE4801322A609A1AB04B01681B68EE
:100DC00001310160AE4E9A4201D2326000E03360E0
:100DD000A04832680068049000F0DCFB33682968A2
:100DE0005A182A60A14A1668F1181160A54A1370B2
:100DF0002B68013B2B609D4B1A68013A1A60A14B8E
:100E00009E4A1B7811688B420AD222689148C91AFF
:100E1000006892699047002802D0924B64221A80A1
:100E2000C0468DE1522B0AD18A48944A2368006853
:100E300011685B69039098476422934B0DE04F2B38
:100E400005D1844B8D4A1B6812681A7078E1482BD3
:100E500005D1804B894A1B6812681A8070E1572BB4
:100E600005D17C4B854A1B6812681A6068E16F2BBC
:100E700003D1784B0121186807E0682B08D1754B26
:100E80007E481B6802211B880360FFF7D9FE57E1EB
:100E9000772B06D16F4B79481B6804211B680360D0
:100EA000F3E7472B13D1754B1868FFF709FF774B12
:100EB0001B6883F3088862B6754B1B78002B00D142
:100EC0003EE1664B06201B681B68984738E1542BAF
:100ED00004D101233370614B1B6864E04E2B0CD1AD
:100EE0003378002B06D15D4B63491B680222D8681A
:100EF000FFF784FE0023337022E1562B57D123687D
:100F00006449D8680122FFF779FE23686249D868EE
:100F10000322FFF773FE614D2368291CD868012264
:100F2000FFF76CFE23685E49D8680D22FFF766FE66
:100F30002368291CD8680122FFF760FE4B4F4C4DF7
:100F40005849002339602B603A1C281C13685E1C2A
:100F500016601B780593002B03D0036801330360F0
:100F6000F4E73E4E2A683368D868FFF747FE3368D7
:100F70004A49D8680122FFF741FE059929604A498C
:100F800039603A4A1368581C10601B78002B04D053
:100F9000374B1A6801321A60F3E733682A68D86859
:100FA000FFF72CFE3368D86833490222C6E0334A83
:100FB000582B17D1244E264D366813682A68B10085
:100FC00093420AD21F4D5808E861384828801D4DC9
:100FD000287DC607FBD55B18F2E7204B34491B6818
:100FE000D868AAE0592B79D112681A4B3149002AE6
:100FF00002D11B680B606CE0124D086819686B68C1
:10100000104E8025AB4392087360002A61D02A4BB2
:101010000C4D2B800B4E337DDD07FBD500230A4D95
:101020002D680195AD08AB4203D3244D054E3580A4
:1010300046E09342F9D09D00465901334E51EEE708
:101040001016000000400041440200203C02002035
:101050003802002088020020340200208C02002088
:10106000480200208A0000202C02002030020020CC
:10107000400200208800002070160000940200202A
:1010800098020020280200208C00002090020020FE
:10109000940000204C160000751600004E1600004B
:1010A00098160000501600005C16000002A5FFFF15
:1010B000651600009000002044A5FFFF04A5FFFF77
:1010C0003F4E357DEE07FBD59D0049194019D21AD8
:1010D0009BE73C4B3C491B68D8682EE05A2B2FD12C
:1010E0003A4B17681D680026EF19BD4206D02878D4
:1010F000311C00F013F90135061CF6E7314B344979
:101100001B680122D868FFF779FD07230F223240C0
:10111000111C36093031092A00DD07311820C018AA
:101120006A468154013BF1D2236806A9D868082297
:10113000FFF764FD23682749D8680322FFF75EFDA7
:10114000254B7A221A70254B00221A60244B1B78FB
:1011500093422DD01B4B23491B680122D868FFF70F
:101160004DFD25E0111C3039C8B21C4B092804D8AC
:101170001D682A01114319601AE0111C4139052923
:1011800003D81E68373A310106E0111C6139052980
:1011900004D81868573A01010A4308E02C2A03D101
:1011A0000A4A1968116001E00B490A7000221A60AE
:1011B0000D4B1A6801321A600C4B1A680132D5E5E2
:1011C000004000418C0200206916000088020020C7
:1011D0006D1600006F1600003402002094020020FB
:1011E000880000207316000040020020300200201A
:1011F00010B51C4B01201A78032402431A701A4BB5
:101200000F221978914319701978214319701749E1
:101210000C782043087019780A401A701A78302127
:101220000A431A70124B80211A6A0A431A62114B40
:10123000114A5A805A7852B2002AFBDBC4220F4866
:101240000F499203FEF760FF0E4A002313700E4A07
:1012500013700E4A13700E4A13700E4A13700E4A22
:10126000137010BDD6440041BB440041D744004137
:1012700000040040000C004019400000001C004227
:101280002AF600009C020020230300209D0200207B
:10129000A0020020240300202103002008B5C1B2D1
:1012A0000248FEF75FFF012008BDC046001C004257
:1012B000024B187E4007C00F7047C046001C00421A
:1012C00008B5FFF7F5FF0028FBD00248FEF750FFF6
:1012D00008BDC046001C004208B5FFF7E9FF002327
:1012E000984205D0FFF7ECFF031C233B5A425341C1
:1012F000181C08BD70B5041C0D1C4618B44204D05F
:101300002078FFF7CBFF0134F8E7281C70BD10B53B
:10131000041CFFF7D5FF2070012010BD0B0A5840B8
:10132000034B4000C05A0902484080B27047C04693
:10133000A6160000F7B50024051C0F1C261CBC4295
:1013400020D0FFF7BDFF114BC0B21B780190002BDE
:101350001AD1311CFFF7E2FF0D4B061C1A88002A38
:1013600004D10C4A11782A1C002907D001996A1C63
:101370002970802F02D11988013919800134A4B253
:10138000151CDCE7301C00E00120FEBD210300201D
:101390009E02002022030020F0B53E4E85B00022C0
:1013A00003900C1C32703C4B914201D1012201E0B0
:1013B0003A490C801A707F231C4201D080349C4330
:1013C000FFF77EFF3378C0B2002B07D000253570C1
:1013D000FFF776FF3378C0B2AB4236D1432803D053
:1013E000712853D01528EBD1012300930120FFF77A
:1013F00055FF0098FFF752FF00998025C843C0B2FF
:10140000FFF74CFF039B00270293244A1388002B0D
:101410001DD1214901930978002918D10198FFF7BE
:101420003DFF391C0198FFF779FF013D071C002D96
:10143000EBD1000AC0B2FFF731FFF8B2FFF72EFF81
:10144000FFF73EFF3378002B0AD035701FE002997A
:10145000013B09781380029B019101330293DDE780
:10146000C0B2062807D1009B03990133DBB280315B
:101470000093803C0391002CB8D10420FFF70EFFAD
:10148000FFF71EFF044B01251C7000E00025281CFF
:1014900005B0F0BD21030020220300209E020020A1
:1014A000F0B5384C87B0002301902370994201D1E8
:1014B000012301E0344A1180344A6426137043202A
:1014C000FFF7ECFE324FFFF7F3FE002803D1002FA9
:1014D00003D0013FF7E7002F03D1013E002EEED1EC
:1014E0004DE00125FFF7ECFE2378002B38D1C0B288
:1014F0000290012805D004283DD10620FFF7CEFE3A
:1015000039E005AE0221301CFFF714FF019880215D
:10151000FFF710FF23780390002B18D1FFF7D0FEC0
:101520000702FFF7CDFEBFB223783F18BFB2012BF1
:101530000DD0039B9F4207D13378AB4204D1EB43DC
:101540007278DBB29A4204D01820FFF7A7FE00237E
:1015500003E00620FFF7A2FE029B2278002A02D0B9
:10156000002626700BE0012B05D1019A6B1C8032FE
:10157000DDB20192B6E7054A002313700126301C44
:1015800007B0F0BD210300209E02002022030020AE
:1015900000350C0010B50023934203D0CC5CC4543A
:1015A0000133F9E710BD031C8218934202D0197071
:1015B0000133FAE770470023C25C0133002AFBD1F4
:1015C000581E7047F8B5C046F8BC08BC9E46704728
:1015D000F8B5C046F8BC08BC9E4670470403090431
:1015E00041726475696E6F204C4C430041726475A2
:1015F000696E6F204D4B525A65726F0012010002E6
:101600000200004041234F000002010200010000DF
:101610000800000010000000200000004000000052
:101620008000000000010000000200000004000033
:101630009D120000C1120000B1120000F51200005E
:101640000F13000099130000A11400007600200081
:1016500041707220313120323031390031333A302B
:10166000393A353300580A0D00590A0D005A002343
:101670000A0D003E00322E3000000000250B000055
:10168000410B00005D0B0000810B00009D0B000072
:10169000810B0000C50B00005B41726475696E6FC1
:1016A0003A58595A5D0000002110422063308440AE
:1016B000A550C660E770088129914AA16BB18CC121
:1016C000ADD1CEE1EFF13112100273325222B55298
:1016D0009442F772D662399318837BB35AA3BDD371
:1016E0009CC3FFF3DEE36224433420040114E66468
:1016F000C774A44485546AA54BB528850995EEE5C1
:10170000CFF5ACC58DD55336722611163006D77677
:10171000F6669556B4465BB77AA719973887DFF710
:10172000FEE79DD7BCC7C448E5588668A77840083F
:10173000611802282338CCC9EDD98EE9AFF9488960
:1017400069990AA92BB9F55AD44AB77A966A711AD7
:10175000500A333A122AFDDBDCCBBFFB9EEB799BB0
:10176000588B3BBB1AABA66C877CE44CC55C222C27
:10177000033C600C411CAEED8FFDECCDCDDD2AAD00
:101780000BBD688D499D977EB66ED55EF44E133EB7
:10179000322E511E700E9FFFBEEFDDDFFCCF1BBF50
:1017A0003AAF599F788F8891A981CAB1EBA10CD12A
:1017B0002DC14EF16FE18010A100C230E320045032
:1017C000254046706760B9839893FBA3DAB33DC3A5
:1017D0001CD37FE35EF3B1029012F322D232354282
:1017E000145277625672EAB5CBA5A89589856EF535
:1017F0004FE52CD50DC5E234C324A01481046674D2
:10180000476424540544DBA7FAB79987B8975FE784
:101810007EF71DC73CD7D326F2369106B016576621
:101820007676154634564CD96DC90EF92FE9C8990C
:10183000E9898AB9ABA94458654806782768C01871
:10184000E1088238A3287DCB5CDB3FEB1EFBF98BE4
:10185000D89BBBAB9ABB754A545A376A167AF10AC1
:10186000D01AB32A923A2EFD0FED6CDD4DCDAABDF4
:101870008BADE89DC98D267C076C645C454CA23C11
:10188000832CE01CC10C1FEF3EFF5DCF7CDF9BAFC4
:10189000BABFD98FF89F176E367E554E745E932E61
:0C18A000B23ED10EF01E0000000000005F
:1018AC000114000009024300020100803209040007
:1018BC0000010202000005240010010424020005AE
:1018CC00240600010524010001070583030800FF1D
:1018DC0009040100020A0000000705810240000013
:1018EC00070502024000000000C2010000000800D1
:0C18FC0069000000410000000000000036
:040000030000060DE6
:00000001FF

View file

@ -1592,4 +1592,3 @@
:106FC40000000000000000000000000000000000BD
:040000030000433581
:00000001FF

View file

@ -1593,4 +1593,3 @@
:106FCC0000000000000000000000000000000000B5
:040000030000433581
:00000001FF

View file

@ -0,0 +1,403 @@
:10000000FC7F002001060000F1050000F50500005E
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000F9050000D2
:100030000000000000000000FD0500004107000076
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD5C000020B5
:1000600000000000A018000008B5084B002B03D0CA
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000A0180000600000205800002000000000B0
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012498002C8611178B4
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B9202DA617047780000200100002072
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0D4FA207970BDEA
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F040F938BD000400401C
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F0FFF801990F480835AE
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0AAF80123EB550023337000E01C1CE7
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
:1004700092035A6102230372827980235B42134301
:100480008371037A9A07FCD57047C0469801002013
:1004900080235B421943C9B28172704770B5A023B3
:1004A00003225B00C254134B134A5C6CC0211440FE
:1004B00089050C4346255C64FF35402444550F4DA7
:1004C00030261D6490256D0046555D6B154029430F
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B5264B1E215A6802268A436F
:10053000244C32435A60A660FFF7E4FF224B234D60
:100540006360FFF7DFFFAE84FFF7E4FF204B1B681B
:100550009B0E3F2B00D11F231E4A9B0213431E4AB2
:100560000026EA62AB62AE84FFF7D4FF1B4B022782
:10057000AB84FFF7CFFFAB8C3B43AB84FFF7CAFFE5
:1005800063883F2293431F43678062888023DB0197
:1005900013436380A660FFF7B5FF114B6360FFF75D
:1005A000B1FF104B104AC0215A60104A0906106A68
:1005B0000002000A0143116207229E601A60F8BD22
:1005C00000400041000C004006000100000800400F
:1005D00024608000FF01000080BB0A1C240500008D
:1005E0000007030010E000E0E703000000ED00E07A
:1005F0000EBEFEE70DBEFEE705BEFEE702BEFEE74D
:100600000E4A0F4838B5824204D10E4A0E4B93422F
:100610000ED10AE00D4C9442F7D00023D118884245
:10062000F3D9E55804330D60F8E700F011F804E061
:100630009342FAD2002102C3FAE7FEE7000000204D
:100640005C000020A80300205C000020A41800002B
:1006500038B5304B1A681C1C013221D02E4A191DA6
:100660001160D9B200291BD12C4A10780122104008
:100670002B4A0AD115682B498D4201D110600FE039
:100680001160294901390029FCD11160226882F3E7
:100690000888FF229343254A93601E4B5B681847E6
:1006A000FFF740FF62B600F09DFD00F04FF8204BD1
:1006B000802292029A601F4B1F4A041C5A601B4AF8
:1006C000C021106A09060002000A014311620022DB
:1006D0009A6007221A60A368201C9847174B0028CD
:1006E00001D001221A701A78002A05D0002000F0EB
:1006F0008BFA00F003FBFCE71B78002BEBD100F03A
:10070000E5FD0028E7D0012000F07EFA00F0F6FABF
:10071000FCE7C0460020000018020020380400401A
:10072000FC7F00203581730748E8010000ED00E000
:100730000044004110E000E0E70300007B000020DF
:1007400008B5FFF7ADFC00F0C3FA08BD10B5054BC6
:10075000054C2360FFF774FD201C2168FFF762FD44
:10076000201C10BD005000411C02002070B5051C6B
:10077000C0B0081C161C0C1C00F017FF40006A4695
:10078000032302305370107076080123E218013AF7
:1007900011785A00002906D1281C69460023FFF76A
:1007A000D3FD40B070BDB342F6DA684681520133E2
:1007B000ECE70000F7B5BA4A04681378B949271C7A
:1007C000FF37051C102038720B705378B648B74EAF
:1007D000037093783380D178338809020B433380D8
:1007E0001179B34B19805179188809020843188090
:1007F0009079B0490880D2790888120202430A80B1
:1008000040227A71A84F3A78A64F120238780F1C0E
:100810000243A9488446181C624500D1C2E020DC8E
:10082000802149008A4200D16EE109DC812A00D191
:1008300092E0822A00D195E0802A00D064E18BE02A
:1008400081235B009A4200D1CFE000DA58E1C02357
:100850009B009A4200D157E1984B9A4200D14FE158
:1008600052E190231B019A4269D015DCD023DB00B2
:100870009A4222D088231B019A4269D0A023DB0030
:100880009A4200D040E1201CFFF7EEFD3188286835
:1008900089B2FFF7FDFD3BE1894B9A4200D12FE180
:1008A00000DC31E1874B9A4200D11DE1864B9A4230
:1008B00000D029E133886B7122E133881B0A012BB8
:1008C00008D10B8812222868934201D80A8892B274
:1008D0007E4911E133881B0A022B08D10B88432281
:1008E0002868934201D80A8892B2794904E1338892
:1008F0001B0A032B00D007E13388DBB2012B17D092
:10090000002B07D0022B00D0FEE00A882868D2B264
:10091000704911E0042201A86F4900F035FE3B88C0
:1009200004222868934201D83A8892B201A9E3E0F0
:100930000A8828686949D2B2FFF718FFE8E03388CF
:10094000201C2B71FFF790FD201CFFF7A7FDDFE0B7
:10095000291C01C90122CFE0614900230B802868CE
:100960000222CAE05E4900220A8018885022104004
:100970005C4A10701E880F203040188018880328A9
:1009800000D9C1E012781B8808335B01E418A37911
:10099000002A01D09B0600E0DB06DB0F0B802868F5
:1009A0000222A9E019887F2291434E4AC9B21170F0
:1009B00018880F21014019803188002900D0A3E058
:1009C0001988002900D19FE01988032900D99BE0EC
:1009D00012781B8808335B01E318002A02D020221A
:1009E0005A718DE0102159718AE002887F239A4361
:1009F0003C4BD2B21A7001880F220A400280328822
:100A0000002A00D080E00288002A00D17CE0028821
:100A1000032A00D978E01B78002B1FD00388083305
:100A20005B01E3189B799A066AD503882022083374
:100A30005B01E3181A71038808335B01E318DB7963
:100A40005F065DD50388402208335B01E318DA7145
:100A50000388022208335B01E3181EE00388083391
:100A60005B01E3189B79D9064AD503881022083325
:100A70005B01E3181A71038808335B01E318DB7923
:100A80009A063DD50388202208335B01E318DA710A
:100A90000388012208335B01E3181A7130E0C04675
:100AA000980000207D0000208200002084000020AB
:100AB00086000020800000200203000001030000E7
:100AC00021200000A121000021220000F4150000D7
:100AD00004000020E0150000D0150000D41500002F
:100AE0007E0000207C0000200B88082228689342AA
:100AF00001D80A8892B207490023FFF725FC07E0D6
:100B0000201CFFF7B1FC03E0201C0121FFF7A2FC31
:100B1000F7BDC0464800002007B5054B01220190F3
:100B200001A91868131CFFF70FFC01200EBDC04679
:100B30001C02002013B5054B6C4607341868211CB5
:100B40000122FFF749FC207816BDC0461C02002098
:100B500010B5074C201CFFF723FB031C0020834229
:100B600005D022684823FF33D05C0123184010BD14
:100B70001C02002010B5054A0C1C031C191C10682F
:100B80000123221CFFF7E0FB201C10BD1C020020EB
:100B900070B5084C061C201C0D1CFFF701FB002340
:100BA000984205D02068311C2A1CFFF715FC031C55
:100BB000181C70BD1C020020F8B50C4C051C201C34
:100BC0000E1CFFF7EDFA0023271C341C98420AD0B4
:100BD000002C07D0291C221C3868FFF7FDFB241AC3
:100BE0002D18F5E7331C181CF8BDC0461C02002068
:100BF00008B5031C081C111C9847024B64221A807C
:100C000008BDC0468C000020012805D1054B064ACE
:100C10001A60064B187004E0002802D1044A014B08
:100C20001A6070478C0200202816000094000020F3
:100C30007416000030B50A1C1C4985B00978031CE5
:100C400000292AD0042A01D1006804E0022A01D137
:100C5000008800E00078520004A98B180B3B9C1A16
:100C6000A3420BD00F210140092902D83025294386
:100C700000E0373119700009013BF1E701A9302389
:100C80000B7078234B700A208B1898700D20D87049
:100C9000074B04321B68D86803E005490968C86837
:100CA000191CFFF7A5FF05B030BDC0468800002025
:100CB0008C02002072B6EFF30883044A13600368C5
:100CC00083F30888436818477047C04690020020A5
:100CD000084B1A88002A03D01A88013A92B21A8067
:100CE000054B1A88002A03D01A88013A92B21A805A
:100CF0007047C0468C0000208A000020F0B591B0FB
:100D000008A9CC4A0B1C31CA31C351CA51C360CAAD
:100D100060C3C94BC9489A687A255203520F9200A2
:100D20005258C74902609C68A4B262430C60C5492E
:100D300000240A60C44A1460C44C2570C44CC54DDC
:100D40002368281C1B6940219847002802D0C24B09
:100D500064221A80C14B00221860C14B1D60C14B38
:100D6000C04DBE4F1A602A683B689A42E6D2BC4B1F
:100D70001B681A78FF2A00D114E2232A00D0EBE185
:100D8000B94E3378002B06D0B14BB8491B6802220C
:100D9000D868FFF72DFFAD4B1B78532B3CD13B6838
:100DA0002A6893421ED9AE4801322A609A1AB04B83
:100DB00001681B6801310160AE4E9A4201D2326077
:100DC00000E03360A04832680068049000F0DCFB6B
:100DD000336829685A182A60A14A1668F118116008
:100DE000A54A13702B68013B2B609D4B1A68013A92
:100DF0001A60A14B9E4A1B7811688B420AD2226866
:100E00009148C91A006892699047002802D0924B15
:100E100064221A80C0468DE1522B0AD18A48944A36
:100E20002368006811685B69039098476422934BBC
:100E30000DE04F2B05D1844B8D4A1B6812681A7048
:100E400078E1482B05D1804B894A1B6812681A80CB
:100E500070E1572B05D17C4B854A1B6812681A60DC
:100E600068E16F2B03D1784B0121186807E0682BEC
:100E700008D1754B7E481B6802211B880360FFF771
:100E8000D9FE57E1772B06D16F4B79481B680421B7
:100E90001B680360F3E7472B13D1754B1868FFF706
:100EA00009FF774B1B6883F3088862B6754B1B7884
:100EB000002B00D13EE1664B06201B681B6898475B
:100EC00038E1542B04D101233370614B1B6864E07B
:100ED0004E2B0CD13378002B06D15D4B63491B6838
:100EE0000222D868FFF784FE0023337022E1562BDC
:100EF00057D123686449D8680122FFF779FE236837
:100F00006249D8680322FFF773FE614D2368291CEC
:100F1000D8680122FFF76CFE23685E49D8680D226D
:100F2000FFF766FE2368291CD8680122FFF760FEE0
:100F30004B4F4C4D5849002339602B603A1C281CFC
:100F400013685E1C16601B780593002B03D00368A2
:100F500001330360F4E73E4E2A683368D868FFF730
:100F600047FE33684A49D8680122FFF741FE0599D8
:100F700029604A4939603A4A1368581C10601B7846
:100F8000002B04D0374B1A6801321A60F3E733683C
:100F90002A68D868FFF72CFE3368D86833490222E4
:100FA000C6E0334A582B17D1244E264D36681368B5
:100FB0002A68B10093420AD21F4D5808E8613848A8
:100FC00028801D4D287DC607FBD55B18F2E7204B16
:100FD00034491B68D868AAE0592B79D112681A4B9A
:100FE0003149002A02D11B680B606CE0124D086881
:100FF00019686B68104E8025AB4392087360002A15
:1010000061D02A4B0C4D2B800B4E337DDD07FBD579
:1010100000230A4D2D680195AD08AB4203D3244D42
:10102000054E358046E09342F9D09D004659013384
:101030004E51EEE708160000004000414402002037
:101040003C020020380200208802002034020020E8
:101050008C020020480200208A0000202C02002080
:1010600030020020400200208800002068160000A6
:101070009402002098020020280200208C0000200A
:101080009002002094000020441600006D1600001D
:101090004616000090160000481600005416000086
:1010A00002A5FFFF5D1600009000002044A5FFFF91
:1010B00004A5FFFF3F4E357DEE07FBD59D00491986
:1010C0004019D21A9BE73C4B3C491B68D8682EE07C
:1010D0005A2B2FD13A4B17681D680026EF19BD42D5
:1010E00006D02878311C00F013F90135061CF6E70C
:1010F000314B34491B680122D868FFF779FD07237B
:101100000F223240111C36093031092A00DD073127
:101110001820C0186A468154013BF1D2236806A901
:10112000D8680822FFF764FD23682749D86803229E
:10113000FFF75EFD254B7A221A70254B00221A60BC
:10114000244B1B7893422DD01B4B23491B68012253
:10115000D868FFF74DFD25E0111C3039C8B21C4B93
:10116000092804D81D682A01114319601AE0111CCE
:101170004139052903D81E68373A310106E0111CB0
:101180006139052904D81868573A01010A4308E073
:101190002C2A03D10A4A1968116001E00B490A7030
:1011A00000221A600D4B1A6801321A600C4B1A6843
:1011B0000132D5E5004000418C020020611600009C
:1011C0008802002065160000671600003402002027
:1011D00094020020880000206B16000040020020CE
:1011E0003002002010B51C4B01201A780324024362
:1011F0001A701A4B0F2219789143197019782143EC
:10120000197017490C782043087019780A401A7031
:101210001A7830210A431A70124B80211A6A0A4345
:101220001A62114B114A5A805A7852B2002AFBDBDB
:10123000C4220F480F499203FEF766FF0E4A0023AF
:1012400013700E4A13700E4A13700E4A13700E4A32
:1012500013700E4A137010BDD6440041BB440041C8
:10126000D744004100040040000C00401940000039
:10127000001C00422AF600009C02002023030020EC
:101280009D020020A0020020240300202103002052
:1012900008B5C1B20248FEF765FF012008BDC0468F
:1012A000001C0042024B187E4007C00F7047C0462A
:1012B000001C004208B5FFF7F5FF0028FBD00248EC
:1012C000FEF756FF08BDC046001C004208B5FFF7F8
:1012D000E9FF0023984205D0FFF7ECFF031C233BF6
:1012E0005A425341181C08BD70B5041C0D1C461809
:1012F000B44204D02078FFF7CBFF0134F8E7281C74
:1013000070BD10B5041CFFF7D5FF2070012010BD83
:101310000B0A5840034B4000C05A0902484080B2B3
:101320007047C0469E160000F7B50024051C0F1C30
:10133000261CBC4220D0FFF7BDFF114BC0B21B786A
:101340000190002B1AD1311CFFF7E2FF0D4B061C58
:101350001A88002A04D10C4A11782A1C002907D0C7
:1013600001996A1C2970802F02D1198801391980CE
:101370000134A4B2151CDCE7301C00E00120FEBDE6
:10138000210300209E02002022030020F0B53E4EE3
:1013900085B0002203900C1C32703C4B914201D16D
:1013A000012201E03A490C801A707F231C4201D0CF
:1013B00080349C43FFF77EFF3378C0B2002B07D008
:1013C00000253570FFF776FF3378C0B2AB4236D1D7
:1013D000432803D0712853D01528EBD10123009363
:1013E0000120FFF755FF0098FFF752FF0099802575
:1013F000C843C0B2FFF74CFF039B00270293244A67
:101400001388002B1DD1214901930978002918D197
:101410000198FFF73DFF391C0198FFF779FF013D67
:10142000071C002DEBD1000AC0B2FFF731FFF8B264
:10143000FFF72EFFFFF73EFF3378002B0AD0357001
:101440001FE00299013B09781380029B019101334F
:101450000293DDE7C0B2062807D1009B0399013350
:10146000DBB280310093803C0391002CB8D1042082
:10147000FFF70EFFFFF71EFF044B01251C7000E075
:101480000025281C05B0F0BD210300202203002008
:101490009E020020F0B5384C87B0002301902370E5
:1014A000994201D1012301E0344A1180344A642673
:1014B00013704320FFF7ECFE324FFFF7F3FE0028D6
:1014C00003D1002F03D0013FF7E7002F03D1013EE6
:1014D000002EEED14DE00125FFF7ECFE2378002B26
:1014E00038D1C0B20290012805D004283DD1062091
:1014F000FFF7CEFE39E005AE0221301CFFF714FFE6
:1015000001988021FFF710FF23780390002B18D15A
:10151000FFF7D0FE0702FFF7CDFEBFB223783F18DA
:10152000BFB2012B0DD0039B9F4207D13378AB4252
:1015300004D1EB437278DBB29A4204D01820FFF753
:10154000A7FE002303E00620FFF7A2FE029B2278FD
:10155000002A02D0002626700BE0012B05D1019A4B
:101560006B1C8032DDB20192B6E7054A002313708E
:101570000126301C07B0F0BD210300209E02002090
:101580002203002000350C0010B50023934203D045
:10159000CC5CC4540133F9E710BD031C821893429C
:1015A00002D019700133FAE770470023C25C01339F
:1015B000002AFBD1581E7047F8B5C046F8BC08BCDD
:1015C0009E467047F8B5C046F8BC08BC9E467047BA
:1015D0000403090441726475696E6F204C4C43002A
:1015E00041726475696E6F204E4F4E4120574C41D9
:1015F0004E0000001201000202000040412357008B
:1016000000020102000100000800000010000000BC
:1016100020000000400000008000000000010000E9
:10162000000200000004000091120000B51200004A
:10163000A5120000E9120000031300008D13000042
:10164000951400007600200041707220313920325C
:101650003031390031343A33383A343800580A0DD1
:1016600000590A0D005A00230A0D003E00322E30A8
:1016700000000000190B0000350B0000510B0000AA
:10168000750B0000910B0000750B0000B90B0000FA
:101690005B41726475696E6F3A58595A5D0000007B
:1016A0002110422063308440A550C660E770088155
:1016B00029914AA16BB18CC1ADD1CEE1EFF13112CC
:1016C000100273325222B5529442F772D6623993A5
:1016D00018837BB35AA3BDD39CC3FFF3DEE362241C
:1016E000433420040114E664C774A44485546AA5F5
:1016F0004BB528850995EEE5CFF5ACC58DD55336AC
:10170000722611163006D776F6669556B4465BB744
:101710007AA719973887DFF7FEE79DD7BCC7C4487B
:10172000E5588668A7784008611802282338CCC994
:10173000EDD98EE9AFF9488969990AA92BB9F55A0B
:10174000D44AB77A966A711A500A333A122AFDDBE4
:10175000DCCBBFFB9EEB799B588B3BBB1AABA66CDB
:10176000877CE44CC55C222C033C600C411CAEED34
:101770008FFDECCDCDDD2AAD0BBD688D499D977EEB
:10178000B66ED55EF44E133E322E511E700E9FFF84
:10179000BEEFDDDFFCCF1BBF3AAF599F788F88913A
:1017A000A981CAB1EBA10CD12DC14EF16FE180101E
:1017B000A100C230E3200450254046706760B98321
:1017C0009893FBA3DAB33DC31CD37FE35EF3B1026E
:1017D0009012F322D2323542145277625672EAB531
:1017E000CBA5A89589856EF54FE52CD50DC5E234BE
:1017F000C324A01481046674476424540544DBA701
:10180000FAB79987B8975FE77EF71DC73CD7D3260D
:10181000F2369106B01657667676154634564CD990
:101820006DC90EF92FE9C899E9898AB9ABA944585D
:10183000654806782768C018E1088238A3287DCB60
:101840005CDB3FEB1EFBF98BD89BBBAB9ABB754AAD
:10185000545A376A167AF10AD01AB32A923A2EFDF0
:101860000FED6CDD4DCDAABD8BADE89DC98D267CFD
:10187000076C645C454CA23C832CE01CC10C1FEF40
:101880003EFF5DCF7CDF9BAFBABFD98FF89F176E4D
:10189000367E554E745E932EB23ED10EF01E000081
:0418A0000000000044
:1018A400011400000902430002010080320904000F
:1018B40000010202000005240010010424020005B6
:1018C400240600010524010001070583030800FF25
:1018D40009040100020A000000070581024000001B
:1018E400070502024000000000C2010000000800D9
:0C18F4006900000041000000000000003E
:0400000300000601F2
:00000001FF

View file

@ -18,44 +18,34 @@
# -----------------------------------------------------------------------------
# Paths
ifeq ($(OS),Windows_NT)
# Are we using mingw/msys/msys2/cygwin?
ifeq ($(TERM),xterm)
# this is the path coming with night build
# T=$(shell cygpath -u $(LOCALAPPDATA))
# this is the path till 1.6.5 r5
T=$(shell cygpath -u $(APPDATA))
T=$(shell cygpath -u $(LOCALAPPDATA))
MODULE_PATH?=$(T)/Arduino15/packages/arduino
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
RM=rm
SEP=/
else
# this is the path coming with night build
# MODULE_PATH?=$(LOCALAPPDATA)/Arduino15/packages/arduino
# this is the path till 1.6.5 r5
MODULE_PATH?=$(APPDATA)/Arduino15/packages/arduino
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
MODULE_PATH?=$(LOCALAPPDATA)/Arduino15/packages/arduino
RM=rm
SEP=\\
endif
else
UNAME_S := $(shell uname -s)
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
MODULE_PATH?=$(HOME)/.arduino15/packages/arduino
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
RM=rm
SEP=/
endif
ifeq ($(UNAME_S),Linux)
MODULE_PATH?=$(HOME)/.arduino15/packages/arduino
RM=rm
SEP=/
endif
ifeq ($(UNAME_S),Darwin)
MODULE_PATH?=$(HOME)/Library/Arduino15/packages/arduino/
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/arm-none-eabi-
RM=rm
SEP=/
endif
ifeq ($(UNAME_S),Darwin)
MODULE_PATH?=$(HOME)/Library/Arduino15/packages/arduino/
RM=rm
SEP=/
endif
endif
ARM_GCC_PATH?=$(MODULE_PATH)/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-
BUILD_PATH=build
# -----------------------------------------------------------------------------
@ -65,21 +55,28 @@ OBJCOPY=$(ARM_GCC_PATH)objcopy
NM=$(ARM_GCC_PATH)nm
SIZE=$(ARM_GCC_PATH)size
# -----------------------------------------------------------------------------
# Boards definitions
BOARD_ID?=arduino_zero
NAME?=samd21_sam_ba
# -----------------------------------------------------------------------------
# Compiler options
SAM_BA_INTERFACES?=SAM_BA_BOTH_INTERFACES
CFLAGS_EXTRA=-D__SAMD21G18A__ -DBOARD_ID_$(BOARD_ID) -D$(SAM_BA_INTERFACES)
CFLAGS=-mthumb -mcpu=cortex-m0plus -Wall -c -std=gnu99 -ffunction-sections -fdata-sections -nostdlib -nostartfiles --param max-inline-insns-single=500
ifdef DEBUG
CFLAGS+=-g3 -O1 -DDEBUG=1
CFLAGS+=-g3 -O1 -DDEBUG=1
else
CFLAGS+=-Os -DDEBUG=0
CFLAGS+=-Os -DDEBUG=0 -flto
endif
# Arduino Zero (PID == 0x004D)
CFLAGS_EXTRA?=-D__SAMD21G18A__ -DUSB_PID_HIGH=0x00 -DUSB_PID_LOW=0x4D
# Genuino Zero (PID == 0x024D)
# CFLAGS_EXTRA?=-D__SAMD21G18A__ -DUSB_PID_HIGH=0x02 -DUSB_PID_LOW=0x4D
ELF=$(NAME).elf
BIN=$(NAME).bin
HEX=$(NAME).hex
INCLUDES=-I"$(MODULE_PATH)/tools/CMSIS/4.0.0-atmel/CMSIS/Include/" -I"$(MODULE_PATH)/tools/CMSIS/4.0.0-atmel/Device/ATMEL/"
INCLUDES=-I"$(MODULE_PATH)/tools/CMSIS/4.5.0/CMSIS/Include/" -I"$(MODULE_PATH)/tools/CMSIS-Atmel/1.2.0/CMSIS/Device/ATMEL/"
# -----------------------------------------------------------------------------
# Linker options
@ -89,40 +86,39 @@ LDFLAGS+=-Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbol
# -----------------------------------------------------------------------------
# Source files and objects
SOURCES= \
board_driver_led.c \
board_driver_serial.c \
board_driver_usb.c \
board_init.c \
board_startup.c \
main.c \
sam_ba_usb.c \
sam_ba_cdc.c \
sam_ba_monitor.c \
sam_ba_serial.c
board_driver_i2c.c \
board_driver_led.c \
board_driver_pmic.c \
board_driver_jtag.c \
board_driver_serial.c \
board_driver_usb.c \
board_init.c \
board_startup.c \
main.c \
sam_ba_usb.c \
sam_ba_cdc.c \
sam_ba_monitor.c \
sam_ba_serial.c
OBJECTS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.o))
DEPS=$(addprefix $(BUILD_PATH)/, $(SOURCES:.c=.d))
NAME=samd21_sam_ba
ELF=$(NAME).elf
BIN=$(NAME).bin
HEX=$(NAME).hex
ifneq "test$(AVRSTUDIO_EXE_PATH)" "test"
AS_BUILD=copy_for_atmel_studio
AS_CLEAN=clean_for_atmel_studio
AS_BUILD=copy_for_atmel_studio
AS_CLEAN=clean_for_atmel_studio
else
AS_BUILD=
AS_CLEAN=
AS_BUILD=
AS_CLEAN=
endif
LD_SCRIPT=bootloader_samd21x18.ld
all: print_info $(SOURCES) $(BIN) $(HEX) $(AS_BUILD)
$(ELF): Makefile $(BUILD_PATH) $(OBJECTS)
@echo ----------------------------------------------------------
@echo Creating ELF binary
"$(CC)" -L. -L$(BUILD_PATH) $(LDFLAGS) -Os -Wl,--gc-sections -save-temps -Tbootloader_samd21x18.ld -Wl,-Map,"$(BUILD_PATH)/$(NAME).map" -o "$(BUILD_PATH)/$(ELF)" -Wl,--start-group $(OBJECTS) -lm -Wl,--end-group
"$(CC)" -L. -L$(BUILD_PATH) $(LDFLAGS) -Os -Wl,--gc-sections -save-temps -T$(LD_SCRIPT) -Wl,-Map,"$(BUILD_PATH)/$(NAME).map" -o "$(BUILD_PATH)/$(ELF)" -Wl,--start-group $(OBJECTS) -lm -Wl,--end-group
"$(NM)" "$(BUILD_PATH)/$(ELF)" >"$(BUILD_PATH)/$(NAME)_symbols.txt"
"$(SIZE)" --format=sysv -t -x $(BUILD_PATH)/$(ELF)

View file

@ -22,12 +22,8 @@
#if defined(BOARD_ID_arduino_zero)
#include "board_definitions_arduino_zero.h"
#elif defined(BOARD_ID_genuino_zero)
#include "board_definitions_genuino_zero.h"
#elif defined(BOARD_ID_arduino_mkr1000)
#include "board_definitions_arduino_mkr1000.h"
#elif defined(BOARD_ID_genuino_mkr1000)
#include "board_definitions_genuino_mkr1000.h"
#elif defined(BOARD_ID_arduino_mkrzero)
#include "board_definitions_arduino_mkrzero.h"
#elif defined(BOARD_ID_arduino_mkrfox1200)
@ -36,10 +32,16 @@
#include "board_definitions_arduino_mkrgsm1400.h"
#elif defined(BOARD_ID_arduino_mkrwan1300)
#include "board_definitions_arduino_mkrwan1300.h"
#elif defined(BOARD_ID_arduino_mkrwan1310)
#include "board_definitions_arduino_mkrwan1310.h"
#elif defined(BOARD_ID_arduino_mkrwifi1010)
#include "board_definitions_arduino_mkrwifi1010.h"
#elif defined(BOARD_ID_arduino_mkrvidor4000)
#include "board_definitions_arduino_mkrvidor4000.h"
#elif defined(BOARD_ID_arduino_mkrnb1500)
#include "board_definitions_arduino_mkrnb1500.h"
#elif defined(BOARD_ID_arduino_nano_33_iot)
#include "board_definitions_arduino_nano_33_iot.h"
#else
#error You must define a BOARD_ID and add the corresponding definitions in board_definitions.h
#endif

View file

@ -0,0 +1,98 @@
/*
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _BOARD_DEFINITIONS_H_
#define _BOARD_DEFINITIONS_H_
/*
* USB device definitions
*/
#define STRING_PRODUCT "Arduino MKR Vidor 4000"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x56
#define USB_CURRENT_MA 500
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
* quickly tapping two times on the reset button.
* BOOT_DOUBLE_TAP_ADDRESS must point to a free SRAM cell that must not
* be touched from the loaded application.
*/
#define BOOT_DOUBLE_TAP_ADDRESS (0x20007FFCul)
#define BOOT_DOUBLE_TAP_DATA (*((volatile uint32_t *) BOOT_DOUBLE_TAP_ADDRESS))
/*
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21
//#define BOOT_LOAD_PIN PIN_PA15
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
/* Frequency of the board main oscillator */
#define VARIANT_MAINOSC (32768ul)
/* Calibration values for DFLL48 pll */
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
/*
* LEDs definitions
*/
// PB08 (digital pin 32)
#define BOARD_LED_PORT (1)
#define BOARD_LED_PIN (8)
#define CONFIGURE_PMIC 1
#define PMIC_PIN_SCL 12
#define PMIC_PIN_SDA 11
#define PMIC_SERCOM SERCOM0
#define HAS_EZ6301QI 1
#define ENABLE_JTAG_LOAD 1
#define TDI 12
#define TDO 15
#define TCK 13
#define TMS 14
#define MB_INT 28
#define LAST_FLASH_PAGE (0x200000 - 0x1000)
#define SCRATCHPAD_FLASH_PAGE (0x200000 - 0x2000)
typedef struct __attribute__((packed)) {
uint32_t offset;
uint32_t length;
uint32_t sha256sum[8];
uint32_t type;
uint32_t force;
} externalFlashSignatures;
// No RX/TX led
//#define BOARD_LEDRX_PORT
//#define BOARD_LEDRX_PIN
//#define BOARD_LEDTX_PORT
//#define BOARD_LEDTX_PIN
#endif // _BOARD_DEFINITIONS_H_

View file

@ -1,6 +1,5 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@ -23,11 +22,11 @@
/*
* USB device definitions
*/
#define STRING_PRODUCT "Genuino Zero"
#define STRING_PRODUCT "Arduino MKR WAN 1310"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x02
#define USB_PID_LOW 0x4D
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x59
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
@ -42,19 +41,18 @@
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
//#define BOOT_LOAD_PIN PIN_PA21
//#define BOOT_LOAD_PIN PIN_PA15
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM0
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM0_CORE_Val
#define BOOT_USART_MODULE SERCOM5
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM5
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM5_CORE_Val
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3
#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3
#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2
#define BOOT_USART_PAD1 PINMUX_UNUSED
#define BOOT_USART_PAD0 PINMUX_UNUSED
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
@ -66,16 +64,23 @@
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
#define NVM_SW_CALIB_DFLL48M_FINE_VAL (64)
#define CONFIGURE_PMIC 1
#define PMIC_PIN_SCL 12
#define PMIC_PIN_SDA 11
#define PMIC_SERCOM SERCOM0
/*
* LEDs definitions
*/
// PA20 (digital pin 6)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (17)
#define BOARD_LED_PIN (20)
#define BOARD_LEDRX_PORT (1)
#define BOARD_LEDRX_PIN (3)
// No RX/TX led
//#define BOARD_LEDRX_PORT
//#define BOARD_LEDRX_PIN
#define BOARD_LEDTX_PORT (0)
#define BOARD_LEDTX_PIN (27)
//#define BOARD_LEDTX_PORT
//#define BOARD_LEDTX_PIN
#endif // _BOARD_DEFINITIONS_H_

View file

@ -1,6 +1,5 @@
/*
Copyright (c) 2015 Arduino LLC. All right reserved.
Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved.
Copyright (c) 2016 Arduino LLC. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@ -23,11 +22,11 @@
/*
* USB device definitions
*/
#define STRING_PRODUCT "Genuino MKR1000"
#define STRING_PRODUCT "Arduino NONA WLAN"
#define USB_VID_HIGH 0x23
#define USB_VID_LOW 0x41
#define USB_PID_HIGH 0x02
#define USB_PID_LOW 0x4E
#define USB_PID_HIGH 0x00
#define USB_PID_LOW 0x57
/*
* If BOOT_DOUBLE_TAP_ADDRESS is defined the bootloader is started by
@ -42,25 +41,25 @@
* If BOOT_LOAD_PIN is defined the bootloader is started if the selected
* pin is tied LOW.
*/
//#define BOOT_LOAD_PIN PIN_PA21 // Pin 7
//#define BOOT_LOAD_PIN PIN_PA15 // Pin 5
//#define BOOT_LOAD_PIN PIN_PA21
//#define BOOT_LOAD_PIN PIN_PA15
#define BOOT_USART_MODULE SERCOM0
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM0
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM0_CORE_Val
#define BOOT_USART_MODULE SERCOM5
#define BOOT_USART_BUS_CLOCK_INDEX PM_APBCMASK_SERCOM5
#define BOOT_USART_PER_CLOCK_INDEX GCLK_CLKCTRL_ID_SERCOM5_CORE_Val
#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2
#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3
#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2
#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3
#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2
#define BOOT_USART_PAD1 PINMUX_UNUSED
#define BOOT_USART_PAD0 PINMUX_UNUSED
/* Master clock frequency */
#define CPU_FREQUENCY (48000000ul)
#define VARIANT_MCK CPU_FREQUENCY
/* Frequency of the board main oscillator */
#define VARIANT_MAINOSC (32768ul)
#define CRYSTALLESS (1)
/* Calibration values for DFLL48 pll */
#define NVM_SW_CALIB_DFLL48M_COARSE_VAL (58)
@ -71,7 +70,7 @@
*/
// PA20 (digital pin 6)
#define BOARD_LED_PORT (0)
#define BOARD_LED_PIN (20)
#define BOARD_LED_PIN (17)
// No RX/TX led
//#define BOARD_LEDRX_PORT

View file

@ -246,14 +246,19 @@ static inline void prepareAckBitWIRE( void )
I2C_SERCOM->I2CM.CTRLB.bit.ACKACT = 0;
}
static inline void prepareCommandBitsWire(uint8_t cmd)
static inline int prepareCommandBitsWire(uint8_t cmd)
{
I2C_SERCOM->I2CM.CTRLB.bit.CMD = cmd;
int timeout = 50000;
while(I2C_SERCOM->I2CM.SYNCBUSY.bit.SYSOP)
{
if (timeout -- < 0) {
return -1;
}
// Waiting for synchronization
}
return 0;
}
static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFlag flag)
@ -261,9 +266,14 @@ static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFla
// 7-bits address + 1-bits R/W
address = (address << 0x1ul) | flag;
int timeout = 50000;
// Wait idle or owner bus mode
while ( !isBusIdleWIRE() && !isBusOwnerWIRE() );
while ( !isBusIdleWIRE() && !isBusOwnerWIRE() ) {
if (timeout -- < 0) {
return false;
}
}
// Send start and address
I2C_SERCOM->I2CM.ADDR.bit.ADDR = address;
@ -273,6 +283,9 @@ static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFla
{
while( !I2C_SERCOM->I2CM.INTFLAG.bit.MB )
{
if (timeout -- < 0) {
return false;
}
// Wait transmission complete
}
}
@ -280,6 +293,9 @@ static inline bool startTransmissionWIRE(uint8_t address, SercomWireReadWriteFla
{
while( !I2C_SERCOM->I2CM.INTFLAG.bit.SB )
{
if (timeout -- < 0) {
return false;
}
// If the slave NACKS the address, the MB bit will be set.
// In that case, send a stop condition and return false.
if (I2C_SERCOM->I2CM.INTFLAG.bit.MB) {
@ -310,9 +326,14 @@ static inline bool sendDataMasterWIRE(uint8_t data)
//Send data
I2C_SERCOM->I2CM.DATA.bit.DATA = data;
int timeout = 50000;
//Wait transmission successful
while(!I2C_SERCOM->I2CM.INTFLAG.bit.MB) {
if (timeout -- < 0) {
return false;
}
// If a bus error occurs, the MB bit may never be set.
// Check the bus error bit and bail if it's set.
if (I2C_SERCOM->I2CM.STATUS.bit.BUSERR) {
@ -410,7 +431,7 @@ uint8_t i2c_endTransmission(bool stopBit)
txBufferLen--;
}
}
if (stopBit)
{
prepareCommandBitsWire(WIRE_MASTER_ACT_STOP);

View file

@ -0,0 +1,769 @@
#include "board_driver_jtag.h"
#include <string.h>
#ifdef ENABLE_JTAG_LOAD
/* JTAG State Machine */
const int JSM[16][2] = {
/*-State- -mode= '0'- -mode= '1'- */
/*RESET */ {JS_RUNIDLE, JS_RESET },
/*RUNIDLE */ {JS_RUNIDLE, JS_SELECT_DR},
/*SELECTIR */ {JS_CAPTURE_IR, JS_RESET },
/*CAPTURE_IR*/ {JS_SHIFT_IR, JS_EXIT1_IR },
/*SHIFT_IR */ {JS_SHIFT_IR, JS_EXIT1_IR },
/*EXIT1_IR */ {JS_PAUSE_IR, JS_UPDATE_IR},
/*PAUSE_IR */ {JS_PAUSE_IR, JS_EXIT2_IR },
/*EXIT2_IR */ {JS_SHIFT_IR, JS_UPDATE_IR},
/*UPDATE_IR */ {JS_RUNIDLE, JS_SELECT_DR},
/*SELECT_DR */ {JS_CAPTURE_DR, JS_SELECT_IR},
/*CAPTURE_DR*/ {JS_SHIFT_DR, JS_EXIT1_DR },
/*SHIFT_DR */ {JS_SHIFT_DR, JS_EXIT1_DR },
/*EXIT1_DR */ {JS_PAUSE_DR, JS_UPDATE_DR},
/*PAUSE_DR */ {JS_PAUSE_DR, JS_EXIT2_DR },
/*EXIT2_DR */ {JS_SHIFT_DR, JS_UPDATE_DR},
/*UPDATE_DR */ {JS_RUNIDLE, JS_SELECT_DR}
};
static struct states {
unsigned char state;
unsigned char nSlaves;
unsigned char slaveBits;
unsigned char virSize;
unsigned char id;
unsigned char lastVir;
} jtag;
void port_pin_set_output_level(int pin, int level) {
if (level) {
outpin_on(pin);
} else {
outpin_off(pin);
}
}
int port_pin_get_input_level(int pin) {
return inpin_get(pin);
}
/******************************************************************/
/* Name: DriveSignal */
/* */
/* Parameters: signal,data,clk,buffer_enable */
/* -the name of the signal (SIG_*). */
/* -the value to be dumped to the signal,'1' or '0' */
/* -driving a LOW to HIGH transition to SIG_TCK */
/* together with signal. */
/* -buffer_enable is used by WritePort function. */
/* -If "buffer_enable"=1, */
/* -processes in "port_io_buffer" are flushed when */
/* -"PORT_IO_BUFFER_SIZE" is reached. */
/* -If "buffer_enable"=0, */
/* -"data" is dumped to port 0 at once */
/* */
/* Return Value: None. */
/* */
/* Descriptions: Dump data to signal. If clk is '1', a clock pulse*/
/* is driven after the data is dumped to signal. */
/* */
/******************************************************************/
static void DriveSignal(int signal, int data, int clk)
{
port_pin_set_output_level (signal, data);
if (clk)
{
port_pin_set_output_level (TCK, 1);
port_pin_set_output_level (TCK, 0);
}
}
/******************************************************************/
/* Name: ReadTDO */
/* */
/* Parameters: bit_count,data,inst */
/* -bit_count is the number of bits to shift out. */
/* -data is the value to shift in from lsb to msb. */
/* -inst determines if the data is an instruction. */
/* if inst=1,the number of bits shifted in/out */
/* equals to bit_count-1;if not,the number of bits */
/* does not change. */
/* */
/* Return Value: The data shifted out from TDO. The first bit */
/* shifted out is placed at the lsb of the returned */
/* integer. */
/* */
/* Descriptions: Shift out bit_count bits from TDO while shift in */
/* data to TDI. During instruction loading, the */
/* number of shifting equals to the instruction */
/* length minus 1 */
/* */
/******************************************************************/
static int ReadTDO(int bit_count, int data, int inst)
{
unsigned int record = 0;
unsigned int i;
for (i = 0; i < bit_count; i++)
{
record = record | (port_pin_get_input_level(TDO) << i);
DriveSignal(
TDI,
data & 1,
!(i == (bit_count - 1) && inst)
);
data >>= 1;
}
return record;
} /*
int ReadTDO(int bit_count,int data,int inst)
{
unsigned int tdi=0,tdo=0,record=0;
unsigned int i;
for(i=0;i<bit_count;i++)
{
unsigned int mask=1;
tdo=port_pin_get_input_level (PIN_TDO);
tdo = tdo? (1<<i):0;
record = record | tdo;
mask = mask << i;
tdi = data & mask;
tdi = tdi >> i;
if (i==(bit_count-1) && inst)
DriveSignal(PIN_TDI,tdi,0);
else
DriveSignal(PIN_TDI,tdi,1);
}
return record;
}
*/
/******************************************************************/
/* Name: ReadTDO */
/* */
/* Parameters: bit_count,data,inst */
/* -bit_count is the number of bits to shift out. */
/* -data is the value to shift in from lsb to msb. */
/* -inst determines if the data is an instruction. */
/* if inst=1,the number of bits shifted in/out */
/* equals to bit_count-1;if not,the number of bits */
/* does not change. */
/* */
/* Return Value: The data shifted out from TDO. The first bit */
/* shifted out is placed at the lsb of the returned */
/* integer. */
/* */
/* Descriptions: Shift out bit_count bits from TDO while shift in */
/* data to TDI. During instruction loading, the */
/* number of shifting equals to the instruction */
/* length minus 1 */
/* */
/******************************************************************/
static void ReadTDOBuf(int bit_count, char *txbuf, char *rxbuf, int inst)
{
unsigned int tdi = 0, tdo = 0, record = 0;
unsigned int i;
unsigned int charbit = 0;
unsigned char indata, outdata;
indata = 0;
for (i = 0; i < bit_count; i++)
{
unsigned int mask = 1;
if (charbit == 0)
if (txbuf)
outdata = *txbuf++;
else
outdata = -1;
indata = (indata >> 1) | (port_pin_get_input_level (TDO) << 7);
DriveSignal( TDI,
outdata & 1,
!(i == (bit_count - 1) && inst)
);
outdata = outdata >> 1;
charbit = (charbit + 1) & 7;
if (charbit == 0 && rxbuf)
{
*rxbuf++ = indata;
indata = 0;
}
}
}
/******************************************************************/
/* Name: AdvanceJSM */
/* */
/* Parameters: mode */
/* -the input mode to JSM. */
/* */
/* Return Value: The current JSM state. */
/* */
/* Descriptions: Function that keep track of the JSM state. It */
/* drives out signals to TMS associated with a */
/* clock pulse at TCK and updates the current state */
/* variable. */
/* */
/******************************************************************/
static int AdvanceJSM(int mode)
{
DriveSignal(TMS, mode, 1);
jtag.state = JSM[jtag.state][mode];
return (jtag.state);
}
/******************************************************************/
/* Name: Js_Updatedr */
/* */
/* Parameters: None. */
/* */
/* Return Value: 1 if the current state is not SHIFT_DR;0 if the */
/* operation is successful. */
/* */
/* Descriptions: Move the JSM to UPDATE_DR. The current state is */
/* expected to be SHIFT_DR */
/* */
/******************************************************************/
static int Js_Updatedr()
{
/* The current JSM state must be in UPDATE_IR or UPDATE_DR */
if (jtag.state != JS_SHIFT_DR)
return (1);
AdvanceJSM(1);
AdvanceJSM(1);
return (0);
}
/******************************************************************/
/* Name: Js_Shiftdr */
/* */
/* Parameters: None. */
/* */
/* Return Value: 1 if the current state is not UPDATE_DR or */
/* UPDATE_IR. 0 if the opeation is successful. */
/* */
/* Descriptions: Move the JSM to SHIFT_DR. The current state is */
/* expected to be UPDATE_DR or UPDATE_IR. */
/* */
/******************************************************************/
static int Js_Shiftdr()
{
/* The current JSM state must be in UPDATE_IR or UPDATE_DR */
if (jtag.state != JS_UPDATE_DR && jtag.state != JS_UPDATE_IR)
{
if (jtag.state != JS_RESET && jtag.state != JS_RUNIDLE)
return (1);
else
{
AdvanceJSM(0);
AdvanceJSM(0);
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
return (0);
}
}
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
return (0);
}
/******************************************************************/
/* Name: Js_Reset */
/* */
/* Parameters: None. */
/* */
/* Return Value: None. */
/* */
/* Descriptions: Reset the JSM by issuing JSM_RESET_COUNT of clock*/
/* with the TMS at HIGH. */
/* */
/******************************************************************/
static void Js_Reset()
{
int i;
for (i = 0; i < JSM_RESET_COUNT; i++)
AdvanceJSM(1);
}
/******************************************************************/
/* Name: Runidle */
/* */
/* Parameters: None. */
/* */
/* Return Value: None. */
/* */
/* Descriptions: If the current JSM is not at UPDATE_DR or */
/* UPDATE_IR state, RESET JSM and move to RUNIDLE, */
/* if it is, clock once with TMS LOW and move to */
/* RUNIDLE. */
/* */
/******************************************************************/
static void Js_Runidle()
{
int i = 0;
/* If the current state is not UPDATE_DR or UPDATE_IR, reset the JSM and move to RUN/IDLE */
if (jtag.state != JS_UPDATE_IR && jtag.state != JS_UPDATE_DR)
{
for (i = 0; i < JSM_RESET_COUNT; i++)
AdvanceJSM(1);
}
AdvanceJSM(0);
}
/******************************************************************/
/* Name: LoadJI */
/* */
/* Parameters: action,dev_count,ji_info */
/* -action is the JTAG instruction to load */
/* -dev_count is the maximum number of devices in */
/* chain. */
/* -ji_info is the pointer to an integer array that */
/* contains the JTAG instruction length for the */
/* devices in chain. */
/* */
/* Return Value: 1 if contains error;0 if not. */
/* */
/* Descriptions: Move the JSM to SHIFT_IR. Load in the JTAG */
/* instruction to all devices in chain. Then */
/* advance the JSM to UPDATE_IR. Irrespective of */
/* */
/******************************************************************/
static int LoadJI(int action)
{
int i, record = 0, error = 0;
/* Move Jtag State Machine (JSM) to RUN/IDLE */
if (jtag.state != JS_RUNIDLE && jtag.state != JS_RESET)
Js_Runidle();
/* Move JSM to SHIFT_IR */
AdvanceJSM(0);
AdvanceJSM(1);
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
record = ReadTDO(INST_LEN, action, 1);
if (record != 0x155)
{
error = -1;
// fprintf(stderr,"Error: JTAG chain broken!\nError: Bits unloaded: 0x%X\n", record);
return error;
}
/* Move JSM to UPDATE_IR */
AdvanceJSM(1);
AdvanceJSM(1);
return error;
}
/******************************************************************/
/* Name: SetupChain */
/* */
/* Parameters: dev_count,dev_seq,ji_info,action */
/* -device_count is the total device in chain */
/* -dev_seq is the device sequence in chain */
/* -ji_info is the pointer to an integer array that */
/* contains the JTAG instruction length for the */
/* devices in chain. */
/* -action is the JTAG instruction to load */
/* */
/* Return Value: None. */
/* */
/* Descriptions: Move the JSM to SHIFT_IR. Issue the JTAG */
/* instruction, "action" to the target device and */
/* BYPASS to the rest of the devices. Then, move */
/* the JSM to UPDATE_IR. */
/* */
/******************************************************************/
static void SetupChain(int action)
{
int i, record = 0;
/* Move Jtag State Machine (JSM) to RUN/IDLE */
if (jtag.state != JS_RUNIDLE && jtag.state != JS_RESET)
Js_Runidle();
/* Move JSM to SHIFT_IR */
AdvanceJSM(0);
AdvanceJSM(1);
AdvanceJSM(1);
AdvanceJSM(0);
AdvanceJSM(0);
record = ReadTDO(INST_LEN, action, 1);
/* Move JSM to UPDATE_IR */
AdvanceJSM(1);
AdvanceJSM(1);
}
/******************************************************************/
/* Name: CheckStatus */
/* */
/* Parameters: dev_seq */
/* -dev_seq is the device sequence in chains. */
/* */
/* Return Value: '0' if CONF_DONE is HIGH;'1' if it is LOW. */
/* */
/* Descriptions: Issue CHECK_STATUS instruction to the device to */
/* be configured and BYPASS for the rest of the */
/* devices. */
/* */
/* <conf_done_bit> = */
/* ((<Maximum JTAG sequence> - */
/* <JTAG sequence for CONF_DONE pin>)*3) + 1 */
/* */
/* The formula calculates the number of bits */
/* to be shifted out from the device, excluding the */
/* 1-bit register for each device in BYPASS mode. */
/* */
/******************************************************************/
int CheckStatus()
{
int bit,data=0,error=0;
int jseq_max=0,jseq_conf_done=0,conf_done_bit=0;
// fprintf( stdout, "Info: Checking Status\n" );
/* Load CHECK_STATUS instruction */
SetupChain(JI_CHECK_STATUS);
Js_Shiftdr();
/* Maximum JTAG sequence of the device in chain */
jseq_max= JSEQ_MAX;
jseq_conf_done= JSEQ_CONF_DONE;
conf_done_bit = ((jseq_max-jseq_conf_done)*3)+1;
/* Compensate for 1 bit unloaded from every Bypass register */
conf_done_bit+= 0;
for(bit=0;bit<conf_done_bit;bit++)
{
DriveSignal(TDI,0,1);
}
data = ReadTDO(1,0,0);
if(!data)
{
error++;
}
/* Move JSM to RUNIDLE */
Js_Updatedr();
Js_Runidle();
return (error);
}
static int jtagVIR(int instruction)
{
int ret = 0;
if (jtag.lastVir != instruction) {
int code = ((jtag.id + 1) << jtag.virSize) | instruction;
ret = LoadJI(JI_USER1_VIR); // Ji_Active_Disengage(device_count,ji_info);
if (ret < 0) {
return ret;
}
Js_Shiftdr();
ReadTDO(jtag.virSize + jtag.slaveBits, code, 1);
Js_Updatedr();
jtag.lastVir = instruction;
}
return ret;
}
int jtagInit(void)
{
int i, j;
unsigned int record;
inpin_init(TDO);
outpin_init(TMS);
outpin_init(TDI);
outpin_init(TCK);
mbPinSet();
port_pin_set_output_level (TMS, 1);
port_pin_set_output_level (TDI, 1);
port_pin_set_output_level (TCK, 0);
Js_Runidle();
if (CheckStatus()==0)
{
LoadJI(JI_USER1_VIR);
Js_Shiftdr();
ReadTDO(64, 0, 0);
Js_Updatedr();
LoadJI(JI_USER0_VDR); // Ji_Active_Disengage(device_count,ji_info);
record = 0;
for (i = 0; i < 8; i++)
{
Js_Shiftdr();
record = (record >> 4) | (ReadTDO(4, 0x0, 0) << 28);
Js_Updatedr();
Js_Runidle();
}
jtag.id = -1;
jtag.lastVir = -1;
if (((record >> 8) & 0x7ff) == JTAG_VENDOR_ID)
{
jtag.nSlaves = (record >> 19) & 0xff; // number of jtag slaves
for (jtag.slaveBits = 0; (1 << jtag.slaveBits) < (jtag.nSlaves + 1); jtag.slaveBits++);
jtag.virSize = record & 0xff;
for (j = 0; j < jtag.nSlaves; j++)
{
record = 0;
for (i = 0; i < 8; i++)
{
Js_Shiftdr();
record = (record >> 4) | (ReadTDO(4, 0x0, 0) << 28);
Js_Updatedr();
Js_Runidle();
}
if (((record >> 19) & 0xff) == JTAG_ID_VJTAG && ((record >> 8) & 0x7ff) == JTAG_VENDOR_ID)
{
jtag.id = j;
return 0;
}
}
}
}
return -1;
}
void jtagDeinit(void)
{
jtag.id = -1;
}
int jtagReload() {
int ret = LoadJI(JI_PULSE_NCONFIG);
Js_Shiftdr();
return ret;
}
int jtagWriteBuffer(unsigned int address, const uint8_t *data, size_t len)
{
int ret = 0;
ret = jtagVIR(JBC_WRITE);
if (ret < 0) {
return ret;
}
LoadJI(JI_USER0_VDR);
Js_Shiftdr();
address = (address << 2) | 0x00000003;
ReadTDOBuf(32, &address, 0, 0);
ReadTDOBuf(32 * len+2, data, 0, 0);
return len;
}
int jtagReadBuffer(unsigned int address, uint8_t *data, size_t len)
{
int ret = 0;
ret = jtagVIR(JBC_WRITE);
if (ret < 0) {
return ret;
}
LoadJI(JI_USER0_VDR);
Js_Shiftdr();
address = (address << 2) | 0x00000003;
ReadTDOBuf(32, &address, 0, 0);
if (len > 1)
{
address = len - 1;
ReadTDOBuf(4, &address, 0, 1);
}
ret = jtagVIR(JBC_READ);
if (ret < 0) {
return ret;
}
LoadJI(JI_USER0_VDR);
Js_Shiftdr();
for (; len > 0; len--)
{
//*data++=ReadTDO(32,*data,0);
ReadTDOBuf(32, 0, data, 0);
data += 4;
}
return len;
}
#define MB_BASE 0x00000000
#define MB_TIMEOUT 5000
/**
*/
int mbPinSet(void)
{
#ifdef MB_INT
uint32_t rpc[1];
rpc[0] = 0;
jtagWriteBuffer(MB_BASE, (const uint8_t *)rpc, 1);
outpin_init(MB_INT);
outpin_off(MB_INT);
#endif
}
/**
* Sends len words (32 bit) via messagebox
*/
int mbCmdSend(uint32_t* data, int len)
{
int ret;
#ifdef MB_INT
ret = jtagWriteBuffer(MB_BASE, (const uint8_t *)data, len);
if (ret!=len) {
return -10;
}
outpin_on(MB_INT);
outpin_off(MB_INT);
#else
jtagWriteBuffer(MB_BASE + 1, (const uint8_t *)(&data[1]), len-1);
jtagWriteBuffer(MB_BASE, (const uint8_t *)data, 1);
#endif
int retries = 1000;
do {
if (retries-- < 0) {
return -1;
}
jtagReadBuffer(MB_BASE, (uint8_t*)&ret, 1);
} while (ret);
jtagReadBuffer(MB_BASE + 1, (uint8_t*)&ret, 1);
return ret;
}
/**
* Writes len words (32 bit) via messagebox at a specified address
*/
int mbWrite(uint32_t address, void* data, int len)
{
jtagWriteBuffer(MB_BASE + address, (const uint8_t *)data, len);
return 0;
}
/**
* Reads len words (32 bit) using messagebox from a specified address
*/
int mbRead(uint32_t address, void* data, int len)
{
uint32_t *p = (uint32_t*)data;
int i;
for (i=0; i<len; i++) {
jtagReadBuffer(MB_BASE + address + i, (uint8_t*)&p[i], 1);
}
return 0;
}
#define MB_DEV_FLASH 0x01000000
uint32_t jtagBitstreamVersion()
{
uint32_t ptr[1];
uint32_t ver;
ptr[0] = 0 | 1;
ver = mbCmdSend(ptr, 1);
return ver;
}
void jtagFlashEraseBlock(uint32_t offset)
{
uint32_t rpc[256];
rpc[0] = MB_DEV_FLASH | 0x03;
rpc[1] = 2;
rpc[2] = offset;
mbCmdSend(rpc, 3);
}
void jtagFlashWriteBlock(uint32_t offset, size_t len, uint32_t* data)
{
uint32_t rpc[256];
rpc[0] = MB_DEV_FLASH | 0x04;
rpc[1] = offset;
rpc[2] = len;
memcpy(&rpc[3], data, len);
mbCmdSend(rpc, 3+((len + 3)/4));
}
void jtagFlashReadBlock(uint32_t offset, size_t len, uint8_t* buf)
{
uint32_t rpc[256];
rpc[0] = MB_DEV_FLASH | 0x05;
rpc[1] = offset;
rpc[2] = len;
mbCmdSend(rpc, 3);
mbRead(2, &rpc[2], (len + 3) / 4 + 1);
uint8_t* newbuf = (uint8_t*)&rpc[3];
for (int i = 0; i < len; i++) {
//buf[i] = reverse(newbuf[i]);
buf[i] = newbuf[i];
}
}
void clockout(uint32_t gclk, int32_t divisor)
{
GCLK_GENDIV_Type gendiv =
{
.bit.DIV = divisor, // divider, linear or 2^(.DIV+1)
.bit.ID = gclk, // GCLK_GENERATOR_X
};
GCLK->GENDIV.reg = gendiv.reg;
// setup Clock Generator
GCLK_GENCTRL_Type genctrl =
{
.bit.RUNSTDBY = 0, // Run in Standby
.bit.DIVSEL = 0, // .DIV (above) Selection: 0=linear 1=powers of 2
.bit.OE = 1, // Output Enable to observe on a port pin
.bit.OOV = 0, // Output Off Value
.bit.IDC = 1, // Improve Duty Cycle
.bit.GENEN = 1, // enable this GCLK
// select GCLK source
//.bit.SRC = GCLK_SOURCE_OSC8M,
.bit.SRC = GCLK_SOURCE_DFLL48M,
// select GCLK2 to output on
.bit.ID = gclk, // GCLK_GENERATOR_X
};
GCLK->GENCTRL.reg = genctrl.reg;
}
#endif

View file

@ -0,0 +1,92 @@
#include <sam.h>
#include "board_definitions.h"
#include <stddef.h>
#ifndef __JTAG_H__
#define __JTAG_H__
/* States of JTAG State Machine */
#define JS_RESET 0
#define JS_RUNIDLE 1
#define JS_SELECT_IR 2
#define JS_CAPTURE_IR 3
#define JS_SHIFT_IR 4
#define JS_EXIT1_IR 5
#define JS_PAUSE_IR 6
#define JS_EXIT2_IR 7
#define JS_UPDATE_IR 8
#define JS_SELECT_DR 9
#define JS_CAPTURE_DR 10
#define JS_SHIFT_DR 11
#define JS_EXIT1_DR 12
#define JS_PAUSE_DR 13
#define JS_EXIT2_DR 14
#define JS_UPDATE_DR 15
#define JS_UNDEFINE 16
#define JSM_RESET_COUNT 5
#define JTAG_VENDOR_ID 0x6E
#define JTAG_ID_VJTAG 0x84
/* JTAG Instructions */
#define JI_EXTEST 0x000
#define JI_PROGRAM 0x002
#define JI_STARTUP 0x003
#define JI_CHECK_STATUS 0x004
#define JI_SAMPLE 0x005
#define JI_IDCODE 0x006
#define JI_USERCODE 0x007
#define JI_BYPASS 0x3FF
#define JI_PULSE_NCONFIG 0x001
#define JI_CONFIG_IO 0x00D
#define JI_HIGHZ 0x00B
#define JI_CLAMP 0x00A
#define JI_ACTIVE_DISENGAGE 0x2D0
#define JI_FACTORY 0x281
#define JI_USER0_VDR 0x00C
#define JI_USER1_VIR 0x00E
#define JBC_WRITE 0
#define JBC_READ 1
#define MAX_JTAG_INIT_CLOCK 3192
#define CDF_IDCODE_LEN 32
#define IDCODE 0x20F20DD
#define JSEQ_MAX 360
#define JSEQ_CONF_DONE 224
#define INST_LEN 10
#define INIT_COUNT 200
inline void outpin_init(int pin) { PORT->Group[0].DIRSET.reg = (1<<pin); }
inline void outpin_on(int pin) { PORT->Group[0].OUTSET.reg = (1<<pin); }
inline void outpin_off(int pin) { PORT->Group[0].OUTCLR.reg = (1<<pin); }
inline void outpin_toggle(int pin) { PORT->Group[0].OUTTGL.reg = (1<<pin); }
inline void inpin_init(int pin) {
PORT->Group[0].PINCFG[pin].reg=(uint8_t)(PORT_PINCFG_INEN);
PORT->Group[0].DIRCLR.reg = (1<<pin);
}
inline int inpin_get(int pin) { return ((PORT->Group[0].IN.reg & (1<<pin)) != 0); }
#ifdef __cplusplus
extern "C" {
#endif
int jtagInit(void);
int jtagReload(void);
int jtagWriteBuffer(unsigned int address, const uint8_t* data, size_t len);
int jtagReadBuffer(unsigned int address, uint8_t* data, size_t len);
void jtagDeinit(void);
uint32_t jtagBitstreamVersion();
void jtagFlashEraseBlock(uint32_t offset);
void jtagFlashWriteBlock(uint32_t offset, size_t len, uint32_t* data);
void jtagFlashReadBlock(uint32_t offset, size_t len, uint8_t* buf);
void clockout(uint32_t gclk, int32_t divisor);
#ifdef __cplusplus
}
#endif
#endif //__JTAG_H__

View file

@ -27,7 +27,10 @@ extern uint8_t rxBuffer[1];
uint8_t readRegister(uint8_t reg) {
i2c_beginTransmission(PMIC_ADDRESS);
i2c_write(reg);
i2c_endTransmission(true);
int ret = i2c_endTransmission(true);
if (ret != 0) {
return 0;
}
i2c_requestFrom(PMIC_ADDRESS, 1, true);
return rxBuffer[0];
@ -44,8 +47,11 @@ uint8_t writeRegister(uint8_t reg, uint8_t data) {
bool disableWatchdog(void) {
uint8_t DATA = readRegister(CHARGE_TIMER_CONTROL_REGISTER);
if (DATA == 0) {
return false;
}
writeRegister(CHARGE_TIMER_CONTROL_REGISTER, (DATA & 0b11001110));
return 1;
return true;
}
bool setInputVoltageLimit(uint16_t voltage) {
@ -217,22 +223,26 @@ bool disableCharge()
return 1;
}
void apply_pmic_newdefaults()
int apply_pmic_newdefaults()
{
disableWatchdog();
if (!disableWatchdog()) {
return -1;
}
//disableDPDM();
disableCharge();
setInputVoltageLimit(4360); // default
setInputCurrentLimit(2000); // 2A
setInputCurrentLimit(3000); // 2A
setChargeCurrent(0,0,0,0,0,0); // 512mA
setChargeVoltage(4112); // 4.112V termination voltage
i2c_end();
return 0;
}
void configure_pmic()
int configure_pmic()
{
i2c_init(100000);
apply_pmic_newdefaults();
return apply_pmic_newdefaults();
}
#endif

View file

@ -40,6 +40,6 @@
#define FAULT_REGISTER 0x09
#define PMIC_VERSION_REGISTER 0x0A
void configure_pmic();
int configure_pmic();
#endif // _BOARD_DRIVER_PMIC_

View file

@ -18,6 +18,9 @@
*/
#include "board_driver_serial.h"
#include "board_definitions.h"
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
bool uart_drv_error_flag = false;
@ -102,3 +105,5 @@ void uart_read_buffer_polled(Sercom *sercom, uint8_t *ptr, uint16_t length)
*ptr++ = (uint8_t)sercom->USART.DATA.reg;
} while (length--);
}
#endif

View file

@ -22,6 +22,8 @@
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
#define NVM_USB_PAD_TRANSN_POS (45)
#define NVM_USB_PAD_TRANSN_SIZE (5)
#define NVM_USB_PAD_TRANSP_POS (50)
@ -365,3 +367,5 @@ void USB_Configure(Usb *pUsb)
usb_endpoint_table[USB_EP_COMM].DeviceDescBank[1].PCKSIZE.bit.SIZE = 0;
pUsb->DEVICE.DeviceEndpoint[USB_EP_COMM].EPSTATUSCLR.reg = USB_DEVICE_EPSTATUSCLR_BK1RDY;
}
#endif

View file

@ -18,193 +18,130 @@
*/
#include <sam.h>
#include <stdbool.h>
#include "board_definitions.h"
/**
* \brief system_init() configures the needed clocks and according Flash Read Wait States.
* At reset:
* - OSC8M clock source is enabled with a divider by 8 (1MHz).
* - Generic Clock Generator 0 (GCLKMAIN) is using OSC8M as source.
* We need to:
* 1) Enable XOSC32K clock (External on-board 32.768Hz oscillator), will be used as DFLL48M reference.
* 2) Put XOSC32K as source of Generic Clock Generator 1
* 3) Put Generic Clock Generator 1 as source for Generic Clock Multiplexer 0 (DFLL48M reference)
* 4) Enable DFLL48M clock
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
* 6) Modify PRESCaler value of OSCM to have 8MHz
* 7) Put OSC8M as source for Generic Clock Generator 3
*/
// Constants for Clock generators
#define GENERIC_CLOCK_GENERATOR_MAIN (0u)
#define GENERIC_CLOCK_GENERATOR_XOSC32K (1u)
#define GENERIC_CLOCK_GENERATOR_OSCULP32K (2u) /* Initialized at reset for WDT */
#define GENERIC_CLOCK_GENERATOR_OSC8M (3u)
// Constants for Clock multiplexers
#define GENERIC_CLOCK_MULTIPLEXER_DFLL48M (0u)
#define SYSCTRL_FUSES_OSC32K_CAL_ADDR (NVMCTRL_OTP4 + 4)
#define SYSCTRL_FUSES_OSC32K_CAL_Pos 6
#define SYSCTRL_FUSES_OSC32K_ADDR SYSCTRL_FUSES_OSC32K_CAL_ADDR
#define SYSCTRL_FUSES_OSC32K_Pos SYSCTRL_FUSES_OSC32K_CAL_Pos
#define SYSCTRL_FUSES_OSC32K_Msk (0x7Fu << SYSCTRL_FUSES_OSC32K_Pos)
void board_init(void)
{
/* Set 1 Flash Wait State for 48MHz, cf tables 20.9 and 35.27 in SAMD21 Datasheet */
NVMCTRL->CTRLB.bit.RWS = NVMCTRL_CTRLB_RWS_HALF_Val;
volatile bool g_interrupt_enabled = true;
/* Turn on the digital interface clock */
PM->APBAMASK.reg |= PM_APBAMASK_GCLK;
/* ----------------------------------------------------------------------------------------------
* 1) Enable XOSC32K clock (External on-board 32.768Hz oscillator)
*/
SYSCTRL->XOSC32K.reg = SYSCTRL_XOSC32K_STARTUP( 0x6u ) | /* cf table 15.10 of product datasheet in chapter 15.8.6 */
SYSCTRL_XOSC32K_XTALEN | SYSCTRL_XOSC32K_EN32K;
SYSCTRL->XOSC32K.bit.ENABLE = 1; /* separate call, as described in chapter 15.6.3 */
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSC32KRDY) == 0 )
{
/* Wait for oscillator stabilization */
}
/* Software reset the module to ensure it is re-initialized correctly */
/* Note: Due to synchronization, there is a delay from writing CTRL.SWRST until the reset is complete.
* CTRL.SWRST and STATUS.SYNCBUSY will both be cleared when the reset is complete, as described in chapter 13.8.1
*/
GCLK->CTRL.reg = GCLK_CTRL_SWRST;
while ( (GCLK->CTRL.reg & GCLK_CTRL_SWRST) && (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY) )
{
/* Wait for reset to complete */
}
/* ----------------------------------------------------------------------------------------------
* 2) Put XOSC32K as source of Generic Clock Generator 1
*/
GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_XOSC32K ); // Generic Clock Generator 1
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* Write Generic Clock Generator 1 configuration */
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_XOSC32K ) | // Generic Clock Generator 1
GCLK_GENCTRL_SRC_XOSC32K | // Selected source is External 32KHz Oscillator
// GCLK_GENCTRL_OE | // Output clock to a pin for tests
GCLK_GENCTRL_GENEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 3) Put Generic Clock Generator 1 as source for Generic Clock Multiplexer 0 (DFLL48M reference)
*/
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID( GENERIC_CLOCK_MULTIPLEXER_DFLL48M ) | // Generic Clock Multiplexer 0
GCLK_CLKCTRL_GEN_GCLK1 | // Generic Clock Generator 1 is source
GCLK_CLKCTRL_CLKEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 4) Enable DFLL48M clock
*/
/* DFLL Configuration in Closed Loop mode, cf product datasheet chapter 15.6.7.1 - Closed-Loop Operation */
/* Remove the OnDemand mode, Bug http://avr32.icgroup.norway.atmel.com/bugzilla/show_bug.cgi?id=9905 */
SYSCTRL->DFLLCTRL.bit.ONDEMAND = 0;
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP( 31 ) | // Coarse step is 31, half of the max value
SYSCTRL_DFLLMUL_FSTEP( 511 ) | // Fine step is 511, half of the max value
SYSCTRL_DFLLMUL_MUL( (VARIANT_MCK/VARIANT_MAINOSC) ); // External 32KHz is the reference
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
/* Write full configuration to DFLL control register */
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_MODE | /* Enable the closed loop mode */
SYSCTRL_DFLLCTRL_WAITLOCK |
SYSCTRL_DFLLCTRL_QLDIS; /* Disable Quick lock */
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
/* Enable the DFLL */
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_ENABLE;
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKC) == 0 ||
(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKF) == 0 )
{
/* Wait for locks flags */
}
while ( (SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0 )
{
/* Wait for synchronization */
}
/* ----------------------------------------------------------------------------------------------
* 5) Switch Generic Clock Generator 0 to DFLL48M. CPU will run at 48MHz.
*/
GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_MAIN ); // Generic Clock Generator 0
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
/* Write Generic Clock Generator 0 configuration */
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_MAIN ) | // Generic Clock Generator 0
GCLK_GENCTRL_SRC_DFLL48M | // Selected source is DFLL 48MHz
// GCLK_GENCTRL_OE | // Output clock to a pin for tests
GCLK_GENCTRL_IDC | // Set 50/50 duty cycle
GCLK_GENCTRL_GENEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
#if 0
/* ----------------------------------------------------------------------------------------------
* 6) Modify PRESCaler value of OSC8M to have 8MHz
*/
SYSCTRL->OSC8M.bit.PRESC = SYSCTRL_OSC8M_PRESC_1_Val;
SYSCTRL->OSC8M.bit.ONDEMAND = 0;
/* ----------------------------------------------------------------------------------------------
* 7) Put OSC8M as source for Generic Clock Generator 3
*/
GCLK->GENDIV.reg = GCLK_GENDIV_ID( GENERIC_CLOCK_GENERATOR_OSC8M ); // Generic Clock Generator 3
/* Write Generic Clock Generator 3 configuration */
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID( GENERIC_CLOCK_GENERATOR_OSC8M ) | // Generic Clock Generator 3
GCLK_GENCTRL_SRC_OSC8M | // Selected source is RC OSC 8MHz (already enabled at reset)
// GCLK_GENCTRL_OE | // Output clock to a pin for tests
GCLK_GENCTRL_GENEN;
while ( GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY )
{
/* Wait for synchronization */
}
#endif //0
/*
* Now that all system clocks are configured, we can set CPU and APBx BUS clocks.
* These values are normally the ones present after Reset.
*/
PM->CPUSEL.reg = PM_CPUSEL_CPUDIV_DIV1;
PM->APBASEL.reg = PM_APBASEL_APBADIV_DIV1_Val;
PM->APBBSEL.reg = PM_APBBSEL_APBBDIV_DIV1_Val;
PM->APBCSEL.reg = PM_APBCSEL_APBCDIV_DIV1_Val;
static void gclk_sync(void) {
while (GCLK->STATUS.reg & GCLK_STATUS_SYNCBUSY)
;
}
static void dfll_sync(void) {
while ((SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLRDY) == 0)
;
}
void board_init(void) {
NVMCTRL->CTRLB.bit.RWS = 1;
#if defined(CRYSTALLESS)
/* Configure OSC8M as source for GCLK_GEN 2 */
GCLK->GENDIV.reg = GCLK_GENDIV_ID(2); // Read GENERATOR_ID - GCLK_GEN_2
gclk_sync();
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(2) | GCLK_GENCTRL_SRC_OSC8M_Val | GCLK_GENCTRL_GENEN;
gclk_sync();
// Turn on DFLL with USB correction and sync to internal 8 mhz oscillator
SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_ENABLE;
dfll_sync();
SYSCTRL_DFLLVAL_Type dfllval_conf = {0};
uint32_t coarse =( *((uint32_t *)(NVMCTRL_OTP4)
+ (NVM_SW_CALIB_DFLL48M_COARSE_VAL / 32))
>> (NVM_SW_CALIB_DFLL48M_COARSE_VAL % 32))
& ((1 << 6) - 1);
if (coarse == 0x3f) {
coarse = 0x1f;
}
dfllval_conf.bit.COARSE = coarse;
// TODO(tannewt): Load this from a well known flash location so that it can be
// calibrated during testing.
dfllval_conf.bit.FINE = 0x1ff;
SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP( 0x1f / 4 ) | // Coarse step is 31, half of the max value
SYSCTRL_DFLLMUL_FSTEP( 10 ) |
48000;
SYSCTRL->DFLLVAL.reg = dfllval_conf.reg;
SYSCTRL->DFLLCTRL.reg = 0;
dfll_sync();
SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_MODE |
SYSCTRL_DFLLCTRL_CCDIS |
SYSCTRL_DFLLCTRL_USBCRM | /* USB correction */
SYSCTRL_DFLLCTRL_BPLCKC;
dfll_sync();
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_ENABLE ;
dfll_sync();
GCLK_CLKCTRL_Type clkctrl={0};
uint16_t temp;
GCLK->CLKCTRL.bit.ID = 2; // GCLK_ID - DFLL48M Reference
temp = GCLK->CLKCTRL.reg;
clkctrl.bit.CLKEN = 1;
clkctrl.bit.WRTLOCK = 0;
clkctrl.bit.GEN = GCLK_CLKCTRL_GEN_GCLK0_Val;
GCLK->CLKCTRL.reg = (clkctrl.reg | temp);
#else
SYSCTRL->XOSC32K.reg =
SYSCTRL_XOSC32K_STARTUP(6) | SYSCTRL_XOSC32K_XTALEN | SYSCTRL_XOSC32K_EN32K;
SYSCTRL->XOSC32K.bit.ENABLE = 1;
while ((SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_XOSC32KRDY) == 0)
;
GCLK->GENDIV.reg = GCLK_GENDIV_ID(1);
gclk_sync();
GCLK->GENCTRL.reg = GCLK_GENCTRL_ID(1) | GCLK_GENCTRL_SRC_XOSC32K | GCLK_GENCTRL_GENEN;
gclk_sync();
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID(0) | GCLK_CLKCTRL_GEN_GCLK1 | GCLK_CLKCTRL_CLKEN;
gclk_sync();
SYSCTRL->DFLLCTRL.bit.ONDEMAND = 0;
dfll_sync();
SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP(31) | SYSCTRL_DFLLMUL_FSTEP(511) |
SYSCTRL_DFLLMUL_MUL((CPU_FREQUENCY / (32 * 1024)));
dfll_sync();
SYSCTRL->DFLLCTRL.reg |=
SYSCTRL_DFLLCTRL_MODE | SYSCTRL_DFLLCTRL_WAITLOCK | SYSCTRL_DFLLCTRL_QLDIS;
dfll_sync();
SYSCTRL->DFLLCTRL.reg |= SYSCTRL_DFLLCTRL_ENABLE;
while ((SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKC) == 0 ||
(SYSCTRL->PCLKSR.reg & SYSCTRL_PCLKSR_DFLLLCKF) == 0)
;
dfll_sync();
#endif
// Configure DFLL48M as source for GCLK_GEN 0
GCLK->GENDIV.reg = GCLK_GENDIV_ID(0);
gclk_sync();
// Add GCLK_GENCTRL_OE below to output GCLK0 on the SWCLK pin.
GCLK->GENCTRL.reg =
GCLK_GENCTRL_ID(0) | GCLK_GENCTRL_SRC_DFLL48M | GCLK_GENCTRL_IDC | GCLK_GENCTRL_GENEN;
gclk_sync();
SysTick_Config(1000);
// Uncomment these two lines to output GCLK0 on the SWCLK pin.
// PORT->Group[0].PINCFG[30].bit.PMUXEN = 1;
// Set the port mux mask for odd processor pin numbers, PA30 = 30 is even number, PMUXE = PMUX Even
// PORT->Group[0].PMUX[30 / 2].reg |= PORT_PMUX_PMUXE_H;
}

View file

@ -54,7 +54,7 @@ extern int main(void);
extern void __libc_init_array(void);
/* Exception Table */
__attribute__ ((section(".isr_vector")))
__attribute__ ((used, section(".isr_vector")))
const struct ConstVectors exception_table =
{
/* Configure Initial Stack Pointer, using linker-generated symbols */

View file

@ -2,14 +2,9 @@
BOARD_ID=arduino_zero NAME=samd21_sam_ba make clean all
BOARD_ID=genuino_zero NAME=samd21_sam_ba_genuino make clean all
BOARD_ID=arduino_mkr1000 NAME=samd21_sam_ba_arduino_mkr1000 make clean all
mv -v samd21_sam_ba_arduino_mkr1000.* ../mkr1000/
BOARD_ID=genuino_mkr1000 NAME=samd21_sam_ba_genuino_mkr1000 make clean all
mv -v samd21_sam_ba_genuino_mkr1000.* ../mkr1000/
BOARD_ID=arduino_mkrzero NAME=samd21_sam_ba_arduino_mkrzero make clean all
mv -v samd21_sam_ba_arduino_mkrzero.* ../mkrzero/
@ -22,11 +17,20 @@ mv -v samd21_sam_ba_arduino_mkrgsm1400.* ../mkrgsm1400/
BOARD_ID=arduino_mkrwan1300 NAME=samd21_sam_ba_arduino_mkrwan1300 make clean all
mv -v samd21_sam_ba_arduino_mkrwan1300.* ../mkrwan1300/
BOARD_ID=arduino_mkrwan1310 NAME=samd21_sam_ba_arduino_mkrwan1310 make clean all
mv -v samd21_sam_ba_arduino_mkrwan1310.* ../mkrwan1300/
BOARD_ID=arduino_mkrwifi1010 NAME=samd21_sam_ba_arduino_mkrwifi1010 make clean all
mv -v samd21_sam_ba_arduino_mkrwifi1010.* ../mkrwifi1010/
BOARD_ID=arduino_mkrvidor4000 SAM_BA_INTERFACES=SAM_BA_USBCDC_ONLY NAME=samd21_sam_ba_arduino_mkrvidor4000 make clean all
mv -v samd21_sam_ba_arduino_mkrvidor4000.* ../mkrvidor4000/
BOARD_ID=arduino_mkrnb1500 NAME=samd21_sam_ba_arduino_mkrnb1500 make clean all
mv -v samd21_sam_ba_arduino_mkrnb1500.* ../mkrnb1500/
BOARD_ID=arduino_nano_33_iot NAME=samd21_sam_ba_arduino_nano_33_iot make clean all
mv -v samd21_sam_ba_arduino_nano_33_iot.* ../nano_33_iot/
echo Done building bootloaders!

View file

@ -23,18 +23,35 @@
#include "sam_ba_serial.h"
#include "board_definitions.h"
#include "board_driver_led.h"
#include "board_driver_i2c.h"
#include "board_driver_pmic.h"
#include "board_driver_jtag.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
extern uint32_t __sketch_vectors_ptr; // Exported value from linker script
extern void board_init(void);
#if (defined DEBUG) && (DEBUG == 1)
volatile uint32_t* pulSketch_Start_Address;
#endif
static void jump_to_application(void) {
/* Rebase the Stack Pointer */
__set_MSP( (uint32_t)(__sketch_vectors_ptr) );
/* Rebase the vector table base address */
SCB->VTOR = ((uint32_t)(&__sketch_vectors_ptr) & SCB_VTOR_TBLOFF_Msk);
/* Jump to application Reset Handler in the application */
asm("bx %0"::"r"(*pulSketch_Start_Address));
}
static volatile bool main_b_cdc_enable = false;
#ifdef CONFIGURE_PMIC
static volatile bool jump_to_app = false;
#endif
/**
* \brief Check the application startup condition
*
@ -44,41 +61,6 @@ static void check_start_application(void)
// LED_init();
// LED_off();
#if defined(BOOT_DOUBLE_TAP_ADDRESS)
#define DOUBLE_TAP_MAGIC 0x07738135
if (PM->RCAUSE.bit.POR)
{
/* On power-on initialize double-tap */
BOOT_DOUBLE_TAP_DATA = 0;
}
else
{
if (BOOT_DOUBLE_TAP_DATA == DOUBLE_TAP_MAGIC)
{
/* Second tap, stay in bootloader */
BOOT_DOUBLE_TAP_DATA = 0;
return;
}
/* First tap */
BOOT_DOUBLE_TAP_DATA = DOUBLE_TAP_MAGIC;
/* Wait 0.5sec to see if the user tap reset again.
* The loop value is based on SAMD21 default 1MHz clock @ reset.
*/
for (uint32_t i=0; i<125000; i++) /* 500ms */
/* force compiler to not optimize this... */
__asm__ __volatile__("");
/* Timeout happened, continue boot... */
BOOT_DOUBLE_TAP_DATA = 0;
}
#endif
#if (!defined DEBUG) || ((defined DEBUG) && (DEBUG == 0))
uint32_t* pulSketch_Start_Address;
#endif
/*
* Test sketch stack pointer @ &__sketch_vectors_ptr
* Stay in SAM-BA if value @ (&__sketch_vectors_ptr) == 0xFFFFFFFF (Erased flash cell value)
@ -108,6 +90,47 @@ uint32_t* pulSketch_Start_Address;
return;
}
#if defined(BOOT_DOUBLE_TAP_ADDRESS)
#define DOUBLE_TAP_MAGIC 0x07738135
if (PM->RCAUSE.bit.POR)
{
/* On power-on initialize double-tap */
BOOT_DOUBLE_TAP_DATA = 0;
}
else
{
if (BOOT_DOUBLE_TAP_DATA == DOUBLE_TAP_MAGIC)
{
/* Second tap, stay in bootloader */
BOOT_DOUBLE_TAP_DATA = 0;
return;
}
#ifdef HAS_EZ6301QI
// wait a tiny bit for the EZ6301QI to settle,
// as it's connected to RESETN and might reset
// the chip when the cable is plugged in fresh
for (uint32_t i=0; i<2500; i++) /* 10ms */
/* force compiler to not optimize this... */
__asm__ __volatile__("");
#endif
/* First tap */
BOOT_DOUBLE_TAP_DATA = DOUBLE_TAP_MAGIC;
/* Wait 0.5sec to see if the user tap reset again.
* The loop value is based on SAMD21 default 1MHz clock @ reset.
*/
for (uint32_t i=0; i<125000; i++) /* 500ms */
/* force compiler to not optimize this... */
__asm__ __volatile__("");
/* Timeout happened, continue boot... */
BOOT_DOUBLE_TAP_DATA = 0;
}
#endif
/*
#if defined(BOOT_LOAD_PIN)
volatile PortGroup *boot_port = (volatile PortGroup *)(&(PORT->Group[BOOT_LOAD_PIN / 32]));
@ -130,15 +153,12 @@ uint32_t* pulSketch_Start_Address;
*/
// LED_on();
#ifdef CONFIGURE_PMIC
jump_to_app = true;
#else
jump_to_application();
#endif
/* Rebase the Stack Pointer */
__set_MSP( (uint32_t)(__sketch_vectors_ptr) );
/* Rebase the vector table base address */
SCB->VTOR = ((uint32_t)(&__sketch_vectors_ptr) & SCB_VTOR_TBLOFF_Msk);
/* Jump to application Reset Handler in the application */
asm("bx %0"::"r"(*pulSketch_Start_Address));
}
#if DEBUG_ENABLE
@ -155,7 +175,7 @@ uint32_t* pulSketch_Start_Address;
*/
int main(void)
{
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
P_USB_CDC pCdc;
#endif
DEBUG_PIN_HIGH;
@ -168,21 +188,58 @@ int main(void)
board_init();
__enable_irq();
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#ifdef CONFIGURE_PMIC
configure_pmic();
#endif
#ifdef ENABLE_JTAG_LOAD
uint32_t temp ;
// Get whole current setup for both odd and even pins and remove odd one
temp = (PORT->Group[0].PMUX[27 >> 1].reg) & PORT_PMUX_PMUXE( 0xF ) ;
// Set new muxing
PORT->Group[0].PMUX[27 >> 1].reg = temp|PORT_PMUX_PMUXO( 7 ) ;
// Enable port mux
PORT->Group[0].PINCFG[27].reg |= PORT_PINCFG_PMUXEN ;
clockout(0, 1);
jtagInit();
if ((jtagBitstreamVersion() & 0xFF000000) != 0xB0000000) {
// FPGA is not in the bootloader, restart it
jtagReload();
}
#endif
#ifdef CONFIGURE_PMIC
if (jump_to_app == true) {
jump_to_application();
}
#endif
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* UART is enabled in all cases */
serial_open();
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
pCdc = usb_init();
#endif
DEBUG_PIN_LOW;
/* Initialize LEDs */
LED_init();
LEDRX_init();
LEDRX_off();
LEDTX_init();
LEDTX_off();
/* Start the sys tick (1 ms) */
SysTick_Config(1000);
/* Wait for a complete enum on usb or a '#' char on serial line */
while (1)
{
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
if (pCdc->IsConfigured(pCdc) != 0)
{
main_b_cdc_enable = true;
@ -200,7 +257,7 @@ int main(void)
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* Check if a '#' has been received */
if (!main_b_cdc_enable && serial_sharp_received())
{
@ -214,3 +271,10 @@ int main(void)
#endif
}
}
void SysTick_Handler(void)
{
LED_pulse();
sam_ba_monitor_sys_tick();
}

View file

@ -23,8 +23,11 @@
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
#include "board_driver_usb.h"
#include "board_driver_jtag.h"
#include "sam_ba_usb.h"
#include "sam_ba_cdc.h"
#include "board_driver_led.h"
#include <stdlib.h>
const char RomBOOT_Version[] = SAM_BA_VERSION;
const char RomBOOT_ExtendedCapabilities[] = "[Arduino:XYZ]";
@ -48,7 +51,7 @@ typedef struct
uint32_t (*getdata_xmd)(void* data, uint32_t length);
} t_monitor_if;
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* Initialize structures with function pointers from supported interfaces */
const t_monitor_if uart_if =
{
@ -62,7 +65,7 @@ const t_monitor_if uart_if =
};
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
//Please note that USB doesn't use Xmodem protocol, since USB already includes flow control and data verification
//Data are simply forwarded without further coding.
const t_monitor_if usbcdc_if =
@ -84,9 +87,14 @@ t_monitor_if * ptr_monitor_if;
volatile bool b_terminal_mode = false;
volatile bool b_sam_ba_interface_usart = false;
/* Pulse generation counters to keep track of the time remaining for each pulse type */
#define TX_RX_LED_PULSE_PERIOD 100
volatile uint16_t txLEDPulse = 0; // time remaining for Tx LED pulse
volatile uint16_t rxLEDPulse = 0; // time remaining for Rx LED pulse
void sam_ba_monitor_init(uint8_t com_interface)
{
#if SAM_BA_INTERFACE == SAM_BA_UART_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
//Selects the requested interface for future actions
if (com_interface == SAM_BA_INTERFACE_USART)
{
@ -94,7 +102,7 @@ void sam_ba_monitor_init(uint8_t com_interface)
b_sam_ba_interface_usart = true;
}
#endif
#if SAM_BA_INTERFACE == SAM_BA_USBCDC_ONLY || SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES
#if defined(SAM_BA_USBCDC_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
if (com_interface == SAM_BA_INTERFACE_USBCDC)
{
ptr_monitor_if = (t_monitor_if*) &usbcdc_if;
@ -102,8 +110,74 @@ void sam_ba_monitor_init(uint8_t com_interface)
#endif
}
/*
* Central SAM-BA monitor putdata function using the board LEDs
*/
static uint32_t sam_ba_putdata(t_monitor_if* pInterface, void const* data, uint32_t length)
{
uint32_t result ;
result=pInterface->putdata(data, length);
LEDTX_on();
txLEDPulse = TX_RX_LED_PULSE_PERIOD;
return result;
}
/*
* Central SAM-BA monitor getdata function using the board LEDs
*/
static uint32_t sam_ba_getdata(t_monitor_if* pInterface, void* data, uint32_t length)
{
uint32_t result ;
result=pInterface->getdata(data, length);
if (result)
{
LEDRX_on();
rxLEDPulse = TX_RX_LED_PULSE_PERIOD;
}
return result;
}
/*
* Central SAM-BA monitor putdata function using the board LEDs
*/
static uint32_t sam_ba_putdata_xmd(t_monitor_if* pInterface, void const* data, uint32_t length)
{
uint32_t result ;
result=pInterface->putdata_xmd(data, length);
LEDTX_on();
txLEDPulse = TX_RX_LED_PULSE_PERIOD;
return result;
}
/*
* Central SAM-BA monitor getdata function using the board LEDs
*/
static uint32_t sam_ba_getdata_xmd(t_monitor_if* pInterface, void* data, uint32_t length)
{
uint32_t result ;
result=pInterface->getdata_xmd(data, length);
if (result)
{
LEDRX_on();
rxLEDPulse = TX_RX_LED_PULSE_PERIOD;
}
return result;
}
/**
* \brief This function allows data rx by USART
* \brief This function allows data emission by USART
*
* \param *data Data pointer
* \param length Length of the data
@ -141,10 +215,10 @@ void sam_ba_putdata_term(uint8_t* data, uint32_t length)
buf[1] = 'x';
buf[length * 2 + 2] = '\n';
buf[length * 2 + 3] = '\r';
ptr_monitor_if->putdata(buf, length * 2 + 4);
sam_ba_putdata(ptr_monitor_if, buf, length * 2 + 4);
}
else
ptr_monitor_if->putdata(data, length);
sam_ba_putdata(ptr_monitor_if, data, length);
return;
}
@ -187,12 +261,17 @@ static void put_uint32(uint32_t n)
buff[7-i] = d > 9 ? 'A' + d - 10 : '0' + d;
}
ptr_monitor_if->putdata(buff, 8);
sam_ba_putdata( ptr_monitor_if, buff, 8);
}
#ifdef ENABLE_JTAG_LOAD
static uint32_t offset = __UINT32_MAX__;
static bool flashNeeded = false;
#endif
static void sam_ba_monitor_loop(void)
{
length = ptr_monitor_if->getdata(data, SIZEBUFMAX);
length = sam_ba_getdata(ptr_monitor_if, data, SIZEBUFMAX);
ptr = data;
for (i = 0; i < length; i++, ptr++)
@ -203,7 +282,7 @@ static void sam_ba_monitor_loop(void)
{
if (b_terminal_mode)
{
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
if (command == 'S')
{
@ -235,13 +314,13 @@ static void sam_ba_monitor_loop(void)
ptr--;
//Do we expect more data ?
if(j<current_number)
ptr_monitor_if->getdata_xmd(ptr_data, current_number-j);
sam_ba_getdata_xmd(ptr_monitor_if, ptr_data, current_number-j);
__asm("nop");
}
else if (command == 'R')
{
ptr_monitor_if->putdata_xmd(ptr_data, current_number);
sam_ba_putdata_xmd(ptr_monitor_if, ptr_data, current_number);
}
else if (command == 'O')
{
@ -282,35 +361,35 @@ static void sam_ba_monitor_loop(void)
else if (command == 'T')
{
b_terminal_mode = 1;
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata(ptr_monitor_if, "\n\r", 2);
}
else if (command == 'N')
{
if (b_terminal_mode == 0)
{
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
b_terminal_mode = 0;
}
else if (command == 'V')
{
ptr_monitor_if->putdata("v", 1);
ptr_monitor_if->putdata((uint8_t *) RomBOOT_Version, strlen(RomBOOT_Version));
ptr_monitor_if->putdata(" ", 1);
ptr_monitor_if->putdata((uint8_t *) RomBOOT_ExtendedCapabilities, strlen(RomBOOT_ExtendedCapabilities));
ptr_monitor_if->putdata(" ", 1);
sam_ba_putdata( ptr_monitor_if, "v", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) RomBOOT_Version, strlen(RomBOOT_Version));
sam_ba_putdata( ptr_monitor_if, " ", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) RomBOOT_ExtendedCapabilities, strlen(RomBOOT_ExtendedCapabilities));
sam_ba_putdata( ptr_monitor_if, " ", 1);
ptr = (uint8_t*) &(__DATE__);
i = 0;
while (*ptr++ != '\0')
i++;
ptr_monitor_if->putdata((uint8_t *) &(__DATE__), i);
ptr_monitor_if->putdata(" ", 1);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) &(__DATE__), i);
sam_ba_putdata( ptr_monitor_if, " ", 1);
i = 0;
ptr = (uint8_t*) &(__TIME__);
while (*ptr++ != '\0')
i++;
ptr_monitor_if->putdata((uint8_t *) &(__TIME__), i);
ptr_monitor_if->putdata("\n\r", 2);
sam_ba_putdata( ptr_monitor_if, (uint8_t *) &(__TIME__), i);
sam_ba_putdata( ptr_monitor_if, "\n\r", 2);
}
else if (command == 'X')
{
@ -334,7 +413,7 @@ static void sam_ba_monitor_loop(void)
}
// Notify command completed
ptr_monitor_if->putdata("X\n\r", 3);
sam_ba_putdata( ptr_monitor_if, "X\n\r", 3);
}
else if (command == 'Y')
{
@ -361,6 +440,76 @@ static void sam_ba_monitor_loop(void)
uint32_t *src_addr = src_buff_addr;
uint32_t *dst_addr = (uint32_t*)ptr_data;
#ifdef ENABLE_JTAG_LOAD
if ((uint32_t)dst_addr == 0x40000) {
if (jtagInit() != 0) {
// fail!
sam_ba_putdata( ptr_monitor_if, "y\n\r", 3);
return;
}
// content of the first flash page:
// offset (32) : length(32) : sha256sum(256) : type (32) : force (32) = 48 bytes
// for every section; check last sector of the flash to understand if reflash is needed
externalFlashSignatures data[3];
jtagFlashReadBlock(LAST_FLASH_PAGE, sizeof(data), (uint8_t*)data);
externalFlashSignatures* newData = (externalFlashSignatures*)src_addr;
for (int k=0; k<3; k++) {
if (newData[k].force != 0) {
offset = newData[k].offset;
flashNeeded = true;
break;
}
if ((data[k].type == newData[k].type) || (data[k].type == 0xFFFFFFFF)) {
if (newData[k].offset < offset) {
offset = newData[k].offset;
}
if (memcmp(data[k].sha256sum, newData[k].sha256sum, 32) != 0) {
flashNeeded = true;
break;
}
}
}
// merge old page and new page
for (int k=0; k<3; k++) {
if (newData[k].type != 0xFFFFFFFF) {
memcpy(&data[k], &newData[k], sizeof(newData[k]));
}
}
jtagFlashEraseBlock(SCRATCHPAD_FLASH_PAGE);
// write first page to SCRATCHPAD_FLASH_PAGE (to allow correct verification)
for (int j =0; j<size; ) {
jtagFlashWriteBlock(SCRATCHPAD_FLASH_PAGE + j*4, 512, (uint32_t*)&src_addr[j]);
j += 128;
}
// write real structure with checksums to LAST_FLASH_PAGE
jtagFlashWriteBlock(LAST_FLASH_PAGE, sizeof(data), (uint32_t*)data);
goto end;
}
if ((uint32_t)dst_addr >= 0x41000) {
if (flashNeeded == false) {
goto end;
}
uint32_t rebasedAddress = (uint32_t)dst_addr - 0x41000 + offset;
if (rebasedAddress % 0x10000 == 0) {
jtagFlashEraseBlock(rebasedAddress);
}
for (int j =0; j<size; ) {
jtagFlashWriteBlock(rebasedAddress + j*4, 512, (uint32_t*)&src_addr[j]);
j += 128;
}
goto end;
}
#endif
// Set automatic page write
NVMCTRL->CTRLB.bit.MANW = 0;
@ -392,8 +541,10 @@ static void sam_ba_monitor_loop(void)
}
}
end:
// Notify command completed
ptr_monitor_if->putdata("Y\n\r", 3);
sam_ba_putdata( ptr_monitor_if, "Y\n\r", 3);
}
else if (command == 'Z')
{
@ -404,17 +555,42 @@ static void sam_ba_monitor_loop(void)
// Syntax: Z[START_ADDR],[SIZE]#
// Returns: Z[CRC]#
uint8_t *data = (uint8_t *)ptr_data;
uint8_t *data;
uint32_t size = current_number;
uint16_t crc = 0;
uint32_t i = 0;
#ifdef ENABLE_JTAG_LOAD
uint8_t buf[4096];
#endif
#ifdef ENABLE_JTAG_LOAD
if ((uint32_t)ptr_data == 0x40000) {
data = (uint8_t*)buf;
for (int j =0; j<size; ) {
jtagFlashReadBlock(SCRATCHPAD_FLASH_PAGE + j, 256, &data[j]);
j += 256;
}
} else if ((uint32_t)ptr_data >= 0x41000) {
data = (uint8_t*)buf;
for (int j =0; j<size; ) {
jtagFlashReadBlock((uint32_t)ptr_data + offset - 0x41000 + j, 256, &data[j]);
j += 256;
}
} else {
data = (uint8_t *)ptr_data;
}
#else
data = (uint8_t *)ptr_data;
#endif
for (i=0; i<size; i++)
crc = serial_add_crc(*data++, crc);
// Send response
ptr_monitor_if->putdata("Z", 1);
sam_ba_putdata( ptr_monitor_if, "Z", 1);
put_uint32(crc);
ptr_monitor_if->putdata("#\n\r", 3);
sam_ba_putdata( ptr_monitor_if, "#\n\r", 3);
}
command = 'z';
@ -422,7 +598,7 @@ static void sam_ba_monitor_loop(void)
if (b_terminal_mode)
{
ptr_monitor_if->putdata(">", 1);
sam_ba_putdata( ptr_monitor_if, ">", 1);
}
}
else
@ -453,6 +629,15 @@ static void sam_ba_monitor_loop(void)
}
}
void sam_ba_monitor_sys_tick(void)
{
/* Check whether the TX or RX LED one-shot period has elapsed. if so, turn off the LED */
if (txLEDPulse && !(--txLEDPulse))
LEDTX_off();
if (rxLEDPulse && !(--rxLEDPulse))
LEDRX_off();
}
/**
* \brief This function starts the SAM-BA monitor.
*/

View file

@ -20,15 +20,12 @@
#ifndef _MONITOR_SAM_BA_H_
#define _MONITOR_SAM_BA_H_
#include "board_definitions.h"
#define SAM_BA_VERSION "2.0"
/* Enable the interfaces to save code size */
#define SAM_BA_BOTH_INTERFACES 0
#define SAM_BA_UART_ONLY 1
#define SAM_BA_USBCDC_ONLY 2
#ifndef SAM_BA_INTERFACE
#define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES
#if !defined(SAM_BA_BOTH_INTERFACES) && !defined(SAM_BA_UART_ONLY) && !defined(SAM_BA_USBCDC_ONLY)
#define SAM_BA_BOTH_INTERFACES
#endif
/* Selects USB as the communication interface of the monitor */

View file

@ -22,6 +22,8 @@
#include "sam_ba_serial.h"
#include "board_driver_serial.h"
#if defined(SAM_BA_UART_ONLY) || defined(SAM_BA_BOTH_INTERFACES)
/* Local reference to current Usart instance in use with this driver */
//struct usart_module usart_sam_ba;
@ -200,49 +202,6 @@ uint32_t serial_getdata(void* data, uint32_t length)
return (1);
}
static const uint16_t crc16Table[256]=
{
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};
//*----------------------------------------------------------------------------
//* \brief Compute the CRC
//*----------------------------------------------------------------------------
unsigned short serial_add_crc(char ptr, unsigned short crc)
{
return (crc << 8) ^ crc16Table[((crc >> 8) ^ ptr) & 0xff];
}
//*----------------------------------------------------------------------------
//* \brief
@ -532,3 +491,48 @@ uint32_t serial_getdata_xmd(void* data, uint32_t length)
// return(b_run);
}
#endif
static const uint16_t crc16Table[256]=
{
0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6,
0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de,
0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485,
0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d,
0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4,
0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc,
0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823,
0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b,
0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12,
0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a,
0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41,
0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49,
0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70,
0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78,
0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f,
0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067,
0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e,
0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256,
0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d,
0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405,
0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c,
0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634,
0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab,
0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3,
0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a,
0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92,
0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9,
0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1,
0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8,
0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0
};
//*----------------------------------------------------------------------------
//* \brief Compute the CRC
//*----------------------------------------------------------------------------
unsigned short serial_add_crc(char ptr, unsigned short crc)
{
return (crc << 8) ^ crc16Table[((crc >> 8) ^ ptr) & 0xff];
}

View file

@ -23,6 +23,11 @@
#include "board_driver_usb.h"
#include "sam_ba_cdc.h"
#ifndef USB_CURRENT_MA
// default USB current, report using 100mA, enough for a bootloader
#define USB_CURRENT_MA 100
#endif
/* This data array will be copied into SRAM as its length is inferior to 64 bytes,
* and so can stay in flash.
*/
@ -71,7 +76,7 @@ char cfgDescriptor[] =
0x01, // CbConfigurationValue
0x00, // CiConfiguration
0x80, // CbmAttributes Bus powered without remote wakeup: 0x80, Self powered without remote wakeup: 0xc0
0x32, // CMaxPower, report using 100mA, enough for a bootloader
(USB_CURRENT_MA / 2), // CMaxPower
/* Communication Class Interface Descriptor Requirement */
0x09, // bLength

Binary file not shown.

View file

@ -1,376 +1,409 @@
:10000000FC7F0020E9050000D5050000D9050000AF
:10000000FC7F00200D060000FD0500000106000039
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000DD050000EE
:100030000000000000000000E1050000E5050000F0
:1000200000000000000000000000000005060000C5
:100030000000000000000000090600006507000045
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD58000020B9
:1000600000000000F816000008B5084B002B03D074
:10005000044800E000BF0123237010BD5C000020B5
:10006000000000000819000008B5084B002B03D061
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000F81600005C000020540000200000000062
:1000A00010B5C3699C07FCD403680224A343036012
:1000B000C46901231C42FBD1046823430360036825
:1000C000DC07FCD4C46901231C42FBD1C469DC40B9
:1000D0001C42F7D1084B1A430260C3695A07FCD48B
:1000E000C0239B0243608181C3699C07FCD40368E1
:1000F00002221343036010BD04000040037EDA07B0
:10010000FCD5018570470000027E01235107FBD515
:10011000428B1A4207D1428BDA401A4203D1428BFA
:1001200092081A4202D0034B01221A70008DC0B20D
:100130007047C0467400002070B50368041C988B9B
:100140001A1C0821FF32084228D0988B174D014312
:10015000802099839872112353704021144B917120
:1001600050715E68C0202E40800506435E605E6967
:100170003540284358610F4818600F4818615D6882
:100180000E4828408025AD02284358605868800BEF
:100190008003586000235171237105E0137ADA0659
:1001A00002D5201C00F0A0FA207970BDFFFFFF8F60
:1001B0008C0100208C0000200C010020FF3F00F08B
:1001C000002303714371044B016083600B780222AA
:1001D00013430B707047C0463901000038B5364BE9
:1001E0002021DA6901200A43DA61344B06241A78A7
:1001F00002431A70324B0F22197891431970197803
:10020000214319702F490C782043087019780A404F
:100210001A701A7860210A431A702B4B2B4A5A80A5
:100220005A7852B2002AFBDB294B01211A780A4383
:100230001A709A78D107FCD426480268510B1F2205
:100240001140914200D1052111408C011D8D2249A0
:100250002940214319850468A10C0A401F2A00D1B6
:100260001D221C8D1F210A408C4322431A850268DF
:100270000721D20D0A408A4200D103220A40188D7C
:100280001103164A02400A431A8519787F220A4050
:100290001A701A78042112480A431A7058621A898F
:1002A0000C218A431A811A8901218A431A8100216B
:1002B000802201F0B6F838BD0004004058440041E7
:1002C0003C44004159440041000C004006400000FD
:1002D00000500041246080003FF8FFFFFF8FFFFFC8
:1002E0008C010020F7B5141C234A5F0101971D1CE7
:1002F000D319061C5869271C4000400F03301033E7
:10030000C74006D00F1C8022596812060A435A6063
:1003100009E02F1C7B1E9F41184BBF01FF18381CA2
:10032000221C01F075F8019913480835421817612D
:10033000131C5269A104920B890C92030A435A615F
:1003400059690F4A02200A405A616B01F318D979A2
:10035000032211400143D8799043021C0A43DA7109
:100360005979802252420A435A716B01F318DB79A2
:100370009A07FAD5201CFEBD8C0100200C0100203C
:10038000FF3F00F0F8B51E4E041C3378151C002BFF
:1003900012D11C4B1C4A1A645A6C920B92035A6479
:1003A000586C1A4A02405A64A2235B00E25C402067
:1003B0000243E254012333704827FF37E25D0123F3
:1003C00013401AD00F4B5A6C9204920CAA4202D2DC
:1003D0005D6CAD04AD0C081C2A1C0B4901F018F82B
:1003E000E25D03231A4001210A43E15D99430B1C9E
:1003F0001343E3550023337000E01D1C281CF8BD97
:10040000750000208C010020CC000020FF3F00F090
:10041000FF30827930239A43131C2022002900D117
:1004200010221343837170470C4BFF305A6902212D
:10043000920B92035A61027A03231A400A43017A0B
:1004400099430B1C13430372827980235B4213434D
:100450008371037A9A07FCD57047C0468C0100204F
:1004600080235B421943C9B28172704770B5A023E3
:1004700003225B00C254134B134A5C6CC02114402E
:1004800089050C4346255C64FF35402444550F4DD7
:1004900030261D6490256D0046555D6B154029433F
:1004A000922559636D0080214155094D1D63B0258A
:1004B0006D0044555C6F22405A67B2235B00C15403
:1004C00070BDC0468C010020FFFFFF8FCC000020D4
:1004D0004C01002030B5364A1E235168082099434C
:1004E00002231943516033498A6902438A613248C1
:1004F000324A9082908A03439382D3689807FCD54E
:100500002F4B012018701878C40704D52C48407868
:1005100040B20028F7DB01209860587840B20028EC
:10052000FBDB284C26484460587840B20028FBDBAF
:1005300082242348E4014480587840B20028FBDB41
:10054000908C8024A0439084D068C506FCD51E4CB6
:100550001A48C462D4681948E506FBD5848C1B4D43
:100560002C438484D4681548E506FBD5848C022589
:100570002C438484D0680406FCD51048C068450626
:10058000F8D5D068C406FCD500229A605A7852B2D9
:10059000002AFBDB0E480A4A50605A7852B2002A01
:1005A000FBDB00230B724B728B72CB7230BDC046EB
:1005B00000400041000400400C060000000800401C
:1005C000000C004001050100B805FF7D040A000091
:1005D000000703000EBEFEE70DBEFEE705BEFEE708
:1005E00002BEFEE701BEFEE70E4A0F4838B5824262
:1005F00004D10E4A0E4B93420ED10AE00D4C9442A8
:10060000F7D00023D1188842F3D9E55804330D60A0
:10061000F8E700F011F804E09342FAD2002102C397
:10062000FAE7FEE7000000205800002098030020B1
:1006300058000020FC16000010B5244B0022197849
:1006400001231940224B0AD11868224A904201D155
:10065000196014E01A60204A013A002AFCD11A609D
:100660001E4B1968181C4A1C09D0FF22134206D1E0
:1006700081F3088893431A4A936043681847FFF749
:1006800029FF62B600F0F2FC00F0C8F9041CA36870
:10069000201C9847134B002801D001221A701A78A9
:1006A000002A05D0002000F035FA00F091FAFCE7AE
:1006B0001B78002BEBD100F04DFD0028E7D0012086
:1006C00000F028FA00F084FAFCE7C0463804004045
:1006D000FC7F00203581730748E8010000200000FE
:1006E00000ED00E076000020F8B50468051C201C31
:1006F000FF30037AB64A10210B430372B54F1378CB
:10070000B5493B705378B54E0B7093783380D178F0
:10071000338809020B4333801179B14B1980517929
:100720001F8809020F431F809779AE490F80D27945
:100730000F8812023A430A8040224271A648A54F10
:1007400002783878A84F12020243181CBA4200D12E
:1007500099E01EDC802149008A4200D158E107DC83
:10076000812A6AD0822A6ED0802A00D050E164E0CB
:1007700081235B009A4200D1AFE000DA23E1C0237D
:100780009B009A4200D143E1984B9A4200D11AE172
:100790003EE190231B019A4242D015DCD023DB00BE
:1007A0009A4222D088231B019A4242D0A023DB0028
:1007B0009A4200D02CE1201CFFF736FE31882868D1
:1007C00089B2FFF74DFE27E1894B9A4200D1FAE04A
:1007D00000DC1DE1874B9A4200D1E8E0864B9A424B
:1007E00000D015E133886B71EDE033881B0A012BD3
:1007F00008D10B8812222868934201D80A8892B245
:100800007E49DCE033881B0A022B00D000E10B8814
:1008100043222868934201D80A8892B27849CEE0F0
:100820003388201C2B71FFF7FFFD201CFFF71EFEF5
:10083000F2E0291C01C90122C1E0724900230B80AA
:1008400028680222BCE06F4900220A8018885022E2
:1008500010406D4A10701E880F2030401880188894
:10086000032800D9D4E012781B8808335B01E41810
:10087000A379002A01D09B0600E0DB06DB0F0B808A
:10088000286802229BE019887F2291435E4AC9B200
:10089000117018880F21014019803188002900D07B
:1008A000B6E01988002900D1B2E01988032900D9DF
:1008B000AEE012781B8808335B01E318002A05D0EC
:1008C0005A7930218A4320210A4304E05A793021A1
:1008D0008A43102002435A7175E002887F239A43AD
:1008E000494BD2B21A7001880F220A400280328826
:1008F000002A00D08CE00288002A00D188E002881B
:10090000032A00D984E01B78002B27D00388083302
:100910005B01E3189B79990655D50388302108338C
:100920005B01E3181A798A4320210A431A7103886C
:1009300008335B01E318DB795A0644D5038860214C
:1009400008335B01E318DA798A4340210A43DA71FC
:100950000388022208335B01E31826E0038808338A
:100960005B01E3189B79DF062DD50388302108331E
:100970005B01E3181A798A4310210A431A7103882C
:1009800008335B01E318DB7999061CD503886021E5
:1009900008335B01E318DA798A4320210A43DA71CC
:1009A0000388012208335B01E3181A710BE00B88FE
:1009B00008222868934201D80A8892B2134900237A
:1009C000FFF790FC28E0201CFFF72EFD24E0C04636
:1009D0008C0000208100002077000020780000209B
:1009E0007C0000207E0000200203000001030000C4
:1009F00021200000A1210000212200004C14000051
:100A0000000000207A000020800000204400002028
:100A1000201C0121FFF7FCFCF8BDC04610B5054BBA
:100A2000054C2360FFF7DAFB201C2168FFF7C8FBA9
:100A3000201C10BD005000410C02002007B5054BE2
:100A40000122019001A91868131CFFF74BFC01203B
:100A50000EBDC0460C02002013B5054B6C46073492
:100A60001868211C0122FFF78DFC207816BDC046B6
:100A70000C02002010B5074C201CFFF75DFB031C87
:100A80000020834205D022684823FF33D05C012335
:100A9000184010BD0C02002010B5054A0C1C031CA8
:100AA000191C10680123221CFFF71CFC201C10BD20
:100AB0000C02002070B5084C061C201C0D1CFFF712
:100AC0003BFB0023984205D02068311C2A1CFFF70D
:100AD00059FC031C181C70BD0C020020F8B50C4C0E
:100AE000051C201C0E1CFFF727FB0023271C341CB1
:100AF00098420AD0002C07D0291C221C3868FFF726
:100B000041FC241A2D18F5E7331C181CF8BDC0460B
:100B10000C020020012805D1054B064A1A60064B3D
:100B2000187004E0002802D1044A014B1A60704793
:100B30007C0200208014000089000020CC140000FA
:100B400030B51A4B85B01B78002B29D0042901D170
:100B5000026804E0022901D1028800E0027849001D
:100B600004A843180B3B5C1AA3420BD00F20104083
:100B7000092802D83025284300E0373018701209C0
:100B8000013BF1E701A830230370782343700A2268
:100B900043189A700D22DA70054B04311B6801E08E
:100BA000034B1B68DB68984705B030BD8800002008
:100BB0007C02002072B6EFF30883044A13600368D6
:100BC00083F30888436818477047C04680020020B6
:100BD000F0B58FB006A9CD4A0B1C31CA31C351CA3A
:100BE00051C360CA60C3CA4CCA48A3687A255B0374
:100BF0005B0F9B005B58C8490360A26892B25343E5
:100C00000A60C649C64A0B6000231360C54B1D70BD
:100C1000C54BC64D1B68281C1B6940219847C44B17
:100C200000221860C34B1D60C34BC34DC04F1A60F8
:100C3000286839688842EBD2BE4B1B681A78FF2AB5
:100C400000D1F7E1232A00D0CEE1BC4E3378002B4F
:100C500005D0B54BBA481B680221DB689847B14BF9
:100C60001B78532B38D13B682A6893421ED9B14870
:100C700001322A609A1AB34B01681B680131016086
:100C8000B14E9A4201D2326000E03360A44832682B
:100C90000068029000F0BCFB336829685A182A608B
:100CA000A44A1668F1181160A84A13702B68013B1A
:100CB0002B60A04B1A68013A1A60A44BA14A1B781A
:100CC00011688B4206D2984A954812680068C91A82
:100CD00092699047C04676E1522B07D1904A924BD9
:100CE00010681B68974A5B6911686BE14F2B05D14F
:100CF0008B4B944A1B6812681A7064E1482B05D12B
:100D0000874B904A1B6812681A805CE1572B05D10B
:100D1000834B8C4A1B6812681A6054E16F2B03D115
:100D20007F4B0121186807E0682B08D17C4B854870
:100D30001B6802211B880360FFF702FF43E1772B4A
:100D400006D1774B7F481B6804211B680360F3E7DB
:100D5000472B13D17B4B1868FFF72CFF7C4B1B688C
:100D600083F3088862B67B4B1B78002B00D12AE105
:100D70006D4B06201B681B68984724E1542B04D157
:100D800001233370684B1B685CE04E2B0BD133782A
:100D9000002B05D1644B6A481B680221DB68984729
:100DA000002333700FE1562B50D15F4D01212B688A
:100DB0006948DB6898472B680321DB6867489847D8
:100DC000674E2B68301CDB68012198472B680D218A
:100DD000DB68644898472B68301CDB680121984722
:100DE000544F614B544E3B60002333603A1C311C1E
:100DF0001368581C10601B780393002B03D00B68FA
:100E000001330B60F4E72B683168DB68564898477C
:100E10002B685348DB68012198470398306053489A
:100E20003860444A1368591C11601A78424B002AF2
:100E300003D01A6801321A60F3E72A681968D36888
:100E400098472B68DB683E480221BBE03D4A582B9F
:100E500015D1304E314D366813682A68B10093427F
:100E600008D25808E06142482080207DC507FCD5A3
:100E70005B18F4E72C4B3F481B68DB68A1E0592B5B
:100E800033D11268264B3C49002A02D11B680B6003
:100E900026E00868196863688025AB4392086360A0
:100EA000002A1DD0354B2380237DDE07FCD500238F
:100EB000184D2D680095AD08AB4202D3304D25800A
:100EC00006E09342FAD09D00465901334E51EFE7B8
:100ED000257DEE07FCD59D0049194019D21ADFE7A0
:100EE000114B28481B68DB686BE05A2B6BD10C4B0D
:100EF00017681D680026EF19BD4245D02878311CBF
:100F000000F04AF90135061CF6E7C04660140000FF
:100F100000400041340200202C0200202802002062
:100F200078020020240200207C02002038020020E9
:100F30001C02002020020020300200208800002037
:100F4000C014000084020020880200201802002043
:100F500080020020890000209C140000C5140000BD
:100F60009E140000E8140000A0140000AC1400005F
:100F700002A5FFFFB51400008400002044A5FFFF78
:100F800004A5FFFFB91400002E4D2F482B68012146
:100F9000DB68984707230F223240111C3609303195
:100FA000092A00DD07311020C0186A468154013B30
:100FB000F1D22B6804A8DB68082198472B682348E6
:100FC000DB6803219847224D7A232B70214B0022A6
:100FD0001A60214B1B7893422CD01A4B01211B68BD
:100FE0001E48DB68984725E0111C3039C8B2194B00
:100FF000092804D81E683201114319601AE0111C37
:101000004139052903D81868373A010106E0111C57
:101010006139052904D81D68573A29010A4308E0B7
:101020002C2A03D10E4A1E68166001E008490A7096
:1010300000221A600B4B1A6801321A600A4B1A68B8
:101040000132F2E57C020020BD140000BF14000054
:10105000240200208402002088000020C314000025
:1010600078020020300200202002002010B51C4B26
:1010700001201A78022402431A701A4B0F221978A1
:101080009143197019782143197017490C7820433E
:10109000087019780A401A701A7820210A431A70C9
:1010A000124B04211A6A0A431A62114B114A5A80E0
:1010B0005A7852B2002AFBDBC4220F480F49920330
:1010C000FEF7EEFF0E4A002313700E4A13700E4A0D
:1010D00013700E4A13700E4A13700E4A137010BD2F
:1010E0004A440041354400414B4400410004004063
:1010F000000C0040144000000008004204C500003D
:101100008C020020130300208D020020900200209A
:10111000140300201103002008B5C1B20248FEF7F5
:10112000EDFF012008BDC04600080042024B187EBA
:101130004007C00F7047C0460008004208B5FFF7DF
:10114000F5FF0028FBD00248FEF7DEFF08BDC046D1
:101150000008004208B5FFF7E9FF0023984205D0D8
:10116000FFF7ECFF031C233B5A425341181C08BDF8
:1011700070B5041C0D1C4618B44204D02078FFF74B
:10118000CBFF0134F8E7281C70BD10B5041CFFF735
:10119000D5FF2070012010BD0B0A5840034B4000C2
:1011A000C05A0902484080B27047C046F614000099
:1011B000F7B50024051C0F1C261CBC4220D0FFF7ED
:1011C000BDFF114BC0B21B780190002B1AD1311C0E
:1011D000FFF7E2FF0D4B061C1A88002A04D10C4AC7
:1011E00011782A1C002907D001996A1C2970802FC8
:1011F00002D11988013919800134A4B2151CDCE729
:10120000301C00E00120FEBD110300208E020020F2
:1012100012030020F0B53E4E85B0002203900C1C56
:1012200032703C4B914201D1012201E03A490C80DD
:101230001A707F231C4201D080349C43FFF77EFF4D
:101240003378C0B2002B07D000253570FFF776FF4A
:101250003378C0B2AB4236D1432803D0712853D083
:101260001528EBD1012300930120FFF755FF0098CB
:10127000FFF752FF00998025C843C0B2FFF74CFF2B
:10128000039B00270293244A1388002B1DD1214978
:1012900001930978002918D10198FFF73DFF391C07
:1012A0000198FFF779FF013D071C002DEBD1000AE3
:1012B000C0B2FFF731FFF8B2FFF72EFFFFF73EFF96
:1012C0003378002B0AD035701FE00299013B097872
:1012D0001380029B019101330293DDE7C0B206281F
:1012E00007D1009B03990133DBB280310093803C2E
:1012F0000391002CB8D10420FFF70EFFFFF71EFF6B
:10130000044B01251C7000E00025281C05B0F0BD31
:1013100011030020120300208E020020F0B5384C8B
:1013200087B0002301902370994201D1012301E08D
:10133000344A1180344A642613704320FFF7ECFED0
:10134000324FFFF7F3FE002803D1002F03D0013FF7
:10135000F7E7002F03D1013E002EEED14DE001252D
:10136000FFF7ECFE2378002B38D1C0B202900128A1
:1013700005D004283DD10620FFF7CEFE39E005AEAA
:101380000221301CFFF714FF01988021FFF710FFA6
:1013900023780390002B18D1FFF7D0FE0702FFF748
:1013A000CDFEBFB223783F18BFB2012B0DD0039BF7
:1013B0009F4207D13378AB4204D1EB437278DBB262
:1013C0009A4204D01820FFF7A7FE002303E006206E
:1013D000FFF7A2FE029B2278002A02D00026267088
:1013E0000BE0012B05D1019A6B1C8032DDB201921A
:1013F000B6E7054A002313700126301C07B0F0BD84
:10140000110300208E0200201203002000350C0082
:1014100010B50023934203D0CC5CC4540133F9E7E8
:1014200010BD031C8218934202D019700133FAE7F1
:1014300070470000F8B5C046F8BC08BC9E4670472F
:10144000F8B5C046F8BC08BC9E46704712010002C1
:101450000200004041234D00000200000001000096
:101460000800000010000000200000004000000004
:1014700080000000000100000002000000040000E5
:10148000191100003D1100002D1100007111000024
:101490008B110000151200001D13000076002000C3
:1014A0004F637420313020323031350031353A35D8
:1014B000373A343500580A0D00590A0D005A0023F6
:1014C0000A0D003E00322E30000000003D0A0000F0
:1014D000590A0000750A0000990A0000B50A0000C8
:1014E000990A0000DD0A00005B41726475696E6F45
:1014F0003A58595A5D000000211042206330844060
:10150000A550C660E770088129914AA16BB18CC1D2
:10151000ADD1CEE1EFF13112100273325222B55249
:101520009442F772D662399318837BB35AA3BDD322
:101530009CC3FFF3DEE36224433420040114E66419
:10154000C774A44485546AA54BB528850995EEE572
:10155000CFF5ACC58DD55336722611163006D77629
:10156000F6669556B4465BB77AA719973887DFF7C2
:10157000FEE79DD7BCC7C448E5588668A7784008F1
:10158000611802282338CCC9EDD98EE9AFF9488912
:1015900069990AA92BB9F55AD44AB77A966A711A89
:1015A000500A333A122AFDDBDCCBBFFB9EEB799B62
:1015B000588B3BBB1AABA66C877CE44CC55C222CD9
:1015C000033C600C411CAEED8FFDECCDCDDD2AADB2
:1015D0000BBD688D499D977EB66ED55EF44E133E69
:1015E000322E511E700E9FFFBEEFDDDFFCCF1BBF02
:1015F0003AAF599F788F8891A981CAB1EBA10CD1DC
:101600002DC14EF16FE18010A100C230E3200450E3
:10161000254046706760B9839893FBA3DAB33DC356
:101620001CD37FE35EF3B1029012F322D232354233
:10163000145277625672EAB5CBA5A89589856EF5E6
:101640004FE52CD50DC5E234C324A0148104667483
:10165000476424540544DBA7FAB79987B8975FE736
:101660007EF71DC73CD7D326F2369106B0165766D3
:101670007676154634564CD96DC90EF92FE9C899BE
:10168000E9898AB9ABA94458654806782768C01823
:10169000E1088238A3287DCB5CDB3FEB1EFBF98B96
:1016A000D89BBBAB9ABB754A545A376A167AF10A73
:1016B000D01AB32A923A2EFD0FED6CDD4DCDAABDA6
:1016C0008BADE89DC98D267C076C645C454CA23CC3
:1016D000832CE01CC10C1FEF3EFF5DCF7CDF9BAF76
:1016E000BABFD98FF89F176E367E554E745E932E13
:0C16F000B23ED10EF01E00000000000011
:1016FC0009024300020100803209040000010202C9
:10170C000000052400100104240200052406000139
:10171C000524010001070583030800FF09040100EB
:10172C00020A0000000705810240000007050202C2
:10173C004000000000C20100000008006900000029
:08174C00410000000000000054
:04000003000005E90B
:100090000819000060000020580000200000000047
:1000A000154A164B1178002909D115491878097895
:1000B0004118C9B21970802012498002C8611178B4
:1000C0000131C9B211701978F02902D819780929BB
:1000D00009D80B4908784042C0B2087018780978EE
:1000E0004118C9B2197012781B789A4203D1802244
:1000F000044B9202DA617047780000200100002072
:10010000000000200044004110B5C3699C07FCD4E6
:1001100003680224A3430360C46901231C42FBD18A
:100120000468234303600368DC07FCD4C46901232B
:100130001C42FBD1C469DC401C42F7D1084B1A4376
:100140000260C3695A07FCD4C0239B0243608181CB
:10015000C3699C07FCD4036802221343036010BDEB
:1001600004000040037EDA07FCD5018570470000DB
:10017000027E01235107FBD5428B1A4207D1428BE5
:10018000DA401A4203D1428B92081A4202D0034B42
:1001900001221A70008DC0B27047C046790000205D
:1001A00070B50368041C988B1A1C0821FF320842A2
:1001B00026D0802099839872112353704021144BCC
:1001C000917150715E68134DC0202E40800506432A
:1001D0005E605E693540284358610F4818600F48DB
:1001E00018615D680E4828408025AD02284358609C
:1001F0005868800B8003586000235171237105E01B
:10020000137ADA0602D5201C00F0E6FA207970BDD8
:1002100098010020FFFFFF8F9800002018010020A8
:10022000FF3F00F0002303714371044B01608360C2
:100230000B78022213430B707047C046A1010000E7
:1002400038B5364B2021DA6901200A43DA61344B94
:1002500006241A7802431A70324B0F221978914300
:1002600019701978214319702F490C7820430870B0
:1002700019780A401A701A7860210A431A702B4BB9
:100280002B4A5A805A7852B2002AFBDB294B0121B3
:100290001A780A431A709A78D107FCD42648026863
:1002A000510B1F221140914200D1052111408C01B8
:1002B0001D8D22492940214319850468A10C0A405B
:1002C0001F2A00D11D221C8D1F210A408C4322436E
:1002D0001A8502680721D20D0A408A4200D1032202
:1002E0000A40188D1103164A02400A431A851978EC
:1002F0007F220A401A701A78042112480A431A70A1
:1003000058621A890C218A431A811A8901218A4369
:100310001A810021802201F076F938BD00040040E6
:10032000584400413C44004159440041000C004005
:100330000640000000500041246080003FF8FFFFAD
:10034000FF8FFFFF98010020F7B5141C1F4A5F01C3
:1003500001971D1CD319061C5869271C4000400F2B
:1003600003301033C74006D00F1C80225968120694
:100370000A435A6009E02F1C7B1E9F41144BBF01AA
:10038000FF18381C221C01F035F901990F48083577
:1003900042181761131C5269A104920B890C920335
:1003A0000A435A6159690B4A0A405A616B01F318B2
:1003B0000222DA715979802252420A435A716B0142
:1003C000F318DB799A07FAD5201CFEBD98010020AE
:1003D00018010020FF3F00F0F8B51A4E051C3378D5
:1003E000141C002B12D1184B184A1A645A6C920B29
:1003F00092035A64586C164A02405A64A2235B0066
:10040000EA5C40200243EA54012333704827FF3757
:10041000EA5D0123134012D00B4B5A6C9204920CEC
:10042000A24202D25C6CA404A40C081C221C074942
:1004300001F0E0F80123EB550023337000E01C1CB1
:10044000201CF8BD7A00002098010020D800002070
:10045000FF3F00F0FF3083792022002900D11022D5
:100460001343837170470000084BFF305A69920BA9
:1004700092035A6102230372827980235B42134301
:100480008371037A9A07FCD57047C0469801002013
:1004900080235B421943C9B28172704770B5A023B3
:1004A00003225B00C254134B134A5C6CC0211440FE
:1004B00089050C4346255C64FF35402444550F4DA7
:1004C00030261D6490256D0046555D6B154029430F
:1004D000922559636D0080214155094D1D63B0255A
:1004E0006D0044555C6F22405A67B2235B00C154D3
:1004F00070BDC04698010020FFFFFF8FD80000208C
:1005000058010020024B5B785BB2002BFADB70478E
:10051000000C0040024BDB68DA06FBD57047C04692
:1005200000080040F8B52A4B1E2259689143022268
:1005300011435960274B28491E1C9982998A0A4306
:100540009A82F3680227234C3B42FAD0234D0123C1
:10055000AB60FFF7D7FF224B6B60FFF7D3FF82231F
:10056000DB016B80FFF7CEFFA38C80229343A38433
:10057000FFF7D0FF1B4BE362FFF7CCFFA38C1A4AB7
:100580001343A384FFF7C6FFA38C1F43A784F3681C
:100590001A06FCD50F4BDB685A06F8D50024FFF786
:1005A000B9FFAC60FFF7AEFF104B6B60FFF7AAFF1F
:1005B0000F4B104AC0215A600F4A0906106A000208
:1005C000000A0143116207229C601A60F8BDC04610
:1005D00000400041000800400C060000000C0040F4
:1005E00001050100B805FF7D040A000000070300B3
:1005F00010E000E0E703000000ED00E00EBEFEE7C3
:100600000DBEFEE705BEFEE702BEFEE70E4A0F483E
:1006100038B5824204D10E4A0E4B93420ED10AE005
:100620000D4C9442F7D00023D1188842F3D9E558F5
:1006300004330D60F8E700F011F804E09342FAD2B9
:10064000002102C3FAE7FEE7000000205C00002062
:10065000A80300205C0000200C19000038B5344BC2
:100660001A681C1C013221D0324A191D1160D9B2FE
:1006700000291BD1304A1078012210402F4A0AD19C
:1006800015682F498D4201D110600FE011602D498E
:1006900001390029FCD11160226882F30888FF2209
:1006A0009343294A9360224B5B681847FFF73AFF50
:1006B00062B600F0CDFD00F05BF8244B8022920280
:1006C00023499A6008220A602249041C0A60802299
:1006D00012059A609A61204B204AC0215A601A4A3A
:1006E0000906106A0002000A0143116200229A60A2
:1006F00007221A60A368201C9847194B002801D0D4
:1007000001221A701A78002A05D0002000F094FA0D
:1007100000F01AFBFCE71B78002BEBD100F00CFE7D
:100720000028E7D0012000F087FA00F00DFBFCE77D
:10073000002000001802002038040040FC7F002048
:100740003581730748E8010000ED00E000440041F6
:10075000884400419844004110E000E0E7030000B5
:100760007B00002008B5FFF79BFC00F0C9FA08BD2C
:1007700010B5054B054C2360FFF762FD201C216876
:10078000FFF750FD201C10BD005000411C0200204E
:1007900070B5051CC0B0081C161C0C1C00F03BFFFB
:1007A00040006A460323023053701070760801231C
:1007B000E218013A11785A00002906D1281C69462E
:1007C0000023FFF7C1FD40B070BDB342F6DA6846C2
:1007D00081520133ECE70000F7B5BA4A0468137898
:1007E000B949271CFF37051C102038720B7053784D
:1007F000B648B74E037093783380D17833880902B6
:100800000B4333801179B34B198051791888090251
:10081000084318809079B0490880D279088812027C
:1008200002430A8040227A71A84F3A78A64F1202FA
:1008300038780F1C0243A9488446181C624500D131
:10084000C2E020DC802149008A4200D16EE109DC4F
:10085000812A00D192E0822A00D195E0802A00D03E
:1008600064E18BE081235B009A4200D1CFE000DAA3
:1008700058E1C0239B009A4200D157E1984B9A421D
:1008800000D14FE152E190231B019A4269D015DC5F
:10089000D023DB009A4222D088231B019A4269D0E0
:1008A000A023DB009A4200D040E1201CFFF7DCFDD2
:1008B0003188286889B2FFF7EBFD3BE1894B9A420A
:1008C00000D12FE100DC31E1874B9A4200D11DE1DC
:1008D000864B9A4200D029E133886B7122E133883C
:1008E0001B0A012B08D10B8812222868934201D8D9
:1008F0000A8892B27E4911E133881B0A022B08D183
:100900000B8843222868934201D80A8892B2794919
:1009100004E133881B0A032B00D007E13388DBB2E4
:10092000012B17D0002B07D0022B00D0FEE00A8845
:100930002868D2B2704911E0042201A86F4900F082
:1009400059FE3B8804222868934201D83A8892B223
:1009500001A9E3E00A8828686949D2B2FFF718FFC5
:10096000E8E03388201C2B71FFF77EFD201CFFF789
:1009700095FDDFE0291C01C90122CFE06149002378
:100980000B8028680222CAE05E4900220A8018888B
:10099000502210405C4A10701E880F203040188092
:1009A0001888032800D9C1E012781B8808335B013E
:1009B000E418A379002A01D09B0600E0DB06DB0FD8
:1009C0000B8028680222A9E019887F2291434E4AB1
:1009D000C9B2117018880F2101401980318800298F
:1009E00000D0A3E01988002900D19FE019880329CD
:1009F00000D99BE012781B8808335B01E318002ABA
:100A000002D020225A718DE0102159718AE00288AB
:100A10007F239A433C4BD2B21A7001880F220A40BE
:100A200002803288002A00D080E00288002A00D1AB
:100A30007CE00288032A00D978E01B78002B1FD0C5
:100A4000038808335B01E3189B799A066AD503880B
:100A5000202208335B01E3181A71038808335B0115
:100A6000E318DB795F065DD50388402208335B011C
:100A7000E318DA710388022208335B01E3181EE0F1
:100A8000038808335B01E3189B79D9064AD50388AC
:100A9000102208335B01E3181A71038808335B01E5
:100AA000E318DB799A063DD50388202208335B01E1
:100AB000E318DA710388012208335B01E3181A7125
:100AC00030E0C046980000207D0000208200002019
:100AD0008400002086000020800000200203000027
:100AE0000103000021200000A121000021220000BC
:100AF0005C160000040000204C1600003C160000AC
:100B0000401600007E0000207C0000200B88082298
:100B10002868934201D80A8892B207490023FFF758
:100B200013FC07E0201CFFF79FFC03E0201C0121C1
:100B3000FFF790FCF7BDC0464800002007B5054B05
:100B40000122019001A91868131CFFF7FDFB012089
:100B50000EBDC0461C02002013B5054B6C46073481
:100B60001868211C0122FFF737FC207816BDC0460B
:100B70001C02002010B5074C201CFFF711FB031CC2
:100B80000020834205D022684823FF33D05C012334
:100B9000184010BD1C02002010B5054A0C1C031C97
:100BA000191C10680123221CFFF7CEFB201C10BD6E
:100BB0001C02002070B5084C061C201C0D1CFFF701
:100BC000EFFA0023984205D02068311C2A1CFFF759
:100BD00003FC031C181C70BD1C020020F8B50C4C53
:100BE000051C201C0E1CFFF7DBFA0023271C341CFD
:100BF00098420AD0002C07D0291C221C3868FFF725
:100C0000EBFB241A2D18F5E7331C181CF8BDC04661
:100C10001C02002008B5031C081C111C9847044B3B
:100C2000802212055A61034B64221A8008BDC04617
:100C3000004400418C000020012805D1054B064AE4
:100C40001A60064B187004E0002802D1044A014BD8
:100C50001A6070478C02002090160000940000205B
:100C6000DC16000030B50A1C1C4985B00978031C4D
:100C700000292AD0042A01D1006804E0022A01D107
:100C8000008800E00078520004A98B180B3B9C1AE6
:100C9000A3420BD00F210140092902D83025294356
:100CA00000E0373119700009013BF1E701A9302359
:100CB0000B7078234B700A208B1898700D20D87019
:100CC000074B04321B68D86803E005490968C86807
:100CD000191CFFF79FFF05B030BDC04688000020FB
:100CE0008C02002072B6EFF30883044A1360036895
:100CF00083F30888436818477047C0469002002075
:100D00000D4B1A88002A09D01A88013A92B21A802B
:100D1000002A03D18022094B12059A61084B1A88D8
:100D2000002A08D01A88013A92B21A80002A02D109
:100D3000044B08221A6070478C00002000440041D8
:100D40008A00002098440041F0B591B008A9CE4A2D
:100D50000B1C31CA31C351CA51C360CA60C3CB4BEB
:100D6000CB489A687A255203520F92005258C949CB
:100D700002609C68A4B262430C60C74900240A6008
:100D8000C64A1460C64C2570C64CC74D2368281C43
:100D90001B6940219847002805D0C44B08221A60DF
:100DA000C34B64221A80C34B00221860C24B1D60E3
:100DB000C24BC24DBF4F1A602A683B689A42E3D2C9
:100DC000BD4B1B681A78FF2A00D120E2232A00D0ED
:100DD000F7E1BB4E3378002B06D0B24BB9491B6804
:100DE0000222D868FFF716FFAD4B1B78532B3FD17B
:100DF0003B682A6893421ED9AF4801322A609A1A8A
:100E0000B14B01681B6801310160B04E9A4201D2BA
:100E1000326000E03360A14832680068049000F05E
:100E2000E9FB336829685A182A60A34A1668F11842
:100E30001160A74A13702B68013B2B609E4B1A6808
:100E4000013A1A60A24BA04A1B7811688B420DD25E
:100E500022689248C91A006892699047002805D014
:100E6000924B08221A60924B64221A80C04696E187
:100E7000522B0ED18948944A2368006811685B6937
:100E800003909847934B802212055A616422924B3B
:100E90000DE04F2B05D1814B8B4A1B6812681A70ED
:100EA0007DE1482B05D17D4B874A1B6812681A806B
:100EB00075E1572B05D1794B834A1B6812681A607C
:100EC0006DE16F2B03D1754B0121186807E0682B8A
:100ED00008D1724B7C481B6802211B880360FFF716
:100EE000C1FE5CE1772B06D16C4B77481B6804216F
:100EF0001B680360F3E7472B13D1734B1868FFF7A8
:100F0000F1FE764B1B6883F3088862B6744B1B783E
:100F1000002B00D143E1634B06201B681B689847F8
:100F20003DE1542B04D1012333705E4B1B6864E018
:100F30004E2B0CD13378002B06D15A4B61491B68DC
:100F40000222D868FFF766FE0023337027E1562B94
:100F500057D123686349D8680122FFF75BFE2368F5
:100F60006149D8680322FFF755FE604D2368291CAC
:100F7000D8680122FFF74EFE23685D49D8680D222C
:100F8000FFF748FE2368291CD8680122FFF742FEBC
:100F9000494F4A4D5749002339602B603A1C281CA1
:100FA00013685E1C16601B780593002B03D0036842
:100FB00001330360F4E73B4E2A683368D868FFF7D3
:100FC00029FE33684949D8680122FFF723FE0599B5
:100FD000296049493960384A1368581C10601B78E9
:100FE000002B04D0354B1A6801321A60F3E73368DE
:100FF0002A68D868FFF70EFE3368D86831490222A4
:10100000CBE0314A582B17D1214E234D3668136857
:101010002A68B10093420AD21C4D5808E86137484B
:1010200028801A4D287DC607FBD55B18F2E71D4BBB
:1010300033491B68D868AFE0592B00D07DE01268B7
:10104000164B3049002A02D11B680B6070E00F4D2F
:10105000086819686B680D4E8025AB439208736071
:10106000002A65D0284B094D2B80084E337DDD07C3
:10107000FBD50023064D2D680195AD08AB4247D343
:10108000224D024E35804AE07016000000400041BB
:10109000440200203C020020380200208802002088
:1010A000340200208C0200204802002094440041B9
:1010B0008A0000202C020020300200204002002084
:1010C00088000020D0160000940200209802002022
:1010D00028020020004400418C00002090020020E3
:1010E00094000020AC160000D5160000AE160000DB
:1010F000F8160000B0160000BC16000002A5FFFFA5
:10110000C51600009000002044A5FFFF04A5FFFFC6
:101110009342B5D09D00465901334E51AAE7404E47
:10112000357DEE07FBD59D0049194019D21A97E786
:101130003C4B3D491B68D8682EE05A2B2FD13B4BC6
:1011400017681D680026EF19BD4206D02878311CAB
:1011500000F014F90135061CF6E7324B34491B68E0
:101160000122D868FFF756FD07230F223240111CD9
:1011700036093031092A00DD07311820C0186A46C7
:101180008154013BF1D2236806A9D8680822FFF7F1
:1011900041FD23682749D8680322FFF73BFD264B12
:1011A0007A221A70254B00221A60254B1B78934235
:1011B0002DD01C4B23491B680122D868FFF72AFD5C
:1011C00025E0111C3039C8B21C4B092804D81D6811
:1011D0002A01114319601AE0111C4139052903D86D
:1011E0001E68373A310106E0111C6139052904D81F
:1011F0001868573A01010A4308E02C2A03D10B4A28
:101200001968116001E00C490A7000221A600E4B47
:101210001A6801321A600D4B1A680132C9E5C046DE
:10122000004000418C020020C91600008802002006
:10123000CD160000CF1600003402002094020020DA
:1012400088000020D3160000400200203002002059
:1012500010B51C4B01201A78022402431A701A4B55
:101260000F22197891431970197821431970174981
:101270000C782043087019780A401A701A782021D7
:101280000A431A70124B04211A6A0A431A62114B5C
:10129000114A5A805A7852B2002AFBDBC4220F4806
:1012A0000F499203FEF730FF0E4A002313700E4AD7
:1012B00013700E4A13700E4A13700E4A13700E4AC2
:1012C000137010BD4A440041354400414B44004175
:1012D00000040040000C00401440000000080042E0
:1012E0002AF600009C020020230300209D0200201B
:1012F000A0020020240300202103002008B5C1B271
:101300000248FEF72FFF012008BDC046000800423A
:10131000024B187E4007C00F7047C04600080042CD
:1013200008B5FFF7F5FF0028FBD00248FEF720FFC5
:1013300008BDC0460008004208B5FFF7E9FF0023DA
:10134000984205D0FFF7ECFF031C233B5A42534160
:10135000181C08BD70B5041C0D1C4618B44204D0FE
:101360002078FFF7CBFF0134F8E7281C70BD10B5DB
:10137000041CFFF7D5FF2070012010BD0B0A584058
:10138000034B4000C05A0902484080B27047C04633
:1013900006170000F7B50024051C0F1C261CBC42D4
:1013A00020D0FFF7BDFF114BC0B21B780190002B7E
:1013B0001AD1311CFFF7E2FF0D4B061C1A88002AD8
:1013C00004D10C4A11782A1C002907D001996A1C03
:1013D0002970802F02D11988013919800134A4B2F3
:1013E000151CDCE7301C00E00120FEBD21030020BD
:1013F0009E02002022030020F0B53E4E85B0002260
:1014000003900C1C32703C4B914201D1012201E04F
:101410003A490C801A707F231C4201D080349C43CF
:10142000FFF77EFF3378C0B2002B07D00025357060
:10143000FFF776FF3378C0B2AB4236D1432803D0F2
:10144000712853D01528EBD1012300930120FFF719
:1014500055FF0098FFF752FF00998025C843C0B29E
:10146000FFF74CFF039B00270293244A1388002BAD
:101470001DD1214901930978002918D10198FFF75E
:101480003DFF391C0198FFF779FF013D071C002D36
:10149000EBD1000AC0B2FFF731FFF8B2FFF72EFF21
:1014A000FFF73EFF3378002B0AD035701FE002991A
:1014B000013B09781380029B019101330293DDE720
:1014C000C0B2062807D1009B03990133DBB28031FB
:1014D0000093803C0391002CB8D10420FFF70EFF4D
:1014E000FFF71EFF044B01251C7000E00025281C9F
:1014F00005B0F0BD21030020220300209E02002041
:10150000F0B5384C87B0002301902370994201D187
:10151000012301E0344A1180344A642613704320C9
:10152000FFF7ECFE324FFFF7F3FE002803D1002F48
:1015300003D0013FF7E7002F03D1013E002EEED18B
:101540004DE00125FFF7ECFE2378002B38D1C0B227
:101550000290012805D004283DD10620FFF7CEFED9
:1015600039E005AE0221301CFFF714FF01988021FD
:10157000FFF710FF23780390002B18D1FFF7D0FE60
:101580000702FFF7CDFEBFB223783F18BFB2012B91
:101590000DD0039B9F4207D13378AB4204D1EB437C
:1015A0007278DBB29A4204D01820FFF7A7FE00231E
:1015B00003E00620FFF7A2FE029B2278002A02D059
:1015C000002626700BE0012B05D1019A6B1C80329E
:1015D000DDB20192B6E7054A002313700126301CE4
:1015E00007B0F0BD210300209E020020220300204E
:1015F00000350C0010B50023934203D0CC5CC454DA
:101600000133F9E710BD031C8218934202D0197010
:101610000133FAE770470023C25C0133002AFBD193
:10162000581E7047F8B5C046F8BC08BC9E467047C7
:10163000F8B5C046F8BC08BC9E46704704030904D0
:1016400041726475696E6F204C4C43004172647541
:10165000696E6F205A65726F00000000120100026F
:101660000200004041234D00000201020001000081
:1016700008000000100000002000000040000000F2
:1016800080000000000100000002000000040000D3
:10169000FD1200002113000011130000551300007B
:1016A0006F130000F9130000011500007600200000
:1016B00041707220313120323031390031333A30CB
:1016C000393A343900580A0D00590A0D005A0023DE
:1016D0000A0D003E00322E30000000003D0B0000DD
:1016E000590B0000750B0000990B0000B50B0000B2
:1016F000990B0000DD0B00005B41726475696E6F31
:101700003A58595A5D00000021104220633084404D
:10171000A550C660E770088129914AA16BB18CC1C0
:10172000ADD1CEE1EFF13112100273325222B55237
:101730009442F772D662399318837BB35AA3BDD310
:101740009CC3FFF3DEE36224433420040114E66407
:10175000C774A44485546AA54BB528850995EEE560
:10176000CFF5ACC58DD55336722611163006D77617
:10177000F6669556B4465BB77AA719973887DFF7B0
:10178000FEE79DD7BCC7C448E5588668A7784008DF
:10179000611802282338CCC9EDD98EE9AFF9488900
:1017A00069990AA92BB9F55AD44AB77A966A711A77
:1017B000500A333A122AFDDBDCCBBFFB9EEB799B50
:1017C000588B3BBB1AABA66C877CE44CC55C222CC7
:1017D000033C600C411CAEED8FFDECCDCDDD2AADA0
:1017E0000BBD688D499D977EB66ED55EF44E133E57
:1017F000322E511E700E9FFFBEEFDDDFFCCF1BBFF0
:101800003AAF599F788F8891A981CAB1EBA10CD1C9
:101810002DC14EF16FE18010A100C230E3200450D1
:10182000254046706760B9839893FBA3DAB33DC344
:101830001CD37FE35EF3B1029012F322D232354221
:10184000145277625672EAB5CBA5A89589856EF5D4
:101850004FE52CD50DC5E234C324A0148104667471
:10186000476424540544DBA7FAB79987B8975FE724
:101870007EF71DC73CD7D326F2369106B0165766C1
:101880007676154634564CD96DC90EF92FE9C899AC
:10189000E9898AB9ABA94458654806782768C01811
:1018A000E1088238A3287DCB5CDB3FEB1EFBF98B84
:1018B000D89BBBAB9ABB754A545A376A167AF10A61
:1018C000D01AB32A923A2EFD0FED6CDD4DCDAABD94
:1018D0008BADE89DC98D267C076C645C454CA23CB1
:1018E000832CE01CC10C1FEF3EFF5DCF7CDF9BAF64
:1018F000BABFD98FF89F176E367E554E745E932E01
:0C190000B23ED10EF01E000000000000FE
:10190C0001140000090243000201008032090400A6
:10191C00000102020000052400100104240200054D
:10192C00240600010524010001070583030800FFBC
:10193C0009040100020A00000007058102400000B2
:10194C00070502024000000000C201000000080070
:0C195C00690000004100000000000000D5
:040000030000060DE6
:00000001FF

View file

@ -1,376 +0,0 @@
:10000000FC7F0020E9050000D5050000D9050000AF
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000DD050000EE
:100030000000000000000000E1050000E5050000F0
:1000400010B5064C2378002B07D1054B002B02D0AE
:10005000044800E000BF0123237010BD58000020B9
:1000600000000000F816000008B5084B002B03D074
:100070000748084900E000BF07480368002B03D089
:10008000064B002B00D0984708BDC046000000007A
:10009000F81600005C000020540000200000000062
:1000A00010B5C3699C07FCD403680224A343036012
:1000B000C46901231C42FBD1046823430360036825
:1000C000DC07FCD4C46901231C42FBD1C469DC40B9
:1000D0001C42F7D1084B1A430260C3695A07FCD48B
:1000E000C0239B0243608181C3699C07FCD40368E1
:1000F00002221343036010BD04000040037EDA07B0
:10010000FCD5018570470000027E01235107FBD515
:10011000428B1A4207D1428BDA401A4203D1428BFA
:1001200092081A4202D0034B01221A70008DC0B20D
:100130007047C0467400002070B50368041C988B9B
:100140001A1C0821FF32084228D0988B174D014312
:10015000802099839872112353704021144B917120
:1001600050715E68C0202E40800506435E605E6967
:100170003540284358610F4818600F4818615D6882
:100180000E4828408025AD02284358605868800BEF
:100190008003586000235171237105E0137ADA0659
:1001A00002D5201C00F0A0FA207970BDFFFFFF8F60
:1001B0008C0100208C0000200C010020FF3F00F08B
:1001C000002303714371044B016083600B780222AA
:1001D00013430B707047C0463901000038B5364BE9
:1001E0002021DA6901200A43DA61344B06241A78A7
:1001F00002431A70324B0F22197891431970197803
:10020000214319702F490C782043087019780A404F
:100210001A701A7860210A431A702B4B2B4A5A80A5
:100220005A7852B2002AFBDB294B01211A780A4383
:100230001A709A78D107FCD426480268510B1F2205
:100240001140914200D1052111408C011D8D2249A0
:100250002940214319850468A10C0A401F2A00D1B6
:100260001D221C8D1F210A408C4322431A850268DF
:100270000721D20D0A408A4200D103220A40188D7C
:100280001103164A02400A431A8519787F220A4050
:100290001A701A78042112480A431A7058621A898F
:1002A0000C218A431A811A8901218A431A8100216B
:1002B000802201F0B6F838BD0004004058440041E7
:1002C0003C44004159440041000C004006400000FD
:1002D00000500041246080003FF8FFFFFF8FFFFFC8
:1002E0008C010020F7B5141C234A5F0101971D1CE7
:1002F000D319061C5869271C4000400F03301033E7
:10030000C74006D00F1C8022596812060A435A6063
:1003100009E02F1C7B1E9F41184BBF01FF18381CA2
:10032000221C01F075F8019913480835421817612D
:10033000131C5269A104920B890C92030A435A615F
:1003400059690F4A02200A405A616B01F318D979A2
:10035000032211400143D8799043021C0A43DA7109
:100360005979802252420A435A716B01F318DB79A2
:100370009A07FAD5201CFEBD8C0100200C0100203C
:10038000FF3F00F0F8B51E4E041C3378151C002BFF
:1003900012D11C4B1C4A1A645A6C920B92035A6479
:1003A000586C1A4A02405A64A2235B00E25C402067
:1003B0000243E254012333704827FF37E25D0123F3
:1003C00013401AD00F4B5A6C9204920CAA4202D2DC
:1003D0005D6CAD04AD0C081C2A1C0B4901F018F82B
:1003E000E25D03231A4001210A43E15D99430B1C9E
:1003F0001343E3550023337000E01D1C281CF8BD97
:10040000750000208C010020CC000020FF3F00F090
:10041000FF30827930239A43131C2022002900D117
:1004200010221343837170470C4BFF305A6902212D
:10043000920B92035A61027A03231A400A43017A0B
:1004400099430B1C13430372827980235B4213434D
:100450008371037A9A07FCD57047C0468C0100204F
:1004600080235B421943C9B28172704770B5A023E3
:1004700003225B00C254134B134A5C6CC02114402E
:1004800089050C4346255C64FF35402444550F4DD7
:1004900030261D6490256D0046555D6B154029433F
:1004A000922559636D0080214155094D1D63B0258A
:1004B0006D0044555C6F22405A67B2235B00C15403
:1004C00070BDC0468C010020FFFFFF8FCC000020D4
:1004D0004C01002030B5364A1E235168082099434C
:1004E00002231943516033498A6902438A613248C1
:1004F000324A9082908A03439382D3689807FCD54E
:100500002F4B012018701878C40704D52C48407868
:1005100040B20028F7DB01209860587840B20028EC
:10052000FBDB284C26484460587840B20028FBDBAF
:1005300082242348E4014480587840B20028FBDB41
:10054000908C8024A0439084D068C506FCD51E4CB6
:100550001A48C462D4681948E506FBD5848C1B4D43
:100560002C438484D4681548E506FBD5848C022589
:100570002C438484D0680406FCD51048C068450626
:10058000F8D5D068C406FCD500229A605A7852B2D9
:10059000002AFBDB0E480A4A50605A7852B2002A01
:1005A000FBDB00230B724B728B72CB7230BDC046EB
:1005B00000400041000400400C060000000800401C
:1005C000000C004001050100B805FF7D040A000091
:1005D000000703000EBEFEE70DBEFEE705BEFEE708
:1005E00002BEFEE701BEFEE70E4A0F4838B5824262
:1005F00004D10E4A0E4B93420ED10AE00D4C9442A8
:10060000F7D00023D1188842F3D9E55804330D60A0
:10061000F8E700F011F804E09342FAD2002102C397
:10062000FAE7FEE7000000205800002098030020B1
:1006300058000020FC16000010B5244B0022197849
:1006400001231940224B0AD11868224A904201D155
:10065000196014E01A60204A013A002AFCD11A609D
:100660001E4B1968181C4A1C09D0FF22134206D1E0
:1006700081F3088893431A4A936043681847FFF749
:1006800029FF62B600F0F2FC00F0C8F9041CA36870
:10069000201C9847134B002801D001221A701A78A9
:1006A000002A05D0002000F035FA00F091FAFCE7AE
:1006B0001B78002BEBD100F04DFD0028E7D0012086
:1006C00000F028FA00F084FAFCE7C0463804004045
:1006D000FC7F00203581730748E8010000200000FE
:1006E00000ED00E076000020F8B50468051C201C31
:1006F000FF30037AB64A10210B430372B54F1378CB
:10070000B5493B705378B54E0B7093783380D178F0
:10071000338809020B4333801179B14B1980517929
:100720001F8809020F431F809779AE490F80D27945
:100730000F8812023A430A8040224271A648A54F10
:1007400002783878A84F12020243181CBA4200D12E
:1007500099E01EDC802149008A4200D158E107DC83
:10076000812A6AD0822A6ED0802A00D050E164E0CB
:1007700081235B009A4200D1AFE000DA23E1C0237D
:100780009B009A4200D143E1984B9A4200D11AE172
:100790003EE190231B019A4242D015DCD023DB00BE
:1007A0009A4222D088231B019A4242D0A023DB0028
:1007B0009A4200D02CE1201CFFF736FE31882868D1
:1007C00089B2FFF74DFE27E1894B9A4200D1FAE04A
:1007D00000DC1DE1874B9A4200D1E8E0864B9A424B
:1007E00000D015E133886B71EDE033881B0A012BD3
:1007F00008D10B8812222868934201D80A8892B245
:100800007E49DCE033881B0A022B00D000E10B8814
:1008100043222868934201D80A8892B27849CEE0F0
:100820003388201C2B71FFF7FFFD201CFFF71EFEF5
:10083000F2E0291C01C90122C1E0724900230B80AA
:1008400028680222BCE06F4900220A8018885022E2
:1008500010406D4A10701E880F2030401880188894
:10086000032800D9D4E012781B8808335B01E41810
:10087000A379002A01D09B0600E0DB06DB0F0B808A
:10088000286802229BE019887F2291435E4AC9B200
:10089000117018880F21014019803188002900D07B
:1008A000B6E01988002900D1B2E01988032900D9DF
:1008B000AEE012781B8808335B01E318002A05D0EC
:1008C0005A7930218A4320210A4304E05A793021A1
:1008D0008A43102002435A7175E002887F239A43AD
:1008E000494BD2B21A7001880F220A400280328826
:1008F000002A00D08CE00288002A00D188E002881B
:10090000032A00D984E01B78002B27D00388083302
:100910005B01E3189B79990655D50388302108338C
:100920005B01E3181A798A4320210A431A7103886C
:1009300008335B01E318DB795A0644D5038860214C
:1009400008335B01E318DA798A4340210A43DA71FC
:100950000388022208335B01E31826E0038808338A
:100960005B01E3189B79DF062DD50388302108331E
:100970005B01E3181A798A4310210A431A7103882C
:1009800008335B01E318DB7999061CD503886021E5
:1009900008335B01E318DA798A4320210A43DA71CC
:1009A0000388012208335B01E3181A710BE00B88FE
:1009B00008222868934201D80A8892B2134900237A
:1009C000FFF790FC28E0201CFFF72EFD24E0C04636
:1009D0008C0000208100002077000020780000209B
:1009E0007C0000207E0000200203000001030000C4
:1009F00021200000A1210000212200004C14000051
:100A0000000000207A000020800000204400002028
:100A1000201C0121FFF7FCFCF8BDC04610B5054BBA
:100A2000054C2360FFF7DAFB201C2168FFF7C8FBA9
:100A3000201C10BD005000410C02002007B5054BE2
:100A40000122019001A91868131CFFF74BFC01203B
:100A50000EBDC0460C02002013B5054B6C46073492
:100A60001868211C0122FFF78DFC207816BDC046B6
:100A70000C02002010B5074C201CFFF75DFB031C87
:100A80000020834205D022684823FF33D05C012335
:100A9000184010BD0C02002010B5054A0C1C031CA8
:100AA000191C10680123221CFFF71CFC201C10BD20
:100AB0000C02002070B5084C061C201C0D1CFFF712
:100AC0003BFB0023984205D02068311C2A1CFFF70D
:100AD00059FC031C181C70BD0C020020F8B50C4C0E
:100AE000051C201C0E1CFFF727FB0023271C341CB1
:100AF00098420AD0002C07D0291C221C3868FFF726
:100B000041FC241A2D18F5E7331C181CF8BDC0460B
:100B10000C020020012805D1054B064A1A60064B3D
:100B2000187004E0002802D1044A014B1A60704793
:100B30007C0200208014000089000020CC140000FA
:100B400030B51A4B85B01B78002B29D0042901D170
:100B5000026804E0022901D1028800E0027849001D
:100B600004A843180B3B5C1AA3420BD00F20104083
:100B7000092802D83025284300E0373018701209C0
:100B8000013BF1E701A830230370782343700A2268
:100B900043189A700D22DA70054B04311B6801E08E
:100BA000034B1B68DB68984705B030BD8800002008
:100BB0007C02002072B6EFF30883044A13600368D6
:100BC00083F30888436818477047C04680020020B6
:100BD000F0B58FB006A9CD4A0B1C31CA31C351CA3A
:100BE00051C360CA60C3CA4CCA48A3687A255B0374
:100BF0005B0F9B005B58C8490360A26892B25343E5
:100C00000A60C649C64A0B6000231360C54B1D70BD
:100C1000C54BC64D1B68281C1B6940219847C44B17
:100C200000221860C34B1D60C34BC34DC04F1A60F8
:100C3000286839688842EBD2BE4B1B681A78FF2AB5
:100C400000D1F7E1232A00D0CEE1BC4E3378002B4F
:100C500005D0B54BBA481B680221DB689847B14BF9
:100C60001B78532B38D13B682A6893421ED9B14870
:100C700001322A609A1AB34B01681B680131016086
:100C8000B14E9A4201D2326000E03360A44832682B
:100C90000068029000F0BCFB336829685A182A608B
:100CA000A44A1668F1181160A84A13702B68013B1A
:100CB0002B60A04B1A68013A1A60A44BA14A1B781A
:100CC00011688B4206D2984A954812680068C91A82
:100CD00092699047C04676E1522B07D1904A924BD9
:100CE00010681B68974A5B6911686BE14F2B05D14F
:100CF0008B4B944A1B6812681A7064E1482B05D12B
:100D0000874B904A1B6812681A805CE1572B05D10B
:100D1000834B8C4A1B6812681A6054E16F2B03D115
:100D20007F4B0121186807E0682B08D17C4B854870
:100D30001B6802211B880360FFF702FF43E1772B4A
:100D400006D1774B7F481B6804211B680360F3E7DB
:100D5000472B13D17B4B1868FFF72CFF7C4B1B688C
:100D600083F3088862B67B4B1B78002B00D12AE105
:100D70006D4B06201B681B68984724E1542B04D157
:100D800001233370684B1B685CE04E2B0BD133782A
:100D9000002B05D1644B6A481B680221DB68984729
:100DA000002333700FE1562B50D15F4D01212B688A
:100DB0006948DB6898472B680321DB6867489847D8
:100DC000674E2B68301CDB68012198472B680D218A
:100DD000DB68644898472B68301CDB680121984722
:100DE000544F614B544E3B60002333603A1C311C1E
:100DF0001368581C10601B780393002B03D00B68FA
:100E000001330B60F4E72B683168DB68564898477C
:100E10002B685348DB68012198470398306053489A
:100E20003860444A1368591C11601A78424B002AF2
:100E300003D01A6801321A60F3E72A681968D36888
:100E400098472B68DB683E480221BBE03D4A582B9F
:100E500015D1304E314D366813682A68B10093427F
:100E600008D25808E06142482080207DC507FCD5A3
:100E70005B18F4E72C4B3F481B68DB68A1E0592B5B
:100E800033D11268264B3C49002A02D11B680B6003
:100E900026E00868196863688025AB4392086360A0
:100EA000002A1DD0354B2380237DDE07FCD500238F
:100EB000184D2D680095AD08AB4202D3304D25800A
:100EC00006E09342FAD09D00465901334E51EFE7B8
:100ED000257DEE07FCD59D0049194019D21ADFE7A0
:100EE000114B28481B68DB686BE05A2B6BD10C4B0D
:100EF00017681D680026EF19BD4245D02878311CBF
:100F000000F04AF90135061CF6E7C04660140000FF
:100F100000400041340200202C0200202802002062
:100F200078020020240200207C02002038020020E9
:100F30001C02002020020020300200208800002037
:100F4000C014000084020020880200201802002043
:100F500080020020890000209C140000C5140000BD
:100F60009E140000E8140000A0140000AC1400005F
:100F700002A5FFFFB51400008400002044A5FFFF78
:100F800004A5FFFFB91400002E4D2F482B68012146
:100F9000DB68984707230F223240111C3609303195
:100FA000092A00DD07311020C0186A468154013B30
:100FB000F1D22B6804A8DB68082198472B682348E6
:100FC000DB6803219847224D7A232B70214B0022A6
:100FD0001A60214B1B7893422CD01A4B01211B68BD
:100FE0001E48DB68984725E0111C3039C8B2194B00
:100FF000092804D81E683201114319601AE0111C37
:101000004139052903D81868373A010106E0111C57
:101010006139052904D81D68573A29010A4308E0B7
:101020002C2A03D10E4A1E68166001E008490A7096
:1010300000221A600B4B1A6801321A600A4B1A68B8
:101040000132F2E57C020020BD140000BF14000054
:10105000240200208402002088000020C314000025
:1010600078020020300200202002002010B51C4B26
:1010700001201A78022402431A701A4B0F221978A1
:101080009143197019782143197017490C7820433E
:10109000087019780A401A701A7820210A431A70C9
:1010A000124B04211A6A0A431A62114B114A5A80E0
:1010B0005A7852B2002AFBDBC4220F480F49920330
:1010C000FEF7EEFF0E4A002313700E4A13700E4A0D
:1010D00013700E4A13700E4A13700E4A137010BD2F
:1010E0004A440041354400414B4400410004004063
:1010F000000C0040144000000008004204C500003D
:101100008C020020130300208D020020900200209A
:10111000140300201103002008B5C1B20248FEF7F5
:10112000EDFF012008BDC04600080042024B187EBA
:101130004007C00F7047C0460008004208B5FFF7DF
:10114000F5FF0028FBD00248FEF7DEFF08BDC046D1
:101150000008004208B5FFF7E9FF0023984205D0D8
:10116000FFF7ECFF031C233B5A425341181C08BDF8
:1011700070B5041C0D1C4618B44204D02078FFF74B
:10118000CBFF0134F8E7281C70BD10B5041CFFF735
:10119000D5FF2070012010BD0B0A5840034B4000C2
:1011A000C05A0902484080B27047C046F614000099
:1011B000F7B50024051C0F1C261CBC4220D0FFF7ED
:1011C000BDFF114BC0B21B780190002B1AD1311C0E
:1011D000FFF7E2FF0D4B061C1A88002A04D10C4AC7
:1011E00011782A1C002907D001996A1C2970802FC8
:1011F00002D11988013919800134A4B2151CDCE729
:10120000301C00E00120FEBD110300208E020020F2
:1012100012030020F0B53E4E85B0002203900C1C56
:1012200032703C4B914201D1012201E03A490C80DD
:101230001A707F231C4201D080349C43FFF77EFF4D
:101240003378C0B2002B07D000253570FFF776FF4A
:101250003378C0B2AB4236D1432803D0712853D083
:101260001528EBD1012300930120FFF755FF0098CB
:10127000FFF752FF00998025C843C0B2FFF74CFF2B
:10128000039B00270293244A1388002B1DD1214978
:1012900001930978002918D10198FFF73DFF391C07
:1012A0000198FFF779FF013D071C002DEBD1000AE3
:1012B000C0B2FFF731FFF8B2FFF72EFFFFF73EFF96
:1012C0003378002B0AD035701FE00299013B097872
:1012D0001380029B019101330293DDE7C0B206281F
:1012E00007D1009B03990133DBB280310093803C2E
:1012F0000391002CB8D10420FFF70EFFFFF71EFF6B
:10130000044B01251C7000E00025281C05B0F0BD31
:1013100011030020120300208E020020F0B5384C8B
:1013200087B0002301902370994201D1012301E08D
:10133000344A1180344A642613704320FFF7ECFED0
:10134000324FFFF7F3FE002803D1002F03D0013FF7
:10135000F7E7002F03D1013E002EEED14DE001252D
:10136000FFF7ECFE2378002B38D1C0B202900128A1
:1013700005D004283DD10620FFF7CEFE39E005AEAA
:101380000221301CFFF714FF01988021FFF710FFA6
:1013900023780390002B18D1FFF7D0FE0702FFF748
:1013A000CDFEBFB223783F18BFB2012B0DD0039BF7
:1013B0009F4207D13378AB4204D1EB437278DBB262
:1013C0009A4204D01820FFF7A7FE002303E006206E
:1013D000FFF7A2FE029B2278002A02D00026267088
:1013E0000BE0012B05D1019A6B1C8032DDB201921A
:1013F000B6E7054A002313700126301C07B0F0BD84
:10140000110300208E0200201203002000350C0082
:1014100010B50023934203D0CC5CC4540133F9E7E8
:1014200010BD031C8218934202D019700133FAE7F1
:1014300070470000F8B5C046F8BC08BC9E4670472F
:10144000F8B5C046F8BC08BC9E46704712010002C1
:101450000200004041234D02000200000001000094
:101460000800000010000000200000004000000004
:1014700080000000000100000002000000040000E5
:10148000191100003D1100002D1100007111000024
:101490008B110000151200001D13000076002000C3
:1014A0004E6F7620313220323031350031373A32CA
:1014B000323A323800580A0D00590A0D005A0023FA
:1014C0000A0D003E00322E30000000003D0A0000F0
:1014D000590A0000750A0000990A0000B50A0000C8
:1014E000990A0000DD0A00005B41726475696E6F45
:1014F0003A58595A5D000000211042206330844060
:10150000A550C660E770088129914AA16BB18CC1D2
:10151000ADD1CEE1EFF13112100273325222B55249
:101520009442F772D662399318837BB35AA3BDD322
:101530009CC3FFF3DEE36224433420040114E66419
:10154000C774A44485546AA54BB528850995EEE572
:10155000CFF5ACC58DD55336722611163006D77629
:10156000F6669556B4465BB77AA719973887DFF7C2
:10157000FEE79DD7BCC7C448E5588668A7784008F1
:10158000611802282338CCC9EDD98EE9AFF9488912
:1015900069990AA92BB9F55AD44AB77A966A711A89
:1015A000500A333A122AFDDBDCCBBFFB9EEB799B62
:1015B000588B3BBB1AABA66C877CE44CC55C222CD9
:1015C000033C600C411CAEED8FFDECCDCDDD2AADB2
:1015D0000BBD688D499D977EB66ED55EF44E133E69
:1015E000322E511E700E9FFFBEEFDDDFFCCF1BBF02
:1015F0003AAF599F788F8891A981CAB1EBA10CD1DC
:101600002DC14EF16FE18010A100C230E3200450E3
:10161000254046706760B9839893FBA3DAB33DC356
:101620001CD37FE35EF3B1029012F322D232354233
:10163000145277625672EAB5CBA5A89589856EF5E6
:101640004FE52CD50DC5E234C324A0148104667483
:10165000476424540544DBA7FAB79987B8975FE736
:101660007EF71DC73CD7D326F2369106B0165766D3
:101670007676154634564CD96DC90EF92FE9C899BE
:10168000E9898AB9ABA94458654806782768C01823
:10169000E1088238A3287DCB5CDB3FEB1EFBF98B96
:1016A000D89BBBAB9ABB754A545A376A167AF10A73
:1016B000D01AB32A923A2EFD0FED6CDD4DCDAABDA6
:1016C0008BADE89DC98D267C076C645C454CA23CC3
:1016D000832CE01CC10C1FEF3EFF5DCF7CDF9BAF76
:1016E000BABFD98FF89F176E367E554E745E932E13
:0C16F000B23ED10EF01E00000000000011
:1016FC0009024300020100803209040000010202C9
:10170C000000052400100104240200052406000139
:10171C000524010001070583030800FF09040100EB
:10172C00020A0000000705810240000007050202C2
:10173C004000000000C20100000008006900000029
:08174C00410000000000000054
:04000003000005E90B
:00000001FF

View file

@ -124,14 +124,24 @@ void loop( void ) ;
#define digitalPinToInterrupt(P) ( P )
#endif
// Allows publishing the Beta core under samd-beta / arduino organization
#ifndef ARDUINO_ARCH_SAMD
#define ARDUINO_ARCH_SAMD
#endif
// USB
#ifdef USE_TINYUSB
#include "Adafruit_TinyUSB_Core.h"
#else
// USB Device
#include "USB/USBDesc.h"
#include "USB/USBCore.h"
#include "USB/USBAPI.h"
#include "USB/USB_host.h"
#ifdef __cplusplus
#include "USB/CDC.h"
#endif
#endif
#endif // Arduino_h

View file

@ -16,9 +16,6 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "Arduino.h"

View file

@ -102,6 +102,7 @@ reset:
static int ticks = -1;
void initiateReset(int _ticks) {
resetExternalChip();
ticks = _ticks;
}

View file

@ -26,6 +26,8 @@ void initiateReset(int ms);
void tickReset();
void cancelReset();
__attribute__ ((weak)) void resetExternalChip() {};
#ifdef __cplusplus
}
#endif

View file

@ -17,6 +17,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "Arduino.h"
#include "SERCOM.h"
#include "variant.h"
#include "Arduino.h"
@ -537,8 +538,18 @@ bool SERCOM::startTransmissionWIRE(uint8_t address, SercomWireReadWriteFlag flag
// 7-bits address + 1-bits R/W
address = (address << 0x1ul) | flag;
// Wait idle or owner bus mode
while ( !isBusIdleWIRE() && !isBusOwnerWIRE() );
// If another master owns the bus or the last bus owner has not properly
// sent a stop, return failure early. This will prevent some misbehaved
// devices from deadlocking here at the cost of the caller being responsible
// for retrying the failed transmission. See SercomWireBusState for the
// possible bus states.
if(!isBusOwnerWIRE())
{
if( isBusBusyWIRE() || (isArbLostWIRE() && !isBusIdleWIRE()) )
{
return false;
}
}
// Send start and address
sercom->I2CM.ADDR.bit.ADDR = address;
@ -550,6 +561,12 @@ bool SERCOM::startTransmissionWIRE(uint8_t address, SercomWireReadWriteFlag flag
{
// Wait transmission complete
}
// Check for loss of arbitration (multiple masters starting communication at the same time)
if(!isBusOwnerWIRE())
{
// Restart communication
startTransmissionWIRE(address >> 1, flag);
}
}
else // Read mode
{
@ -634,6 +651,16 @@ bool SERCOM::isBusOwnerWIRE( void )
return sercom->I2CM.STATUS.bit.BUSSTATE == WIRE_OWNER_STATE;
}
bool SERCOM::isArbLostWIRE( void )
{
return sercom->I2CM.STATUS.bit.ARBLOST == 1;
}
bool SERCOM::isBusBusyWIRE( void )
{
return sercom->I2CM.STATUS.bit.BUSSTATE == WIRE_BUSY_STATE;
}
bool SERCOM::isDataReadyWIRE( void )
{
return sercom->I2CS.INTFLAG.bit.DRDY;
@ -676,7 +703,7 @@ uint8_t SERCOM::readDataWIRE( void )
{
if(isMasterWIRE())
{
while( sercom->I2CM.INTFLAG.bit.SB == 0 )
while( sercom->I2CM.INTFLAG.bit.SB == 0 && sercom->I2CM.INTFLAG.bit.MB == 0 )
{
// Waiting complete receive
}

View file

@ -225,6 +225,8 @@ class SERCOM
bool isSlaveWIRE( void ) ;
bool isBusIdleWIRE( void ) ;
bool isBusOwnerWIRE( void ) ;
bool isArbLostWIRE( void );
bool isBusBusyWIRE( void );
bool isDataReadyWIRE( void ) ;
bool isStopDetectedWIRE( void ) ;
bool isRestartDetectedWIRE( void ) ;

View file

@ -179,9 +179,19 @@ void tone (uint32_t outputPin, uint32_t frequency, uint32_t duration)
void noTone (uint32_t outputPin)
{
resetTC(TONE_TC);
digitalWrite(outputPin, LOW);
toneIsActive = false;
/* 'tone' need to run at least once in order to enable GCLK for
* the timers used for the tone-functionality. If 'noTone' is called
* without ever calling 'tone' before then 'WAIT_TC16_REGS_SYNC(TCx)'
* will wait infinitely. The variable 'firstTimeRunning' is set the
* 1st time 'tone' is set so it can be used to detect wether or not
* 'tone' has been called before.
*/
if(firstTimeRunning)
{
resetTC(TONE_TC);
digitalWrite(outputPin, LOW);
toneIsActive = false;
}
}
#ifdef __cplusplus

View file

@ -20,6 +20,8 @@
#include <Arduino.h>
#include <Reset.h> // Needed for auto-reset with 1200bps port touch
#include "CDC.h"
#include "SAMD21_USBDevice.h"
#include <stdlib.h>
#include <stdio.h>
@ -27,6 +29,8 @@
#ifdef CDC_ENABLED
extern USBDevice_SAMD21G18x usbd;
#define CDC_SERIAL_BUFFER_SIZE 256
/* For information purpose only since RTS is not always handled by the terminal application */
@ -35,7 +39,7 @@
#define CDC_LINESTATE_READY (CDC_LINESTATE_RTS | CDC_LINESTATE_DTR)
typedef struct {
typedef struct __attribute__((packed)) {
uint32_t dwDTERate;
uint8_t bCharFormat;
uint8_t bParityType;
@ -43,7 +47,6 @@ typedef struct {
uint8_t lineState;
} LineInfo;
_Pragma("pack(1)")
static volatile LineInfo _usbLineInfo = {
115200, // dWDTERate
0x00, // bCharFormat
@ -54,45 +57,80 @@ static volatile LineInfo _usbLineInfo = {
static volatile int32_t breakValue = -1;
static CDCDescriptor _cdcInterface = {
D_IAD(0, 2, CDC_COMMUNICATION_INTERFACE_CLASS, CDC_ABSTRACT_CONTROL_MODEL, 0),
// CDC
#define CDC_ACM_INTERFACE pluggedInterface // CDC ACM
#define CDC_DATA_INTERFACE uint8_t(pluggedInterface + 1) // CDC Data
#define CDC_ENDPOINT_ACM pluggedEndpoint
#define CDC_ENDPOINT_OUT pluggedEndpoint + 1
#define CDC_ENDPOINT_IN pluggedEndpoint + 2
// CDC communication interface
D_INTERFACE(CDC_ACM_INTERFACE, 1, CDC_COMMUNICATION_INTERFACE_CLASS, CDC_ABSTRACT_CONTROL_MODEL, 0),
D_CDCCS(CDC_HEADER, CDC_V1_10 & 0xFF, (CDC_V1_10>>8) & 0x0FF), // Header (1.10 bcd)
#define CDC_RX CDC_ENDPOINT_OUT
#define CDC_TX CDC_ENDPOINT_IN
D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT, 6), // SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported
D_CDCCS(CDC_UNION, CDC_ACM_INTERFACE, CDC_DATA_INTERFACE), // Communication interface is master, data interface is slave 0
D_CDCCS(CDC_CALL_MANAGEMENT, 1, 1), // Device handles call management (not)
D_ENDPOINT(USB_ENDPOINT_IN(CDC_ENDPOINT_ACM), USB_ENDPOINT_TYPE_INTERRUPT, 0x10, 0x10),
// CDC data interface
D_INTERFACE(CDC_DATA_INTERFACE, 2, CDC_DATA_INTERFACE_CLASS, 0, 0),
D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT), USB_ENDPOINT_TYPE_BULK, EPX_SIZE, 0),
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ), USB_ENDPOINT_TYPE_BULK, EPX_SIZE, 0)
};
_Pragma("pack()")
const void* _CDC_GetInterface(void)
{
return &_cdcInterface;
}
uint32_t _CDC_GetInterfaceLength(void)
{
return sizeof(_cdcInterface);
}
int CDC_GetInterface(uint8_t* interfaceNum)
int Serial_::getInterface(uint8_t* interfaceNum)
{
interfaceNum[0] += 2; // uses 2
return USBDevice.sendControl(&_cdcInterface,sizeof(_cdcInterface));
CDCDescriptor _cdcInterface = {
D_IAD(pluggedInterface, 2, CDC_COMMUNICATION_INTERFACE_CLASS, CDC_ABSTRACT_CONTROL_MODEL, 0),
// CDC communication interface
D_INTERFACE(CDC_ACM_INTERFACE, 1, CDC_COMMUNICATION_INTERFACE_CLASS, CDC_ABSTRACT_CONTROL_MODEL, 0),
D_CDCCS(CDC_HEADER, CDC_V1_10 & 0xFF, (CDC_V1_10>>8) & 0x0FF), // Header (1.10 bcd)
D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT, 6), // SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported
D_CDCCS(CDC_UNION, CDC_ACM_INTERFACE, CDC_DATA_INTERFACE), // Communication interface is master, data interface is slave 0
D_CDCCS(CDC_CALL_MANAGEMENT, 1, 1), // Device handles call management (not)
D_ENDPOINT(USB_ENDPOINT_IN(CDC_ENDPOINT_ACM), USB_ENDPOINT_TYPE_INTERRUPT, 0x10, 0x10),
// CDC data interface
D_INTERFACE(CDC_DATA_INTERFACE, 2, CDC_DATA_INTERFACE_CLASS, 0, 0),
D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT), USB_ENDPOINT_TYPE_BULK, EPX_SIZE, 0),
D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN), USB_ENDPOINT_TYPE_BULK, EPX_SIZE, 0)
};
return USBDevice.sendControl(&_cdcInterface, sizeof(_cdcInterface));
}
bool CDC_Setup(USBSetup& setup)
int Serial_::getDescriptor(USBSetup& /* setup */)
{
return 0;
}
static void utox8(uint32_t val, char* s) {
for (int i = 0; i < 8; i++) {
int d = val & 0XF;
val = (val >> 4);
s[7 - i] = d > 9 ? 'A' + d - 10 : '0' + d;
}
}
uint8_t Serial_::getShortName(char* name) {
// from section 9.3.3 of the datasheet
#define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x0080A00C)
#define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x0080A040)
#define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x0080A044)
#define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x0080A048)
utox8(SERIAL_NUMBER_WORD_0, &name[0]);
utox8(SERIAL_NUMBER_WORD_1, &name[8]);
utox8(SERIAL_NUMBER_WORD_2, &name[16]);
utox8(SERIAL_NUMBER_WORD_3, &name[24]);
return 32;
}
void Serial_::handleEndpoint(int /* ep */) {
}
bool Serial_::setup(USBSetup& setup)
{
uint8_t requestType = setup.bmRequestType;
uint8_t r = setup.bRequest;
uint8_t i = setup.wIndex;
if (CDC_ACM_INTERFACE != i) {
return false;
}
if (requestType == REQUEST_DEVICETOHOST_CLASS_INTERFACE)
{
@ -105,6 +143,7 @@ bool CDC_Setup(USBSetup& setup)
if (requestType == REQUEST_HOSTTODEVICE_CLASS_INTERFACE)
{
if (r == CDC_SET_LINE_CODING)
{
USBDevice.recvControl((void*)&_usbLineInfo, 7);
@ -120,7 +159,7 @@ bool CDC_Setup(USBSetup& setup)
// auto-reset into the bootloader is triggered when the port, already
// open at 1200 bps, is closed. We check DTR state to determine if host
// port is open (bit 0 of lineState).
if (_usbLineInfo.dwDTERate == 1200 && (_usbLineInfo.lineState & 0x01) == 0)
if (_usbLineInfo.dwDTERate == 1200 && (_usbLineInfo.lineState & CDC_LINESTATE_DTR) == 0)
{
initiateReset(250);
}
@ -128,18 +167,32 @@ bool CDC_Setup(USBSetup& setup)
{
cancelReset();
}
return false;
USBDevice.sendZlp(0);
}
if (CDC_SEND_BREAK == r)
{
breakValue = ((uint16_t)setup.wValueH << 8) | setup.wValueL;
return false;
USBDevice.sendZlp(0);
}
return true;
}
return false;
}
Serial_::Serial_(USBDeviceClass &_usb) : PluggableUSBModule(3, 2, epType), usb(_usb), stalled(false)
{
epType[0] = USB_ENDPOINT_TYPE_INTERRUPT | USB_ENDPOINT_IN(0);
epType[1] = USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_OUT(0);
epType[2] = USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_IN(0);
PluggableUSB().plug(this);
}
void Serial_::enableInterrupt() {
usbd.epBank1EnableTransferComplete(CDC_ENDPOINT_ACM);
usbd.epBank0EnableTransferComplete(CDC_ENDPOINT_OUT);
}
void Serial_::begin(uint32_t /* baud_count */)
{
// uart config is ignored in USB-CDC
@ -155,9 +208,11 @@ void Serial_::end(void)
memset((void*)&_usbLineInfo, 0, sizeof(_usbLineInfo));
}
int _serialPeek = -1;
int Serial_::available(void)
{
return usb.available(CDC_ENDPOINT_OUT);
return usb.available(CDC_ENDPOINT_OUT) + (_serialPeek != -1);
}
int Serial_::availableForWrite(void)
@ -167,8 +222,6 @@ int Serial_::availableForWrite(void)
return (EPX_SIZE - 1);
}
int _serialPeek = -1;
int Serial_::peek(void)
{
if (_serialPeek != -1)
@ -206,6 +259,10 @@ void Serial_::flush(void)
usb.flush(CDC_ENDPOINT_IN);
}
void Serial_::clear(void) {
usb.clear(CDC_ENDPOINT_IN);
}
size_t Serial_::write(const uint8_t *buffer, size_t size)
{
/* only try to send bytes if the high-level CDC connection itself
@ -259,7 +316,51 @@ Serial_::operator bool()
return result;
}
Serial_ Serial(USBDevice);
int32_t Serial_::readBreak() {
uint8_t enableInterrupts = ((__get_PRIMASK() & 0x1) == 0);
// disable interrupts,
// to avoid clearing a breakValue that might occur
// while processing the current break value
__disable_irq();
int32_t ret = breakValue;
breakValue = -1;
if (enableInterrupts) {
// re-enable the interrupts
__enable_irq();
}
return ret;
}
unsigned long Serial_::baud() {
return _usbLineInfo.dwDTERate;
}
uint8_t Serial_::stopbits() {
return _usbLineInfo.bCharFormat;
}
uint8_t Serial_::paritytype() {
return _usbLineInfo.bParityType;
}
uint8_t Serial_::numbits() {
return _usbLineInfo.bDataBits;
}
bool Serial_::dtr() {
return ((_usbLineInfo.lineState & CDC_LINESTATE_DTR) == CDC_LINESTATE_DTR);
}
bool Serial_::rts() {
return ((_usbLineInfo.lineState & CDC_LINESTATE_RTS) == CDC_LINESTATE_RTS);
}
Serial_ SerialUSB(USBDevice);
#endif

161
cores/arduino/USB/CDC.h Normal file
View file

@ -0,0 +1,161 @@
#ifndef __CDC_H__
#define __CDC_H__
#ifdef CDC_ENABLED
#include "USBDesc.h"
#include "USBAPI.h"
#include "PluggableUSB.h"
#define CDC_V1_10 0x0110
#define CDC_COMMUNICATION_INTERFACE_CLASS 0x02
#define CDC_CALL_MANAGEMENT 0x01
#define CDC_ABSTRACT_CONTROL_MODEL 0x02
#define CDC_HEADER 0x00
#define CDC_ABSTRACT_CONTROL_MANAGEMENT 0x02
#define CDC_UNION 0x06
#define CDC_CS_INTERFACE 0x24
#define CDC_CS_ENDPOINT 0x25
#define CDC_DATA_INTERFACE_CLASS 0x0A
// CDC CS interface descriptor
typedef struct
{
uint8_t len; // 5
uint8_t dtype; // 0x24
uint8_t subtype;
uint8_t d0;
uint8_t d1;
} CDCCSInterfaceDescriptor;
typedef struct
{
uint8_t len; // 4
uint8_t dtype; // 0x24
uint8_t subtype;
uint8_t d0;
} CDCCSInterfaceDescriptor4;
typedef struct
{
uint8_t len;
uint8_t dtype; // 0x24
uint8_t subtype; // 1
uint8_t bmCapabilities;
uint8_t bDataInterface;
} CMFunctionalDescriptor;
typedef struct
{
uint8_t len;
uint8_t dtype; // 0x24
uint8_t subtype; // 1
uint8_t bmCapabilities;
} ACMFunctionalDescriptor;
typedef struct
{
// IAD
IADDescriptor iad; // Only needed on compound device
// Control
InterfaceDescriptor cif;
CDCCSInterfaceDescriptor header;
ACMFunctionalDescriptor controlManagement; // ACM
CDCCSInterfaceDescriptor functionalDescriptor; // CDC_UNION
CMFunctionalDescriptor callManagement; // Call Management
EndpointDescriptor cifin;
// Data
InterfaceDescriptor dif;
EndpointDescriptor in;
EndpointDescriptor out;
} CDCDescriptor;
//================================================================================
// Serial over CDC (Serial1 is the physical port)
class Serial_ : public Stream, public PluggableUSBModule {
public:
Serial_(USBDeviceClass &_usb);
void begin(uint32_t baud_count);
void begin(unsigned long, uint8_t);
void end(void);
virtual int available(void);
virtual int availableForWrite(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual void clear(void);
virtual size_t write(uint8_t);
virtual size_t write(const uint8_t *buffer, size_t size);
using Print::write; // pull in write(str) from Print
operator bool();
size_t readBytes(char *buffer, size_t length);
// This method allows processing "SEND_BREAK" requests sent by
// the USB host. Those requests indicate that the host wants to
// send a BREAK signal and are accompanied by a single uint16_t
// value, specifying the duration of the break. The value 0
// means to end any current break, while the value 0xffff means
// to start an indefinite break.
// readBreak() will return the value of the most recent break
// request, but will return it at most once, returning -1 when
// readBreak() is called again (until another break request is
// received, which is again returned once).
// This also mean that if two break requests are received
// without readBreak() being called in between, the value of the
// first request is lost.
// Note that the value returned is a long, so it can return
// 0-0xffff as well as -1.
int32_t readBreak();
// These return the settings specified by the USB host for the
// serial port. These aren't really used, but are offered here
// in case a sketch wants to act on these settings.
uint32_t baud();
uint8_t stopbits();
uint8_t paritytype();
uint8_t numbits();
bool dtr();
bool rts();
enum {
ONE_STOP_BIT = 0,
ONE_AND_HALF_STOP_BIT = 1,
TWO_STOP_BITS = 2,
};
enum {
NO_PARITY = 0,
ODD_PARITY = 1,
EVEN_PARITY = 2,
MARK_PARITY = 3,
SPACE_PARITY = 4,
};
protected:
// Implementation of the PUSBListNode
int getInterface(uint8_t* interfaceNum);
int getDescriptor(USBSetup& setup);
bool setup(USBSetup& setup);
uint8_t getShortName(char* name);
void handleEndpoint(int ep);
void enableInterrupt();
friend USBDeviceClass;
private:
int availableForStore(void);
USBDeviceClass &usb;
bool stalled;
uint32_t epType[3];
};
extern Serial_ SerialUSB;
#endif
#endif

View file

@ -24,8 +24,7 @@
#include "USBCore.h"
#include "PluggableUSB.h"
#if defined(USBCON)
#ifdef PLUGGABLE_USB_ENABLED
#if defined(USBCON) && defined(PLUGGABLE_USB_ENABLED)
extern uint32_t EndPoints[];
@ -54,13 +53,17 @@ int PluggableUSB_::getDescriptor(USBSetup& setup)
return 0;
}
void PluggableUSB_::getShortName(char *iSerialNum)
uint8_t PluggableUSB_::getShortName(char *iSerialNum)
{
PluggableUSBModule* node;
for (node = rootNode; node; node = node->next) {
iSerialNum += node->getShortName(iSerialNum);
}
*iSerialNum = 0;
PluggableUSBModule* node;
uint8_t size = 0;
for (node = rootNode; node; node = node->next) {
uint8_t len = node->getShortName(iSerialNum);
iSerialNum += len;
size += len;
}
*iSerialNum = 0;
return size;
}
bool PluggableUSB_::setup(USBSetup& setup)
@ -74,6 +77,14 @@ bool PluggableUSB_::setup(USBSetup& setup)
return false;
}
void PluggableUSB_::handleEndpoint(int ep)
{
PluggableUSBModule* node;
for (node = rootNode; node; node = node->next) {
node->handleEndpoint(ep);
}
}
bool PluggableUSB_::plug(PluggableUSBModule *node)
{
if ((lastEp + node->numEndpoints) > USB_ENDPOINTS) {
@ -107,14 +118,11 @@ PluggableUSB_& PluggableUSB()
return obj;
}
PluggableUSB_::PluggableUSB_() : lastIf(CDC_ACM_INTERFACE + CDC_INTERFACE_COUNT),
lastEp(CDC_FIRST_ENDPOINT + CDC_ENPOINT_COUNT),
rootNode(NULL)
PluggableUSB_::PluggableUSB_() : lastIf(0), lastEp(1), rootNode(NULL)
{
// Empty
}
#endif
#endif
#endif // USE_TINYUSB

View file

@ -35,6 +35,7 @@ protected:
virtual bool setup(USBSetup& setup) = 0;
virtual int getInterface(uint8_t* interfaceCount) = 0;
virtual int getDescriptor(USBSetup& setup) = 0;
virtual void handleEndpoint(int /* ep */) { /* Do nothing */ }
virtual uint8_t getShortName(char *name) { name[0] = 'A'+pluggedInterface; return 1; }
uint8_t pluggedInterface;
@ -56,7 +57,8 @@ public:
int getInterface(uint8_t* interfaceCount);
int getDescriptor(USBSetup& setup);
bool setup(USBSetup& setup);
void getShortName(char *iSerialNum);
void handleEndpoint(int ep);
uint8_t getShortName(char *iSerialNum);
private:
uint8_t lastIf;

View file

@ -9,33 +9,6 @@
#include "SAMD21_USBDevice.h"
void USBDevice_SAMD21G18x::reset() {
usb.CTRLA.bit.SWRST = 1;
memset(EP, 0, sizeof(EP));
while (usb.SYNCBUSY.bit.SWRST || usb.SYNCBUSY.bit.ENABLE) {}
usb.DESCADD.reg = (uint32_t)(&EP);
}
void USBDevice_SAMD21G18x::calibrate() {
// Load Pad Calibration data from non-volatile memory
uint32_t *pad_transn_p = (uint32_t *) USB_FUSES_TRANSN_ADDR;
uint32_t *pad_transp_p = (uint32_t *) USB_FUSES_TRANSP_ADDR;
uint32_t *pad_trim_p = (uint32_t *) USB_FUSES_TRIM_ADDR;
uint32_t pad_transn = (*pad_transn_p & USB_FUSES_TRANSN_Msk) >> USB_FUSES_TRANSN_Pos;
uint32_t pad_transp = (*pad_transp_p & USB_FUSES_TRANSP_Msk) >> USB_FUSES_TRANSP_Pos;
uint32_t pad_trim = (*pad_trim_p & USB_FUSES_TRIM_Msk ) >> USB_FUSES_TRIM_Pos;
if (pad_transn == 0x1F) // maximum value (31)
pad_transn = 5;
if (pad_transp == 0x1F) // maximum value (31)
pad_transp = 29;
if (pad_trim == 0x7) // maximum value (7)
pad_trim = 3;
usb.PADCAL.bit.TRANSN = pad_transn;
usb.PADCAL.bit.TRANSP = pad_transp;
usb.PADCAL.bit.TRIM = pad_trim;
}
#endif // USE_TINYUSB

View file

@ -37,7 +37,7 @@ public:
// ---------------------------
// Reset USB Device
void reset();
inline void reset();
// Enable
inline void enable() {
@ -90,7 +90,7 @@ public:
inline uint16_t frameNumber() { return usb.FNUM.bit.FNUM; }
// Load calibration values
void calibrate();
inline void calibrate();
// USB Device Endpoints function mapping
// -------------------------------------
@ -102,27 +102,37 @@ public:
// Interrupts
inline uint16_t epInterruptSummary() { return usb.EPINTSMRY.reg; }
inline bool epHasPendingInterrupts(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.reg != 0; }
inline bool epBank0IsSetupReceived(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.RXSTP; }
inline bool epBank0IsStalled(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.STALL0; }
inline bool epBank1IsStalled(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.STALL1; }
inline bool epBank0IsTransferFailed(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRFAIL0; }
inline bool epBank1IsTransferFailed(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRFAIL1; }
inline bool epBank0IsTransferComplete(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRCPT0; }
inline bool epBank1IsTransferComplete(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRCPT1; }
inline void epAckPendingInterrupts(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = 0x7F; }
inline void epBank0AckSetupReceived(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_RXSTP; }
inline void epBank0AckStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL(1); }
inline void epBank1AckStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL(2); }
inline void epBank0AckTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRFAIL(1); }
inline void epBank1AckTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRFAIL(2); }
inline void epBank0AckTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT(1); }
inline void epBank1AckTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT(2); }
inline void epBank0EnableSetupReceived(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.RXSTP = 1; }
inline void epBank0EnableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.STALL0 = 1; }
inline void epBank1EnableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.STALL1 = 1; }
inline void epBank0EnableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRFAIL0 = 1; }
inline void epBank1EnableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRFAIL1 = 1; }
inline void epBank0EnableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRCPT0 = 1; }
inline void epBank1EnableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRCPT1 = 1; }
inline void epBank0DisableSetupReceived(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.RXSTP = 1; }
inline void epBank0DisableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.STALL0 = 1; }
inline void epBank1DisableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.STALL1 = 1; }
inline void epBank0DisableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRFAIL0 = 1; }
inline void epBank1DisableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRFAIL1 = 1; }
inline void epBank0DisableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRCPT0 = 1; }
inline void epBank1DisableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRCPT1 = 1; }
@ -170,6 +180,15 @@ public:
inline void epBank0EnableAutoZLP(ep_t ep) { EP[ep].DeviceDescBank[0].PCKSIZE.bit.AUTO_ZLP = 1; }
inline void epBank1EnableAutoZLP(ep_t ep) { EP[ep].DeviceDescBank[1].PCKSIZE.bit.AUTO_ZLP = 1; }
// USB Device Endpoint transactions helpers
// ----------------------------------------
inline void epReleaseOutBank0(ep_t ep, uint16_t s) {
epBank0SetMultiPacketSize(ep, s);
epBank0SetByteCount(ep, 0);
epBank0ResetReady(ep);
}
private:
// USB Device registers
UsbDevice &usb;
@ -178,6 +197,35 @@ private:
__attribute__((__aligned__(4))) UsbDeviceDescriptor EP[USB_EPT_NUM];
};
void USBDevice_SAMD21G18x::reset() {
usb.CTRLA.bit.SWRST = 1;
memset(EP, 0, sizeof(EP));
while (usb.SYNCBUSY.bit.SWRST) {}
usb.DESCADD.reg = (uint32_t)(&EP);
}
void USBDevice_SAMD21G18x::calibrate() {
// Load Pad Calibration data from non-volatile memory
uint32_t *pad_transn_p = (uint32_t *) USB_FUSES_TRANSN_ADDR;
uint32_t *pad_transp_p = (uint32_t *) USB_FUSES_TRANSP_ADDR;
uint32_t *pad_trim_p = (uint32_t *) USB_FUSES_TRIM_ADDR;
uint32_t pad_transn = (*pad_transn_p & USB_FUSES_TRANSN_Msk) >> USB_FUSES_TRANSN_Pos;
uint32_t pad_transp = (*pad_transp_p & USB_FUSES_TRANSP_Msk) >> USB_FUSES_TRANSP_Pos;
uint32_t pad_trim = (*pad_trim_p & USB_FUSES_TRIM_Msk ) >> USB_FUSES_TRIM_Pos;
if (pad_transn == 0x1F) // maximum value (31)
pad_transn = 5;
if (pad_transp == 0x1F) // maximum value (31)
pad_transp = 29;
if (pad_trim == 0x7) // maximum value (7)
pad_trim = 3;
usb.PADCAL.bit.TRANSN = pad_transn;
usb.PADCAL.bit.TRANSP = pad_transp;
usb.PADCAL.bit.TRIM = pad_trim;
}
/*
* Synchronization primitives.
* TODO: Move into a separate header file and make an API out of it
@ -211,41 +259,42 @@ class EPHandler {
public:
virtual void handleEndpoint() = 0;
virtual uint32_t recv(void *_data, uint32_t len) = 0;
virtual uint32_t available() const = 0;
virtual void init() = 0;
virtual uint32_t available() = 0;
virtual int peek() = 0;
};
class DoubleBufferedEPOutHandler : public EPHandler {
public:
DoubleBufferedEPOutHandler(USBDevice_SAMD21G18x &usbDev, uint32_t endPoint, uint32_t bufferSize) :
enum { size = 64 };
DoubleBufferedEPOutHandler(USBDevice_SAMD21G18x &usbDev, uint32_t endPoint) :
usbd(usbDev),
ep(endPoint), size(bufferSize),
ep(endPoint),
current(0), incoming(0),
first0(0), last0(0), ready0(false),
first1(0), last1(0), ready1(false),
notify(false)
{
data0 = reinterpret_cast<uint8_t *>(malloc(size));
data1 = reinterpret_cast<uint8_t *>(malloc(size));
usbd.epBank0SetSize(ep, 64);
usbd.epBank0SetType(ep, 3); // BULK OUT
usbd.epBank0SetAddress(ep, const_cast<uint8_t *>(data0));
usbd.epBank0EnableTransferComplete(ep);
release();
}
virtual ~DoubleBufferedEPOutHandler() {
free((void*)data0);
free((void*)data1);
}
void init() {};
virtual uint32_t recv(void *_data, uint32_t len)
uint32_t _recv()
{
uint8_t *data = reinterpret_cast<uint8_t *>(_data);
uint32_t i = 0;
uint32_t len = 0;
synchronized {
len = _rx_buffer.availableForStore();
}
// R/W: current, first0/1, ready0/1, notify
// R : last0/1, data0/1
@ -256,9 +305,8 @@ public:
}
}
// when ready0==true the buffer is not being filled and last0 is constant
uint32_t i;
for (i=0; i<len && first0 < last0; i++) {
data[i] = data0[first0++];
for (; i<len && first0 < last0; i++) {
_rx_buffer.store_char(data0[first0++]);
}
if (first0 == last0) {
first0 = 0;
@ -271,7 +319,6 @@ public:
}
}
}
return i;
} else {
synchronized {
if (!ready1) {
@ -279,9 +326,8 @@ public:
}
}
// when ready1==true the buffer is not being filled and last1 is constant
uint32_t i;
for (i=0; i<len && first1 < last1; i++) {
data[i] = data1[first1++];
for (; i<len && first1 < last1; i++) {
_rx_buffer.store_char(data1[first1++]);
}
if (first1 == last1) {
first1 = 0;
@ -294,58 +340,25 @@ public:
}
}
}
return i;
}
return i;
}
virtual void handleEndpoint()
{
// R/W : incoming, ready0/1
// W : last0/1, notify
if (usbd.epBank0IsTransferComplete(ep))
{
// Ack Transfer complete
usbd.epBank0AckTransferComplete(ep);
//usbd.epBank0AckTransferFailed(ep); // XXX
// Update counters and swap banks for non-ZLP's
if (incoming == 0) {
last0 = usbd.epBank0ByteCount(ep);
if (last0 != 0) {
incoming = 1;
usbd.epBank0SetAddress(ep, const_cast<uint8_t *>(data1));
synchronized {
ready0 = true;
if (ready1) {
notify = true;
return;
}
notify = false;
}
}
} else {
last1 = usbd.epBank0ByteCount(ep);
if (last1 != 0) {
incoming = 0;
usbd.epBank0SetAddress(ep, const_cast<uint8_t *>(data0));
synchronized {
ready1 = true;
if (ready0) {
notify = true;
return;
}
notify = false;
}
}
virtual uint32_t recv(void *_data, uint32_t len) {
_recv();
uint32_t i = 0;
uint8_t *data = reinterpret_cast<uint8_t *>(_data);
synchronized {
for (; i < len && _rx_buffer.available(); i++) {
data[i] = _rx_buffer.read_char();
}
release();
}
return i;
}
// Returns how many bytes are stored in the buffers
virtual uint32_t available() const {
virtual uint32_t _available() const {
if (current == 0) {
bool ready = false;
bool ready = ready0;
synchronized {
ready = ready0;
}
@ -359,27 +372,72 @@ public:
}
}
virtual void handleEndpoint()
{
// R/W : incoming, ready0/1
// W : last0/1, notify
if (usbd.epBank0IsTransferComplete(ep))
{
uint32_t received = usbd.epBank0ByteCount(ep);
if (received == 0) {
release();
} else if (incoming == 0) {
// Update counters and swap banks for non-ZLP's
last0 = received;
incoming = 1;
usbd.epBank0SetAddress(ep, const_cast<uint8_t *>(data1));
synchronized {
ready0 = true;
notify = ready1;
if (!notify) {
release();
}
}
} else {
last1 = received;
incoming = 0;
usbd.epBank0SetAddress(ep, const_cast<uint8_t *>(data0));
synchronized {
ready1 = true;
notify = ready0;
if (!notify) {
release();
}
}
}
usbd.epAckPendingInterrupts(ep);
}
}
// Returns how many bytes are stored in the buffers
virtual uint32_t available() {
_recv();
return _rx_buffer.available();
}
virtual int peek() {
_recv();
return _rx_buffer.peek();
}
void release() {
// Release OUT EP
usbd.epBank0EnableTransferComplete(ep);
usbd.epBank0SetMultiPacketSize(ep, size);
usbd.epBank0SetByteCount(ep, 0);
usbd.epBank0ResetReady(ep);
usbd.epReleaseOutBank0(ep, size);
}
private:
USBDevice_SAMD21G18x &usbd;
const uint32_t ep;
const uint32_t size;
uint32_t current, incoming;
RingBuffer _rx_buffer;
volatile uint8_t *data0;
const uint32_t ep;
volatile uint32_t current, incoming;
__attribute__((__aligned__(4))) volatile uint8_t data0[size];
uint32_t first0;
volatile uint32_t last0;
volatile bool ready0;
volatile uint8_t *data1;
__attribute__((__aligned__(4))) volatile uint8_t data1[size];
uint32_t first1;
volatile uint32_t last1;
volatile bool ready1;

View file

@ -31,11 +31,7 @@
#include "Stream.h"
#include "RingBuffer.h"
#ifdef __SAMR21G18A__
#include "SAMR21_USBDevice.h"
#else
#include "SAMD21_USBDevice.h"
#endif
//================================================================================
// USB
@ -43,7 +39,7 @@
class EPHandler;
// Low level API
typedef struct {
typedef struct __attribute__((packed)) {
union {
uint8_t bmRequestType;
struct {
@ -59,6 +55,7 @@ typedef struct {
uint16_t wLength;
} USBSetup;
class USBDeviceClass {
public:
USBDeviceClass() {};
@ -85,7 +82,7 @@ public:
uint32_t sendControl(int /* ep */, const void *data, uint32_t len) { return sendControl(data, len); }
uint32_t recvControl(void *data, uint32_t len);
uint32_t sendConfiguration(uint32_t maxlen);
bool sendStringDescriptor(const uint8_t *string, uint8_t maxlen);
bool sendStringDescriptor(const uint8_t *string, uint32_t maxlen);
void initControl(int end);
uint8_t SendInterfaces(uint32_t* total);
void packMessages(bool val);
@ -93,20 +90,17 @@ public:
// Generic EndPoint API
void initEndpoints(void);
void initEP(uint32_t ep, uint32_t type);
void setHandler(uint32_t ep, EPHandler *handler);
void handleEndpoint(uint8_t ep);
uint32_t send(uint32_t ep, const void *data, uint32_t len);
void sendZlp(uint32_t ep);
uint32_t recv(uint32_t ep, void *data, uint32_t len);
int recv(uint32_t ep);
uint32_t available(uint32_t ep);
void flush(uint32_t ep);
void clear(uint32_t ep);
void stall(uint32_t ep);
// private?
uint32_t armSend(uint32_t ep, const void *data, uint32_t len);
uint8_t armRecv(uint32_t ep);
uint8_t armRecvCtrlOUT(uint32_t ep);
void ISRHandler();
@ -118,77 +112,7 @@ private:
extern USBDeviceClass USBDevice;
//================================================================================
// Serial over CDC (Serial1 is the physical port)
class Serial_ : public Stream
{
public:
Serial_(USBDeviceClass &_usb) : usb(_usb), stalled(false) { }
void begin(uint32_t baud_count);
void begin(unsigned long, uint8_t);
void end(void);
virtual int available(void);
virtual int availableForWrite(void);
virtual int peek(void);
virtual int read(void);
virtual void flush(void);
virtual size_t write(uint8_t);
virtual size_t write(const uint8_t *buffer, size_t size);
using Print::write; // pull in write(str) from Print
operator bool();
size_t readBytes(char *buffer, size_t length);
// This method allows processing "SEND_BREAK" requests sent by
// the USB host. Those requests indicate that the host wants to
// send a BREAK signal and are accompanied by a single uint16_t
// value, specifying the duration of the break. The value 0
// means to end any current break, while the value 0xffff means
// to start an indefinite break.
// readBreak() will return the value of the most recent break
// request, but will return it at most once, returning -1 when
// readBreak() is called again (until another break request is
// received, which is again returned once).
// This also mean that if two break requests are received
// without readBreak() being called in between, the value of the
// first request is lost.
// Note that the value returned is a long, so it can return
// 0-0xffff as well as -1.
int32_t readBreak();
// These return the settings specified by the USB host for the
// serial port. These aren't really used, but are offered here
// in case a sketch wants to act on these settings.
uint32_t baud();
uint8_t stopbits();
uint8_t paritytype();
uint8_t numbits();
bool dtr();
bool rts();
enum {
ONE_STOP_BIT = 0,
ONE_AND_HALF_STOP_BIT = 1,
TWO_STOP_BITS = 2,
};
enum {
NO_PARITY = 0,
ODD_PARITY = 1,
EVEN_PARITY = 2,
MARK_PARITY = 3,
SPACE_PARITY = 4,
};
private:
int availableForStore(void);
USBDeviceClass &usb;
RingBuffer *_cdc_rx_buffer;
bool stalled;
};
extern Serial_ Serial;
//================================================================================
//================================================================================
// MSC 'Driver'
@ -197,15 +121,4 @@ uint32_t MSC_GetDescriptor(uint32_t i);
bool MSC_Setup(USBSetup& setup);
bool MSC_Data(uint8_t rx,uint8_t tx);
//================================================================================
//================================================================================
// CDC 'Driver'
int CDC_GetInterface(uint8_t* interfaceNum);
const void* _CDC_GetInterface(void);
uint32_t _CDC_GetInterfaceLength(void);
uint32_t CDC_GetOtherInterface(uint8_t* interfaceNum);
uint32_t CDC_GetDescriptor(uint32_t i);
bool CDC_Setup(USBSetup& setup);
#endif // __cplusplus

View file

@ -29,6 +29,7 @@
#endif
#include "PluggableUSB.h"
#include "CDC.h"
#include <stdlib.h>
#include <stdio.h>
@ -41,7 +42,6 @@ USBDevice_SAMR21G18x usbd;
USBDevice_SAMD21G18x usbd;
#endif
/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */
#define TX_RX_LED_PULSE_MS 100
#ifdef PIN_LED_TXL
@ -110,12 +110,12 @@ static EPHandler *epHandlers[7] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL};
// Send a USB descriptor string. The string is stored as a
// plain ASCII string but is sent out as UTF-16 with the
// correct 2-byte prefix
bool USBDeviceClass::sendStringDescriptor(const uint8_t *string, uint8_t maxlen)
bool USBDeviceClass::sendStringDescriptor(const uint8_t *string, uint32_t maxlen)
{
if (maxlen < 2)
return false;
uint8_t buffer[maxlen];
uint8_t* buffer = (uint8_t*)malloc(maxlen);
buffer[0] = strlen((const char*)string) * 2 + 2;
buffer[1] = 0x03;
@ -126,7 +126,9 @@ bool USBDeviceClass::sendStringDescriptor(const uint8_t *string, uint8_t maxlen)
buffer[i] = 0;
}
return USBDevice.sendControl(buffer, i);
bool ret = USBDevice.sendControl(buffer, i);
free(buffer);
return ret;
}
bool _dry_run = false;
@ -149,10 +151,6 @@ uint8_t USBDeviceClass::SendInterfaces(uint32_t* total)
{
uint8_t interfaces = 0;
#if defined(CDC_ENABLED)
total[0] += CDC_GetInterface(&interfaces);
#endif
#ifdef PLUGGABLE_USB_ENABLED
total[0] += PluggableUSB().getInterface(&interfaces);
#endif
@ -169,9 +167,7 @@ uint32_t USBDeviceClass::sendConfiguration(uint32_t maxlen)
_dry_run = true;
uint8_t interfaces = SendInterfaces(&total);
_Pragma("pack(1)")
ConfigDescriptor config = D_CONFIG((uint16_t)(total + sizeof(ConfigDescriptor)), interfaces);
_Pragma("pack()")
// Now send them
_dry_run = false;
@ -191,15 +187,6 @@ uint32_t USBDeviceClass::sendConfiguration(uint32_t maxlen)
return true;
}
static void utox8(uint32_t val, char* s) {
for (int i = 0; i < 8; i++) {
int d = val & 0XF;
val = (val >> 4);
s[7 - i] = d > 9 ? 'A' + d - 10 : '0' + d;
}
}
bool USBDeviceClass::sendDescriptor(USBSetup &setup)
{
uint8_t t = setup.wValueH;
@ -243,27 +230,15 @@ bool USBDeviceClass::sendDescriptor(USBSetup &setup)
return sendStringDescriptor(STRING_MANUFACTURER, setup.wLength);
}
else if (setup.wValueL == ISERIAL) {
#ifdef PLUGGABLE_USB_ENABLED
#ifdef __SAMD51__
#define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x008061FC)
#define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x00806010)
#define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x00806014)
#define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x00806018)
#else // samd21
// from section 9.3.3 of the datasheet
#define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x0080A00C)
#define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x0080A040)
#define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x0080A044)
#define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x0080A048)
#endif
char name[ISERIAL_MAX_LEN];
utox8(SERIAL_NUMBER_WORD_0, &name[0]);
utox8(SERIAL_NUMBER_WORD_1, &name[8]);
utox8(SERIAL_NUMBER_WORD_2, &name[16]);
utox8(SERIAL_NUMBER_WORD_3, &name[24]);
name[32] = '\0';
return sendStringDescriptor((uint8_t*)name, setup.wLength);
memset(name, 0, sizeof(name));
uint8_t idx = 0;
#ifdef PLUGGABLE_USB_ENABLED
idx += PluggableUSB().getShortName(&name[idx]);
#endif
if (idx > 0) {
return sendStringDescriptor((uint8_t*)name, setup.wLength);
}
}
else {
return false;
@ -293,29 +268,6 @@ void USBDeviceClass::standby() {
usbd.noRunInStandby();
}
void USBDeviceClass::handleEndpoint(uint8_t ep)
{
#if defined(CDC_ENABLED)
if (ep == CDC_ENDPOINT_IN)
{
// NAK on endpoint IN, the bank is not yet filled in.
usbd.epBank1ResetReady(CDC_ENDPOINT_IN);
usbd.epBank1AckTransferComplete(CDC_ENDPOINT_IN);
}
if (ep == CDC_ENDPOINT_ACM)
{
// NAK on endpoint IN, the bank is not yet filled in.
usbd.epBank1ResetReady(CDC_ENDPOINT_ACM);
usbd.epBank1AckTransferComplete(CDC_ENDPOINT_ACM);
}
#endif
#if defined(PLUGGABLE_USB_ENABLED)
// Empty
#endif
}
void USBDeviceClass::init()
{
#ifdef PIN_LED_TXL
@ -342,8 +294,7 @@ void USBDeviceClass::init()
PORT->Group[0].PINCFG[PIN_PA25H_USB_DP].bit.PMUXEN = 1;
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg &= ~(0xF << (4 * (PIN_PA25H_USB_DP & 0x01u)));
PORT->Group[0].PMUX[PIN_PA25H_USB_DP/2].reg |= MUX_PA25H_USB_DP << (4 * (PIN_PA25H_USB_DP & 0x01u));
GCLK->PCHCTRL[USB_GCLK_ID].reg = GCLK_PCHCTRL_GEN_GCLK1_Val | (1 << GCLK_PCHCTRL_CHEN_Pos);
#else
PM->APBBMASK.reg |= PM_APBBMASK_USB;
@ -393,6 +344,10 @@ void USBDeviceClass::init()
usbd.enable();
initialized = true;
#ifdef CDC_ENABLED
SerialUSB.begin(0);
#endif
}
bool USBDeviceClass::attach()
@ -447,25 +402,13 @@ bool USBDeviceClass::configured()
bool USBDeviceClass::handleClassInterfaceSetup(USBSetup& setup)
{
uint8_t i = setup.wIndex;
#if defined(CDC_ENABLED)
if (CDC_ACM_INTERFACE == i)
{
if (CDC_Setup(setup) == false) {
sendZlp(0);
}
return true;
}
#endif
#if defined(PLUGGABLE_USB_ENABLED)
#if defined(PLUGGABLE_USB_ENABLED)
bool ret = PluggableUSB().setup(setup);
if ( ret == false) {
sendZlp(0);
}
return ret;
#endif
#endif
return false;
}
@ -474,14 +417,11 @@ uint32_t EndPoints[] =
{
USB_ENDPOINT_TYPE_CONTROL,
#ifdef CDC_ENABLED
USB_ENDPOINT_TYPE_INTERRUPT | USB_ENDPOINT_IN(0), // CDC_ENDPOINT_ACM
USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_OUT(0), // CDC_ENDPOINT_OUT
USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_IN(0), // CDC_ENDPOINT_IN
#endif
#ifdef PLUGGABLE_USB_ENABLED
//allocate 6 endpoints and remove const so they can be changed by the user
//allocate 9 endpoints and remove const so they can be changed by the user
0,
0,
0,
0,
0,
0,
@ -490,9 +430,10 @@ uint32_t EndPoints[] =
0,
#endif
};
#define EP_ARRAY_SIZE (sizeof(EndPoints)/sizeof(EndPoints[0]))
void USBDeviceClass::initEndpoints() {
for (uint8_t i = 1; i < sizeof(EndPoints) && EndPoints[i] != 0; i++) {
for (uint8_t i = 1; (i < EP_ARRAY_SIZE) && (EndPoints[i] != 0); i++) {
initEP(i, EndPoints[i]);
}
}
@ -510,22 +451,12 @@ void USBDeviceClass::initEP(uint32_t ep, uint32_t config)
if (epHandlers[ep] != NULL) {
delete (DoubleBufferedEPOutHandler*)epHandlers[ep];
}
epHandlers[ep] = new DoubleBufferedEPOutHandler(usbd, ep, 256);
epHandlers[ep] = new DoubleBufferedEPOutHandler(usbd, ep);
}
else if (config == (USB_ENDPOINT_TYPE_INTERRUPT | USB_ENDPOINT_OUT(0)))
{
if(epHandlers[ep]){
epHandlers[ep]->init();
}
}
else if (config == (USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_IN(0)))
{
usbd.epBank1SetSize(ep, 64);
usbd.epBank1SetAddress(ep, &udd_ep_in_cache_buffer[ep]);
// NAK on endpoint IN, the bank is not yet filled in.
usbd.epBank1ResetReady(ep);
usbd.epBank1SetType(ep, 3); // BULK IN
}
else if (config == USB_ENDPOINT_TYPE_CONTROL)
@ -537,22 +468,14 @@ void USBDeviceClass::initEP(uint32_t ep, uint32_t config)
// Setup Control IN
usbd.epBank1SetSize(ep, 64);
usbd.epBank1SetAddress(ep, &udd_ep_in_cache_buffer[0]);
usbd.epBank1SetAddress(ep, &udd_ep_in_cache_buffer[ep]);
usbd.epBank1SetType(ep, 1); // CONTROL IN
// Release OUT EP
usbd.epBank0SetMultiPacketSize(ep, 64);
usbd.epBank0SetByteCount(ep, 0);
// NAK on endpoint OUT, the bank is full.
usbd.epBank0SetReady(ep);
usbd.epReleaseOutBank0(ep, 64);
}
}
void USBDeviceClass::setHandler(uint32_t ep, EPHandler *handler) {
epHandlers[ep] = handler;
}
void USBDeviceClass::flush(uint32_t ep)
{
if (available(ep)) {
@ -564,6 +487,17 @@ void USBDeviceClass::flush(uint32_t ep)
}
}
void USBDeviceClass::clear(uint32_t ep) {
usbd.epBank1SetAddress(ep, &udd_ep_in_cache_buffer[ep]);
usbd.epBank1SetByteCount(ep, 0);
// Clear the transfer complete flag
usbd.epBank1AckTransferComplete(ep);
// RAM buffer is full, we can send data (IN)
usbd.epBank1SetReady(ep);
}
void USBDeviceClass::stall(uint32_t ep)
{
// TODO: test
@ -586,9 +520,6 @@ uint32_t USBDeviceClass::recvControl(void *_data, uint32_t len)
{
uint8_t *data = reinterpret_cast<uint8_t *>(_data);
// The RAM Buffer is empty: we can receive data
usbd.epBank0ResetReady(0);
//usbd.epBank0AckSetupReceived(0);
uint32_t read = armRecvCtrlOUT(0);
if (read > len)
@ -633,8 +564,7 @@ uint32_t USBDeviceClass::recv(uint32_t ep, void *_data, uint32_t len)
if (available(ep) < len)
len = available(ep);
armRecv(ep);
usbd.epBank0SetByteCount(ep, 0);
usbd.epBank0DisableTransferComplete(ep);
memcpy(_data, udd_ep_out_cache_buffer[ep], len);
@ -669,7 +599,17 @@ uint8_t USBDeviceClass::armRecvCtrlOUT(uint32_t ep)
{
// Get endpoint configuration from setting register
usbd.epBank0SetAddress(ep, &udd_ep_out_cache_buffer[ep]);
usbd.epBank0SetMultiPacketSize(ep, 8);
/* Atmel-42181GSAM-D21_Datasheet09/2015 / Page 806
*
* For OUT endpoints, MULTI_PACKET_SIZE holds the total
* data size for the complete transfer. This value must
* be a multiple of the maximum packet size.
*
* Since SIZE is 64 (see 'USBDeviceClass::initEP') for
* all endpoints MULTI_PACKET_SIZE should not be set to
* a value < SIZE, this means at least to 64.
*/
usbd.epBank0SetMultiPacketSize(ep, 64);
usbd.epBank0SetByteCount(ep, 0);
usbd.epBank0ResetReady(ep);
@ -680,17 +620,6 @@ uint8_t USBDeviceClass::armRecvCtrlOUT(uint32_t ep)
return usbd.epBank0ByteCount(ep);
}
uint8_t USBDeviceClass::armRecv(uint32_t ep)
{
uint16_t count = usbd.epBank0ByteCount(ep);
if (count >= 64) {
usbd.epBank0SetByteCount(ep, count - 64);
} else {
usbd.epBank0SetByteCount(ep, 0);
}
return usbd.epBank0ByteCount(ep);
}
// Timeout for sends
#define TX_TIMEOUT_MS 70
@ -748,7 +677,8 @@ uint32_t USBDeviceClass::send(uint32_t ep, const void *data, uint32_t len)
LastTransmitTimedOut[ep] = 0;
if (len > EPX_SIZE) {
if (len >= EPX_SIZE) {
usbd.epBank1EnableAutoZLP(ep);
length = EPX_SIZE;
} else {
length = len;
@ -877,6 +807,7 @@ bool USBDeviceClass::handleStandardSetup(USBSetup &setup)
sendZlp(0);
return true;
}
break;
case SET_ADDRESS:
setAddress(setup.wValueL);
@ -898,10 +829,8 @@ bool USBDeviceClass::handleStandardSetup(USBSetup &setup)
initEndpoints();
_usbConfiguration = setup.wValueL;
#if defined(CDC_ENABLED)
// Enable interrupt for CDC reception from host (OUT packet)
usbd.epBank1EnableTransferComplete(CDC_ENDPOINT_ACM);
usbd.epBank0EnableTransferComplete(CDC_ENDPOINT_OUT);
#ifdef CDC_ENABLED
SerialUSB.enableInterrupt();
#endif
sendZlp(0);
@ -922,17 +851,20 @@ bool USBDeviceClass::handleStandardSetup(USBSetup &setup)
default:
return true;
}
return true;
}
void USBDeviceClass::ISRHandler()
{
if (_pack_message == true) {
return;
}
// End-Of-Reset
if (usbd.isEndOfResetInterrupt())
{
usbd.ackEndOfResetInterrupt();
// Configure EP 0
initEP(0, USB_ENDPOINT_TYPE_CONTROL);
@ -940,8 +872,6 @@ void USBDeviceClass::ISRHandler()
usbd.epBank0EnableSetupReceived(0);
_usbConfiguration = 0;
usbd.ackEndOfResetInterrupt();
}
// Start-Of-Frame
@ -967,24 +897,34 @@ void USBDeviceClass::ISRHandler()
#endif
}
/* Remove any stall requests for endpoint #0 */
if (usbd.epBank0IsStalled(0)) { usbd.epBank0DisableStalled(0); }
// Endpoint 0 Received Setup interrupt
if (usbd.epBank0IsSetupReceived(0))
{
usbd.epBank0AckSetupReceived(0);
/* Retrieve received endpoint #0 data from buffer */
USBSetup setup;
memcpy(&setup, udd_ep_out_cache_buffer[0], sizeof(USBSetup));
USBSetup *setup = reinterpret_cast<USBSetup *>(udd_ep_out_cache_buffer[0]);
/* Clear the Bank 0 ready flag on Control OUT */
// The RAM Buffer is empty: we can receive data
/* Tell the USB hardware that we are ready to receive more data for endpoint #0 and also reset the byte count
* for endpoint #0 - the clearing seems to be necessary for the code to function correctly, although the datasheet
* is not clear on the subject.
*
* Atmel-42181GSAM-D21_Datasheet09/2015 / Page 806
* For IN endpoints, BYTE_COUNT holds the number of bytes to be sent in the next IN transaction.
* For OUT endpoint or SETUP endpoints, BYTE_COUNT holds the number of bytes received upon the last OUT or SETUP transaction.
*/
usbd.epBank0SetByteCount(0, 0);
usbd.epBank0ResetReady(0);
bool ok;
if (REQUEST_STANDARD == (setup->bmRequestType & REQUEST_TYPE)) {
if (REQUEST_STANDARD == (setup.bmRequestType & REQUEST_TYPE)) {
// Standard Requests
ok = handleStandardSetup(*setup);
ok = handleStandardSetup(setup);
} else {
// Class Interface Requests
ok = handleClassInterfaceSetup(*setup);
ok = handleClassInterfaceSetup(setup);
}
if (ok) {
@ -995,37 +935,25 @@ void USBDeviceClass::ISRHandler()
if (usbd.epBank1IsStalled(0))
{
usbd.epBank1AckStalled(0);
// Remove stall request
usbd.epBank1DisableStalled(0);
}
} // end Received Setup handler
uint8_t i=0;
uint8_t ept_int = usbd.epInterruptSummary() & 0xFE; // Remove endpoint number 0 (setup)
while (ept_int != 0)
{
// Check if endpoint has a pending interrupt
if ((ept_int & (1 << i)) != 0)
{
usbd.epAckPendingInterrupts(0);
// Endpoint Transfer Complete (0/1) Interrupt
if (usbd.epBank0IsTransferComplete(i) ||
usbd.epBank1IsTransferComplete(i))
{
if (epHandlers[i]) {
epHandlers[i]->handleEndpoint();
} else {
handleEndpoint(i);
}
for (int ep = 1; ep < USB_EPT_NUM; ep++) {
// Endpoint Transfer Complete (0/1) Interrupt
if (usbd.epHasPendingInterrupts(ep)) {
if (epHandlers[ep]) {
epHandlers[ep]->handleEndpoint();
} else {
#if defined(PLUGGABLE_USB_ENABLED)
PluggableUSB().handleEndpoint(ep);
usbd.epAckPendingInterrupts(ep);
#endif
}
ept_int &= ~(1 << i);
}
i++;
if (i > USB_EPT_NUM)
break; // fire exit
}
}

View file

@ -33,8 +33,8 @@
// bEndpointAddress in Endpoint Descriptor
#define USB_ENDPOINT_DIRECTION_MASK 0x80
#define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
#define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
#define USB_ENDPOINT_OUT(addr) uint8_t((addr) | 0x00)
#define USB_ENDPOINT_IN(addr) uint8_t((addr) | 0x80)
#define USB_ENDPOINTS 7
@ -104,25 +104,11 @@
#define USB_CONFIG_POWER (100)
#endif
#define CDC_V1_10 0x0110
#define CDC_COMMUNICATION_INTERFACE_CLASS 0x02
#define CDC_CALL_MANAGEMENT 0x01
#define CDC_ABSTRACT_CONTROL_MODEL 0x02
#define CDC_HEADER 0x00
#define CDC_ABSTRACT_CONTROL_MANAGEMENT 0x02
#define CDC_UNION 0x06
#define CDC_CS_INTERFACE 0x24
#define CDC_CS_ENDPOINT 0x25
#define CDC_DATA_INTERFACE_CLASS 0x0A
#define MSC_SUBCLASS_SCSI 0x06
#define MSC_PROTOCOL_BULK_ONLY 0x50
_Pragma("pack(1)")
// Device
typedef struct {
typedef struct __attribute__((packed)) {
uint8_t len; // 18
uint8_t dtype; // 1 USB_DEVICE_DESCRIPTOR_TYPE
uint16_t usbVersion; // 0x200
@ -140,7 +126,7 @@ typedef struct {
} DeviceDescriptor;
// Config
typedef struct {
typedef struct __attribute__((packed)) {
uint8_t len; // 9
uint8_t dtype; // 2
uint16_t clen; // total length
@ -154,8 +140,7 @@ typedef struct {
// String
// Interface
typedef struct
{
typedef struct __attribute__((packed)) {
uint8_t len; // 9
uint8_t dtype; // 4
uint8_t number;
@ -168,8 +153,7 @@ typedef struct
} InterfaceDescriptor;
// Endpoint
typedef struct
{
typedef struct __attribute__((packed)) {
uint8_t len; // 7
uint8_t dtype; // 5
uint8_t addr;
@ -180,8 +164,7 @@ typedef struct
// Interface Association Descriptor
// Used to bind 2 interfaces together in CDC compostite device
typedef struct
{
typedef struct __attribute__((packed)) {
uint8_t len; // 8
uint8_t dtype; // 11
uint8_t firstInterface;
@ -192,68 +175,12 @@ typedef struct
uint8_t iInterface;
} IADDescriptor;
// CDC CS interface descriptor
typedef struct
{
uint8_t len; // 5
uint8_t dtype; // 0x24
uint8_t subtype;
uint8_t d0;
uint8_t d1;
} CDCCSInterfaceDescriptor;
typedef struct
{
uint8_t len; // 4
uint8_t dtype; // 0x24
uint8_t subtype;
uint8_t d0;
} CDCCSInterfaceDescriptor4;
typedef struct
{
uint8_t len;
uint8_t dtype; // 0x24
uint8_t subtype; // 1
uint8_t bmCapabilities;
uint8_t bDataInterface;
} CMFunctionalDescriptor;
typedef struct
{
uint8_t len;
uint8_t dtype; // 0x24
uint8_t subtype; // 1
uint8_t bmCapabilities;
} ACMFunctionalDescriptor;
typedef struct
{
// IAD
IADDescriptor iad; // Only needed on compound device
// Control
InterfaceDescriptor cif;
CDCCSInterfaceDescriptor header;
ACMFunctionalDescriptor controlManagement; // ACM
CDCCSInterfaceDescriptor functionalDescriptor; // CDC_UNION
CMFunctionalDescriptor callManagement; // Call Management
EndpointDescriptor cifin;
// Data
InterfaceDescriptor dif;
EndpointDescriptor in;
EndpointDescriptor out;
} CDCDescriptor;
typedef struct
{
typedef struct __attribute__((packed)) {
InterfaceDescriptor msc;
EndpointDescriptor in;
EndpointDescriptor out;
} MSCDescriptor;
_Pragma("pack()")
#define D_DEVICE(_class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs) \
{ 18, 1, 0x200, _class,_subClass,_proto,_packetSize0,_vid,_pid,_version,_im,_ip,_is,_configs }
/* Table 9-8. Standard Device Descriptor

View file

@ -19,29 +19,15 @@
#ifndef __USBDESC_H__
#define __USBDESC_H__
// CDC or HID can be enabled together.
#define CDC_ENABLED
#define PLUGGABLE_USB_ENABLED
#ifdef USBCON
#ifdef CDC_ENABLED
#define CDC_INTERFACE_COUNT 2
#define CDC_ENPOINT_COUNT 3
#else
#define CDC_INTERFACE_COUNT 0
#define CDC_ENPOINT_COUNT 0
// CDC or HID can be enabled together.
#ifndef CDC_DISABLED
#define CDC_ENABLED
#endif
// CDC
#define CDC_ACM_INTERFACE 0 // CDC ACM
#define CDC_DATA_INTERFACE 1 // CDC Data
#define CDC_FIRST_ENDPOINT 1
#define CDC_ENDPOINT_ACM 1
#define CDC_ENDPOINT_OUT 2
#define CDC_ENDPOINT_IN 3
#ifdef CDC_ENABLED
#define CDC_RX CDC_ENDPOINT_OUT
#define CDC_TX CDC_ENDPOINT_IN
#ifndef PLUGGABLE_USB_DISABLED
#define PLUGGABLE_USB_ENABLED
#endif
#define ISERIAL_MAX_LEN 65
@ -51,4 +37,6 @@
#define IPRODUCT 2
#define ISERIAL 3
#endif /* USBCON */
#endif /* __USBDESC_H__ */

View file

@ -17,6 +17,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef USE_TINYUSB
#include <stdio.h>
@ -27,8 +28,6 @@
#include "variant.h"
#include "USB_host.h"
#include "samd21_host.h"
#include "sam.h"
#include "wiring_digital.h"
#include "wiring_private.h"
#define HOST_DEFINED
@ -177,8 +176,10 @@ void UHD_Init(void)
uhd_state = UHD_STATE_NO_VBUS;
// Put VBUS on USB port
#ifdef PIN_USB_HOST_ENABLE
pinMode( PIN_USB_HOST_ENABLE, OUTPUT );
digitalWrite( PIN_USB_HOST_ENABLE, HIGH );
#endif
uhd_enable_connection_int();

View file

@ -16,9 +16,9 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "Uart.h"
#include "Arduino.h"
#include "wiring_private.h"
#include "Uart.h"
#define NO_RTS_PIN 255
#define NO_CTS_PIN 255

View file

@ -123,7 +123,7 @@ String::String(double value, unsigned char decimalPlaces)
String::~String()
{
free(buffer);
if (buffer) free(buffer);
}
/*********************************************/

View file

@ -375,6 +375,9 @@ uint32_t analogRead(uint32_t pin)
syncADC();
ADC->SWTRIG.bit.START = 1;
// Waiting for the 1st conversion to complete
while (ADC->INTFLAG.bit.RESRDY == 0);
// Clear the Data Ready flag
ADC->INTFLAG.reg = ADC_INTFLAG_RESRDY;

Binary file not shown.

View file

@ -40,12 +40,16 @@ mkrzero.sketch.name="Arduino MKRZERO"
mkrzero.bootloader.name="Arduino MKRZERO bootloader"
mkrwan.sketch.name="Arduino MKR WAN 1300"
mkrwan.bootloader.name="Arduino MKR WAN 1300 bootloader"
mkrwan1310.sketch.name="Arduino MKR WAN 1310"
mkrwan1310.bootloader.name="Arduino MKR WAN 1310 bootloader"
mkrwifi1010.sketch.name="Arduino MKR WiFi 1010"
mkrwifi1010.bootloader.name="Arduino MKR WiFi 1010 bootloader"
mkrvidor4000.sketch.name="Arduino MKR Vidor 4000"
mkrvidor4000.bootloader.name="Arduino MKR Vidor 4000 bootloader"
mkrnb1500.sketch.name="Arduino MKR NB 1500"
mkrnb1500.bootloader.name="Arduino MKR NB 1500 bootloader"
nano33iot.sketch.name="Arduino NANO 33 IoT"
nano33iot.bootloader.name="Arduino NANO 33 IoT bootloader"
zero.edbg.name="Atmel Corp. EDBG CMSIS-DAP"
zero.sketch.name="Arduino Zero"
zero.bootloader.name="Arduino Zero bootloader"
@ -63,7 +67,7 @@ Provider=%ManufacturerName%
DriverPackageDisplayName=%DriverPackageDisplayName%
CatalogFile=arduino-samd.cat
; DriverVer date is MM/DD/YYYY
DriverVer=07/11/2017,1.4.0.0
DriverVer=07/08/2019,1.4.3.0
[Manufacturer]
%ManufacturerName%=DeviceList, NTamd64, NTia64
@ -82,6 +86,8 @@ DefaultDestDir=12
%mkrgsm.bootloader.name%=DriverInstall, USB\VID_2341&PID_0052
%mkrwan.sketch.name%=DriverInstall, USB\VID_2341&PID_8053&MI_00
%mkrwan.bootloader.name%=DriverInstall, USB\VID_2341&PID_0053
%mkrwan1310.sketch.name%=DriverInstall, USB\VID_2341&PID_8059&MI_00
%mkrwan1310.bootloader.name%=DriverInstall, USB\VID_2341&PID_0059
%mkrzero.sketch.name%=DriverInstall, USB\VID_2341&PID_804F&MI_00
%mkrzero.bootloader.name%=DriverInstall, USB\VID_2341&PID_004F
%mkrwifi1010.sketch.name%=DriverInstall, USB\VID_2341&PID_8054&MI_00
@ -90,6 +96,8 @@ DefaultDestDir=12
%mkrvidor4000.bootloader.name%=DriverInstall, USB\VID_2341&PID_0056
%mkrnb1500.sketch.name%=DriverInstall, USB\VID_2341&PID_8055&MI_00
%mkrnb1500.bootloader.name%=DriverInstall, USB\VID_2341&PID_0055
%nano33iot.sketch.name%=DriverInstall, USB\VID_2341&PID_8057&MI_00
%nano33iot.bootloader.name%=DriverInstall, USB\VID_2341&PID_0057
%zero.edbg.name%=DriverInstall, USB\VID_03EB&PID_2157&MI_01
%zero.sketch.name%=DriverInstall, USB\VID_2341&PID_804D&MI_00
%zero.bootloader.name%=DriverInstall, USB\VID_2341&PID_004D
@ -106,12 +114,16 @@ DefaultDestDir=12
%mkrgsm.bootloader.name%=DriverInstall, USB\VID_2341&PID_0052
%mkrwan.sketch.name%=DriverInstall, USB\VID_2341&PID_8053&MI_00
%mkrwan.bootloader.name%=DriverInstall, USB\VID_2341&PID_0053
%mkrwan1310.sketch.name%=DriverInstall, USB\VID_2341&PID_8059&MI_00
%mkrwan1310.bootloader.name%=DriverInstall, USB\VID_2341&PID_0059
%mkrwifi1010.sketch.name%=DriverInstall, USB\VID_2341&PID_8054&MI_00
%mkrwifi1010.bootloader.name%=DriverInstall, USB\VID_2341&PID_0054
%mkrvidor4000.sketch.name%=DriverInstall, USB\VID_2341&PID_8056&MI_00
%mkrvidor4000.bootloader.name%=DriverInstall, USB\VID_2341&PID_0056
%mkrnb1500.sketch.name%=DriverInstall, USB\VID_2341&PID_8055&MI_00
%mkrnb1500.bootloader.name%=DriverInstall, USB\VID_2341&PID_0055
%nano33iot.sketch.name%=DriverInstall, USB\VID_2341&PID_8057&MI_00
%nano33iot.bootloader.name%=DriverInstall, USB\VID_2341&PID_0057
%mkrzero.sketch.name%=DriverInstall, USB\VID_2341&PID_804F&MI_00
%mkrzero.bootloader.name%=DriverInstall, USB\VID_2341&PID_004F
%zero.edbg.name%=DriverInstall, USB\VID_03EB&PID_2157&MI_01
@ -130,12 +142,16 @@ DefaultDestDir=12
%mkrgsm.bootloader.name%=DriverInstall, USB\VID_2341&PID_0052
%mkrwan.sketch.name%=DriverInstall, USB\VID_2341&PID_8053&MI_00
%mkrwan.bootloader.name%=DriverInstall, USB\VID_2341&PID_0053
%mkrwan1310.sketch.name%=DriverInstall, USB\VID_2341&PID_8059&MI_00
%mkrwan1310.bootloader.name%=DriverInstall, USB\VID_2341&PID_0059
%mkrwifi1010.sketch.name%=DriverInstall, USB\VID_2341&PID_8054&MI_00
%mkrwifi1010.bootloader.name%=DriverInstall, USB\VID_2341&PID_0054
%mkrvidor4000.sketch.name%=DriverInstall, USB\VID_2341&PID_8056&MI_00
%mkrvidor4000.bootloader.name%=DriverInstall, USB\VID_2341&PID_0056
%mkrnb1500.sketch.name%=DriverInstall, USB\VID_2341&PID_8055&MI_00
%mkrnb1500.bootloader.name%=DriverInstall, USB\VID_2341&PID_0055
%nano33iot.sketch.name%=DriverInstall, USB\VID_2341&PID_8057&MI_00
%nano33iot.bootloader.name%=DriverInstall, USB\VID_2341&PID_0057
%mkrzero.sketch.name%=DriverInstall, USB\VID_2341&PID_804F&MI_00
%mkrzero.bootloader.name%=DriverInstall, USB\VID_2341&PID_004F
%zero.edbg.name%=DriverInstall, USB\VID_03EB&PID_2157&MI_01

View file

@ -11,15 +11,17 @@ I2S KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
begin KEYWORD2
end KEYWORD2
begin KEYWORD2
end KEYWORD2
onReceive KEYWORD2
onTransmit KEYWORD2
onReceive KEYWORD2
onTransmit KEYWORD2
setBufferSize KEYWORD2
#######################################
# Constants (LITERAL1)
#######################################
I2S_PHILIPS_MODE LITERAL1
I2S_PHILIPS_MODE LITERAL1
I2S_RIGHT_JUSTIFIED_MODE LITERAL1
I2S_LEFT_JUSTIFIED_MODE LITERAL1
I2S_LEFT_JUSTIFIED_MODE LITERAL1

View file

@ -415,6 +415,11 @@ void I2SClass::onReceive(void(*function)(void))
_onReceive = function;
}
void I2SClass::setBufferSize(int bufferSize)
{
_doubleBuffer.setSize(bufferSize);
}
void I2SClass::enableClock(int divider)
{
int div = SystemCoreClock / divider;

View file

@ -23,6 +23,8 @@
#include "utility/I2SDoubleBuffer.h"
#define I2S_HAS_SET_BUFFER_SIZE 1
typedef enum {
I2S_PHILIPS_MODE,
I2S_RIGHT_JUSTIFIED_MODE,
@ -62,6 +64,8 @@ public:
void onTransmit(void(*)(void));
void onReceive(void(*)(void));
void setBufferSize(int bufferSize);
private:
int begin(int mode, long sampleRate, int bitsPerSample, bool driveClock);

View file

@ -16,11 +16,13 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdlib.h>
#include <string.h>
#include "I2SDoubleBuffer.h"
I2SDoubleBuffer::I2SDoubleBuffer()
I2SDoubleBuffer::I2SDoubleBuffer() :
_size(DEFAULT_I2S_BUFFER_SIZE)
{
reset();
}
@ -29,8 +31,16 @@ I2SDoubleBuffer::~I2SDoubleBuffer()
{
}
void I2SDoubleBuffer::setSize(int size)
{
_size = size;
}
void I2SDoubleBuffer::reset()
{
_buffer[0] = (uint8_t*)realloc(_buffer[0], _size);
_buffer[1] = (uint8_t*)realloc(_buffer[1], _size);
_index = 0;
_length[0] = 0;
_length[1] = 0;
@ -40,7 +50,7 @@ void I2SDoubleBuffer::reset()
size_t I2SDoubleBuffer::availableForWrite()
{
return (I2S_BUFFER_SIZE - (_length[_index] - _readOffset[_index]));
return (_size - (_length[_index] - _readOffset[_index]));
}
size_t I2SDoubleBuffer::write(const void *buffer, size_t size)

View file

@ -22,7 +22,7 @@
#include <stddef.h>
#include <stdint.h>
#define I2S_BUFFER_SIZE 512
#define DEFAULT_I2S_BUFFER_SIZE 512
class I2SDoubleBuffer
{
@ -30,6 +30,8 @@ public:
I2SDoubleBuffer();
virtual ~I2SDoubleBuffer();
void setSize(int size);
void reset();
size_t availableForWrite();
@ -41,7 +43,8 @@ public:
void swap(int length = 0);
private:
uint8_t _buffer[2][I2S_BUFFER_SIZE];
uint8_t* _buffer[2];
int _size;
volatile int _length[2];
volatile int _readOffset[2];
volatile int _index;

View file

@ -0,0 +1,88 @@
/*
Update Bootloader
This sketch checks if your Arduino SAMD board is running the latest bootloader.
If it is not, it prompts you to update it.
Circuit:
- MKR Vidor 4000
This example code is in the public domain.
*/
#include <SAMD_BootloaderUpdater.h>
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("Welcome to the Arduino SAMD bootloader updater");
Serial.println("----------------------------------------------");
Serial.println();
retry:
Serial.print("Checking if bootloader requires an update ... ");
if (SAMD_BootloaderUpdater.needsUpdate()) {
Serial.println("bootloader is already the latest version");
Serial.println();
Serial.println("Update is not required :)");
while (1);
}
Serial.println("bootloader is NOT running the latest");
Serial.println();
Serial.println();
Serial.println("Would you like to proceed with updating it? (y/N)");
Serial.println();
while (Serial.available() == 0) {
delay(100);
}
char in = Serial.read();
if (in != 'y' && in != 'Y') {
Serial.println("That's all folks!");
while (1);
}
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("WARNING: DO NOT UNPLUG the USB cable during the update!!!");
Serial.println();
Serial.println("Updating bootloader ...");
Serial.println();
if (!SAMD_BootloaderUpdater.update(onUpdateProgress)) {
Serial.println("oh no! the bootloader failed to update :(");
Serial.println();
goto retry;
}
Serial.println();
Serial.println("The bootloader was successfully updated \\o/");
Serial.println();
Serial.println("Your board will now start blinking in joy :)");
}
void onUpdateProgress(float percentage)
{
// toggle the LED
digitalWrite(LED_BUILTIN, digitalRead(LED_BUILTIN) ? LOW : HIGH);
// print out the percentage
Serial.print(percentage);
Serial.println("%");
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
digitalWrite(LED_BUILTIN, LOW);
delay(100);
}

View file

@ -0,0 +1,12 @@
#!/bin/sh -x
ARDUINO=arduino
BOOTLOADER_DIR=" ../../../bootloaders"
OUTPUT_PATH="../src/bootloaders"
if [[ "$OSTYPE" == "darwin"* ]]; then
ARDUINO="/Applications/Arduino.app/Contents/MacOS/Arduino"
fi
ls $BOOTLOADER_DIR/mkrvidor4000
cat $BOOTLOADER_DIR/mkrvidor4000/samd21_sam_ba_arduino_mkrvidor4000.bin | xxd -i > $OUTPUT_PATH/mkrvidor4000.h

View file

@ -0,0 +1,25 @@
################################################
# Syntax Coloring Map For SAMD_BootloaderUpdater
################################################
################################################
# Datatypes (KEYWORD1)
################################################
################################################
# Methods and Functions (KEYWORD2)
################################################
needsUpdate KEYWORD2
update KEYWORD2
#######################################
# Instances (KEYWORD2)
#######################################
SAMD_BootloaderUpdater KEYWORD2
#######################################
# Constants (LITERAL1)
#######################################

View file

@ -0,0 +1,9 @@
name=SAMD_BootloaderUpdater
version=1.0
author=Arduino
maintainer=Arduino <info@arduino.cc>
sentence=Update the bootloader running on your Arduino SAMD board to the latest.
paragraph=
category=Other
url=
architectures=samd_beta

View file

@ -0,0 +1,116 @@
/*
This file is part of the SAMD Bootloader Updater library.
Copyright (c) 2018 Arduino SA. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "SAMD_BootloaderUpdater.h"
#define PAGE_SIZE (64)
#define PAGES (4096)
#define MAX_FLASH (PAGE_SIZE * PAGES)
#define ROW_SIZE (PAGE_SIZE * 4)
__attribute__((aligned (4)))
const uint8_t booloaderData[8192] = {
#if defined(ARDUINO_SAMD_MKRVIDOR4000)
#include "bootloaders/mkrvidor4000.h"
#else
#error "Unsupported board!"
#endif
};
#define BOOTLOADER_START 0x00000000
#define USER_ROW_START 0x00804000
extern "C" {
// these functions must be in RAM (.data) and NOT inlined
// as they erase and copy the sketch data in flash
__attribute__ ((long_call, noinline, section (".data#")))
static void eraseFlash(uint32_t address, int length)
{
for (int i = 0; i < length; i += ROW_SIZE) {
NVMCTRL->ADDR.reg = ((uint32_t)((uint32_t)address + i)) / 2;
NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER;
while (!NVMCTRL->INTFLAG.bit.READY);
}
}
__attribute__ ((long_call, noinline, section (".data#")))
static void readFlash(uint32_t src, void* dest, int length)
{
memcpy(dest, (void*)src, length);
}
__attribute__ ((long_call, noinline, section (".data#")))
static void writeFlash(uint32_t dest, const void* src, int length)
{
volatile uint32_t* d = (uint32_t*)dest;
const volatile uint32_t* s = (const uint32_t*)src;
for (int i = 0; i < length; i += 4) {
*d++ = *s++;
while (!NVMCTRL->INTFLAG.bit.READY);
}
}
}
bool SAMD_BootloaderUpdaterClass::needsUpdate()
{
return (memcmp(BOOTLOADER_START, booloaderData, sizeof(booloaderData)) == 0);
}
int SAMD_BootloaderUpdaterClass::update(void(*progressCallback)(float))
{
// enable auto page writes
NVMCTRL->CTRLB.bit.MANW = 0;
// read the user row
uint32_t userRow[PAGE_SIZE / sizeof(uint32_t)];
readFlash(USER_ROW_START, userRow, sizeof(userRow));
if ((userRow[0] & 0x00000007) != 0x00000007) {
// bootloader is protected, unprotect it
userRow[0] |= 0x00000007;
// erase the user row and flash the updated value
eraseFlash(USER_ROW_START, sizeof(userRow));
writeFlash(USER_ROW_START, userRow, sizeof(userRow));
}
if (progressCallback) {
progressCallback(0.0);
}
#define CHUNK_SIZE (ROW_SIZE * 2)
// erase and copy the flash row by row
for (size_t i = 0; i < sizeof(booloaderData); i += CHUNK_SIZE) {
eraseFlash(BOOTLOADER_START + i, CHUNK_SIZE);
writeFlash(BOOTLOADER_START + i, &booloaderData[i], CHUNK_SIZE);
if (progressCallback) {
progressCallback((i + CHUNK_SIZE) * 100.0 / sizeof(booloaderData));
}
}
return needsUpdate() ? 1 : 0;
}
SAMD_BootloaderUpdaterClass SAMD_BootloaderUpdater;

View file

@ -0,0 +1,34 @@
/*
This file is part of the SAMD Bootloader Updater library.
Copyright (c) 2018 Arduino SA. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _SAMD_BOOTLOADER_UPDATER_H_
#define _SAMD_BOOTLOADER_UPDATER_H_
#include <Arduino.h>
class SAMD_BootloaderUpdaterClass {
public:
bool needsUpdate();
int update(void(*progressCallback)(float));
};
extern SAMD_BootloaderUpdaterClass SAMD_BootloaderUpdater;
#endif

View file

@ -0,0 +1,680 @@
0xfc, 0x7f, 0x00, 0x20, 0xc5, 0x16, 0x00, 0x00, 0x99, 0x01, 0x00, 0x00,
0x95, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00,
0x11, 0x01, 0x00, 0x00, 0x10, 0xb5, 0x06, 0x4c, 0x23, 0x78, 0x00, 0x2b,
0x07, 0xd1, 0x05, 0x4b, 0x00, 0x2b, 0x02, 0xd0, 0x04, 0x48, 0x00, 0xe0,
0x00, 0xbf, 0x01, 0x23, 0x23, 0x70, 0x10, 0xbd, 0x5c, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x1f, 0x00, 0x00, 0x04, 0x4b, 0x10, 0xb5,
0x00, 0x2b, 0x03, 0xd0, 0x03, 0x49, 0x04, 0x48, 0x00, 0xe0, 0x00, 0xbf,
0x10, 0xbd, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x20,
0x7c, 0x1f, 0x00, 0x00, 0x03, 0x00, 0x10, 0xb5, 0x08, 0x00, 0x11, 0x00,
0x98, 0x47, 0x64, 0x22, 0x01, 0x4b, 0x1a, 0x80, 0x10, 0xbd, 0xc0, 0x46,
0x78, 0x00, 0x00, 0x20, 0xf0, 0xb5, 0x19, 0x4b, 0x0a, 0x00, 0x99, 0x78,
0x85, 0xb0, 0x5c, 0x68, 0x00, 0x29, 0x29, 0xd0, 0x04, 0x2a, 0x1f, 0xd1,
0x00, 0x68, 0x0f, 0x26, 0x30, 0x27, 0x52, 0x00, 0x04, 0xab, 0x9b, 0x18,
0x0b, 0x3b, 0x9d, 0x1a, 0x01, 0x00, 0x31, 0x40, 0x09, 0x29, 0x19, 0xd8,
0x39, 0x43, 0x19, 0x70, 0x01, 0x3b, 0x00, 0x09, 0x9d, 0x42, 0xf5, 0xd1,
0x0a, 0x20, 0x0c, 0x4b, 0x01, 0xa9, 0x0b, 0x80, 0x8b, 0x18, 0x98, 0x70,
0x03, 0x30, 0xd8, 0x70, 0x04, 0x32, 0xe0, 0x68, 0xff, 0xf7, 0xcc, 0xff,
0x05, 0xb0, 0xf0, 0xbd, 0x02, 0x2a, 0x01, 0xd1, 0x00, 0x88, 0xdc, 0xe7,
0x00, 0x78, 0xda, 0xe7, 0x37, 0x31, 0xe4, 0xe7, 0x01, 0x00, 0xf0, 0xe7,
0x78, 0x00, 0x00, 0x20, 0x30, 0x78, 0x00, 0x00, 0x1b, 0x4a, 0x1c, 0x4b,
0x11, 0x7a, 0x00, 0x29, 0x08, 0xd1, 0x19, 0x78, 0x58, 0x78, 0x09, 0x18,
0x80, 0x20, 0xc9, 0xb2, 0x59, 0x70, 0x18, 0x49, 0x40, 0x00, 0x08, 0x60,
0x11, 0x7a, 0x01, 0x31, 0xc9, 0xb2, 0x11, 0x72, 0x59, 0x78, 0xf0, 0x29,
0x02, 0xd8, 0x59, 0x78, 0x09, 0x29, 0x08, 0xd8, 0x19, 0x78, 0x49, 0x42,
0x49, 0xb2, 0x19, 0x70, 0x19, 0x78, 0x58, 0x78, 0x09, 0x18, 0xc9, 0xb2,
0x59, 0x70, 0x11, 0x7a, 0x5b, 0x78, 0x99, 0x42, 0x03, 0xd1, 0x80, 0x21,
0x0a, 0x4b, 0x49, 0x00, 0x19, 0x60, 0x13, 0x88, 0x00, 0x2b, 0x03, 0xd0,
0x13, 0x88, 0x01, 0x3b, 0x9b, 0xb2, 0x13, 0x80, 0x53, 0x89, 0x00, 0x2b,
0x03, 0xd0, 0x53, 0x89, 0x01, 0x3b, 0x9b, 0xb2, 0x53, 0x81, 0x70, 0x47,
0x78, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x9c, 0x44, 0x00, 0x41,
0x02, 0xbe, 0xfe, 0xe7, 0x05, 0xbe, 0xfe, 0xe7, 0x0d, 0xbe, 0xfe, 0xe7,
0x0e, 0xbe, 0xfe, 0xe7, 0x07, 0x4a, 0xff, 0x30, 0x53, 0x69, 0x9b, 0x0b,
0x9b, 0x03, 0x53, 0x61, 0x02, 0x23, 0x03, 0x72, 0x82, 0x79, 0x82, 0x3b,
0x13, 0x43, 0x83, 0x71, 0x03, 0x7a, 0x9b, 0x07, 0xfc, 0xd5, 0x70, 0x47,
0x2c, 0x02, 0x00, 0x20, 0x80, 0x21, 0x02, 0x00, 0x0a, 0x4b, 0xc9, 0x01,
0x00, 0x28, 0x0e, 0xd0, 0x99, 0x61, 0x80, 0x21, 0x89, 0x01, 0x99, 0x61,
0x59, 0x61, 0x07, 0x4b, 0x18, 0x7b, 0x40, 0x00, 0x80, 0x18, 0x06, 0x4a,
0x80, 0x00, 0x80, 0x58, 0x18, 0x73, 0xc0, 0xb2, 0x70, 0x47, 0x59, 0x61,
0xef, 0xe7, 0xc0, 0x46, 0x00, 0x44, 0x00, 0x41, 0x78, 0x00, 0x00, 0x20,
0xac, 0x1c, 0x00, 0x00, 0x0c, 0x4b, 0x10, 0xb5, 0x1b, 0x7b, 0x08, 0x2b,
0x10, 0xd0, 0x0f, 0x2b, 0x0e, 0xd0, 0x01, 0x20, 0xff, 0xf7, 0xd8, 0xff,
0x01, 0x20, 0xff, 0xf7, 0xd5, 0xff, 0x01, 0x20, 0xff, 0xf7, 0xd2, 0xff,
0x01, 0x20, 0xff, 0xf7, 0xcf, 0xff, 0x01, 0x20, 0xff, 0xf7, 0xcc, 0xff,
0x00, 0x20, 0xff, 0xf7, 0xc9, 0xff, 0x10, 0xbd, 0x78, 0x00, 0x00, 0x20,
0x0d, 0x4b, 0x10, 0xb5, 0x1b, 0x7b, 0x0f, 0x2b, 0x0a, 0xd0, 0x08, 0x2b,
0x08, 0xd0, 0x01, 0x24, 0xa3, 0x42, 0x0f, 0xd8, 0x00, 0x20, 0xff, 0xf7,
0xb9, 0xff, 0x00, 0x20, 0xff, 0xf7, 0xb6, 0xff, 0x01, 0x20, 0xff, 0xf7,
0xb3, 0xff, 0x00, 0x20, 0xff, 0xf7, 0xb0, 0xff, 0x00, 0x20, 0xff, 0xf7,
0xad, 0xff, 0x00, 0x24, 0x20, 0x00, 0x10, 0xbd, 0x78, 0x00, 0x00, 0x20,
0x07, 0x4b, 0x10, 0xb5, 0x1b, 0x7b, 0x01, 0x24, 0x0b, 0x2b, 0x06, 0xd1,
0x20, 0x00, 0xff, 0xf7, 0x9f, 0xff, 0x20, 0x00, 0xff, 0xf7, 0x9c, 0xff,
0x00, 0x24, 0x20, 0x00, 0x10, 0xbd, 0xc0, 0x46, 0x78, 0x00, 0x00, 0x20,
0xf0, 0xb5, 0x87, 0xb0, 0x03, 0x90, 0x00, 0x20, 0x01, 0x26, 0x04, 0x00,
0x07, 0x00, 0xb4, 0x46, 0x5e, 0x40, 0x01, 0x92, 0x05, 0x96, 0x03, 0x9b,
0x9f, 0x42, 0x01, 0xd1, 0x07, 0xb0, 0xf0, 0xbd, 0x00, 0x2c, 0x04, 0xd1,
0xff, 0x25, 0x00, 0x29, 0x01, 0xd0, 0x0d, 0x78, 0x01, 0x31, 0x62, 0x46,
0x18, 0x4b, 0x40, 0x08, 0x1e, 0x6a, 0xf6, 0x0b, 0x16, 0x40, 0xf6, 0x01,
0x30, 0x43, 0x66, 0x46, 0x03, 0x9a, 0x2e, 0x40, 0x04, 0x96, 0x56, 0x1e,
0x62, 0x46, 0x02, 0x92, 0xbe, 0x42, 0x01, 0xd1, 0x05, 0x9a, 0x02, 0x92,
0x04, 0x9a, 0x00, 0x2a, 0x18, 0xd0, 0x80, 0x22, 0x52, 0x01, 0x9a, 0x61,
0x02, 0x9a, 0x00, 0x2a, 0x03, 0xd0, 0x80, 0x26, 0xb6, 0x01, 0x9e, 0x61,
0x5e, 0x61, 0x07, 0x23, 0x6d, 0x08, 0x01, 0x34, 0xed, 0xb2, 0x1c, 0x40,
0x06, 0xd1, 0x01, 0x9b, 0x00, 0x2b, 0x03, 0xd0, 0x18, 0x70, 0x20, 0x00,
0x01, 0x33, 0x01, 0x93, 0x01, 0x37, 0xc4, 0xe7, 0x80, 0x22, 0x52, 0x01,
0x5a, 0x61, 0xe5, 0xe7, 0x00, 0x44, 0x00, 0x41, 0xf7, 0xb5, 0x01, 0x24,
0x62, 0x40, 0x01, 0x92, 0x80, 0x22, 0x00, 0x23, 0x52, 0x01, 0x06, 0x00,
0x94, 0x46, 0x18, 0x00, 0xb3, 0x42, 0x00, 0xd1, 0xfe, 0xbd, 0x0f, 0x4a,
0x27, 0x00, 0x15, 0x6a, 0xed, 0x0b, 0x25, 0x40, 0x9d, 0x40, 0x28, 0x43,
0x0d, 0x00, 0x25, 0x40, 0x00, 0x95, 0x75, 0x1e, 0x9d, 0x42, 0x00, 0xd1,
0x01, 0x9f, 0x00, 0x9d, 0x00, 0x2d, 0x0a, 0xd0, 0x65, 0x46, 0x95, 0x61,
0x00, 0x2f, 0x03, 0xd0, 0x80, 0x25, 0xad, 0x01, 0x95, 0x61, 0x55, 0x61,
0x49, 0x10, 0x01, 0x33, 0xe0, 0xe7, 0x65, 0x46, 0x55, 0x61, 0xf3, 0xe7,
0x00, 0x44, 0x00, 0x41, 0x15, 0x4b, 0x10, 0xb5, 0x1b, 0x7b, 0x04, 0x00,
0x01, 0x2b, 0x01, 0xd9, 0xff, 0xf7, 0x32, 0xff, 0x00, 0x20, 0xff, 0xf7,
0x11, 0xff, 0x01, 0x20, 0xff, 0xf7, 0x0e, 0xff, 0x01, 0x20, 0xff, 0xf7,
0x0b, 0xff, 0x00, 0x20, 0xff, 0xf7, 0x08, 0xff, 0x00, 0x20, 0xff, 0xf7,
0x05, 0xff, 0x01, 0x22, 0x21, 0x00, 0x0a, 0x20, 0xff, 0xf7, 0xb6, 0xff,
0x56, 0x23, 0xff, 0x33, 0x98, 0x42, 0x07, 0xd1, 0x01, 0x20, 0xff, 0xf7,
0xf9, 0xfe, 0x01, 0x20, 0xff, 0xf7, 0xf6, 0xfe, 0x00, 0x20, 0x10, 0xbd,
0x01, 0x20, 0x40, 0x42, 0xfb, 0xe7, 0xc0, 0x46, 0x78, 0x00, 0x00, 0x20,
0xf7, 0xb5, 0x0d, 0x4d, 0x07, 0x00, 0xeb, 0x7b, 0x0e, 0x20, 0x2c, 0x7c,
0x01, 0x93, 0xff, 0xf7, 0xc9, 0xff, 0x06, 0x1e, 0x0e, 0xdb, 0xff, 0xf7,
0x1b, 0xff, 0x01, 0x9b, 0x61, 0x1c, 0x99, 0x40, 0xe8, 0x7b, 0xab, 0x7b,
0x39, 0x43, 0xc0, 0x18, 0x01, 0x22, 0xff, 0xf7, 0x8d, 0xff, 0xff, 0xf7,
0x2d, 0xff, 0x6f, 0x74, 0x30, 0x00, 0xfe, 0xbd, 0x78, 0x00, 0x00, 0x20,
0x37, 0xb5, 0x05, 0x00, 0x00, 0x20, 0x12, 0x4b, 0x01, 0x90, 0x5b, 0x7c,
0x0c, 0x00, 0x83, 0x42, 0x18, 0xd1, 0x0c, 0x20, 0xff, 0xf7, 0xa8, 0xff,
0xff, 0xf7, 0xfc, 0xfe, 0x01, 0x9b, 0x01, 0xa9, 0x9a, 0x00, 0x03, 0x23,
0x13, 0x43, 0x01, 0x93, 0x00, 0x23, 0x20, 0x20, 0x1a, 0x00, 0xff, 0xf7,
0x21, 0xff, 0x00, 0x23, 0x60, 0x01, 0x02, 0x30, 0x1a, 0x00, 0x29, 0x00,
0xff, 0xf7, 0x1a, 0xff, 0x20, 0x00, 0x3e, 0xbd, 0xff, 0xf7, 0xbe, 0xff,
0x00, 0x28, 0xfa, 0xdb, 0xe1, 0xe7, 0xc0, 0x46, 0x78, 0x00, 0x00, 0x20,
0x02, 0x22, 0x63, 0x4b, 0xf0, 0xb5, 0x1a, 0x70, 0x80, 0x23, 0x62, 0x4c,
0x80, 0x27, 0x80, 0x26, 0x80, 0x25, 0x1b, 0x02, 0x63, 0x60, 0x00, 0x23,
0x85, 0xb0, 0xad, 0x01, 0xff, 0x01, 0x76, 0x01, 0xa7, 0x60, 0x01, 0x21,
0xa6, 0x60, 0x03, 0xa8, 0xa5, 0x60, 0x03, 0x93, 0xff, 0xf7, 0xbe, 0xff,
0x80, 0x23, 0x5b, 0x05, 0xa3, 0x60, 0x63, 0x61, 0xa7, 0x61, 0xa6, 0x61,
0x65, 0x61, 0xff, 0xf7, 0xa3, 0xfe, 0x55, 0x4d, 0x2b, 0x7b, 0x01, 0x2b,
0x01, 0xd9, 0xff, 0xf7, 0x9d, 0xfe, 0x00, 0x20, 0xff, 0xf7, 0x7c, 0xfe,
0x01, 0x20, 0xff, 0xf7, 0x79, 0xfe, 0x01, 0x20, 0xff, 0xf7, 0x76, 0xfe,
0x00, 0x20, 0xff, 0xf7, 0x73, 0xfe, 0x00, 0x20, 0xff, 0xf7, 0x70, 0xfe,
0x01, 0x22, 0x04, 0x21, 0x0a, 0x20, 0xff, 0xf7, 0x21, 0xff, 0x01, 0x20,
0xff, 0xf7, 0x68, 0xfe, 0x01, 0x20, 0xff, 0xf7, 0x65, 0xfe, 0x9a, 0x27,
0xff, 0xf7, 0x9c, 0xfe, 0x80, 0x22, 0x80, 0x23, 0xff, 0x37, 0x52, 0x01,
0x9b, 0x01, 0x01, 0x3f, 0x62, 0x61, 0xa3, 0x61, 0x63, 0x61, 0x00, 0x2f,
0xf9, 0xd1, 0x3a, 0x00, 0x39, 0x00, 0x01, 0x20, 0xff, 0xf7, 0x08, 0xff,
0x04, 0x00, 0xff, 0xf7, 0xa7, 0xfe, 0xff, 0xf7, 0x6b, 0xfe, 0x00, 0x2c,
0x03, 0xd1, 0x01, 0x20, 0x40, 0x42, 0x05, 0xb0, 0xf0, 0xbd, 0x0e, 0x20,
0xff, 0xf7, 0x28, 0xff, 0xff, 0xf7, 0x7c, 0xfe, 0x3a, 0x00, 0x39, 0x00,
0x40, 0x20, 0xff, 0xf7, 0xf3, 0xfe, 0xff, 0xf7, 0x93, 0xfe, 0x0c, 0x20,
0xff, 0xf7, 0x1c, 0xff, 0x08, 0x26, 0x3c, 0x00, 0xff, 0xf7, 0x6e, 0xfe,
0x00, 0x22, 0x04, 0x20, 0x11, 0x00, 0xff, 0xf7, 0xe5, 0xfe, 0x24, 0x09,
0x00, 0x07, 0x01, 0x3e, 0x04, 0x43, 0xff, 0xf7, 0x81, 0xfe, 0xff, 0xf7,
0x45, 0xfe, 0x00, 0x2e, 0xee, 0xd1, 0xff, 0x23, 0x62, 0x03, 0x2b, 0x74,
0x6b, 0x74, 0x52, 0x0d, 0x6e, 0x2a, 0xd2, 0xd1, 0x31, 0x00, 0x01, 0x20,
0xe2, 0x0c, 0x00, 0x93, 0x13, 0x40, 0x6a, 0x73, 0xae, 0x73, 0x01, 0x93,
0x32, 0x00, 0x00, 0x9b, 0xf7, 0xb2, 0x1a, 0x40, 0x94, 0x46, 0x02, 0x00,
0x63, 0x46, 0x9a, 0x40, 0x01, 0x9b, 0x01, 0x36, 0x93, 0x42, 0x26, 0xda,
0x00, 0x29, 0x00, 0xd0, 0xaf, 0x73, 0x00, 0x27, 0xec, 0x73, 0x6b, 0x7b,
0x9f, 0x42, 0xb6, 0xda, 0x08, 0x26, 0x00, 0x24, 0xff, 0xf7, 0x38, 0xfe,
0x00, 0x22, 0x04, 0x20, 0x11, 0x00, 0xff, 0xf7, 0xaf, 0xfe, 0x24, 0x09,
0x00, 0x07, 0x01, 0x3e, 0x04, 0x43, 0xff, 0xf7, 0x4b, 0xfe, 0xff, 0xf7,
0x0f, 0xfe, 0x00, 0x2e, 0xee, 0xd1, 0xff, 0x22, 0xe3, 0x0c, 0x13, 0x40,
0x84, 0x2b, 0x08, 0xd1, 0x64, 0x03, 0x64, 0x0d, 0x6e, 0x2c, 0x04, 0xd1,
0x2f, 0x74, 0x30, 0x00, 0x99, 0xe7, 0x01, 0x00, 0xca, 0xe7, 0x01, 0x37,
0xd9, 0xe7, 0xc0, 0x46, 0x4f, 0x44, 0x00, 0x41, 0x00, 0x44, 0x00, 0x41,
0x78, 0x00, 0x00, 0x20, 0x03, 0x21, 0x0a, 0x4b, 0x01, 0x40, 0x5a, 0x68,
0x09, 0x48, 0x09, 0x04, 0x10, 0x40, 0x08, 0x43, 0x08, 0x4a, 0x58, 0x60,
0xd8, 0x69, 0x40, 0x07, 0xc0, 0x0f, 0x00, 0xd1, 0x70, 0x47, 0x01, 0x3a,
0x00, 0x2a, 0xf7, 0xd1, 0x01, 0x20, 0x40, 0x42, 0xf8, 0xe7, 0xc0, 0x46,
0x00, 0x08, 0x00, 0x42, 0xff, 0xff, 0xfc, 0xff, 0x52, 0xc3, 0x00, 0x00,
0xf8, 0xb5, 0x2a, 0x4d, 0x2a, 0x4a, 0x29, 0x00, 0x93, 0x7c, 0x2a, 0x48,
0x5b, 0x00, 0xdc, 0xb2, 0x6b, 0x8b, 0x9b, 0x06, 0x9b, 0x0f, 0x01, 0x2b,
0x04, 0xd0, 0x6b, 0x8b, 0x9b, 0x06, 0x9b, 0x0f, 0x02, 0x2b, 0x17, 0xd1,
0x4b, 0x6a, 0xdb, 0x0a, 0xdb, 0x02, 0x23, 0x43, 0x4b, 0x62, 0x0b, 0x7e,
0xdb, 0x07, 0x18, 0xd5, 0x4b, 0x8b, 0x5b, 0x07, 0xdb, 0x0f, 0x0e, 0xd1,
0x18, 0x00, 0x01, 0x27, 0xd4, 0x7c, 0x00, 0x2c, 0x13, 0xd1, 0x00, 0x28,
0x00, 0xd0, 0xd4, 0x74, 0x03, 0x20, 0xff, 0xf7, 0xbb, 0xff, 0x06, 0xe0,
0x01, 0x38, 0x83, 0x1c, 0xda, 0xd1, 0x03, 0x20, 0xff, 0xf7, 0xb4, 0xff,
0x02, 0x24, 0x20, 0x00, 0xf8, 0xbd, 0x01, 0x38, 0x83, 0x1c, 0xe0, 0xd1,
0xf5, 0xe7, 0x12, 0x4d, 0x12, 0x4e, 0x5d, 0x5d, 0x35, 0x70, 0x12, 0x4d,
0x0e, 0x7e, 0xf6, 0x07, 0x07, 0xd5, 0x4d, 0x8b, 0x01, 0x33, 0x6d, 0x07,
0x06, 0xd4, 0x01, 0x3c, 0xe4, 0xb2, 0x38, 0x00, 0xd9, 0xe7, 0x01, 0x3d,
0x00, 0x2d, 0x07, 0xd1, 0x00, 0x28, 0x00, 0xd0, 0xd4, 0x74, 0x03, 0x20,
0xff, 0xf7, 0x94, 0xff, 0x03, 0x24, 0xde, 0xe7, 0x4e, 0x8b, 0xf6, 0x07,
0xe6, 0xd5, 0xf3, 0xe7, 0x00, 0x08, 0x00, 0x42, 0x78, 0x00, 0x00, 0x20,
0x50, 0xc3, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x20, 0x28, 0x08, 0x00, 0x42,
0x52, 0xc3, 0x00, 0x00, 0x10, 0xb5, 0x6b, 0x22, 0x02, 0x24, 0x04, 0x4b,
0x9a, 0x74, 0x18, 0x75, 0xdc, 0x74, 0x59, 0x75, 0xff, 0xf7, 0x94, 0xff,
0x20, 0x00, 0x10, 0xbd, 0x78, 0x00, 0x00, 0x20, 0x6b, 0x23, 0x10, 0xb5,
0x23, 0x4c, 0xa3, 0x74, 0x6a, 0x3b, 0xe3, 0x74, 0x20, 0x75, 0xff, 0xf7,
0x87, 0xff, 0x00, 0x23, 0x98, 0x42, 0x2e, 0xd1, 0xa0, 0x75, 0x1f, 0x48,
0x1f, 0x4a, 0x03, 0x00, 0x41, 0x8b, 0x89, 0x06, 0x89, 0x0f, 0x01, 0x29,
0x1c, 0xd1, 0xd7, 0x20, 0x59, 0x6a, 0xc9, 0x0a, 0xc9, 0x02, 0x01, 0x43,
0x59, 0x62, 0x19, 0x7e, 0x89, 0x07, 0x1e, 0xd5, 0x5a, 0x8b, 0x52, 0x07,
0x18, 0xd4, 0x01, 0x22, 0xa2, 0x75, 0x1a, 0x7e, 0x92, 0x07, 0xfc, 0xd5,
0x14, 0x4a, 0x03, 0x20, 0x12, 0x78, 0xe2, 0x75, 0x80, 0x22, 0x59, 0x68,
0xd2, 0x02, 0x0a, 0x43, 0x5a, 0x60, 0xff, 0xf7, 0x43, 0xff, 0x07, 0xe0,
0x41, 0x8b, 0x89, 0x06, 0x89, 0x0f, 0x02, 0x29, 0xdd, 0xd0, 0x01, 0x3a,
0x91, 0x1c, 0xd5, 0xd1, 0xe3, 0x7d, 0x18, 0x00, 0x10, 0xbd, 0x01, 0x3a,
0x91, 0x1c, 0xf9, 0xd0, 0x19, 0x7e, 0xc9, 0x07, 0xd7, 0xd5, 0xc0, 0x22,
0x59, 0x68, 0x92, 0x02, 0x0a, 0x43, 0x5a, 0x60, 0xf0, 0xe7, 0xc0, 0x46,
0x78, 0x00, 0x00, 0x20, 0x00, 0x08, 0x00, 0x42, 0x50, 0xc3, 0x00, 0x00,
0x28, 0x08, 0x00, 0x42, 0x37, 0xb5, 0x19, 0x4c, 0x01, 0x90, 0x63, 0x7c,
0x0d, 0x00, 0x00, 0x2b, 0x1f, 0xd1, 0x0c, 0x20, 0xff, 0xf7, 0xd4, 0xfd,
0xff, 0xf7, 0x28, 0xfd, 0x01, 0x9b, 0x01, 0xa9, 0x9a, 0x00, 0x03, 0x23,
0x13, 0x43, 0x01, 0x93, 0x00, 0x23, 0x20, 0x20, 0x1a, 0x00, 0xff, 0xf7,
0x4d, 0xfd, 0x63, 0x7c, 0x01, 0x2b, 0x12, 0xd1, 0x0c, 0x20, 0xff, 0xf7,
0xc1, 0xfd, 0xff, 0xf7, 0x15, 0xfd, 0x00, 0x23, 0x20, 0x20, 0x2a, 0x00,
0x19, 0x00, 0xff, 0xf7, 0x3f, 0xfd, 0x00, 0x20, 0x04, 0xe0, 0x00, 0x20,
0xff, 0xf7, 0xe2, 0xfd, 0x00, 0x28, 0xda, 0xda, 0x3e, 0xbd, 0x01, 0x20,
0xff, 0xf7, 0xdc, 0xfd, 0x00, 0x28, 0xf9, 0xdb, 0xe6, 0xe7, 0xc0, 0x46,
0x78, 0x00, 0x00, 0x20, 0x13, 0xb5, 0x0c, 0x00, 0xff, 0xf7, 0xf0, 0xfd,
0x01, 0x90, 0xa0, 0x42, 0x15, 0xd1, 0x80, 0x22, 0x0c, 0x4b, 0x52, 0x05,
0x0c, 0x4c, 0x9a, 0x61, 0x5a, 0x61, 0x01, 0x3c, 0x00, 0x2c, 0x0f, 0xd0,
0x01, 0xa9, 0x00, 0x20, 0xff, 0xf7, 0xb6, 0xff, 0x01, 0x9b, 0x00, 0x2b,
0xf5, 0xd1, 0x01, 0xa9, 0x01, 0x20, 0xff, 0xf7, 0xaf, 0xff, 0x01, 0x98,
0x16, 0xbd, 0x0a, 0x20, 0x40, 0x42, 0xfb, 0xe7, 0x01, 0x20, 0xfb, 0xe7,
0x00, 0x44, 0x00, 0x41, 0xea, 0x03, 0x00, 0x00, 0xf0, 0xb5, 0x12, 0x4c,
0x0d, 0x00, 0xa5, 0x44, 0x11, 0x4b, 0x01, 0x90, 0x02, 0x91, 0x68, 0x46,
0x03, 0x21, 0x16, 0x00, 0x00, 0x93, 0x02, 0x27, 0xff, 0xf7, 0xcc, 0xff,
0xec, 0x1c, 0xa4, 0x08, 0x01, 0x34, 0xb9, 0x00, 0x38, 0x00, 0x69, 0x44,
0xff, 0xf7, 0x8e, 0xff, 0x7b, 0x1e, 0x01, 0x37, 0x9c, 0x42, 0xf6, 0xdc,
0x00, 0x23, 0x1a, 0x00, 0x6a, 0x44, 0x12, 0x7b, 0xf2, 0x54, 0x01, 0x33,
0xab, 0x42, 0xf8, 0xd1, 0x03, 0x4b, 0x9d, 0x44, 0xf0, 0xbd, 0xc0, 0x46,
0xfc, 0xfb, 0xff, 0xff, 0x05, 0x00, 0x00, 0x01, 0x04, 0x04, 0x00, 0x00,
0xf8, 0xb5, 0x1a, 0x4f, 0x06, 0x00, 0x3b, 0x7e, 0x08, 0x00, 0x14, 0x00,
0x00, 0x2b, 0x12, 0xd1, 0x17, 0x4b, 0x18, 0x4a, 0x18, 0x49, 0x1a, 0x64,
0x5a, 0x6c, 0x92, 0x0b, 0x92, 0x03, 0x5a, 0x64, 0x5a, 0x6c, 0x0a, 0x40,
0x5a, 0x64, 0xa2, 0x22, 0x40, 0x23, 0x52, 0x00, 0xb1, 0x5c, 0x0b, 0x43,
0xb3, 0x54, 0x01, 0x23, 0x3b, 0x76, 0x48, 0x25, 0xff, 0x35, 0x73, 0x5d,
0xdb, 0x07, 0xdb, 0x0f, 0x12, 0xd0, 0x0b, 0x4a, 0x53, 0x6c, 0x9b, 0x04,
0x9b, 0x0c, 0x9c, 0x42, 0x02, 0xd9, 0x54, 0x6c, 0xa4, 0x04, 0xa4, 0x0c,
0x22, 0x00, 0x07, 0x49, 0x01, 0xf0, 0x69, 0xf9, 0x01, 0x23, 0x73, 0x55,
0x00, 0x23, 0x3b, 0x76, 0x20, 0x00, 0xf8, 0xbd, 0x1c, 0x00, 0xfb, 0xe7,
0x78, 0x00, 0x00, 0x20, 0x2c, 0x02, 0x00, 0x20, 0xec, 0x01, 0x00, 0x20,
0xff, 0x3f, 0x00, 0xf0, 0x13, 0xb5, 0x6b, 0x46, 0xdc, 0x1d, 0x04, 0x4b,
0x01, 0x22, 0x21, 0x00, 0xd8, 0x69, 0xff, 0xf7, 0xb9, 0xff, 0x20, 0x78,
0x16, 0xbd, 0xc0, 0x46, 0x78, 0x00, 0x00, 0x20, 0xf7, 0xb5, 0x00, 0x90,
0x01, 0x20, 0x1c, 0x4d, 0x1c, 0x00, 0x5b, 0x01, 0x16, 0x00, 0x01, 0x93,
0xea, 0x18, 0x53, 0x69, 0x10, 0x32, 0x5b, 0x00, 0x5b, 0x0f, 0x03, 0x33,
0x98, 0x40, 0xb0, 0x42, 0x21, 0xd8, 0x80, 0x23, 0x50, 0x68, 0x1b, 0x06,
0x03, 0x43, 0x53, 0x60, 0x63, 0x01, 0xed, 0x18, 0x29, 0x61, 0x6b, 0x69,
0xb1, 0x04, 0x9b, 0x0b, 0x89, 0x0c, 0x9b, 0x03, 0x0b, 0x43, 0x6b, 0x61,
0x6b, 0x69, 0x0e, 0x49, 0x08, 0x34, 0x0b, 0x40, 0x6b, 0x61, 0x00, 0x9b,
0x64, 0x01, 0x1c, 0x19, 0x02, 0x23, 0xe3, 0x71, 0x62, 0x79, 0x82, 0x3b,
0x13, 0x43, 0x63, 0x71, 0xe3, 0x79, 0x9b, 0x07, 0xfc, 0xd5, 0x30, 0x00,
0xfe, 0xbd, 0x06, 0x4b, 0xa7, 0x01, 0xff, 0x18, 0x32, 0x00, 0x38, 0x00,
0x01, 0xf0, 0x11, 0xf9, 0x39, 0x00, 0xd9, 0xe7, 0x2c, 0x02, 0x00, 0x20,
0xff, 0x3f, 0x00, 0xf0, 0x2c, 0x01, 0x00, 0x20, 0x10, 0xb5, 0x0c, 0x00,
0x0a, 0x00, 0x01, 0x00, 0x03, 0x48, 0x01, 0x23, 0xc0, 0x69, 0xff, 0xf7,
0xb5, 0xff, 0x20, 0x00, 0x10, 0xbd, 0xc0, 0x46, 0x78, 0x00, 0x00, 0x20,
0x01, 0x23, 0x07, 0xb5, 0x01, 0x90, 0x04, 0x48, 0x1a, 0x00, 0x01, 0xa9,
0xc0, 0x69, 0xff, 0xf7, 0xa7, 0xff, 0x01, 0x20, 0x0e, 0xbd, 0xc0, 0x46,
0x78, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x0b, 0x4c, 0x0b, 0x4b, 0xa5, 0x44,
0x0c, 0x00, 0x01, 0x90, 0x11, 0x00, 0x03, 0xa8, 0x22, 0x00, 0x00, 0x93,
0x02, 0x94, 0x01, 0xf0, 0xe0, 0xf8, 0xe1, 0x1c, 0x89, 0x08, 0x03, 0x31,
0x68, 0x46, 0xff, 0xf7, 0xf1, 0xfe, 0x80, 0x23, 0xdb, 0x00, 0x9d, 0x44,
0x10, 0xbd, 0xc0, 0x46, 0x00, 0xfc, 0xff, 0xff, 0x04, 0x00, 0x00, 0x01,
0xf0, 0xb5, 0xcb, 0x4b, 0xcb, 0x4c, 0xca, 0x48, 0x5b, 0x68, 0xa5, 0x44,
0x00, 0xaf, 0x28, 0x30, 0x1b, 0x69, 0x40, 0x21, 0x98, 0x47, 0x00, 0x28,
0x02, 0xd0, 0x64, 0x23, 0xc4, 0x4a, 0x53, 0x81, 0xc3, 0x4b, 0xc3, 0x4a,
0x98, 0x66, 0x28, 0x33, 0xd3, 0x66, 0x00, 0x23, 0x13, 0x67, 0xc0, 0x4b,
0x1b, 0x6f, 0xfb, 0x60, 0xbe, 0x4b, 0x9b, 0x6e, 0xbb, 0x60, 0xba, 0x68,
0xfb, 0x68, 0x93, 0x42, 0x00, 0xd3, 0xb2, 0xe1, 0xba, 0x4b, 0xdb, 0x6e,
0xfb, 0x60, 0x1b, 0x78, 0xff, 0x2b, 0x63, 0xd0, 0x23, 0x2b, 0x00, 0xd0,
0x5c, 0xe3, 0xb6, 0x4b, 0x9b, 0x78, 0x00, 0x2b, 0x06, 0xd0, 0xb4, 0x4b,
0x02, 0x22, 0x5b, 0x68, 0xb4, 0x49, 0xd8, 0x68, 0xff, 0xf7, 0xda, 0xfa,
0xb0, 0x48, 0x74, 0x30, 0x03, 0x78, 0x53, 0x2b, 0x5d, 0xd1, 0xae, 0x4b,
0xad, 0x4a, 0x9b, 0x6e, 0x14, 0x6f, 0xa3, 0x42, 0x1f, 0xd9, 0xab, 0x49,
0x92, 0x6f, 0xc9, 0x6e, 0x01, 0x34, 0x4d, 0x1c, 0xf9, 0x60, 0xa8, 0x49,
0x1b, 0x1b, 0xcd, 0x66, 0x0c, 0x67, 0x93, 0x42, 0x48, 0xd2, 0xcb, 0x67,
0xa4, 0x4b, 0xa7, 0x4e, 0xdb, 0x6f, 0x29, 0x00, 0x1a, 0x00, 0x30, 0x68,
0xfb, 0x60, 0x01, 0xf0, 0x7a, 0xf8, 0xfb, 0x68, 0xe4, 0x18, 0x9f, 0x4b,
0x1c, 0x67, 0xfb, 0x68, 0xed, 0x18, 0x9d, 0x4b, 0xdd, 0x66, 0x3b, 0x7b,
0x33, 0x71, 0x9b, 0x4b, 0x9a, 0x4a, 0x1b, 0x6f, 0x99, 0x49, 0x01, 0x3b,
0x13, 0x67, 0xd3, 0x6e, 0x89, 0x6f, 0xfb, 0x60, 0x01, 0x3b, 0xd3, 0x66,
0x98, 0x4b, 0x1a, 0x79, 0x8a, 0x42, 0x0a, 0xd2, 0x89, 0x1a, 0x93, 0x4a,
0x18, 0x68, 0x52, 0x68, 0x92, 0x69, 0x90, 0x47, 0x00, 0x28, 0x02, 0xd0,
0x64, 0x23, 0x8f, 0x4a, 0x53, 0x81, 0xc0, 0x46, 0x7a, 0x22, 0x8d, 0x4b,
0x74, 0x33, 0x1a, 0x70, 0x00, 0x23, 0x8b, 0x4a, 0x93, 0x67, 0x93, 0x78,
0x00, 0x2b, 0x05, 0xd0, 0x53, 0x68, 0x8c, 0x49, 0x01, 0x22, 0xd8, 0x68,
0xff, 0xf7, 0x84, 0xfa, 0x85, 0x4b, 0x85, 0x4a, 0x1b, 0x6f, 0x01, 0x33,
0x13, 0x67, 0xd3, 0x6e, 0xfb, 0x60, 0x01, 0x33, 0xd3, 0x66, 0x80, 0xe7,
0x80, 0x4b, 0xda, 0x67, 0xb4, 0xe7, 0x52, 0x2b, 0x09, 0xd1, 0x7e, 0x4b,
0x7d, 0x4a, 0x5b, 0x68, 0x7f, 0x49, 0x92, 0x6f, 0x09, 0x68, 0x58, 0x69,
0xff, 0xf7, 0x6c, 0xfa, 0xd6, 0xe7, 0x4f, 0x2b, 0x07, 0xd1, 0x78, 0x4a,
0x7a, 0x4b, 0x92, 0x6f, 0x1b, 0x68, 0xfa, 0x60, 0x3a, 0x7b, 0x1a, 0x70,
0xcc, 0xe7, 0x48, 0x2b, 0x07, 0xd1, 0x73, 0x4a, 0x75, 0x4b, 0x92, 0x6f,
0x1b, 0x68, 0xfa, 0x60, 0xba, 0x89, 0x1a, 0x80, 0xc2, 0xe7, 0x57, 0x2b,
0x06, 0xd1, 0x71, 0x4b, 0x6d, 0x4a, 0x1b, 0x68, 0x92, 0x6f, 0xfa, 0x60,
0x1a, 0x60, 0xb9, 0xe7, 0x6f, 0x2b, 0x05, 0xd1, 0x01, 0x21, 0x6c, 0x4b,
0x18, 0x68, 0xff, 0xf7, 0x53, 0xfa, 0xb1, 0xe7, 0x68, 0x2b, 0x07, 0xd1,
0x68, 0x4b, 0x65, 0x4a, 0x1b, 0x68, 0x04, 0x30, 0x1b, 0x88, 0x02, 0x21,
0x93, 0x67, 0xf2, 0xe7, 0x77, 0x2b, 0x09, 0xd1, 0x63, 0x4b, 0x04, 0x30,
0x1b, 0x68, 0x04, 0x21, 0x1b, 0x68, 0xfb, 0x60, 0xfa, 0x68, 0x5d, 0x4b,
0x9a, 0x67, 0xe6, 0xe7, 0x47, 0x2b, 0x19, 0xd1, 0x5a, 0x4b, 0x99, 0x6f,
0x72, 0xb6, 0xef, 0xf3, 0x08, 0x82, 0x5b, 0x4b, 0x9a, 0x60, 0x0a, 0x68,
0x82, 0xf3, 0x08, 0x88, 0x4a, 0x68, 0x10, 0x47, 0x9a, 0x68, 0x82, 0xf3,
0x08, 0x88, 0x62, 0xb6, 0x1b, 0x7b, 0x00, 0x2b, 0x00, 0xd1, 0x85, 0xe7,
0x50, 0x4b, 0x06, 0x20, 0x5b, 0x68, 0x1b, 0x68, 0x98, 0x47, 0x7f, 0xe7,
0x54, 0x2b, 0x0a, 0xd1, 0x4c, 0x4a, 0x53, 0x3b, 0x93, 0x70, 0x13, 0x00,
0x02, 0x22, 0x5b, 0x68, 0x4b, 0x49, 0xd8, 0x68, 0xff, 0xf7, 0x08, 0xfa,
0x72, 0xe7, 0x4e, 0x2b, 0x0e, 0xd1, 0x46, 0x4b, 0x9b, 0x78, 0x00, 0x2b,
0x06, 0xd1, 0x44, 0x4b, 0x02, 0x22, 0x5b, 0x68, 0x44, 0x49, 0xd8, 0x68,
0xff, 0xf7, 0xfa, 0xf9, 0x00, 0x23, 0x40, 0x4a, 0x93, 0x70, 0x61, 0xe7,
0x56, 0x2b, 0x62, 0xd1, 0x3d, 0x4b, 0x01, 0x22, 0x5b, 0x68, 0x41, 0x49,
0xd8, 0x68, 0xff, 0xf7, 0xed, 0xf9, 0x3a, 0x4b, 0x3f, 0x4d, 0x5b, 0x68,
0x03, 0x22, 0x29, 0x00, 0xd8, 0x68, 0xff, 0xf7, 0xe5, 0xf9, 0x36, 0x4b,
0x3c, 0x4c, 0x5b, 0x68, 0x01, 0x22, 0x21, 0x00, 0xd8, 0x68, 0xff, 0xf7,
0xdd, 0xf9, 0x32, 0x4b, 0x29, 0x1d, 0x5b, 0x68, 0x0d, 0x22, 0xd8, 0x68,
0xff, 0xf7, 0xd6, 0xf9, 0x2e, 0x4b, 0x01, 0x22, 0x5b, 0x68, 0x21, 0x00,
0xd8, 0x68, 0xff, 0xf7, 0xcf, 0xf9, 0x00, 0x23, 0x01, 0x20, 0x2a, 0x4a,
0x84, 0x46, 0x13, 0x67, 0x1a, 0x00, 0x30, 0x49, 0x4e, 0x1c, 0x8d, 0x5c,
0xb0, 0x18, 0x00, 0x2d, 0x2b, 0xd1, 0x00, 0x2b, 0x01, 0xd0, 0x24, 0x4b,
0x1a, 0x67, 0x23, 0x4b, 0x22, 0x4a, 0xd8, 0x66, 0x5b, 0x68, 0x12, 0x6f,
0xd8, 0x68, 0xff, 0xf7, 0xb7, 0xf9, 0x1f, 0x4b, 0x01, 0x22, 0x5b, 0x68,
0x21, 0x00, 0xd8, 0x68, 0xff, 0xf7, 0xb0, 0xf9, 0x00, 0x23, 0x1b, 0x4a,
0x01, 0x26, 0x13, 0x67, 0x1a, 0x00, 0x22, 0x49, 0x4d, 0x1c, 0x8c, 0x5c,
0xa8, 0x18, 0x00, 0x2c, 0x10, 0xd1, 0x00, 0x2b, 0x01, 0xd0, 0x15, 0x4b,
0x1a, 0x67, 0x14, 0x4b, 0x13, 0x4a, 0xd8, 0x66, 0x5b, 0x68, 0x12, 0x6f,
0xd8, 0x68, 0xff, 0xf7, 0x99, 0xf9, 0x10, 0x4b, 0x88, 0xe7, 0x01, 0x32,
0x63, 0x46, 0xcc, 0xe7, 0x01, 0x32, 0x33, 0x00, 0xe7, 0xe7, 0x58, 0x2b,
0x30, 0xd1, 0x0e, 0x4a, 0x0a, 0x4b, 0x10, 0x69, 0x52, 0x69, 0x9b, 0x6f,
0x12, 0x49, 0x13, 0x4c, 0x92, 0x00, 0x98, 0x42, 0x04, 0xd8, 0x06, 0x4b,
0x03, 0x22, 0x5b, 0x68, 0x10, 0x49, 0x74, 0xe7, 0x5d, 0x08, 0xcd, 0x61,
0x0c, 0x80, 0x0d, 0x7d, 0xed, 0x07, 0xfc, 0xd5, 0x9b, 0x18, 0xf0, 0xe7,
0x78, 0x00, 0x00, 0x20, 0x5c, 0xef, 0xff, 0xff, 0x54, 0x1f, 0x00, 0x00,
0xf8, 0x00, 0x00, 0x20, 0x57, 0x1f, 0x00, 0x00, 0x2c, 0x1f, 0x00, 0x00,
0x44, 0x1c, 0x00, 0x00, 0x2e, 0x1f, 0x00, 0x00, 0x30, 0x1f, 0x00, 0x00,
0x3c, 0x1f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x41, 0x02, 0xa5, 0xff, 0xff,
0x45, 0x1f, 0x00, 0x00, 0x59, 0x2b, 0x00, 0xd0, 0x41, 0xe1, 0xc9, 0x4b,
0xc9, 0x4a, 0x9b, 0x6f, 0x14, 0x68, 0x00, 0x2b, 0x05, 0xd1, 0x94, 0x61,
0xc5, 0x4b, 0x03, 0x22, 0x5b, 0x68, 0xc6, 0x49, 0x43, 0xe7, 0x9b, 0x08,
0xfb, 0x60, 0x93, 0x69, 0xbb, 0x60, 0x80, 0x23, 0xdb, 0x02, 0x9c, 0x42,
0x00, 0xd0, 0xc6, 0xe0, 0xff, 0xf7, 0x3a, 0xfb, 0x05, 0x1e, 0x0a, 0xd0,
0xbc, 0x4b, 0x03, 0x22, 0x5b, 0x68, 0xbe, 0x49, 0xd8, 0x68, 0xff, 0xf7,
0x3b, 0xf9, 0xbd, 0x46, 0xbc, 0x4b, 0x9d, 0x44, 0xf0, 0xbd, 0x10, 0x23,
0xfe, 0x18, 0x32, 0x00, 0x90, 0x21, 0xba, 0x48, 0xff, 0xf7, 0x2e, 0xfd,
0x08, 0x23, 0x3e, 0x60, 0xbc, 0x68, 0xb8, 0x4e, 0x7b, 0x60, 0x22, 0x00,
0x23, 0x00, 0x2d, 0x32, 0x2c, 0x33, 0x12, 0x78, 0x1b, 0x78, 0x12, 0x02,
0x1a, 0x43, 0x23, 0x00, 0x2e, 0x33, 0x1b, 0x78, 0x1b, 0x04, 0x1a, 0x43,
0x23, 0x00, 0x2f, 0x33, 0x1b, 0x78, 0x1b, 0x06, 0x13, 0x43, 0x51, 0xd0,
0x62, 0x78, 0x23, 0x78, 0x12, 0x02, 0x1a, 0x43, 0xa3, 0x78, 0x1b, 0x04,
0x1a, 0x43, 0xe3, 0x78, 0x1b, 0x06, 0x13, 0x43, 0xa8, 0x4a, 0x53, 0x60,
0x01, 0x22, 0xa2, 0x4b, 0x1a, 0x77, 0x00, 0x24, 0xbb, 0x68, 0x19, 0x19,
0x0a, 0x00, 0x0b, 0x00, 0x29, 0x32, 0x28, 0x33, 0x12, 0x78, 0x1b, 0x78,
0x12, 0x02, 0x1a, 0x43, 0x0b, 0x00, 0x2a, 0x33, 0x1b, 0x78, 0x1b, 0x04,
0x1a, 0x43, 0x0b, 0x00, 0x2b, 0x33, 0x1b, 0x78, 0x1b, 0x06, 0x13, 0x43,
0x01, 0x33, 0x05, 0xd0, 0x10, 0x23, 0xfb, 0x18, 0x18, 0x19, 0x30, 0x22,
0x00, 0xf0, 0xad, 0xfe, 0x30, 0x34, 0x90, 0x2c, 0xe0, 0xd1, 0x10, 0x21,
0x90, 0x22, 0x96, 0x4b, 0x79, 0x18, 0x89, 0x18, 0x10, 0x20, 0x0b, 0x60,
0x94, 0x21, 0x02, 0x23, 0x38, 0x18, 0x41, 0x18, 0x10, 0x20, 0x0b, 0x60,
0xff, 0x23, 0x98, 0x21, 0x38, 0x18, 0x41, 0x18, 0x5b, 0x03, 0x0b, 0x60,
0x80, 0x18, 0x03, 0x21, 0xff, 0xf7, 0xaa, 0xfc, 0x71, 0x34, 0xff, 0x34,
0xfb, 0x68, 0xab, 0x42, 0x40, 0xd8, 0x10, 0x23, 0x90, 0x21, 0xfa, 0x18,
0x85, 0x48, 0xff, 0xf7, 0x9b, 0xfd, 0x71, 0xe7, 0x7a, 0x68, 0x3b, 0x68,
0x9b, 0x18, 0x22, 0x00, 0x19, 0x6a, 0x23, 0x00, 0x29, 0x32, 0x28, 0x33,
0x12, 0x78, 0x1b, 0x78, 0x12, 0x02, 0x1a, 0x43, 0x23, 0x00, 0x2a, 0x33,
0x1b, 0x78, 0x1b, 0x04, 0x1a, 0x43, 0x23, 0x00, 0x2b, 0x33, 0x1b, 0x78,
0x1b, 0x06, 0x13, 0x43, 0x99, 0x42, 0x01, 0xd0, 0x4b, 0x1c, 0x17, 0xd1,
0x62, 0x78, 0x23, 0x78, 0x12, 0x02, 0x1a, 0x43, 0xa3, 0x78, 0x1b, 0x04,
0x1a, 0x43, 0xe3, 0x78, 0x1b, 0x06, 0x13, 0x43, 0x72, 0x68, 0x93, 0x42,
0x00, 0xd2, 0x73, 0x60, 0x21, 0x00, 0x7a, 0x68, 0x3b, 0x68, 0x08, 0x31,
0x98, 0x18, 0x20, 0x22, 0x00, 0xf0, 0x48, 0xfe, 0x00, 0x28, 0x87, 0xd1,
0x7b, 0x68, 0x30, 0x34, 0x30, 0x33, 0x7b, 0x60, 0x98, 0x2b, 0x00, 0xd0,
0x61, 0xe7, 0x82, 0xe7, 0xff, 0x23, 0xdb, 0x02, 0xe8, 0x18, 0x68, 0x4b,
0x80, 0x00, 0xc2, 0x18, 0xbb, 0x68, 0x21, 0x00, 0x9a, 0x18, 0xff, 0xf7,
0x55, 0xfd, 0x80, 0x35, 0xae, 0xe7, 0x64, 0x4b, 0x9c, 0x42, 0x39, 0xd9,
0x13, 0x7f, 0x00, 0x2b, 0x00, 0xd1, 0x23, 0xe7, 0x5d, 0x4b, 0x61, 0x4a,
0x5b, 0x68, 0x9b, 0x18, 0x1c, 0x19, 0xa3, 0xb2, 0x00, 0x2b, 0x12, 0xd1,
0x10, 0x21, 0x90, 0x22, 0x59, 0x4b, 0x79, 0x18, 0x89, 0x18, 0x10, 0x20,
0x0b, 0x60, 0x94, 0x21, 0x02, 0x23, 0x38, 0x18, 0x41, 0x18, 0x0b, 0x60,
0x96, 0x33, 0xc3, 0x18, 0x03, 0x21, 0x80, 0x18, 0x1c, 0x60, 0xff, 0xf7,
0x35, 0xfc, 0xfb, 0x68, 0x80, 0x26, 0x7f, 0x33, 0xdb, 0x09, 0x5a, 0x02,
0x80, 0x23, 0x20, 0x00, 0x9b, 0x00, 0xe3, 0x18, 0xd3, 0x18, 0xfb, 0x60,
0xb6, 0x00, 0x80, 0x23, 0x9b, 0x00, 0xc5, 0x18, 0xfb, 0x68, 0x9d, 0x42,
0x00, 0xd1, 0xf5, 0xe6, 0xbb, 0x68, 0x31, 0x00, 0x1a, 0x18, 0x12, 0x1b,
0xff, 0xf7, 0x18, 0xfd, 0x28, 0x00, 0xf0, 0xe7, 0x80, 0x20, 0x47, 0x4b,
0x59, 0x68, 0x81, 0x43, 0x59, 0x60, 0x51, 0x69, 0x45, 0x4a, 0x89, 0x08,
0x94, 0x46, 0xfa, 0x68, 0x00, 0x2a, 0x00, 0xd1, 0xe0, 0xe6, 0x43, 0x4a,
0x1a, 0x80, 0x1a, 0x7d, 0xd2, 0x07, 0xfc, 0xd5, 0x20, 0x00, 0x00, 0x22,
0xbd, 0x68, 0x04, 0x00, 0xbd, 0x60, 0x91, 0x42, 0x02, 0xd0, 0xfe, 0x68,
0x96, 0x42, 0x08, 0xd1, 0x60, 0x46, 0x18, 0x80, 0x18, 0x7d, 0xc0, 0x07,
0xfc, 0xd5, 0xf8, 0x68, 0x82, 0x1a, 0xfa, 0x60, 0xe3, 0xe7, 0x10, 0xcd,
0x01, 0x32, 0x10, 0xc0, 0xeb, 0xe7, 0x5a, 0x2b, 0x00, 0xd0, 0x81, 0xe5,
0x26, 0x4b, 0x9d, 0x6f, 0x26, 0x4b, 0x1c, 0x68, 0x80, 0x23, 0xdb, 0x02,
0x9c, 0x42, 0x3f, 0xd1, 0x80, 0x26, 0x00, 0x24, 0x76, 0x00, 0x0c, 0xe0,
0x10, 0x22, 0x90, 0x23, 0xba, 0x18, 0xd3, 0x18, 0x1a, 0x19, 0xff, 0x23,
0x5b, 0x03, 0xe0, 0x18, 0x31, 0x00, 0xff, 0xf7, 0xfd, 0xfb, 0x01, 0x34,
0xff, 0x34, 0xa5, 0x42, 0xf0, 0xd8, 0x10, 0x22, 0x90, 0x23, 0xba, 0x18,
0xd4, 0x18, 0x00, 0x26, 0x24, 0x4a, 0x65, 0x19, 0xac, 0x42, 0x5f, 0xd1,
0x14, 0x4b, 0x01, 0x22, 0x5b, 0x68, 0x22, 0x49, 0xd8, 0x68, 0xfe, 0xf7,
0xeb, 0xff, 0x0f, 0x24, 0x07, 0x23, 0x32, 0x00, 0x22, 0x40, 0xd0, 0xb2,
0x01, 0x00, 0x36, 0x09, 0x30, 0x31, 0x09, 0x2a, 0x00, 0xdd, 0x07, 0x31,
0x10, 0x22, 0xba, 0x18, 0xd1, 0x54, 0x01, 0x3b, 0xf1, 0xd2, 0x10, 0x21,
0x08, 0x4b, 0x08, 0x22, 0x5b, 0x68, 0x79, 0x18, 0xd8, 0x68, 0xfe, 0xf7,
0xd3, 0xff, 0x05, 0x4b, 0x03, 0x22, 0x5b, 0x68, 0x13, 0x49, 0xc2, 0xe5,
0x0b, 0x4b, 0x9c, 0x42, 0xd3, 0xd9, 0x00, 0x26, 0x33, 0xe0, 0xc0, 0x46,
0x78, 0x00, 0x00, 0x20, 0xf8, 0x00, 0x00, 0x20, 0x4d, 0x1f, 0x00, 0x00,
0x49, 0x1f, 0x00, 0x00, 0xa4, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00,
0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x01, 0x00, 0x20, 0xe0, 0xff,
0xff, 0x0f, 0x04, 0x00, 0x00, 0xf0, 0xfb, 0xff, 0x00, 0x40, 0x00, 0x41,
0x04, 0xa5, 0xff, 0xff, 0x44, 0xa5, 0xff, 0xff, 0x2c, 0x1d, 0x00, 0x00,
0x51, 0x1f, 0x00, 0x00, 0x53, 0x1f, 0x00, 0x00, 0x10, 0x22, 0x90, 0x23,
0x80, 0x21, 0xba, 0x18, 0xd3, 0x18, 0x9a, 0x19, 0x24, 0x4b, 0x49, 0x00,
0x58, 0x68, 0x24, 0x4b, 0xc0, 0x18, 0x20, 0x18, 0x80, 0x19, 0xff, 0xf7,
0x95, 0xfb, 0x01, 0x36, 0xff, 0x36, 0xae, 0x42, 0xec, 0xd3, 0x96, 0xe7,
0x21, 0x78, 0x33, 0x0a, 0x4b, 0x40, 0x5b, 0x00, 0x31, 0x02, 0x9e, 0x5a,
0x01, 0x34, 0x4e, 0x40, 0xb6, 0xb2, 0x93, 0xe7, 0x1a, 0x00, 0x30, 0x3a,
0xd1, 0xb2, 0x09, 0x29, 0x07, 0xd8, 0x18, 0x4b, 0x9b, 0x6f, 0xfb, 0x60,
0x1b, 0x01, 0x13, 0x43, 0x15, 0x4a, 0x93, 0x67, 0xf6, 0xe4, 0x1a, 0x00,
0x41, 0x3a, 0x05, 0x2a, 0x05, 0xd8, 0x12, 0x4a, 0x37, 0x3b, 0x92, 0x6f,
0xfa, 0x60, 0x12, 0x01, 0xf1, 0xe7, 0x1a, 0x00, 0x61, 0x3a, 0x05, 0x2a,
0x05, 0xd8, 0x0d, 0x4a, 0x57, 0x3b, 0x92, 0x6f, 0xfa, 0x60, 0x12, 0x01,
0xe7, 0xe7, 0x00, 0x22, 0x2c, 0x2b, 0x08, 0xd1, 0x08, 0x4b, 0x9b, 0x6f,
0xfb, 0x60, 0xf9, 0x68, 0x07, 0x4b, 0x19, 0x60, 0x05, 0x4b, 0x9a, 0x67,
0xd6, 0xe4, 0x04, 0x49, 0x74, 0x31, 0x0b, 0x70, 0xf8, 0xe7, 0xc0, 0x46,
0x00, 0x00, 0x00, 0x20, 0x00, 0xf0, 0xfb, 0xff, 0x78, 0x00, 0x00, 0x20,
0xf8, 0x00, 0x00, 0x20, 0x70, 0xb5, 0x05, 0x00, 0xc0, 0xb0, 0x08, 0x00,
0x16, 0x00, 0x0c, 0x00, 0x00, 0xf0, 0x10, 0xfd, 0x6b, 0x46, 0x40, 0x00,
0x02, 0x30, 0x18, 0x70, 0x6a, 0x46, 0x03, 0x23, 0x76, 0x08, 0x53, 0x70,
0x02, 0x3b, 0x5a, 0x1e, 0xa1, 0x5c, 0x5a, 0x00, 0x00, 0x29, 0x01, 0xd0,
0x9e, 0x42, 0x06, 0xdc, 0x00, 0x23, 0x69, 0x46, 0x28, 0x00, 0xff, 0xf7,
0xa7, 0xfb, 0x40, 0xb0, 0x70, 0xbd, 0x68, 0x46, 0x01, 0x33, 0x81, 0x52,
0xed, 0xe7, 0xf7, 0xb5, 0x05, 0x68, 0x08, 0x22, 0x29, 0x00, 0xab, 0x8b,
0x06, 0x00, 0x13, 0x40, 0xff, 0x31, 0x00, 0x2b, 0x27, 0xd0, 0x80, 0x23,
0x40, 0x20, 0xc0, 0x24, 0xaa, 0x83, 0x09, 0x32, 0xab, 0x72, 0x4a, 0x70,
0x88, 0x71, 0x4b, 0x71, 0xb3, 0x4b, 0xb4, 0x4d, 0x5a, 0x68, 0xa4, 0x05,
0x2a, 0x40, 0x22, 0x43, 0x5a, 0x60, 0x5a, 0x69, 0x2a, 0x40, 0x14, 0x43,
0xb0, 0x4a, 0x5c, 0x61, 0x1a, 0x60, 0xb0, 0x4a, 0xb0, 0x4c, 0x1a, 0x61,
0x5a, 0x68, 0x14, 0x40, 0x80, 0x22, 0x92, 0x02, 0x22, 0x43, 0x5a, 0x60,
0x5a, 0x68, 0x92, 0x0b, 0x92, 0x03, 0x5a, 0x60, 0x00, 0x23, 0x48, 0x71,
0x33, 0x71, 0x30, 0x79, 0xfe, 0xbd, 0x10, 0x20, 0x0a, 0x7a, 0x02, 0x42,
0xf9, 0xd0, 0xa4, 0x4a, 0xa6, 0x4c, 0x17, 0x78, 0x08, 0x72, 0x67, 0x77,
0x57, 0x78, 0xa7, 0x77, 0x97, 0x78, 0x27, 0x84, 0x27, 0x8c, 0xbc, 0x46,
0x60, 0x46, 0xd7, 0x78, 0x3f, 0x02, 0x07, 0x43, 0x27, 0x84, 0x17, 0x79,
0x67, 0x84, 0x57, 0x79, 0x60, 0x8c, 0x3f, 0x02, 0x07, 0x43, 0x67, 0x84,
0x97, 0x79, 0xa7, 0x84, 0xd2, 0x79, 0xa7, 0x8c, 0x12, 0x02, 0x3a, 0x43,
0x40, 0x27, 0xa2, 0x84, 0x4f, 0x71, 0xa2, 0x7f, 0x60, 0x7f, 0x12, 0x02,
0x02, 0x43, 0x96, 0x48, 0x82, 0x42, 0x00, 0xd1, 0xf2, 0xe0, 0x26, 0xdc,
0x80, 0x20, 0x40, 0x00, 0x82, 0x42, 0x1c, 0xd0, 0x0b, 0xdc, 0x81, 0x2a,
0x04, 0xd0, 0x82, 0x2a, 0x00, 0xd1, 0xbe, 0xe0, 0x80, 0x2a, 0x14, 0xd1,
0x21, 0x00, 0xe3, 0x84, 0x26, 0x31, 0x02, 0x22, 0x4e, 0xe0, 0x81, 0x23,
0x5b, 0x00, 0x9a, 0x42, 0x00, 0xd1, 0x27, 0xe1, 0x00, 0xda, 0xf8, 0xe0,
0xff, 0x33, 0xff, 0x33, 0x9a, 0x42, 0x00, 0xd1, 0xcf, 0xe0, 0x86, 0x4b,
0x9a, 0x42, 0x00, 0xd1, 0xef, 0xe0, 0x20, 0x23, 0xff, 0x35, 0xaa, 0x79,
0x13, 0x43, 0xab, 0x71, 0xa9, 0xe7, 0x90, 0x21, 0x09, 0x01, 0x8a, 0x42,
0x6c, 0xd0, 0x17, 0xdc, 0xd0, 0x21, 0xc9, 0x00, 0x8a, 0x42, 0x22, 0xd0,
0x88, 0x21, 0x09, 0x01, 0x8a, 0x42, 0x00, 0xd1, 0x90, 0xe0, 0xa0, 0x23,
0xdb, 0x00, 0x9a, 0x42, 0xe7, 0xd1, 0x28, 0x00, 0xfe, 0xf7, 0x1a, 0xff,
0x80, 0x23, 0x22, 0x8c, 0x5b, 0x42, 0x13, 0x43, 0x32, 0x68, 0xdb, 0xb2,
0x93, 0x72, 0x8c, 0xe7, 0x73, 0x4b, 0x9a, 0x42, 0x00, 0xd1, 0xc8, 0xe0,
0xd7, 0xdd, 0x72, 0x4b, 0x9a, 0x42, 0x00, 0xd1, 0x4d, 0xe1, 0x71, 0x4b,
0x9a, 0x42, 0xd0, 0xd1, 0x23, 0x8c, 0x73, 0x71, 0xbd, 0xe0, 0x23, 0x8c,
0x1b, 0x0a, 0x01, 0x2b, 0x0c, 0xd1, 0x12, 0x22, 0xa3, 0x8c, 0x93, 0x42,
0x01, 0xd8, 0xa2, 0x8c, 0x92, 0xb2, 0x00, 0x23, 0x69, 0x49, 0x14, 0x31,
0x28, 0x00, 0xff, 0xf7, 0xdf, 0xfa, 0x6c, 0xe7, 0x23, 0x8c, 0x1b, 0x0a,
0x02, 0x2b, 0x09, 0xd1, 0x43, 0x22, 0xa3, 0x8c, 0x93, 0x42, 0x01, 0xd8,
0xa2, 0x8c, 0x92, 0xb2, 0x62, 0x49, 0x00, 0x23, 0x08, 0x31, 0xed, 0xe7,
0x23, 0x8c, 0x1b, 0x0a, 0x03, 0x2b, 0xaa, 0xd1, 0x23, 0x8c, 0xdb, 0xb2,
0x01, 0x2b, 0x16, 0xd0, 0x00, 0x2b, 0x05, 0xd0, 0x02, 0x2b, 0xa2, 0xd1,
0xa2, 0x8c, 0x5b, 0x49, 0xd2, 0xb2, 0x11, 0xe0, 0x57, 0x49, 0x04, 0x22,
0x26, 0x31, 0x01, 0xa8, 0x00, 0xf0, 0x05, 0xfc, 0x04, 0x22, 0xa3, 0x8c,
0x93, 0x42, 0x01, 0xd8, 0xa2, 0x8c, 0x92, 0xb2, 0x00, 0x23, 0x01, 0xa9,
0xce, 0xe7, 0xa2, 0x8c, 0x52, 0x49, 0xd2, 0xb2, 0x28, 0x00, 0xff, 0xf7,
0xe7, 0xfe, 0x38, 0xe7, 0x23, 0x8c, 0x28, 0x00, 0x33, 0x71, 0xfe, 0xf7,
0xb9, 0xfe, 0xa0, 0x23, 0x03, 0x22, 0xc0, 0x21, 0x5b, 0x00, 0xea, 0x54,
0x3c, 0x4b, 0x3d, 0x48, 0x5a, 0x6c, 0x89, 0x05, 0x02, 0x40, 0x0a, 0x43,
0x5a, 0x64, 0x46, 0x22, 0xff, 0x32, 0xaf, 0x54, 0x46, 0x4a, 0x30, 0x24,
0x1a, 0x64, 0x90, 0x22, 0x52, 0x00, 0xac, 0x54, 0x5a, 0x6b, 0x02, 0x40,
0x11, 0x43, 0x92, 0x22, 0x59, 0x63, 0x80, 0x21, 0x52, 0x00, 0xa9, 0x54,
0x40, 0x4a, 0x1a, 0x63, 0xb0, 0x22, 0x52, 0x00, 0xaf, 0x54, 0x5a, 0x6f,
0x10, 0x40, 0x58, 0x67, 0xb2, 0x23, 0x5b, 0x00, 0xe9, 0x54, 0x0a, 0xe7,
0x31, 0x1d, 0x01, 0x22, 0x96, 0xe7, 0x50, 0x22, 0xe3, 0x84, 0x63, 0x8c,
0x0f, 0x20, 0x13, 0x40, 0x22, 0x00, 0x28, 0x32, 0x13, 0x70, 0x63, 0x8c,
0x03, 0x40, 0x63, 0x84, 0x63, 0x8c, 0x03, 0x2b, 0x15, 0xd8, 0x13, 0x78,
0x00, 0x2b, 0x0b, 0xd0, 0x63, 0x8c, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18,
0x9b, 0x79, 0x9b, 0x06, 0x21, 0x00, 0xdb, 0x0f, 0xe3, 0x84, 0x26, 0x31,
0x00, 0x23, 0x28, 0xe7, 0x63, 0x8c, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18,
0x9b, 0x79, 0xdb, 0x06, 0xf2, 0xe7, 0x20, 0x23, 0x8a, 0x79, 0x13, 0x43,
0x8b, 0x71, 0xde, 0xe6, 0x80, 0x22, 0x63, 0x8c, 0x0f, 0x21, 0x13, 0x40,
0x22, 0x00, 0x28, 0x32, 0x13, 0x70, 0x63, 0x8c, 0x0b, 0x40, 0x63, 0x84,
0x23, 0x8c, 0x00, 0x2b, 0x00, 0xd0, 0x20, 0xe7, 0x63, 0x8c, 0x00, 0x2b,
0x00, 0xd1, 0x1c, 0xe7, 0x63, 0x8c, 0x03, 0x2b, 0x00, 0xd9, 0x18, 0xe7,
0x13, 0x78, 0x00, 0x2b, 0x09, 0xd0, 0x20, 0x22, 0x63, 0x8c, 0x08, 0x33,
0x5b, 0x01, 0xeb, 0x18, 0x5a, 0x71, 0x28, 0x00, 0xfe, 0xf7, 0x42, 0xfe,
0xbb, 0xe6, 0x63, 0x8c, 0x10, 0x22, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18,
0xf4, 0xe7, 0xc0, 0x46, 0x2c, 0x02, 0x00, 0x20, 0xff, 0xff, 0xff, 0x8f,
0xac, 0x01, 0x00, 0x20, 0x2c, 0x01, 0x00, 0x20, 0xff, 0x3f, 0x00, 0xf0,
0xf8, 0x00, 0x00, 0x20, 0x02, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00,
0x21, 0x20, 0x00, 0x00, 0xa1, 0x21, 0x00, 0x00, 0x21, 0x22, 0x00, 0x00,
0x44, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x65, 0x1f, 0x00, 0x00,
0x59, 0x1f, 0x00, 0x00, 0xec, 0x01, 0x00, 0x20, 0x6c, 0x01, 0x00, 0x20,
0x80, 0x22, 0x63, 0x8c, 0x13, 0x40, 0x22, 0x00, 0x28, 0x32, 0x13, 0x70,
0x0f, 0x22, 0x63, 0x8c, 0x13, 0x40, 0x63, 0x84, 0x23, 0x8c, 0x00, 0x2b,
0x00, 0xd0, 0xd4, 0xe6, 0x63, 0x8c, 0x00, 0x2b, 0x00, 0xd1, 0xd0, 0xe6,
0x63, 0x8c, 0x03, 0x2b, 0x00, 0xd9, 0xcc, 0xe6, 0x23, 0x00, 0x28, 0x33,
0x1b, 0x78, 0x00, 0x2b, 0x20, 0xd0, 0x63, 0x8c, 0x08, 0x33, 0x5b, 0x01,
0xeb, 0x18, 0x9b, 0x79, 0x9b, 0x06, 0xb0, 0xd5, 0x63, 0x8c, 0x11, 0x32,
0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18, 0x1a, 0x71, 0x63, 0x8c, 0x08, 0x33,
0x5b, 0x01, 0xeb, 0x18, 0xdb, 0x79, 0x5b, 0x06, 0xa3, 0xd5, 0x63, 0x8c,
0x20, 0x32, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18, 0xda, 0x71, 0x63, 0x8c,
0x3e, 0x3a, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18, 0x1a, 0x71, 0x96, 0xe7,
0x63, 0x8c, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18, 0x9b, 0x79, 0xdb, 0x06,
0x8f, 0xd5, 0x10, 0x22, 0x63, 0x8c, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18,
0x1a, 0x71, 0x63, 0x8c, 0x08, 0x33, 0x5b, 0x01, 0xeb, 0x18, 0xdb, 0x79,
0x9b, 0x06, 0x00, 0xd4, 0x81, 0xe7, 0x63, 0x8c, 0x92, 0x18, 0x08, 0x33,
0x5b, 0x01, 0xeb, 0x18, 0xda, 0x71, 0x63, 0x8c, 0x1f, 0x3a, 0x08, 0x33,
0x5b, 0x01, 0xeb, 0x18, 0xdc, 0xe7, 0x08, 0x22, 0xa3, 0x8c, 0x93, 0x42,
0x01, 0xd8, 0xa2, 0x8c, 0x92, 0xb2, 0x02, 0x49, 0x00, 0x23, 0x4c, 0x31,
0xba, 0xe6, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x20, 0xf8, 0xb5, 0x0b, 0x4f,
0x06, 0x00, 0x38, 0x00, 0x1c, 0x30, 0x0d, 0x00, 0xff, 0xf7, 0xf1, 0xfd,
0x2c, 0x00, 0x00, 0x28, 0x08, 0xd1, 0x05, 0x00, 0x08, 0xe0, 0x22, 0x00,
0x31, 0x00, 0xf8, 0x69, 0xff, 0xf7, 0x3c, 0xf9, 0x24, 0x1a, 0x36, 0x18,
0x00, 0x2c, 0xf6, 0xd1, 0x28, 0x00, 0xf8, 0xbd, 0x78, 0x00, 0x00, 0x20,
0x70, 0xb5, 0x08, 0x4c, 0x05, 0x00, 0x20, 0x00, 0x1c, 0x30, 0x0e, 0x00,
0xff, 0xf7, 0xd7, 0xfd, 0x03, 0x00, 0x00, 0x20, 0x83, 0x42, 0x04, 0xd0,
0x32, 0x00, 0x29, 0x00, 0xe0, 0x69, 0xff, 0xf7, 0x23, 0xf9, 0x70, 0xbd,
0x78, 0x00, 0x00, 0x20, 0x10, 0xb5, 0x08, 0x4c, 0x20, 0x00, 0x1c, 0x30,
0xff, 0xf7, 0xc5, 0xfd, 0x03, 0x00, 0x00, 0x20, 0x83, 0x42, 0x05, 0xd0,
0x48, 0x23, 0xe2, 0x69, 0xff, 0x33, 0xd0, 0x5c, 0xc0, 0x07, 0xc0, 0x0f,
0x10, 0xbd, 0xc0, 0x46, 0x78, 0x00, 0x00, 0x20, 0x0d, 0x4a, 0x0e, 0x48,
0x70, 0xb5, 0x82, 0x42, 0x06, 0xd1, 0x0d, 0x4a, 0x0d, 0x4b, 0x00, 0x21,
0x93, 0x42, 0x0d, 0xd1, 0x00, 0xf0, 0x1a, 0xf8, 0x0b, 0x4c, 0x00, 0x23,
0x94, 0x42, 0xf4, 0xd0, 0xd1, 0x18, 0x88, 0x42, 0xf1, 0xd9, 0xe5, 0x58,
0x04, 0x33, 0x0d, 0x60, 0xf8, 0xe7, 0x02, 0xc3, 0x93, 0x42, 0xfc, 0xd3,
0xee, 0xe7, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x20, 0x5c, 0x00, 0x00, 0x20,
0xac, 0x02, 0x00, 0x20, 0x5c, 0x00, 0x00, 0x20, 0x80, 0x1f, 0x00, 0x00,
0xf0, 0xb5, 0x0b, 0x49, 0x8b, 0xb0, 0x0b, 0x68, 0x00, 0xaf, 0x01, 0x33,
0x20, 0xd0, 0x09, 0x48, 0x09, 0x4b, 0xc9, 0xb2, 0xc3, 0x62, 0x00, 0x29,
0x1a, 0xd1, 0x08, 0x4b, 0x08, 0x4a, 0x1b, 0x78, 0xdb, 0x07, 0xdb, 0x0f,
0x0e, 0xd0, 0x11, 0x60, 0x01, 0x23, 0x30, 0x30, 0x03, 0x70, 0x0f, 0xe0,
0x00, 0x20, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x20, 0x04, 0x20, 0x00, 0x00,
0x38, 0x04, 0x00, 0x40, 0xfc, 0x7f, 0x00, 0x20, 0x14, 0x68, 0xda, 0x49,
0x8c, 0x42, 0x00, 0xd0, 0x28, 0xe2, 0x13, 0x60, 0x1e, 0x22, 0xd8, 0x49,
0x4b, 0x68, 0x93, 0x43, 0x1c, 0x3a, 0x13, 0x43, 0x4b, 0x60, 0x08, 0x23,
0xd5, 0x49, 0x88, 0x69, 0x03, 0x43, 0x8b, 0x61, 0xd4, 0x48, 0xd5, 0x4b,
0x98, 0x82, 0x98, 0x8a, 0x10, 0x43, 0x98, 0x82, 0xd8, 0x68, 0x10, 0x42,
0xfc, 0xd0, 0x01, 0x22, 0xd1, 0x48, 0x02, 0x70, 0x04, 0x78, 0x14, 0x42,
0x03, 0xd0, 0x44, 0x78, 0x64, 0xb2, 0x00, 0x2c, 0xf8, 0xdb, 0x01, 0x22,
0x82, 0x60, 0x42, 0x78, 0x52, 0xb2, 0x00, 0x2a, 0xfb, 0xdb, 0xcb, 0x4a,
0x42, 0x60, 0x42, 0x78, 0x52, 0xb2, 0x00, 0x2a, 0xfb, 0xdb, 0x82, 0x22,
0xd2, 0x01, 0x42, 0x80, 0x42, 0x78, 0x52, 0xb2, 0x00, 0x2a, 0xfb, 0xdb,
0x80, 0x24, 0x9a, 0x8c, 0xa2, 0x43, 0x9a, 0x84, 0x10, 0x22, 0xdc, 0x68,
0x14, 0x42, 0xfc, 0xd0, 0xc1, 0x4a, 0xda, 0x62, 0x10, 0x22, 0xdc, 0x68,
0x14, 0x42, 0xfc, 0xd0, 0x9c, 0x8c, 0xbf, 0x4a, 0x22, 0x43, 0x9a, 0x84,
0x10, 0x22, 0xdc, 0x68, 0x14, 0x42, 0xfc, 0xd0, 0x02, 0x22, 0x9c, 0x8c,
0x80, 0x25, 0x22, 0x43, 0x9a, 0x84, 0x40, 0x22, 0xdc, 0x68, 0x2c, 0x42,
0xfc, 0xd0, 0xdc, 0x68, 0x14, 0x42, 0xf9, 0xd0, 0x10, 0x22, 0xdc, 0x68,
0x14, 0x42, 0xfc, 0xd0, 0x00, 0x23, 0x83, 0x60, 0x43, 0x78, 0x5b, 0xb2,
0x00, 0x2b, 0xfb, 0xdb, 0xb1, 0x4b, 0x43, 0x60, 0x7b, 0x60, 0x43, 0x78,
0x5b, 0xb2, 0x00, 0x2b, 0xfb, 0xdb, 0x00, 0x23, 0x0b, 0x72, 0x4b, 0x72,
0x8b, 0x72, 0xcb, 0x72, 0x62, 0xb6, 0xac, 0x4b, 0x43, 0x80, 0x43, 0x78,
0x5b, 0xb2, 0x00, 0x2b, 0xfb, 0xdb, 0x04, 0x23, 0x0a, 0x6a, 0xa9, 0x4c,
0x13, 0x43, 0x0b, 0x62, 0x01, 0x23, 0x22, 0x68, 0x13, 0x43, 0x23, 0x60,
0x23, 0x68, 0xdb, 0x07, 0xfc, 0xd4, 0xe3, 0x69, 0xdb, 0x07, 0xf9, 0xd4,
0x14, 0x23, 0xff, 0x22, 0x23, 0x60, 0xe3, 0x68, 0x93, 0x43, 0x1a, 0x00,
0xef, 0x23, 0x13, 0x43, 0xe3, 0x60, 0x02, 0x23, 0x22, 0x68, 0x13, 0x43,
0x23, 0x60, 0xe3, 0x69, 0x9b, 0x07, 0xfc, 0xd4, 0x30, 0x22, 0x63, 0x8b,
0x93, 0x43, 0x1a, 0x00, 0x10, 0x23, 0x13, 0x43, 0x63, 0x83, 0xe5, 0x69,
0x6d, 0x07, 0xed, 0x0f, 0xfb, 0xd1, 0x01, 0x26, 0x0f, 0x20, 0x02, 0x21,
0x94, 0x4a, 0x13, 0x78, 0x33, 0x43, 0x13, 0x70, 0x93, 0x4b, 0x1a, 0x78,
0x82, 0x43, 0x1a, 0x70, 0x1a, 0x78, 0x0a, 0x43, 0x1a, 0x70, 0x91, 0x4a,
0x11, 0x78, 0x31, 0x43, 0x11, 0x70, 0x1a, 0x78, 0x02, 0x40, 0x1a, 0x70,
0x20, 0x22, 0x19, 0x78, 0x0a, 0x38, 0x0a, 0x43, 0x1a, 0x70, 0xfe, 0xf7,
0x2d, 0xff, 0x00, 0x28, 0x3b, 0xd0, 0xce, 0x21, 0x01, 0x40, 0x05, 0x20,
0xfe, 0xf7, 0x18, 0xff, 0x30, 0x00, 0xfe, 0xf7, 0x23, 0xff, 0x30, 0x23,
0x98, 0x43, 0xc1, 0xb2, 0x30, 0x00, 0xfe, 0xf7, 0x0f, 0xff, 0x28, 0x00,
0xfe, 0xf7, 0x1a, 0xff, 0x78, 0x23, 0x01, 0x00, 0x99, 0x43, 0x48, 0x3b,
0x19, 0x43, 0xc9, 0xb2, 0x28, 0x00, 0xfe, 0xf7, 0x03, 0xff, 0x28, 0x00,
0xfe, 0xf7, 0x0e, 0xff, 0x07, 0x21, 0x01, 0x43, 0xc9, 0xb2, 0x28, 0x00,
0xfe, 0xf7, 0xfa, 0xfe, 0x02, 0x20, 0xfe, 0xf7, 0x05, 0xff, 0x01, 0x00,
0x02, 0x20, 0x31, 0x40, 0xfe, 0xf7, 0xf2, 0xfe, 0x04, 0x20, 0xfe, 0xf7,
0xfd, 0xfe, 0x03, 0x21, 0x01, 0x40, 0x98, 0x20, 0x01, 0x43, 0x94, 0x38,
0xfe, 0xf7, 0xe8, 0xfe, 0x02, 0x22, 0x23, 0x68, 0x93, 0x43, 0x23, 0x60,
0xe3, 0x69, 0x9b, 0x07, 0xfc, 0xd4, 0x0f, 0x22, 0x6b, 0x49, 0x01, 0x25,
0x0b, 0x78, 0x60, 0x4c, 0x1a, 0x40, 0x70, 0x23, 0x13, 0x43, 0x69, 0x4a,
0x0b, 0x70, 0x13, 0x78, 0x2b, 0x43, 0x13, 0x70, 0x80, 0x23, 0x5b, 0x00,
0xa3, 0x60, 0x80, 0x23, 0x7a, 0x68, 0x1b, 0x03, 0x13, 0x43, 0x63, 0x60,
0xfe, 0xf7, 0x7e, 0xfd, 0x08, 0x23, 0x29, 0x00, 0xf8, 0x18, 0xbd, 0x60,
0xfe, 0xf7, 0x5a, 0xff, 0x00, 0x0e, 0xb0, 0x28, 0x04, 0xd0, 0x28, 0x00,
0xfe, 0xf7, 0xfc, 0xfc, 0xfe, 0xf7, 0x50, 0xfc, 0x5b, 0x4d, 0x2b, 0x00,
0x30, 0x33, 0x1b, 0x78, 0x00, 0x2b, 0x0a, 0xd0, 0x59, 0x4b, 0x1a, 0x68,
0x82, 0xf3, 0x08, 0x88, 0xff, 0x22, 0x93, 0x43, 0x57, 0x4a, 0x93, 0x60,
0xeb, 0x6a, 0x1b, 0x68, 0x18, 0x47, 0x20, 0x23, 0x43, 0x4a, 0x0f, 0x20,
0xd1, 0x69, 0x0b, 0x43, 0xd3, 0x61, 0x01, 0x23, 0x52, 0x49, 0x0a, 0x78,
0x1a, 0x43, 0x0a, 0x70, 0x51, 0x4a, 0x11, 0x78, 0x81, 0x43, 0x11, 0x70,
0x06, 0x21, 0x16, 0x78, 0x31, 0x43, 0x11, 0x70, 0x4e, 0x49, 0x0e, 0x78,
0x33, 0x43, 0x0b, 0x70, 0x13, 0x78, 0x03, 0x40, 0x13, 0x70, 0x60, 0x23,
0x11, 0x78, 0x0b, 0x43, 0x13, 0x70, 0x4a, 0x4b, 0x63, 0x80, 0x63, 0x78,
0x5b, 0xb2, 0x00, 0x2b, 0xfb, 0xdb, 0x01, 0x23, 0x47, 0x4e, 0x32, 0x78,
0x13, 0x43, 0x33, 0x70, 0xb3, 0x78, 0xdb, 0x07, 0xfc, 0xd4, 0x1f, 0x21,
0x44, 0x4a, 0x13, 0x68, 0x5b, 0x0b, 0x0b, 0x40, 0x8b, 0x42, 0x00, 0xd1,
0x05, 0x23, 0x30, 0x8d, 0x41, 0x4c, 0x0b, 0x40, 0x9b, 0x01, 0x20, 0x40,
0x03, 0x43, 0x33, 0x85, 0x13, 0x68, 0x9b, 0x0c, 0x0b, 0x40, 0x1f, 0x2b,
0x00, 0xd1, 0x02, 0x3b, 0x1f, 0x20, 0x31, 0x8d, 0x03, 0x40, 0x81, 0x43,
0x0b, 0x43, 0x33, 0x85, 0x13, 0x68, 0x07, 0x22, 0xdb, 0x0d, 0x13, 0x40,
0x7a, 0x60, 0x93, 0x42, 0x00, 0xd1, 0x03, 0x23, 0x07, 0x21, 0x32, 0x8d,
0x0b, 0x40, 0x34, 0x49, 0x1b, 0x03, 0x0a, 0x40, 0x13, 0x43, 0x7f, 0x22,
0x33, 0x85, 0x33, 0x78, 0x31, 0x48, 0x13, 0x40, 0x33, 0x70, 0x04, 0x23,
0x32, 0x78, 0x00, 0x21, 0x13, 0x43, 0x0c, 0x22, 0x33, 0x70, 0x70, 0x62,
0x33, 0x89, 0x93, 0x43, 0x33, 0x81, 0x33, 0x89, 0x0b, 0x3a, 0x93, 0x43,
0x33, 0x81, 0x7f, 0x32, 0x00, 0xf0, 0xa6, 0xf8, 0x00, 0x21, 0x28, 0x4c,
0x28, 0x4b, 0xe6, 0x61, 0x63, 0x62, 0x02, 0x23, 0x21, 0x84, 0x32, 0x78,
0x1a, 0x48, 0x13, 0x43, 0x80, 0x22, 0x33, 0x70, 0xc0, 0x26, 0x24, 0x4b,
0x52, 0x00, 0x1a, 0x60, 0x23, 0x4a, 0x24, 0x4b, 0x36, 0x06, 0x53, 0x60,
0x03, 0x6a, 0x1b, 0x02, 0x1b, 0x0a, 0x43, 0xe0, 0x35, 0x81, 0x73, 0x07,
0x00, 0x40, 0x00, 0x41, 0x00, 0x04, 0x00, 0x40, 0x0c, 0x06, 0x00, 0x00,
0x00, 0x08, 0x00, 0x40, 0x00, 0x0c, 0x00, 0x40, 0x01, 0x05, 0x01, 0x00,
0xb8, 0x05, 0xff, 0x7d, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x07, 0x03, 0x00,
0x14, 0x40, 0x00, 0x00, 0x00, 0x08, 0x00, 0x42, 0x48, 0x44, 0x00, 0x41,
0x34, 0x44, 0x00, 0x41, 0x49, 0x44, 0x00, 0x41, 0x3d, 0x44, 0x00, 0x41,
0x5b, 0x44, 0x00, 0x41, 0xf8, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00,
0x00, 0xed, 0x00, 0xe0, 0x58, 0x44, 0x00, 0x41, 0x3c, 0x44, 0x00, 0x41,
0x59, 0x44, 0x00, 0x41, 0x06, 0x40, 0x00, 0x00, 0x00, 0x50, 0x00, 0x41,
0x24, 0x60, 0x80, 0x00, 0x3f, 0xf8, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff,
0x2c, 0x02, 0x00, 0x20, 0x78, 0x00, 0x00, 0x20, 0x33, 0x12, 0x00, 0x00,
0x88, 0x44, 0x00, 0x41, 0x10, 0xe0, 0x00, 0xe0, 0xe7, 0x03, 0x00, 0x00,
0x33, 0x43, 0x03, 0x62, 0x07, 0x23, 0x01, 0x26, 0x91, 0x60, 0x13, 0x60,
0x20, 0x00, 0x63, 0x6a, 0x1c, 0x30, 0x98, 0x47, 0x00, 0x28, 0x01, 0xd0,
0x19, 0x4b, 0x1e, 0x70, 0x18, 0x4b, 0x1b, 0x78, 0x00, 0x2b, 0xf3, 0xd0,
0x17, 0x4b, 0x1a, 0x00, 0x2c, 0x32, 0x62, 0x60, 0x08, 0x22, 0x48, 0x33,
0xba, 0x18, 0x43, 0xcb, 0x43, 0xc2, 0x43, 0xcb, 0x43, 0xc2, 0x03, 0xcb,
0x03, 0xc2, 0x08, 0x21, 0x11, 0x4a, 0x79, 0x18, 0x93, 0x68, 0x74, 0x34,
0x5b, 0x03, 0x5b, 0x0f, 0x9b, 0x00, 0xcb, 0x58, 0x6b, 0x61, 0x92, 0x68,
0x92, 0xb2, 0x53, 0x43, 0x2b, 0x61, 0x00, 0x23, 0x2b, 0x60, 0x7a, 0x33,
0x23, 0x70, 0xfe, 0xf7, 0x5d, 0xff, 0xfc, 0xe7, 0x08, 0x4b, 0x01, 0x3b,
0x00, 0x2b, 0xfc, 0xd1, 0x07, 0x4b, 0x11, 0x60, 0x01, 0x3b, 0x00, 0x2b,
0xfc, 0xd1, 0x13, 0x60, 0xb8, 0xe5, 0xc0, 0x46, 0x29, 0x01, 0x00, 0x20,
0x44, 0x1c, 0x00, 0x00, 0x00, 0x40, 0x00, 0x41, 0xc4, 0x09, 0x00, 0x00,
0x48, 0xe8, 0x01, 0x00, 0x03, 0x00, 0x12, 0x18, 0x93, 0x42, 0x00, 0xd1,
0x70, 0x47, 0x19, 0x70, 0x01, 0x33, 0xf9, 0xe7, 0x30, 0xb5, 0x00, 0x24,
0xa2, 0x42, 0x01, 0xd1, 0x00, 0x20, 0x05, 0xe0, 0x03, 0x5d, 0x65, 0x1c,
0x0c, 0x5d, 0xa3, 0x42, 0x01, 0xd0, 0x18, 0x1b, 0x30, 0xbd, 0x2c, 0x00,
0xf2, 0xe7, 0x00, 0x23, 0x10, 0xb5, 0x9a, 0x42, 0x00, 0xd1, 0x10, 0xbd,
0xcc, 0x5c, 0xc4, 0x54, 0x01, 0x33, 0xf8, 0xe7, 0x00, 0x23, 0xc2, 0x5c,
0x01, 0x33, 0x00, 0x2a, 0xfb, 0xd1, 0x58, 0x1e, 0x70, 0x47, 0x00, 0x00,
0xf8, 0xb5, 0xc0, 0x46, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47,
0xf8, 0xb5, 0xc0, 0x46, 0xf8, 0xbc, 0x08, 0xbc, 0x9e, 0x46, 0x70, 0x47,
0x32, 0x2e, 0x30, 0x00, 0x5b, 0x41, 0x72, 0x64, 0x75, 0x69, 0x6e, 0x6f,
0x3a, 0x58, 0x59, 0x5a, 0x5d, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x02,
0x02, 0x00, 0x00, 0x40, 0x41, 0x23, 0x56, 0x00, 0x00, 0x02, 0x01, 0x02,
0x00, 0x01, 0x04, 0x03, 0x09, 0x04, 0x00, 0x00, 0x15, 0x0a, 0x00, 0x00,
0x59, 0x09, 0x00, 0x00, 0x9d, 0x16, 0x00, 0x00, 0xf9, 0x09, 0x00, 0x00,
0x75, 0x16, 0x00, 0x00, 0xf9, 0x09, 0x00, 0x00, 0x41, 0x16, 0x00, 0x00,
0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00,
0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
0x02, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
0x0f, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x10, 0x42, 0x20, 0x63, 0x30,
0x84, 0x40, 0xa5, 0x50, 0xc6, 0x60, 0xe7, 0x70, 0x08, 0x81, 0x29, 0x91,
0x4a, 0xa1, 0x6b, 0xb1, 0x8c, 0xc1, 0xad, 0xd1, 0xce, 0xe1, 0xef, 0xf1,
0x31, 0x12, 0x10, 0x02, 0x73, 0x32, 0x52, 0x22, 0xb5, 0x52, 0x94, 0x42,
0xf7, 0x72, 0xd6, 0x62, 0x39, 0x93, 0x18, 0x83, 0x7b, 0xb3, 0x5a, 0xa3,
0xbd, 0xd3, 0x9c, 0xc3, 0xff, 0xf3, 0xde, 0xe3, 0x62, 0x24, 0x43, 0x34,
0x20, 0x04, 0x01, 0x14, 0xe6, 0x64, 0xc7, 0x74, 0xa4, 0x44, 0x85, 0x54,
0x6a, 0xa5, 0x4b, 0xb5, 0x28, 0x85, 0x09, 0x95, 0xee, 0xe5, 0xcf, 0xf5,
0xac, 0xc5, 0x8d, 0xd5, 0x53, 0x36, 0x72, 0x26, 0x11, 0x16, 0x30, 0x06,
0xd7, 0x76, 0xf6, 0x66, 0x95, 0x56, 0xb4, 0x46, 0x5b, 0xb7, 0x7a, 0xa7,
0x19, 0x97, 0x38, 0x87, 0xdf, 0xf7, 0xfe, 0xe7, 0x9d, 0xd7, 0xbc, 0xc7,
0xc4, 0x48, 0xe5, 0x58, 0x86, 0x68, 0xa7, 0x78, 0x40, 0x08, 0x61, 0x18,
0x02, 0x28, 0x23, 0x38, 0xcc, 0xc9, 0xed, 0xd9, 0x8e, 0xe9, 0xaf, 0xf9,
0x48, 0x89, 0x69, 0x99, 0x0a, 0xa9, 0x2b, 0xb9, 0xf5, 0x5a, 0xd4, 0x4a,
0xb7, 0x7a, 0x96, 0x6a, 0x71, 0x1a, 0x50, 0x0a, 0x33, 0x3a, 0x12, 0x2a,
0xfd, 0xdb, 0xdc, 0xcb, 0xbf, 0xfb, 0x9e, 0xeb, 0x79, 0x9b, 0x58, 0x8b,
0x3b, 0xbb, 0x1a, 0xab, 0xa6, 0x6c, 0x87, 0x7c, 0xe4, 0x4c, 0xc5, 0x5c,
0x22, 0x2c, 0x03, 0x3c, 0x60, 0x0c, 0x41, 0x1c, 0xae, 0xed, 0x8f, 0xfd,
0xec, 0xcd, 0xcd, 0xdd, 0x2a, 0xad, 0x0b, 0xbd, 0x68, 0x8d, 0x49, 0x9d,
0x97, 0x7e, 0xb6, 0x6e, 0xd5, 0x5e, 0xf4, 0x4e, 0x13, 0x3e, 0x32, 0x2e,
0x51, 0x1e, 0x70, 0x0e, 0x9f, 0xff, 0xbe, 0xef, 0xdd, 0xdf, 0xfc, 0xcf,
0x1b, 0xbf, 0x3a, 0xaf, 0x59, 0x9f, 0x78, 0x8f, 0x88, 0x91, 0xa9, 0x81,
0xca, 0xb1, 0xeb, 0xa1, 0x0c, 0xd1, 0x2d, 0xc1, 0x4e, 0xf1, 0x6f, 0xe1,
0x80, 0x10, 0xa1, 0x00, 0xc2, 0x30, 0xe3, 0x20, 0x04, 0x50, 0x25, 0x40,
0x46, 0x70, 0x67, 0x60, 0xb9, 0x83, 0x98, 0x93, 0xfb, 0xa3, 0xda, 0xb3,
0x3d, 0xc3, 0x1c, 0xd3, 0x7f, 0xe3, 0x5e, 0xf3, 0xb1, 0x02, 0x90, 0x12,
0xf3, 0x22, 0xd2, 0x32, 0x35, 0x42, 0x14, 0x52, 0x77, 0x62, 0x56, 0x72,
0xea, 0xb5, 0xcb, 0xa5, 0xa8, 0x95, 0x89, 0x85, 0x6e, 0xf5, 0x4f, 0xe5,
0x2c, 0xd5, 0x0d, 0xc5, 0xe2, 0x34, 0xc3, 0x24, 0xa0, 0x14, 0x81, 0x04,
0x66, 0x74, 0x47, 0x64, 0x24, 0x54, 0x05, 0x44, 0xdb, 0xa7, 0xfa, 0xb7,
0x99, 0x87, 0xb8, 0x97, 0x5f, 0xe7, 0x7e, 0xf7, 0x1d, 0xc7, 0x3c, 0xd7,
0xd3, 0x26, 0xf2, 0x36, 0x91, 0x06, 0xb0, 0x16, 0x57, 0x66, 0x76, 0x76,
0x15, 0x46, 0x34, 0x56, 0x4c, 0xd9, 0x6d, 0xc9, 0x0e, 0xf9, 0x2f, 0xe9,
0xc8, 0x99, 0xe9, 0x89, 0x8a, 0xb9, 0xab, 0xa9, 0x44, 0x58, 0x65, 0x48,
0x06, 0x78, 0x27, 0x68, 0xc0, 0x18, 0xe1, 0x08, 0x82, 0x38, 0xa3, 0x28,
0x7d, 0xcb, 0x5c, 0xdb, 0x3f, 0xeb, 0x1e, 0xfb, 0xf9, 0x8b, 0xd8, 0x9b,
0xbb, 0xab, 0x9a, 0xbb, 0x75, 0x4a, 0x54, 0x5a, 0x37, 0x6a, 0x16, 0x7a,
0xf1, 0x0a, 0xd0, 0x1a, 0xb3, 0x2a, 0x92, 0x3a, 0x2e, 0xfd, 0x0f, 0xed,
0x6c, 0xdd, 0x4d, 0xcd, 0xaa, 0xbd, 0x8b, 0xad, 0xe8, 0x9d, 0xc9, 0x8d,
0x26, 0x7c, 0x07, 0x6c, 0x64, 0x5c, 0x45, 0x4c, 0xa2, 0x3c, 0x83, 0x2c,
0xe0, 0x1c, 0xc1, 0x0c, 0x1f, 0xef, 0x3e, 0xff, 0x5d, 0xcf, 0x7c, 0xdf,
0x9b, 0xaf, 0xba, 0xbf, 0xd9, 0x8f, 0xf8, 0x9f, 0x17, 0x6e, 0x36, 0x7e,
0x55, 0x4e, 0x74, 0x5e, 0x93, 0x2e, 0xb2, 0x3e, 0xd1, 0x0e, 0xf0, 0x1e,
0x76, 0x00, 0x20, 0x00, 0x41, 0x75, 0x67, 0x20, 0x20, 0x39, 0x20, 0x32,
0x30, 0x31, 0x38, 0x00, 0x31, 0x31, 0x3a, 0x31, 0x37, 0x3a, 0x33, 0x30,
0x00, 0x58, 0x0a, 0x0d, 0x00, 0x79, 0x0a, 0x0d, 0x00, 0x59, 0x0a, 0x0d,
0x00, 0x5a, 0x00, 0x23, 0x0a, 0x0d, 0x00, 0x3e, 0x00, 0x41, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x20, 0x4c, 0x4c, 0x43, 0x00, 0x41, 0x72, 0x64,
0x75, 0x69, 0x6e, 0x6f, 0x20, 0x4d, 0x4b, 0x52, 0x20, 0x56, 0x69, 0x64,
0x6f, 0x72, 0x20, 0x34, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x14, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x09, 0x02, 0x43, 0x00,
0x02, 0x01, 0x00, 0x80, 0xfa, 0x09, 0x04, 0x00, 0x00, 0x01, 0x02, 0x02,
0x00, 0x00, 0x05, 0x24, 0x00, 0x10, 0x01, 0x04, 0x24, 0x02, 0x00, 0x05,
0x24, 0x06, 0x00, 0x01, 0x05, 0x24, 0x01, 0x00, 0x01, 0x07, 0x05, 0x83,
0x03, 0x08, 0x00, 0xff, 0x09, 0x04, 0x01, 0x00, 0x02, 0x0a, 0x00, 0x00,
0x00, 0x07, 0x05, 0x81, 0x02, 0x40, 0x00, 0x00, 0x07, 0x05, 0x02, 0x02,
0x40, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00,
0x69, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00

View file

@ -26,9 +26,7 @@
#define SPI_IMODE_EXTINT 1
#define SPI_IMODE_GLOBAL 2
const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
SPIClass::SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, SercomSpiTXPad PadTx, SercomRXPad PadRx)
SPIClass::SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, SercomSpiTXPad PadTx, SercomRXPad PadRx) : settings(SPISettings(0, MSBFIRST, SPI_MODE0))
{
initialized = false;
assert(p_sercom != NULL);
@ -68,12 +66,15 @@ void SPIClass::init()
void SPIClass::config(SPISettings settings)
{
_p_sercom->disableSPI();
if (this->settings != settings) {
this->settings = settings;
_p_sercom->disableSPI();
_p_sercom->initSPI(_padTx, _padRx, SPI_CHAR_SIZE_8_BITS, settings.bitOrder);
_p_sercom->initSPIClock(settings.dataMode, settings.clockFreq);
_p_sercom->initSPI(_padTx, _padRx, SPI_CHAR_SIZE_8_BITS, settings.bitOrder);
_p_sercom->initSPIClock(settings.dataMode, settings.clockFreq);
_p_sercom->enableSPI();
_p_sercom->enableSPI();
}
}
void SPIClass::end()

View file

@ -72,6 +72,25 @@ class SPISettings {
// Default speed set to 4MHz, SPI mode set to MODE 0 and Bit order set to MSB first.
SPISettings() { init_AlwaysInline(4000000, MSBFIRST, SPI_MODE0); }
bool operator==(const SPISettings& rhs) const
{
if ((this->clockFreq == rhs.clockFreq) &&
(this->bitOrder == rhs.bitOrder) &&
(this->dataMode == rhs.dataMode)) {
return true;
}
return false;
}
bool operator!=(const SPISettings& rhs) const
{
return !(*this == rhs);
}
uint32_t getClockFreq() const {return clockFreq;}
uint8_t getDataMode() const {return (uint8_t)dataMode;}
BitOrder getBitOrder() const {return (bitOrder == MSB_FIRST ? MSBFIRST : LSBFIRST);}
private:
void init_MightInline(uint32_t clock, BitOrder bitOrder, uint8_t dataMode) {
init_AlwaysInline(clock, bitOrder, dataMode);
@ -108,6 +127,8 @@ class SPISettings {
friend class SPIClass;
};
const SPISettings DEFAULT_SPI_SETTINGS = SPISettings();
class SPIClass {
public:
SPIClass(SERCOM *p_sercom, uint8_t uc_pinMISO, uint8_t uc_pinSCK, uint8_t uc_pinMOSI, SercomSpiTXPad, SercomRXPad);
@ -162,6 +183,8 @@ class SPIClass {
SercomSpiTXPad _padTx;
SercomRXPad _padRx;
SPISettings settings;
bool initialized;
uint8_t interruptMode;
char interruptSave;

View file

@ -63,9 +63,11 @@ void loop() {
void digitalPotWrite(int address, int value) {
// take the SS pin low to select the chip:
digitalWrite(slaveSelectPin, LOW);
delay(100);
// send in the address and value via SPI:
SPI.transfer(address);
SPI.transfer(value);
delay(100);
// take the SS pin high to de-select the chip:
digitalWrite(slaveSelectPin, HIGH);
}

View file

@ -78,8 +78,9 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
// Read first data
rxBuffer.store_char(sercom->readDataWIRE());
bool busOwner;
// Connected to slave
for (byteRead = 1; byteRead < quantity; ++byteRead)
for (byteRead = 1; byteRead < quantity && (busOwner = sercom->isBusOwnerWIRE()); ++byteRead)
{
sercom->prepareAckBitWIRE(); // Prepare Acknowledge
sercom->prepareCommandBitsWire(WIRE_MASTER_ACT_READ); // Prepare the ACK command for the slave
@ -88,9 +89,14 @@ uint8_t TwoWire::requestFrom(uint8_t address, size_t quantity, bool stopBit)
sercom->prepareNackBitWIRE(); // Prepare NACK to stop slave transmission
//sercom->readDataWIRE(); // Clear data register to send NACK
if (stopBit)
if (stopBit && busOwner)
{
sercom->prepareCommandBitsWire(WIRE_MASTER_ACT_STOP); // Send Stop
sercom->prepareCommandBitsWire(WIRE_MASTER_ACT_STOP); // Send Stop unless arbitration was lost
}
if (!busOwner)
{
byteRead--; // because last read byte was garbage/invalid
}
}

View file

@ -20,7 +20,7 @@
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
name=Adafruit SAMD (32-bits ARM Cortex-M0+ and Cortex-M4) Boards
version=1.5.4
version=1.6.0
# Compile variables
# -----------------
@ -28,10 +28,10 @@ version=1.5.4
compiler.warning_flags=-w
compiler.warning_flags.none=-w
compiler.warning_flags.default=
compiler.warning_flags.more=-Wall
compiler.warning_flags.all=-Wall -Wextra
compiler.warning_flags.more=-Wall -Wno-expansion-to-defined
compiler.warning_flags.all=-Wall -Wextra -Wno-expansion-to-defined
compiler.path={runtime.tools.arm-none-eabi-gcc.path}/bin/
compiler.path={runtime.tools.arm-none-eabi-gcc-7-2017q4.path}/bin/
compiler.c.cmd=arm-none-eabi-gcc
compiler.c.flags=-mcpu={build.mcu} -mthumb -c -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 -MMD -D__SKETCH_NAME__="""{build.project_name}"""
compiler.c.elf.cmd=arm-none-eabi-gcc
@ -69,7 +69,9 @@ compiler.ar.extra_flags=
compiler.elf2hex.extra_flags=
compiler.arm.cmsis.c.flags="-I{runtime.tools.CMSIS-4.5.0.path}/CMSIS/Include/" "-I{runtime.tools.CMSIS-Atmel-1.2.0.path}/CMSIS/Device/ATMEL/"
compiler.arm.cmsis.ldflags="-L{runtime.tools.CMSIS-4.5.0.path}/CMSIS/Lib/GCC/" -larm_cortexM0l_math
compiler.arm.cmsis.ldflags="-L{runtime.tools.CMSIS-4.5.0.path}/CMSIS/Lib/GCC/" -larm_cortexM0l_math
compiler.libraries.ldflags=
# USB Flags
# ---------
@ -99,7 +101,7 @@ recipe.S.o.pattern="{compiler.path}{compiler.S.cmd}" {compiler.S.flags} -DF_CPU=
recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}"
## Combine gc-sections, archives, and objects
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" --specs=nano.specs --specs=nosys.specs {compiler.ldflags} -o "{build.path}/{build.project_name}.elf" {object_files} -Wl,--start-group {compiler.arm.cmsis.ldflags} "-L{build.variant.path}" -lm "{build.path}/{archive_file}" -Wl,--end-group
recipe.c.combine.pattern="{compiler.path}{compiler.c.elf.cmd}" "-L{build.path}" {compiler.c.elf.flags} {compiler.c.elf.extra_flags} "-T{build.variant.path}/{build.ldscript}" "-Wl,-Map,{build.path}/{build.project_name}.map" --specs=nano.specs --specs=nosys.specs {compiler.ldflags} -o "{build.path}/{build.project_name}.elf" {object_files} {compiler.libraries.ldflags} -Wl,--start-group {compiler.arm.cmsis.ldflags} -lm "{build.path}/{archive_file}" -Wl,--end-group
## Create output (bin file)
recipe.objcopy.bin.pattern="{compiler.path}{compiler.elf2hex.cmd}" {compiler.elf2hex.flags} {compiler.elf2hex.extra_flags} "{build.path}/{build.project_name}.elf" "{build.path}/{build.project_name}.bin"
@ -119,8 +121,7 @@ recipe.size.regex=\.text\s+([0-9]+).*
#
# BOSSA
#
tools.bossac.path={runtime.tools.bossac-1.7.0.path}
tools.bossac.path={runtime.tools.bossac-1.7.0-arduino3.path}
tools.bossac.cmd=bossac
tools.bossac.upload.params.verbose=-i -d
@ -145,21 +146,38 @@ tools.bossac18.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA
tools.bossac18.upload.network_pattern="{network_cmd}" -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -b
#
# BOSSA (ignore binary size)
#
tools.bossacI.path={runtime.tools.bossac-1.7.0-arduino3.path}
tools.bossacI.cmd=bossac
tools.bossacI.cmd.windows=bossac.exe
tools.bossacI.upload.params.verbose=-i -d
tools.bossacI.upload.params.quiet=
tools.bossacI.upload.pattern="{path}/{cmd}" {upload.verbose} --port={serial.port.file} -I -U {upload.native_usb} -i -e -w "{build.path}/{build.project_name}.bin" -R
tools.bossacI_remote.upload.pattern=/usr/bin/run-bossac {upload.verbose} --port=ttyATH0 -U {upload.native_usb} -e -w -v /tmp/sketch.bin -R
tools.bossacI.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA
tools.bossacI.upload.network_pattern="{network_cmd}" -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -b
#
# OpenOCD sketch upload
#
tools.openocd.path={runtime.tools.openocd.path}
tools.openocd.path={runtime.tools.openocd-0.10.0-arduino7.path}
tools.openocd.cmd=bin/openocd
tools.openocd.cmd.windows=bin/openocd.exe
tools.openocd.upload.params.verbose=-d2
tools.openocd.upload.params.quiet=-d0
tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.bin}} verify reset 0x00002000; shutdown"
tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{build.path}/{build.project_name}.bin} verify reset 0x2000; shutdown"
tools.openocd.program.params.verbose=-d2
tools.openocd.program.params.quiet=-d0
tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown"
tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{build.path}/{build.project_name}.elf} verify reset; shutdown"
tools.openocd.erase.params.verbose=-d3
tools.openocd.erase.params.quiet=-d0
@ -169,23 +187,18 @@ tools.openocd.bootloader.params.verbose=-d3
tools.openocd.bootloader.params.quiet=-d0
tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f interface/{program.protocol}.cfg -c "{program.setup_command}" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown"
#
# OpenOCD sketch upload - version with configurable bootloader size
# FIXME: this programmer is a workaround for default options being overwritten by uploadUsingPreferences
#
tools.openocd-withbootsize.path={runtime.tools.openocd-0.9.0-arduino.path}
tools.openocd-withbootsize.path={runtime.tools.openocd-0.10.0-arduino7.path}
tools.openocd-withbootsize.cmd=bin/openocd
tools.openocd-withbootsize.cmd.windows=bin/openocd.exe
tools.openocd-withbootsize.upload.params.verbose=-d2
tools.openocd-withbootsize.upload.params.quiet=-d0
tools.openocd-withbootsize.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.bin}} verify reset {bootloader.size}; shutdown"
tools.openocd-withbootsize.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{build.path}/{build.project_name}.bin} verify reset {bootloader.size}; shutdown"
# Program flashes the binary at 0x0000, so use the linker script without_bootloader
tools.openocd-withbootsize.program.params.verbose=-d2
tools.openocd-withbootsize.program.params.quiet=-d0
tools.openocd-withbootsize.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown"
tools.openocd-withbootsize.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{build.path}/{build.project_name}.elf} verify reset; shutdown"
tools.openocd-withbootsize.erase.params.verbose=-d3
tools.openocd-withbootsize.erase.params.quiet=-d0
@ -193,4 +206,4 @@ tools.openocd-withbootsize.erase.pattern=
tools.openocd-withbootsize.bootloader.params.verbose=-d2
tools.openocd-withbootsize.bootloader.params.quiet=-d0
tools.openocd-withbootsize.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown"
tools.openocd-withbootsize.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd bootloader 0; program {{runtime.platform.path}/bootloaders/{bootloader.file}} verify reset; shutdown"

View file

@ -22,7 +22,7 @@ if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
) ELSE IF "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
drivers\dpinst-amd64.exe /PATH %cd%\drivers\prewin10 %ARGS%
) ELSE (
drivers/dpinst-x86.exe /PATH %cd%\drivers\prewin10 %ARGS%
drivers\dpinst-x86.exe /PATH %cd%\drivers\prewin10 %ARGS%
)
exit /b 0

View file

@ -194,6 +194,12 @@ const PinDescription g_APinDescription[]=
{ PORTA, 2, PIO_ANALOG, PIN_ATTR_ANALOG, DAC_Channel0, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // DAC/VOUT
} ;
extern "C" {
unsigned int PINCOUNT_fn() {
return (sizeof(g_APinDescription) / sizeof(g_APinDescription[0]));
}
}
const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ;
// Multi-serial objects instantiation

View file

@ -53,7 +53,10 @@ extern "C"
*----------------------------------------------------------------------------*/
// Number of pins defined in PinDescription array
#define PINS_COUNT (34u)
#ifdef __cplusplus
extern "C" unsigned int PINCOUNT_fn();
#endif
#define PINS_COUNT (PINCOUNT_fn())
#define NUM_DIGITAL_PINS (19u)
#define NUM_ANALOG_INPUTS (5u)
#define NUM_ANALOG_OUTPUTS (1u)
@ -184,6 +187,14 @@ extern Uart Serial1;
#endif
#ifdef __cplusplus
extern "C" {
#endif
unsigned int PINCOUNT_fn();
#ifdef __cplusplus
}
#endif
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,

View file

@ -203,6 +203,12 @@ const PinDescription g_APinDescription[]=
{ PORTA, 31, PIO_PWM, PIN_ATTR_DIGITAL|PIO_SERCOM, No_ADC_Channel, NOT_ON_PWM, TCC1_CH1, EXTERNAL_INT_11 }, // SWDIO
} ;
extern "C" {
unsigned int PINCOUNT_fn() {
return (sizeof(g_APinDescription) / sizeof(g_APinDescription[0]));
}
}
const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ;
// Multi-serial objects instantiation

View file

@ -30,7 +30,7 @@
#define VARIANT_MAINOSC (32768ul)
/** Master clock frequency */
#define VARIANT_MCK (F_CPU)
#define VARIANT_MCK (48000000ul)
/*----------------------------------------------------------------------------
* Headers
@ -53,9 +53,12 @@ extern "C"
*----------------------------------------------------------------------------*/
// Number of pins defined in PinDescription array
#define PINS_COUNT (26u)
#define NUM_DIGITAL_PINS (14u)
#define NUM_ANALOG_INPUTS (8u)
#ifdef __cplusplus
extern "C" unsigned int PINCOUNT_fn();
#endif
#define PINS_COUNT (PINCOUNT_fn())
#define NUM_DIGITAL_PINS (20u)
#define NUM_ANALOG_INPUTS (6u)
#define NUM_ANALOG_OUTPUTS (1u)
#define analogInputToDigitalPin(p) ((p < 6u) ? (p) + 14u : -1)
@ -94,8 +97,6 @@ extern "C"
#define PIN_A3 (17ul)
#define PIN_A4 (18ul)
#define PIN_A5 (19ul)
#define PIN_A6 (8ul)
#define PIN_A7 (9ul)
#define PIN_DAC0 (14ul)
static const uint8_t A0 = PIN_A0;
@ -104,8 +105,6 @@ static const uint8_t A2 = PIN_A2;
static const uint8_t A3 = PIN_A3;
static const uint8_t A4 = PIN_A4;
static const uint8_t A5 = PIN_A5;
static const uint8_t A6 = PIN_A6 ;
static const uint8_t A7 = PIN_A7 ;
static const uint8_t DAC0 = PIN_DAC0;
#define ADC_RESOLUTION 12
@ -197,11 +196,19 @@ extern SERCOM sercom3;
extern SERCOM sercom4;
extern SERCOM sercom5;
extern Uart Serial5;
extern Uart Serial;
extern Uart Serial1;
#endif
#ifdef __cplusplus
extern "C" {
#endif
unsigned int PINCOUNT_fn();
#ifdef __cplusplus
}
#endif
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
@ -217,7 +224,7 @@ extern Uart Serial1;
//
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
// pins are NOT connected to anything by default.
#define SERIAL_PORT_USBVIRTUAL Serial
#define SERIAL_PORT_USBVIRTUAL SerialUSB
#define SERIAL_PORT_MONITOR Serial
// Serial has no physical pins broken out, so it's not listed as HARDWARE port
#define SERIAL_PORT_HARDWARE Serial1

View file

@ -33,7 +33,7 @@ const PinDescription g_APinDescription[]=
// Digital Low
{ PORTB, 2, PIO_SERCOM_ALT, 0, ADC_Channel10, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_2 }, // GPIO D2 / A5 / SDA
{ PORTB, 3, PIO_SERCOM_ALT, PIN_ATTR_DIGITAL, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_3 }, // GPIO D3 / A4 / SCL
{ PORTA, 28, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE }, // GPIO D4 / Left Button
{ PORTA, 28, PIO_COM, PIN_ATTR_NONE, No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_8 }, // GPIO D4 / Left Button
{ PORTA, 14, PIO_DIGITAL, (PIN_ATTR_DIGITAL), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_14 }, // GPIO D5 / Right button
{ PORTA, 5, PIO_SERCOM_ALT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), ADC_Channel5, PWM0_CH1, TCC0_CH1, EXTERNAL_INT_5 }, // GPIO D6 / A1
{ PORTA, 15, PIO_TIMER, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM|PIN_ATTR_TIMER), No_ADC_Channel, PWM3_CH1, TC3_CH1, EXTERNAL_INT_15 }, // GPIO D7 / Slide Switch
@ -102,6 +102,12 @@ const PinDescription g_APinDescription[]=
} ;
extern "C" {
unsigned int PINCOUNT_fn() {
return (sizeof(g_APinDescription) / sizeof(g_APinDescription[0]));
}
}
const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ;
// Multi-serial objects instantiation

View file

@ -37,7 +37,10 @@
// ----
// Number of pins defined in PinDescription array
#define PINS_COUNT (39u)
#ifdef __cplusplus
extern "C" unsigned int PINCOUNT_fn();
#endif
#define PINS_COUNT (PINCOUNT_fn())
#define NUM_DIGITAL_PINS (39u)
#define NUM_ANALOG_INPUTS (11u)
#define NUM_ANALOG_OUTPUTS (1u)
@ -216,6 +219,13 @@ extern Uart Serial1;
#define PAD_SERIAL1_RX (SERCOM_RX_PAD_1)
#endif // __cplusplus
#ifdef __cplusplus
extern "C" {
#endif
unsigned int PINCOUNT_fn();
#ifdef __cplusplus
}
#endif
// These serial port names are intended to allow libraries and architecture-neutral

View file

@ -160,6 +160,12 @@ const PinDescription g_APinDescription[] = {
{ PORTA, 1, PIO_DIGITAL, (PIN_ATTR_NONE ), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
};
extern "C" {
unsigned int PINCOUNT_fn() {
return (sizeof(g_APinDescription) / sizeof(g_APinDescription[0]));
}
}
const void* g_apTCInstances[TCC_INST_NUM + TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 };
// Multi-serial objects instantiation

View file

@ -36,7 +36,10 @@
// ----
// Number of pins defined in PinDescription array
#define PINS_COUNT (26u)
#ifdef __cplusplus
extern "C" unsigned int PINCOUNT_fn();
#endif
#define PINS_COUNT (PINCOUNT_fn())
#define NUM_DIGITAL_PINS (22u)
#define NUM_ANALOG_INPUTS (7u)
#define NUM_ANALOG_OUTPUTS (1u)
@ -176,6 +179,14 @@ extern Uart Serial1;
#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3)
#endif // __cplusplus
#ifdef __cplusplus
extern "C" {
#endif
unsigned int PINCOUNT_fn();
#ifdef __cplusplus
}
#endif
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,

View file

@ -158,6 +158,12 @@ const PinDescription g_APinDescription[] = {
{ PORTA, 1, PIO_DIGITAL, (PIN_ATTR_NONE ), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
};
extern "C" {
unsigned int PINCOUNT_fn() {
return (sizeof(g_APinDescription) / sizeof(g_APinDescription[0]));
}
}
const void* g_apTCInstances[TCC_INST_NUM + TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 };
// Multi-serial objects instantiation

View file

@ -36,7 +36,10 @@
// ----
// Number of pins defined in PinDescription array
#define PINS_COUNT (26u)
#ifdef __cplusplus
extern "C" unsigned int PINCOUNT_fn();
#endif
#define PINS_COUNT (PINCOUNT_fn())
#define NUM_DIGITAL_PINS (15u)
#define NUM_ANALOG_INPUTS (7u)
#define NUM_ANALOG_OUTPUTS (1u)
@ -178,6 +181,14 @@ extern Uart Serial1;
#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3)
#endif // __cplusplus
#ifdef __cplusplus
extern "C" {
#endif
unsigned int PINCOUNT_fn();
#ifdef __cplusplus
}
#endif
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,

View file

@ -161,6 +161,12 @@ const PinDescription g_APinDescription[] = {
{ PORTA, 28, PIO_DIGITAL, (PIN_ATTR_NONE ), No_ADC_Channel, NOT_ON_PWM, NOT_ON_TIMER, EXTERNAL_INT_NONE },
};
extern "C" {
unsigned int PINCOUNT_fn() {
return (sizeof(g_APinDescription) / sizeof(g_APinDescription[0]));
}
}
const void* g_apTCInstances[TCC_INST_NUM + TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 };
// Multi-serial objects instantiation
@ -179,6 +185,22 @@ SERCOM sercom5(SERCOM5);
#define PMIC_REG01 0x01
#define PMIC_REG07 0x07
#define PMIC_REG00 0x00
static inline void set_voltage_current_thresholds() {
PERIPH_WIRE.initMasterWIRE(100000);
PERIPH_WIRE.enableWIRE();
pinPeripheral(PIN_WIRE_SDA, g_APinDescription[PIN_WIRE_SDA].ulPinType);
pinPeripheral(PIN_WIRE_SCL, g_APinDescription[PIN_WIRE_SCL].ulPinType);
PERIPH_WIRE.startTransmissionWIRE( PMIC_ADDRESS, WIRE_WRITE_FLAG );
PERIPH_WIRE.sendDataMasterWIRE(PMIC_REG00);
PERIPH_WIRE.sendDataMasterWIRE(0x06); // input voltage limit = 3.88V, input current limit = 2A
PERIPH_WIRE.prepareCommandBitsWire(WIRE_MASTER_ACT_STOP);
PERIPH_WIRE.disableWIRE();
}
static inline void enable_battery_charging() {
PERIPH_WIRE.initMasterWIRE(100000);
PERIPH_WIRE.enableWIRE();
@ -224,6 +246,7 @@ void initVariant() {
enable_battery_charging();
}
disable_battery_fet(!batteryPresent);
set_voltage_current_thresholds();
#endif
// put GSM modem in reset on start to conserve power if it's not used

Some files were not shown because too many files have changed in this diff Show more