Prep for v1.0.0
[hackover2013-badge-firmware.git] / ChangeLog.txt
1 v1.0.0 - Ongoing
2 ================
3 - *** Moved '/drivers/chibi' to '/drivers/rf/chibi' ***
4 - *** Moved '/drivers/sensors/pn532' to '/drivers/rf/pn532' ***
5 - *** Renamed '/drivers/spiflash' to '/drivers/storage/spiflash' ***
6 - *** Renamed '/drivers/eeprom' to '/drivers/storage/eeprom' ***
7 - *** Renamed '/drivers/lcd' to '/drivers/display' ***
8 - Moved all color conversion and manipulation functions
9 to '/drivers/displays/tft/colors.c', and added a
10 few new functions: colorsDim(), etc.
11 - Added code to render antialiased fonts, based on
12 lookup tables (fast) or alpha-blending (mixed color
13 backgrounds). Support for AA2 (2-bit) and AA4
14 (4-bit) anti-aliased fonts included. Alpha-blending
15 only possible on displays where pixels can be read
16 back.
17 - Added drawGradient() to drawing.c
18 - Removed height parameter from drawButton. It's now
19 calculated based on the font height, and centered.
20 - Added bell to CLI when backspace is pressed beyond
21 the starting position (cosmetic, but still useful)
22 - Removed dependency on /core/libc files in Crossworks
23 when redirecting printf (added printf replacement
24 to sysinit.c instead)
25 - Added basic AS1115 driver for segment displays
26 - Added driver for HX8340-B based LCDs
27 - Added flag to projectconfig.h to disable the default
28 GPIO IRQ Handler functions in code/gpio/gpio.c (in
29 case you want to make your own ISR elsewhere)
30 - Added driver for Samsung VFD displays from Adafruit
31 - Added ADC average sampling option to projectconfig.h.
32 This allows you to take several readings from the
33 ADC and return the average. Helps reduces peaks and
34 valleys in the ADC due to noisen but at the expense
35 of slower reads.
36 See: "tools/validation/adctest" for more info
37 - Added I2C driver for PN532
38 - Updated and added PN532 examples to
39 /tools/examples/sensors/PN532
40 - updated touchscreen.h to be a bit clearer during
41 calibration, though it can still be much better
42 organised
43 - Had to add "__asm volatile("nop");" after pin writes
44 in the ILI9328 driver since some LCDs couldn't
45 keep up with the high-speed writes with bit-banding
46 - Fixed I2C clock duty cycle registers
47 - Changed I2C buffer size from 32 to 64 bytes (i2c.h)
48 - Added CFG_BRD_LPC1343_OLIMEX_P to board selection
49 in projectconfig.h (courtesy PHK)
50 - Added SSD1331_COLORORDER_RGB flag to SSD1331.h to
51 select between RGB and BGR color order
52 - Added 128x32 support to ssd1306.c and rewrote
53 initialize sequence for 128x32 and 128x64 displays
54 - Added driver for Sharp Memory Display
55 /drivers/lcd/bitmap/sharpmem
56 - Added SPI Flash example
57 /tools/examples/spiflash/*
58 - Added write function to SPI Flash driver
59 /drivers/spiflash/*
60 - Added CFG_BRD_LPC1343_REFDESIGN_MINIMAL as a board
61 option in projectconfig.h. Tries to keep the flash
62 use as small as possible by initialising less
63 peripherals in systemInit().
64 - Changed CodeLite project files to support real
65 debugging with a Segger J-Link and GDB Server.
66 - Fixed issue with USB CDC instantiation for
67 FreeBSD (courtesy PHK)
68 - Added experimental SSD1351 OLED driver to
69 /drivers/lcd/tft/hw
70
71 v0.9.5 - 3 August 2011
72 ======================
73
74 - Redid the font rendering code to use DotFactory
75 generated fonts, and update to the latest binary
76 in the /tools folder. All fonts have been
77 re-rendered to accomodate the updated code.
78 - Updated clock values in cpu.c for PLL to match FCCO
79 range of 156-320MHz
80 - Changed SCB_PLLCTRL_MULT_* to SCB_PLLCTRL_MSEL_* in
81 lpc111x.h to match usermanual
82 - Changed SCB_PLLCTRL_DIV_* SCB_PLLCTRL_PSEL_* in
83 lpc111x.h to match usermanual
84 - Added inline version of key functions in ili9328.c,
85 which increases the code size ~1.3KB but more than
86 doubles the drawing speed for most drawing functions
87 by avoiding branch operations and pushing and popping
88 the stack multiple times. Inline methods can be
89 toggled with 'ILI9238_USE_INLINE_METHODS'.
90 - Fixed IOCON_SWDIO_PIO1_3_FUNC_CT32B1_MAT2 in lpc134x.h
91 - Added drawCornerFilled() to drawing.c and LCD CLI
92 - Fixed a nasty bug with 'gpioInterruptEvent' in the
93 gpioSetInterrupt function (core/gpio/gpio.c)
94 - Add drawTriangle() and drawTriangleFilled() to
95 drawing.c and LCD CLI
96 - Added cpuReset() to reset the board via AIRCR
97 - Removed text input dialogue from LCD CLI ('T') to
98 save a few KB. Command file still exists, just no
99 longer included in cmd_tbl.h by default.
100
101 v0.9.2 - 14 June 2011
102 =====================
103
104 - Added ISL12022M RTC Driver (/drivers/rtc/isl12022m)
105 - Fixed a bug drawing filled circles with lcdDrawVLine
106 - Added CLI command to toggle LCD backlight
107 - Added rounded rectangle command to CLI
108 - Added CFG_INTERFACE_DROPCR to projectconfig.h to
109 ignore CR (\r) characters in incoming data for
110 the CLI
111 - Added CFG_INTERFACE_SHORTERRORS to projectconfig.h
112 to only send short (1 char + new line) CLI error
113 messages rather than something verbose
114 - Added CFG_INTERFACE_CONFIRMREADY to projectconfig.h
115 to provide a character to indicate when a command
116 is complete in case the IRQ pin
117 (CFG_INTERFACE_ENABLEIRQ) can't be used
118 - Fixed a bug with reversed R and B bits when reading
119 a pixel from the LCD in CLI mode
120 - Added lcdDrawPixels() to lcd.h and the current lcd
121 drivers to render rows of raw lcd data much quicker
122 than addressing consecutive pixels individually.
123 Can be used with windowing in future for fast
124 animation, continuously writing raw pixels in a
125 32x32 pixel frame, etc.
126 - Fixed ili9328SetWindow() and ili9325SetWindow().
127 They can now be used for fast screen paints of
128 restricted areas of the screen, such as animations
129 where raw pixel data is constantly fed to the LCD.
130 - Fixed pixel overflow bugs in drawCircleFilled(). Any
131 pixels that exceed screen limits will now be dropped,
132 though at the expense of slightly slower code.
133 - Added drawLineDotted() to drawing.c to draw lines with
134 a fixed pattern of empty and solid pixels
135 - Added __resetBootloader() macro to lpc134x.h to
136 reset and enter the USB bootloader (LPC1343 Reference
137 Design Base Board only since this depends on the
138 existance of the RC combination on the ISP pin).
139 To reset and executre code normally, the watchdog
140 time can be used (see "core/wdt").
141 - Added AIRCR register to lpc134x.h (Application Interrupt
142 and Reset Control Register).
143 - Added drawIcon16() to drawing.c to render monochrome
144 16x16 pixel icons from a byte array.
145 - Added a handful of common 16x16 icon definitions in
146 /drivers/lcd/icons16.h ... adapted from Gentleface
147 Toolbar Icon Set. For license terms see
148 http://www.gentleface.com/free_icon_set.html
149 - Added a few basic RGB565 color schemes to colors.h and
150 an image file showing the colors in /tools/colors_h.png
151 - Updated alphanumeric dialogue form to use new buttons.
152 - Rewrote drawButton() to use rounded rectangle and
153 all colors are now passed in as parameters. Also
154 modified the button command in the CLI to match this.
155 - Rewrote drawProgressBar() to take advantage of the
156 new rounded rectangle function (below). Also
157 modified the progress bar command in the CLI to
158 allow more colors to be indicated when rendering.
159 - Added drawRectangleRounded() to drawing.c (filled
160 rectangle with configurable rounded corners).
161 - Added drawArrow() to drawing.c to make small rectangles
162 for left/right menu items, etc.
163 - Completely rewrote the touch screen calibration code to
164 be much more accurate.
165
166 v0.9.0 - 28 March 2011
167 ======================
168
169 - Calibration process no longer starts automatically when
170 calibration data is not found in EEPROM. tsCalibrate()
171 now needs to called manually or from the CLI.
172 - Fixed a bug in cmd_tswait.c when no delay was passed.
173 - Added CLI command to set touch screen threshold
174 to register a touch event (since this can vary from
175 screen to screen). Type 'x' at the CLI to get/set
176 the value. The setting is persisted to EEPROM, and if
177 no value is found on EEPROM CFG_TFTLCD_TS_DEFAULTTHRESHOLD
178 from projectconfig.h is used.
179 - Adjusted touch screen code to check ADC values twice
180 and compare. If mismatch occurs, and error is returned.
181 This provides far more consistent TS values at the
182 expense of having to check the error results. See
183 'alphanumeric.c' for an example of doing this
184 correctly.
185 - Added seperate driver for ILI9328 based displays, even
186 though it seems to be identical to the ILI9325. Files
187 were seperated in case the initialisation needs to be
188 tweeked later or if incompatibilities are found.
189 - Added the ability to write the contents of the LCD
190 to a bitmap image, though it's very slow reading data
191 pixel by pixel and converting it to 24-bit RGB values.
192 Performance can definately be improved.
193 - Added 'drawRGB565toBGRA32' to drawing.c to convert
194 RGB565 colors back to the canonical BGRA32 format
195 - Added gain controls to TSL2561 driver to increase or
196 decrease sensitivity. Should be easy to implement
197 auto-gain functionality now.
198 - Changed USB VID to a valid value. Source files and
199 lpc134x-vcom.inf updated accordingly.
200 - Moved USB VID and PID to projectconfig.h
201 - Added '-mcpu' flag to the linker in Makefile (the wrong
202 libm was being linked because of this).
203
204 WARNING
205 --------------------------------------------------------
206 - Some config settings in EEPROM were relocated in v0.90+
207 of the LPC1343 Code Base to take into account the new
208 touch screen calibration code. See projectconfig.h
209 for more details of the new EEPROM layout.
210
211 v0.8.6 - 21 March 2011
212 ======================
213
214 - Added DWT section to LPC134x.h (see Cortex-M3
215 Technical Reference Manual section 8.3)
216 - Added CPU_RESET_CYCLECOUNTER to cpu.c to do rough
217 in-code performance checks (counts CPU cycles)
218 - Added '-lm' to linker in Makefile for math.c support
219 - Increased MAX_STRING_SIZE from 100 to 255 in stdio.c
220 - Added driver for the TCS3414 RGB color sensor
221 - Added driver for the TSL2561 digital light sensor
222 - Added CFG_USBCDC_BUFFERSIZE to projectconfig.h
223 instead of cdc_buf.h.
224 - Added a PWM example using a piezo buzzer (see
225 'tools/examples/basics/pwm_piezobuzzer' for details)
226 - Added ctype.c to 'core/libc'
227 - Changed Crossworks project to use libc files from
228 'core/libc' and modified the USB CDC printf to be
229 much faster by redirecting inside 'puts' rather than
230 '__putchar' (see 'sysinit.c').
231 - Fixed a bug in LPC134x.h ... USB_CMDCODE write and read
232 masks were reversed
233 - Added a simple example of reading the card ID from an
234 ISO14443A (Mifare Classic, etc.) card using the PN532
235 ('/tools/examples/sensors/pn532/ISO14443A_ID').
236 - Added an 'lcd' folder to 'tools/examples' showing how to use
237 the generic lcd drawing routines, the touch-screen, etc.
238 - Rewrote part of the touch screen calibration code to get more
239 accurate results. Each point is now tested twice and the
240 results are averaged. Values beyond a certain limit are also
241 rejected to ignore wacky readings.
242 - Added a preliminary PN532 (NFC/RFID) driver. Currently UART
243 only, and only allows simple commands to be sent and received.
244 By default, all data is fed out to the console via printf.
245 Will be elaborated and expanded in future releases.
246 - Cleaned up the ILI9325 TFT LCD driver a bit, adding a proper
247 enum for the commands, etc.
248
249
250 v0.8.5 - 7 March 2011
251 =====================
252
253 - Fixed a problem with GDB script when deploying firmware
254 with Segger J-Link in CodeLite. Code will now deploy
255 and start executing properly when F5 is pressed (assuming
256 the Segger GDB Server software is running in the background).
257 - Interrupts are now disabled while feeding the watchdog as per
258 a warning in the usermanual.
259 - Changed fonts for TTF LCDs. DejaVu Sans 9 is now used by default
260 in the LPC1343 Code Base. The following open source fonts have
261 been converted using The Dot Factory (see '/tools/dotfactory') and
262 can be found in '/drivers/lcd/tft/fonts':
263
264 FONT NAME WIDTH
265 ------------------------------- ----------
266 - Bitstream Vera Mono 9 Fixed (8)
267 - Bitstream Vera Mono 9 Bold Fixed (8)
268 - Bitstream Vera Mono 11 Fixed (9)
269 - Bitstream Vera Mono 11 Bold Fixed (9)
270 - DejaVu Sans 9 Variable
271 - DejaVu Sans 9 Bold Variable
272 - DejaVu Sans Condensed 9 Variable
273 - DejaVu Sans Mono 8 Fixed (8)
274 - DejaVu Sans Mono 8 Bold Fixed (8)
275
276 - Modified projectconfig.h to select the target board and configure
277 the project accordingly. This isn't ideal, but it's a lot more
278 maintainable than have a seperate code base for every board since
279 they share 95% of the same code.
280 - Modified WDT code to use the WDT oscillator (rather than the
281 external crystal)
282 - Fixed a bug when waking up from sleep in Chibi. Removed systick
283 delay when toggling reset and slptr pins since this was causing
284 a blocking condition with the wakeup ISR.
285 - Added an example of how to retrieve the MCU's unique
286 128-bit serial number using IAP (core/iap)
287 - Added an option to projectconfig.h to select which pin to use for
288 SCK on SSP0, since the QFN33 package doesn't have all the same
289 pins.
290 - Updated Chibi to v0.91 (adds sleep method and promiscuous mode to allow
291 Chibi to act as an 802.15.4 packet sniffer, etc.).
292 - Added lcdProperties_t to lcd.h to indicate the properties of different
293 LCDs (to determine if there is a touch screen present, whether the
294 screen orientation can be changed, etc.)
295 - Added basic ST7735 LCD driver (128x160 pixel TFT LCD using 6-pin
296 SPI-esque interface). Work in progress (no orientation support, etc.).
297 - Added some simple examples in the 'tools/examples' folder.
298
299 v0.80 - 27 Jan 2011
300 ===================
301
302 - Added optimised lcdDrawVLine using orientation
303 though this should only be used on lines
304 greate than 20 pixels or so to see any real
305 advantage
306 - Added cmd_uart to allow the HW UART speed
307 to be set in EEPROM (between 9600 and
308 115200). Use the 'U' command.
309 - Updated Crossworks projects files to use
310 custom printf in 'core/libc' (gains about
311 1.3KB in release mode)
312 - Added driver for SSD1306 OLED displays
313 to '/drivers/bitmap/ssd1306'
314 - Changed commands in the CLI to single
315 characters and shortened descriptions
316 to save flash space (~0.7KB)
317 - Updated ILI9325 to allow the screen
318 orientation to be changed to portrait
319 of landscape mode.
320 - Added cmd_orientation to change the LCD
321 orientation from the CLI
322 - Fixed a bug in the PMU Wakeup interrupt
323 handler
324 - Added a circular buffer for outgoing CDC
325 data (cdc_buf.c) since you can only feed one
326 frame per ms (max 64 bytes). The speed needs
327 to be improved finding the right balance
328 between caching data and sending it to the EP,
329 but this should avoid any dropped characters.
330 More testing will be needed to improve this.
331 - Fixed a bug with the USB CDC buffer
332 - Added SILENTMODE to the CLI to disable the
333 command prompt and echo of input characters
334 (see CFG_INTERFACE_SILENTMODE). Useful
335 when another MCU is use the CLI rather than
336 a human.
337 - Added IRQ pin to the CLI to indicate when a
338 command is being processed (pin = low) and
339 when it has completed or a new command can
340 be processed (pin = high).
341 - Added 'cmd_tswait' to wait for a touch event
342 - Removed 'drivers/nfc/pn532' until proper drivers
343 can be written
344 - Added 'cmd_text' and 'cmd_textw' to the CLI to
345 render text on the LCD and get the width in
346 pixels of the specified text before rendering.
347
348 v0.70 - 18 Dec 2010
349 ===================
350
351 - Added 'calibrate' and 'gettext' commands to the CLI
352 - Added a dialogue box for the TFT LCD/Touchscreen
353 to input alpha-numeric data and return the
354 results as a string ('drivers/lcd/tft/dialogues/*')
355 - Added touch screen calibration code and UI
356 ('drivers/lcd/tft/touchscreen.c')
357 - Fixed a bug in ILI9325.c to make sure that the LCD
358 is reset during initialisation
359 - ** IMPORTANT ** Changed 'core/i2c/*' to fix a number
360 of bugs (thanks Rob65!) ... though this means all
361 i2c peripherals and drivers will need to be tested.
362 - Added 'colorscheme_t' to drawing.h to try to use a
363 standard color palette across GUI controls and make
364 it easy to change later. Currently only the button
365 and progress bar make use of this.
366 - Added 'lcdBacklightOn()' and 'lcdBacklightOff()' to
367 lcd.h
368 - Added 'CFG_TFTLCD_TS_THRESHOLD' to projectconfig.h
369 to configure touch-screen sensitivity when waiting
370 for a touch event
371 - Modified 'core/gpio/gpio.c' to reduce the compiled code
372 size. Repetitive switches where only the registers
373 change were modified to use temporary registers and
374 execute the code only once.
375 - Added the source and binaries for TheDotFactory to
376 'tools/dotfactory' for convenience sake. See:
377 http://www.pavius.net/downloads/tools/53-the-dot-factory
378 - Removed 'drivers/lcd/tft/tscalibration.c' and moved
379 the relevant code to touchscreen.c
380 - Removed the imgconv tool from 'tools/imgconv' (see
381 point below for more information)
382 - Removed the previous custom image code and replaced
383 it with 24-bit Windows bitmap files. This is a bit
384 slower (since 24-bit data needs to be converted to
385 RGB565 for each pixel and rows are rendered bottom
386 up making pixel drawing harder to optimise) but
387 converting and eventually saving images is easier.
388 The current code is functional but needs to be
389 heavily optimised.
390 - Made some minor optimisations to the data and cmd
391 functions in the ILI9325 driver. Other functions
392 need to be optimised as well, but these two should
393 be close to optimal now. Currently 25 cycles
394 compiled with -Os, 36 cycles with no optimisation.
395 - Added 'projects/command/drawing/cmd_bmp.c' to load
396 24-bit Windows bitmap images from the SD card and
397 display them on the TFT LCD.
398 - Added some schematics to '/tools/schematics' to
399 show the assumed pin configurations
400
401 v0.60 - 8 December 2010
402 =======================
403
404 - Added a number of CLI commands for the TFT LCD
405 (see 'project/commands/drawing')
406 - Modified FCLK_FAST() in 'drivers/fatfs/mmc.c' to set
407 the max speed to 6.0MHz for improved reliability.
408 Tested with a 4GB microSD card, 300KB/s can be read
409 using a 512 byte read buffer.
410 - Modified Chibi to use 16-bit timer 0 for us delays
411 (more accurate)
412 - Added a number of commands to
413 '/projects/commands/drawing' for basic TFT LCD
414 operations. Removed 'lcd-test.c' and 'lcd-fill.c'.
415 - Added a flag to projectconfig.h to make FATFS read-only
416 (to save a couple KB when space is tight).
417 - Moved 'project/eeprom.*' to 'drivers/eeprom' to add a
418 level of abstraction to eeprom access throughout the code
419 - Added a table to projectconfig.h to manage eeprom
420 addresses. First 256 byte of eeprom should be reserved
421 for this.
422 - Added 'drivers/lcd/tft/colors.h' to keep all common
423 16-bit RGB565 color definitions in one location
424 - Added some sample images to 'tools/imgconv' that can
425 be used to render a basic clock on a TFT LCD screen
426 (using drawImageFromFile in 'drivers/lcd/tft/drawing.c')
427 - Modified the makefile to automatically run './lpcrc'
428 post-build
429 - Added drawButton() to 'drivers/lcd/tft/drawing.c'
430 - Updated 'drivers/lcd/tft/touchscreen.c' to do basic
431 debouncing. tsReadZ() was added to detect pressure on
432 the touch screen, and tsWaitForEvent() will only exit
433 when the pressure passes a minimum threshold. (Thanks
434 to Limor for pointing out some code by Rossum for this.)
435 - Fixed some off-by-one pixel errors in cmd-test and
436 elsewhere
437
438 v0.51 - 27 November 2010
439 ========================
440
441 - Added simple RSA encryption/decryption driver. Currently limited to
442 using 64-bit and 32-bit numbers in key pairs, which isn't terribly secure,
443 but allows much smaller code size than if huge number support was included.
444 - Added a driver for the MCP4725 I2C DAC (see "drivers/dac/mcp4725").
445 - Moved 'rom_drivers.h' from 'core/usbhid-rom' to 'core' since it can be used
446 for usbmsd-rom as well if it is implemented at a later date.
447 - ili9325ReadData() added to ili9325.c by Adafruit Industries (thanks!)
448 - Modified FCLK_FAST() in 'drivers/fatfs/mmc.c' to set fast SPI speed
449 to 18MHz instead of the previous 4MHz. This allows for slightly faster
450 rendering of bitmap images from SD cards, amongst other things.
451 - Fixed ILI9325 driver to use 0,0 based pixels and not 1x1, meaning the
452 pixel co-ordinates are 0..239 for X and 0..319 for Y. There may still be
453 some off-by-one pixel issues that need to be further tested.
454
455 v0.50 - 26 October 2010
456 =======================
457
458 - Moved command.c and cmd_tbl.h to /project to try to keep all
459 project-specific files in one location to improve code-sharing and make
460 upgrading easier
461 - Created seperate .c files for every command for the command-line interface
462 to make it easier to maintain and share code between projects. All commands
463 listed in cmd_tbl.h are now stored in their own files in /project/commands
464 (ex.: "/project/commands/cmd_hello.c", etc.)
465 - Added a CLI command to demonstrate how to draw to the ILI9325 TFT LCD
466 - Added a CLI command to show the contents of any directory from the SD card
467 (/project/commmands/cmd_sd_dir.c)
468 - Added a CLI command showing how to enter deep-sleep and exit with a SW
469 wakeup (/project/commands/cmd_deepsleep.c). Please note that the wakeup
470 will not work if you are using USB for the CLI. To see the wakeup message,
471 you must use UART for the CLI, which is selected by uncommenting
472 CFG_PRINTF_UART in projectconfig.h
473 - Fixed pmu.c to set the core clock back to an appropriate state after wakeup
474 - Added simple wrapper for eeprom access (projects/eeprom.c)
475 - Reorganised drivers/lcd to take into account non TFT LCD displays.
476 - Added a preliminary (experimental) driver for 128x64 pixel ST7565-based
477 bitmap LCDs (ex: Adafruit Industries - http://bit.ly/9xj5vw) ... based on a
478 driver from Limor Fried at Adafruit
479 - Numerous bug fixes added by Roel Verdult (Linux compatibility, GCC warnings, etc.)
480 - Added stub files for PN532 driver (/drivers/nfc/pn532), and added CFG_PN532 to
481 projectconfig.h as an option
482 - Added a simple pwm example using 16-bit timer 1 and p1.9 (MAT0) for the output. PWM can be used
483 to drive stepper motors, or to dim LEDs by adjusting the duty-cycle, etc. The example can be
484 found in "/core/pwm"
485 - Added a bi-polar stepper motor driver based on the Arduino library. Basic position data was added
486 to detece deviation from the 'Home' position and to retrieve the spindle's current angle. See
487 "drivers/motor/stepper" for more information.
488 - Added test firmware for the UART and USBCDC CLI (tools/testfirmware)
489 - Added a table to projectconfig.h to try to keep track of pin and peripherals
490 usage by drivers and the included SW examples.
491 - Reorganised some pins used by drivers to avoid pin conflicts.
492 - Modified core/timer16/timer16.c to allow PWM output to be stopped after a
493 certain number of pulses have been sent out.
494
495 KNOWN ISSUES
496
497 - The SPI code needs to be modified to allow several SPI devices to be safely
498 connected on the same bus. At present, this has not been tested since the
499 SSP/SPI blocks are used exclusively in the current drivers.
500
This page took 0.065596 seconds and 5 git commands to generate.