Skip to content

Commit 225355b

Browse files
Merge branch 'master' into TidytheKitchen2026_v0_tr
2 parents 7af40f3 + 3d85c2b commit 225355b

24 files changed

+206
-369
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ All notable changes to this project will be documented in this file.
1212

1313
## Rulebook [Current Draft]
1414

15+
* [#997](https://github.com/RoboCupAtHome/RuleBook/pull/997): Removed QR codes from Rulebook.
16+
* Showing QR code is too unnatural.
17+
* added clarifications to natural alternative HRI (i.e. touchscreens)
18+
* [#990](https://github.com/RoboCupAtHome/RuleBook/pull/990): Remove Stage system
19+
* The stage system was removed to simplify the competition format.
20+
* Previously, only a subset of teams advanced to later stages, which limited participation and reduced the number of runs per team. In the new format, all teams compete in the same set of tasks across multiple days, ensuring more consistent evaluation.
21+
* The new structure also allows teams to demonstrate progress and improve their performance over the course of the competition.
22+
* The number of tasks was reduced to four (repeated each day) plus the Restaurant test.
23+
* A goal is to reduce unnecessary repetition of skills across tasks, making each task more meaningful and distinct.
1524
* [#987](https://github.com/RoboCupAtHome/RuleBook/pull/987): Merge both leagues - Remove DSPL.
1625
* A single, unified RoboCup@Home league takes effect immediately.
1726
* [#969](https://github.com/RoboCupAtHome/RuleBook/pull/969): Remove optional Tray in **Clean the Table**

documents/rulebook.tex

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,22 @@
6464

6565

6666

67-
%%% STAGE I
67+
%%% Tests
6868
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69-
\chapter{Tests in Stage I}\label{chap:stage_I}
69+
\chapter{Tests}\label{chap:tests}
7070

71-
\testtocentry{test:carry-my-luggage}
72-
\testtocentry{test:gpsr}
7371
\testtocentry{test:receptionist}
7472
\testtocentry{test:storing-groceries}
7573
\testtocentry{test:pick-and-place-challenge}
7674

7775

76+
\testtocentry{test:gpsr}
77+
\testtocentry{test:egpsr}
78+
\testtocentry{test:restaurant}
79+
\testtocentry{test:final}
7880

7981
% Uncomment to get aesthetic improvement
8082
\cleardoublepage{}
81-
\input{tasks/HelpMeCarry}
82-
\newpage{}
83-
\input{tasks/GPSR}
84-
\newpage{}
8583
\input{tasks/Receptionist}
8684
\newpage{}
8785
\input{tasks/StoringGroceries}
@@ -104,20 +102,15 @@ \chapter{Tests in Stage II}\label{chap:stage_II}
104102
% Uncomment to get aesthetic improvement
105103
\cleardoublepage{}
106104
\input{tasks/CleanTable}
105+
\input{tasks/GPSR}
107106
\newpage{}
108107
\input{tasks/EGPSR}
109108
\newpage{}
110109
\input{tasks/Restaurant}
111-
\newpage{}
112-
\input{tasks/GiveMeAHand}
113-
114110

115-
116-
%%% FINALS
117-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
111+
%\newpage{}
118112
\input{tasks/Finals}
119113

120-
121114
\printabx{}
122115
\printidx{}
123116

documents/scoresheets.tex

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,9 @@
100100
\end{scoresheet}
101101

102102

103-
%%% STAGE I %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104-
%%% STAGE 1 TESTS GO HERE %%%
103+
%%% Tests %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104+
%%% TESTS GO HERE %%%
105105

106-
\renewcommand{\currentTest}{Help Me Carry}
107-
\begin{scoresheet}
108-
\input{scoresheets/HelpMeCarry}
109-
\end{scoresheet}
110106

111107
\renewcommand{\currentTest}{General Purpose Service Robot}
112108
\begin{scoresheet}
@@ -147,11 +143,6 @@
147143
\input{scoresheets/Restaurant.tex}
148144
\end{scoresheet}
149145

150-
\renewcommand{\currentTest}{New HRI}
151-
\begin{scoresheet}
152-
\input{scoresheets/GiveMeAHand.tex}
153-
\end{scoresheet}
154-
155146
% %%% FINALS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
156147

157148
% Final
Lines changed: 61 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,48 @@
11
\section{Organization of the Competition}\label{sec:procedure_during_competition}
22

3-
\subsection{Stage System}\label{rule:stages}
3+
\subsection{Competition Structure}\label{rule:structure}
4+
5+
The competition consists of a series of tasks, repeated on each competition day, designed to test specific robot capabilities, followed by a \FINAL{} as the final evaluation of the teams' overall performance.
46

5-
The competition is divided into two stages, followed by a \FINAL{}. Each stage consists of a series of tasks designed to test specific robot capabilities, with the \FINAL{} being the final evaluation of the teams' overall performance.
67

78
\begin{enumerate}
89
\item \textbf{Robot Inspection:}
9-
All teams must pass a \RobotInspection{} during the \SetupDays{} to be eligible for competition. (see~\refsec{sec:robot_inspection})
10-
11-
\item \textbf{\SONE{}:} The first stage of the competition, \SONE{}, is open to all teams that have passed the \RobotInspection{} test. This stage includes tasks that test basic robot capabilities.
10+
All teams must pass a \RobotInspection{} during the \SetupDays{} to be eligible for competition (see~\refsec{sec:robot_inspection}).
1211

13-
\item \textbf{\STWO:} \STWO{}, is open to the top 50\% of teams from \SONE{}. If the total number of teams is less than 12, up to 6 teams may advance to \STWO{}.
14-
This stage requires more complex advanced or combinations of abilities.
12+
\item \textbf{Tasks:}
13+
Teams compete in a set of tasks that evaluate different robot abilities.
14+
Each task is repeated on multiple competition days, giving teams more than one opportunity to attempt it.
15+
For ranking purposes, the \emph{best score} obtained in each task is considered.
1516

16-
\item \textbf{\FINAL:} The top \emph{three teams}, namely the ones with the highest score after \STWO{}, advance to the \FINAL{}.
17+
\item \textbf{\FINAL:} The top \emph{three teams}, namely the ones with the highest overall score, advance to the \FINAL{}.
1718
The final round features a single integrated task that tests all abilities evaluated throughout the competition.
18-
1919
\end{enumerate}
20-
In cases where there is no significant score difference between teams, the \TC{} may decide to include additional teams in the next stage.
2120

21+
In cases where there is no significant score difference between teams, the \TC{} may decide to include additional teams in the \FINAL{}.
2222

2323
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2424
\subsection{Schedule}\label{rule:schedule}
2525

2626
\begin{enumerate}
27-
\item \textbf{Test Blocks:} Each test is scheduled within a Test Block. During each Test Block, each qualified team is assigned at least two Test Slots. The Restaurant test is an exception, requiring only one Test Slot.
27+
\item \textbf{Daily Task Runs:}
28+
Each competition day features the same set of four tasks.
29+
Two tasks are executed in parallel in different arenas.
30+
Once a team completes its run in one arena, it proceeds to the other arena according to the schedule.
31+
32+
\item \textbf{Team Groups:}
33+
Teams are assigned to fixed groups (e.g.\ A, B, C, D).
34+
Each block has predetermined start times for the arenas and tasks.
35+
This ensures an even distribution of teams across arenas and reduced waiting time.
2836

29-
\item \textbf{Test Slots:} During a Test Slot, a team has a specified amount of time to complete the task.
37+
\item \textbf{Test Slots:} Within each arena, teams are allocated a specific Test Slot that defines the maximum time available to complete the task.
38+
Teams must be ready at their assigned block start time.
3039

3140
\item \textbf{Participation is default:} Teams must inform the \OC{} in advance if they are skipping a Test Block. If they do not provide such notification, they may be penalized for not attending (see~\refsec{rule:not_attending}).
3241

3342
\end{enumerate}
3443

35-
3644
\begin{table}[h]
3745
\centering\small
38-
\newcommand{\teams}[2]{%
39-
\tiny
40-
\begin{tabular}{c}%
41-
\textit{Test slot 1, team $#1$}\\
42-
\textit{Test slot 1, team $#2$}\\
43-
$\vdots$\\
44-
\textit{Test slot $n$, team $#1$}\\
45-
\textit{Test slot $n$, team $#2$}\\
46-
\end{tabular}
47-
}
4846
\newcommand{\wcell}[2]{%
4947
\parbox[c]{2.5cm}{%
5048
\vspace{#1}%
@@ -58,62 +56,73 @@ \subsection{Schedule}\label{rule:schedule}
5856

5957

6058
\begin{tabular}{
61-
>{\centering\arraybackslash}m{2.5cm}|%
62-
>{\columncolor[HTML]{9AFF99}}c |%
63-
>{\columncolor[HTML]{9AFF99}}c |%
64-
>{\columncolor[HTML]{CBCEFB}}c |%
65-
>{\columncolor[HTML]{FF8D27}}c %
59+
>{\centering\arraybackslash}m{2.5cm}|c|c|c|c
6660
}
6761
\multicolumn{1}{ c }{}
68-
& \multicolumn{1}{ c }{\cellcolor{white} Day 1 }
69-
& \multicolumn{1}{ c }{\cellcolor{white} Day 2 }
70-
& \multicolumn{1}{ c }{\cellcolor{white} Day 3 }
71-
& \multicolumn{1}{ c }{\cellcolor{white} Day 4 }
62+
& \multicolumn{1}{c}{Day 1}
63+
& \multicolumn{1}{c}{Day 2}
64+
& \multicolumn{1}{c}{Day 3}
65+
& \multicolumn{1}{c}{Day 4}
7266
\\\hhline{~---~}
7367

7468
\cell{Block 1\\\footnotesize(9:00--11:00)}
75-
& \cell{Storing Groceries}
76-
& \cell{Help Me Carry}
77-
& \cell{Restaurant}
78-
& \cellcolor{white}
69+
& \cellcolor{color1}\cell{\diagbox{Task 1}{Task 2}}
70+
& \cellcolor{color1}\cell{\diagbox{Task 1}{Task 2}}
71+
& \cellcolor{color2}\cell{Restaurant}
72+
&
7973
\\\hhline{~----}
8074

8175

8276

8377
\multicolumn{1}{ c }{}
8478
& \multicolumn{3}{ c }{\wcell{0.5\baselineskip}{\color{gray}\----Break---\-}}
85-
& \multicolumn{1}{|c|}{\cellcolor[HTML]{FF8D27}\cell{\textbf{Finals}}}
79+
& \multicolumn{1}{|c|}{\cellcolor{color3}\cell{\textbf{Finals}}}
8680
\\\hhline{~----}
8781

8882
\cell{Block 2\\\footnotesize(13:00--15:00)}
89-
& \cell{Receptionist}
90-
& \cell{GPSR}
91-
& \cell{HRI}
92-
& \cellcolor{white}
83+
& \cellcolor{color1}\cell{\diagbox{Task 3}{Task 4}}
84+
& \cellcolor{color1}\cell{\diagbox{Task 3}{Task 4}}
85+
& \cellcolor{color1}\cell{\diagbox{Task 1}{Task 2}}
86+
&
9387
\\\hhline{~---}
94-
95-
9688

9789
\multicolumn{1}{ c }{}
98-
& \multicolumn{1}{ c }{\wcell{0.5\baselineskip}{\color[HTML]{029734}}}
99-
& \multicolumn{1}{ c }{\wcell{0.5\baselineskip}{\color[HTML]{6668e5}Stage 2}}
100-
& \multicolumn{1}{ c }{\cellcolor{white}}
90+
& \multicolumn{1}{ c }{\wcell{0.5\baselineskip}{}}
91+
& \multicolumn{1}{ c }{\wcell{0.5\baselineskip}{\color{gray}\----Break---\-}}
92+
& \multicolumn{1}{ c }{}
10193
\\\hhline{~---}
10294

10395
\cell{Block 3\\\footnotesize(17:00--19:00)}
104-
& \cell{Open Challenge}
105-
& \cellcolor[HTML]{CBCEFB}\cell{Clean the Table}
106-
& \cell{EGPSR}
107-
& \cellcolor{white}
96+
&
97+
&
98+
& \cellcolor{color1}\cell{\diagbox{Task 3}{Task 4}}
99+
&
108100
\\\hhline{~---}
109101
\end{tabular}
110102

111103
\caption{Example schedule.
112-
Each team has at least two Test Slots assigned in every Test Block.
104+
Each team has two Test Slots assigned in every Test Block.
113105
}
114106
\label{tbl:schedule}
115107
\end{table}
116108

109+
\begin{table}[h]
110+
\centering
111+
\renewcommand{\arraystretch}{1.4}
112+
\setlength{\tabcolsep}{10pt}
113+
\begin{tabular}{c|c|c|}
114+
\multicolumn{1}{c}{} & \multicolumn{1}{c}{Arena 1} & \multicolumn{1}{c}{Arena 2} \\
115+
\hhline{~--}
116+
12:00 & \cellcolor{color4}Group A & \cellcolor{color2}Group C \\\hhline{~--}
117+
12:30 & \cellcolor{color3}Group B & \cellcolor{color1}Group D \\\hhline{~--}
118+
13:00 & \cellcolor{color2}Group C & \cellcolor{color4}Group A \\\hhline{~--}
119+
13:30 & \cellcolor{color1}Group D & \cellcolor{color3}Group B \\\hhline{~--}
120+
\end{tabular}
121+
\caption{Example schedule for one block showing timeslots and group rotation between arenas.}\label{tab:schedule_example_times}
122+
\end{table}
123+
124+
125+
117126
\noindent Note that the actual allocation of blocks will be announced by the \OC{} during the \SetupDays{} (see Table~\ref{tbl:schedule}).
118127

119128
\subsection{Scoring System}\label{rule:score_system}
@@ -123,7 +132,7 @@ \subsection{Scoring System}\label{rule:score_system}
123132
The scoring system has the following constrains:
124133
\begin{enumerate}
125134
\item \textbf{\FINAL:} The final score is normalized.
126-
\item \textbf{Minimum score:} The minimum total score per test in \SONE{} and \STWO{} is \scoring{0 points}.
135+
\item \textbf{Minimum score:} The minimum total score per test is \scoring{0 points}.
127136
While teams generally cannot receive negative points, penalties can result in a total score below zero. Specifically, teams may receive penalties for not attending (see~\refsec{rule:not_attending}) and for extraordinary violations (see~\refsec{rule:extraordinary_penalties}).
128137
\end{enumerate}
129138

pages/general_rules/PenaltiesBonuses.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ \subsection{Extraordinary penalties}\label{rule:extraordinary_penalties}
3434

3535
\subsection{Bonus for outstanding performance}\label{rule:outstanding_performance}
3636
\begin{enumerate}
37-
\item For every regular test in \iterm{Stage~I} and \iterm{Stage~II}, the @Home \TC{} can decide to give an extra bonus for \iterm{outstanding performance} of up to 10\% of the maximum test score.
37+
\item For every regular test, the @Home \TC{} can decide to give an extra bonus for \iterm{outstanding performance} of up to 10\% of the maximum test score.
3838

3939
\item This is to reward teams that do more than what is needed to solely score points in a test but show innovative and general approaches to enhance the scope of @Home.
4040

pages/general_rules/Procedure.tex

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,12 @@ \subsection{Restart Rule}\label{rule:restart}
124124

125125
During any test, teams are allowed to perform a single restart per attempt under the following conditions:
126126
\begin{itemize}
127-
\item A restart may only be requested until the robot completes a major scoring action.
128-
\item The test time continues running until the team exits the \Arena{} with the robot.
129-
\item A restart incurs a penalty of \SI{30}{\second}, subtracted from the total time.
130-
\item After exiting, the team may requeue at the back of the line and begin their attempt again within their remaining time.
127+
\item A restart may only be requested until the robot scores 40 points.
128+
\item The test time continues to run during the restart.
129+
\item The team moves the robot back to the starting location.
130+
\item The team has a maximum of \SI{60}{\second} to restart the robot.
131131
\item Only one restart is permitted per test attempt.
132-
\item Only points scored after a restart are counted; points scored before the restart are not considered if a restart was requested.
132+
\item Only points scored after a restart are counted; points scored before the restart are not considered.
133133
\end{itemize}
134134

135135

@@ -182,9 +182,7 @@ \subsection{Operators}\label{rule:operator}
182182

183183
\subsection{Time limits}\label{rule:time_limits}
184184
\begin{enumerate}
185-
\item \textbf{Stage~I:} Unless stated otherwise, the time limit for each test in \iterm{Stage~I} is \timing{5 minutes}.
186-
187-
\item \textbf{Stage~II:} Unless stated otherwise, the time limit for each test in \iterm{Stage~II} is \timing{10 minutes}.
185+
\item Unless stated otherwise, the time limit for each test is \timing{5 minutes}.
188186

189187
\item \textbf{Inactivity:} Robots must not stand still or get stuck in endless loops.
190188
If a robot is not progressing in the task (and is clearly not attempting to do so), it is considered inactive.

pages/introduction/Competition.tex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
%%
66
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77
\section{Competition}
8-
The competition consists of two \emph{Stages} and a \FINAL.
9-
Each stage consists of a series of \iterm{Tests} that are being held in a daily life environment.
10-
The best teams from \SONE{} advance to \STWO, which consists of more difficult tests.
11-
The competition ends with the \FINAL, where only the two highest-ranked teams of each league compete to select the winner.
8+
The competition consists of a series of \iterm{Tests} held in a daily life environment, followed by the \FINAL{}.
9+
Teams compete in the tests to evaluate their robot capabilities, and the highest-ranked teams advance to the \FINAL{}.
10+
The \FINAL{} features a single integrated task where the top teams compete to determine the winner.

pages/organization/Setup.tex

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,40 @@ \chapter{Setup and Preparation}\label{chap:setup_and_preparation}
77
To foster the knowledge exchange between teams, a conference-like \PS{} takes place during the reception.
88
Additionally, all teams have to get their robots inspected by members of the \TC{} to be allowed to participate in the competition.
99

10-
\paragraph{Regular tests are not conducted during the setup \& preparation phase.} The competition starts with \SONE{} (see~\refsec{chap:stage_I}).
10+
\paragraph{Regular tests are not conducted during the setup \& preparation phase.}
1111

1212
\begin{table}[h]
1313
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
1414
\newcolumntype{S}{C{1.6cm}}
1515
\newcolumntype{M}{C{3.2cm}}
1616
\begin{center}
17-
\caption{Stage System and Schedule per League (distribution of tests and stages over days may vary)}
18-
\begin{tabularx}{14.56cm}{S|S|S|S|S|S|S|S}
17+
\caption{General Schedule (distribution of tests over days may vary)}
18+
\begin{tabularx}{10.93cm}{S|S|S|S|S|S}
1919
\hline
2020
\multicolumn{2}{|M|}{ \cellcolor[HTML]{FFFFC7}Setup \& \newline Preparation} &
21-
\multicolumn{2}{M|}{ \cellcolor[HTML]{67FD9A}\iterm{Stage~I}} &
22-
\multicolumn{2}{M|}{ \cellcolor[HTML]{9698ED}\iterm{Stage~II}} &
21+
\multicolumn{2}{M|}{ \cellcolor[HTML]{67FD9A}\iterm{Tasks}} &
2322
\multicolumn{2}{M|}{ \cellcolor[HTML]{FFCCC9}\iterm{Finals}}\\
2423
\hline
2524
%Second row
2625
\multicolumn{1}{S|}{} &
2726
\multicolumn{2}{M|}{$\xrightarrow{advance}$\newline All teams that \newline passed Inspection} &
28-
\multicolumn{2}{M|}{$\xrightarrow{advance}$\newline Best 6 ($<12$) \newline or best 50\% ($\geq 12$)} &
2927
\multicolumn{2}{M|}{$\xrightarrow{advance}$\newline Best 3 \newline teams} &
3028
\multicolumn{1}{C{1.2cm}}{~}
31-
\\ \cline{2-7}
29+
\\ \cline{2-5}
3230
\end{tabularx}
3331
\end{center}
3432
\end{table}
3533

3634

35+
3736
\section{General Setup}\label{sec:general_setup}
3837
Depending on the schedule, the \iterm{Setup \& Preparation} phase lasts for one or two days.
3938

4039
\begin{enumerate}
4140
\item \textbf{Start:} The \iterm{Setup \& Preparation} starts when the venue opens for the first time.
4241
\item \textbf{Intention:} During the \iterm{Setup \& Preparation}, teams arrive, bring or receive their robots, and assemble and test them.
4342
\item \textbf{Tables:} The local organization will set up and randomly assign team tables.
44-
\item \textbf{Groups:} Depending on the number of teams, the \OC{} may form multiple groups of teams (usually two) for the first (and second stage). The \OC{} will assign teams to groups and announce the assignment to the teams.
43+
\item \textbf{Groups:} Depending on the number of teams, the \OC{} may form multiple groups of teams (usually four). The \OC{} will assign teams to groups and announce the assignment to the teams.
4544
\item \textbf{\Arena{}:} The \Arena{} is available to all teams during the \iterm{Setup \& Preparation}. The \OC{} may schedule special test or mapping slots in which \Arena{} access is limited to one or more teams exclusively (all teams get slots). Note, however, that the \Arena{} may not yet be complete and that the last work is conducted in the \Arena{} during the \SetupDays{}.
4645
\item \textbf{Objects:} The delegation of EC, TC, OC and local organizers will buy the objects (see~\refsec{rule:scenario_objects}). Note, however, that the objects may not be available at all times and not from the beginning of the \iterm{Setup \& Preparation}.
4746
\end{enumerate}
@@ -86,7 +85,7 @@ \subsection{Poster teaser session}
8685
2, & \text{number-of-teams} < 10
8786
\end{matrix}\right.
8887
$$
89-
\item \textbf{Sheet collection:} The evaluation sheets are collected by the \OC{} at a later time (announced beforehand by the \OC{}), allowing teams to continue knowledge exchange during the first days of the competition (\SONE{}).
88+
\item \textbf{Sheet collection:} The evaluation sheets are collected by the \OC{} at a later time (announced beforehand by the \OC{}), allowing teams to continue knowledge exchange during the first days of the competition.
9089
\item \textbf{OC Instructions:}
9190
\begin{itemize}
9291
\item Prepare and distribute evaluation sheets before the \iterm{Poster Teaser Session}.

scoresheets/EGPSR.tex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
\penaltyitem[3]{650}{
1515
Instructing a human to perform parts of the task will apply a \\
1616
percentage penalty according to similar penalties in other \\
17-
Stage II tests.
17+
tests.
1818
}
1919

2020
\end{scorelist}

0 commit comments

Comments
 (0)