| 1 | /*
|
|---|
| 2 | * reentr.inc
|
|---|
| 3 | *
|
|---|
| 4 | * You may distribute under the terms of either the GNU General Public
|
|---|
| 5 | * License or the Artistic License, as specified in the README file.
|
|---|
| 6 | *
|
|---|
| 7 | * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
|
|---|
| 8 | * This file is built by reentrl.pl from data in reentr.pl.
|
|---|
| 9 | */
|
|---|
| 10 |
|
|---|
| 11 | #ifndef REENTRINC
|
|---|
| 12 | #define REENTRINC
|
|---|
| 13 |
|
|---|
| 14 | #ifdef USE_REENTRANT_API
|
|---|
| 15 |
|
|---|
| 16 | /*
|
|---|
| 17 | * As of OpenBSD 3.7, reentrant functions are now working, they just are
|
|---|
| 18 | * incompatible with everyone else. To make OpenBSD happy, we have to
|
|---|
| 19 | * memzero out certain structures before calling the functions.
|
|---|
| 20 | */
|
|---|
| 21 | #if defined(__OpenBSD__)
|
|---|
| 22 | # define REENTR_MEMZERO(a,b) memzero(a,b)
|
|---|
| 23 | #else
|
|---|
| 24 | # define REENTR_MEMZERO(a,b) 0
|
|---|
| 25 | #endif
|
|---|
| 26 |
|
|---|
| 27 | /* The reentrant wrappers. */
|
|---|
| 28 |
|
|---|
| 29 | #ifdef HAS_ASCTIME_R
|
|---|
| 30 | # undef asctime
|
|---|
| 31 | # if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SB
|
|---|
| 32 | # define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer)
|
|---|
| 33 | # endif
|
|---|
| 34 | # if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_B_SBI
|
|---|
| 35 | # define asctime(a) asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size)
|
|---|
| 36 | # endif
|
|---|
| 37 | # if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SB
|
|---|
| 38 | # define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
|
|---|
| 39 | # endif
|
|---|
| 40 | # if !defined(asctime) && ASCTIME_R_PROTO == REENTRANT_PROTO_I_SBI
|
|---|
| 41 | # define asctime(a) (asctime_r(a, PL_reentrant_buffer->_asctime_buffer, PL_reentrant_buffer->_asctime_size) == 0 ? PL_reentrant_buffer->_asctime_buffer : 0)
|
|---|
| 42 | # endif
|
|---|
| 43 | #endif /* HAS_ASCTIME_R */
|
|---|
| 44 |
|
|---|
| 45 | #ifdef HAS_CRYPT_R
|
|---|
| 46 | # undef crypt
|
|---|
| 47 | # if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCS
|
|---|
| 48 | # define crypt(a, b) crypt_r(a, b, PL_reentrant_buffer->_crypt_struct_buffer)
|
|---|
| 49 | # endif
|
|---|
| 50 | # if !defined(crypt) && CRYPT_R_PROTO == REENTRANT_PROTO_B_CCD
|
|---|
| 51 | # define crypt(a, b) crypt_r(a, b, &PL_reentrant_buffer->_crypt_data)
|
|---|
| 52 | # endif
|
|---|
| 53 | #endif /* HAS_CRYPT_R */
|
|---|
| 54 |
|
|---|
| 55 | #ifdef HAS_CTERMID_R
|
|---|
| 56 | # undef ctermid
|
|---|
| 57 | # if !defined(ctermid) && CTERMID_R_PROTO == REENTRANT_PROTO_B_B
|
|---|
| 58 | # define ctermid(a) ctermid_r(a)
|
|---|
| 59 | # endif
|
|---|
| 60 | #endif /* HAS_CTERMID_R */
|
|---|
| 61 |
|
|---|
| 62 | #ifdef HAS_CTIME_R
|
|---|
| 63 | # undef ctime
|
|---|
| 64 | # if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SB
|
|---|
| 65 | # define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer)
|
|---|
| 66 | # endif
|
|---|
| 67 | # if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_B_SBI
|
|---|
| 68 | # define ctime(a) ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size)
|
|---|
| 69 | # endif
|
|---|
| 70 | # if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SB
|
|---|
| 71 | # define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
|
|---|
| 72 | # endif
|
|---|
| 73 | # if !defined(ctime) && CTIME_R_PROTO == REENTRANT_PROTO_I_SBI
|
|---|
| 74 | # define ctime(a) (ctime_r(a, PL_reentrant_buffer->_ctime_buffer, PL_reentrant_buffer->_ctime_size) == 0 ? PL_reentrant_buffer->_ctime_buffer : 0)
|
|---|
| 75 | # endif
|
|---|
| 76 | #endif /* HAS_CTIME_R */
|
|---|
| 77 |
|
|---|
| 78 | #ifdef HAS_DRAND48_R
|
|---|
| 79 | # undef drand48
|
|---|
| 80 | # if !defined(drand48) && DRAND48_R_PROTO == REENTRANT_PROTO_I_ST
|
|---|
| 81 | # define drand48() (drand48_r(&PL_reentrant_buffer->_drand48_struct, &PL_reentrant_buffer->_drand48_double) == 0 ? PL_reentrant_buffer->_drand48_double : 0)
|
|---|
| 82 | # endif
|
|---|
| 83 | #endif /* HAS_DRAND48_R */
|
|---|
| 84 |
|
|---|
| 85 | #ifdef HAS_ENDGRENT_R
|
|---|
| 86 | # undef endgrent
|
|---|
| 87 | # if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_I_H
|
|---|
| 88 | # define endgrent() (endgrent_r(&PL_reentrant_buffer->_grent_fptr) == 0 ? 1 : 0)
|
|---|
| 89 | # endif
|
|---|
| 90 | # if !defined(endgrent) && ENDGRENT_R_PROTO == REENTRANT_PROTO_V_H
|
|---|
| 91 | # define endgrent() endgrent_r(&PL_reentrant_buffer->_grent_fptr)
|
|---|
| 92 | # endif
|
|---|
| 93 | #endif /* HAS_ENDGRENT_R */
|
|---|
| 94 |
|
|---|
| 95 | #ifdef HAS_ENDHOSTENT_R
|
|---|
| 96 | # undef endhostent
|
|---|
| 97 | # if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_I_D
|
|---|
| 98 | # define endhostent() (endhostent_r(&PL_reentrant_buffer->_hostent_data) == 0 ? 1 : 0)
|
|---|
| 99 | # endif
|
|---|
| 100 | # if !defined(endhostent) && ENDHOSTENT_R_PROTO == REENTRANT_PROTO_V_D
|
|---|
| 101 | # define endhostent() endhostent_r(&PL_reentrant_buffer->_hostent_data)
|
|---|
| 102 | # endif
|
|---|
| 103 | #endif /* HAS_ENDHOSTENT_R */
|
|---|
| 104 |
|
|---|
| 105 | #ifdef HAS_ENDNETENT_R
|
|---|
| 106 | # undef endnetent
|
|---|
| 107 | # if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_I_D
|
|---|
| 108 | # define endnetent() (endnetent_r(&PL_reentrant_buffer->_netent_data) == 0 ? 1 : 0)
|
|---|
| 109 | # endif
|
|---|
| 110 | # if !defined(endnetent) && ENDNETENT_R_PROTO == REENTRANT_PROTO_V_D
|
|---|
| 111 | # define endnetent() endnetent_r(&PL_reentrant_buffer->_netent_data)
|
|---|
| 112 | # endif
|
|---|
| 113 | #endif /* HAS_ENDNETENT_R */
|
|---|
| 114 |
|
|---|
| 115 | #ifdef HAS_ENDPROTOENT_R
|
|---|
| 116 | # undef endprotoent
|
|---|
| 117 | # if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_I_D
|
|---|
| 118 | # define endprotoent() (endprotoent_r(&PL_reentrant_buffer->_protoent_data) == 0 ? 1 : 0)
|
|---|
| 119 | # endif
|
|---|
| 120 | # if !defined(endprotoent) && ENDPROTOENT_R_PROTO == REENTRANT_PROTO_V_D
|
|---|
| 121 | # define endprotoent() endprotoent_r(&PL_reentrant_buffer->_protoent_data)
|
|---|
| 122 | # endif
|
|---|
| 123 | #endif /* HAS_ENDPROTOENT_R */
|
|---|
| 124 |
|
|---|
| 125 | #ifdef HAS_ENDPWENT_R
|
|---|
| 126 | # undef endpwent
|
|---|
| 127 | # if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_I_H
|
|---|
| 128 | # define endpwent() (endpwent_r(&PL_reentrant_buffer->_pwent_fptr) == 0 ? 1 : 0)
|
|---|
| 129 | # endif
|
|---|
| 130 | # if !defined(endpwent) && ENDPWENT_R_PROTO == REENTRANT_PROTO_V_H
|
|---|
| 131 | # define endpwent() endpwent_r(&PL_reentrant_buffer->_pwent_fptr)
|
|---|
| 132 | # endif
|
|---|
| 133 | #endif /* HAS_ENDPWENT_R */
|
|---|
| 134 |
|
|---|
| 135 | #ifdef HAS_ENDSERVENT_R
|
|---|
| 136 | # undef endservent
|
|---|
| 137 | # if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_I_D
|
|---|
| 138 | # define endservent() (endservent_r(&PL_reentrant_buffer->_servent_data) == 0 ? 1 : 0)
|
|---|
| 139 | # endif
|
|---|
| 140 | # if !defined(endservent) && ENDSERVENT_R_PROTO == REENTRANT_PROTO_V_D
|
|---|
| 141 | # define endservent() endservent_r(&PL_reentrant_buffer->_servent_data)
|
|---|
| 142 | # endif
|
|---|
| 143 | #endif /* HAS_ENDSERVENT_R */
|
|---|
| 144 |
|
|---|
| 145 | #ifdef HAS_GETGRENT_R
|
|---|
| 146 | # undef getgrent
|
|---|
| 147 | # if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBWR
|
|---|
| 148 | # ifdef PERL_CORE
|
|---|
| 149 | # define getgrent() (((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0)))
|
|---|
| 150 | # else
|
|---|
| 151 | # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
|
|---|
| 152 | # define getgrent() ({int PL_REENTRANT_RETINT; ; ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));})
|
|---|
| 153 | # else
|
|---|
| 154 | # define getgrent() Perl_reentr_getgrent()
|
|---|
| 155 | static struct group* Perl_reentr_getgrent() {
|
|---|
| 156 | dTHX;
|
|---|
| 157 | int PL_REENTRANT_RETINT;
|
|---|
| 158 | ;
|
|---|
| 159 | return ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));
|
|---|
| 160 | }
|
|---|
| 161 | # endif
|
|---|
| 162 | # endif
|
|---|
| 163 | # endif
|
|---|
| 164 | # if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIR
|
|---|
| 165 | # ifdef PERL_CORE
|
|---|
| 166 | # define getgrent() (((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0)))
|
|---|
| 167 | # else
|
|---|
| 168 | # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
|
|---|
| 169 | # define getgrent() ({int PL_REENTRANT_RETINT; ; ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));})
|
|---|
| 170 | # else
|
|---|
| 171 | # define getgrent() Perl_reentr_getgrent()
|
|---|
| 172 | static struct group* Perl_reentr_getgrent() {
|
|---|
| 173 | dTHX;
|
|---|
| 174 | int PL_REENTRANT_RETINT;
|
|---|
| 175 | ;
|
|---|
| 176 | return ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));
|
|---|
| 177 | }
|
|---|
| 178 | # endif
|
|---|
| 179 | # endif
|
|---|
| 180 | # endif
|
|---|
| 181 | # if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBW
|
|---|
| 182 | # define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
|
|---|
| 183 | # endif
|
|---|
| 184 | # if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_S_SBI
|
|---|
| 185 | # define getgrent() (getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size) ? &PL_reentrant_buffer->_grent_struct : ((errno == ERANGE) ? (struct group *) Perl_reentrant_retry("getgrent") : 0))
|
|---|
| 186 | # endif
|
|---|
| 187 | # if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBI
|
|---|
| 188 | # ifdef PERL_CORE
|
|---|
| 189 | # define getgrent() (((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0)))
|
|---|
| 190 | # else
|
|---|
| 191 | # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
|
|---|
| 192 | # define getgrent() ({int PL_REENTRANT_RETINT; ; ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));})
|
|---|
| 193 | # else
|
|---|
| 194 | # define getgrent() Perl_reentr_getgrent()
|
|---|
| 195 | static struct group* Perl_reentr_getgrent() {
|
|---|
| 196 | dTHX;
|
|---|
| 197 | int PL_REENTRANT_RETINT;
|
|---|
| 198 | ;
|
|---|
| 199 | return ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size)) == 0 ? &PL_reentrant_buffer->_grent_struct : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));
|
|---|
| 200 | }
|
|---|
| 201 | # endif
|
|---|
| 202 | # endif
|
|---|
| 203 | # endif
|
|---|
| 204 | # if !defined(getgrent) && GETGRENT_R_PROTO == REENTRANT_PROTO_I_SBIH
|
|---|
| 205 | # ifdef PERL_CORE
|
|---|
| 206 | # define getgrent() (((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_fptr)) == 0 ? &PL_reentrant_buffer->_grent_struct : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0)))
|
|---|
| 207 | # else
|
|---|
| 208 | # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
|
|---|
| 209 | # define getgrent() ({int PL_REENTRANT_RETINT; ; ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_fptr)) == 0 ? &PL_reentrant_buffer->_grent_struct : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));})
|
|---|
| 210 | # else
|
|---|
| 211 | # define getgrent() Perl_reentr_getgrent()
|
|---|
| 212 | static struct group* Perl_reentr_getgrent() {
|
|---|
| 213 | dTHX;
|
|---|
| 214 | int PL_REENTRANT_RETINT;
|
|---|
| 215 | ;
|
|---|
| 216 | return ((PL_REENTRANT_RETINT = getgrent_r(&PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_fptr)) == 0 ? &PL_reentrant_buffer->_grent_struct : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrent") : 0));
|
|---|
| 217 | }
|
|---|
| 218 | # endif
|
|---|
| 219 | # endif
|
|---|
| 220 | # endif
|
|---|
| 221 | #endif /* HAS_GETGRENT_R */
|
|---|
| 222 |
|
|---|
| 223 | #ifdef HAS_GETGRGID_R
|
|---|
| 224 | # undef getgrgid
|
|---|
| 225 | # if !defined(getgrgid) && GETGRGID_R_PROTO == REENTRANT_PROTO_I_TSBWR
|
|---|
| 226 | # ifdef PERL_CORE
|
|---|
| 227 | # define getgrgid(a) (((PL_REENTRANT_RETINT = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrgid", a) : 0)))
|
|---|
| 228 | # else
|
|---|
| 229 | # if defined(__GNUC__) && !defined(__STRICT_ANSI__) && !defined(PERL_GCC_PEDANTIC)
|
|---|
| 230 | # define getgrgid(a) ({int PL_REENTRANT_RETINT; ; ((PL_REENTRANT_RETINT = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrgid", a) : 0));})
|
|---|
| 231 | # else
|
|---|
| 232 | # define getgrgid(a) Perl_reentr_getgrgid(a)
|
|---|
| 233 | static struct group* Perl_reentr_getgrgid(gid_t a) {
|
|---|
| 234 | dTHX;
|
|---|
| 235 | int PL_REENTRANT_RETINT;
|
|---|
| 236 | ;
|
|---|
| 237 | return ((PL_REENTRANT_RETINT = getgrgid_r(a, &PL_reentrant_buffer->_grent_struct, PL_reentrant_buffer->_grent_buffer, PL_reentrant_buffer->_grent_size, &PL_reentrant_buffer->_grent_ptr)) == 0 ? PL_reentrant_buffer->_grent_ptr : (((PL_REENTRANT_RETINT == ERANGE) || (errno == ERANGE)) ? (struct group*)Perl_reentrant_retry("getgrgid", a) : 0));
|
|---|
| 238 | }
|
|---|
|
|---|