Skip to content

Commit 158eaa6

Browse files
committed
Merge tag '0.12.0'
0.12.0 release
2 parents dfd5281 + ba4081a commit 158eaa6

File tree

35 files changed

+272
-38
lines changed

35 files changed

+272
-38
lines changed

AUTHORS.txt

+117-5
Large diffs are not rendered by default.

RELEASES.txt RELEASES.md

+122
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,125 @@
1+
Version 0.12.0 (October 2014)
2+
-----------------------------
3+
4+
* ~1900 changes, numerous bugfixes
5+
6+
* Highlights
7+
8+
* The introductory documentation (now called The Rust Guide) has
9+
been completely rewritten, as have a number of supplementary
10+
guides.
11+
* Rust's package manager, Cargo, continues to improve and is
12+
sometimes considered to be quite awesome.
13+
* Many API's in `std` have been reviewed and updated for
14+
consistency with the in-development Rust coding
15+
guidelines. The standard library documentation tracks
16+
stabilization progress.
17+
* Minor libraries have been moved out-of-tree to the rust-lang org
18+
on GitHub: uuid, semver, glob, num, hexfloat, fourcc. They can
19+
be installed with Cargo.
20+
* Lifetime elision allows lifetime annotations to be left off of
21+
function declarations in many common scenarios.
22+
* Rust now works on 64-bit Windows.
23+
24+
* Language
25+
* Indexing can be overloaded with the `Index` and `IndexMut`
26+
traits.
27+
* The `if let` construct takes a branch only if the `let` pattern
28+
matches, currently behind the 'if_let' feature gate.
29+
* 'where clauses', a more flexible syntax for specifying trait
30+
bounds that is more aesthetic, have been added for traits and
31+
free functions. Where clauses will in the future make it
32+
possible to constrain associated types, which would be
33+
impossible with the existing syntax.
34+
* A new slicing syntax (e.g. `[0..4]`) has been introduced behind
35+
the 'slicing_syntax' feature gate, and can be overloaded with
36+
the `Slice` or `SliceMut` traits.
37+
* The syntax for matching of sub-slices has been changed to use a
38+
postfix `..` instead of prefix (.e.g. `[a, b, c..]`), for
39+
consistency with other uses of `..` and to future-proof
40+
potential additional uses of the syntax.
41+
* The syntax for matching inclusive ranges in patterns has changed
42+
from `0..3` to `0...4` to be consistent with the exclusive range
43+
syntax for slicing.
44+
* Matching of sub-slices in non-tail positions (e.g. `[a.., b,
45+
c]`) has been put behind the 'advanced_slice_patterns' feature
46+
gate and may be removed in the future.
47+
* Components of tuples and tuple structs can be extracted using
48+
the `value.0` syntax, currently behind the `tuple_indexing`
49+
feature gate.
50+
* The `#[crate_id]` attribute is no longer supported; versioning
51+
is handled by the package manager.
52+
* Renaming crate imports are now written `extern crate foo as bar`
53+
instead of `extern crate bar = foo`.
54+
* Renaming use statements are now written `use foo as bar` instead
55+
of `use bar = foo`.
56+
* `let` and `match` bindings and argument names in macros are now
57+
hygienic.
58+
* The new, more efficient, closure types ('unboxed closures') have
59+
been added under a feature gate, 'unboxed_closures'. These will
60+
soon replace the existing closure types, once higher-ranked
61+
trait lifetimes are added to the language.
62+
* `move` has been added as a keyword, for indicating closures
63+
that capture by value.
64+
* Mutation and assignment is no longer allowed in pattern guards.
65+
* Generic structs and enums can now have trait bounds.
66+
* The `Share` trait is now called `Sync` to free up the term
67+
'shared' to refer to 'shared reference' (the default reference
68+
type.
69+
* Dynamically-sized types have been mostly implemented,
70+
unifying the behavior of fat-pointer types with the rest of the
71+
type system.
72+
* As part of dynamically-sized types, the `Sized` trait has been
73+
introduced, which qualifying types implement by default, and
74+
which type parameters expect by default. To specify that a type
75+
parameter does not need to be sized, write `<Sized? T>`. Most
76+
types are `Sized`, notable exceptions being unsized arrays
77+
(`[T]`) and trait types.
78+
* Closures can return `!`, as in `|| -> !` or `proc() -> !`.
79+
* Lifetime bounds can now be applied to type parameters and object
80+
types.
81+
* The old, reference counted GC type, `Gc<T>` which was once
82+
denoted by the `@` sigil, has finally been removed. GC will be
83+
revisited in the future.
84+
85+
* Libraries
86+
* Library documentation has been improved for a number of modules.
87+
* Bit-vectors, collections::bitv has been modernized.
88+
* The url crate is deprecated in favor of
89+
http://github.com/servo/rust-url, which can be installed with
90+
Cargo.
91+
* Most I/O stream types can be cloned and subsequently closed from
92+
a different thread.
93+
* A `std::time::Duration` type has been added for use in I/O
94+
methods that rely on timers, as well as in the 'time' crate's
95+
`Timespec` arithmetic.
96+
* The runtime I/O abstraction layer that enabled the green thread
97+
scheduler to do non-thread-blocking I/O has been removed, along
98+
with the libuv-based implementation employed by the green thread
99+
scheduler. This will greatly simplify the future I/O work.
100+
* `collections::btree` has been rewritten to have a more
101+
idiomatic and efficient design.
102+
103+
* Tooling
104+
* rustdoc output now indicates the stability levels of API's.
105+
* The `--crate-name` flag can specify the name of the crate
106+
being compiled, like `#[crate_name]`.
107+
* The `-C metadata` specifies additional metadata to hash into
108+
symbol names, and `-C extra-filename` specifies additional
109+
information to put into the output filename, for use by the
110+
package manager for versioning.
111+
* debug info generation has continued to improve and should be
112+
more reliable under both gdb and lldb.
113+
* rustc has experimental support for compiling in parallel
114+
using the `-C codegen-units` flag.
115+
* rustc no longer encodes rpath information into binaries by
116+
default.
117+
118+
* Misc
119+
* Stack usage has been optimized with LLVM lifetime annotations.
120+
* Official Rust binaries on Linux are more compatible with older
121+
kernels and distributions, built on CentOS 5.10.
122+
1123
Version 0.11.0 (July 2014)
2124
-------------------------
3125

mk/dist.mk

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ PKG_FILES := \
4444
$(S)AUTHORS.txt \
4545
$(S)CONTRIBUTING.md \
4646
$(S)README.md \
47-
$(S)RELEASES.txt \
47+
$(S)RELEASES.md \
4848
$(S)configure $(S)Makefile.in \
4949
$(S)man \
5050
$(addprefix $(S)src/, \

src/libarena/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#![license = "MIT/ASL2"]
2727
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2828
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
29-
html_root_url = "http://doc.rust-lang.org/master/")]
29+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
3030

3131
#![feature(unsafe_destructor)]
3232
#![allow(missing_doc)]

src/libcollections/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
#![license = "MIT/ASL2"]
2020
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2121
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
22-
html_root_url = "http://doc.rust-lang.org/master/",
22+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
2323
html_playground_url = "http://play.rust-lang.org/")]
2424

2525
#![allow(unknown_features)]

src/libcore/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
#![crate_type = "rlib"]
5454
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
5555
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
56-
html_root_url = "http://doc.rust-lang.org/master/",
56+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
5757
html_playground_url = "http://play.rust-lang.org/")]
5858

5959
#![no_std]

src/libdebug/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#![crate_type = "dylib"]
2424
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2525
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
26-
html_root_url = "http://doc.rust-lang.org/master/")]
26+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
2727
#![experimental]
2828
#![feature(macro_rules)]
2929
#![allow(experimental)]

src/libflate/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Simple [DEFLATE][def]-based compression. This is a wrapper around the
2525
#![license = "MIT/ASL2"]
2626
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2727
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
28-
html_root_url = "http://doc.rust-lang.org/master/")]
28+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
2929
#![feature(phase)]
3030

3131
#[cfg(test)] #[phase(plugin, link)] extern crate log;

src/libfourcc/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ fn main() {
4848
#![license = "MIT/ASL2"]
4949
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
5050
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
51-
html_root_url = "http://doc.rust-lang.org/master/")]
51+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
5252

5353
#![feature(plugin_registrar)]
5454

src/libgetopts/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
#![license = "MIT/ASL2"]
8686
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
8787
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
88-
html_root_url = "http://doc.rust-lang.org/master/",
88+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
8989
html_playground_url = "http://play.rust-lang.org/")]
9090
#![feature(globs, phase)]
9191
#![feature(import_shadowing)]

src/libglob/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#![license = "MIT/ASL2"]
3232
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
3333
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
34-
html_root_url = "http://doc.rust-lang.org/master/",
34+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
3535
html_playground_url = "http://play.rust-lang.org/")]
3636
#![allow(deprecated)]
3737

src/libgraphviz/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ pub fn main() {
273273
#![license = "MIT/ASL2"]
274274
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
275275
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
276-
html_root_url = "http://doc.rust-lang.org/master/")]
276+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
277277

278278
use std::io;
279279
use std::str;

src/libgreen/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
#![crate_type = "dylib"]
181181
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
182182
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
183-
html_root_url = "http://doc.rust-lang.org/master/",
183+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
184184
html_playground_url = "http://play.rust-lang.org/")]
185185

186186
// NB this does *not* include globs, please keep it that way.

src/libhexfloat/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ fn main() {
4545
#![license = "MIT/ASL2"]
4646
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
4747
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
48-
html_root_url = "http://doc.rust-lang.org/master/")]
48+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
4949
#![feature(plugin_registrar)]
5050

5151
extern crate syntax;

src/liblibc/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#![crate_type = "rlib"]
1717
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
1818
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
19-
html_root_url = "http://doc.rust-lang.org/master/",
19+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
2020
html_playground_url = "http://play.rust-lang.org/")]
2121

2222
/*!

src/liblog/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@
164164
#![crate_type = "dylib"]
165165
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
166166
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
167-
html_root_url = "http://doc.rust-lang.org/master/",
167+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
168168
html_playground_url = "http://play.rust-lang.org/")]
169169
#![feature(macro_rules)]
170170
#![deny(missing_doc)]

src/libnative/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
#![crate_type = "dylib"]
5454
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
5555
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
56-
html_root_url = "http://doc.rust-lang.org/master/")]
56+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
5757

5858
#![deny(unused_result, unused_must_use)]
5959
#![allow(non_camel_case_types, deprecated)]

src/libnum/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
#![license = "MIT/ASL2"]
5757
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
5858
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
59-
html_root_url = "http://doc.rust-lang.org/master/",
59+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
6060
html_playground_url = "http://play.rust-lang.org/")]
6161
#![allow(deprecated)] // from_str_radix
6262

src/librand/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#![crate_type = "rlib"]
2222
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk.png",
2323
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
24-
html_root_url = "http://doc.rust-lang.org/master/",
24+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
2525
html_playground_url = "http://play.rust-lang.org/")]
2626

2727
#![feature(macro_rules, phase, globs)]

src/librbml/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#![license = "MIT/ASL2"]
2323
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2424
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
25-
html_root_url = "http://doc.rust-lang.org/master/",
25+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
2626
html_playground_url = "http://play.rust-lang.org/")]
2727
#![allow(unknown_features)]
2828
#![feature(macro_rules, phase, slicing_syntax)]

src/libregex/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@
365365
#![license = "MIT/ASL2"]
366366
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
367367
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
368-
html_root_url = "http://doc.rust-lang.org/master/",
368+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
369369
html_playground_url = "http://play.rust-lang.org/")]
370370

371371
#![allow(unknown_features)]

src/libregex_macros/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#![license = "MIT/ASL2"]
1818
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
1919
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
20-
html_root_url = "http://doc.rust-lang.org/master/")]
20+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
2121

2222
#![feature(plugin_registrar, quote)]
2323

src/librlibc/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#![crate_type = "rlib"]
2727
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2828
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
29-
html_root_url = "http://doc.rust-lang.org/master/")]
29+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
3030

3131
#![feature(import_shadowing, intrinsics, phase)]
3232
#![no_std]

src/librustc/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ This API is completely unstable and subject to change.
2626
#![crate_type = "rlib"]
2727
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2828
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
29-
html_root_url = "http://doc.rust-lang.org/master/")]
29+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
3030

3131
#![allow(deprecated)]
3232
#![allow(unknown_features)]

src/librustrt/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#![crate_type = "dylib"]
1515
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
1616
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
17-
html_root_url = "http://doc.rust-lang.org/master/")]
17+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
1818

1919
#![allow(unknown_features)]
2020
#![feature(macro_rules, phase, globs, thread_local, asm)]

src/libsemver/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
#![license = "MIT/ASL2"]
3838
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
3939
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
40-
html_root_url = "http://doc.rust-lang.org/master/")]
40+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
4141
#![feature(default_type_params)]
4242

4343
use std::char;

src/libserialize/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Core encoding and decoding interfaces.
2121
#![license = "MIT/ASL2"]
2222
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2323
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
24-
html_root_url = "http://doc.rust-lang.org/master/",
24+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
2525
html_playground_url = "http://play.rust-lang.org/")]
2626
#![allow(unknown_features)]
2727
#![feature(macro_rules, default_type_params, phase, slicing_syntax)]

src/libstd/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
#![crate_type = "dylib"]
103103
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
104104
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
105-
html_root_url = "http://doc.rust-lang.org/master/",
105+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
106106
html_playground_url = "http://play.rust-lang.org/")]
107107

108108
#![allow(unknown_features)]

src/libsync/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#![license = "MIT/ASL2"]
2525
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2626
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
27-
html_root_url = "http://doc.rust-lang.org/master/",
27+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
2828
html_playground_url = "http://play.rust-lang.org/")]
2929

3030
#![feature(phase, globs, macro_rules, unsafe_destructor)]

src/libsyntax/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#![crate_type = "rlib"]
2222
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
2323
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
24-
html_root_url = "http://doc.rust-lang.org/master/")]
24+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
2525

2626
#![allow(unknown_features)]
2727
#![feature(macro_rules, globs, default_type_params, phase, slicing_syntax)]

src/libterm/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
#![crate_type = "dylib"]
4747
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
4848
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
49-
html_root_url = "http://doc.rust-lang.org/master/",
49+
html_root_url = "http://doc.rust-lang.org/0.12.0/",
5050
html_playground_url = "http://play.rust-lang.org/")]
5151

5252
#![allow(unknown_features)]

src/libtest/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#![crate_type = "dylib"]
3232
#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
3333
html_favicon_url = "http://www.rust-lang.org/favicon.ico",
34-
html_root_url = "http://doc.rust-lang.org/master/")]
34+
html_root_url = "http://doc.rust-lang.org/0.12.0/")]
3535

3636
#![feature(asm, macro_rules, phase)]
3737

0 commit comments

Comments
 (0)