Skip to content

Instantly share code, notes, and snippets.

@rustyoz
Created April 30, 2012 06:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rustyoz/2556072 to your computer and use it in GitHub Desktop.
Save rustyoz/2556072 to your computer and use it in GitHub Desktop.
A compression algorithm
set a, text_uncompressed
set b, compress_to_here
JSR compress
SET A, compress_to_here
add b, 1
jsr decompress
sub pc, 1
;compress
;takes A as string start
;takes B as compressed data stream start.
;returns A as data streem length.
;returns B compressed data stream end.
; X - string pointer
; Y - data stream pointer
; I - nibble offset
; J - character offset
; Z - word buffer buffer
:compress
SET PUSH, X
SET PUSH, Y
SET PUSH, I
SET PUSH, J
SET PUSH, Z
SET PUSH, B
SET X, A ; set
SET Y, B
SET I, 0 ; clear registers
SET J, 0
SET Z, 0
:compress_loop
SET A, [X]
IFE A, 0 ; null character end compression
SET PC, compress_end
SET A, [compress_table+A]
SET PUSH, A
AND A, 0xf000
SHR A, 12
IFN A, J
JSR compress_charoffset
SET A, POP
AND A, 0x000f
SHL A, I ; shift by nibble offset
BOR Z, A ; add nibble to word buffer
ADD X, 1 ; we have finished passing a character from the string, so increment string pointer
ADD I, 0x4
IFN I, 0x10
SET PC, compress_loop
SET [Y], Z ; we have filled a word with compressed data, so write it.
SET Z, 0 ; clear word buffer
ADD Y, 1
SET I, 0x0 ; reset nibble offset back to 0
SET PC, compress_loop
:compress_charoffset
SET B, 0xf
SHL B, I ; shift by nibble offset
BOR Z, B ; add to word buffer
ADD I, 0x4 ; shift nibble offset
IFN I, 0x10
SET PC, compress_charoffset1 ; if nibble offset is not 16bits continue to write new dictionary value to stream
SET [Y], Z ; if nibble offset is at 16bits word buffer is full, write word
SET I, 0x0 ;reset nibble offset
SET Z, 0 ;clear word buffer
ADD Y, 1 ; increment data stream pointer
:compress_charoffset1
SHL A, I ; shift by nibble offset
BOR Z, A ; add to word buffer
ADD I, 0x4 ; shift nibble offset
IFN I, 0x10
SET PC, POP ; if nibble offset is not 16bits continue on back to character passer
SET [Y], Z ; if nibble offset is at 16bits word buffer is full, write word
SET I, 0x0 ;reset nibble offset
SET Z, 0 ;clear word buffer
ADD Y, 1 ; increment data stream pointer
SET PC, POP
:compress_end
SET A, [compress_table+A] ;find null character
SET PUSH, A
AND A, 0xf000
SHR A, 12
IFN A, J
JSR compress_charoffset
SET A, POP
AND A, 0x000f
SHL A, I ; shift by nibble offset
BOR Z, A ; add nibble to word buffer
SET [Y], Z ; we have filled alast word with compressed data, so write it.
SET B, POP ; get back extraction start point
SET A, Y ; set a to end
SUB A, B ; sub start to get length
SET B, Y
SET Z, POP
SET J, POP
SET I, POP
SET Y, POP
SET X, POP
SET PC, POP
;decompress
;takes A as data stream start location
;takes B as extraction start location
;returns A as length of extracted string
;returns B as end of extrated string
:decompress
SET PUSH, X
SET PUSH, Y
SET PUSH, I
SET PUSH, J
SET PUSH, Z
SET PUSH, B
SET X, A ; set up pionters takes A as data stream pointer
SET Y, B ; takes b as extration start
SET I, 0 ; clear registers
SET J, 0
SET Z, 0
:decompress_loop
SET A, [X] ;set a to location word
SET B, 0xf ;
SHL B, I ; shift B by nibble offset
AND B, A ; extract nibble
SHR B, I ; shift B back
IFE B, 0xF
SET PC, decompress_charoffset
SET Z, J
ADD Z, B
SET Z, [Z]
IFE Z, 0 ; ascii esc found
SET PC, decompress_end ; end decompression
SET [Y], Z
ADD Y, 1 ; advance extraction pointer
ADD I, 0x4 ; move nibble offset
IFN I, 0x10
SET PC, decompress_loop
ADD X, 1 ;advance next word
SET I, 0 ; set nibble offset to 0
SET PC, decompress_loop
:decompress_charoffset
ADD I, 0x4
IFE I, 0x10
SET PC, decompress_charoffset_nw ; next word
SET B, 0xf ;
SHL B, I ; shift B by nibble offset
AND B, A ; extract nibble
SHR B, I ; shift B back
MUL B, 15 ; multiply offset by 15
ADD B, decompress_table
SET J, B ; set charoffset
ADD I, 0x4
IFN I, 0x10
SET PC, decompress_loop
ADD X, 1 ;advance next word
SET I, 0 ; set nibble offset to 0
SET PC, decompress_loop
:decompress_charoffset_nw
ADD X, 1 ; advance to next word
SET I, 0 ; set nibble offset
SET A, [X] ;set a to location word
SET B, 0xf ;
AND B, A ; extract nibble
MUL B, 15 ; multiply offset by 15
ADD B, decompress_table
SET J, B ; set charoffset
SET I, 0x4
SET PC, decompress_loop
:decompress_end
SET [Y], 0 ; add null pointer to end of text.
SET B, POP ; get original extration point
SUB Y, B ; get length
SET A, Y ;return length
ADD B, A
SET Z, POP
SET J, POP
SET I, POP
SET Y, POP
SET X, POP
SET PC, POP
:compress_table
dat 0x7000
dat 0x7001
dat 0x7002
dat 0x7003
dat 0x7004
dat 0x7005
dat 0x7006
dat 0x7007
dat 0x7008
dat 0x500E
dat 0x7009
dat 0x700A
dat 0x700B
dat 0x700C
dat 0x700D
dat 0x700E
dat 0x8000
dat 0x8001
dat 0x8002
dat 0x8003
dat 0x8004
dat 0x8005
dat 0x8006
dat 0x6008
dat 0x8007
dat 0x8008
dat 0x8009
dat 0x800A
dat 0x800B
dat 0x800C
dat 0x800D
dat 0x800E
dat 0x0000
dat 0x500D
dat 0x200D
dat 0x5007
dat 0x5000
dat 0x5008
dat 0x5005
dat 0x200C
dat 0x3001
dat 0x3000
dat 0x400D
dat 0x5006
dat 0x1009
dat 0x1003
dat 0x1002
dat 0x300A
dat 0x100C
dat 0x100D
dat 0x2004
dat 0x3006
dat 0x300E
dat 0x3009
dat 0x4004
dat 0x4006
dat 0x4005
dat 0x4007
dat 0x100E
dat 0x4002
dat 0x4001
dat 0x5004
dat 0x4000
dat 0x300B
dat 0x500C
dat 0x2007
dat 0x3002
dat 0x2001
dat 0x2006
dat 0x2008
dat 0x300D
dat 0x3005
dat 0x200E
dat 0x2005
dat 0x3008
dat 0x400C
dat 0x300C
dat 0x2002
dat 0x3003
dat 0x3007
dat 0x2009
dat 0x5002
dat 0x200B
dat 0x2000
dat 0x2003
dat 0x400A
dat 0x4008
dat 0x200A
dat 0x5001
dat 0x5003
dat 0x500B
dat 0x500A
dat 0x6002
dat 0x5009
dat 0x6006
dat 0x4003
dat 0x6004
dat 0x0004
dat 0x1007
dat 0x000C
dat 0x000B
dat 0x0001
dat 0x1004
dat 0x1000
dat 0x000A
dat 0x0006
dat 0x4009
dat 0x100A
dat 0x0009
dat 0x000E
dat 0x0005
dat 0x0003
dat 0x1001
dat 0x400B
dat 0x0008
dat 0x0007
dat 0x0002
dat 0x000D
dat 0x1008
dat 0x1005
dat 0x3004
dat 0x1006
dat 0x400E
dat 0x6000
dat 0x6005
dat 0x6001
dat 0x6007
dat 0x9000
dat 0x9001
dat 0x9002
dat 0x9003
dat 0x6009
dat 0x9004
dat 0x9005
dat 0x9006
dat 0x9007
dat 0x9008
dat 0x9009
dat 0x900A
dat 0x900B
dat 0x900C
dat 0x900D
dat 0x900E
dat 0xA000
dat 0xA001
dat 0xA002
dat 0xA003
dat 0xA004
dat 0xA005
dat 0x100B
dat 0xA006
dat 0xA007
dat 0xA008
dat 0xA009
dat 0xA00A
dat 0xA00B
dat 0xA00C
dat 0xA00D
dat 0xA00E
dat 0xB000
dat 0xB001
dat 0xB002
dat 0xB003
dat 0xB004
dat 0xB005
dat 0xB006
dat 0xB007
dat 0xB008
dat 0xB009
dat 0xB00A
dat 0xB00B
dat 0xB00C
dat 0xB00D
dat 0xB00E
dat 0xC000
dat 0xC001
dat 0xC002
dat 0xC003
dat 0xC004
dat 0xC005
dat 0xC006
dat 0xC007
dat 0xC008
dat 0x6003
dat 0xC009
dat 0xC00A
dat 0xC00B
dat 0xC00C
dat 0xC00D
dat 0xC00E
dat 0xD000
dat 0xD001
dat 0xD004
dat 0xD005
dat 0xD006
dat 0xD007
dat 0xD008
dat 0xD009
dat 0xD00A
dat 0xD00B
dat 0xD00C
dat 0xD00D
dat 0xD00E
dat 0xE000
dat 0xE001
dat 0xE002
dat 0xE003
dat 0xE004
dat 0xE005
dat 0xE006
dat 0xE007
dat 0xE008
dat 0xE009
dat 0xE00A
dat 0xE00B
dat 0xD002
dat 0xE00C
dat 0xE00D
dat 0xE00E
dat 0xF000
dat 0xF001
dat 0xF002
dat 0xF003
dat 0x600A
dat 0xF004
dat 0xF005
dat 0x600B
dat 0xF006
dat 0xF007
dat 0x600C
dat 0x600D
dat 0xF008
dat 0xF009
dat 0xF00A
dat 0xF00B
dat 0xF00C
dat 0xF00D
dat 0x600E
dat 0xF00E
dat 0xD003
:decompress_table
dat 0x0020
dat 0x0065
dat 0x0074
dat 0x006F
dat 0x0061
dat 0x006E
dat 0x0069
dat 0x0073
dat 0x0072
dat 0x006C
dat 0x0068
dat 0x0064
dat 0x0063
dat 0x0075
dat 0x006D
dat 0x0067
dat 0x0070
dat 0x002E
dat 0x002D
dat 0x0066
dat 0x0077
dat 0x0079
dat 0x0062
dat 0x0076
dat 0x002C
dat 0x006B
dat 0x0095
dat 0x0030
dat 0x0031
dat 0x003A
dat 0x0053
dat 0x0043
dat 0x004D
dat 0x0054
dat 0x0032
dat 0x0049
dat 0x0044
dat 0x0041
dat 0x0045
dat 0x0050
dat 0x0057
dat 0x0052
dat 0x0027
dat 0x0022
dat 0x0048
dat 0x0029
dat 0x0028
dat 0x0042
dat 0x004E
dat 0x0078
dat 0x0047
dat 0x0033
dat 0x004F
dat 0x004A
dat 0x0035
dat 0x002F
dat 0x003F
dat 0x004C
dat 0x0046
dat 0x0034
dat 0x003E
dat 0x003C
dat 0x003B
dat 0x005F
dat 0x0036
dat 0x0038
dat 0x0037
dat 0x0039
dat 0x0056
dat 0x006A
dat 0x0055
dat 0x0071
dat 0x004B
dat 0x002A
dat 0x007A
dat 0x0024
dat 0x0058
dat 0x0051
dat 0x0059
dat 0x003D
dat 0x0026
dat 0x002B
dat 0x0023
dat 0x0025
dat 0x005D
dat 0x005B
dat 0x005A
dat 0x0040
dat 0x0021
dat 0x0009
dat 0x007B
dat 0x007D
dat 0x005C
dat 0x00B7
dat 0x0060
dat 0x007C
dat 0x005E
dat 0x007E
dat 0x0017
dat 0x0083
dat 0x00DF
dat 0x00E2
dat 0x00E5
dat 0x00E6
dat 0x00ED
dat 0x0000
dat 0x0001
dat 0x0002
dat 0x0003
dat 0x0004
dat 0x0005
dat 0x0006
dat 0x0007
dat 0x0008
dat 0x000A
dat 0x000B
dat 0x000C
dat 0x000D
dat 0x000E
dat 0x000F
dat 0x0010
dat 0x0011
dat 0x0012
dat 0x0013
dat 0x0014
dat 0x0015
dat 0x0016
dat 0x0018
dat 0x0019
dat 0x001A
dat 0x001B
dat 0x001C
dat 0x001D
dat 0x001E
dat 0x001F
dat 0x007F
dat 0x0080
dat 0x0081
dat 0x0082
dat 0x0084
dat 0x0085
dat 0x0086
dat 0x0087
dat 0x0088
dat 0x0089
dat 0x008A
dat 0x008B
dat 0x008C
dat 0x008D
dat 0x008E
dat 0x008F
dat 0x0090
dat 0x0091
dat 0x0092
dat 0x0093
dat 0x0094
dat 0x0096
dat 0x0097
dat 0x0098
dat 0x0099
dat 0x009A
dat 0x009B
dat 0x009C
dat 0x009D
dat 0x009E
dat 0x009F
dat 0x00A0
dat 0x00A1
dat 0x00A2
dat 0x00A3
dat 0x00A4
dat 0x00A5
dat 0x00A6
dat 0x00A7
dat 0x00A8
dat 0x00A9
dat 0x00AA
dat 0x00AB
dat 0x00AC
dat 0x00AD
dat 0x00AE
dat 0x00AF
dat 0x00B0
dat 0x00B1
dat 0x00B2
dat 0x00B3
dat 0x00B4
dat 0x00B5
dat 0x00B6
dat 0x00B8
dat 0x00B9
dat 0x00BA
dat 0x00BB
dat 0x00BC
dat 0x00BD
dat 0x00BE
dat 0x00BF
dat 0x00D7
dat 0x00F7
dat 0x00C0
dat 0x00C1
dat 0x00C2
dat 0x00C3
dat 0x00C4
dat 0x00C5
dat 0x00C6
dat 0x00C7
dat 0x00C8
dat 0x00C9
dat 0x00CA
dat 0x00CB
dat 0x00CC
dat 0x00CD
dat 0x00CE
dat 0x00CF
dat 0x00D0
dat 0x00D1
dat 0x00D2
dat 0x00D3
dat 0x00D4
dat 0x00D5
dat 0x00D6
dat 0x00D8
dat 0x00D9
dat 0x00DA
dat 0x00DB
dat 0x00DC
dat 0x00DD
dat 0x00DE
dat 0x00E0
dat 0x00E1
dat 0x00E3
dat 0x00E4
dat 0x00E7
dat 0x00E8
dat 0x00E9
dat 0x00EA
dat 0x00EB
dat 0x00EC
dat 0x00EE
:text_uncompressed
dat "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ultricies tortor eu leo sagittis id elementum mi vulputate. Vestibulum sit amet tortor tortor, sit amet molestie tellus. Pellentesque tellus est, suscipit eget posuere nec, dapibus porttitor nibh. Duis ac enim vel lectus faucibus tempus. Cras sem nisl, consectetur id malesuada non, congue sit amet elit. Proin tempus neque non augue faucibus vel egestas libero blandit. Pellentesque volutpat ullamcorper erat, adipiscing sodales metus viverra vel. Etiam aliquam faucibus dui, vitae laoreet purus lobortis nec. Vestibulum porta dictum pulvinar. Phasellus semper euismod est a faucibus. In libero diam, consequat at ornare quis, lacinia vitae nunc. Vivamus nec fringilla elit. Aliquam a lectus in lorem laoreet lacinia. Morbi quis pulvinar massa. Maecenas vehicula velit eget leo euismod pellentesque. Phasellus lobortis vehicula scelerisque. Nulla suscipit luctus porta. Pellentesque vestibulum, tellus nec egestas elementum, nulla erat ornare nibh, sit amet egestas nunc ante nec nunc. Pellentesque at risus erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris ullamcorper felis sed ante blandit blandit. Curabitur laoreet augue quis augue gravida ac tempus ligula convallis. Donec laoreet tortor et sem volutpat rutrum. Donec aliquam purus eget enim lacinia vitae euismod enim dictum. Nullam sem leo, feugiat nec dictum et, condimentum vel quam. Aenean venenatis augue eu tellus viverra imperdiet. Sed luctus, magna sed pellentesque tempus, odio sapien ultrices augue, et suscipit nisi erat a elit. Suspendisse est lectus, vehicula in sagittis ac, lacinia id massa. Pellentesque auctor, nunc imperdiet congue dictum, enim nulla placerat tortor, a molestie dolor purus nec quam. Ut eu rhoncus velit. Vestibulum neque mi, condimentum ut feugiat tincidunt, lobortis non orci. Maecenas consequat, felis sit amet facilisis commodo, arcu nisi ultrices urna, vel bibendum est ligula vel dui. Pellentesque quis adipiscing sapien. Donec adipiscing convallis ligula in dictum. Donec ac scelerisque nulla. In leo dui, imperdiet a porttitor ac, convallis id risus. Vivamus a ornare leo. Maecenas ligula augue, bibendum vitae dapibus sit amet, cursus vel diam. Pellentesque tempor, leo nec semper varius, ipsum velit pretium lorem, vitae malesuada enim libero sed dui. Maecenas tempus sem arcu. Proin sed diam in erat cursus accumsan. Ut aliquam, mauris et imperdiet volutpat, tortor lacus lobortis massa, at vehicula dui ante bibendum elit. Suspendisse a dui leo, quis interdum mi. Pellentesque augue est, dignissim nec vulputate ac, blandit mattis lectus. Proin imperdiet orci vitae velit accumsan tempor pharetra ante aliquet. Quisque mollis lectus nec arcu semper aliquet. Etiam vestibulum odio ullamcorper turpis dictum auctor. Ut sem dolor, elementum vitae ultricies in, aliquam eget ante. Sed quis euismod lorem. Aenean metus dui, dictum vel ultricies in, luctus a sem. Integer aliquam nibh a neque mattis et suscipit ante gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas rhoncus diam erat, id pellentesque elit. Fusce et nisl placerat urna mollis adipiscing. Donec congue orci massa, sed sollicitudin ante. Curabitur posuere nisl eu augue imperdiet iaculis. Nullam justo nunc, sagittis nec mattis at, cursus et libero. Duis at diam metus. Nullam elementum, dolor sit amet suscipit pulvinar, ante mi vestibulum purus, et porta risus tellus a metus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse potenti. Nulla et nunc est, vel pellentesque purus. Vestibulum mollis pretium metus vel blandit. Etiam eu risus mi, ut aliquet mauris. Aliquam lacinia, urna sit amet semper egestas, justo ante mollis arcu, vitae iaculis dui nibh vitae dolor. Praesent ac arcu metus, sit amet sagittis quam. Curabitur est magna, posuere sit amet congue pulvinar, lacinia in tellus. Morbi sed lacus quis sem tristique pulvinar eget eget ligula. Donec tellus odio, sagittis nec interdum et, aliquam quis arcu. Phasellus ac eleifend orci. In commodo venenatis tortor, ut tempus risus feugiat congue. Cras pharetra ligula vel dolor aliquet nec adipiscing eros pretium. Nam sollicitudin libero eget eros aliquet a adipiscing elit posuere. Nunc adipiscing ornare est quis bibendum. Proin at felis eros. Nunc mi ipsum, ullamcorper sit amet congue id, gravida nec mi. Fusce tincidunt ligula in massa posuere fringilla. Aliquam sagittis erat in dolor commodo viverra. In hac habitasse platea dictumst. Etiam quis nulla augue. Ut nulla ipsum, auctor ut luctus sed, euismod sed ligula. Donec aliquet, ipsum ut iaculis vestibulum, mi purus venenatis metus, id porttitor metus mauris et elit. Vestibulum id ante vitae dolor lacinia sodales. Vestibulum sit amet felis nulla, non hendrerit eros. Integer lectus enim, blandit non rhoncus accumsan, dignissim eu leo. Proin vel purus ac leo varius placerat. Nam aliquam, risus sed tristique tincidunt, quam nisl suscipit erat, vitae pulvinar nisi nibh quis justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce elementum tincidunt imperdiet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque congue dapibus magna, et tristique arcu accumsan eget. Proin tristique adipiscing metus, sed elementum nibh aliquet eget. Nullam ullamcorper ligula sed tortor condimentum in hendrerit nulla adipiscing. Sed erat enim, volutpat sit amet cursus et, ultricies placerat urna. Mauris eget tellus libero. Nam rhoncus dapibus purus in egestas. Duis turpis magna, mattis vitae iaculis nec, fermentum a risus. Pellentesque dapibus nunc ut dui bibendum vel egestas sem bibendum. Aenean aliquam ultrices eros, id pretium arcu consectetur et. Cras nec nulla a nisl malesuada dapibus. Phasellus porta sodales felis a hendrerit. Sed ut lorem vel massa consectetur laoreet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet est turpis. Sed vel dignissim nisi. Vestibulum ultrices facilisis quam sit amet vestibulum. Quisque congue tincidunt ipsum vel condimentum. Curabitur eleifend dictum rutrum. Donec aliquet condimentum dolor porttitor vestibulum. Curabitur mattis viverra velit vitae viverra. Maecenas est orci, varius non lobortis eget, vulputate a nulla. Pellentesque elementum tempus nibh sed placerat. Duis quis leo magna, nec tincidunt ante. Aliquam felis dui, elementum id adipiscing sed, fringilla eu eros. Proin quis urna ligula. Nulla sit amet erat sodales lectus ullamcorper vehicula eget quis enim. Mauris eu turpis sapien, quis sollicitudin turpis. Nulla ullamcorper dui id augue cursus vel adipiscing tortor volutpat. Pellentesque in sapien massa, ac luctus eros. Sed non augue in lectus bibendum eleifend nec eget nunc. Donec in nulla purus. Integer lacinia sagittis blandit. Nunc venenatis elementum velit, in ultricies turpis pretium eu. Morbi nec mi ut purus suscipit convallis ut id lorem. Nulla eu risus magna. Nunc consequat sagittis magna in pulvinar. Donec sodales pellentesque ullamcorper. Nulla rutrum hendrerit elementum. Vivamus lacus justo, pulvinar ut rutrum nec, imperdiet cursus purus. Ut consequat sagittis mi vel dapibus. Phasellus accumsan, enim nec ullamcorper congue, nunc mauris pulvinar erat, vel cursus arcu felis sit amet erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ac sapien sit amet leo gravida dapibus nec sed tellus. Cras velit mauris, varius non interdum id, eleifend ac libero. Vestibulum nisl elit, tincidunt quis mollis eget, vestibulum eget nunc. Duis eget odio urna, id venenatis neque. Suspendisse porta dui condimentum libero ultrices egestas. Sed pellentesque, eros vel varius malesuada, justo magna rutrum erat, at facilisis nunc massa sit amet sapien. Donec metus dolor, aliquet sit amet vulputate eu, porttitor nec lectus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur ornare commodo ipsum ut eleifend. Nam laoreet leo id sapien gravida pellentesque. Integer augue mi, adipiscing eget aliquet a, venenatis vel erat. Sed feugiat tincidunt turpis a luctus. Duis luctus ante et purus commodo blandit. Donec ac nunc quam. Donec sapien mauris, molestie sit amet condimentum non, tempor ac justo. Aliquam mollis leo in sem mollis interdum. Sed fermentum scelerisque odio, non rutrum magna vehicula interdum. Aenean sagittis, purus vitae auctor eleifend, nisl odio euismod odio, at suscipit tortor ante et leo. Phasellus venenatis lorem ac neque dignissim ultrices. Suspendisse blandit adipiscing tellus, id consectetur dolor auctor a. Vivamus sollicitudin sollicitudin risus, vitae vehicula nisl semper vel. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris aliquet vulputate leo quis molestie. Proin aliquet mollis mi, sed tincidunt quam malesuada sit amet. Quisque ipsum orci, bibendum eget suscipit vel, scelerisque ut nulla. Phasellus porta, enim quis luctus blandit, eros neque tempus orci, rutrum ultrices nisi elit sed nisl. In non sem ultrices elit accumsan mattis ut vel dui. Maecenas nec mi erat. Sed et elit id dolor suscipit venenatis id ac magna. Praesent sagittis laoreet risus, ac ultrices lacus sodales eu. Nunc augue augue, ullamcorper ut tristique et, iaculis in tortor. Phasellus ultrices odio quis urna mollis imperdiet nec at magna. Aliquam id justo at libero porta volutpat. Mauris vitae purus molestie lorem ullamcorper pulvinar. Donec luctus urna elit. Donec consectetur, metus id ultrices iaculis, mauris est pretium orci, ac rutrum lacus nibh in dolor. Vestibulum eu augue id magna adipiscing ullamcorper. In hac habitasse platea dictumst. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris ligula libero, convallis in ullamcorper quis, euismod in enim. Cras iaculis volutpat porta. Praesent non faucibus tortor. In hac habitasse platea dictumst. Duis posuere egestas varius. Aliquam non sem ut ante tincidunt varius. Fusce sit amet mauris nec ante pharetra fermentum ut sit amet felis. Mauris erat enim, sagittis nec molestie at, sagittis et nisl. Aliquam faucibus nunc a libero pharetra mollis. Sed risus eros, ornare eu tempus id, accumsan at lacus. Sed gravida euismod cursus. Mauris ac erat non tellus aliquet mattis. Nunc eu leo ligula. Phasellus vel quam massa, et tempus enim. Mauris tincidunt imperdiet risus sed ullamcorper. Phasellus mollis ultrices egestas. Nullam metus augue, tristique eu sagittis et, feugiat vitae felis. Proin malesuada commodo velit in malesuada. Nam ut commodo eros. Vestibulum arcu augue, lacinia ut laoreet a, accumsan et risus. Proin ultrices lorem a nunc placerat gravida. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nunc luctus tortor ac ligula faucibus ac feugiat lorem tempor. Ut vitae purus magna. Donec molestie enim at nibh rutrum tincidunt. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Duis nec massa ipsum, eu venenatis augue. Sed sit amet turpis sit amet ligula malesuada euismod. Maecenas nec tellus quis turpis bibendum blandit. Vestibulum ornare, velit eu tempus congue, risus metus ultricies neque, sit amet semper leo nunc id tortor. Sed id orci erat, a cursus massa. Sed commodo tempus lectus, a sodales odio vehicula nec. Aenean nec neque eu elit condimentum ultricies id vel ipsum. Nunc ornare, lacus non eleifend feugiat, lorem diam congue nisi, at sodales tellus nibh et mi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam congue, eros non imperdiet volutpat, sapien augue gravida ante, at suscipit mauris eros nec mauris. Suspendisse potenti. Nullam iaculis vestibulum eros. Maecenas sit amet quam et risus lacinia ultricies et vitae erat. Fusce est dui, laoreet in tincidunt sit amet, cursus eget est. Aenean eu neque leo, ac aliquam orci. Sed rhoncus dui vel erat semper at suscipit augue tempus. Suspendisse nec arcu eu nulla pretium consequat. Fusce neque nisi, vehicula at gravida et, varius ut nulla. In hac habitasse platea dictumst. Donec id tellus in erat ultrices bibendum. Praesent nibh purus, cursus vel volutpat eu, ultrices quis lectus. Phasellus diam ipsum, fringilla non mollis et, lobortis posuere urna. Aliquam elementum arcu ac nisl consectetur ut tincidunt purus pellentesque. Ut sollicitudin tortor ut leo viverra consectetur. Maecenas ac felis nisi. Sed elementum molestie luctus. Maecenas eget orci sed libero tincidunt pharetra ut sed nulla. Aliquam convallis quam sit amet urna bibendum scelerisque. Vivamus sodales malesuada massa in consequat. Aliquam ut nibh nec magna blandit varius. Quisque vel sodales tellus. Nulla quis ullamcorper purus. Ut sollicitudin dolor et neque commodo vitae vehicula felis tempor. Morbi mauris arcu, scelerisque vitae pellentesque ut, porta ac nulla. Etiam sit amet sem a erat mollis ultrices. Maecenas quis felis quis libero feugiat lacinia non sit amet nibh. Ut egestas aliquam velit, eu tincidunt lacus sollicitudin sed. Aenean gravida massa quis ligula ultrices et condimentum orci volutpat. Quisque viverra ipsum et lectus lobortis a porta nunc tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tempus neque vitae libero ultrices elementum sit amet quis erat. In semper ultrices nibh at aliquet. Cras ultricies imperdiet felis, at feugiat risus lobortis sit amet. Praesent scelerisque dolor ac ligula bibendum nec varius libero varius. Praesent magna diam, laoreet quis porta nec, posuere in quam. Nunc at nibh interdum purus mollis vestibulum. Phasellus scelerisque consequat mattis. Ut sit amet urna at urna semper faucibus in nec libero. Integer ut sem urna, sed auctor erat. Donec et metus augue. Nullam at nunc velit. Praesent viverra sagittis enim, quis cursus nulla mollis a. Integer eleifend fringilla augue eu ornare. Sed eleifend, mi nec vestibulum porttitor, lacus elit euismod augue, in mollis sapien risus luctus urna. Ut vitae mi at nibh hendrerit porttitor at sed ligula. Praesent nec adipiscing arcu. Ut ornare pellentesque arcu, vel bibendum metus lobortis nec. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Morbi purus urna, interdum vel suscipit eu, egestas at dui. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque vel tortor neque. Donec at pulvinar mi. Curabitur vel nisi urna. Donec eget nisl purus. Phasellus a congue arcu. In id augue risus. Sed sagittis sapien a dui pulvinar ut fringilla diam vestibulum. Praesent non mi vel purus convallis rutrum. Quisque laoreet molestie mollis. Proin posuere sem sit amet elit sagittis mollis pretium quam pellentesque. Sed ut viverra lacus. Nam tincidunt sollicitudin magna sed auctor. Mauris rutrum convallis semper. Cras adipiscing semper feugiat. Aliquam nec magna augue. Donec ut augue dolor, in porttitor nunc. Integer iaculis arcu quis mi facilisis feugiat dapibus elit condimentum. Nam mi turpis, varius vel lobortis sit amet, posuere ut neque. Suspendisse et lacinia justo. Nulla vitae eros odio, sit amet scelerisque leo. Proin eget ante quam, nec posuere orci. Integer non rhoncus leo. Praesent vel nisi vel nisl tempor varius ut quis quam. Duis fermentum eleifend consectetur. Suspendisse urna elit, eleifend a eleifend sed, faucibus eget justo. Curabitur suscipit semper ipsum, id sollicitudin leo gravida ullamcorper. Suspendisse potenti. Duis luctus lacus dui. Nunc non tellus massa. Nullam luctus ullamcorper nisi eget pulvinar. In bibendum condimentum quam, at hendrerit metus molestie et. Nullam posuere dolor quis augue sodales quis vulputate risus scelerisque. Phasellus vel augue leo. In a iaculis lacus. In consectetur faucibus commodo. Mauris diam urna, lacinia et feugiat quis, commodo non ante. Quisque vestibulum turpis ac velit placerat feugiat. Proin aliquam lacus eget odio tristique non ultricies urna gravida. Mauris sit amet dolor nisl. Nullam at nisi sed justo porttitor consectetur quis sit amet dui. Nunc interdum, nulla eu egestas rhoncus, lectus libero tincidunt nisi, eget bibendum odio libero vitae risus. Phasellus adipiscing bibendum laoreet. Nulla tempor felis in ipsum viverra condimentum. Duis laoreet eleifend leo, in laoreet purus commodo ut. Donec justo urna, varius eu porta vel, gravida vitae lorem. Nulla sed nibh dui. In hac habitasse platea dictumst. Quisque convallis arcu vel nunc gravida ornare. Morbi luctus laoreet lacinia. Pellentesque et lorem quis ante tincidunt suscipit. Vestibulum iaculis metus non nunc mattis sit amet pretium magna facilisis. Proin ullamcorper justo sem, vel rutrum nisl. Sed eros felis, posuere et mattis sit amet, vehicula in mauris. Nullam elit eros, cursus in iaculis viverra, cursus id urna. Cras sit amet dolor elit, quis rhoncus turpis. Integer et augue odio, quis semper eros. Etiam faucibus ligula a sapien pretium lacinia. Proin tempus neque placerat elit accumsan quis ultrices enim dignissim. Nulla facilisi. Fusce aliquam imperdiet diam. Nullam posuere sollicitudin ante, non posuere risus volutpat eu. Donec mauris arcu, tincidunt sit amet varius ac, pretium et leo. Aliquam porta pretium elit non vehicula. Mauris nec nisl mauris. Fusce lorem arcu, consectetur sit amet sodales bibendum, volutpat et lacus. Aenean tristique diam ac urna scelerisque feugiat. Vestibulum consectetur convallis justo, ac semper libero blandit sed. Quisque ultricies accumsan turpis in bibendum. Cras tristique fermentum lacus quis posuere. Etiam nisl velit, adipiscing in eleifend non, porta id justo. Cras vel mi ut est dapibus vehicula. In fermentum enim at nunc placerat rhoncus. Quisque nulla metus, pretium ac aliquam ut, vulputate quis ipsum. Nam a justo et ligula elementum porta. Curabitur gravida, quam et ullamcorper commodo, metus enim egestas diam, eu vulputate risus tortor non nulla. Suspendisse potenti. Suspendisse congue egestas nunc eget iaculis. Nulla facilisi. Curabitur tempus fringilla purus quis imperdiet. Sed malesuada libero sed neque sodales blandit. Vestibulum iaculis vehicula rutrum. Sed tempus augue vitae massa volutpat sed convallis libero porttitor. Nulla facilisi. Phasellus tristique dui non justo porttitor rutrum. Vestibulum egestas tortor sit amet tellus semper aliquet. Quisque feugiat hendrerit lacus, non sodales eros hendrerit vitae. Cras interdum odio egestas quam consectetur tempor. Suspendisse potenti. Donec lorem ipsum, blandit fermentum auctor eget, porta in justo. Praesent est ipsum, viverra in blandit et, hendrerit id urna. Maecenas scelerisque, arcu eu ornare blandit, turpis ipsum pulvinar nulla, a consequat metus augue ut felis. Aliquam non lacus lorem, at malesuada est. Morbi pretium accumsan convallis. Fusce tempor luctus eros vel lobortis. In hac habitasse platea dictumst. Donec urna mauris, posuere a fermentum vitae, lobortis id massa. Morbi fringilla ultricies sem ac sodales. Nulla dolor felis, bibendum vel eleifend nec, interdum at metus. Etiam sollicitudin lacus non sem interdum pretium imperdiet nisl pretium. Nullam eu turpis eu enim tincidunt pulvinar at vitae dolor. Proin vitae massa eget nisi tincidunt ornare. Pellentesque congue purus id quam venenatis hendrerit. Fusce et ante tellus, non placerat est. Fusce scelerisque, diam non bibendum iaculis, elit arcu elementum magna, id euismod mauris nisi id libero. Sed eget lorem lorem, ac convallis lectus. Vivamus vehicula placerat sem, vel ullamcorper nisi euismod et. Aliquam mollis tellus mi, a eleifend nisi. Phasellus congue pulvinar luctus. Fusce velit metus, dapibus sit amet suscipit vel, pellentesque eu sapien. Curabitur auctor, ipsum ut adipiscing placerat, leo purus euismod augue, eget interdum purus neque vel massa. In sed elit risus, vitae pharetra risus. Aliquam venenatis tellus non risus luctus at iaculis lorem ultrices. Integer fringilla est sed erat mollis tristique. Sed egestas lacinia eros, ut blandit enim semper egestas. Nulla ac augue dolor. Ut aliquam dui vel lacus hendrerit interdum accumsan arcu pretium. Nulla placerat orci vitae ligula sollicitudin consequat. Integer lacus erat, sagittis pretium aliquam lacinia, luctus et velit. Morbi odio dui, mattis vel vehicula eget, blandit nec justo. Duis mattis dolor ac turpis dictum interdum et ut libero. Nam ac est in quam adipiscing consequat sed a est. Aenean eget mauris vel mauris congue interdum eu at ipsum. Fusce feugiat ultricies enim porta viverra. In aliquam venenatis volutpat. Integer eget vehicula mauris. Aliquam non mauris ut sapien pulvinar iaculis nec consequat lectus. Morbi vitae libero tortor. Etiam at nunc et ipsum consectetur sagittis. Suspendisse sagittis leo vel enim sagittis ut fringilla orci semper. Duis sagittis turpis ut neque faucibus in varius massa imperdiet. Duis a vestibulum neque. Aliquam id condimentum enim. Praesent sit amet nisi sapien, ut facilisis sem. Sed et aliquam diam. Proin accumsan magna lacinia erat feugiat interdum. Ut fermentum posuere purus, eget sagittis nisi suscipit in. Nunc aliquet ipsum eget nulla convallis tristique. In tempor sollicitudin ultrices. Suspendisse orci tortor, sagittis sit amet malesuada id, feugiat accumsan velit. Aenean at augue a nisl vulputate tincidunt sit amet a justo. Nullam consequat lobortis lacus id tempus. Mauris varius dignissim tempor. Sed nec arcu est, et lobortis metus. Morbi luctus magna ut massa aliquam tristique. Donec in mauris sapien. Donec pharetra sollicitudin dolor, quis porttitor elit condimentum eget. Morbi eu orci neque, eu eleifend tortor. Proin feugiat neque non velit euismod dignissim. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus id nunc ut velit porttitor condimentum sit amet non arcu. Suspendisse potenti. Donec nec elit at dui rhoncus pellentesque. Integer feugiat mollis sodales. Suspendisse congue venenatis suscipit. Vivamus pulvinar bibendum nibh, feugiat scelerisque nibh vehicula dictum. Phasellus commodo, lacus ultrices sagittis pretium, orci magna suscipit justo, ac porta sapien lorem a ligula. In cursus malesuada nibh vel pretium. Nunc a posuere arcu. Quisque dapibus, dui eu eleifend porta, nulla neque laoreet ligula, eu ultricies elit erat a sapien. Etiam lorem nisi, porttitor sit amet venenatis vitae, scelerisque at metus. Vivamus pretium orci sed orci laoreet hendrerit. Mauris hendrerit malesuada nisi in rhoncus. Fusce cursus rutrum ultrices. Fusce in eros tortor, eget dapibus enim. Ut eleifend faucibus porttitor. Fusce ornare quam non justo bibendum viverra. Duis non erat a quam feugiat congue. Phasellus vulputate ultricies neque, ut faucibus nisi adipiscing vel. Nulla facilisi. Praesent ut commodo nisi. Curabitur tristique metus a urna ultrices id tempus nisi volutpat. Vivamus sodales laoreet lacus eu molestie. Ut elit tortor, rutrum vel cursus a, sodales ac neque. Maecenas ut velit metus, at pulvinar ipsum. Etiam vel risus quis purus dictum convallis. Integer malesuada orci non urna malesuada id lobortis risus facilisis. Maecenas tincidunt viverra sapien nec tincidunt. Etiam ultricies tincidunt auctor. Curabitur lacinia, augue sit amet faucibus sagittis, nunc urna interdum neque, tincidunt accumsan dui tellus quis dui. Donec vel ante ac justo cursus tincidunt ac in ante. Ut nec augue a magna egestas blandit. Nunc imperdiet convallis lorem, sed accumsan sem vulputate quis. Donec blandit orci gravida ligula pulvinar in varius urna imperdiet. Curabitur nec erat a eros scelerisque tristique eu sed enim. Nullam a suscipit nulla. Mauris feugiat, diam quis facilisis convallis, justo ligula condimentum justo, nec ornare erat lacus at lorem. Donec dui dolor, elementum eu tempor tincidunt, lacinia et tellus. Fusce elit dui, luctus eu dictum vitae, posuere eu augue. Donec id urna sit amet lorem hendrerit consequat eu sed libero. Vestibulum eget dapibus tellus. Nulla turpis tellus, tristique nec hendrerit at, dignissim ut nulla. Pellentesque sed ipsum a mauris dapibus consectetur. Nulla eleifend viverra elit, in tincidunt est cursus ac. Sed magna mauris, consequat sed blandit eu, sodales in dolor. Nam sed felis mauris. Donec eleifend tortor mi. Phasellus pharetra lectus enim, sed auctor odio. Phasellus sollicitudin, urna sit amet venenatis vehicula, tortor urna euismod sem, sit amet ornare orci velit ut dolor. Duis in posuere massa. Vestibulum at velit quam. Cras a leo ac augue hendrerit pretium. Ut vehicula sagittis pharetra. Aliquam ut arcu vel lectus dictum luctus. Donec ut urna libero, vel fermentum odio. Curabitur in diam dolor. Sed sed felis enim, vitae dictum dui. Integer quis justo eget dui mollis posuere. In hac habitasse platea dictumst. Donec lorem enim, imperdiet ut fermentum ac, dignissim sit amet velit. In lacinia tempus massa id sollicitudin. Maecenas euismod risus nec turpis fermentum ac viverra ante molestie. Nam vitae magna magna. Donec gravida magna eu felis ornare quis viverra ante fermentum. Nullam placerat nulla id augue facilisis et ultricies velit blandit. Vestibulum commodo accumsan vulputate. Nunc suscipit vestibulum sem, quis vulputate augue tincidunt et. Cras mollis, dui id imperdiet ornare, nisi mauris vehicula ante, at lobortis urna elit sit amet lorem. Vestibulum in lorem nisi, sed scelerisque erat. Nunc porta nulla eget leo tincidunt auctor. Fusce sed neque eu mauris sollicitudin molestie. Praesent nunc arcu, mollis vitae rutrum non, vehicula quis dolor. Nulla facilisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent velit quam, fringilla sed commodo rutrum, molestie sed tellus. Integer dictum, nisi eget condimentum volutpat, augue enim bibendum tellus, sit amet condimentum purus sem id risus. Pellentesque blandit venenatis luctus. Nullam urna elit, tincidunt eu volutpat eget, euismod et nulla. Sed porta sollicitudin sagittis. Pellentesque imperdiet, purus et volutpat laoreet, purus augue scelerisque quam, ut auctor nulla sem eget nisi. Maecenas tortor metus, tincidunt at tincidunt non, ornare et diam. Aliquam nec lorem dui, a auctor mi. Vestibulum auctor diam sit amet quam pulvinar lobortis. Aliquam eget dolor eu ipsum porttitor tempor quis vitae nibh. Sed ut imperdiet ligula. Maecenas sollicitudin congue lectus in fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sodales arcu vitae enim tristique lacinia. Quisque in ullamcorper elit. Ut lacinia egestas nunc, quis consectetur augue elementum non. Praesent volutpat vulputate ante, a tempor quam interdum et. Aliquam feugiat nisi quis diam aliquam ac mattis nisl vulputate. Nulla id enim magna, nec adipiscing metus. Vestibulum ultrices pellentesque rutrum. Praesent non vehicula massa. Quisque pharetra porta nisl, in cursus lacus aliquet eget. Nullam eget nibh felis, egestas rhoncus nulla. Morbi sed orci sapien, quis facilisis odio. Vestibulum augue mauris, cursus a placerat a, dapibus ac odio. Fusce vulputate luctus commodo. Proin vulputate fringilla volutpat. Mauris ante est, placerat et aliquet dignissim, tincidunt eu nisi. Quisque justo elit, pulvinar in condimentum vel, interdum at augue. Donec sed elit a purus feugiat auctor. Integer at neque enim, semper lobortis enim. Vestibulum nunc felis, viverra ac pellentesque id, rhoncus eu mauris. Ut ligula nibh, aliquet aliquet interdum accumsan, varius a massa. Vivamus aliquam, nunc in vestibulum consectetur, massa purus imperdiet tellus, et tempor velit sapien fringilla magna. Ut eget urna non nisi tempus elementum vel eget urna. Sed convallis adipiscing ipsum eu accumsan. Proin non urna eu dolor venenatis convallis vitae nec leo. Mauris aliquam ornare tincidunt. In non augue lectus, eu feugiat ante. Nulla interdum aliquam nisl in convallis. Sed in libero elit. Proin lorem est, porta vitae ultricies non, consectetur in ante. Maecenas a ultricies dui. Morbi viverra, enim quis elementum porttitor, arcu mauris elementum sem, non consequat odio odio sit amet sapien. Vivamus laoreet congue turpis, ac ornare felis consectetur sit amet. Ut nunc dui, ornare eu interdum ut, ullamcorper eget ligula. Proin ullamcorper dictum orci in posuere. Donec a tempus urna. Nunc hendrerit, orci non pharetra accumsan, enim nulla vulputate sapien, quis bibendum lectus orci nec urna. Quisque fermentum purus sem, sit amet varius justo. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed porta mauris nec purus condimentum eleifend. Pellentesque sit amet velit magna, pharetra euismod lacus. Mauris vulputate erat et dui sagittis ac egestas justo sollicitudin. Proin convallis, enim eu lacinia aliquam, erat ipsum cursus sapien, eu rhoncus erat est et tortor. Sed est purus, dignissim et gravida sit amet, dapibus vel lectus. Curabitur convallis, risus ut molestie viverra, dolor metus cursus tellus, eu posuere orci felis scelerisque elit. Donec venenatis aliquet tortor, eget blandit metus condimentum nec. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus id tristique lacus. Ut in odio porttitor tellus viverra facilisis at et lorem. Fusce vehicula odio ut lacus commodo venenatis. Vivamus vitae condimentum velit. In hac habitasse platea dictumst. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nullam lectus odio, faucibus vitae egestas et, varius placerat felis. Praesent facilisis hendrerit mollis. Aenean viverra elit vel dui suscipit congue. Mauris non nulla libero. Ut luctus, sem sit amet placerat mollis, risus nisi varius tortor, sed egestas tellus urna sit amet urna. In id mi id nulla fermentum aliquet. Vivamus facilisis imperdiet tempus. Nam sit amet odio non mi ullamcorper sagittis sit amet ac est. Maecenas id magna in diam porttitor feugiat sed quis dui. Etiam nec nunc eu mi vulputate semper. Aliquam vel velit vel felis cursus ultricies. Vestibulum in nisl lacus, sit amet egestas augue. Nullam nisl diam, vehicula et tincidunt eget, consectetur quis nibh. Nulla purus dui, congue ut ullamcorper quis, cursus vel enim. Cras vitae nisl massa, non sodales purus. Curabitur hendrerit malesuada rhoncus. Suspendisse tristique sem eget lectus molestie viverra. Nullam quis diam sed magna tempor tempor quis sed turpis. Nullam laoreet purus eget tortor lacinia pretium. In convallis purus et felis placerat elementum. Suspendisse ut sem sit amet arcu scelerisque tempus. In neque sem, mattis at vestibulum ac, volutpat vel elit. Etiam augue ipsum, consequat ut hendrerit at, mattis in elit. Curabitur auctor, ante et tristique vehicula, ligula sapien luctus turpis, vitae suscipit velit neque eu neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed consequat convallis pretium. Nullam at sapien eget tortor congue vulputate. Cras leo diam, porta sed sodales et, eleifend vitae velit. Sed laoreet urna in urna dignissim eu posuere tortor ornare. Aliquam erat volutpat. Vestibulum eleifend, turpis gravida dignissim tristique, magna nisi volutpat enim, in interdum ligula neque varius quam. Vestibulum vehicula aliquet consequat. Donec viverra orci ut magna facilisis sagittis. Sed tincidunt iaculis neque at sollicitudin. Vivamus eget rutrum lectus. Integer urna dolor, lacinia accumsan tristique eu, aliquam vitae risus. Mauris eget eros id lectus adipiscing faucibus ullamcorper sit amet velit. Duis sed lacus ante. Pellentesque eleifend, libero et dictum congue, nulla dui hendrerit arcu, et pharetra nunc ipsum quis massa. Pellentesque at metus nibh. Duis iaculis molestie augue, vulputate sagittis turpis pretium in. Nullam eu dui eget magna feugiat congue ac sit amet neque. Mauris quis posuere dolor. Sed vulputate vestibulum dui, ut rhoncus quam iaculis in. Pellentesque vitae diam mauris. Nam ut pulvinar metus. Morbi dapibus pretium nunc, vitae dignissim justo vestibulum sed. Curabitur sed diam metus. Nulla risus neque, fringilla nec adipiscing nec, eleifend ut tortor. Sed sed felis id dolor facilisis semper. Nam sit amet sollicitudin libero. Curabitur vitae dui eget libero accumsan tempor nec blandit elit. Sed sit amet ante sem, vel semper nisi. Duis est felis, cursus et sollicitudin et, condimentum ac purus. Curabitur iaculis sodales tristique. Mauris malesuada commodo vulputate. Phasellus venenatis ultricies semper. Donec tellus velit, viverra eu pellentesque quis, varius sit amet elit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec et enim magna, quis rutrum enim. Cras nunc nisi, varius dictum hendrerit sed, viverra at turpis. Sed sed odio tortor. Nulla facilisi. Ut vestibulum tempus orci ut blandit. Quisque hendrerit sagittis mi eget molestie. Maecenas interdum ullamcorper eros, sed ullamcorper urna porttitor sit amet. Etiam eu sem quis urna vehicula pharetra. Sed imperdiet pellentesque diam, quis interdum magna sollicitudin quis. Nam tristique tincidunt molestie. Nunc urna mauris, porta vitae sollicitudin quis, dignissim sed tortor. Etiam vel nulla purus. Aenean neque mi, ullamcorper in ultrices id, ultricies eget sapien. Nullam sodales odio in odio rutrum sed rutrum ligula placerat. Sed odio lectus, pellentesque commodo adipiscing"
dat 0
:text_uncompressed_end
:compress_to_here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment