localmemcache 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +5 -2
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/bench/lmc_bench.rb +1 -1
- data/bench/tokyo_cabinet_bench +3 -0
- data/bench/tokyo_cabinet_bench.rb +20 -0
- data/site/doc/classes/LocalMemCache.html +146 -129
- data/site/doc/classes/LocalMemCache.src/M000001.html +1 -1
- data/site/doc/classes/LocalMemCache.src/M000002.html +26 -5
- data/site/doc/classes/LocalMemCache.src/M000003.html +16 -5
- data/site/doc/classes/LocalMemCache.src/M000004.html +7 -23
- data/site/doc/classes/LocalMemCache.src/M000005.html +7 -13
- data/site/doc/classes/LocalMemCache.src/M000006.html +4 -5
- data/site/doc/classes/LocalMemCache.src/M000007.html +6 -5
- data/site/doc/classes/LocalMemCache.src/M000008.html +6 -6
- data/site/doc/classes/LocalMemCache.src/M000009.html +1 -1
- data/site/doc/classes/LocalMemCache.src/M000010.html +4 -6
- data/site/doc/classes/LocalMemCache.src/M000011.html +4 -4
- data/site/doc/classes/LocalMemCache.src/M000012.html +4 -4
- data/site/doc/classes/LocalMemCache/ArgError.html +2 -2
- data/site/doc/classes/LocalMemCache/InitError.html +2 -2
- data/site/doc/classes/LocalMemCache/LocalMemCacheError.html +2 -2
- data/site/doc/classes/LocalMemCache/LockError.html +2 -2
- data/site/doc/classes/LocalMemCache/LockTimedOut.html +2 -2
- data/site/doc/classes/LocalMemCache/MemoryPoolClosed.html +2 -2
- data/site/doc/classes/LocalMemCache/MemoryPoolFull.html +2 -2
- data/site/doc/classes/LocalMemCache/OutOfMemoryError.html +2 -2
- data/site/doc/classes/LocalMemCache/RecoveryFailed.html +2 -2
- data/site/doc/classes/LocalMemCache/ShmError.html +2 -2
- data/site/doc/classes/LocalMemCache/ShmLockFailed.html +2 -2
- data/site/doc/classes/LocalMemCache/ShmUnlockFailed.html +2 -2
- data/site/doc/created.rid +1 -1
- data/site/doc/fr_class_index.html +2 -0
- data/site/doc/fr_file_index.html +3 -2
- data/site/doc/fr_method_index.html +17 -11
- data/site/doc/index.html +1 -1
- data/site/index.html +33 -17
- data/src/lmc_common.c +2 -1
- data/src/lmc_common.h +1 -1
- data/src/lmc_hashtable.c +62 -2
- data/src/lmc_hashtable.h +4 -1
- data/src/lmc_shm.c +1 -3
- data/src/lmc_shm.h +1 -3
- data/src/lmc_valloc.c +5 -0
- data/src/lmc_valloc.h +1 -0
- data/src/localmemcache.c +43 -8
- data/src/localmemcache.h +24 -6
- data/src/ruby-binding/localmemcache.rb +14 -29
- data/src/ruby-binding/rblocalmemcache.c +127 -16
- data/src/tests/allocfailure.rb +1 -1
- data/src/tests/bench.rb +1 -1
- data/src/tests/bench_keys.rb +1 -1
- data/src/tests/crash.rb +1 -1
- data/src/tests/lmc.rb +65 -9
- data/src/tests/lmctestapi.c +1 -1
- data/src/tests/parallelwrite.rb +1 -1
- data/src/tests/ttkeys +10 -0
- data/src/tests/ttkeys.rb +35 -0
- data/src/tests/ttlmc.rb +24 -6
- data/src/tests/ttrandom_pair +10 -0
- data/src/tests/ttrandom_pair.rb +23 -0
- metadata +8 -5
- data/site/doc/files/__/src/ruby-binding/extconf_rb.html +0 -108
- data/site/doc/files/__/src/ruby-binding/localmemcache_rb.html +0 -108
- data/site/doc/files/__/src/ruby-binding/rblocalmemcache_c.html +0 -101
data/src/tests/lmctestapi.c
CHANGED
@@ -80,7 +80,7 @@ static lmc_shm_t* get_Shm(VALUE obj) {
|
|
80
80
|
|
81
81
|
static VALUE SHM__new(VALUE klass, VALUE namespace) {
|
82
82
|
Check_Type(namespace, T_STRING);
|
83
|
-
lmc_shm_t *ls = lmc_shm_create("test2", 2000000, 0
|
83
|
+
lmc_shm_t *ls = lmc_shm_create("test2", 2000000, 0);
|
84
84
|
return Data_Wrap_Struct(klass, NULL, lmc_shm_destroy, ls);
|
85
85
|
}
|
86
86
|
|
data/src/tests/parallelwrite.rb
CHANGED
data/src/tests/ttkeys
ADDED
data/src/tests/ttkeys.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
$DIR=File.dirname(__FILE__)
|
2
|
+
['.', '..', '../ruby-binding/'].each {|p| $:.unshift File.join($DIR, p) }
|
3
|
+
|
4
|
+
require 'localmemcache'
|
5
|
+
|
6
|
+
LocalMemCache.drop :namespace => "keys-test", :force => true
|
7
|
+
$lm2 = LocalMemCache.new :namespace=>"keys-test"
|
8
|
+
|
9
|
+
def __key_size2(lm)
|
10
|
+
c = 0
|
11
|
+
lm.each_pair {|k, v|
|
12
|
+
c +=1
|
13
|
+
vv = "v#{k}"
|
14
|
+
if v != vv
|
15
|
+
puts "Failed value: #{v.inspect}, e: #{vv.inspect}"
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
}
|
19
|
+
c
|
20
|
+
end
|
21
|
+
|
22
|
+
$c= 0
|
23
|
+
$diff = 0
|
24
|
+
4000.times {
|
25
|
+
$c += 1
|
26
|
+
$lm2[$c] = "v#{$c}"
|
27
|
+
if $lm2.keys.size != $c
|
28
|
+
puts "WOHAA: #{$diff} #{$lm2.keys.size} != #{$c}"
|
29
|
+
exit 2
|
30
|
+
end
|
31
|
+
if __key_size2($lm2) != $c
|
32
|
+
puts "KS2 WOHAA: #{$diff} #{__key_size2($lm2)} != #{$c}"
|
33
|
+
exit 2
|
34
|
+
end
|
35
|
+
}
|
data/src/tests/ttlmc.rb
CHANGED
@@ -4,21 +4,35 @@ $DIR=File.dirname(__FILE__)
|
|
4
4
|
require 'torture'
|
5
5
|
require 'localmemcache'
|
6
6
|
|
7
|
-
LocalMemCache.
|
7
|
+
LocalMemCache.drop :namespace => "torture", :force => true
|
8
8
|
$h = LocalMemCache.new :namespace=>'torture', :size_mb => 200
|
9
9
|
|
10
|
+
puts "STARTED: #{$$}"
|
11
|
+
|
10
12
|
class LocalMemCache
|
11
13
|
def __set(k, v)
|
12
14
|
set(k, v)
|
13
|
-
if get(k) != v.to_s
|
14
|
-
|
15
|
-
|
16
|
-
end
|
15
|
+
#if get(k) != v.to_s
|
16
|
+
# puts "Set FAILED!"
|
17
|
+
# raise "set failed"
|
18
|
+
#end
|
17
19
|
end
|
18
20
|
def __delete(k)
|
19
21
|
delete(k)
|
20
22
|
end
|
21
23
|
|
24
|
+
def __clear
|
25
|
+
clear if rand * 100 > 99
|
26
|
+
end
|
27
|
+
|
28
|
+
def __each_pair
|
29
|
+
each_pair { } if rand * 100 > 99
|
30
|
+
end
|
31
|
+
|
32
|
+
def __keys
|
33
|
+
keys if rand * 100 > 99
|
34
|
+
end
|
35
|
+
|
22
36
|
end
|
23
37
|
|
24
38
|
|
@@ -33,5 +47,9 @@ TortureTesting.no_progress
|
|
33
47
|
TortureTesting.run(200_000,
|
34
48
|
[$h, :get, [:rand_index]],
|
35
49
|
[$h, :__set, [:rand_index, :any]],
|
36
|
-
[$h, :__delete, [:rand_index]]
|
50
|
+
[$h, :__delete, [:rand_index]],
|
51
|
+
[$h, :__clear],
|
52
|
+
[$h, :__keys],
|
53
|
+
[$h, :random_pair],
|
54
|
+
[$h, :__each_pair]
|
37
55
|
)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
$DIR=File.dirname(__FILE__)
|
2
|
+
['.', '..', '../ruby-binding/'].each {|p| $:.unshift File.join($DIR, p) }
|
3
|
+
|
4
|
+
require 'localmemcache'
|
5
|
+
|
6
|
+
LocalMemCache.drop :namespace => "random-pair-test", :force => true
|
7
|
+
$lm2 = LocalMemCache.new :namespace=>"random-pair-test"
|
8
|
+
|
9
|
+
$h = {}
|
10
|
+
counter = 0
|
11
|
+
4000.times {|i|
|
12
|
+
counter += 1
|
13
|
+
$h[i.to_s] = 1
|
14
|
+
$lm2[i] = i
|
15
|
+
}
|
16
|
+
|
17
|
+
while counter > 0
|
18
|
+
k, v = $lm2.random_pair
|
19
|
+
if $h[k]
|
20
|
+
$h[k] = nil
|
21
|
+
counter -= 1
|
22
|
+
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: localmemcache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sven C. Koehler
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-06 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -40,6 +40,8 @@ files:
|
|
40
40
|
- bench/lmc_bench.rb
|
41
41
|
- bench/memcached_bench
|
42
42
|
- bench/memcached_bench.rb
|
43
|
+
- bench/tokyo_cabinet_bench
|
44
|
+
- bench/tokyo_cabinet_bench.rb
|
43
45
|
- bench/tyrant_bench
|
44
46
|
- bench/tyrant_bench.rb
|
45
47
|
- configure
|
@@ -74,9 +76,6 @@ files:
|
|
74
76
|
- site/doc/classes/LocalMemCache/ShmLockFailed.html
|
75
77
|
- site/doc/classes/LocalMemCache/ShmUnlockFailed.html
|
76
78
|
- site/doc/created.rid
|
77
|
-
- site/doc/files/__/src/ruby-binding/extconf_rb.html
|
78
|
-
- site/doc/files/__/src/ruby-binding/localmemcache_rb.html
|
79
|
-
- site/doc/files/__/src/ruby-binding/rblocalmemcache_c.html
|
80
79
|
- site/doc/fr_class_index.html
|
81
80
|
- site/doc/fr_file_index.html
|
82
81
|
- site/doc/fr_method_index.html
|
@@ -126,8 +125,12 @@ files:
|
|
126
125
|
- src/tests/torture.rb
|
127
126
|
- src/tests/ttalloc
|
128
127
|
- src/tests/ttalloc.rb
|
128
|
+
- src/tests/ttkeys
|
129
|
+
- src/tests/ttkeys.rb
|
129
130
|
- src/tests/ttlmc
|
130
131
|
- src/tests/ttlmc.rb
|
132
|
+
- src/tests/ttrandom_pair
|
133
|
+
- src/tests/ttrandom_pair.rb
|
131
134
|
has_rdoc: true
|
132
135
|
homepage: http://localmemcache.rubyforge.org/
|
133
136
|
post_install_message:
|
@@ -1,108 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
-
|
6
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
-
<head>
|
8
|
-
<title>File: extconf.rb</title>
|
9
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
-
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
-
<link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
-
<script type="text/javascript">
|
13
|
-
// <![CDATA[
|
14
|
-
|
15
|
-
function popupCode( url ) {
|
16
|
-
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
-
}
|
18
|
-
|
19
|
-
function toggleCode( id ) {
|
20
|
-
if ( document.getElementById )
|
21
|
-
elem = document.getElementById( id );
|
22
|
-
else if ( document.all )
|
23
|
-
elem = eval( "document.all." + id );
|
24
|
-
else
|
25
|
-
return false;
|
26
|
-
|
27
|
-
elemStyle = elem.style;
|
28
|
-
|
29
|
-
if ( elemStyle.display != "block" ) {
|
30
|
-
elemStyle.display = "block"
|
31
|
-
} else {
|
32
|
-
elemStyle.display = "none"
|
33
|
-
}
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
|
38
|
-
// Make codeblocks hidden by default
|
39
|
-
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
-
|
41
|
-
// ]]>
|
42
|
-
</script>
|
43
|
-
|
44
|
-
</head>
|
45
|
-
<body>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<div id="fileHeader">
|
50
|
-
<h1>extconf.rb</h1>
|
51
|
-
<table class="header-table">
|
52
|
-
<tr class="top-aligned-row">
|
53
|
-
<td><strong>Path:</strong></td>
|
54
|
-
<td>../src/ruby-binding/extconf.rb
|
55
|
-
</td>
|
56
|
-
</tr>
|
57
|
-
<tr class="top-aligned-row">
|
58
|
-
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>Sun Apr 05 12:31:31 +0000 2009</td>
|
60
|
-
</tr>
|
61
|
-
</table>
|
62
|
-
</div>
|
63
|
-
<!-- banner header -->
|
64
|
-
|
65
|
-
<div id="bodyContent">
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<div id="contextContent">
|
70
|
-
|
71
|
-
|
72
|
-
<div id="requires-list">
|
73
|
-
<h3 class="section-bar">Required files</h3>
|
74
|
-
|
75
|
-
<div class="name-list">
|
76
|
-
mkmf
|
77
|
-
</div>
|
78
|
-
</div>
|
79
|
-
|
80
|
-
</div>
|
81
|
-
|
82
|
-
|
83
|
-
</div>
|
84
|
-
|
85
|
-
|
86
|
-
<!-- if includes -->
|
87
|
-
|
88
|
-
<div id="section">
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
<!-- if method_list -->
|
98
|
-
|
99
|
-
|
100
|
-
</div>
|
101
|
-
|
102
|
-
|
103
|
-
<div id="validator-badges">
|
104
|
-
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
105
|
-
</div>
|
106
|
-
|
107
|
-
</body>
|
108
|
-
</html>
|
@@ -1,108 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
-
|
6
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
-
<head>
|
8
|
-
<title>File: localmemcache.rb</title>
|
9
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
-
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
-
<link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
-
<script type="text/javascript">
|
13
|
-
// <![CDATA[
|
14
|
-
|
15
|
-
function popupCode( url ) {
|
16
|
-
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
-
}
|
18
|
-
|
19
|
-
function toggleCode( id ) {
|
20
|
-
if ( document.getElementById )
|
21
|
-
elem = document.getElementById( id );
|
22
|
-
else if ( document.all )
|
23
|
-
elem = eval( "document.all." + id );
|
24
|
-
else
|
25
|
-
return false;
|
26
|
-
|
27
|
-
elemStyle = elem.style;
|
28
|
-
|
29
|
-
if ( elemStyle.display != "block" ) {
|
30
|
-
elemStyle.display = "block"
|
31
|
-
} else {
|
32
|
-
elemStyle.display = "none"
|
33
|
-
}
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
|
38
|
-
// Make codeblocks hidden by default
|
39
|
-
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
-
|
41
|
-
// ]]>
|
42
|
-
</script>
|
43
|
-
|
44
|
-
</head>
|
45
|
-
<body>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<div id="fileHeader">
|
50
|
-
<h1>localmemcache.rb</h1>
|
51
|
-
<table class="header-table">
|
52
|
-
<tr class="top-aligned-row">
|
53
|
-
<td><strong>Path:</strong></td>
|
54
|
-
<td>../src/ruby-binding/localmemcache.rb
|
55
|
-
</td>
|
56
|
-
</tr>
|
57
|
-
<tr class="top-aligned-row">
|
58
|
-
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>Thu Apr 16 23:46:19 +0000 2009</td>
|
60
|
-
</tr>
|
61
|
-
</table>
|
62
|
-
</div>
|
63
|
-
<!-- banner header -->
|
64
|
-
|
65
|
-
<div id="bodyContent">
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<div id="contextContent">
|
70
|
-
|
71
|
-
|
72
|
-
<div id="requires-list">
|
73
|
-
<h3 class="section-bar">Required files</h3>
|
74
|
-
|
75
|
-
<div class="name-list">
|
76
|
-
rblocalmemcache
|
77
|
-
</div>
|
78
|
-
</div>
|
79
|
-
|
80
|
-
</div>
|
81
|
-
|
82
|
-
|
83
|
-
</div>
|
84
|
-
|
85
|
-
|
86
|
-
<!-- if includes -->
|
87
|
-
|
88
|
-
<div id="section">
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
<!-- if method_list -->
|
98
|
-
|
99
|
-
|
100
|
-
</div>
|
101
|
-
|
102
|
-
|
103
|
-
<div id="validator-badges">
|
104
|
-
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
105
|
-
</div>
|
106
|
-
|
107
|
-
</body>
|
108
|
-
</html>
|
@@ -1,101 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
2
|
-
<!DOCTYPE html
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
5
|
-
|
6
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
7
|
-
<head>
|
8
|
-
<title>File: rblocalmemcache.c</title>
|
9
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
10
|
-
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
11
|
-
<link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
|
12
|
-
<script type="text/javascript">
|
13
|
-
// <![CDATA[
|
14
|
-
|
15
|
-
function popupCode( url ) {
|
16
|
-
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
17
|
-
}
|
18
|
-
|
19
|
-
function toggleCode( id ) {
|
20
|
-
if ( document.getElementById )
|
21
|
-
elem = document.getElementById( id );
|
22
|
-
else if ( document.all )
|
23
|
-
elem = eval( "document.all." + id );
|
24
|
-
else
|
25
|
-
return false;
|
26
|
-
|
27
|
-
elemStyle = elem.style;
|
28
|
-
|
29
|
-
if ( elemStyle.display != "block" ) {
|
30
|
-
elemStyle.display = "block"
|
31
|
-
} else {
|
32
|
-
elemStyle.display = "none"
|
33
|
-
}
|
34
|
-
|
35
|
-
return true;
|
36
|
-
}
|
37
|
-
|
38
|
-
// Make codeblocks hidden by default
|
39
|
-
document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
|
40
|
-
|
41
|
-
// ]]>
|
42
|
-
</script>
|
43
|
-
|
44
|
-
</head>
|
45
|
-
<body>
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
<div id="fileHeader">
|
50
|
-
<h1>rblocalmemcache.c</h1>
|
51
|
-
<table class="header-table">
|
52
|
-
<tr class="top-aligned-row">
|
53
|
-
<td><strong>Path:</strong></td>
|
54
|
-
<td>../src/ruby-binding/rblocalmemcache.c
|
55
|
-
</td>
|
56
|
-
</tr>
|
57
|
-
<tr class="top-aligned-row">
|
58
|
-
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>Fri Apr 17 00:06:49 +0000 2009</td>
|
60
|
-
</tr>
|
61
|
-
</table>
|
62
|
-
</div>
|
63
|
-
<!-- banner header -->
|
64
|
-
|
65
|
-
<div id="bodyContent">
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
<div id="contextContent">
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
</div>
|
74
|
-
|
75
|
-
|
76
|
-
</div>
|
77
|
-
|
78
|
-
|
79
|
-
<!-- if includes -->
|
80
|
-
|
81
|
-
<div id="section">
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
<!-- if method_list -->
|
91
|
-
|
92
|
-
|
93
|
-
</div>
|
94
|
-
|
95
|
-
|
96
|
-
<div id="validator-badges">
|
97
|
-
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
98
|
-
</div>
|
99
|
-
|
100
|
-
</body>
|
101
|
-
</html>
|