Skip to content

Commit d5f42d6

Browse files
theodorejbnikic
authored andcommitted
Convert remaining array function arginfo to PHP stubs
1 parent 48040cf commit d5f42d6

File tree

5 files changed

+506
-360
lines changed

5 files changed

+506
-360
lines changed

ext/standard/array.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4176,7 +4176,7 @@ static inline zval *array_column_fetch_prop(zval *data, zval *name, zval *rv) /*
41764176
}
41774177
/* }}} */
41784178

4179-
/* {{{ proto array|false array_column(array input, mixed column_key[, mixed index_key])
4179+
/* {{{ proto array array_column(array input, mixed column_key[, mixed index_key])
41804180
Return the values from a single column in the input array, identified by the
41814181
value_key and optionally indexed by the index_key */
41824182
PHP_FUNCTION(array_column)
@@ -6334,7 +6334,7 @@ PHP_FUNCTION(array_key_exists)
63346334
}
63356335
/* }}} */
63366336

6337-
/* {{{ proto array|null array_chunk(array input, int size [, bool preserve_keys])
6337+
/* {{{ proto array array_chunk(array input, int size [, bool preserve_keys])
63386338
Split array into chunks */
63396339
PHP_FUNCTION(array_chunk)
63406340
{

ext/standard/basic_functions.c

Lines changed: 0 additions & 348 deletions
Original file line numberDiff line numberDiff line change
@@ -122,354 +122,6 @@ static void user_tick_function_dtor(user_tick_function_entry *tick_function_entr
122122

123123
/* {{{ arginfo */
124124

125-
/* {{{ array.c */
126-
127-
ZEND_BEGIN_ARG_INFO(arginfo_usort, 0)
128-
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
129-
ZEND_ARG_INFO(0, cmp_function)
130-
ZEND_END_ARG_INFO()
131-
132-
ZEND_BEGIN_ARG_INFO(arginfo_uasort, 0)
133-
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
134-
ZEND_ARG_INFO(0, cmp_function)
135-
ZEND_END_ARG_INFO()
136-
137-
ZEND_BEGIN_ARG_INFO(arginfo_uksort, 0)
138-
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
139-
ZEND_ARG_INFO(0, cmp_function)
140-
ZEND_END_ARG_INFO()
141-
142-
ZEND_BEGIN_ARG_INFO(arginfo_end, 0)
143-
ZEND_ARG_INFO(1, arg)
144-
ZEND_END_ARG_INFO()
145-
146-
ZEND_BEGIN_ARG_INFO(arginfo_prev, 0)
147-
ZEND_ARG_INFO(1, arg)
148-
ZEND_END_ARG_INFO()
149-
150-
ZEND_BEGIN_ARG_INFO(arginfo_next, 0)
151-
ZEND_ARG_INFO(1, arg)
152-
ZEND_END_ARG_INFO()
153-
154-
ZEND_BEGIN_ARG_INFO(arginfo_reset, 0)
155-
ZEND_ARG_INFO(1, arg)
156-
ZEND_END_ARG_INFO()
157-
158-
ZEND_BEGIN_ARG_INFO(arginfo_current, 0)
159-
ZEND_ARG_INFO(0, arg)
160-
ZEND_END_ARG_INFO()
161-
162-
ZEND_BEGIN_ARG_INFO(arginfo_key, 0)
163-
ZEND_ARG_INFO(0, arg)
164-
ZEND_END_ARG_INFO()
165-
166-
ZEND_BEGIN_ARG_INFO_EX(arginfo_min, 0, 0, 1)
167-
ZEND_ARG_VARIADIC_INFO(0, args)
168-
ZEND_END_ARG_INFO()
169-
170-
ZEND_BEGIN_ARG_INFO_EX(arginfo_max, 0, 0, 1)
171-
ZEND_ARG_VARIADIC_INFO(0, args)
172-
ZEND_END_ARG_INFO()
173-
174-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk, 0, 2, _IS_BOOL, 0)
175-
ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
176-
ZEND_ARG_INFO(0, funcname)
177-
ZEND_ARG_INFO(0, userdata)
178-
ZEND_END_ARG_INFO()
179-
180-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk_recursive, 0, 2, _IS_BOOL, 0)
181-
ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
182-
ZEND_ARG_INFO(0, funcname)
183-
ZEND_ARG_INFO(0, userdata)
184-
ZEND_END_ARG_INFO()
185-
186-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_in_array, 0, 2, _IS_BOOL, 0)
187-
ZEND_ARG_INFO(0, needle)
188-
ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
189-
ZEND_ARG_INFO(0, strict)
190-
ZEND_END_ARG_INFO()
191-
192-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2)
193-
ZEND_ARG_INFO(0, needle)
194-
ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
195-
ZEND_ARG_INFO(0, strict)
196-
ZEND_END_ARG_INFO()
197-
198-
ZEND_BEGIN_ARG_INFO_EX(arginfo_extract, 0, 0, 1)
199-
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg) /* ARRAY_INFO(0, arg, 0) */
200-
ZEND_ARG_INFO(0, extract_type)
201-
ZEND_ARG_INFO(0, prefix)
202-
ZEND_END_ARG_INFO()
203-
204-
ZEND_BEGIN_ARG_INFO_EX(arginfo_compact, 0, 0, 1)
205-
ZEND_ARG_VARIADIC_INFO(0, var_names)
206-
ZEND_END_ARG_INFO()
207-
208-
ZEND_BEGIN_ARG_INFO(arginfo_array_fill, 0)
209-
ZEND_ARG_INFO(0, start_key)
210-
ZEND_ARG_INFO(0, num)
211-
ZEND_ARG_INFO(0, val)
212-
ZEND_END_ARG_INFO()
213-
214-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_fill_keys, IS_ARRAY, 0)
215-
ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */
216-
ZEND_ARG_INFO(0, val)
217-
ZEND_END_ARG_INFO()
218-
219-
ZEND_BEGIN_ARG_INFO_EX(arginfo_range, 0, 0, 2)
220-
ZEND_ARG_INFO(0, low)
221-
ZEND_ARG_INFO(0, high)
222-
ZEND_ARG_INFO(0, step)
223-
ZEND_END_ARG_INFO()
224-
225-
ZEND_BEGIN_ARG_INFO(arginfo_shuffle, 0)
226-
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
227-
ZEND_END_ARG_INFO()
228-
229-
ZEND_BEGIN_ARG_INFO(arginfo_array_pop, 0)
230-
ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
231-
ZEND_END_ARG_INFO()
232-
233-
ZEND_BEGIN_ARG_INFO(arginfo_array_shift, 0)
234-
ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
235-
ZEND_END_ARG_INFO()
236-
237-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_unshift, 0, 1, IS_LONG, 0)
238-
ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
239-
ZEND_ARG_VARIADIC_INFO(0, vars)
240-
ZEND_END_ARG_INFO()
241-
242-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_splice, 0, 2, IS_ARRAY, 0)
243-
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
244-
ZEND_ARG_INFO(0, offset)
245-
ZEND_ARG_INFO(0, length)
246-
ZEND_ARG_INFO(0, replacement) /* ARRAY_INFO(0, arg, 1) */
247-
ZEND_END_ARG_INFO()
248-
249-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_slice, 0, 2, IS_ARRAY, 0)
250-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(1, arg, 0) */
251-
ZEND_ARG_INFO(0, offset)
252-
ZEND_ARG_INFO(0, length)
253-
ZEND_ARG_INFO(0, preserve_keys)
254-
ZEND_END_ARG_INFO()
255-
256-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_merge, 0, 0, IS_ARRAY, 0)
257-
ZEND_ARG_VARIADIC_INFO(0, arrays)
258-
ZEND_END_ARG_INFO()
259-
260-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_merge_recursive, 0, 0, IS_ARRAY, 0)
261-
ZEND_ARG_VARIADIC_INFO(0, arrays)
262-
ZEND_END_ARG_INFO()
263-
264-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace, 0, 0, 1)
265-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
266-
ZEND_ARG_VARIADIC_INFO(0, arrays)
267-
ZEND_END_ARG_INFO()
268-
269-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace_recursive, 0, 0, 1)
270-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
271-
ZEND_ARG_VARIADIC_INFO(0, arrays)
272-
ZEND_END_ARG_INFO()
273-
274-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_keys, 0, 1, IS_ARRAY, 0)
275-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
276-
ZEND_ARG_INFO(0, search_value)
277-
ZEND_ARG_INFO(0, strict)
278-
ZEND_END_ARG_INFO()
279-
280-
ZEND_BEGIN_ARG_INFO(arginfo_array_key_first, 0)
281-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
282-
ZEND_END_ARG_INFO()
283-
284-
ZEND_BEGIN_ARG_INFO(arginfo_array_key_last, 0)
285-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
286-
ZEND_END_ARG_INFO()
287-
288-
289-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_values, IS_ARRAY, 0)
290-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
291-
ZEND_END_ARG_INFO()
292-
293-
ZEND_BEGIN_ARG_INFO(arginfo_array_count_values, 0)
294-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
295-
ZEND_END_ARG_INFO()
296-
297-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_column, 0, 0, 2)
298-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
299-
ZEND_ARG_INFO(0, column_key)
300-
ZEND_ARG_INFO(0, index_key)
301-
ZEND_END_ARG_INFO()
302-
303-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_reverse, 0, 1, IS_ARRAY, 0)
304-
ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
305-
ZEND_ARG_INFO(0, preserve_keys)
306-
ZEND_END_ARG_INFO()
307-
308-
ZEND_BEGIN_ARG_INFO(arginfo_array_pad, 0)
309-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
310-
ZEND_ARG_INFO(0, pad_size)
311-
ZEND_ARG_INFO(0, pad_value)
312-
ZEND_END_ARG_INFO()
313-
314-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_flip, IS_ARRAY, 0)
315-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
316-
ZEND_END_ARG_INFO()
317-
318-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_change_key_case, 0, 1, IS_ARRAY, 0)
319-
ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
320-
ZEND_ARG_INFO(0, case)
321-
ZEND_END_ARG_INFO()
322-
323-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_unique, 0, 1, IS_ARRAY, 0)
324-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
325-
ZEND_ARG_INFO(0, flags)
326-
ZEND_END_ARG_INFO()
327-
328-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_key, 0, 0, 2)
329-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
330-
ZEND_ARG_VARIADIC_INFO(0, arrays)
331-
ZEND_END_ARG_INFO()
332-
333-
ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_ukey, 0)
334-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
335-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
336-
ZEND_ARG_INFO(0, callback_key_compare_func)
337-
ZEND_END_ARG_INFO()
338-
339-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect, 0, 0, 2)
340-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
341-
ZEND_ARG_VARIADIC_INFO(0, arrays)
342-
ZEND_END_ARG_INFO()
343-
344-
ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect, 0)
345-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
346-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
347-
ZEND_ARG_INFO(0, callback_data_compare_func)
348-
ZEND_END_ARG_INFO()
349-
350-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_assoc, 0, 0, 2)
351-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
352-
ZEND_ARG_VARIADIC_INFO(0, arrays)
353-
ZEND_END_ARG_INFO()
354-
355-
ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_assoc, 0)
356-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
357-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
358-
ZEND_ARG_INFO(0, callback_data_compare_func)
359-
ZEND_END_ARG_INFO()
360-
361-
ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_uassoc, 0)
362-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
363-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
364-
ZEND_ARG_INFO(0, callback_key_compare_func)
365-
ZEND_END_ARG_INFO()
366-
367-
ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_uassoc, 0)
368-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
369-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
370-
ZEND_ARG_INFO(0, callback_data_compare_func)
371-
ZEND_ARG_INFO(0, callback_key_compare_func)
372-
ZEND_END_ARG_INFO()
373-
374-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_key, 0, 0, 2)
375-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
376-
ZEND_ARG_VARIADIC_INFO(0, arrays)
377-
ZEND_END_ARG_INFO()
378-
379-
ZEND_BEGIN_ARG_INFO(arginfo_array_diff_ukey, 0)
380-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
381-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
382-
ZEND_ARG_INFO(0, callback_key_comp_func)
383-
ZEND_END_ARG_INFO()
384-
385-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff, 0, 0, 2)
386-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
387-
ZEND_ARG_VARIADIC_INFO(0, arrays)
388-
ZEND_END_ARG_INFO()
389-
390-
ZEND_BEGIN_ARG_INFO(arginfo_array_udiff, 0)
391-
ZEND_ARG_INFO(0, arr1)
392-
ZEND_ARG_INFO(0, arr2)
393-
ZEND_ARG_INFO(0, callback_data_comp_func)
394-
ZEND_END_ARG_INFO()
395-
396-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_assoc, 0, 0, 2)
397-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
398-
ZEND_ARG_VARIADIC_INFO(0, arrays)
399-
ZEND_END_ARG_INFO()
400-
401-
ZEND_BEGIN_ARG_INFO(arginfo_array_diff_uassoc, 0)
402-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
403-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
404-
ZEND_ARG_INFO(0, callback_data_comp_func)
405-
ZEND_END_ARG_INFO()
406-
407-
ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_assoc, 0)
408-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
409-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
410-
ZEND_ARG_INFO(0, callback_key_comp_func)
411-
ZEND_END_ARG_INFO()
412-
413-
ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_uassoc, 0)
414-
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
415-
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
416-
ZEND_ARG_INFO(0, callback_data_comp_func)
417-
ZEND_ARG_INFO(0, callback_key_comp_func)
418-
ZEND_END_ARG_INFO()
419-
420-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_multisort, 0, 0, 1)
421-
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr1) /* ARRAY_INFO(0, arg1, 0) */
422-
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_order)
423-
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_flags)
424-
ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, arr2)
425-
ZEND_END_ARG_INFO()
426-
427-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1)
428-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
429-
ZEND_ARG_INFO(0, num_req)
430-
ZEND_END_ARG_INFO()
431-
432-
ZEND_BEGIN_ARG_INFO(arginfo_array_sum, 0)
433-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
434-
ZEND_END_ARG_INFO()
435-
436-
ZEND_BEGIN_ARG_INFO(arginfo_array_product, 0)
437-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
438-
ZEND_END_ARG_INFO()
439-
440-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_reduce, 0, 0, 2)
441-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
442-
ZEND_ARG_INFO(0, callback)
443-
ZEND_ARG_INFO(0, initial)
444-
ZEND_END_ARG_INFO()
445-
446-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_filter, 0, 1, IS_ARRAY, 0)
447-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
448-
ZEND_ARG_INFO(0, callback)
449-
ZEND_ARG_INFO(0, use_keys)
450-
ZEND_END_ARG_INFO()
451-
452-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_map, 0, 0, 2)
453-
ZEND_ARG_INFO(0, callback)
454-
ZEND_ARG_VARIADIC_INFO(0, arrays)
455-
ZEND_END_ARG_INFO()
456-
457-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_key_exists, _IS_BOOL, 0)
458-
ZEND_ARG_INFO(0, key)
459-
ZEND_ARG_INFO(0, search)
460-
ZEND_END_ARG_INFO()
461-
462-
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_chunk, 0, 0, 2)
463-
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
464-
ZEND_ARG_INFO(0, size)
465-
ZEND_ARG_INFO(0, preserve_keys)
466-
ZEND_END_ARG_INFO()
467-
468-
ZEND_BEGIN_ARG_INFO(arginfo_array_combine, 0)
469-
ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */
470-
ZEND_ARG_INFO(0, values) /* ARRAY_INFO(0, values, 0) */
471-
ZEND_END_ARG_INFO()
472-
/* }}} */
473125
/* {{{ basic_functions.c */
474126
ZEND_BEGIN_ARG_INFO(arginfo_get_magic_quotes_gpc, 0)
475127
ZEND_END_ARG_INFO()

0 commit comments

Comments
 (0)