58 |
59 | Want to know more about the compression technique used by this tool?
60 | Click Here!
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/heap_implementation.js:
--------------------------------------------------------------------------------
1 | /*
2 | Author : Samyak Jain
3 | Created on : 30 June 2020
4 | */
5 | // export { MinHeap }
6 | class MinHeap {
7 | constructor() {
8 | this.heap_array = [];
9 | }
10 |
11 | /// returns size of the min heap
12 | size() {
13 | return this.heap_array.length;
14 | }
15 |
16 | /// returns if the heap is empty
17 | empty() {
18 | return (this.size() === 0);
19 | }
20 |
21 | /// insert a new value in the heap
22 | push(value) {
23 | this.heap_array.push(value);
24 | this.up_heapify();
25 | }
26 |
27 | /// updates heap by up heapifying
28 | up_heapify() {
29 | var current_index = this.size() - 1;
30 | while (current_index > 0) {
31 | var current_element = this.heap_array[current_index];
32 | var parent_index = Math.trunc((current_index - 1) / 2);
33 | var parent_element = this.heap_array[parent_index];
34 |
35 | if (parent_element[0] < current_element[0]) {
36 | break;
37 | }
38 | else {
39 | this.heap_array[parent_index] = current_element;
40 | this.heap_array[current_index] = parent_element;
41 | current_index = parent_index;
42 | }
43 | }
44 | }
45 |
46 | /// returns the top element (smallest value element)
47 | top() {
48 | return this.heap_array[0];
49 | }
50 |
51 | /// delete the top element
52 | pop() {
53 | if (this.empty() == false) {
54 | var last_index = this.size() - 1;
55 | this.heap_array[0] = this.heap_array[last_index];
56 | this.heap_array.pop();
57 | this.down_heapify();
58 | }
59 | }
60 |
61 | /// updates heap by down heapifying
62 | down_heapify() {
63 | var current_index = 0;
64 | var current_element = this.heap_array[0];
65 | while (current_index < this.size()) {
66 | var child_index1 = (current_index * 2) + 1;
67 | var child_index2 = (current_index * 2) + 2;
68 | if (child_index1 >= this.size() && child_index2 >= this.size()) {
69 | break;
70 | }
71 | else if (child_index2 >= this.size()) {
72 | let child_element1 = this.heap_array[child_index1];
73 | if (current_element[0] < child_element1[0]) {
74 | break;
75 | }
76 | else {
77 | this.heap_array[child_index1] = current_element;
78 | this.heap_array[current_index] = child_element1;
79 | current_index = child_index1;
80 | }
81 | }
82 | else {
83 | var child_element1 = this.heap_array[child_index1];
84 | var child_element2 = this.heap_array[child_index2];
85 | if (current_element[0] < child_element1[0] && current_element[0] < child_element2[0]) {
86 | break;
87 | }
88 | else {
89 | if (child_element1[0] < child_element2[0]) {
90 | this.heap_array[child_index1] = current_element;
91 | this.heap_array[current_index] = child_element1;
92 | current_index = child_index1;
93 | }
94 | else {
95 | this.heap_array[child_index2] = current_element;
96 | this.heap_array[current_index] = child_element2;
97 | current_index = child_index2;
98 | }
99 | }
100 | }
101 | }
102 | }
103 | }
104 |
--------------------------------------------------------------------------------
/assets/SAMPLE1.TXT:
--------------------------------------------------------------------------------
1 | The standard Lorem Ipsum passage, used since the 1500s
2 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
3 | Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC
4 | "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"
5 | 1914 translation by H. Rackham
6 | "But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?"
7 | Section 1.10.33 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC
8 | "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat."
9 | 1914 translation by H. Rackham
10 | "On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains."
11 | ________________
--------------------------------------------------------------------------------
/styles.css:
--------------------------------------------------------------------------------
1 | /*
2 | Author : Samyak Jain
3 | Created on : 30 June 2020
4 | */
5 | *{
6 | background-color: rgba(243, 239, 239, 0.787);
7 | color: rgb(3, 5, 87);
8 | font-family: Arial, Helvetica, sans-serif;
9 | }
10 | h2{
11 | /* color: black; */
12 | font-style: italic;
13 | /* text-decoration: underline; */
14 | }
15 | h3{
16 | color: black;
17 | font-style: italic;
18 | text-decoration: underline;
19 | }
20 | #heading {
21 | margin-left: 1%;
22 | margin-right: 1%;
23 | font-size: 130%;
24 | }
25 | .align{
26 | /* padding: 1.5%; */
27 | padding-left: 17%;
28 | padding-right: 12%;
29 | padding-bottom: 0.05%;
30 | /* background-color: rgb(182, 179, 179); */
31 | font-size: medium;
32 |
33 | }
34 | .bigdiv{
35 | margin-left: 5%;
36 | margin-right: 5%;
37 | /* border: rgb(0, 0, 0) solid 2px; */
38 |
39 | /* background-color: rgb(182, 179, 179) ; */
40 | }
41 |
42 | .links{
43 | color: rgb(11, 11, 251);
44 | background-color: rgb(189, 201, 206);
45 | font-family: Georgia, 'Times New Roman', Times, serif;
46 | /* font-weight:+ bold; */
47 | font-size: large;
48 | }
49 | .links:hover{
50 | color: rgb(3, 3, 128);
51 | background-color: rgb(2, 158, 158);
52 | }
53 |
54 | .form{
55 | /* background-color: rgb(182, 179, 179) ; */
56 | font-family: Arial, Helvetica, sans-serif;
57 | /* font-size: x-small; */
58 | display: inline-block;
59 | }
60 | .input{
61 | font-size: x-small;
62 | /* background-color: rgb(182, 179, 179); */
63 | }
64 |
65 | #text1{
66 | font-size: xx-small;
67 | /* background-color: rgb(182, 179, 179) ; */
68 | }
69 | #text4{
70 | font-size: small;
71 | }
72 | /* #encode{
73 | background-color: rgb(97, 153, 97);
74 | } */
75 | /* #decode{
76 | background-color: rgb(172, 75, 75);
77 | } */
78 | #encode:disabled{
79 | background-color: rgb(182, 179, 179);
80 | }
81 | #decode:disabled{
82 | background-color: rgb(182, 179, 179);
83 | }
84 | .button{
85 | font-size: small;
86 | font-weight: bold;
87 | color: black;
88 | background-color: rgb(142, 180, 250);
89 | /* background-color: cyan; */
90 | }
91 | .button:disabled{
92 | color: rgb(56, 54, 54);
93 | }
94 | .text{
95 | font-size: small;
96 | }
97 | .text2{
98 | /* background-color: rgb(182, 179, 179); */
99 | font-size: small;
100 | }
101 | #link1{
102 | font-size: smaller;
103 | }
104 | #textImg{
105 | width: 10%;
106 | margin-left: 30%;
107 | /* background-color: rgb(182, 179, 179); */
108 | }
109 |
110 | #doneImg{
111 | width: 9.5%;
112 | margin-left: 30.5%;
113 | /* background-color: rgb(182, 179, 179); */
114 | }
115 |
116 | #optionsImg{
117 | width: 14%;
118 | margin-left: 28.5%;
119 | /* background-color: rgb(182, 179, 179); */
120 | }
121 |
122 | #waitImg{
123 | width: 14%;
124 | margin-left: 29%;
125 | /* background-color: rgb(182, 179, 179); */
126 | }
127 | @media(min-width:740px){
128 | #heading {
129 | margin-left: 12%;
130 | margin-right: 10%;
131 | font-size: 150%;
132 | }
133 | #encode{
134 | margin-left: 4%;
135 | }
136 | .button{
137 | font-size: medium;
138 | }
139 | .bigdiv{
140 | margin-left: 15%;
141 | margin-right: 15%;
142 | }
143 | .align{
144 | font-size: large;
145 | }
146 | .text{
147 | font-size: medium;
148 | margin-left: 12%;
149 | margin-right: 3%;
150 | }
151 | #text1{
152 | font-size: x-small;
153 | }
154 | .text2{
155 | font-size: medium;
156 | }
157 | #text4{
158 | font-size: medium;
159 | }
160 | .input{
161 | font-size: small;
162 | }
163 | #link1{
164 | font-size: large;
165 | }
166 | }
167 | @media(min-width:1090px){
168 | #heading {
169 | margin-left: 17%;
170 | margin-right: 11%;
171 | font-size: 165%;
172 | }
173 | #encode{
174 | margin-left: 4%;
175 | }
176 | .text{
177 | margin-left: 25%;
178 | margin-right: 15%;
179 | }
180 | #text1{
181 | font-size: small;
182 | }
183 | .bigdiv{
184 | margin-left: 19%;
185 | margin-right: 15%;
186 | }
187 | .button{
188 | font-size: large;
189 | margin-left: 1.5%;
190 | margin-right: 1.5%;
191 | }
192 | .align{
193 | padding-left:23% ;
194 | padding-right: 20%;
195 | font-size: x-large;
196 | }
197 | .text2{
198 | font-size: large;
199 | }
200 | }
201 |
202 |
203 |
--------------------------------------------------------------------------------
/info.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 | Info
9 |
10 |
11 |
12 |
13 | <- Go Back
14 |
This tool uses Huffman Coding to compress data!
15 |
16 |
Huffman Coding is a popular technique used for Lossless Data Compression.
17 |
Lossles Compression:
18 |
Lossless compression is a class of data compression algorithms that allows the original data to be
19 | perfectly reconstructed from the compressed data. By contrast,lossy compression permits
20 | reconstruction only of an approximation of the original data, though usually with greatly improved
21 | compression rates (and therefore reduced media sizes).
22 |
Lossles Compression is preffered for text file compression, while Lossy Compression is generally preferred
23 | for audio, video and image files.
24 |
File formats like ZIP use Lossless compression, while formats like MP3 and JPEG use
25 | Lossy compression
26 |
Data compression ratio , also known as compression power, is a measurement of the relative reduction
27 | in size of data representation produced by a data compression algorithm. It is typically expressed as the
28 | division of uncompressed size by compressed size. Thus, a representation that compresses a file's storage
29 | size from 10 MB to 2 MB has a compression ratio of 10/2 = 5
30 |
31 |
32 |
Huffman Code:
33 |
34 |
35 | A Huffman code is a particular type of optimal prefix code that is commonly used for lossless data
36 | compression. The process of finding or using such a code proceeds by means of Huffman coding, an algorithm
37 | developed by David A. Huffman.
38 |
39 |
40 | The output from Huffman's algorithm can be viewed as a variable-length code table
41 | for encoding a source symbol (such as a character in a file). The algorithm derives this table from the
42 | estimated probability or frequency of occurrence (weight) for each possible value of the source symbol.
43 |
44 |
Prefix Codes, means the codes (bit sequences) are assigned in such a way that the code assigned to
45 | one character is not the prefix of code assigned to any other character. This is how Huffman Coding makes
46 | sure that there is no ambiguity when decoding the generated bitstream.
47 |
48 |
Compression:
49 |
There are mainly two major parts in Huffman Coding
50 |
51 |
Build a Huffman Tree from input characters.
52 |
Traverse the Huffman Tree and assign codes to characters.
53 |
54 |
55 |
56 |
57 | Steps to build Huffman Tree
58 |
59 | Input is an Array or Hashmap of unique characters along with their frequency of occurrences and
60 | output is Huffman
61 | Tree.
62 |
63 |
Create a leaf node for each unique character and build a Min Heap (or a priority queue) of all leaf nodes
64 |
Extract two nodes with the minimum frequency from the min heap.
65 |
Create a new internal node with a frequency equal to the sum of the two nodes frequencies. Make the
66 | first extracted node as its left child and the other extracted node as its right child. Add this
67 | node to the min heap.
68 |
Repeat steps 2 and 3 until the heap contains only one node. The remaining node is the root node and
69 | the tree is complete.
70 |
71 |
72 |
73 | Steps to print codes from Huffman Tree:
74 |
75 | Traverse the tree formed starting from the root. Maintain an auxiliary array. While moving to the left
76 | child, write 0 to the array. While moving to the right child, write 1 to the array. Print the array when a
77 | leaf node is encountered.
78 |
79 |
De-compression:
80 |
Generally speaking, the process of decompression is simply a matter of translating the stream of prefix codes to individual byte values, usually by traversing the Huffman tree node by node as each bit is read from the input stream (reaching a leaf node necessarily terminates the search for that particular byte value).
88 |
89 |
90 |
--------------------------------------------------------------------------------
/codec_implementation.js:
--------------------------------------------------------------------------------
1 | /*
2 | Author : Samyak Jain
3 | Created on : 30 June 2020
4 | */
5 | // import { MinHeap } from './heap_implementation.js';
6 | // export { Codec };
7 | class Codec {
8 | // constructor() {
9 | // this.codes = {};
10 | // }
11 |
12 | /// dfs
13 | getCodes(node, curr_code) {
14 | /// is leaf node
15 | if (typeof (node[1]) === "string") {
16 | // this.codes.node[1] = curr_code;
17 | /// alternate way
18 | this.codes[node[1]] = curr_code;
19 | return;
20 | }
21 |
22 | /// go left
23 | this.getCodes(node[1][0], curr_code + '0');
24 | /// go right
25 | this.getCodes(node[1][1], curr_code + '1');
26 | }
27 |
28 | /// make the humffman tree into a string
29 | make_string(node) {
30 | if (typeof (node[1]) === "string") {
31 | return "'" + node[1];
32 | }
33 | return '0' + this.make_string(node[1][0]) + '1' + this.make_string(node[1][1]);
34 | }
35 | /// make string into huffman tree
36 | make_tree(tree_string) {
37 | let node = [];
38 | if (tree_string[this.index] === "'") {
39 | this.index++;
40 | node.push(tree_string[this.index]);
41 | this.index++;
42 | return node;
43 | }
44 | this.index++;
45 | node.push(this.make_tree(tree_string)); // find and push left child
46 | this.index++;
47 | node.push(this.make_tree(tree_string)); // find and push right child
48 | return node;
49 | }
50 |
51 | encode(data) {
52 | this.heap = new MinHeap();
53 |
54 | var mp = new Map();
55 | for (let i = 0; i < data.length; i++) {
56 | if (mp.has(data[i])) {
57 | let foo = mp.get(data[i]);
58 | mp.set(data[i], foo + 1);
59 | }
60 | else {
61 | // mp[data[i]] = 1;
62 | mp.set(data[i], 1);
63 | }
64 | }
65 | if (mp.size === 0) {
66 | let final_string = "zer#";
67 | let output_message = "Compression complete and file sent for download" + '\n' + "Compression Ratio : " + (data.length / final_string.length);
68 | return [final_string, output_message];
69 | }
70 | if (mp.size === 1) {
71 | let key, value;
72 | for (let [k, v] of mp) {
73 | key = k;
74 | value = v;
75 | }
76 | let final_string = "one" + '#' + key + '#' + value.toString();
77 | let output_message = "Compression complete and file sent for download" + '\n' + "Compression Ratio : " + (data.length / final_string.length);
78 | return [final_string, output_message];
79 | }
80 | for (let [key, value] of mp) {
81 | this.heap.push([value, key]);
82 | }
83 |
84 | /// alternate way
85 | // mp.forEach(function (value, key) {
86 | // console.log([value, key]);
87 | // })
88 | while (this.heap.size() >= 2) {
89 | let min_node1 = this.heap.top();
90 | this.heap.pop();
91 | let min_node2 = this.heap.top();
92 | this.heap.pop();
93 | this.heap.push([min_node1[0] + min_node2[0], [min_node1, min_node2]]);
94 | }
95 | var huffman_tree = this.heap.top();
96 | this.heap.pop();
97 | this.codes = {};
98 | this.getCodes(huffman_tree, "");
99 |
100 | /// convert data into coded data
101 | let binary_string = "";
102 | for (let i = 0; i < data.length; i++) {
103 | binary_string += this.codes[data[i]];
104 | }
105 | let padding_length = (8 - (binary_string.length % 8)) % 8;
106 | for (let i = 0; i < padding_length; i++) {
107 | binary_string += '0';
108 | }
109 | let encoded_data = "";
110 | for (let i = 0; i < binary_string.length;) {
111 | let curr_num = 0;
112 | for (let j = 0; j < 8; j++, i++) {
113 | curr_num *= 2;
114 | curr_num += binary_string[i] - '0';
115 | }
116 | encoded_data += String.fromCharCode(curr_num);
117 | }
118 | let tree_string = this.make_string(huffman_tree);
119 | let ts_length = tree_string.length;
120 | let final_string = ts_length.toString() + '#' + padding_length.toString() + '#' + tree_string + encoded_data;
121 | let output_message = "Compression complete and file sent for download" + '\n' + "Compression Ratio : " + (data.length / final_string.length);
122 | return [final_string, output_message];
123 | }
124 |
125 | decode(data) {
126 |
127 | let k = 0;
128 | let temp = "";
129 | while (data[k] != '#') {
130 | temp += data[k];
131 | k++;
132 | }
133 | if (temp === "zer") {
134 | let decoded_data = "";
135 | let output_message = "Decompression complete and file sent for download";
136 | return [decoded_data, output_message];
137 | }
138 | if (temp === "one") {
139 | data = data.slice(k + 1);
140 | k = 0;
141 | temp = "";
142 | while (data[k] != '#') {
143 | temp += data[k];
144 | k++;
145 | }
146 | let one_char = temp;
147 | data = data.slice(k + 1);
148 | let str_len = parseInt(data);
149 | let decoded_data = "";
150 | for (let i = 0; i < str_len; i++) {
151 | decoded_data += one_char;
152 | }
153 | let output_message = "Decompression complete and file sent for download";
154 | return [decoded_data, output_message];
155 |
156 | }
157 | data = data.slice(k + 1);
158 | let ts_length = parseInt(temp);
159 | k = 0;
160 | temp = "";
161 | while (data[k] != '#') {
162 | temp += data[k];
163 | k++;
164 | }
165 | data = data.slice(k + 1);
166 | let padding_length = parseInt(temp);
167 | temp = "";
168 | for (k = 0; k < ts_length; k++) {
169 | temp += data[k];
170 | }
171 | data = data.slice(k);
172 | let tree_string = temp;
173 | temp = "";
174 | for (k = 0; k < data.length; k++) {
175 | temp += data[k];
176 | }
177 | let encoded_data = temp;
178 | this.index = 0;
179 | var huffman_tree = this.make_tree(tree_string);
180 |
181 | let binary_string = "";
182 | /// retrieve binary string from encoded data
183 | for (let i = 0; i < encoded_data.length; i++) {
184 | let curr_num = encoded_data.charCodeAt(i);
185 | let curr_binary = "";
186 | for (let j = 7; j >= 0; j--) {
187 | let foo = curr_num >> j;
188 | curr_binary = curr_binary + (foo & 1);
189 | }
190 | binary_string += curr_binary;
191 | }
192 |
193 | /// remove padding
194 | binary_string = binary_string.slice(0, -padding_length);
195 |
196 | /// decode the data using binary string and huffman tree
197 | let decoded_data = "";
198 | let node = huffman_tree;
199 | for (let i = 0; i < binary_string.length; i++) {
200 | if (binary_string[i] === '1') {
201 | node = node[1];
202 | }
203 | else {
204 | node = node[0];
205 | }
206 |
207 | if (typeof (node[0]) === "string") {
208 | decoded_data += node[0];
209 | node = huffman_tree;
210 | }
211 | }
212 | let output_message = "Decompression complete and file sent for download";
213 | return [decoded_data, output_message];
214 | }
215 | }
216 |
217 |
--------------------------------------------------------------------------------
/script.js:
--------------------------------------------------------------------------------
1 | /*
2 | Author : Samyak Jain
3 | Created on : 30 June 2020
4 | */
5 | // import { Codec } from "./codec_implementation.js";
6 |
7 | /// min heap implementation
8 | class MinHeap {
9 | constructor() {
10 | this.heap_array = [];
11 | }
12 |
13 | /// returns size of the min heap
14 | size() {
15 | return this.heap_array.length;
16 | }
17 |
18 | /// returns if the heap is empty
19 | empty() {
20 | return (this.size() === 0);
21 | }
22 |
23 | /// insert a new value in the heap
24 | push(value) {
25 | this.heap_array.push(value);
26 | this.up_heapify();
27 | }
28 |
29 | /// updates heap by up heapifying
30 | up_heapify() {
31 | var current_index = this.size() - 1;
32 | while (current_index > 0) {
33 | var current_element = this.heap_array[current_index];
34 | var parent_index = Math.trunc((current_index - 1) / 2);
35 | var parent_element = this.heap_array[parent_index];
36 |
37 | if (parent_element[0] < current_element[0]) {
38 | break;
39 | }
40 | else {
41 | this.heap_array[parent_index] = current_element;
42 | this.heap_array[current_index] = parent_element;
43 | current_index = parent_index;
44 | }
45 | }
46 | }
47 |
48 | /// returns the top element (smallest value element)
49 | top() {
50 | return this.heap_array[0];
51 | }
52 |
53 | /// delete the top element
54 | pop() {
55 | if (this.empty() == false) {
56 | var last_index = this.size() - 1;
57 | this.heap_array[0] = this.heap_array[last_index];
58 | this.heap_array.pop();
59 | this.down_heapify();
60 | }
61 | }
62 |
63 | /// updates heap by down heapifying
64 | down_heapify() {
65 | var current_index = 0;
66 | var current_element = this.heap_array[0];
67 | while (current_index < this.size()) {
68 | var child_index1 = (current_index * 2) + 1;
69 | var child_index2 = (current_index * 2) + 2;
70 | if (child_index1 >= this.size() && child_index2 >= this.size()) {
71 | break;
72 | }
73 | else if (child_index2 >= this.size()) {
74 | let child_element1 = this.heap_array[child_index1];
75 | if (current_element[0] < child_element1[0]) {
76 | break;
77 | }
78 | else {
79 | this.heap_array[child_index1] = current_element;
80 | this.heap_array[current_index] = child_element1;
81 | current_index = child_index1;
82 | }
83 | }
84 | else {
85 | var child_element1 = this.heap_array[child_index1];
86 | var child_element2 = this.heap_array[child_index2];
87 | if (current_element[0] < child_element1[0] && current_element[0] < child_element2[0]) {
88 | break;
89 | }
90 | else {
91 | if (child_element1[0] < child_element2[0]) {
92 | this.heap_array[child_index1] = current_element;
93 | this.heap_array[current_index] = child_element1;
94 | current_index = child_index1;
95 | }
96 | else {
97 | this.heap_array[child_index2] = current_element;
98 | this.heap_array[current_index] = child_element2;
99 | current_index = child_index2;
100 | }
101 | }
102 | }
103 | }
104 | }
105 | }
106 |
107 | /// coder decoder class
108 | class Codec {
109 | // constructor() {
110 | // this.codes = {};
111 | // }
112 |
113 | /// dfs
114 | getCodes(node, curr_code) {
115 | /// is leaf node
116 | if (typeof (node[1]) === "string") {
117 | /// alternate way
118 | this.codes[node[1]] = curr_code;
119 | return;
120 | }
121 |
122 | /// go left
123 | this.getCodes(node[1][0], curr_code + '0');
124 | /// go right
125 | this.getCodes(node[1][1], curr_code + '1');
126 | }
127 |
128 | /// make the humffman tree into a string
129 | make_string(node) {
130 | if (typeof (node[1]) === "string") {
131 | return "'" + node[1];
132 | }
133 | return '0' + this.make_string(node[1][0]) + '1' + this.make_string(node[1][1]);
134 | }
135 | /// make string into huffman tree
136 | make_tree(tree_string) {
137 | let node = [];
138 | if (tree_string[this.index] === "'") {
139 | this.index++;
140 | node.push(tree_string[this.index]);
141 | this.index++;
142 | return node;
143 | }
144 | this.index++;
145 | node.push(this.make_tree(tree_string)); // find and push left child
146 | this.index++;
147 | node.push(this.make_tree(tree_string)); // find and push right child
148 | return node;
149 | }
150 |
151 | /// encoder function
152 | encode(data) {
153 | this.heap = new MinHeap();
154 |
155 | var mp = new Map();
156 | for (let i = 0; i < data.length; i++) {
157 | if (mp.has(data[i])) {
158 | let foo = mp.get(data[i]);
159 | mp.set(data[i], foo + 1);
160 | }
161 | else {
162 | mp.set(data[i], 1);
163 | }
164 | }
165 | if (mp.size === 0) {
166 | let final_string = "zer#";
167 |
168 | let output_message = "Compression complete and file sent for download. " + '\n' + "Compression Ratio : " + (data.length / final_string.length).toPrecision(6);
169 | return [final_string, output_message];
170 | }
171 |
172 | if (mp.size === 1) {
173 | let key, value;
174 | for (let [k, v] of mp) {
175 | key = k;
176 | value = v;
177 | }
178 | let final_string = "one" + '#' + key + '#' + value.toString();
179 | let output_message = "Compression complete and file sent for download. " + '\n' + "Compression Ratio : " + (data.length / final_string.length).toPrecision(6);
180 | return [final_string, output_message];
181 | }
182 | for (let [key, value] of mp) {
183 | this.heap.push([value, key]);
184 | }
185 |
186 | /// alternate way
187 | // mp.forEach(function (value, key) {
188 | // console.log([value, key]);
189 | // })
190 | while (this.heap.size() >= 2) {
191 | let min_node1 = this.heap.top();
192 | this.heap.pop();
193 | let min_node2 = this.heap.top();
194 | this.heap.pop();
195 | this.heap.push([min_node1[0] + min_node2[0], [min_node1, min_node2]]);
196 | }
197 | var huffman_tree = this.heap.top();
198 | this.heap.pop();
199 | this.codes = {};
200 | this.getCodes(huffman_tree, "");
201 |
202 | /// convert data into coded data
203 | let binary_string = "";
204 | for (let i = 0; i < data.length; i++) {
205 | binary_string += this.codes[data[i]];
206 | }
207 | let padding_length = (8 - (binary_string.length % 8)) % 8;
208 | for (let i = 0; i < padding_length; i++) {
209 | binary_string += '0';
210 | }
211 | let encoded_data = "";
212 | for (let i = 0; i < binary_string.length;) {
213 | let curr_num = 0;
214 | for (let j = 0; j < 8; j++, i++) {
215 | curr_num *= 2;
216 | curr_num += binary_string[i] - '0';
217 | }
218 | encoded_data += String.fromCharCode(curr_num);
219 | }
220 | let tree_string = this.make_string(huffman_tree);
221 | let ts_length = tree_string.length;
222 | let final_string = ts_length.toString() + '#' + padding_length.toString() + '#' + tree_string + encoded_data;
223 | let output_message = "Compression complete and file sent for download. " + '\n' + "Compression Ratio : " + (data.length / final_string.length).toPrecision(6);
224 | return [final_string, output_message];
225 | }
226 |
227 | /// decoder function
228 | decode(data) {
229 | let k = 0;
230 | let temp = "";
231 | while (k < data.length && data[k] != '#') {
232 | temp += data[k];
233 | k++;
234 | }
235 | if (k == data.length){
236 | alert("Invalid File!\nPlease submit a valid compressed .txt file to decompress and try again!");
237 | location.reload();
238 | return;
239 | }
240 | if (temp === "zer") {
241 | let decoded_data = "";
242 | let output_message = "Decompression complete and file sent for download.";
243 | return [decoded_data, output_message];
244 | }
245 | if (temp === "one") {
246 | data = data.slice(k + 1);
247 | k = 0;
248 | temp = "";
249 | while (data[k] != '#') {
250 | temp += data[k];
251 | k++;
252 | }
253 | let one_char = temp;
254 | data = data.slice(k + 1);
255 | let str_len = parseInt(data);
256 | let decoded_data = "";
257 | for (let i = 0; i < str_len; i++) {
258 | decoded_data += one_char;
259 | }
260 | let output_message = "Decompression complete and file sent for download.";
261 | return [decoded_data, output_message];
262 |
263 | }
264 | data = data.slice(k + 1);
265 | let ts_length = parseInt(temp);
266 | k = 0;
267 | temp = "";
268 | while (data[k] != '#') {
269 | temp += data[k];
270 | k++;
271 | }
272 | data = data.slice(k + 1);
273 | let padding_length = parseInt(temp);
274 | temp = "";
275 | for (k = 0; k < ts_length; k++) {
276 | temp += data[k];
277 | }
278 | data = data.slice(k);
279 | let tree_string = temp;
280 | temp = "";
281 | for (k = 0; k < data.length; k++) {
282 | temp += data[k];
283 | }
284 | let encoded_data = temp;
285 | this.index = 0;
286 | var huffman_tree = this.make_tree(tree_string);
287 |
288 | let binary_string = "";
289 | /// retrieve binary string from encoded data
290 | for (let i = 0; i < encoded_data.length; i++) {
291 | let curr_num = encoded_data.charCodeAt(i);
292 | let curr_binary = "";
293 | for (let j = 7; j >= 0; j--) {
294 | let foo = curr_num >> j;
295 | curr_binary = curr_binary + (foo & 1);
296 | }
297 | binary_string += curr_binary;
298 | }
299 | /// remove padding
300 | binary_string = binary_string.slice(0, -padding_length);
301 |
302 | /// decode the data using binary string and huffman tree
303 | let decoded_data = "";
304 | let node = huffman_tree;
305 | for (let i = 0; i < binary_string.length; i++) {
306 | if (binary_string[i] === '1') {
307 | node = node[1];
308 | }
309 | else {
310 | node = node[0];
311 | }
312 |
313 | if (typeof (node[0]) === "string") {
314 | decoded_data += node[0];
315 | node = huffman_tree;
316 | }
317 | }
318 | let output_message = "Decompression complete and file sent for download.";
319 | return [decoded_data, output_message];
320 | }
321 | }
322 |
323 | /// onload function
324 | window.onload = function () {
325 | console.log("here onload");
326 |
327 | /// accesing dom elements
328 | decodeBtn = document.getElementById("decode");
329 | encodeBtn = document.getElementById("encode");
330 | fileForm = document.getElementById("fileform");
331 | uploadFile = document.getElementById("uploadfile")
332 | submitBtn = document.getElementById("submitbtn");
333 | step1 = document.getElementById("step1");
334 | step2 = document.getElementById("step2");
335 | step3 = document.getElementById("step3");
336 |
337 |
338 | isSubmitted = false;
339 | codecObj = new Codec();
340 |
341 | /// called when submit button is clicked
342 | submitBtn.onclick = function () {
343 | var uploadedFile = uploadFile.files[0];
344 | if (uploadedFile === undefined) {
345 | alert("No file uploaded.\nPlease upload a valid .txt file and try again!");
346 | return;
347 | }
348 | let nameSplit = uploadedFile.name.split('.');
349 | var extension = nameSplit[nameSplit.length - 1].toLowerCase();
350 | if (extension != "txt") {
351 | alert("Invalid file type (." + extension + ") \nPlease upload a valid .txt file and try again!");
352 | return;
353 | }
354 | alert("File submitted!");
355 | isSubmitted = true;
356 | onclickChanges("Done!! File uploaded !", step1);
357 | }
358 |
359 | /// called when compress button is clicked
360 | encodeBtn.onclick = function () {
361 | console.log("encode onclick");
362 | var uploadedFile = uploadFile.files[0];
363 | if (uploadedFile === undefined) {
364 | alert("No file uploaded.\nPlease upload a file and try again!");
365 | return;
366 | }
367 | if (isSubmitted === false) {
368 | alert("File not submitted.\nPlease click the submit button on the previous step\nto submit the file and try again!");
369 | return;
370 | }
371 | console.log(uploadedFile.size);
372 | if(uploadedFile.size === 0){
373 | alert("WARNING: You have uploaded an empty file!\nThe compressed file might be larger in size than the uncompressed file (compression ratio might be smaller than one).\nBetter compression ratios are achieved for larger file sizes!");
374 | }
375 | else if(uploadedFile.size <= 350){
376 | alert("WARNING: The uploaded file is very small in size (" + uploadedFile.size +" bytes) !\nThe compressed file might be larger in size than the uncompressed file (compression ratio might be smaller than one).\nBetter compression ratios are achieved for larger file sizes!");
377 | }
378 | else if(uploadedFile.size < 1000){
379 | alert("WARNING: The uploaded file is small in size (" + uploadedFile.size +" bytes) !\nThe compressed file's size might be larger than expected (compression ratio might be small).\nBetter compression ratios are achieved for larger file sizes!");
380 | }
381 | onclickChanges("Done!! Your file will be Compressed", step2);
382 | onclickChanges2("Compressing your file ...", "Compressed");
383 | var fileReader = new FileReader();
384 | fileReader.onload = function (fileLoadedEvent) {
385 | let text = fileLoadedEvent.target.result;
386 | let [encodedString, outputMsg] = codecObj.encode(text);
387 | myDownloadFile(uploadedFile.name.split('.')[0] + "_compressed.txt", encodedString);
388 | ondownloadChanges(outputMsg);
389 | }
390 | fileReader.readAsText(uploadedFile, "UTF-8");
391 | }
392 |
393 | // called when decompress button is clicked
394 | decodeBtn.onclick = function () {
395 | console.log("decode onclick");
396 | var uploadedFile = uploadFile.files[0];
397 | if (uploadedFile === undefined) {
398 | alert("No file uploaded.\nPlease upload a file and try again!");
399 | return;
400 | }
401 | if (isSubmitted === false) {
402 | alert("File not submitted.\nPlease click the submit button on the previous step\nto submit the file and try again!");
403 | return;
404 | }
405 | onclickChanges("Done!! Your file will be De-compressed", step2);
406 | onclickChanges2("De-compressing your file ...", "De-compressed");
407 | var fileReader = new FileReader();
408 | fileReader.onload = function (fileLoadedEvent) {
409 | let text = fileLoadedEvent.target.result;
410 | let [decodedString, outputMsg] = codecObj.decode(text);
411 | myDownloadFile(uploadedFile.name.split('.')[0] + "_decompressed.txt", decodedString);
412 | ondownloadChanges(outputMsg);
413 | }
414 | fileReader.readAsText(uploadedFile, "UTF-8");
415 | }
416 |
417 | }
418 |
419 | /// changes dom when step 1 and is complete ( step 2 is running)
420 | function onclickChanges(firstMsg, step) {
421 | step.innerHTML = "";
422 | let img = document.createElement("img");
423 | img.src = "assets/done_icon3.png";
424 | img.id = "doneImg";
425 | step.appendChild(img);
426 | var br = document.createElement("br");
427 | step.appendChild(br);
428 | let msg = document.createElement("span");
429 | msg.className = "text2";
430 | msg.innerHTML = firstMsg;
431 | step.appendChild(msg);
432 | }
433 |
434 | /// changes dom when step 2 is complete (step 3 is running)
435 | function onclickChanges2(secMsg, word) {
436 | decodeBtn.disabled = true;
437 | encodeBtn.disabled = true;
438 | step3.innerHTML = "";
439 | let msg2 = document.createElement("span");
440 | msg2.className = "text2";
441 | msg2.innerHTML = secMsg;
442 | step3.appendChild(msg2);
443 | // var br = document.createElement("br");
444 | // step3.appendChild(br);
445 | let msg3 = document.createElement("span");
446 | msg3.className = "text2";
447 | msg3.innerHTML = " , " + word + " file will be downloaded automatically!";
448 | step3.appendChild(msg3);
449 | }
450 |
451 | /// function to download file
452 | function myDownloadFile(fileName, text) {
453 | let a = document.createElement('a');
454 | a.href = "data:application/octet-stream," + encodeURIComponent(text);
455 | a.download = fileName;
456 | a.click();
457 | }
458 |
459 | /// changed dom when file is downloaded (step 3 complete)
460 | function ondownloadChanges(outputMsg) {
461 | step3.innerHTML = "";
462 | let img = document.createElement("img");
463 | img.src = "assets/done_icon3.png";
464 | img.id = "doneImg";
465 | step3.appendChild(img);
466 | var br = document.createElement("br");
467 | step3.appendChild(br);
468 | let msg3 = document.createElement("span");
469 | msg3.className = "text2";
470 | msg3.innerHTML = outputMsg;
471 | step3.appendChild(msg3);
472 | }
--------------------------------------------------------------------------------
/assets/sample2.txt:
--------------------------------------------------------------------------------
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent fringilla lorem massa, eget scelerisque mauris efficitur at. Suspendisse id ante auctor, faucibus lectus a, euismod risus. In tristique urna ultrices cursus fermentum. Sed sem velit, ornare eu lacus ullamcorper, tincidunt pharetra magna. Fusce eu sagittis eros. Pellentesque dapibus odio a ipsum vestibulum, nec scelerisque nisl malesuada. Vestibulum ut lectus nec orci porta viverra. Cras et tellus eu lacus posuere interdum.
2 |
3 | Quisque tempor suscipit felis, molestie porta metus tincidunt dapibus. Etiam ultrices convallis mi vitae semper. Quisque vel enim ac nibh mattis volutpat sit amet et turpis. Proin nunc lacus, molestie eu nunc non, sodales mollis elit. Nulla vel eros tortor. Aliquam dapibus, tortor eleifend dapibus iaculis, erat nunc porttitor nibh, non facilisis urna odio placerat urna. Aliquam erat volutpat. Nulla vel gravida enim. Praesent sit amet quam odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean ligula mauris, placerat id gravida non, posuere ac neque. Quisque volutpat congue lorem ut porttitor. Donec euismod risus ut velit scelerisque, vel aliquet sapien tempus. Phasellus eu arcu enim. Pellentesque gravida feugiat augue eu finibus.
4 |
5 | Donec pellentesque eleifend ex. Duis vestibulum euismod augue et malesuada. Vivamus fringilla felis sed sapien ultricies, et euismod turpis condimentum. Donec molestie felis sit amet dolor blandit, tristique ornare dui congue. In ornare, ante a sollicitudin aliquam, risus ex dapibus nisi, eu sagittis justo orci laoreet tellus. Fusce eget massa in arcu tempor euismod. Suspendisse rutrum nibh sed leo malesuada scelerisque. Curabitur nec tincidunt quam. Suspendisse auctor a est sit amet ultricies. Praesent faucibus massa ex, a maximus massa luctus quis. Quisque egestas, lectus a efficitur dignissim, sem leo aliquam ex, sit amet maximus libero felis eu magna. Cras eget ex mauris. Ut accumsan placerat luctus. Ut bibendum lectus dapibus, volutpat nulla eget, pharetra magna. Maecenas mattis tellus vitae nisl iaculis, in vehicula risus dignissim.
6 |
7 | Donec dapibus magna sit amet urna viverra rutrum. Donec non ex non neque sollicitudin accumsan eu sed odio. Mauris quis erat nec dui aliquet mattis in eget nunc. Maecenas finibus sem at lobortis vestibulum. Aliquam erat volutpat. Pellentesque lobortis dui quis tortor posuere molestie. Cras tempus id arcu at vestibulum. Phasellus non augue sed velit blandit suscipit. Sed nec eleifend metus, nec pharetra nunc. Aenean eu gravida felis. Nulla cursus eros at tempus efficitur. In hac habitasse platea dictumst. Sed quis risus id eros pretium pretium. Fusce sit amet pretium enim, eget bibendum elit.
8 |
9 | Aliquam sem eros, finibus in pharetra ac, rutrum ac mi. Nulla venenatis vulputate faucibus. Duis ut sagittis nunc. Fusce id efficitur libero. Nullam sodales suscipit magna ut euismod. Donec tincidunt, erat in venenatis bibendum, mauris elit pellentesque elit, eu scelerisque libero urna eu leo. Aenean sed libero tincidunt enim porta porttitor. Sed dignissim malesuada ligula eu volutpat. Phasellus nulla ante, semper et dolor et, iaculis maximus nisl. Fusce hendrerit cursus tempus. Duis mattis turpis sit amet pretium mollis. Nunc rutrum lacinia fringilla. Aenean metus risus, sodales vel mattis nec, vehicula sit amet risus. Nullam vel mauris vel diam dignissim porttitor ut quis dolor. In hac habitasse platea dictumst. Suspendisse ligula ante, tincidunt ac tristique sed, venenatis a elit.
10 |
11 | Nunc malesuada sodales molestie. Phasellus at sem tortor. In tristique purus sed tempus commodo. Sed sit amet egestas nunc. Morbi blandit porttitor lacus a egestas. Morbi quis facilisis neque, eu ullamcorper justo. Praesent pretium urna sed mi mollis placerat. Suspendisse varius aliquet lectus, sit amet egestas turpis varius a. Fusce tincidunt vitae libero quis eleifend. Etiam in lorem vitae felis pellentesque ornare quis et mauris. Suspendisse viverra finibus lacus, nec blandit eros tincidunt porttitor. Sed iaculis vestibulum est sed tincidunt.
12 |
13 | Etiam eu ligula nec nibh tincidunt facilisis. Nunc laoreet risus ac fermentum pharetra. Quisque feugiat, felis ultrices aliquam hendrerit, leo tellus mollis ipsum, sed consequat elit justo eget nunc. Mauris fringilla ex dui. Duis egestas bibendum leo at finibus. Curabitur vehicula eget mauris vel pellentesque. Cras nec fermentum mauris, sed semper ante. Praesent tincidunt blandit dolor id elementum. Phasellus hendrerit tempus sem ut blandit. Duis aliquet bibendum ipsum, imperdiet finibus libero luctus vel. Suspendisse euismod ipsum non turpis efficitur dignissim. Quisque tincidunt tortor et metus condimentum, vitae condimentum eros pretium.
14 |
15 | Duis nibh augue, egestas eu porttitor vitae, feugiat vel est. Aenean ornare tristique orci. Mauris et metus lectus. Nunc id condimentum diam, quis lacinia velit. Nullam et tincidunt dui, lobortis aliquet augue. Nunc tempus pretium mauris, ut euismod nulla vestibulum eu. Phasellus eu rhoncus quam, sit amet dignissim ante. Mauris tortor lectus, ullamcorper placerat faucibus vel, commodo vel nulla.
16 |
17 | In condimentum scelerisque lectus, at pellentesque purus sollicitudin vitae. Duis ornare hendrerit porttitor. Aenean fringilla facilisis tortor, a condimentum turpis luctus id. Phasellus malesuada lobortis accumsan. Vivamus tempus sodales velit et blandit. Aliquam neque lectus, consequat et lacinia ut, porttitor vel risus. Duis sagittis felis diam, non ultricies nisi consectetur ac. Donec dolor dui, molestie eget urna in, dignissim commodo felis. Etiam vel scelerisque justo. Curabitur auctor quam sed lectus feugiat accumsan. Vivamus egestas magna nec sapien tempor, sed tempor risus faucibus.
18 |
19 | Aenean non diam non justo fringilla facilisis. Suspendisse fermentum efficitur est non facilisis. Phasellus quam mi, blandit nec facilisis at, efficitur in purus. Vivamus accumsan tempus ex quis efficitur. In viverra condimentum facilisis. Aliquam tincidunt eros ipsum, ac porta quam tincidunt sit amet. Nulla non pharetra lacus, ut eleifend sapien. Nulla leo metus, lacinia a mi vel, vulputate varius risus. Duis at aliquam mauris, vel interdum nunc. Vestibulum eget libero sed massa eleifend placerat. Ut a neque ultricies elit semper tempor a at orci. In in purus in lectus sagittis tincidunt vel in elit. Praesent porttitor vehicula felis in efficitur. Nam elit risus, euismod nec tellus quis, ornare consectetur neque. Vivamus et ante varius, gravida nibh nec, bibendum orci.
20 |
21 | Etiam dui ante, fringilla sit amet convallis sollicitudin, finibus ultrices purus. In hac habitasse platea dictumst. Nam in mauris maximus, bibendum nulla vel, molestie nibh. In sed mauris efficitur enim molestie cursus. Nunc dignissim diam at dui ullamcorper cursus. Aliquam nisl eros, aliquam non enim ut, rhoncus lobortis lacus. Ut ut feugiat tellus. Proin facilisis pretium velit sit amet pharetra. Etiam efficitur ac magna a finibus.
22 |
23 | Duis non lorem sed est commodo molestie. Donec accumsan justo arcu, non pretium sem blandit porttitor. Aenean id ultrices lacus. Praesent vehicula, lacus quis tempus imperdiet, dolor eros volutpat quam, nec cursus nulla dui id elit. Nam viverra arcu in semper consequat. Suspendisse sollicitudin, dui eget ullamcorper elementum, mauris nisl ultricies lorem, sit amet ullamcorper ligula neque dictum nisi. Donec et nibh egestas, pharetra libero vitae, euismod tortor. Aliquam condimentum augue nec aliquet tempus. Nulla facilisi. Nulla malesuada, ligula sed malesuada varius, neque diam dignissim enim, vitae scelerisque metus tellus et diam.
24 |
25 | Etiam feugiat faucibus dignissim. Morbi dignissim nisi eget metus sagittis aliquet. Sed in hendrerit erat. Quisque laoreet finibus arcu vitae finibus. Phasellus dignissim est quis dolor fermentum tempor. Vivamus ullamcorper dolor in vestibulum aliquet. Vestibulum sodales nibh enim. Morbi aliquet nisl eu mauris viverra mattis. Duis in tincidunt leo. Praesent mauris dui, pharetra et arcu vel, malesuada suscipit nunc. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam suscipit efficitur augue, nec scelerisque lectus vulputate id. Nulla id rhoncus est.
26 |
27 | Nulla id pharetra nisl, a pellentesque erat. Praesent quis elit purus. Fusce id enim condimentum, dignissim dolor et, elementum elit. Nullam eleifend, tellus fermentum rhoncus vehicula, nulla neque fringilla sem, in accumsan lorem eros a dolor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum ac justo vel magna luctus varius. Praesent sagittis ornare urna, sed feugiat magna pellentesque sit amet. Fusce sed mi ultricies, ullamcorper tortor consequat, ornare ex. Donec accumsan, nulla a tincidunt convallis, augue felis elementum neque, non pharetra ligula dolor nec enim. Nulla porttitor risus mauris, non sodales enim vulputate ac.
28 |
29 | Vivamus ut nisi a libero hendrerit porttitor eget ac nunc. Aenean eu aliquet velit, a facilisis nunc. Phasellus odio nisl, aliquet vitae tellus eu, molestie ullamcorper nisl. Aenean placerat metus id luctus varius. Morbi facilisis tortor enim, id elementum tellus condimentum non. Integer aliquet, enim et commodo porttitor, ligula urna cursus augue, eu pellentesque leo lacus a turpis. Ut a convallis mi, ut posuere ante. Fusce vitae laoreet elit. Integer commodo sodales cursus. Donec ullamcorper in elit at imperdiet. Phasellus ut mollis lacus. Pellentesque mattis dui nulla, in fermentum tortor dapibus vitae. Vestibulum aliquam nec tellus eget aliquam.
30 |
31 | Curabitur lobortis vestibulum mauris, non porta nunc convallis non. Nullam mauris purus, sollicitudin quis mollis sed, malesuada ut lacus. Integer pretium leo nisl, at mattis dolor vulputate sed. Vestibulum convallis enim sit amet turpis aliquam mollis. Donec varius id diam quis placerat. Sed finibus arcu ut nibh tempor volutpat. Nullam convallis egestas tortor, a consequat felis fermentum id. Sed maximus justo sit amet nulla vulputate, euismod vestibulum eros iaculis. Nulla convallis libero neque, quis dictum mauris mattis ac. Donec volutpat odio sodales auctor blandit.
32 |
33 | Nulla a tellus ut augue scelerisque volutpat. Ut faucibus dolor quis justo rutrum scelerisque. Donec purus lectus, pellentesque eget metus eget, facilisis consequat mi. Mauris quis elit in lorem porttitor venenatis feugiat vel lacus. Aliquam est justo, scelerisque non urna eu, suscipit rhoncus erat. Duis volutpat ultrices velit, a posuere velit fringilla ut. Suspendisse ultrices arcu eget eros gravida, quis posuere diam hendrerit. Fusce neque turpis, euismod eget eros in, vulputate congue lacus. Quisque at maximus turpis, eget sagittis metus. Praesent at lorem massa. Proin egestas pulvinar ipsum, quis dictum felis lacinia id. Suspendisse potenti. Sed sit amet porta velit, quis tristique ante. Sed risus ligula, scelerisque quis orci non, sodales aliquet odio.
34 |
35 | Nullam euismod faucibus enim, at vestibulum sapien viverra eget. Maecenas non cursus arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam nibh nunc, ultrices at ultrices eget, ultrices nec sapien. Vivamus eleifend ante id consequat pharetra. Nullam ut ultrices elit. Cras gravida vulputate ipsum, quis ultricies eros ultricies quis. Nunc pellentesque lacinia purus in tempor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean sed suscipit urna, aliquam sodales leo. In non massa nibh. Fusce metus sem, vulputate non tortor nec, sodales scelerisque nibh. Fusce imperdiet risus ultricies turpis elementum, id sollicitudin leo euismod. Proin accumsan orci ut commodo aliquet.
36 |
37 | Fusce eget velit quam. In hac habitasse platea dictumst. Fusce non gravida felis, mattis vehicula nisi. Etiam id lorem vel metus tincidunt tempor dapibus nec sem. Mauris bibendum felis neque, et posuere sapien accumsan ut. Aenean at orci at diam facilisis vehicula. Nullam aliquet ipsum libero, at luctus enim pellentesque convallis. Phasellus eget lacinia erat. Donec fringilla sit amet lectus ac maximus. Integer efficitur, lectus non vestibulum ornare, nibh est tristique est, eu laoreet sem diam id mauris.
38 |
39 | Curabitur massa risus, egestas vel placerat sed, suscipit in nisl. Nullam sapien leo, malesuada eu lectus in, varius blandit mi. Quisque aliquet nisi et suscipit consequat. Suspendisse dolor dui, vehicula volutpat tempor a, tincidunt non sem. Curabitur pretium ante at mi convallis posuere. Nunc eu porta elit. Praesent ac dapibus ante, ut tincidunt magna. Sed tincidunt cursus eros sed sagittis. Donec tortor orci, dictum non elementum nec, convallis ut dolor. Suspendisse potenti. Phasellus eget mollis sem. Sed sit amet leo vestibulum, volutpat erat eu, dictum odio. Sed ut sem sed lacus placerat venenatis at at nunc. Vivamus vestibulum metus lectus, vel euismod felis sagittis in.
40 |
41 | Curabitur placerat luctus lacus ut scelerisque. Nunc turpis lectus, ultricies sit amet elit vel, pharetra faucibus lectus. Sed consectetur ligula quis sapien iaculis, in placerat ex faucibus. Proin ullamcorper mauris lectus, nec viverra tellus consequat id. Duis pulvinar, ante eget aliquam tincidunt, arcu sem eleifend turpis, a convallis sapien massa id augue. Nam fermentum semper arcu, sed sodales velit ultricies nec. Suspendisse auctor pretium rhoncus. Maecenas facilisis justo ac feugiat suscipit. Donec et molestie ligula, eu sodales quam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent id eleifend tellus, non tincidunt dolor. Aenean finibus velit et augue porttitor, non tempus risus tempus. Donec blandit accumsan rutrum.
42 |
43 | Nullam sit amet odio ac arcu fringilla bibendum vel sed libero. In dui mi, faucibus in elementum ut, luctus vel nibh. Mauris vulputate nibh turpis, ac semper leo finibus in. Vestibulum dolor velit, pharetra a feugiat et, ullamcorper quis magna. Duis rhoncus tortor enim, sit amet pretium ligula semper eu. Ut molestie turpis tempus aliquet rhoncus. Pellentesque dignissim enim eget neque ornare hendrerit. Nunc mollis mauris vitae lacus pulvinar elementum. Curabitur nec massa laoreet ex laoreet volutpat. Morbi id velit vel leo egestas elementum. Nulla aliquam rhoncus diam ac vehicula. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque dictum lectus sed ex pretium consequat. Integer vitae lobortis turpis.
44 |
45 | Vestibulum tempus, lorem tempus congue cursus, quam purus lobortis mauris, nec consequat elit nibh eget urna. Sed et lacus a augue ultrices ornare. Nullam laoreet felis nec suscipit fermentum. Fusce in ex vestibulum, placerat eros ac, placerat urna. In hac habitasse platea dictumst. Praesent metus elit, luctus at ornare vel, vehicula non nisi. Donec tempus mi urna, sed condimentum arcu dignissim eget. Donec quis interdum nulla. Aenean at diam viverra, scelerisque tortor sed, vehicula massa. Phasellus sodales, nisi ac vulputate faucibus, odio nisl eleifend arcu, id rhoncus augue justo et nunc. Morbi cursus sed dui non scelerisque. Interdum et malesuada fames ac ante ipsum primis in faucibus.
46 |
47 | Aliquam eleifend pharetra faucibus. Donec pulvinar malesuada lobortis. Nulla orci ipsum, ultricies in ullamcorper vitae, dapibus non sapien. Aenean tempus, nisl a rhoncus tristique, felis massa commodo nibh, non semper ante mauris vel dolor. Ut condimentum gravida neque vel semper. Aliquam vitae commodo lacus. Vestibulum tempus, risus imperdiet vehicula porta, libero purus ornare turpis, non pharetra mi nisi eleifend elit. Nulla sodales, nisl at lacinia hendrerit, nibh ex commodo justo, id dictum elit nisi in turpis.
48 |
49 | Morbi eu fringilla neque, eget pellentesque dolor. Aenean felis purus, egestas sit amet nisi in, imperdiet pellentesque ligula. Vivamus gravida, eros non volutpat semper, libero arcu scelerisque arcu, non mollis sem nunc a tellus. Etiam auctor lectus ac urna rhoncus, ut sollicitudin turpis dictum. Aenean nec vestibulum urna. Donec imperdiet mauris et risus blandit, quis commodo odio luctus. Ut pulvinar sapien metus, tempor fringilla augue eleifend ac.
50 |
51 | Maecenas semper ante metus. Mauris bibendum, libero ut tempus consequat, est augue dictum orci, quis iaculis mauris purus vitae nisi. In mattis lorem et nunc venenatis pretium. Integer sagittis porta urna, eget vulputate neque gravida rutrum. Donec eu iaculis purus. Pellentesque sit amet dui sed urna ornare hendrerit. Morbi commodo ex eu viverra laoreet. Vivamus in sem quis arcu lacinia condimentum eget fermentum felis.
52 |
53 | Suspendisse commodo tellus in arcu ultrices condimentum. Morbi ut nisl sit amet libero varius feugiat vel sed metus. Aenean luctus gravida justo at efficitur. Cras vulputate tellus nec efficitur finibus. Aenean urna ipsum, porttitor et felis in, vulputate euismod libero. Etiam in tincidunt libero. Pellentesque varius varius scelerisque. Duis pretium venenatis neque nec pretium.
54 |
55 | Sed pulvinar nibh non urna auctor, laoreet rutrum leo pretium. Sed lacinia mi sit amet quam commodo ullamcorper. Vivamus sit amet mi in leo ultricies consectetur. In vitae nisl quis nisl pulvinar pharetra nec id justo. Curabitur egestas quis turpis quis lacinia. Praesent consectetur facilisis mauris a placerat. Aliquam erat volutpat. Donec pharetra volutpat elit ornare cursus.
56 |
57 | Donec non magna urna. Cras ut justo nisl. Etiam arcu eros, tempor a magna in, consequat sollicitudin purus. Vestibulum ut nulla at metus fringilla interdum id sit amet ex. Proin quis nulla sollicitudin, egestas dui vel, posuere enim. Suspendisse vulputate dui vel magna viverra scelerisque. Vestibulum at aliquet lectus, a posuere massa. Aliquam ac fringilla erat.
58 |
59 | Ut posuere est sed eleifend pulvinar. Etiam quis pulvinar augue. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Quisque finibus, mi sit amet malesuada ultrices, odio lacus placerat libero, non rhoncus magna erat vel libero. Sed convallis magna elit, malesuada congue magna rhoncus eget. Aliquam sed hendrerit erat. Vestibulum efficitur justo sit amet tellus efficitur egestas. Mauris auctor nunc vel felis rhoncus, at bibendum metus aliquam. Phasellus eu orci condimentum magna maximus gravida ut vitae urna. Aliquam sagittis rhoncus lacus vel dignissim. Suspendisse finibus tellus id augue volutpat semper. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla massa mi, auctor ut faucibus et, volutpat eget eros. Curabitur vestibulum ut elit vitae maximus.
60 |
61 | Ut felis augue, congue vitae ex eu, mollis rhoncus nisi. Praesent pharetra ipsum purus, sed ultricies nunc mattis sed. Duis sodales molestie pretium. Curabitur risus nibh, posuere vel libero nec, tristique consequat mauris. Curabitur id congue nisi. Integer suscipit augue fringilla dolor pretium accumsan. Aenean et sapien eget risus interdum consequat in vel tortor. Suspendisse laoreet varius ornare. Fusce ut leo vel leo blandit efficitur. Ut elementum ante mi, a tincidunt arcu porttitor quis. Vestibulum volutpat enim quis elit porttitor, vitae imperdiet lorem molestie. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed risus mauris, convallis feugiat eros in, pretium faucibus massa. Praesent quis libero id lacus fringilla varius.
62 |
63 | Integer sollicitudin, dolor non scelerisque porta, nibh mauris cursus quam, sit amet euismod dolor ante tristique mi. In hac habitasse platea dictumst. Fusce a elit ut risus volutpat sagittis ut nec urna. Sed lacinia aliquet purus eu semper. Cras vel erat mollis, finibus libero et, accumsan odio. Integer ullamcorper dolor est. Vivamus condimentum, justo vel tincidunt tincidunt, nisl purus commodo diam, eu placerat lacus ligula sed nunc.
64 |
65 | Nam ac accumsan libero, ac laoreet purus. Sed ex libero, hendrerit vel fringilla id, mollis a velit. Nulla vel varius purus. Morbi at fringilla tortor, et mattis arcu. Nulla aliquet vestibulum nisi, sit amet facilisis urna malesuada ultricies. Sed tempor ipsum et orci pulvinar sodales. Donec ac efficitur enim, id commodo nulla. Pellentesque condimentum risus ut libero tristique, at finibus justo pharetra. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nullam aliquam magna velit, quis efficitur quam sodales at. Quisque lobortis felis et tortor placerat, et maximus ipsum auctor. Nulla in suscipit mi. Sed finibus ligula nec tortor tristique tempor. Nullam porta est id tellus pulvinar vestibulum.
66 |
67 | Quisque interdum lectus turpis, eget cursus leo tempus sed. Cras aliquet molestie lacinia. Etiam porta dui ac dapibus congue. Suspendisse potenti. Donec egestas dui id ipsum tempor, ac scelerisque libero ornare. Sed tortor augue, faucibus id est ut, rutrum vulputate libero. Nam vel nunc et tellus rhoncus interdum vitae a nibh. Aenean at ipsum dictum, ultricies sapien et, tempus neque. Curabitur a velit sed libero molestie interdum ultricies vitae lorem. In ut semper nulla. Ut semper urna a purus faucibus condimentum. Integer condimentum nisi id lorem varius iaculis.
68 |
69 | Fusce tincidunt tempor felis, ac condimentum eros efficitur vel. Nam ornare vitae dolor in bibendum. Etiam dignissim tellus tortor, sit amet tincidunt risus ultricies eget. Nullam velit augue, bibendum eu ullamcorper vitae, ultrices bibendum nulla. Aliquam laoreet hendrerit tempus. Nunc tincidunt neque eu diam euismod sollicitudin vitae nec arcu. Morbi volutpat, libero vitae tincidunt condimentum, mauris libero efficitur sem, a molestie sem elit et dui. Aliquam imperdiet mattis congue. Mauris volutpat tellus cursus molestie viverra. Fusce nec dolor eget dui interdum porta. Phasellus lobortis fringilla pretium. Vivamus at volutpat nisi. Vestibulum vitae fermentum magna, at aliquam risus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum dignissim dui in urna tempor, non vehicula ligula commodo.
70 |
71 | Donec nec lorem eu mauris vehicula mollis. Sed pellentesque mollis laoreet. Integer vitae ante et erat consectetur aliquet eget ac mauris. Aliquam erat volutpat. Aenean tincidunt dictum est in consequat. Vestibulum egestas eu mauris at euismod. Aenean diam odio, ullamcorper quis consequat maximus, molestie at ligula. Morbi pellentesque eros lorem, a feugiat ipsum venenatis eget. Mauris eu augue in tortor dapibus pharetra vel eu nibh. Praesent fringilla libero ante. Etiam vel eleifend eros, sed elementum enim. Vestibulum eros nisl, suscipit eu auctor at, lobortis et lectus. Maecenas interdum sem a libero maximus, non sodales justo efficitur. Nulla finibus, diam ac maximus interdum, eros nulla pulvinar sem, bibendum sagittis felis neque non neque.
72 |
73 | Nunc sed nisl non lacus pellentesque vestibulum. Suspendisse blandit velit sit amet ipsum elementum, nec mollis diam rutrum. Vivamus a tempor urna. Aliquam erat volutpat. Aliquam lectus urna, tristique non metus eu, consectetur dignissim lectus. Vestibulum ac nulla dapibus, pulvinar felis quis, facilisis lacus. Suspendisse sollicitudin egestas nibh, sit amet placerat dui ultricies vitae.
74 |
75 | Sed placerat ante mauris. Donec eget ullamcorper nulla. Sed commodo dolor sit amet nulla lobortis egestas. In porttitor, ex non porta pulvinar, ipsum felis ultrices quam, nec dapibus est sem lobortis nisl. Quisque tincidunt dui augue, quis luctus ligula mattis vitae. Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur maximus iaculis augue id rutrum. Vivamus maximus, est et suscipit sagittis, dolor odio accumsan est, vitae dignissim neque ex sed quam. Donec in euismod massa. Sed nisl ex, interdum ac accumsan id, faucibus non elit.
76 |
77 | Curabitur ornare eleifend sollicitudin. Praesent vulputate tincidunt vestibulum. Nulla scelerisque libero eget scelerisque porta. Curabitur dapibus erat sit amet ligula bibendum, faucibus fringilla lorem volutpat. Ut luctus leo libero, et bibendum quam efficitur id. Ut a velit eros. Proin aliquet, massa quis convallis posuere, eros orci faucibus velit, in molestie enim felis vitae lorem. Suspendisse auctor, sem vitae lobortis luctus, elit magna efficitur diam, a efficitur velit tortor et diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec mattis quam ut nibh ultricies, ut placerat justo interdum. Morbi pretium leo tristique ante bibendum, ac dapibus urna venenatis.
78 |
79 | Curabitur justo neque, volutpat id metus at, accumsan accumsan urna. Morbi ut justo odio. Ut eu felis faucibus, porttitor ante volutpat, auctor turpis. Proin ac massa malesuada, eleifend orci quis, dapibus est. Maecenas pellentesque faucibus congue. Nullam suscipit ac mi sit amet efficitur. Donec vel porttitor dolor. Aliquam erat volutpat. Donec aliquam tempus purus, ac malesuada arcu volutpat vitae. Sed accumsan volutpat neque, ac porta odio. Integer tempor lectus est, nec sodales leo porta ac. Mauris laoreet eu velit ut tristique. Nam convallis accumsan metus sed ullamcorper.
80 |
81 | Nam dignissim purus sed sapien venenatis, quis elementum orci cursus. Aenean rutrum neque eu mauris dapibus, sit amet blandit libero aliquam. Donec convallis orci ipsum, vitae ultrices felis finibus quis. Curabitur porttitor vel lectus non fermentum. Vivamus nibh mi, pulvinar eget sapien vel, sodales varius dui. Integer et dignissim lectus. Donec a libero massa.
82 |
83 | Sed quis ultricies eros. Pellentesque pharetra nulla aliquet sollicitudin mollis. Ut placerat fringilla dui, eget feugiat ex ultricies id. Nunc et malesuada nunc. Sed et justo et velit pellentesque volutpat. Quisque at magna id sem suscipit blandit. Nam ut venenatis nibh. Aliquam erat volutpat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Quisque dapibus non justo vitae rhoncus. In sodales dapibus scelerisque. Pellentesque eu condimentum dolor, rutrum consequat magna. Aenean sollicitudin luctus dui. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
84 |
85 | Suspendisse quis velit quis quam faucibus luctus id eu urna. Integer sit amet tempus justo. In aliquet ante ex. Nunc ornare finibus est, elementum ornare purus commodo at. Nullam iaculis fringilla lectus, facilisis porta augue consectetur non. Nullam at posuere nunc. Nullam convallis magna eget consectetur placerat. Ut in enim in orci imperdiet hendrerit. Donec varius quam eget mi iaculis, pellentesque interdum nisl auctor. Pellentesque urna felis, bibendum sit amet turpis a, tincidunt porta dui. Morbi posuere tempus neque non scelerisque. Sed tincidunt nunc eros, sed molestie metus efficitur in.
86 |
87 | Cras posuere justo at dui congue varius. Nulla nec tincidunt tortor. Aliquam consequat finibus ante vitae hendrerit. Vestibulum ex purus, varius vitae enim at, tristique ultricies neque. Integer nisl neque, molestie congue libero et, fermentum tincidunt quam. Suspendisse malesuada vulputate finibus. Mauris tempor semper massa ac pellentesque. Curabitur varius erat non ultrices luctus. Donec vulputate suscipit quam, in laoreet neque facilisis nec. Proin a aliquet nulla. Fusce ac lacus ultrices, tristique augue quis, imperdiet magna. Suspendisse consectetur tellus id venenatis pharetra.
88 |
89 | Etiam sit amet nunc felis. Vestibulum vitae iaculis nunc. Vestibulum pellentesque, enim ut blandit bibendum, nulla arcu blandit nisi, vitae dapibus diam urna cursus dolor. Nam efficitur semper felis non condimentum. Sed turpis augue, elementum vel faucibus semper, vehicula non velit. Nullam posuere rhoncus leo id finibus. Vivamus ornare tempor justo non congue. Vivamus est risus, congue id mi id, tincidunt semper ipsum. Integer auctor massa odio, et dictum enim fermentum eu. Phasellus eget purus felis. Phasellus sit amet euismod justo. Nam in dignissim justo, eget vestibulum justo. Proin volutpat diam sit amet semper luctus. Mauris pharetra ligula eget odio imperdiet, eu maximus felis ultrices.
90 |
91 | Curabitur mollis iaculis luctus. Nam non urna a nunc sodales lobortis sed id sem. Donec sit amet efficitur dolor. Sed imperdiet magna et urna mollis, id tempus nisi fermentum. Cras sit amet leo quis nulla semper pulvinar nec id mi. Nunc erat massa, pellentesque ut massa at, mollis venenatis sapien. Morbi varius justo vel enim eleifend mollis. Fusce ultricies euismod dolor, ac posuere orci dignissim a.
92 |
93 | Fusce velit sem, laoreet eget placerat vel, pretium ac velit. Fusce nec leo ut odio ornare pellentesque commodo vitae erat. Ut tincidunt cursus enim, eu euismod turpis fermentum non. Vivamus at elementum metus. Ut aliquam tincidunt odio id sagittis. Donec imperdiet, ex non ornare molestie, dui ex congue velit, a dapibus odio orci laoreet nulla. Vestibulum eget iaculis tortor. Duis nec enim ac est pretium tempus ac vel dolor. Cras venenatis lorem nec urna consequat, ultricies luctus leo accumsan.
94 |
95 | Duis blandit ex velit, at feugiat nibh dictum eget. Praesent quis massa dignissim, elementum est ut, pulvinar turpis. Aliquam efficitur libero ac ipsum auctor bibendum. Nam ac lorem molestie, porta sapien sit amet, tempus justo. Aliquam sapien urna, sagittis sit amet orci sit amet, porttitor vestibulum est. Praesent lectus quam, lobortis et metus at, accumsan sagittis nisl. Ut et lacus quis erat luctus mattis. Vestibulum tempor et massa eu hendrerit. Phasellus ut metus dui. Sed arcu dui, maximus vitae ex ut, elementum ultrices mi. Etiam ultrices, nunc non viverra pretium, tellus leo rutrum turpis, in vestibulum orci lacus at est. Proin ultricies faucibus dignissim. Ut sed rhoncus metus. Aenean suscipit, orci convallis faucibus venenatis, nunc orci feugiat purus, sed iaculis purus magna sit amet risus. In tempor viverra condimentum. Etiam ac tristique metus, elementum cursus felis.
96 |
97 | Mauris et luctus quam, sed elementum libero. Phasellus condimentum, nibh id vulputate consectetur, ligula tortor vestibulum risus, quis lobortis est tortor ac elit. Nam aliquam libero urna, sit amet cursus augue eleifend in. Vestibulum enim neque, interdum eu eros vitae, euismod rutrum leo. Vestibulum non elit leo. In risus dui, suscipit sed justo eu, ornare cursus massa. Nulla ac metus non lacus tempus feugiat. Duis et turpis a enim venenatis auctor vel sit amet urna.
98 |
99 | Maecenas volutpat laoreet dui, non posuere odio vestibulum sit amet. Fusce eget dui eu nunc posuere finibus. In et est tempus mauris varius commodo a in lacus. Fusce vel ex turpis. Aliquam sodales vestibulum turpis, nec malesuada sapien congue ac. In hac habitasse platea dictumst. Ut eu sagittis nulla. Praesent maximus tempus purus, sed finibus erat sollicitudin ac. Aenean hendrerit elit quis diam fermentum, cursus mollis tortor elementum. Fusce ac auctor lectus.
100 |
101 | Quisque viverra dui at convallis lacinia. Duis eu nisl placerat tortor egestas commodo. Phasellus vitae congue mauris. Praesent consequat, odio et tincidunt dictum, neque erat auctor sem, dapibus mollis sem dui non felis. Nam feugiat facilisis dignissim. Proin lectus felis, dictum vitae consequat in, molestie ac augue. Morbi accumsan hendrerit quam, sed ultricies risus elementum a. Phasellus sit amet risus nisl. Donec quis interdum enim. Suspendisse aliquam ipsum tortor. In scelerisque feugiat tortor, ac semper nulla egestas eget. Sed id purus mattis, laoreet risus a, venenatis orci. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam gravida lectus at risus fermentum, vitae pharetra ante congue.
102 |
103 | Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum eget tincidunt sem, vitae commodo ligula. Proin sed porta lorem, in facilisis lacus. Donec vehicula arcu sit amet urna viverra, ac pharetra metus ullamcorper. Phasellus quis turpis id urna convallis hendrerit. Donec ut molestie arcu, ornare volutpat quam. Vestibulum scelerisque tristique turpis, fringilla consequat nisl blandit nec. Vestibulum maximus eget arcu id egestas.
104 |
105 | Vestibulum nec elementum urna, at laoreet felis. Nunc et leo luctus, consectetur tellus ut, commodo dui. Fusce at tortor dictum, mattis dolor vel, suscipit augue. Curabitur at purus et leo interdum tempor at vitae sem. Nam elementum ante ut ante viverra congue. Quisque imperdiet quam ac dolor aliquam, in sodales odio porttitor. Etiam auctor ligula feugiat, sollicitudin ipsum non, sagittis mi. In cursus nibh nisi, nec lacinia sapien consequat a. Nunc ornare tempus aliquet. Duis sodales est ut auctor varius. Nunc elit erat, luctus sit amet ornare id, placerat sit amet augue. Donec in leo vestibulum, vehicula elit ac, iaculis elit. Vivamus consectetur sed elit nec elementum.
106 |
107 | In viverra nulla sit amet sapien sollicitudin faucibus. Nulla facilisi. Mauris magna sapien, commodo vitae felis vitae, ultricies laoreet est. Cras fringilla nisl lacus, nec mattis dui pharetra et. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse neque neque, sollicitudin vitae suscipit in, consequat ac ex. Donec nec sollicitudin risus. Integer ac felis id neque cursus volutpat id vel metus. Aenean mollis magna sit amet hendrerit sodales. Quisque vestibulum ligula pellentesque auctor fringilla. Ut suscipit nunc a rhoncus porta. Mauris auctor facilisis nunc non ultrices. Sed dignissim porttitor justo, eu suscipit quam cursus vehicula. Donec mauris sapien, mattis scelerisque nisi vitae, hendrerit varius odio.
108 |
109 | Quisque quis quam sit amet dolor feugiat consequat quis ac metus. Cras et placerat lorem. Integer consectetur tempus suscipit. Aliquam enim tellus, dignissim ac eros eget, iaculis condimentum leo. Morbi vestibulum dui sit amet facilisis faucibus. Cras vestibulum, enim vel euismod efficitur, metus leo euismod magna, tempus viverra sem ligula pulvinar justo. Morbi ultrices, metus vitae ultricies sodales, dolor orci suscipit velit, eu vehicula est magna at lorem. Morbi tempor, velit sed sollicitudin molestie, erat ex fermentum justo, hendrerit tempor dolor odio at orci.
110 |
111 | Nullam vel molestie enim. Aliquam venenatis massa vitae semper consectetur. Fusce vehicula ligula id mattis tristique. In efficitur, massa nec sollicitudin ultrices, felis est fermentum risus, eu semper justo libero at mi. Nullam interdum tellus consequat, vehicula lectus sit amet, gravida nisl. Maecenas cursus dui sit amet pretium interdum. Cras imperdiet tellus neque, vel consectetur enim bibendum a. Cras feugiat libero sed lacus euismod, id venenatis lacus condimentum. Suspendisse posuere lacinia tellus sit amet molestie. Phasellus turpis velit, maximus sed dictum sed, sollicitudin eu ipsum. Suspendisse sagittis mauris et diam fringilla, sed sagittis odio aliquet. Nam at convallis leo, cursus porttitor erat. Aliquam erat volutpat. Vivamus massa metus, aliquet rhoncus eros nec, mollis auctor nulla. Cras eleifend dui non felis pulvinar pulvinar.
112 |
113 | Pellentesque dictum sagittis massa semper gravida. Donec ut metus vitae augue finibus scelerisque at vel orci. Aenean pharetra, velit et eleifend cursus, magna libero elementum sem, in efficitur enim quam vitae diam. Aenean ullamcorper diam ullamcorper finibus elementum. Maecenas nisl enim, consequat vitae mauris porta, aliquet fringilla urna. Nullam convallis dapibus commodo. Suspendisse ante lectus, placerat eget nunc vel, semper laoreet dui. Etiam sagittis dolor sed sagittis scelerisque. Quisque sit amet iaculis quam.
114 |
115 | Donec non lobortis arcu. Ut facilisis eros pellentesque ante iaculis rutrum. Donec facilisis diam eget est sagittis dictum. Integer risus dolor, molestie nec purus a, tempor molestie nunc. Donec mi nisl, cursus a imperdiet ac, dignissim eu quam. Phasellus tincidunt tincidunt libero, ut semper justo pharetra id. Donec convallis urna auctor commodo malesuada. Nunc feugiat aliquam egestas. Aenean at nisl pulvinar, viverra tellus non, ultricies nisi. Suspendisse vitae molestie magna. Maecenas dictum ex sit amet sem lacinia consectetur. Duis maximus felis ac massa euismod, nec suscipit dui condimentum. Pellentesque nec enim ut tortor varius convallis.
116 |
117 | Quisque dolor nunc, dapibus in luctus quis, pretium ac elit. Curabitur euismod sodales massa, fermentum ullamcorper nibh rutrum ac. Suspendisse ut malesuada nibh. Praesent sit amet lacinia ante. Mauris blandit, felis sit amet consectetur aliquam, nibh nibh condimentum nibh, eget luctus neque velit in risus. Vestibulum tincidunt pellentesque velit quis lobortis. Donec dignissim, augue dignissim congue molestie, lorem nisi vehicula enim, nec pretium elit nibh eu dui. Cras a augue eu orci cursus ullamcorper at ac lacus.
118 |
119 | Vestibulum a ligula porta, euismod arcu a, pretium sem. Cras dolor velit, aliquam a mauris a, dapibus dictum urna. Etiam et quam lacinia, tincidunt elit vitae, cursus purus. Praesent egestas, quam id bibendum egestas, magna enim vestibulum nisl, sit amet iaculis nibh velit non ipsum. Nulla maximus ipsum in lectus luctus molestie. Vivamus tempor est at mattis tempus. Fusce sodales, arcu ac tristique vulputate, metus tellus efficitur sapien, lacinia condimentum neque mi quis lacus. Praesent vel enim et libero hendrerit sollicitudin. Aliquam quis ex a orci accumsan fringilla in eu elit.
120 |
121 | Aenean cursus tincidunt elit sed molestie. In urna leo, porttitor vitae rhoncus vitae, vulputate at lorem. Phasellus mauris nunc, mattis eu velit eu, vestibulum sagittis dolor. Duis facilisis risus gravida ipsum pharetra, sit amet iaculis urna feugiat. Suspendisse in sem quis metus blandit consectetur sit amet eget ligula. Praesent vulputate lacinia lectus non feugiat. Nulla id lectus ut lorem pellentesque vulputate.
122 |
123 | Maecenas elementum fringilla condimentum. Aenean interdum nisl id feugiat consectetur. In varius, felis sed mattis consectetur, eros neque dapibus felis, sed porttitor turpis enim id sem. Donec purus nunc, aliquam at suscipit eu, sodales in leo. Nulla facilisi. Suspendisse sed risus in turpis dictum dignissim vel ut risus. Quisque dui eros, dignissim mattis velit at, dictum fermentum nisi. Pellentesque fermentum ut velit egestas efficitur. Maecenas aliquam mollis nulla. Quisque ornare malesuada magna, eu rutrum metus sagittis et. Maecenas mollis vulputate nisi. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Suspendisse non neque turpis. In varius lacinia nisi, vel luctus leo mollis eget. Pellentesque accumsan tellus at libero commodo tincidunt. Curabitur quis leo et ante condimentum sagittis.
124 |
125 | Morbi semper pellentesque justo, sed dictum ipsum efficitur vel. Vestibulum imperdiet lacus a nisi blandit, a feugiat elit dignissim. Vivamus eget sollicitudin ipsum. In metus nulla, euismod eget magna ac, finibus interdum nisl. Duis id risus mi. Praesent nec urna sed turpis facilisis mattis a ut dolor. In consectetur, velit vitae ultricies venenatis, lorem mauris finibus nibh, quis egestas leo est eu libero. Praesent turpis mauris, dapibus id aliquet vitae, ultricies ac dolor. Praesent velit erat, laoreet eget dictum ac, vehicula nec massa.
126 |
127 | Ut pharetra magna at libero rhoncus, et laoreet mauris sodales. Nam a libero hendrerit, aliquet ante a, euismod ligula. Quisque cursus risus ut consectetur convallis. Nunc vel eros id lacus dapibus dignissim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Cras non ultrices justo, quis consequat ante. Vivamus vitae pulvinar arcu.
128 |
129 | Nunc fermentum, massa et laoreet varius, ligula ex tincidunt arcu, at eleifend arcu turpis eget lectus. Nulla venenatis, nulla vel rutrum semper, mi mi posuere sem, a maximus lacus massa pretium lectus. Vestibulum ultricies eros quis fermentum egestas. Maecenas in justo eu diam finibus placerat id non nisl. Proin sit amet quam leo. Ut bibendum egestas nulla a pellentesque. Proin congue nisl eu augue malesuada elementum. Proin ac nulla consectetur, semper quam et, pharetra libero. Aenean pulvinar laoreet fermentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec pulvinar eleifend ultrices.
130 |
131 | Integer id diam id ex suscipit sagittis et eget lorem. Praesent vel urna sit amet sem euismod cursus. Nulla porttitor ipsum quis velit tristique, nec placerat justo rhoncus. Fusce vitae eros nec nibh consequat vehicula. Mauris sit amet blandit elit, quis vulputate velit. Morbi vel scelerisque leo. Donec sit amet efficitur ex. Phasellus convallis tempor nulla a gravida. Etiam nisl leo, tincidunt a venenatis eu, interdum eu risus. Nulla in ex vitae libero dapibus mattis.
132 |
133 | Curabitur mi risus, interdum vitae elit eu, interdum interdum ipsum. Aenean nec nulla nisi. Sed quis diam id velit consectetur laoreet. Duis eget gravida nibh, et porta urna. In metus mi, porta sed lectus quis, aliquam molestie mi. Aenean mollis leo vel sapien imperdiet, a imperdiet velit pulvinar. Vestibulum mattis magna vel mi aliquam elementum.
134 |
135 | In hac habitasse platea dictumst. Aenean massa quam, hendrerit sed sodales non, dictum in nisl. Donec viverra orci quis pharetra euismod. Quisque eget placerat neque. In hac habitasse platea dictumst. Nulla leo velit, facilisis vitae rutrum sed, bibendum vitae massa. Proin imperdiet, felis vel pharetra tincidunt, ex lorem sagittis arcu, a placerat tortor mi varius dolor. Aliquam quis dictum lectus. Sed vitae tristique enim. In semper neque at tristique dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam nunc sem, malesuada nec massa at, mattis blandit orci.
136 |
137 | Sed quis ipsum eu dolor porttitor ullamcorper. Duis vel augue lorem. Curabitur congue cursus vulputate. Sed venenatis egestas urna rhoncus sodales. Nam ut viverra purus. Etiam est leo, feugiat at consequat vel, gravida eu dolor. Etiam tempus enim eget neque mollis pellentesque. Morbi aliquam justo eu aliquam vulputate. In hac habitasse platea dictumst. Nullam ligula lacus, tincidunt sit amet erat quis, malesuada fermentum dui. Quisque ut malesuada quam, non sollicitudin leo. Duis sagittis tellus quis libero rhoncus, sollicitudin porttitor lorem consectetur. Donec mollis libero id odio pretium cursus. Donec eleifend erat sit amet augue congue, non vestibulum elit dictum. Donec non egestas mauris, eu hendrerit mauris. Mauris eu imperdiet libero, ut euismod neque.
138 |
139 | Maecenas sit amet tortor ornare, dignissim nibh eu, faucibus tortor. Aenean non odio augue. Vivamus nec sapien tellus. Donec sit amet ligula pellentesque neque molestie eleifend. Quisque aliquet justo velit, ut porttitor turpis scelerisque ac. Maecenas gravida volutpat aliquam. Vivamus eget diam id neque cursus sodales id nec dui. Curabitur placerat pharetra lorem, ac tincidunt felis luctus eu. Phasellus facilisis ante non tellus tristique, ut volutpat mauris pulvinar. Proin eu facilisis tellus. Nam faucibus, ex ut porttitor cursus, nisl enim commodo tellus, id interdum nisi libero sit amet enim. Fusce porta mauris vitae eleifend auctor. In hac habitasse platea dictumst.
140 |
141 | Sed arcu libero, iaculis eu metus porttitor, convallis posuere odio. Quisque eleifend mi eu lectus gravida luctus. Cras suscipit a elit eget pulvinar. Integer quis efficitur libero. Mauris auctor feugiat risus ac sollicitudin. Donec lobortis libero ut arcu molestie, et laoreet diam fringilla. Aenean vitae urna odio. Cras tristique mi nec vehicula volutpat. Cras porta dolor nulla, ut tincidunt leo lacinia quis. Aliquam erat volutpat. Nam facilisis libero tellus, vitae porttitor nunc egestas non. In id dignissim nisl. Pellentesque fringilla gravida finibus. Aenean molestie massa et eleifend consectetur.
142 |
143 | Praesent mattis sagittis maximus. Sed accumsan efficitur leo vitae ullamcorper. Donec risus magna, pellentesque nec feugiat quis, posuere et odio. Etiam rutrum quis dui sed lobortis. Suspendisse maximus egestas tortor. Donec luctus venenatis nisl, sit amet sagittis sapien egestas non. Quisque elit nunc, sodales eget faucibus eget, dignissim ut nibh. Ut feugiat id nunc quis blandit. Praesent pellentesque auctor aliquet. Ut eleifend consectetur sapien, in bibendum elit molestie vitae. Quisque rhoncus ex non tristique faucibus. In hac habitasse platea dictumst. Aliquam erat volutpat. Nunc laoreet et metus non luctus.
144 |
145 | Etiam convallis commodo augue. Vivamus maximus erat sit amet nibh consequat, eget ultrices mi rutrum. Proin eget lectus sed ante volutpat tempus. Phasellus dolor libero, elementum a viverra id, malesuada vitae felis. Duis dictum egestas iaculis. In porta, dolor eu accumsan posuere, nisi neque varius eros, eget cursus sapien felis eget diam. Nam scelerisque cursus erat vitae malesuada. Ut a commodo dui. Maecenas eu nisl a sapien tristique vehicula vitae vel augue. Praesent malesuada id mauris eu venenatis. Nunc eu semper mi. Pellentesque et egestas ex. Ut eget sapien nec massa scelerisque pulvinar.
146 |
147 | Quisque et elementum libero, a maximus diam. Vivamus dolor ligula, fringilla eu ligula sit amet, maximus iaculis augue. In ornare sagittis tincidunt. Proin tincidunt dui ac lacus venenatis, pellentesque scelerisque leo venenatis. Nulla eget tincidunt est. Integer in purus sit amet velit semper suscipit vel in turpis. In cursus imperdiet ornare. Quisque molestie lobortis convallis. Maecenas blandit blandit risus, at commodo ligula vestibulum quis. Aliquam ornare risus at leo tempor, vitae aliquam augue eleifend. Donec vitae augue sollicitudin, dictum massa vel, pulvinar mauris. Suspendisse potenti. Curabitur vestibulum vulputate mauris, vel tincidunt quam mattis nec. Quisque sit amet eros leo. Duis vulputate ex eget sem porttitor, et ultrices nunc porttitor.
148 |
149 | Sed ullamcorper vel eros vitae semper. Mauris lobortis massa sit amet orci egestas, vitae condimentum eros aliquam. Vestibulum mattis, quam vel auctor luctus, turpis augue sodales libero, in gravida felis velit vitae quam. Sed a mollis felis, vitae vehicula sapien. Etiam purus libero, euismod vel mollis vel, hendrerit eget massa. Sed eget dolor diam. Curabitur a augue maximus arcu blandit iaculis et fringilla lorem. Cras augue arcu, commodo at erat eget, fermentum sollicitudin nibh. Etiam urna eros, aliquet nec dapibus in, varius vitae velit.
150 |
151 | Mauris vel odio ut nisl tempor ultrices vel non ante. Nulla facilisi. Suspendisse ac scelerisque nunc. Integer rhoncus auctor dolor, eu suscipit orci mattis nec. Curabitur ultricies lorem urna, vehicula bibendum ligula molestie at. Phasellus vitae blandit justo. Sed imperdiet pellentesque dignissim. Sed rhoncus ipsum at turpis condimentum, vitae sodales magna sodales. Aliquam tincidunt cursus viverra. Nulla gravida elit placerat, iaculis nisl a, tempor sem.
152 |
153 | Nulla porttitor mollis tortor, a faucibus mi auctor ac. Fusce cursus magna ac nunc efficitur finibus. Aenean fermentum faucibus libero nec rutrum. Pellentesque suscipit ante ut augue dictum, nec porta ipsum ornare. Cras eleifend gravida massa, dapibus ullamcorper mauris interdum non. Vivamus fringilla purus in tellus hendrerit euismod. Praesent nec sapien molestie, rutrum nibh ac, semper leo. Pellentesque elit odio, placerat consectetur dapibus in, aliquet ac ipsum.
154 |
155 | In hendrerit a libero at finibus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris aliquam sapien vitae nunc porttitor consequat. Ut nisl arcu, maximus ut fermentum vel, aliquam vel ex. In tellus leo, mollis eget tincidunt vel, ultricies nec nisl. Etiam a scelerisque neque. Etiam sagittis imperdiet leo a accumsan. Phasellus in tempor quam. Sed ipsum ante, condimentum eu lobortis non, ultricies et ex. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Mauris facilisis urna ex, non posuere magna semper tempus. Donec eget libero vel ligula dignissim hendrerit.
156 |
157 | Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean facilisis ex id mauris interdum ornare. Vestibulum nulla purus, pretium sed nibh placerat, varius congue nisl. Donec aliquet consectetur dui eget dapibus. Morbi efficitur euismod bibendum. Praesent non nisi mauris.
158 |
159 | Pellentesque risus massa, sollicitudin vitae consequat sed, pellentesque in velit. Vivamus venenatis luctus velit euismod interdum. Nunc vitae eros sem. Phasellus est elit, pellentesque vel urna et, vulputate facilisis sapien. Nam mollis nisi eget volutpat iaculis. Aliquam semper imperdiet ante in maximus. In varius mauris et lorem sodales vehicula. Suspendisse et purus bibendum, sodales metus vitae, placerat sem. Nulla facilisi. Curabitur egestas mauris quis ipsum condimentum, sed vehicula turpis suscipit. In quam enim, suscipit id magna ut, venenatis feugiat purus. Cras at enim vitae lectus fermentum commodo non ac dolor. Duis sit amet eros iaculis, fringilla diam sit amet, commodo velit.
160 |
161 | Suspendisse tempus, lorem dignissim fringilla laoreet, neque metus imperdiet justo, eget placerat sapien mauris sed ante. Morbi blandit, eros eget mollis iaculis, erat ex auctor orci, at commodo felis eros eget magna. Nullam eu euismod massa. Fusce lobortis, augue sit amet ultrices lacinia, quam ex aliquam urna, vitae fringilla dui purus vitae nisi. Pellentesque placerat massa massa, sed pharetra est gravida nec. Aenean interdum, leo maximus vulputate varius, nibh enim lacinia lacus, ac fringilla turpis augue et nulla. Vestibulum interdum vitae leo sed tincidunt. Morbi lobortis nisi aliquet lobortis condimentum. Aliquam varius consequat tortor, quis convallis neque tincidunt non. Praesent dui erat, pellentesque id tellus nec, tempus suscipit metus. Sed luctus nisl ut sem dapibus, id egestas nisi mattis. Ut nec tristique sapien. Nulla euismod dolor sed nibh posuere, et varius lorem lobortis. Nunc iaculis, odio eu tempor dignissim, nisi nulla efficitur tortor, quis tempor libero nibh in justo. Nunc euismod et orci a ornare. Etiam ultrices nisi sit amet nulla pretium, ac pellentesque mi eleifend.
162 |
163 | Sed vel dolor eu arcu maximus molestie ut tempus purus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus pharetra quam sit amet posuere tempus. Quisque ullamcorper lacinia cursus. Sed convallis nibh lectus, rutrum euismod sapien tristique nec. Suspendisse potenti. In vehicula ligula non mi condimentum fermentum. Aenean id diam sed lectus blandit porta. Suspendisse gravida, elit non bibendum sodales, nibh orci sollicitudin metus, eu scelerisque ante odio non augue. Phasellus aliquet ipsum lorem, nec varius nisi lobortis eget. Ut risus lorem, vulputate quis ipsum iaculis, pharetra ultricies ante. Praesent maximus dui ut purus tincidunt pharetra. Pellentesque ac posuere metus. Ut pulvinar iaculis sodales. Praesent ut quam pretium, malesuada nunc ac, molestie elit.
164 |
165 | In neque lectus, malesuada hendrerit bibendum id, suscipit et dolor. Morbi lacinia nulla ut mi pulvinar dictum. Maecenas cursus quam sed arcu auctor accumsan. Vivamus elementum, arcu ac ornare pulvinar, justo quam sodales eros, sed vehicula lacus felis a magna. Suspendisse efficitur ultricies augue eget tincidunt. Mauris hendrerit elementum arcu, non aliquam arcu gravida eu. Morbi sodales, libero sed vestibulum varius, tortor purus ultricies diam, a hendrerit est lacus blandit neque. Donec quis dictum felis. Vestibulum consequat risus at neque interdum, sit amet auctor erat sagittis. Vivamus in ante velit.
166 |
167 | Cras tempor nunc sit amet orci vehicula, ac elementum nibh sodales. Praesent tristique risus sit amet felis euismod, ac lacinia est tristique. Vestibulum scelerisque non odio in fermentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla eu augue convallis, vehicula mi eu, tempus libero. Phasellus egestas tortor feugiat ultricies semper. Aliquam gravida ante eget risus tristique consectetur. Nulla eleifend id orci sit amet malesuada. Cras quis erat augue.
168 |
169 | Aliquam pulvinar tincidunt tellus a blandit. Vivamus porttitor felis ut ligula tincidunt, vel convallis purus convallis. Maecenas ac euismod lorem. Sed consectetur turpis ultrices mauris efficitur, eu scelerisque ligula vulputate. Aliquam eu varius enim. Curabitur laoreet ante metus, et vulputate lectus eleifend sollicitudin. Fusce venenatis mauris nec lobortis semper. Vivamus et diam a neque fringilla sagittis eu quis eros. Pellentesque ut nibh sit amet justo consectetur tincidunt. Morbi vehicula placerat elit, nec posuere lectus sagittis eget. Nunc vehicula risus elit, vel lacinia mi mollis nec. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus ornare diam at risus cursus, ut luctus sapien eleifend. Etiam dolor sem, accumsan vitae varius non, varius eu arcu.
170 |
171 | Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin commodo vestibulum maximus. Nullam id porta eros, eu feugiat justo. Suspendisse molestie maximus lacus porttitor rutrum. Donec finibus ac turpis vitae dapibus. In pulvinar porta venenatis. Proin vulputate tempor tellus, a mollis lorem cursus in. Sed quis dapibus nunc. Cras id posuere tellus. Sed a lacus condimentum, tempus risus id, imperdiet metus.
172 |
173 | Integer pretium quis ante ac mattis. Ut sit amet tellus sapien. Aenean ornare accumsan dolor ac accumsan. Phasellus fringilla sem elit, pellentesque volutpat diam dapibus eget. Curabitur at erat pulvinar, semper mauris sit amet, dapibus nulla. Nunc ornare mauris a nulla semper, at varius tellus consequat. Phasellus sollicitudin commodo velit, ac imperdiet elit imperdiet vitae. Sed porta mi et odio pulvinar, quis fringilla ligula eleifend. Praesent nec laoreet sem, quis semper tortor. In eget orci faucibus, tincidunt sem et, viverra nibh. Suspendisse a pulvinar nunc, eu elementum purus. Quisque vestibulum, purus id ultrices molestie, neque magna tincidunt lacus, nec convallis purus purus quis nulla. In nec justo blandit, lobortis nisi eu, suscipit metus. Pellentesque sollicitudin et dolor quis mattis. Aenean lectus turpis, sodales ac tortor ut, vehicula ullamcorper libero. Vestibulum maximus consequat risus, ac imperdiet tortor accumsan vel.
174 |
175 | Nullam id nibh quis magna lacinia efficitur ut eu arcu. Curabitur feugiat, ligula in dapibus posuere, mauris metus egestas mi, sed dictum eros dui accumsan metus. Etiam sit amet nibh ante. Maecenas et tempus arcu. Sed accumsan velit vel malesuada sodales. Aliquam nec ultricies justo. Donec aliquet aliquam malesuada. Suspendisse vel mollis purus, vel consequat diam. Cras quis odio ut tellus aliquam porta eget quis nisi. Suspendisse eu tincidunt odio. Duis ultrices nibh lorem. Quisque auctor vel velit venenatis porta.
176 |
177 | Duis vel lorem id dui imperdiet efficitur. Cras in dolor varius, laoreet eros ac, faucibus urna. Ut egestas, velit tincidunt condimentum ultricies, lacus est dapibus massa, sit amet molestie mi ipsum vitae justo. Aenean convallis ipsum ut rhoncus malesuada. Aenean gravida massa nec augue semper, vel vehicula sem ullamcorper. Sed lobortis a justo ac ornare. Curabitur lobortis leo et massa imperdiet, a mollis nisl iaculis. Fusce finibus, velit in tristique auctor, dolor massa hendrerit tellus, et sagittis velit massa sed lorem. Nullam vitae ullamcorper massa. Etiam enim erat, ultrices et sollicitudin in, imperdiet et est. Phasellus mattis velit nec erat laoreet rhoncus. Nulla sed neque quis ex semper laoreet in vel libero. Vestibulum ac molestie ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam et lacus metus.
178 |
179 | Suspendisse id lacinia tortor, ac luctus velit. Vestibulum efficitur quam eu mollis venenatis. Nulla eleifend pulvinar egestas. Donec ut turpis orci. Vestibulum eu dui rhoncus, condimentum enim eu, tincidunt massa. Nulla molestie suscipit ante ac tincidunt. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec at dui diam. Quisque lectus orci, interdum sit amet mi id, pellentesque auctor lacus. Morbi porta urna ac ante posuere, vitae porta erat fringilla. Sed eu fringilla libero.
180 |
181 | Curabitur a vehicula mi. Nunc eu fermentum neque. Morbi sit amet lacus rutrum est blandit interdum. Praesent accumsan dui vel massa vestibulum, eget pharetra ipsum viverra. Etiam dignissim ac urna ac ornare. Vestibulum vitae lacus aliquet, rutrum orci a, ultricies lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Phasellus dictum ante sit amet mollis dignissim.
182 |
183 | Nam justo ante, suscipit ac metus quis, fermentum pretium ipsum. Vestibulum ullamcorper id massa vestibulum eleifend. Curabitur non maximus metus, cursus posuere sem. Quisque aliquet quis odio quis pulvinar. Praesent scelerisque erat mi, nec cursus lorem dictum a. Duis rhoncus accumsan efficitur. Cras feugiat molestie dui et aliquet. Ut a ex dapibus, efficitur ipsum et, luctus quam. Nunc tempus rutrum leo, in tincidunt orci mattis a. Nullam aliquam tristique est, non cursus ligula viverra quis.
184 |
185 | Ut elementum risus id augue interdum, vel finibus ipsum semper. Sed eget risus scelerisque, finibus ipsum id, posuere neque. Sed eget orci et massa sagittis commodo vitae et ligula. Nulla facilisi. Duis placerat velit rhoncus velit consequat faucibus. Integer ullamcorper urna felis, sit amet tempor est volutpat quis. Vivamus vestibulum nisi at libero luctus, ac aliquet velit hendrerit. Morbi molestie nunc quis erat blandit, et varius justo accumsan. Nam et ex et risus blandit interdum convallis in massa. Donec a consequat nunc, sit amet convallis nibh.
186 |
187 | Morbi augue erat, feugiat eu augue vitae, laoreet fringilla turpis. Nulla pharetra magna in felis varius, eget luctus erat convallis. Vivamus aliquam eros sit amet risus ornare tristique. Cras a velit id leo placerat finibus eget id risus. Ut malesuada vitae urna ac vulputate. Nulla ex nibh, mollis a orci quis, feugiat dignissim sapien. Donec eu imperdiet purus, ut lacinia lacus. Vivamus ultrices iaculis iaculis. Cras mauris diam, pretium ac ante nec, elementum ultrices lorem. Aliquam iaculis quam lectus, id dictum diam sollicitudin eu. Integer porttitor mauris et ex euismod, ut finibus mi condimentum. Donec auctor urna massa, non blandit augue elementum id. Phasellus in justo enim. Nulla tincidunt, massa quis rutrum eleifend, risus velit semper justo, nec facilisis erat mi vel lorem. Sed id felis dictum, fermentum libero non, rhoncus elit.
188 |
189 | Maecenas ac lectus in tellus pulvinar efficitur. Nullam iaculis sodales justo eget congue. Phasellus volutpat porta leo, ac egestas massa sodales et. Vestibulum ornare, velit id tristique tristique, quam quam dapibus augue, sed fermentum ipsum lorem a erat. Proin sollicitudin tellus eget lacus ornare, sed egestas risus volutpat. Etiam non ipsum sit amet libero pharetra bibendum. Vivamus porttitor elit et imperdiet dapibus. Maecenas scelerisque risus nec eros volutpat, sed vestibulum nibh dictum. Mauris placerat lorem velit, a efficitur quam ultrices et. Nulla feugiat tristique molestie. Proin congue posuere est ut blandit. Integer sed lacus porta tortor suscipit tristique id tincidunt tellus. Nunc magna tortor, finibus a purus faucibus, suscipit tempor nibh. Etiam ultrices turpis a ligula cursus laoreet. Nunc sit amet consequat neque. Cras feugiat eros ut justo ullamcorper imperdiet.
190 |
191 | Aliquam rutrum eu arcu et hendrerit. Nulla consectetur, ipsum et ullamcorper porttitor, risus lacus consectetur nisl, vel semper felis ante ac lorem. Etiam semper dolor vitae convallis ultrices. Fusce a rutrum est. Pellentesque vel odio non odio cursus egestas. Quisque dolor nunc, luctus id nisl sed, sodales tincidunt ligula. Aliquam non fermentum augue, in sollicitudin sem. Donec a diam eu mauris posuere mattis vel quis orci. Cras ultrices sapien vestibulum est fermentum pharetra. Pellentesque ipsum nisi, pellentesque sed dui at, bibendum cursus est. Nullam placerat elit vitae tellus elementum fringilla. In eget ex a augue ornare vulputate quis non mauris.
192 |
193 | Vivamus eget hendrerit dolor, malesuada imperdiet turpis. Mauris ut vestibulum metus, sit amet congue nulla. Nullam eu mi purus. Nam nibh orci, tincidunt nec tincidunt nec, mattis sit amet erat. Nunc nec ligula libero. Duis non mollis justo, ut commodo odio. Phasellus egestas interdum nulla, non accumsan ante dictum ut. Cras quis nulla suscipit, fringilla nulla eu, pellentesque diam. Duis a facilisis dui. Morbi non risus at felis suscipit porta. Aliquam eu velit rhoncus, gravida enim quis, pellentesque ex. Quisque sed condimentum massa. Cras tempus in metus id ullamcorper. Etiam nunc urna, imperdiet sed fringilla et, aliquet a ex. Praesent vehicula erat nibh, in imperdiet odio cursus vitae.
194 |
195 | Donec sit amet pretium magna. Donec nec nibh id risus auctor fermentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; In rutrum sapien nisl, vitae hendrerit nulla dignissim ut. Etiam id pellentesque augue. Fusce convallis maximus neque, quis ultricies odio. Praesent a porttitor massa, porta porttitor tellus. Sed turpis enim, sollicitudin vel orci eget, efficitur suscipit quam. Sed suscipit dictum odio et faucibus. Integer maximus euismod nisi, faucibus venenatis mi feugiat ut. In hac habitasse platea dictumst. Nunc nec nibh quis ante ultrices mattis. Integer et sapien id est tincidunt dictum iaculis eget eros. In at rutrum sapien. Morbi ac arcu ultrices, aliquam libero eget, suscipit sem.
196 |
197 | Curabitur pharetra orci non nisi finibus, quis consequat nisl rhoncus. Maecenas in mollis odio. Nulla iaculis eu magna at tristique. Proin id ullamcorper metus, vitae mattis erat. Etiam ultrices diam enim, ac dignissim velit blandit et. Duis nec laoreet est. Mauris gravida ac nisl quis sodales. Duis sollicitudin metus urna, at pharetra orci cursus ut. Donec ut placerat augue. In hac habitasse platea dictumst. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla semper augue vitae nibh consectetur, sed rutrum lectus mattis. Aliquam eu placerat nisi. Cras eu convallis tortor. Morbi in egestas nibh. Aliquam aliquet ipsum vitae tincidunt ornare.
198 |
199 | Pellentesque varius nec sem ac mollis. Phasellus consequat congue urna vel molestie. Vestibulum laoreet a augue semper sagittis. Sed nisi felis, vulputate nec ullamcorper ut, porttitor sed lectus. Nam rutrum justo est, vel luctus est maximus vitae. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut tellus purus, scelerisque a vestibulum at, lacinia eu dolor. Pellentesque non velit ante. Fusce tempus leo et convallis laoreet. Pellentesque aliquam ultricies massa at egestas. Donec in convallis libero. Duis tempor erat eget vestibulum tincidunt. Ut tincidunt at turpis ut tempus. Phasellus mi arcu, pellentesque id arcu vel, luctus aliquet arcu. Nullam lobortis sem non justo condimentum rutrum.
--------------------------------------------------------------------------------
/assets/sample3.txt:
--------------------------------------------------------------------------------
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec et ultrices justo. Fusce mollis lorem non dignissim pretium. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Donec pulvinar commodo ante eget sagittis. Cras eget dui nec ex posuere accumsan ut in magna. Donec et euismod sem. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
2 | Donec ut malesuada nisi. Duis ac erat lobortis, dignissim neque vel, sollicitudin est. Nunc sit amet mauris a tortor lacinia volutpat. Praesent ultrices leo at elit laoreet tempus. Quisque vitae nibh a elit gravida vestibulum. In hac habitasse platea dictumst. Vestibulum interdum imperdiet erat, at sagittis ipsum porta convallis. Morbi in orci feugiat, pharetra turpis varius, fringilla urna. Aliquam erat volutpat.
3 | Duis malesuada urna purus, quis tempor nulla hendrerit id. Morbi in cursus risus. Morbi condimentum est viverra nibh pharetra, at placerat sapien blandit. Vestibulum vel suscipit augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Cras condimentum arcu vitae lacinia posuere. Sed euismod dui nec libero pellentesque, sit amet vulputate urna dignissim. Integer rhoncus est sed dui euismod, a malesuada mauris imperdiet. Sed suscipit turpis risus. Proin vitae libero quis ante iaculis pulvinar id sed ligula. Mauris sit amet varius nunc. Cras ullamcorper viverra pulvinar. Nam faucibus neque eu mi porta dapibus. Aenean eu nibh nec leo facilisis congue nec sed ante. Nullam malesuada porttitor sagittis. Aliquam at dignissim diam, in finibus dolor.
4 | Aenean vulputate quis justo id vehicula. Proin posuere at tortor id luctus. Donec blandit ligula non neque accumsan, sed faucibus arcu pretium. Morbi auctor rutrum est, eget dictum urna feugiat vitae. Vestibulum elementum, turpis a feugiat sollicitudin, odio ligula semper augue, at venenatis nibh diam eget libero. Fusce ut justo porta, scelerisque odio in, faucibus odio. Morbi lectus mi, condimentum quis risus sit amet, convallis hendrerit ipsum. Sed et vestibulum leo.
5 | Suspendisse semper fermentum mattis. Aenean vestibulum dictum magna non congue. Nullam a tortor quis ex porttitor venenatis. Etiam id bibendum dui. Ut bibendum nisi nunc, ut tincidunt ipsum efficitur non. Sed nec arcu suscipit, rutrum ligula vel, iaculis felis. Donec semper, lorem condimentum porttitor fermentum, justo libero facilisis velit, in ornare urna erat tristique libero. Praesent vulputate sem ac nibh faucibus volutpat. Etiam fringilla gravida eros non tincidunt. Nulla euismod, mauris vel dapibus imperdiet, quam ligula egestas diam, eget ullamcorper odio augue quis tortor. Suspendisse porttitor tortor augue, ut laoreet dui auctor aliquet. Phasellus mollis rutrum odio, nec laoreet urna. Vestibulum volutpat nibh ut erat tempus, bibendum condimentum eros facilisis. Mauris a pellentesque mi.
6 | Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer eget est dolor. Nam elementum libero non nulla bibendum efficitur. Nam augue mauris, sollicitudin in urna vel, luctus blandit est. Aenean pulvinar libero sodales ante tempus, a fringilla eros suscipit. Nam dapibus odio sed tincidunt porta. Nulla aliquam accumsan quam ut dapibus. Sed quis erat id augue sagittis rhoncus. Vestibulum at lobortis ipsum. Maecenas euismod lectus et purus tempus, ultricies tempus leo molestie. Pellentesque in odio pellentesque, vehicula nulla eget, bibendum eros.
7 | Duis gravida gravida purus, in ultrices ligula tempus ut. Vestibulum quam libero, tincidunt sed nisl in, imperdiet ullamcorper dolor. Proin sollicitudin tristique purus quis tristique. Curabitur nec diam nisi. Sed sit amet neque dolor. Integer est quam, commodo a viverra vel, auctor at quam. Maecenas semper urna pharetra vestibulum ultrices. Vestibulum consequat malesuada dui a interdum. Etiam risus neque, hendrerit a urna et, condimentum condimentum ante. Ut porttitor laoreet faucibus. Etiam facilisis augue vel sem volutpat, sit amet suscipit massa viverra. Vivamus id porttitor augue, non elementum quam. Maecenas accumsan id risus in sollicitudin. In sed sagittis mauris, iaculis hendrerit risus. Nunc vehicula bibendum massa, ac placerat arcu rutrum et.
8 | Aliquam lobortis eu metus sed scelerisque. Fusce ullamcorper iaculis maximus. Interdum et malesuada fames ac ante ipsum primis in faucibus. In scelerisque viverra ex sit amet sodales. Nullam a ultricies risus, eu interdum sem. Donec ullamcorper sit amet nunc commodo euismod. Nulla facilisi. Quisque ac laoreet nisl. Cras accumsan lobortis nunc vel aliquet. Donec nisl magna, porttitor id mattis ut, tincidunt non elit. Ut iaculis justo ullamcorper quam aliquet, a elementum augue accumsan. In vitae lorem interdum, accumsan arcu ut, egestas velit. Vestibulum nisi augue, convallis eu justo sit amet, fringilla ornare massa. Sed sodales eu tellus a bibendum. Cras in feugiat justo. Suspendisse mollis, justo ut convallis porta, risus eros accumsan dui, ac hendrerit nulla ex nec purus.
9 | Donec congue rhoncus porttitor. Quisque quis augue at erat finibus auctor ac sed leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut imperdiet nisi id sagittis luctus. Nunc quis ullamcorper sem. Nulla facilisis dictum elit quis convallis. Suspendisse commodo arcu eu sem hendrerit, sit amet ornare erat tempus.
10 | Pellentesque accumsan dui sit amet dictum rhoncus. Ut ac tortor ante. Quisque elit odio, pellentesque at purus pharetra, dictum pulvinar felis. Mauris aliquet magna et luctus tempor. Nulla imperdiet pulvinar urna ac bibendum. Phasellus consequat eu felis eu venenatis. Proin hendrerit venenatis lacus vitae ultricies. Praesent eu enim sapien. Mauris vitae risus urna. Vestibulum lacinia, turpis vitae viverra posuere, tortor urna bibendum dui, sed placerat nunc est sed lacus. Nam molestie tincidunt lorem quis dapibus. Phasellus quis ante sed mauris varius condimentum. Integer nec enim nec felis semper volutpat eget ac lacus. In nec tincidunt leo. Praesent ac eros iaculis sapien tristique tempor sit amet sit amet erat. Proin posuere pharetra eros sed iaculis.
11 | Quisque quis viverra felis. Sed ut nisl eget odio condimentum semper. Suspendisse commodo sagittis urna, in imperdiet diam. Quisque euismod nulla eu tellus congue sollicitudin. Donec justo metus, varius in massa eget, elementum aliquam tortor. In iaculis nisi non dolor sollicitudin, nec imperdiet lorem accumsan. Ut posuere enim mattis ullamcorper viverra. Nam elementum nibh sed dui fermentum, et pharetra ex tempus. Quisque id scelerisque augue. Nulla dignissim augue tincidunt tortor dictum viverra.
12 | Etiam rhoncus ac elit a laoreet. Etiam aliquam eget orci eget pretium. Pellentesque venenatis libero sed quam mollis, et rutrum sem faucibus. Nulla commodo ipsum tortor, ut accumsan erat viverra in. In nec tortor vulputate, aliquam ante a, interdum lorem. Cras iaculis faucibus elit, eget hendrerit libero cursus vel. Donec porttitor libero nisi, non suscipit ante eleifend vitae. Etiam consectetur nec erat non semper. Nam efficitur vitae libero vitae suscipit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Fusce vitae tincidunt magna. Suspendisse potenti.
13 | Nam quis libero dignissim, posuere arcu et, auctor nisl. In ut fringilla dolor. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nulla commodo sagittis purus vulputate aliquet. Phasellus maximus dignissim nisi sit amet fringilla. Suspendisse eget blandit ipsum. Sed id ullamcorper metus, viverra molestie enim. Proin at dignissim tortor. Aliquam vitae orci non elit volutpat convallis dignissim in felis. Vivamus nec tempus turpis, nec semper augue. Etiam congue porta enim, quis feugiat orci tempus nec. Quisque aliquet lectus at porta feugiat. Aliquam suscipit lobortis ex vel rutrum. Vestibulum dignissim diam dignissim arcu aliquet faucibus.
14 | Aliquam fermentum nunc at tellus pharetra, quis varius nulla fringilla. Vestibulum pulvinar ante turpis, vitae sollicitudin sem porttitor et. Sed tempus vulputate lorem. Maecenas non dictum dui. Phasellus tincidunt blandit est, vel tristique nibh. Quisque quis dui odio. Suspendisse potenti. Integer molestie commodo est non tristique. Aliquam scelerisque tempus facilisis. Nullam ut volutpat lacus. Suspendisse eu ornare tortor, vitae volutpat velit. Nullam vehicula metus sed mi faucibus tempus. Donec cursus faucibus sapien vel tempus. Mauris semper lorem sit amet feugiat tincidunt.
15 | Etiam ut ultricies ex, nec vehicula est. Praesent egestas mi ac leo mollis, quis posuere nisi pellentesque. Integer non tempor ipsum. Praesent vel vehicula ante, vitae pulvinar ex. Nam dolor nisl, efficitur a porta at, placerat mattis magna. Fusce accumsan nec lacus sit amet malesuada. Quisque consectetur ligula iaculis leo volutpat, id porttitor magna sollicitudin. Praesent aliquam diam elit, tempor porttitor dui vulputate nec. Donec efficitur nunc sit amet leo cursus, eu laoreet nunc molestie.
16 | Aenean imperdiet eros consectetur enim pretium, a consequat arcu interdum. Aenean vel porttitor justo. Duis at rhoncus nibh, quis dapibus erat. Donec iaculis ante vel arcu viverra facilisis. Nam convallis aliquet lorem laoreet blandit. Proin elementum laoreet mi, sit amet commodo mauris aliquet eu. Etiam accumsan nulla ac lacus laoreet maximus. Nunc varius finibus nisi ut tincidunt. Sed nibh urna, varius posuere egestas eu, semper ut magna. Phasellus tempor metus rutrum, iaculis lectus ut, tempus urna. Aenean venenatis at metus quis tincidunt. Nullam commodo in ipsum tempor congue. Donec est ipsum, efficitur ac ex ut, gravida vulputate nulla.
17 | Phasellus condimentum vel magna nec rhoncus. Cras porta sed magna at mattis. Quisque vel ullamcorper elit, vel dignissim turpis. Etiam ante lorem, tristique sit amet porta ac, tempor vitae ligula. Nam elementum pellentesque urna. Proin vitae pulvinar nulla. In lobortis porttitor condimentum. Nullam justo diam, ullamcorper et elit sed, consequat ullamcorper eros. Nunc sit amet mi sapien.
18 | Nam augue velit, placerat at efficitur eu, pulvinar quis nisl. Quisque porttitor arcu non mattis pellentesque. Aliquam quis hendrerit ligula. Sed porta, enim nec egestas luctus, augue magna semper sem, eget mattis magna neque sit amet mauris. Mauris dapibus gravida sem, vel pellentesque erat varius nec. Nulla mi ligula, varius et sapien ac, pulvinar faucibus tortor. Etiam suscipit sodales nisl, at vestibulum nisl. Curabitur fringilla ut nisi ac imperdiet. Mauris ac efficitur dui. Quisque ut felis a tellus laoreet consequat a in felis.
19 | Nunc lacus ligula, volutpat porta nisi eget, dapibus imperdiet ante. Sed fringilla pulvinar felis, id iaculis lacus ornare id. In rutrum at mi a fermentum. Integer augue mauris, hendrerit ac ex eget, aliquet scelerisque urna. Morbi a massa feugiat, rutrum leo non, suscipit eros. Nullam vestibulum arcu id leo rutrum dictum. Cras sed est eget nunc molestie dignissim. Praesent risus tellus, mollis sed consectetur maximus, sodales vel nisi. Maecenas ut mi id augue mattis fermentum eget quis metus. Nullam eget magna accumsan, lacinia lectus nec, volutpat metus. Maecenas ornare nulla lacus, non bibendum mauris vehicula at. Sed vitae dolor mattis, ullamcorper lorem sed, pellentesque felis. Maecenas lobortis arcu augue, et congue ligula sollicitudin eget.
20 | Donec efficitur massa id orci imperdiet, nec ultricies ante iaculis. Proin suscipit libero eget nisl convallis porta. Integer lacinia sem neque, quis sodales ipsum placerat ac. Donec quis mauris eget libero cursus viverra nec id odio. Fusce sit amet malesuada arcu. Proin fermentum, est nec auctor mollis, libero lorem fringilla erat, ac lacinia mi nisi a nisi. Sed diam lectus, tristique nec tellus pellentesque, congue blandit quam.
21 | Suspendisse potenti. Donec vitae ipsum a libero maximus consequat eget eu neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed at semper justo. Integer consequat, nunc ut vehicula accumsan, mauris nisi posuere ante, sit amet sollicitudin erat ligula vitae tortor. Pellentesque non sem eu massa facilisis vulputate. Nullam quis rutrum magna. Fusce sagittis neque leo. Aenean ac tempus ante, vel vestibulum ex.
22 | In magna tellus, eleifend vitae libero sed, condimentum laoreet velit. Sed porttitor dui massa, in sollicitudin lectus semper sed. Curabitur venenatis quam mauris, vel consectetur velit condimentum eget. Duis et magna mollis, porttitor mi ut, pulvinar erat. Curabitur sollicitudin ligula ut leo dapibus, sit amet consectetur ex efficitur. Aliquam nunc dolor, suscipit nec ultricies id, pulvinar quis metus. Integer ut diam nisi. Sed quam nunc, lobortis ut fringilla id, rhoncus vitae metus.
23 | Pellentesque ac consectetur massa. Aliquam sed ornare orci. Proin sed eros sed sapien sodales consequat. Etiam in aliquet leo. Pellentesque accumsan velit ac velit commodo vulputate et faucibus lorem. Donec eget neque mollis, pulvinar sem quis, malesuada quam. Fusce luctus nisl non lorem sodales, non eleifend est ullamcorper. Integer pellentesque augue ac elit faucibus mollis. Nulla vel vulputate nunc. In hac habitasse platea dictumst. Phasellus ac urna libero. In hac habitasse platea dictumst. Quisque elementum eget lacus a sodales. Nam euismod posuere magna, eu ultricies quam tempor non. Curabitur efficitur fermentum erat, sed ultricies purus. Cras euismod, magna vel tempus iaculis, ante elit aliquet velit, eu accumsan diam ipsum et est.
24 | Nunc congue suscipit odio, non finibus sapien fringilla eu. Nam sollicitudin elementum ipsum. Vestibulum non risus commodo, placerat lorem volutpat, rhoncus nisi. Mauris non ex quis tellus lobortis lobortis. Morbi fermentum nisi a tortor varius rutrum. Proin varius quam ut felis fermentum, vitae faucibus enim pulvinar. Integer feugiat mollis libero.
25 | Nunc eget facilisis magna. Cras est ante, suscipit sit amet bibendum ac, ultricies quis libero. Praesent interdum velit vel faucibus lacinia. Suspendisse venenatis tortor lobortis tortor feugiat viverra. Donec volutpat dolor at felis congue pretium. Aliquam egestas, tellus id imperdiet imperdiet, erat nulla maximus tortor, eget rutrum dolor massa in nisi. Etiam vestibulum bibendum sem at semper. Etiam sed urna libero.
26 | Fusce pharetra mi egestas lorem fringilla, nec malesuada mauris maximus. Suspendisse viverra, nunc id mollis elementum, odio urna fermentum enim, a pulvinar libero neque in nunc. Ut nec ultricies sapien, sed tincidunt justo. Etiam commodo, risus at volutpat porta, lorem urna dapibus eros, ut porttitor nunc massa semper quam. Aliquam velit quam, iaculis vitae consectetur sit amet, iaculis at enim. Nulla mauris nunc, varius bibendum eros sed, vehicula faucibus mauris. In et elementum magna. Sed at nisl tristique, maximus justo eu, scelerisque enim. Sed eget molestie ex. In tincidunt ligula ac elementum accumsan. Donec consequat libero nulla, eget eleifend sapien vehicula in. Etiam interdum felis libero, at cursus lorem auctor et. Donec consectetur augue vel scelerisque viverra. Morbi quis molestie mi.
27 | Phasellus et malesuada libero. Vestibulum vehicula non urna vel viverra. Sed tempor odio ut leo bibendum, vel elementum est consequat. Curabitur suscipit efficitur risus, sodales mattis magna. Vestibulum porta tellus sit amet est tempus varius. Pellentesque fermentum venenatis auctor. Integer tempor quam non ante finibus elementum. Suspendisse tortor lacus, egestas nec malesuada vitae, mollis nec metus. Fusce auctor et magna sit amet viverra. Suspendisse a nisl volutpat, lacinia eros nec, ultrices massa. Duis congue suscipit quam eu commodo. Donec porta lobortis elit, bibendum eleifend lorem consectetur eget. Suspendisse consectetur nunc ante, tincidunt bibendum ante efficitur a.
28 | Donec at metus sed felis commodo tincidunt. Ut porttitor rhoncus ligula sed venenatis. Phasellus a finibus augue. Ut nec nulla consectetur, rutrum mi in, malesuada sapien. Sed cursus, tortor elementum ornare imperdiet, nibh leo vestibulum eros, id ornare velit velit ut risus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed feugiat mi a ligula gravida, eu viverra nisl tempor. Phasellus tristique sit amet odio sit amet euismod. Interdum et malesuada fames ac ante ipsum primis in faucibus.
29 | Phasellus quis efficitur libero, bibendum hendrerit ex. Curabitur pharetra massa metus, vitae pellentesque purus pulvinar non. Sed aliquet scelerisque eros. Cras purus sem, venenatis sed odio non, hendrerit tempor dui. Duis vel purus sit amet erat consectetur convallis. Duis eu sagittis libero, vel facilisis mauris. Phasellus fermentum tellus in purus consequat tempus. Quisque tincidunt nisi sed sapien pellentesque sagittis. Phasellus lacus leo, placerat pulvinar tellus eu, aliquet ultricies nibh. Nunc tempor fermentum lobortis. Sed pulvinar, libero eu suscipit lacinia, tortor libero ornare elit, et vehicula risus risus at est. Suspendisse tincidunt accumsan tellus nec ullamcorper. Integer dapibus et velit a bibendum.
30 | Integer nec tristique enim. Suspendisse maximus dui mattis ex vestibulum maximus. Aliquam sit amet nulla erat. Aliquam sed luctus nisl, in convallis nibh. Maecenas non nunc non urna tristique consectetur. Vivamus pharetra magna vitae facilisis semper. Vivamus nec commodo dolor. Etiam et tellus ut libero pellentesque dictum. Suspendisse eros nulla, porttitor id eros consectetur, malesuada lacinia nisl. Donec metus mi, lacinia in velit ac, aliquet eleifend leo. Suspendisse at leo finibus, cursus tellus nec, placerat mi. Sed lacinia mi vitae erat fermentum, quis faucibus ante interdum. Donec aliquet interdum vestibulum. Nulla facilisi. Fusce pellentesque sem elit, a rutrum metus viverra quis.
31 | Aliquam ac ultrices velit. Phasellus felis nisl, sagittis vitae pulvinar nec, pulvinar vel augue. Ut ac tortor in eros ullamcorper gravida. Etiam lacinia tellus eu sapien venenatis, in tempor velit eleifend. Donec condimentum interdum mi, at lacinia diam semper et. Donec lobortis at neque ac tempus. Donec luctus dignissim justo, eu pulvinar justo porttitor at. Praesent erat lacus, iaculis a iaculis tempor, porttitor tincidunt sapien. Donec facilisis, massa non pellentesque pharetra, eros nibh vestibulum risus, sed ultricies sem ipsum eu dui. In hac habitasse platea dictumst. Nulla sed rhoncus nisi, non placerat mauris. Aenean gravida bibendum magna in scelerisque. Quisque ut eros dapibus, commodo sapien in, laoreet nisi. Vestibulum odio justo, volutpat condimentum justo at, fringilla blandit tortor. Sed magna nisl, porttitor at laoreet id, euismod nec velit. Nullam pretium feugiat orci eu pulvinar.
32 | Sed accumsan, neque et lobortis ullamcorper, leo urna rutrum neque, eget aliquam risus lectus ac erat. In at hendrerit turpis, quis pellentesque nisl. Mauris vestibulum, nibh imperdiet scelerisque sodales, urna est placerat ligula, ac rutrum nisl odio nec magna. Duis est dui, volutpat a dui convallis, pharetra tempor lacus. Curabitur id semper nibh. Mauris venenatis at nulla id tincidunt. Donec non nibh orci. Ut vel enim mauris. Pellentesque a pellentesque augue, nec laoreet tellus. Praesent feugiat aliquet justo quis finibus. Sed facilisis dui eget pellentesque commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aenean pretium est ac sem tincidunt, ut tempus odio faucibus.
33 | Curabitur sit amet urna a lorem blandit ullamcorper at vel felis. Quisque tempus orci erat, et gravida erat rutrum id. Quisque quis eleifend felis. Morbi posuere, velit non interdum vulputate, tortor velit accumsan nunc, sit amet iaculis elit libero vel purus. Aliquam cursus elit et tellus pulvinar, ac eleifend nunc interdum. Pellentesque quis nibh eget lectus rutrum commodo. Sed pretium pulvinar justo a convallis. Nulla at tellus orci.
34 | Cras tincidunt augue metus, ac commodo leo consequat vitae. Fusce quis ipsum sit amet arcu eleifend semper a vitae felis. Duis gravida ipsum lorem, sit amet finibus ipsum volutpat in. Donec malesuada risus ac rhoncus auctor. Maecenas et pulvinar felis. Ut non elit in lacus dignissim viverra. Maecenas imperdiet eget nisi non iaculis. Sed commodo ipsum in ultricies accumsan.
35 | Quisque fermentum tortor id nisl tincidunt dignissim. Maecenas vulputate libero vulputate, mattis nisl in, viverra elit. Phasellus vulputate tincidunt iaculis. Etiam aliquet erat ut eros pharetra accumsan vitae sed metus. Duis vestibulum magna velit, nec placerat turpis eleifend eget. Morbi rhoncus nisl ut justo mattis, a hendrerit lorem auctor. Integer quis nunc et risus egestas pellentesque. Maecenas elementum sem ut dui tempor, faucibus condimentum tellus bibendum. Pellentesque placerat nulla mi, in sagittis purus ullamcorper rhoncus. Phasellus eu consectetur arcu.
36 | Integer vitae eleifend nisi. Sed ut justo nec nisl sodales gravida cursus quis dolor. Donec vel enim est. Nam aliquam dolor nec ornare fermentum. Maecenas nec pretium dui. Fusce tempus neque eros, vel mollis dolor elementum vitae. Cras scelerisque, ante quis mollis porta, elit dolor dictum nisl, et ornare libero elit quis purus. In sit amet quam interdum, vulputate nibh nec, tincidunt enim. Curabitur a egestas mauris. Sed id feugiat sem. Proin at sollicitudin erat. Interdum et malesuada fames ac ante ipsum primis in faucibus.
37 | Vivamus ultrices dui nulla, id iaculis odio vulputate eu. Nulla tincidunt velit sed imperdiet eleifend. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vel faucibus purus. Nam egestas mattis velit, eget ullamcorper ipsum finibus sit amet. Suspendisse potenti. In in sapien dolor. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam vestibulum ex justo, vitae rhoncus odio suscipit a. Proin lorem nisl, fringilla eu scelerisque in, convallis ut nunc. Quisque nisi orci, eleifend nec laoreet a, placerat eget ipsum.
38 | Fusce vitae magna ante. Fusce volutpat ultricies enim ut tristique. Mauris mauris purus, facilisis id nibh id, vehicula ultricies ipsum. Suspendisse potenti. In nec finibus tortor. In ornare accumsan nisi, quis rutrum mauris venenatis sed. Etiam id risus justo. Duis viverra at urna eget aliquam. Maecenas pretium, urna ut ornare commodo, augue nulla laoreet odio, vel aliquam nunc magna ac quam. Nullam aliquet, justo eu mollis semper, urna lectus eleifend diam, eu egestas elit tellus quis lectus. Nulla a tempus augue, sed commodo est.
39 | Sed fermentum ex ac mattis lobortis. Nullam tincidunt fringilla dui ac interdum. Donec et mi sed ex tempor congue. Etiam pharetra, neque aliquet molestie posuere, sapien tellus mollis libero, id consectetur ipsum dolor ut enim. Ut blandit velit eros, sit amet feugiat purus laoreet vitae. Mauris magna leo, maximus in ullamcorper ornare, egestas sit amet sem. Vivamus maximus libero a sapien dictum posuere. Mauris elementum nibh mi. In nisl libero, tincidunt congue imperdiet ac, hendrerit non neque. Ut ac felis placerat, efficitur nisi dapibus, accumsan tortor. Duis non nisi molestie, aliquam libero eget, interdum ex. Duis efficitur augue ac arcu viverra, sed volutpat nisi interdum. Suspendisse vehicula, dui suscipit imperdiet scelerisque, nibh elit pulvinar ligula, ut tincidunt arcu odio non dolor.
40 | Aliquam vel erat sit amet est vestibulum sagittis. Curabitur non urna ut eros elementum gravida. Proin tempus metus risus, at dapibus augue ornare vel. Phasellus convallis tellus eu nulla laoreet porttitor et id odio. Nullam viverra a justo quis elementum. Sed nisl elit, faucibus in blandit sed, tincidunt et ipsum. Etiam sit amet aliquet nulla, vel ultricies lectus. Duis facilisis lectus eu pulvinar tristique. Nunc libero velit, dictum eu lacinia sit amet, fermentum quis justo. Nam venenatis lacinia tortor vitae fermentum. Nullam elit sapien, gravida quis dolor in, tristique ullamcorper lacus. Maecenas mattis eros eget elit placerat, in commodo mauris suscipit. Maecenas sit amet rutrum magna, quis dapibus libero. Donec quis dignissim turpis. In laoreet in lorem sit amet iaculis.
41 | Sed et ligula id sem elementum tempus. In purus dui, molestie in ex vitae, sodales ultricies dui. Cras cursus elementum augue, in volutpat turpis scelerisque ornare. Nunc pellentesque tristique tortor, et viverra ex efficitur bibendum. Integer ullamcorper lectus sed auctor imperdiet. Vivamus at nisi metus. Sed pulvinar eu mi non tincidunt.
42 | Cras id magna ut eros ultrices lacinia a id lorem. Nullam quis varius arcu. Cras ultricies dui nibh, non vehicula dui pellentesque sed. Suspendisse sit amet vulputate tellus. Cras arcu arcu, pharetra sit amet felis eu, ultricies pharetra magna. Morbi nec justo posuere, euismod dolor vitae, egestas est. Maecenas accumsan, mauris eu accumsan elementum, ligula eros iaculis leo, eget mollis mi ante sed purus. Mauris vehicula suscipit tortor, ac tristique orci ultricies quis. Vestibulum id efficitur leo. Quisque dapibus a justo quis pellentesque. Nam molestie bibendum arcu eu blandit. Aliquam eu nulla malesuada, sodales est ut, tincidunt dolor.
43 | Suspendisse a dui urna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Vestibulum rhoncus, lacus nec pretium vestibulum, ipsum nulla mollis massa, a aliquam nisi felis quis nunc. Morbi dignissim interdum est a congue. Integer magna nisl, aliquet a lacus a, euismod imperdiet erat. Nam convallis lectus eget tellus bibendum, vel rhoncus tortor pretium. Vestibulum a diam vitae lacus bibendum porta.
44 | Sed mi ipsum, eleifend a dapibus id, porttitor id lacus. Ut vitae lectus placerat, suscipit sem pulvinar, hendrerit metus. Aliquam tincidunt nisi consequat felis imperdiet pharetra. Etiam quis ipsum et metus sodales convallis. Sed vitae risus facilisis, interdum nisi vitae, elementum magna. Donec sit amet tristique nibh. Integer consequat magna nibh, ut elementum nulla molestie quis. Aenean eget tortor porttitor quam ultrices dapibus. Phasellus vel pretium odio. Integer et bibendum odio. Vivamus lorem nibh, euismod non erat eu, tempor gravida urna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam facilisis sagittis accumsan. Quisque vestibulum, augue id laoreet euismod, sapien lectus bibendum mi, ac dictum neque augue sed nibh.
45 | Praesent euismod neque in diam aliquet sodales. Morbi semper ultricies mauris, laoreet ultrices erat congue non. Aenean dapibus leo nec mauris scelerisque ullamcorper. Curabitur a molestie leo. Sed tincidunt, nulla in interdum porta, est tellus egestas magna, sollicitudin blandit sem metus ut est. Morbi sit amet facilisis nisl, vel congue arcu. Nullam id vehicula erat. Quisque sit amet consequat nulla, eu pulvinar lectus. Vivamus nec felis libero.
46 | Nullam euismod semper posuere. Proin finibus elementum risus id semper. Quisque turpis leo, malesuada ac fermentum non, interdum id velit. Nulla et massa nulla. Proin ultricies quam vitae massa fermentum, id gravida ante tempor. Nullam ornare pharetra ante sit amet sollicitudin. Sed pharetra nisi eu elementum auctor. Nullam a ex sed purus suscipit iaculis non non turpis.
47 | Nulla non malesuada felis. Nam nec nibh fringilla, consequat purus et, molestie ex. Phasellus bibendum ligula sed tellus rhoncus, at auctor tellus mattis. In in pulvinar dui. Maecenas a venenatis erat, quis vulputate lorem. Vivamus tempus blandit ante, sit amet faucibus nisl ornare eget. Maecenas et nulla ac mauris commodo scelerisque. Duis ut lacinia tellus. Maecenas tempor dolor quam, ut fermentum est mattis vitae. Nam cursus elit a odio mollis iaculis. Donec vitae ante lectus. Etiam aliquam lectus magna, sit amet ultricies ex lobortis id. Sed turpis sapien, faucibus dignissim turpis nec, varius suscipit lectus. Donec ac tellus vitae sem vestibulum aliquet. Duis lacinia eros id elit fringilla, in sollicitudin enim aliquam.
48 | Proin nisi erat, aliquam et neque eu, hendrerit sodales ipsum. Ut efficitur, tortor in viverra fringilla, mi tortor efficitur ipsum, mattis rhoncus diam orci ut lectus. Vivamus orci massa, feugiat quis ipsum eu, eleifend rutrum ligula. Aliquam tincidunt bibendum tortor, quis pretium metus placerat ut. Phasellus tincidunt ut eros at auctor. Nam eget dapibus ante, sit amet auctor mauris. Sed vel dui volutpat, condimentum mi nec, posuere leo. Vestibulum sit amet venenatis odio. Suspendisse ultricies tempus consectetur. Nullam nec ex ac nulla convallis varius id sed elit. Nullam id neque massa. Vestibulum sed placerat purus. Proin sed nulla vel velit fermentum accumsan. Praesent rhoncus, turpis id eleifend auctor, mi tortor elementum velit, at tempor nisl neque eget arcu. Etiam sodales odio sit amet nisi pellentesque, vel egestas arcu viverra. Sed a molestie mauris.
49 | Mauris at iaculis augue, eget dictum nunc. Donec lacinia, velit eu sagittis tristique, ipsum risus sodales nibh, fringilla hendrerit velit ipsum sed nunc. Duis sapien libero, rhoncus ut enim et, congue pellentesque metus. Aliquam rhoncus nisl a ante cursus feugiat. Suspendisse nec sem lorem. Pellentesque lacus metus, commodo eget ultricies non, cursus vel nunc. Nulla porta tristique urna at interdum. Mauris sit amet varius neque, ac commodo orci.
50 | Cras convallis, velit vitae rhoncus dapibus, ante nisi luctus eros, sit amet ultrices lacus sapien luctus arcu. Sed vel vulputate est. Mauris at faucibus nunc, sed aliquet ligula. Nullam vel nisl ex. Phasellus quis sapien nisl. Donec at turpis a orci tincidunt bibendum. Sed tortor est, vulputate eu commodo in, iaculis id neque. Sed et commodo ante. Quisque a tincidunt lorem.
51 | Sed elementum faucibus ligula, condimentum commodo ipsum suscipit eget. Sed nec bibendum orci. Donec placerat mattis nisi, ac bibendum dolor finibus in. In quam magna, blandit eu ligula a, pellentesque vestibulum tortor. Curabitur a accumsan arcu. Nulla facilisi. Nulla at aliquet quam. Nunc sit amet augue sed tortor mollis efficitur quis non nulla. Fusce dignissim faucibus dolor ut sollicitudin. Vivamus sagittis enim a orci feugiat, sit amet feugiat dolor vestibulum. Proin fermentum nisi id gravida posuere. Fusce feugiat, metus quis ornare vulputate, felis enim mattis eros, quis aliquet turpis urna et ipsum. Maecenas at mi ac elit euismod congue. Integer pulvinar scelerisque risus, vel placerat sem feugiat non. Donec vulputate purus vitae facilisis interdum. Vivamus id rutrum nibh.
52 | Nam dolor augue, facilisis eu nibh non, malesuada bibendum lorem. Nulla facilisi. Vestibulum sagittis sollicitudin facilisis. Aliquam vitae posuere dui. Mauris sit amet ante eros. Pellentesque lobortis, libero et sodales venenatis, mauris nisl porttitor purus, sit amet pulvinar odio nibh sit amet ante. Donec eget lacus porttitor, sagittis nisi vitae, feugiat est. Suspendisse tempor, mi in posuere eleifend, enim est ornare ante, vitae porta turpis mi et ex. Vestibulum ligula ligula, fringilla sed consequat vel, euismod in leo. Nunc euismod imperdiet est, vitae pellentesque metus varius at.
53 | Praesent blandit, orci in vulputate ultricies, dui risus suscipit leo, quis posuere sem eros in metus. Donec blandit in nulla quis efficitur. Maecenas dignissim ex eu purus tristique, id iaculis leo interdum. Donec et viverra nulla. Suspendisse eleifend sem eu dui faucibus tincidunt. Duis ac lacus id massa pulvinar sagittis. Curabitur viverra sem sagittis mauris bibendum, ac rutrum justo imperdiet. Proin dignissim venenatis scelerisque. Cras quis blandit ipsum. Nullam sagittis felis ante, nec aliquet mauris venenatis ac. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Phasellus viverra libero enim, venenatis venenatis nisl tristique ac. Suspendisse potenti. Etiam varius diam eget nunc pulvinar, eu facilisis enim imperdiet. Vestibulum ullamcorper, enim sed vehicula sagittis, tellus eros feugiat massa, at fringilla lectus sapien in ipsum.
54 | In tincidunt tortor eget dapibus tempus. Cras vestibulum tempor dapibus. In vestibulum nibh sagittis, mattis dui vitae, mollis ante. Donec pellentesque luctus purus quis dictum. Sed faucibus nibh vel eros facilisis, ut mattis magna varius. Sed eget mi aliquam, imperdiet tortor id, euismod risus. Maecenas eget faucibus lectus, pharetra viverra odio. Phasellus enim mauris, imperdiet et elementum sit amet, gravida nec tortor. In commodo gravida eros, sit amet euismod erat. Vestibulum eu sodales purus. Pellentesque at molestie diam. Praesent feugiat venenatis dui sit amet mollis. Nam feugiat placerat massa, eget malesuada erat lacinia non. Donec porta massa in felis scelerisque pulvinar.
55 | Phasellus ut ultrices felis. Phasellus a arcu dapibus, volutpat elit vel, ultrices urna. Mauris pellentesque elit a quam lacinia rhoncus. Integer ultrices sollicitudin nunc, id suscipit elit sollicitudin et. Phasellus rhoncus velit a turpis lobortis cursus. Suspendisse blandit odio id felis tincidunt, a elementum risus pulvinar. Sed consectetur magna sit amet felis ultrices finibus. Suspendisse eleifend dignissim neque, ullamcorper cursus dolor euismod sit amet. Suspendisse potenti. Nam tempus porta ex vel pharetra.
56 | Donec at tellus convallis, efficitur tellus et, fringilla mauris. Etiam ornare, augue at ultricies accumsan, nibh metus interdum lectus, in hendrerit eros arcu sed felis. Duis ultricies diam sed pretium bibendum. Duis luctus, nunc id sagittis commodo, ex neque lobortis erat, vitae efficitur nisl velit et est. Nam ultrices neque in ligula imperdiet sodales. Suspendisse in lacus non libero feugiat dictum ac et arcu. Maecenas mattis tortor vitae eros euismod, et rutrum tortor scelerisque. Aliquam gravida, lacus non dictum pretium, ligula massa posuere elit, ac vehicula diam orci eget velit. Aliquam erat volutpat. Vestibulum est mauris, fermentum ac imperdiet eget, congue in purus. Nullam tempor nibh felis. Nulla ligula arcu, consectetur sed dictum in, tincidunt ac magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce feugiat ut massa at interdum.
57 | Maecenas interdum dolor ac urna pellentesque mattis. Praesent lacinia, augue in rutrum mattis, nulla quam tempor nibh, a bibendum turpis arcu ut dolor. Vestibulum laoreet pharetra quam, eget fermentum libero porttitor vel. Morbi nec magna molestie, mollis diam vitae, consectetur ipsum. Mauris consectetur in lacus ac varius. Nunc quis aliquet augue, nec laoreet lorem. Fusce ultrices in mauris at aliquet. Vivamus sodales cursus quam, id fringilla dolor tristique vel. Vivamus tristique lectus non est semper mollis. Donec tempus nibh sit amet lacus ultrices, et pharetra ipsum vulputate. Donec venenatis, nisl nec elementum fringilla, metus neque maximus arcu, vel blandit ex massa et risus. Nam ac lectus vulputate, eleifend felis at, facilisis ipsum. Nunc est mauris, euismod eget posuere pulvinar, posuere sed ex. Suspendisse id condimentum lacus, ac malesuada mauris. Nam porta a nunc ut porttitor. Suspendisse sed nibh a turpis mollis dignissim.
58 | Donec sit amet libero mollis quam lacinia accumsan. Aliquam accumsan rutrum arcu, ut iaculis dui facilisis sit amet. Interdum et malesuada fames ac ante ipsum primis in faucibus. Phasellus luctus ut velit eget tincidunt. Duis ac elit sed dolor vehicula suscipit. Aenean vestibulum mauris metus, nec consectetur enim aliquam eget. Nullam facilisis ornare diam vitae semper. Maecenas tincidunt metus eget dictum rhoncus. Donec vitae egestas enim. Quisque sit amet interdum ex, vitae sollicitudin orci. Quisque lorem lorem, interdum eget augue eu, posuere maximus nulla. Quisque malesuada dolor mi, non ultricies tellus aliquet in.
59 | Pellentesque viverra ut metus non tristique. Nullam fermentum, est condimentum maximus pharetra, ligula nibh mollis mauris, ac lobortis tellus metus in tortor. Aliquam a feugiat massa, in venenatis dui. Nam porta vestibulum mauris id rhoncus. Nullam mattis sem non est egestas, ac feugiat lorem viverra. Aenean sagittis nisl vel tristique dictum. Aenean aliquam elit et eros dictum, vitae auctor augue commodo. Maecenas id massa ipsum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Maecenas lobortis viverra orci, in venenatis lorem congue quis. Suspendisse eu ligula vitae lectus facilisis eleifend a eget magna. Aenean vitae orci a erat gravida lobortis nec non nunc. Sed lobortis facilisis ante non porttitor. Quisque lobortis sapien purus, vitae suscipit ipsum tincidunt et. Sed odio est, molestie vel turpis id, iaculis pellentesque turpis.
60 | Praesent tristique ullamcorper elit et suscipit. Maecenas eget leo fermentum, scelerisque nisl sed, consequat ipsum. In congue volutpat volutpat. Phasellus id libero quis mi cursus molestie. Suspendisse faucibus ipsum vitae tortor lobortis euismod. Morbi eleifend euismod vulputate. Integer eget vulputate elit. Nam venenatis turpis vitae mi mollis accumsan. Vivamus rutrum lacus a nisl gravida bibendum. Aliquam cursus nisi ac velit consequat, id pellentesque felis luctus. Proin sollicitudin est risus, non ullamcorper urna malesuada sed. Suspendisse eget augue eu sem congue egestas. Etiam efficitur mauris non nisi condimentum, et volutpat velit sagittis. Sed ultrices pellentesque erat vel ullamcorper.
61 | Aenean lectus metus, lobortis vitae mi in, elementum facilisis lectus. Ut tincidunt dui sed felis fermentum, a egestas felis placerat. Morbi neque neque, sagittis quis congue ac, porta at eros. Fusce luctus ante vel neque pretium congue. In tellus mauris, eleifend at auctor sit amet, suscipit id ex. Curabitur a ex est. Quisque semper mauris sed velit laoreet aliquet. Vestibulum a quam purus. In convallis est magna, ut tincidunt urna elementum a.
62 | Nunc pulvinar ipsum ut turpis mollis aliquam. Mauris molestie orci sapien, vitae suscipit nulla molestie non. Proin faucibus hendrerit tincidunt. Nam feugiat id mauris a pretium. Cras sollicitudin lectus at mollis suscipit. Morbi lacinia ac mi quis pretium. Donec at lobortis tellus.
63 | Etiam sed ipsum nec tortor tempus laoreet. Quisque a nibh gravida, finibus ex vel, tempus nisi. Pellentesque iaculis urna sed tincidunt pellentesque. Sed laoreet fringilla leo, ac gravida sem interdum auctor. Morbi nec sagittis justo. Proin nec sollicitudin orci. Aenean vehicula vehicula nunc eget elementum. Fusce vehicula eget mi ac pellentesque. Cras quis rutrum nunc.
64 | Curabitur congue vel nunc et pharetra. Vivamus feugiat auctor vestibulum. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nunc orci ex, dapibus vel arcu sit amet, egestas bibendum est. Fusce eu gravida lectus. Vivamus quis neque euismod, viverra neque quis, fringilla felis. Duis varius tristique tortor, et imperdiet leo vulputate at. Vivamus volutpat magna semper, aliquam tortor ac, ultrices sem. Morbi arcu velit, pellentesque a posuere sit amet, tincidunt vel arcu. Vivamus non elit laoreet, interdum sapien eget, tempus lorem. Proin at consequat elit, in eleifend turpis.
65 | In quis purus leo. Sed molestie dictum sagittis. Sed dapibus metus sit amet eleifend scelerisque. Cras fermentum urna sit amet ipsum pretium viverra. Aenean vel accumsan nibh. Donec nec metus augue. Proin vel aliquam libero. Donec iaculis ante quis tellus ullamcorper, et tincidunt lectus sollicitudin. Vivamus euismod elit efficitur nulla bibendum rutrum.
66 | Curabitur semper nunc eu nulla convallis mollis. Curabitur vitae ipsum lobortis, sodales magna eu, tincidunt ex. Mauris quis tempor ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Aliquam bibendum tellus in magna porttitor, in vestibulum tellus scelerisque. Pellentesque pellentesque eros luctus, sollicitudin erat et, consectetur erat. Phasellus fringilla, urna cursus auctor scelerisque, elit diam interdum libero, quis pharetra tortor turpis venenatis eros. Praesent eget dictum dui, vitae bibendum est. Sed feugiat tortor orci, a bibendum elit hendrerit in. Nullam eu dictum lectus. Cras nisi nibh, finibus ut rhoncus vitae, vulputate a lectus. Sed sodales sodales lacus nec malesuada. Donec maximus turpis nec elementum tempor. Sed leo sapien, rutrum eget metus mattis, malesuada euismod leo. Proin feugiat nulla ut eros dapibus condimentum.
67 | Nullam finibus ligula vel diam placerat, vel efficitur lacus vestibulum. Curabitur pellentesque et eros non sagittis. Duis eu convallis massa. Nunc consequat interdum neque. Donec dictum orci in massa condimentum, vitae volutpat felis tempor. Etiam laoreet ante sit amet ante commodo, nec aliquam elit congue. Ut sed ligula commodo, varius nisl et, vehicula elit. Fusce ut mi tincidunt, varius libero non, volutpat risus.
68 | Nulla pellentesque finibus luctus. Maecenas mauris risus, vehicula in odio id, euismod tristique nulla. In sit amet elit massa. Vestibulum libero lorem, tristique ullamcorper felis et, consectetur mattis est. In vel nisl vehicula, aliquet est quis, pulvinar leo. Integer a condimentum erat. Fusce rhoncus nunc eu tortor pharetra, a bibendum lorem rutrum. Mauris sagittis dictum hendrerit. Vivamus lacinia porttitor nibh sed laoreet. Sed facilisis mattis nunc, non porta metus mollis sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas egestas mauris ut massa malesuada gravida. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec ipsum sapien, posuere vitae orci et, pulvinar auctor nibh. Phasellus nisl ex, rutrum sit amet lectus a, placerat luctus felis. Curabitur id ante orci.
69 | Curabitur quis efficitur metus. Sed rutrum tincidunt nisl ut ullamcorper. Nunc luctus sapien quis lectus volutpat, non semper magna pellentesque. Vestibulum iaculis diam nibh, porttitor dapibus tellus facilisis vel. Vivamus volutpat magna vitae diam eleifend feugiat. Suspendisse potenti. Duis sollicitudin interdum velit, in commodo libero aliquet sed. Donec non sodales nisl. Sed ac dui vel libero convallis dictum. Integer pellentesque, ante id faucibus bibendum, leo mauris blandit velit, vel placerat tellus magna nec ex.
70 | Donec tristique euismod elit nec pellentesque. Proin rhoncus finibus dictum. Pellentesque porttitor molestie lectus, nec pellentesque magna vehicula in. Vivamus semper leo non consequat semper. Pellentesque tristique, nunc sed eleifend accumsan, magna tortor vulputate arcu, id gravida magna odio quis odio. Suspendisse blandit odio eros, mattis viverra magna ullamcorper quis. Quisque placerat tortor odio, eget pretium arcu dignissim et. Nam elementum tellus sit amet nunc gravida, nec ullamcorper libero finibus. Quisque sollicitudin, leo id consequat ornare, felis nulla feugiat arcu, at accumsan leo orci sed nulla. Integer at enim sit amet tellus accumsan suscipit. Proin vel sem sit amet purus mattis finibus non sed velit. Praesent dignissim id urna et sagittis. Vivamus vulputate tellus eu tellus dictum, at sollicitudin libero vestibulum. Integer hendrerit dapibus arcu, ut faucibus lorem varius sit amet. Integer feugiat vulputate purus, id molestie sapien dictum nec. Duis at urna nunc.
71 | Donec suscipit pretium lectus eget dictum. Maecenas porta nisi nisi. Cras faucibus orci vel nulla tincidunt blandit. Nullam eu metus odio. Integer egestas eget magna eu ornare. Maecenas nec nulla quis ipsum elementum tincidunt. Curabitur molestie libero eu venenatis posuere. Maecenas at mattis arcu.
72 | Sed metus augue, semper sit amet pharetra a, vestibulum eu neque. Morbi ut arcu quis dolor facilisis semper a vitae enim. Vivamus sit amet porttitor enim, tincidunt pellentesque elit. Pellentesque et arcu vulputate, hendrerit ex sit amet, blandit mauris. Duis consectetur libero et purus scelerisque rutrum. Fusce ultrices tristique turpis, quis mollis diam fringilla nec. Donec accumsan mauris nibh, eget semper lacus lobortis sit amet. Integer a tellus at ipsum mollis facilisis eu at felis. Duis vitae magna eu augue dignissim dignissim vitae gravida nisi. Quisque malesuada eu nunc ut convallis. Phasellus semper libero sed ante commodo, at dignissim nisi sollicitudin. Cras varius ipsum elit, in molestie elit vestibulum a. Etiam quam sapien, dignissim et lacinia eu, finibus quis sem. Aliquam vel dictum turpis. Nulla quis ligula erat.
73 | Suspendisse turpis libero, aliquam ut odio sed, congue commodo leo. Aliquam fringilla massa ut sagittis commodo. Cras mollis orci ligula, eget posuere odio sollicitudin at. Ut ultricies quam et tortor tincidunt facilisis. Vestibulum arcu neque, elementum sit amet ornare a, cursus sit amet mi. Vivamus placerat tellus semper massa tristique, in pharetra erat bibendum. Praesent rutrum lobortis efficitur. Aenean tincidunt rutrum rutrum. Maecenas porta ultricies consectetur. Sed ac viverra nisl, eu aliquam mauris. Sed lacinia metus ut nisi pulvinar tempus. Proin ut diam venenatis, vehicula dui et, varius turpis. Praesent massa ligula, vulputate vel efficitur et, efficitur in elit. Vivamus imperdiet, massa tristique euismod porta, lectus ante volutpat velit, sed mattis ante sem eget urna. In leo odio, volutpat ac pretium in, cursus quis mi.
74 | Nullam vehicula orci libero, nec efficitur ipsum mattis sit amet. Fusce iaculis, nunc a semper hendrerit, arcu eros ultrices turpis, ut congue lacus ante eu odio. Donec erat enim, dapibus semper condimentum ac, elementum ut dui. Mauris quis nisi dui. Nulla id gravida nisl, ac elementum urna. Phasellus eget vestibulum nunc, vel sagittis mauris. Integer faucibus, purus vitae pharetra placerat, sapien dui finibus leo, eu pretium lacus ante id nunc. Pellentesque nec porta elit. Ut a sem viverra ligula dapibus porttitor vel luctus neque.
75 | Donec aliquam tortor eu euismod ornare. Quisque sed purus sed sem venenatis mattis. Aliquam faucibus ornare euismod. Phasellus vitae justo et quam finibus gravida. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nunc auctor risus quam, a ornare massa finibus sed. Morbi mollis lacinia suscipit. Ut ac placerat risus, non malesuada urna. Pellentesque hendrerit pretium lorem, a commodo ante efficitur eget. Donec malesuada, mauris vitae ultricies pretium, mi felis feugiat mauris, a pharetra metus ex quis mauris. Vestibulum id tortor in elit lobortis sollicitudin. Pellentesque iaculis interdum risus, id malesuada tellus faucibus vitae. Quisque in fermentum sapien. Curabitur velit tellus, condimentum ac purus nec, tincidunt euismod purus. Duis condimentum mauris eget nunc congue malesuada. Mauris egestas sollicitudin eros, malesuada interdum nunc interdum eget.
76 | Donec lacus ante, congue quis placerat a, consectetur vulputate ligula. Fusce interdum massa et nibh malesuada, non maximus libero placerat. Pellentesque ligula lacus, consectetur a aliquam at, sodales id dolor. Pellentesque pharetra tellus nec nulla fringilla tempor. Nulla sit amet ullamcorper turpis, feugiat molestie dui. Donec pretium euismod nunc, nec tempor turpis sagittis tincidunt. Mauris consectetur vehicula ex, a sodales mi vehicula at. Praesent pellentesque at urna pulvinar viverra. In sit amet fermentum metus. Nulla vitae elit non purus euismod venenatis. Praesent sodales risus non porttitor rhoncus. Nunc luctus vehicula iaculis. Donec augue lacus, cursus quis facilisis id, sollicitudin eu elit.
77 | Curabitur aliquam ante arcu, egestas ultrices sem ultricies a. Vivamus non velit semper, hendrerit nibh sed, feugiat risus. Curabitur et dolor nec mauris mattis volutpat. Vivamus commodo diam eu sem mattis, id commodo urna pretium. Cras sed dolor lacinia, eleifend quam vitae, ornare tellus. Etiam rutrum leo quis erat tincidunt, non varius risus rutrum. Sed tristique ante a mauris lobortis sollicitudin. Vestibulum consequat commodo metus, in cursus ante pulvinar quis.
78 | Aliquam convallis quis sapien sit amet efficitur. Praesent rutrum pretium urna, non posuere magna mollis at. Curabitur euismod augue ultricies, gravida arcu et, suscipit sapien. Proin consequat id leo ut pretium. Vivamus elementum pellentesque urna, sit amet tempor felis rhoncus eu. Aliquam laoreet, felis vel viverra finibus, purus justo tincidunt lacus, sed rutrum dolor elit eget ligula. Sed vitae malesuada nunc. Phasellus eget erat at eros eleifend placerat. Vivamus dapibus sed eros eget rhoncus. Vivamus dolor eros, molestie a erat vitae, efficitur suscipit felis. Phasellus venenatis libero eu metus ullamcorper, a suscipit massa sollicitudin. Nulla lacinia ut est nec ultricies.
79 | Nulla vehicula dolor sapien, quis facilisis ligula rhoncus non. Maecenas et malesuada nibh. Sed ornare mi enim, ac volutpat turpis vulputate quis. Nulla facilisis semper felis pellentesque ultrices. Donec lacinia ut felis a vehicula. Nulla nisi arcu, pharetra nec porta egestas, lacinia et lectus. Sed sollicitudin, ipsum sit amet consectetur scelerisque, augue arcu euismod urna, pulvinar posuere est sapien eu magna. Pellentesque nec mattis nisl. Curabitur vestibulum dapibus metus. Cras porta purus a efficitur tincidunt.
80 | Nam sed felis arcu. Aliquam eu aliquam diam. Nulla quis neque posuere, blandit massa et, tempus tellus. Donec venenatis in nunc eget dignissim. Morbi consectetur enim eget bibendum mollis. Aliquam sit amet enim faucibus tellus sodales scelerisque. Donec pulvinar ornare elit quis tempor. Quisque sed sodales turpis. Etiam non nulla neque. Nulla iaculis, mi laoreet varius venenatis, turpis augue sollicitudin ante, porta dignissim justo erat sed risus. Etiam feugiat sem quis velit laoreet facilisis. Mauris at gravida felis, nec facilisis nulla.
81 | Maecenas iaculis leo a tellus molestie rhoncus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris elementum nunc eget metus consectetur, ut efficitur diam luctus. Duis et urna vel augue rutrum lacinia. Suspendisse pharetra nec ante aliquam imperdiet. Nunc mollis nunc vel purus euismod, a fringilla orci tristique. Maecenas consequat magna vel est rutrum tempus. Aenean ac semper urna. Aenean risus nunc, tempor ut pretium bibendum, pellentesque in erat.
82 | Vivamus a justo maximus, rhoncus ipsum vel, accumsan nibh. Vestibulum maximus quis tortor et ultricies. Pellentesque id neque congue, dapibus neque quis, viverra erat. Vivamus et magna sed lacus efficitur convallis. Nullam mauris nunc, pretium eget ultrices a, auctor quis neque. Vivamus in tellus velit. Praesent cursus dictum nibh mattis congue. Maecenas et risus tincidunt, eleifend risus eget, euismod dui. Etiam nec rutrum lorem, et porttitor massa. Praesent sed velit luctus erat cursus maximus. Sed mauris turpis, malesuada eget dolor nec, pellentesque iaculis nibh.
83 | Aenean vel semper lacus, ac congue ligula. Ut pharetra non urna ac scelerisque. Mauris non sapien porttitor, maximus nunc et, finibus urna. Quisque dui nulla, varius nec convallis vitae, eleifend in est. Etiam feugiat mauris lorem, eget gravida metus lacinia quis. Vestibulum in tincidunt dolor. Nunc aliquet gravida iaculis. Quisque sit amet orci condimentum, iaculis ipsum id, ultricies elit. Curabitur molestie interdum dolor, in faucibus nisl congue quis. Praesent tempus, massa in viverra malesuada, libero justo aliquet libero, eget blandit orci risus non lorem. Sed convallis at ante eu aliquet. Sed non pharetra mauris, ac gravida neque. Nunc vitae ipsum massa.
84 | Sed hendrerit orci sit amet sapien ultricies, et imperdiet ipsum tempus. Donec tincidunt mi in mi lacinia, vitae condimentum lacus dictum. Quisque sed accumsan neque. Suspendisse aliquam dolor libero, at convallis est porttitor a. Duis aliquet odio fringilla condimentum lacinia. Etiam id eleifend magna, in scelerisque libero. Nunc efficitur euismod tristique. Donec molestie purus eget lacus elementum, sed rhoncus sem fermentum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam dolor nunc, malesuada in congue at, pellentesque pharetra ipsum. Nunc placerat mauris iaculis quam condimentum, vel bibendum augue mattis. Nam venenatis metus velit, in tempus lectus pulvinar vitae. Pellentesque mollis elit eu sapien suscipit, sit amet iaculis tellus ornare.
85 | Maecenas volutpat non velit non cursus. Proin maximus feugiat porta. Nunc pharetra laoreet erat. In mattis magna ligula, non molestie nunc mollis vel. Donec id ipsum quis risus porta volutpat eget in dui. Phasellus ipsum risus, commodo feugiat faucibus nec, dapibus a leo. Maecenas libero nulla, scelerisque id est sed, pellentesque facilisis turpis. Sed porta elementum mattis. Quisque faucibus nisi non tincidunt mattis. Pellentesque laoreet eros in mi vestibulum, ut rutrum tellus bibendum. Phasellus at nisl convallis, placerat odio at, varius nunc. Donec aliquam sagittis quam sit amet pharetra. In faucibus faucibus massa nec ultrices. Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur condimentum, quam at pharetra dignissim, velit arcu hendrerit metus, a iaculis enim nibh a felis.
86 | Aliquam vel quam eget diam bibendum congue sit amet ac lacus. Duis vehicula tempor purus eget convallis. Integer ullamcorper tellus nec enim vestibulum iaculis. Fusce quis tincidunt purus, at tincidunt ipsum. Suspendisse in nisl nisi. Vivamus eget molestie risus, sit amet euismod tortor. Nulla ultrices, leo sed tincidunt viverra, mi nibh molestie lacus, nec eleifend nulla lacus vitae dolor. Etiam eget commodo lacus. Cras porttitor quis ante at blandit. Morbi semper leo leo, eget efficitur augue volutpat eget.
87 | Vivamus non mollis lorem, non finibus quam. Nullam mauris odio, varius a diam accumsan, interdum ultrices neque. Sed sit amet tincidunt mi. Nam blandit vel lectus eu tempor. Pellentesque rutrum rutrum lectus non varius. Curabitur sodales felis quis diam dapibus rutrum. Duis a condimentum risus. Aenean sed dui aliquet, malesuada turpis non, consequat magna. Nullam porttitor ornare cursus.
88 | Morbi id tempor enim. Curabitur pellentesque, nulla vitae vulputate porta, dolor diam tempus diam, et tincidunt nulla arcu sit amet ex. Nulla porta consectetur augue. Vestibulum tincidunt varius accumsan. Ut quis lobortis turpis. Nullam pellentesque tempus dui, a ornare ligula volutpat sit amet. Fusce posuere tortor ante, at rutrum augue pretium nec. Maecenas feugiat justo ex, sed tincidunt erat viverra non. Nulla erat ex, vestibulum in felis in, ornare tempus lectus. Donec consectetur est ut justo venenatis rhoncus. Etiam sagittis massa leo, nec condimentum nibh commodo sit amet. Quisque commodo neque quam, vel mollis est efficitur elementum. Donec mattis et augue sit amet cursus.
89 | Vivamus lacinia interdum magna, eget mollis ante molestie vitae. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Fusce sit amet mi et mi ullamcorper bibendum. Quisque ullamcorper sagittis sagittis. Cras elementum mauris nec odio auctor ornare. Phasellus dolor erat, porttitor sit amet erat ultricies, scelerisque euismod ipsum. Cras arcu justo, scelerisque quis arcu id, viverra faucibus lectus. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
90 | Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse malesuada orci eu diam vestibulum imperdiet rutrum quis nibh. Suspendisse pharetra velit at mi venenatis, eget fermentum nunc commodo. Duis id consectetur diam, vitae porta massa. Aliquam id nisi sit amet justo sodales pretium. Nullam faucibus lorem non lectus tristique, sit amet blandit urna laoreet. Phasellus sed accumsan nisl. Donec non orci a massa posuere sodales finibus ac tellus. Donec in feugiat purus. Proin molestie ultrices purus, vitae consectetur dui venenatis eu. Proin ut ultrices lacus, eu efficitur augue. Vivamus at nisl ac lacus consectetur ornare ut facilisis leo. In tempor vel orci at maximus.
91 | Maecenas at scelerisque lorem. Ut sed quam nec nulla placerat hendrerit. Duis tempus, risus ac aliquet efficitur, odio lectus accumsan velit, in eleifend massa ligula sit amet risus. Donec egestas nulla nunc, et faucibus leo sagittis eget. Duis dignissim, dolor eget aliquam auctor, risus augue auctor velit, id elementum arcu arcu sed erat. Proin sit amet fringilla ligula. Aliquam sed leo viverra metus pellentesque pharetra. Nulla velit erat, dictum ut urna ac, posuere dapibus nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;
92 | Pellentesque ultrices elit eu ipsum rutrum eleifend. Proin non ex mollis, dignissim quam at, placerat lorem. Praesent pellentesque risus erat. Aliquam erat volutpat. Aenean euismod laoreet erat vitae vulputate. Vestibulum consequat bibendum ligula sit amet facilisis. Aenean varius quis orci et suscipit. Nulla eu purus congue, consectetur nisi et, blandit felis. Maecenas vel congue diam. Sed sed augue in tortor pellentesque ultrices. Mauris eget orci ornare, efficitur diam ut, efficitur augue. Donec sit amet vehicula sem, eget ultricies sapien. Morbi vitae porta nunc. Donec id turpis diam. Nullam eget eros nec quam congue aliquet. Sed facilisis at orci sit amet feugiat.
93 | Praesent cursus at nisi sit amet mattis. Ut enim felis, pulvinar eu arcu a, iaculis posuere ligula. Integer ut ligula rutrum, condimentum diam non, posuere nisi. Ut neque est, cursus vitae eleifend at, iaculis vitae ligula. Morbi id enim congue, tincidunt metus at, consectetur ipsum. Cras posuere quam id accumsan laoreet. Sed a lectus auctor diam fringilla varius nec at velit. Integer porttitor metus sagittis, iaculis lorem ac, pretium risus.
94 | Integer consectetur sem et sagittis porttitor. Curabitur consequat at neque in faucibus. Aliquam ullamcorper, leo id iaculis consectetur, nisi nibh blandit dolor, et porta metus mauris id libero. Vestibulum iaculis urna odio, in imperdiet erat ultrices vel. Sed luctus augue et dictum pulvinar. Ut iaculis nisi ac nulla tincidunt, at eleifend metus faucibus. Etiam id sagittis dui, a porta tellus. Vestibulum et maximus diam.
95 | Ut vitae lorem vel urna aliquam gravida. Donec sit amet lectus feugiat, feugiat metus sit amet, luctus nulla. Morbi sem orci, vestibulum quis odio quis, congue accumsan dolor. Phasellus cursus magna non massa auctor posuere. Ut turpis nibh, vehicula nec ante et, eleifend laoreet nisl. Morbi lacinia, elit nec lobortis fermentum, nibh erat pretium erat, sed sollicitudin metus lacus eu magna. Sed lobortis tincidunt augue ac consequat. Aliquam in semper velit. In tortor nisl, luctus eu diam eget, fringilla rhoncus dolor. Vestibulum in porta felis, nec lobortis elit. Duis rutrum nec magna sed aliquam. Sed ut cursus velit.
96 | Aliquam dictum tempus nunc, sed pellentesque lectus laoreet id. Curabitur a felis quis metus sollicitudin ultricies. Proin in sem facilisis, pharetra libero auctor, eleifend ligula. Nullam vel augue dui. Phasellus finibus nisi ac augue volutpat, dictum rutrum ipsum posuere. Duis posuere leo eu sem semper ornare. Etiam sit amet massa lorem. Cras sem velit, malesuada eu erat id, pulvinar varius dui. Etiam ullamcorper lacus ut turpis gravida mollis. Donec id neque venenatis, congue ante lobortis, facilisis libero. Nulla non placerat urna. Etiam pellentesque diam eget dui tempor tempus. Suspendisse blandit, odio sed cursus laoreet, mi libero sagittis nibh, non aliquam lorem lorem ac lorem. Curabitur tristique quis diam non porttitor. Sed diam lacus, posuere vitae dui quis, scelerisque mollis ante.
97 | Sed in vehicula enim. Etiam ut nunc molestie, bibendum nunc nec, cursus orci. Curabitur nulla orci, interdum non ipsum ut, mollis faucibus dolor. Duis urna eros, porttitor eget faucibus et, pretium vitae ipsum. Integer purus neque, pellentesque rhoncus enim lobortis, placerat vulputate dui. Donec suscipit sapien ut nulla vehicula, eu dignissim leo venenatis. Ut sed mauris lacinia, sodales felis non, interdum orci. Suspendisse auctor nibh et leo pretium, non bibendum odio facilisis.
98 | Integer dapibus venenatis placerat. Ut interdum purus sit amet rutrum dictum. Sed elementum sem mi, a ullamcorper sapien lobortis vel. Vivamus nec venenatis metus. Suspendisse ut elit id tortor ullamcorper interdum. Etiam sed velit augue. Donec nec gravida dui, at gravida augue. Sed eget lacinia risus. Etiam velit ex, varius vitae risus sit amet, pretium gravida sapien. Donec a dictum elit. Phasellus non dictum elit.
99 | Duis sapien metus, interdum eu sem non, viverra hendrerit lorem. Pellentesque nec lectus mi. Aliquam et enim vitae lectus fringilla blandit. Integer in elit hendrerit, mollis felis eget, volutpat nibh. Phasellus varius venenatis dapibus. Nam interdum in nibh non viverra. Aliquam a nunc lorem. Phasellus eu libero justo. Pellentesque non ornare magna, in sagittis orci. Duis vel lorem nec tortor feugiat finibus nec nec dolor. Donec porttitor neque ac metus venenatis, ut facilisis tellus dapibus. Donec pulvinar mi nibh, sit amet malesuada diam varius sed. Pellentesque id vehicula felis. Cras a neque id erat volutpat euismod in quis ipsum. Aenean pulvinar faucibus purus, quis consectetur odio ullamcorper et. Praesent egestas suscipit vulputate.
100 | Suspendisse porta tristique aliquet. Quisque vel ipsum sed justo mollis porttitor. Sed aliquam urna elit, id lacinia lectus placerat a. Curabitur fermentum in neque in tempus. Suspendisse felis quam, pulvinar aliquet leo nec, malesuada fringilla diam. Suspendisse dapibus eleifend fermentum. Ut blandit justo in ipsum ultricies aliquet. Integer vulputate et nulla quis accumsan. Nunc eu ornare dui. Ut mollis magna purus, et tempus risus suscipit id. Nullam efficitur aliquet ipsum. Quisque nec lacus quis nisl gravida dignissim.
101 | Quisque ut tempus enim. Nullam vel venenatis odio. Aliquam at risus et arcu ornare blandit. Donec sed arcu malesuada odio dictum mattis sit amet ut ipsum. Donec vitae nulla tempus neque sagittis tempus vel in ligula. Pellentesque sed ex placerat, pharetra risus vitae, facilisis sem. Suspendisse in dignissim elit, nec posuere leo. Phasellus eu maximus mauris. Maecenas blandit mauris nisl, eget egestas tortor volutpat nec. Aliquam elit tortor, scelerisque nec justo vel, dignissim faucibus enim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras vitae tristique lectus. Praesent malesuada enim eget ipsum finibus tincidunt. Pellentesque sit amet consectetur quam.
102 | Nulla facilisi. In efficitur efficitur tortor at dignissim. Vestibulum tristique magna at lacus aliquam, vel sollicitudin metus tempus. Nam quis accumsan sem. Suspendisse potenti. Aenean sagittis in mi et eleifend. In nec sapien dolor. Aliquam ornare lorem sed nulla rutrum cursus. Sed imperdiet nibh lorem, vel vestibulum est posuere ac. Donec vitae quam eros.
103 | Proin ac est luctus, bibendum ex sit amet, sollicitudin nisi. Praesent mattis scelerisque blandit. In hac habitasse platea dictumst. Sed et pretium tortor. Donec maximus lectus sed quam congue euismod. Praesent egestas tincidunt ante eu ornare. Vivamus dictum diam turpis, eget venenatis felis volutpat at. Curabitur egestas tempor neque at porta. Aliquam erat volutpat. Nulla non laoreet lacus, nec vulputate lectus. Integer vestibulum semper odio, ac sodales augue porta et. Integer ultricies nisl est, non efficitur lacus feugiat sit amet. Ut consequat aliquet vestibulum.
104 | Morbi tempus, velit in commodo scelerisque, ex quam tempus sem, eu rhoncus augue nisl quis arcu. Vestibulum porttitor odio ut elementum rutrum. Ut quis urna lobortis, luctus nunc eu, ornare nisl. Praesent dictum massa sed dictum accumsan. Quisque interdum aliquam metus vel facilisis. Integer malesuada augue sit amet tortor feugiat, bibendum scelerisque felis accumsan. Nunc tempor sollicitudin nulla a lacinia. Duis imperdiet sagittis neque, id ullamcorper ligula euismod sed. Ut in suscipit purus. Aenean cursus libero dui, sed ultrices sapien cursus sit amet.
105 | Nam eget libero id nisi mattis bibendum in nec diam. Nunc sollicitudin metus at mauris suscipit bibendum. Nulla facilisi. Sed et dignissim quam. Duis sagittis pretium consectetur. Morbi tristique blandit magna, dapibus semper libero efficitur vel. Aliquam posuere ullamcorper congue. Vestibulum pulvinar metus sed efficitur suscipit. Nulla pulvinar sodales risus sit amet vehicula. Praesent ut eros dolor.
106 | Aliquam elit purus, vestibulum vestibulum risus a, mollis lacinia elit. Praesent ac volutpat sem. Quisque ac euismod ex, non varius nulla. Duis nibh arcu, hendrerit sed quam sit amet, blandit efficitur purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec malesuada nisl eget efficitur eleifend. Maecenas laoreet, ex quis malesuada porttitor, justo lectus egestas massa, pellentesque commodo lectus turpis quis elit. Praesent facilisis non ligula vitae viverra. Aliquam egestas urna quis lectus dictum, sit amet tristique nulla pulvinar. Quisque sagittis turpis metus, vitae tristique quam semper nec. Nunc eget pretium urna. Integer eu purus tellus. Quisque gravida, elit ut porta maximus, mi velit dignissim arcu, sed pretium risus velit vel nulla.
107 | Etiam tincidunt porta sem, eu luctus nibh congue nec. Vestibulum condimentum commodo nisl. Suspendisse eget nunc mollis, aliquet massa quis, imperdiet diam. Cras volutpat arcu vitae orci facilisis varius. Maecenas ut mi non elit eleifend lobortis nec malesuada velit. Integer sagittis turpis ut pretium porttitor. Sed non dui suscipit, tempor neque nec, molestie lectus. Etiam ullamcorper felis non nisi efficitur, sed fermentum enim viverra. Phasellus iaculis tortor vel egestas porta. Maecenas nec euismod odio, eget rhoncus justo. Ut porta rhoncus augue, dignissim iaculis diam congue sit amet. Aliquam ultricies euismod nunc, a sodales dui euismod vel. Aenean posuere massa vel enim venenatis, quis dictum magna eleifend.
108 | Sed scelerisque congue scelerisque. Sed auctor dui nulla, id efficitur est ullamcorper vitae. Ut tristique nunc condimentum mi lacinia, eu varius ligula euismod. Ut tincidunt efficitur leo, ut vestibulum nibh convallis ut. Integer id eros pellentesque, semper purus nec, condimentum felis. Mauris maximus arcu in justo fringilla, ut mollis est dapibus. Quisque in quam justo. Fusce at enim in augue iaculis facilisis eget eu sapien. Praesent iaculis ex a neque laoreet, id fermentum velit dapibus. Nunc vestibulum justo enim, nec sagittis turpis volutpat ac. Praesent elit orci, egestas quis lorem viverra, ornare pellentesque lacus. Morbi dui diam, posuere non nisl eu, blandit ultricies risus. Proin ac aliquam lectus, vitae porttitor tortor. Etiam mollis mi et risus blandit tincidunt.
109 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque hendrerit sollicitudin gravida. Vivamus interdum sed elit vel suscipit. Nunc vulputate nisi sed mattis maximus. Nunc consectetur vel nulla eu gravida. Maecenas vitae ex ultricies, ultricies lacus vitae, lobortis quam. Curabitur pretium gravida augue in congue. Nam vel sapien pellentesque, ornare justo eget, imperdiet justo. Cras pellentesque, dui id maximus vestibulum, nunc metus aliquet turpis, vitae pulvinar ex ligula at libero. Aliquam neque massa, tempus nec est id, pretium maximus ante.
110 | Donec aliquam interdum euismod. Donec blandit orci est, nec malesuada velit auctor quis. Duis in auctor libero, at eleifend magna. Duis eu nibh enim. Nulla varius nulla ante. Integer vel faucibus sapien, non tristique nulla. Aenean blandit viverra nibh, vel porta lorem. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut porta posuere augue at aliquet. In eros est, iaculis eu posuere a, venenatis nec erat. In hac habitasse platea dictumst.
111 | Aliquam interdum arcu a sem ornare euismod. Mauris a laoreet magna, vitae euismod est. Morbi sodales nunc a luctus lobortis. Nulla eget lacus porta, ultricies nibh nec, semper nisl. Praesent lobortis massa et justo elementum, ac imperdiet nunc fermentum. Nam blandit augue odio, et venenatis turpis tempor quis. Sed molestie, quam eget rutrum lacinia, orci purus ullamcorper risus, ut varius mauris lectus a tellus. Praesent ornare porttitor vestibulum.
112 | Duis gravida felis elit, iaculis molestie justo mattis vitae. Sed urna ex, ullamcorper sed nibh a, eleifend gravida ligula. Nam tincidunt, nisl
--------------------------------------------------------------------------------