Optitransfer commited on
Commit
dec4cee
·
verified ·
1 Parent(s): ae0f017

professional org card with discovery metadata

Browse files
Files changed (1) hide show
  1. index.html +258 -206
index.html CHANGED
@@ -1,294 +1,346 @@
1
  <!DOCTYPE html>
2
  <html lang="en">
3
  <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
 
 
 
 
 
 
6
  <title>Optitransfer</title>
7
  <style>
8
  :root {
9
- --bg: #0a0a0f;
10
- --surface: #12121a;
11
- --border: #1e1e2e;
12
  --text: #e4e4e7;
13
  --muted: #71717a;
14
- --accent: #6366f1;
15
- --accent-glow: rgba(99, 102, 241, 0.15);
16
- --cyan: #22d3ee;
17
- --green: #34d399;
18
  }
19
  * { margin: 0; padding: 0; box-sizing: border-box; }
20
  body {
21
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
22
  background: var(--bg);
23
  color: var(--text);
24
  line-height: 1.6;
25
- padding: 2rem;
26
- max-width: 960px;
 
 
27
  margin: 0 auto;
 
28
  }
29
- .hero {
 
 
30
  text-align: center;
31
- padding: 3rem 0 2rem;
32
- border-bottom: 1px solid var(--border);
33
- margin-bottom: 2rem;
34
  }
35
- .hero h1 {
36
- font-size: 2.5rem;
37
- font-weight: 700;
38
- letter-spacing: -0.03em;
39
- margin-bottom: 0.5rem;
 
 
40
  }
41
- .hero h1 .merge { color: var(--accent); }
42
- .hero .tagline {
43
  font-size: 1.1rem;
44
  color: var(--muted);
45
- max-width: 600px;
46
- margin: 0 auto 1.5rem;
 
47
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  .badges {
49
  display: flex;
50
- gap: 0.75rem;
51
  justify-content: center;
 
52
  flex-wrap: wrap;
 
53
  }
54
- .badge {
55
- display: inline-flex;
56
- align-items: center;
57
- gap: 0.4rem;
58
- padding: 0.35rem 0.75rem;
59
- border-radius: 999px;
60
- font-size: 0.8rem;
61
- font-weight: 500;
62
- background: var(--surface);
63
- border: 1px solid var(--border);
64
- color: var(--muted);
65
  }
66
- .badge.patent { border-color: var(--accent); color: var(--accent); }
67
- .badge.swiss { border-color: #ef4444; color: #ef4444; }
68
- .badge.oss { border-color: var(--green); color: var(--green); }
69
 
70
- .section { margin-bottom: 2.5rem; }
 
 
 
71
  .section h2 {
72
- font-size: 1.2rem;
73
  font-weight: 600;
74
- margin-bottom: 1rem;
75
- color: var(--text);
76
- }
77
- .section h2::before {
78
- content: '';
79
- display: inline-block;
80
- width: 3px;
81
- height: 1em;
82
- background: var(--accent);
83
- margin-right: 0.6rem;
84
- vertical-align: middle;
85
- border-radius: 2px;
86
  }
87
- .grid {
 
 
88
  display: grid;
89
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
90
  gap: 1rem;
91
  }
92
- .card {
93
  background: var(--surface);
94
  border: 1px solid var(--border);
95
- border-radius: 12px;
96
  padding: 1.25rem;
97
- transition: border-color 0.2s;
 
 
 
98
  }
99
- .card:hover { border-color: var(--accent); }
100
- .card h3 {
101
- font-size: 0.95rem;
102
- font-weight: 600;
103
- margin-bottom: 0.4rem;
104
  }
105
- .card p {
106
- font-size: 0.8rem;
 
 
 
107
  color: var(--muted);
108
- line-height: 1.5;
109
  }
110
- .card .num {
111
- font-size: 1.8rem;
112
- font-weight: 700;
113
- color: var(--accent);
114
- margin-bottom: 0.25rem;
115
  }
116
 
117
- .spaces-grid {
 
118
  display: grid;
119
- grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
120
  gap: 1rem;
 
121
  }
122
- .space-card {
123
- background: var(--surface);
124
- border: 1px solid var(--border);
125
- border-radius: 12px;
126
- padding: 1.25rem;
127
- text-decoration: none;
128
  color: var(--text);
129
- transition: border-color 0.2s, transform 0.2s;
130
- display: block;
131
  }
132
- .space-card:hover {
133
- border-color: var(--cyan);
134
- transform: translateY(-2px);
 
 
 
 
135
  }
136
- .space-card .icon { font-size: 1.5rem; margin-bottom: 0.5rem; }
137
- .space-card h3 { font-size: 0.9rem; font-weight: 600; margin-bottom: 0.3rem; }
138
- .space-card p { font-size: 0.78rem; color: var(--muted); }
139
 
140
- .install {
 
 
 
 
 
 
 
 
141
  background: var(--surface);
142
  border: 1px solid var(--border);
143
- border-radius: 12px;
144
- padding: 1.5rem;
145
- text-align: center;
146
- }
147
- .install code {
148
- font-family: 'SF Mono', 'Fira Code', monospace;
149
- font-size: 1.1rem;
150
- color: var(--cyan);
151
- background: rgba(34, 211, 238, 0.08);
152
- padding: 0.5rem 1.5rem;
153
  border-radius: 8px;
154
- display: inline-block;
155
- }
156
- .install .links {
157
- margin-top: 1rem;
158
- display: flex;
159
- gap: 1.5rem;
160
- justify-content: center;
161
- }
162
- .install .links a {
163
- color: var(--muted);
164
  text-decoration: none;
165
- font-size: 0.85rem;
166
- transition: color 0.2s;
167
  }
168
- .install .links a:hover { color: var(--accent); }
 
 
 
169
 
170
- .data-section {
171
- background: var(--surface);
172
- border: 1px solid var(--border);
173
- border-radius: 12px;
174
- padding: 1.25rem;
175
- }
176
- .data-section h3 {
177
- font-size: 0.9rem;
178
- font-weight: 600;
179
- margin-bottom: 0.5rem;
180
  }
181
- .data-section p {
182
- font-size: 0.8rem;
183
  color: var(--muted);
 
 
 
184
  }
185
- .data-section a {
186
- color: var(--cyan);
187
- text-decoration: none;
 
 
 
 
 
 
 
188
  }
189
- .data-section a:hover { text-decoration: underline; }
190
 
 
191
  .footer {
192
  text-align: center;
193
- padding-top: 2rem;
194
- border-top: 1px solid var(--border);
195
  color: var(--muted);
196
  font-size: 0.8rem;
 
 
 
 
 
 
 
197
  }
198
- .footer a { color: var(--accent); text-decoration: none; }
199
  .footer a:hover { text-decoration: underline; }
 
 
 
 
 
 
200
  </style>
201
  </head>
202
  <body>
203
 
204
- <div class="hero">
205
- <h1>crdt-<span class="merge">merge</span></h1>
206
- <p class="tagline">Convergent intelligence infrastructure for distributed AI systems. Deterministic model merging with mathematical guarantees.</p>
207
- <div class="badges">
208
- <span class="badge patent">Patent Pending: GB 2607132.4</span>
209
- <span class="badge swiss">Swiss-Registered</span>
210
- <span class="badge oss">Open Source</span>
211
- </div>
212
- </div>
213
 
214
- <div class="section">
215
- <h2>Core Capabilities</h2>
216
- <div class="grid">
217
- <div class="card">
218
- <div class="num">26</div>
219
- <h3>Merge Strategies</h3>
220
- <p>From simple averaging to adaptive trust-weighted convergence</p>
221
- </div>
222
- <div class="card">
223
- <div class="num">4,498</div>
224
- <h3>Tests Passing</h3>
225
- <p>97 modules, full coverage, CI on every commit</p>
226
- </div>
227
- <div class="card">
228
- <div class="num">0</div>
229
- <h3>Coordination Required</h3>
230
- <p>Models merge without sync, without conflict, provably correct</p>
231
  </div>
232
- <div class="card">
233
- <div class="num">∞</div>
234
- <h3>Merge Order</h3>
235
- <p>Any order, any subset, same result. CRDT guarantees convergence.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
236
  </div>
237
  </div>
238
- </div>
239
 
240
- <div class="section">
241
- <h2>Live Demos</h2>
242
- <div class="spaces-grid">
243
- <a class="space-card" href="https://huggingface.co/spaces/Optitransfer/crdt-merge">
244
- <div class="icon">🔀</div>
245
- <h3>crdt-merge</h3>
246
- <p>Merge real models with full provenance tracking and compliance audit</p>
247
- </a>
248
- <a class="space-card" href="https://huggingface.co/spaces/Optitransfer/convergence-lab">
249
- <div class="icon">🔬</div>
250
- <h3>Convergence Lab</h3>
251
- <p>Test all 26 strategies, visualise convergence dynamics in real-time</p>
252
- </a>
253
- <a class="space-card" href="https://huggingface.co/spaces/Optitransfer/crdt-merge-data">
254
- <div class="icon">📊</div>
255
- <h3>Data Playground</h3>
256
- <p>CRDT merging applied to tabular datasets with conflict resolution</p>
257
- </a>
258
- <a class="space-card" href="https://huggingface.co/spaces/Optitransfer/crdt-merge-federation">
259
- <div class="icon">🌐</div>
260
- <h3>Federation</h3>
261
- <p>Multi-node gossip convergence simulation across distributed nodes</p>
262
- </a>
263
  </div>
264
- </div>
265
 
266
- <div class="section">
267
- <h2>Get Started</h2>
268
- <div class="install">
269
- <code>pip install crdt-merge</code>
270
- <div class="links">
271
- <a href="https://github.com/mgillr/crdt-merge">GitHub</a>
272
- <a href="https://pypi.org/project/crdt-merge/">PyPI</a>
273
- <a href="https://github.com/mgillr/crdt-merge#readme">Documentation</a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  </div>
275
  </div>
276
- </div>
277
 
278
- <div class="section">
279
- <h2>Data Products</h2>
280
- <div class="data-section">
281
- <h3>Swiss Web Premium (A+) -- 110,491 documents</h3>
282
- <p>Compliance-ready web corpus from .ch domains. EU AI Act compliant, PII-redacted, SHA256-verified. Multilingual: DE 61%, FR 19%, EN 11%, IT 5%.</p>
283
- <p style="margin-top: 0.5rem;">
284
- <a href="https://huggingface.co/datasets/OptiTransferData/swiss-web-premium-ch">Sample (10k)</a> ·
285
- <a href="https://huggingface.co/datasets/OptiTransferData/swiss-web-premium-ch-full">Full Dataset</a>
286
- </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
  </div>
288
- </div>
289
 
290
- <div class="footer">
291
- <p><strong>Optitransfer</strong> · Switzerland · <a href="mailto:data@optitransfer.ch">data@optitransfer.ch</a></p>
 
 
292
  </div>
293
 
294
  </body>
 
1
  <!DOCTYPE html>
2
  <html lang="en">
3
  <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="description" content="Optitransfer -- Convergent intelligence infrastructure. Building the mathematical layer where distributed AI systems merge, verify, and evolve deterministically." />
7
+ <meta name="keywords" content="crdt-merge, model merging, CRDT, conflict-free, deterministic, distributed systems, federated learning, agent memory, neural networks, convergence, Byzantine fault tolerance, provenance" />
8
+ <meta name="author" content="Ryan Gillespie" />
9
+ <meta property="og:title" content="Optitransfer" />
10
+ <meta property="og:description" content="Convergent intelligence infrastructure. Deterministic merge for AI model weights, datasets, and agent memory." />
11
+ <meta property="og:type" content="website" />
12
+ <meta property="og:url" content="https://huggingface.co/OptiTransferData" />
13
  <title>Optitransfer</title>
14
  <style>
15
  :root {
16
+ --bg: #0a0a0a;
17
+ --surface: #111113;
18
+ --border: #1e1e22;
19
  --text: #e4e4e7;
20
  --muted: #71717a;
21
+ --accent: #a1a1aa;
22
+ --link: #93c5fd;
23
+ --mono: 'SF Mono', 'Cascadia Code', 'Fira Code', 'JetBrains Mono', Consolas, monospace;
24
+ --sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
25
  }
26
  * { margin: 0; padding: 0; box-sizing: border-box; }
27
  body {
28
+ font-family: var(--sans);
29
  background: var(--bg);
30
  color: var(--text);
31
  line-height: 1.6;
32
+ -webkit-font-smoothing: antialiased;
33
+ }
34
+ .container {
35
+ max-width: 720px;
36
  margin: 0 auto;
37
+ padding: 4rem 2rem;
38
  }
39
+
40
+ /* Header */
41
+ .header {
42
  text-align: center;
43
+ margin-bottom: 4rem;
 
 
44
  }
45
+ .header h1 {
46
+ font-size: 1.75rem;
47
+ font-weight: 500;
48
+ letter-spacing: 0.08em;
49
+ text-transform: uppercase;
50
+ color: var(--accent);
51
+ margin-bottom: 1rem;
52
  }
53
+ .header .tagline {
 
54
  font-size: 1.1rem;
55
  color: var(--muted);
56
+ font-weight: 400;
57
+ max-width: 480px;
58
+ margin: 0 auto;
59
  }
60
+ .header .install {
61
+ margin-top: 2rem;
62
+ display: inline-block;
63
+ font-family: var(--mono);
64
+ font-size: 0.875rem;
65
+ color: var(--text);
66
+ background: var(--surface);
67
+ border: 1px solid var(--border);
68
+ padding: 0.6rem 1.5rem;
69
+ border-radius: 6px;
70
+ letter-spacing: 0.02em;
71
+ }
72
+
73
+ /* Badges */
74
  .badges {
75
  display: flex;
 
76
  justify-content: center;
77
+ gap: 0.5rem;
78
  flex-wrap: wrap;
79
+ margin-top: 1.5rem;
80
  }
81
+ .badges a {
82
+ opacity: 0.85;
83
+ transition: opacity 0.2s;
 
 
 
 
 
 
 
 
84
  }
85
+ .badges a:hover { opacity: 1; }
 
 
86
 
87
+ /* Sections */
88
+ .section {
89
+ margin-bottom: 3rem;
90
+ }
91
  .section h2 {
92
+ font-size: 0.75rem;
93
  font-weight: 600;
94
+ letter-spacing: 0.12em;
95
+ text-transform: uppercase;
96
+ color: var(--muted);
97
+ margin-bottom: 1.25rem;
98
+ padding-bottom: 0.5rem;
99
+ border-bottom: 1px solid var(--border);
 
 
 
 
 
 
100
  }
101
+
102
+ /* Link grid */
103
+ .links {
104
  display: grid;
105
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
106
  gap: 1rem;
107
  }
108
+ .link-card {
109
  background: var(--surface);
110
  border: 1px solid var(--border);
111
+ border-radius: 8px;
112
  padding: 1.25rem;
113
+ text-decoration: none;
114
+ color: var(--text);
115
+ transition: border-color 0.2s, transform 0.15s;
116
+ display: block;
117
  }
118
+ .link-card:hover {
119
+ border-color: var(--accent);
120
+ transform: translateY(-1px);
 
 
121
  }
122
+ .link-card .label {
123
+ font-size: 0.7rem;
124
+ font-weight: 600;
125
+ letter-spacing: 0.1em;
126
+ text-transform: uppercase;
127
  color: var(--muted);
128
+ margin-bottom: 0.35rem;
129
  }
130
+ .link-card .value {
131
+ font-size: 0.95rem;
132
+ color: var(--text);
 
 
133
  }
134
 
135
+ /* Stats row */
136
+ .stats {
137
  display: grid;
138
+ grid-template-columns: repeat(4, 1fr);
139
  gap: 1rem;
140
+ text-align: center;
141
  }
142
+ .stat .number {
143
+ font-family: var(--mono);
144
+ font-size: 1.5rem;
145
+ font-weight: 600;
 
 
146
  color: var(--text);
 
 
147
  }
148
+ .stat .label {
149
+ font-size: 0.7rem;
150
+ font-weight: 500;
151
+ letter-spacing: 0.08em;
152
+ text-transform: uppercase;
153
+ color: var(--muted);
154
+ margin-top: 0.25rem;
155
  }
 
 
 
156
 
157
+ /* Spaces list */
158
+ .spaces {
159
+ display: grid;
160
+ gap: 0.75rem;
161
+ }
162
+ .space {
163
+ display: flex;
164
+ justify-content: space-between;
165
+ align-items: center;
166
  background: var(--surface);
167
  border: 1px solid var(--border);
 
 
 
 
 
 
 
 
 
 
168
  border-radius: 8px;
169
+ padding: 1rem 1.25rem;
 
 
 
 
 
 
 
 
 
170
  text-decoration: none;
171
+ color: var(--text);
172
+ transition: border-color 0.2s;
173
  }
174
+ .space:hover { border-color: var(--accent); }
175
+ .space .name { font-weight: 500; font-size: 0.95rem; }
176
+ .space .desc { font-size: 0.8rem; color: var(--muted); }
177
+ .space .arrow { color: var(--muted); font-size: 1.1rem; }
178
 
179
+ /* Research hints */
180
+ .research-list {
181
+ list-style: none;
182
+ padding: 0;
 
 
 
 
 
 
183
  }
184
+ .research-list li {
 
185
  color: var(--muted);
186
+ font-size: 0.9rem;
187
+ padding: 0.4rem 0;
188
+ border-bottom: 1px solid var(--border);
189
  }
190
+ .research-list li:last-child { border-bottom: none; }
191
+ .research-list li::before {
192
+ content: '';
193
+ display: inline-block;
194
+ width: 6px;
195
+ height: 6px;
196
+ border-radius: 50%;
197
+ background: var(--accent);
198
+ margin-right: 0.75rem;
199
+ vertical-align: middle;
200
  }
 
201
 
202
+ /* Footer */
203
  .footer {
204
  text-align: center;
 
 
205
  color: var(--muted);
206
  font-size: 0.8rem;
207
+ margin-top: 2rem;
208
+ padding-top: 2rem;
209
+ border-top: 1px solid var(--border);
210
+ }
211
+ .footer a {
212
+ color: var(--accent);
213
+ text-decoration: none;
214
  }
 
215
  .footer a:hover { text-decoration: underline; }
216
+
217
+ @media (max-width: 600px) {
218
+ .container { padding: 2rem 1rem; }
219
+ .stats { grid-template-columns: repeat(2, 1fr); }
220
+ .links { grid-template-columns: 1fr; }
221
+ }
222
  </style>
223
  </head>
224
  <body>
225
 
226
+ <div class="container">
 
 
 
 
 
 
 
 
227
 
228
+ <header class="header">
229
+ <h1>Optitransfer</h1>
230
+ <p class="tagline">
231
+ Convergent intelligence infrastructure.<br />
232
+ The mathematical layer where distributed AI systems merge, verify, and evolve.
233
+ </p>
234
+ <code class="install">pip install crdt-merge</code>
235
+ <div class="badges">
236
+ <a href="https://pypi.org/project/crdt-merge/"><img src="https://img.shields.io/pypi/v/crdt-merge?label=PyPI&color=blue" alt="PyPI" /></a>
237
+ <a href="https://pepy.tech/projects/crdt-merge"><img src="https://img.shields.io/pypi/dm/crdt-merge?label=downloads&color=brightgreen" alt="Downloads" /></a>
238
+ <a href="https://github.com/mgillr/crdt-merge"><img src="https://img.shields.io/badge/tests-4%2C498-brightgreen" alt="Tests" /></a>
239
+ <a href="https://github.com/mgillr/crdt-merge/blob/main/LICENSE"><img src="https://img.shields.io/badge/BSL%201.1%20→%20Apache%202.0-orange" alt="License" /></a>
 
 
 
 
 
240
  </div>
241
+ </header>
242
+
243
+ <div class="section">
244
+ <h2>At a Glance</h2>
245
+ <div class="stats">
246
+ <div class="stat">
247
+ <div class="number">26</div>
248
+ <div class="label">Strategies</div>
249
+ </div>
250
+ <div class="stat">
251
+ <div class="number">4,498</div>
252
+ <div class="label">Tests</div>
253
+ </div>
254
+ <div class="stat">
255
+ <div class="number">38.8×</div>
256
+ <div class="label">Acceleration</div>
257
+ </div>
258
+ <div class="stat">
259
+ <div class="number">4</div>
260
+ <div class="label">Languages</div>
261
+ </div>
262
  </div>
263
  </div>
 
264
 
265
+ <div class="section">
266
+ <h2>Research Directions</h2>
267
+ <ul class="research-list">
268
+ <li>Convergent model merging at arbitrary scale</li>
269
+ <li>Distributed trust and Byzantine-resilient verification</li>
270
+ <li>Provenance-complete AI with cryptographic audit</li>
271
+ <li>Continual learning without catastrophic forgetting</li>
272
+ <li>Multi-agent coordination without central arbiters</li>
273
+ </ul>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  </div>
 
275
 
276
+ <div class="section">
277
+ <h2>Demonstrations</h2>
278
+ <div class="spaces">
279
+ <a href="https://huggingface.co/spaces/Optitransfer/crdt-merge" class="space">
280
+ <div>
281
+ <div class="name">crdt-merge</div>
282
+ <div class="desc">Merge real models with full provenance</div>
283
+ </div>
284
+ <span class="arrow">→</span>
285
+ </a>
286
+ <a href="https://huggingface.co/spaces/Optitransfer/convergence-lab" class="space">
287
+ <div>
288
+ <div class="name">Convergence Lab</div>
289
+ <div class="desc">26 strategies, convergence visualisation, experiments</div>
290
+ </div>
291
+ <span class="arrow">→</span>
292
+ </a>
293
+ <a href="https://huggingface.co/spaces/Optitransfer/crdt-merge-data" class="space">
294
+ <div>
295
+ <div class="name">Data Playground</div>
296
+ <div class="desc">CRDT merging on tabular data</div>
297
+ </div>
298
+ <span class="arrow">→</span>
299
+ </a>
300
+ <a href="https://huggingface.co/spaces/Optitransfer/crdt-merge-federation" class="space">
301
+ <div>
302
+ <div class="name">Federation</div>
303
+ <div class="desc">Multi-node gossip convergence</div>
304
+ </div>
305
+ <span class="arrow">→</span>
306
+ </a>
307
  </div>
308
  </div>
 
309
 
310
+ <div class="section">
311
+ <h2>Links</h2>
312
+ <div class="links">
313
+ <a href="https://github.com/mgillr/crdt-merge" class="link-card">
314
+ <div class="label">Source</div>
315
+ <div class="value">GitHub</div>
316
+ </a>
317
+ <a href="https://pypi.org/project/crdt-merge/" class="link-card">
318
+ <div class="label">Package</div>
319
+ <div class="value">PyPI</div>
320
+ </a>
321
+ <a href="https://clickpy.clickhouse.com/dashboard/crdt-merge" class="link-card">
322
+ <div class="label">Analytics</div>
323
+ <div class="value">ClickPy</div>
324
+ </a>
325
+ <a href="https://pepy.tech/projects/crdt-merge" class="link-card">
326
+ <div class="label">Downloads</div>
327
+ <div class="value">PePy</div>
328
+ </a>
329
+ <a href="https://github.com/mgillr/crdt-merge/blob/main/docs/CRDT_ARCHITECTURE.md" class="link-card">
330
+ <div class="label">Technical Paper</div>
331
+ <div class="value">Architecture</div>
332
+ </a>
333
+ <a href="https://crates.io/crates/crdt-merge" class="link-card">
334
+ <div class="label">Rust Port</div>
335
+ <div class="value">crates.io</div>
336
+ </a>
337
+ </div>
338
  </div>
 
339
 
340
+ <footer class="footer">
341
+ <p>Switzerland · <a href="mailto:data@optitransfer.ch">data@optitransfer.ch</a> · Patent Pending (GB 2607132.4)</p>
342
+ </footer>
343
+
344
  </div>
345
 
346
  </body>