managers
Pydantic models for Leopard-EM program managers.
ConstrainedSearchManager
Bases: BaseModel2DTM
Model holding parameters necessary for running the constrained search program.
Attributes:
Name | Type | Description |
---|---|---|
template_volume_path |
str
|
Path to the template volume MRC file. |
center_vector |
list[float]
|
The centre vector of the template volume. |
particle_stack_reference |
ParticleStack
|
Particle stack object containing particle data reference particles. |
particle_stack_constrained |
ParticleStack
|
Particle stack object containing particle data constrained particles. |
defocus_refinement_config |
DefocusSearchConfig
|
Configuration for defocus refinement. |
orientation_refinement_config |
RefineOrientationConfig
|
Configuration for orientation refinement. |
preprocessing_filters |
PreprocessingFilters
|
Filters to apply to the particle images. |
computational_config |
ComputationalConfig
|
What computational resources to allocate for the program. |
template_volume |
ExcludedTensor
|
The template volume tensor (excluded from serialization). |
false_positives |
float
|
The number of false positives to allow per particle. |
Methods:
Name | Description |
---|---|
TODO serialization/import methods |
|
__init__ |
Initialize the constrained search manager. |
make_backend_core_function_kwargs |
Create the kwargs for the backend refine_template core function. |
run_constrained_search |
Run the constrained search program. |
Source code in src/leopard_em/pydantic_models/managers/constrained_search_manager.py
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 |
|
get_refine_result(backend_kwargs, orientation_batch_size=64)
Get refine template result.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
backend_kwargs
|
dict
|
Keyword arguments for the backend processing |
required |
orientation_batch_size
|
int
|
Number of orientations to process at once. Defaults to 64. |
64
|
Returns:
Type | Description |
---|---|
dict[str, ndarray]
|
The result of the refine template program. |
Source code in src/leopard_em/pydantic_models/managers/constrained_search_manager.py
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
|
make_backend_core_function_kwargs(prefer_refined_angles=True)
Create the kwargs for the backend constrained_template core function.
Source code in src/leopard_em/pydantic_models/managers/constrained_search_manager.py
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
|
refine_result_to_dataframe(output_dataframe_path, result, false_positives=0.005)
Convert refine template result to dataframe.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
output_dataframe_path
|
str
|
Path to save the refined particle data. |
required |
result
|
dict[str, ndarray]
|
The result of the refine template program. |
required |
false_positives
|
float
|
The number of false positives to allow per particle. |
0.005
|
Source code in src/leopard_em/pydantic_models/managers/constrained_search_manager.py
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 |
|
run_constrained_search(output_dataframe_path, false_positives=0.005, orientation_batch_size=64)
Run the constrained search program and saves the resultant DataFrame to csv.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
output_dataframe_path
|
str
|
Path to save the constrained search results. |
required |
false_positives
|
float
|
The number of false positives to allow per particle. |
0.005
|
orientation_batch_size
|
int
|
Number of orientations to process at once. Defaults to 64. |
64
|
Source code in src/leopard_em/pydantic_models/managers/constrained_search_manager.py
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
|
MatchTemplateManager
Bases: BaseModel2DTM
Model holding parameters necessary for running full orientation 2DTM.
Attributes:
Name | Type | Description |
---|---|---|
micrograph_path |
str
|
Path to the micrograph .mrc file. |
template_volume_path |
str
|
Path to the template volume .mrc file. |
micrograph |
ExcludedTensor
|
Image to run template matching on. Not serialized. |
template_volume |
ExcludedTensor
|
Template volume to match against. Not serialized. |
optics_group |
OpticsGroup
|
Optics group parameters for the imaging system on the microscope. |
defocus_search_config |
DefocusSearchConfig
|
Parameters for searching over defocus values. |
orientation_search_config |
OrientationSearchConfig
|
Parameters for searching over orientation angles. |
preprocessing_filters |
PreprocessingFilters
|
Configurations for the preprocessing filters to apply during correlation. |
match_template_result |
MatchTemplateResult
|
Result of the match template program stored as an instance of the
|
computational_config |
ComputationalConfig
|
Parameters for controlling computational resources. |
Methods:
Name | Description |
---|---|
validate_micrograph_path |
Ensure the micrograph file exists. |
validate_template_volume_path |
Ensure the template volume file exists. |
__init__ |
Constructor which also loads the micrograph and template volume from disk. The 'preload_mrc_files' parameter controls whether to read the MRC files immediately upon initialization. |
make_backend_core_function_kwargs |
Generates the keyword arguments for backend 'core_match_template' call from held parameters. Does the necessary pre-processing steps to filter the image and template. |
run_match_template |
Runs the base match template program in PyTorch. |
results_to_dataframe |
half_template_width_pos_shift: bool = True, exclude_columns: Optional[list] = None, locate_peaks_kwargs: Optional[dict] = None, |
) -> pd.DataFrame |
Converts the basic extracted peak info DataFrame (from the result object) to a DataFrame with additional information about reference files, microscope parameters, etc. |
save_config |
Save this Pydantic model config to disk. |
Source code in src/leopard_em/pydantic_models/managers/match_template_manager.py
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
|
make_backend_core_function_kwargs()
Generates the keyword arguments for backend call from held parameters.
Source code in src/leopard_em/pydantic_models/managers/match_template_manager.py
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
|
results_to_dataframe(half_template_width_pos_shift=True, exclude_columns=None, locate_peaks_kwargs=None)
Converts the match template results to a DataFrame with additional info.
Data included in this dataframe should be sufficient to do cross-correlation on the extracted peaks, that is, all the microscope parameters, defocus parameters, etc. are included in the dataframe. Run-specific filter information is not included in this dataframe; use the YAML configuration file to replicate a match_template run.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
half_template_width_pos_shift
|
bool
|
If True, columns for the image peak position are shifted by half a template width to correspond to the center of the particle. This should be done when the position of a peak corresponds to the top-left corner of the template rather than the center. Default is True. This should generally be left as True unless you know what you are doing. |
True
|
exclude_columns
|
list
|
List of columns to exclude from the DataFrame. Default is None and no columns are excluded. |
None
|
locate_peaks_kwargs
|
dict
|
Keyword arguments to pass to the 'MatchTemplateResult.locate_peaks' method. Default is None and no additional keyword arguments are passed. |
None
|
Returns:
Type | Description |
---|---|
DataFrame
|
DataFrame containing the match template results. |
Source code in src/leopard_em/pydantic_models/managers/match_template_manager.py
264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 |
|
run_match_template(orientation_batch_size=16, do_result_export=True, do_valid_cropping=True)
Runs the base match template in pytorch.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
orientation_batch_size
|
int
|
The number of projections to process in a single batch. Default is 1. |
16
|
do_result_export
|
bool
|
If True, call the |
True
|
do_valid_cropping
|
bool
|
If True, apply the valid cropping mode to the results. Default is True. |
True
|
Returns:
Type | Description |
---|---|
None
|
|
Source code in src/leopard_em/pydantic_models/managers/match_template_manager.py
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
|
save_config(path, mode='yaml')
Save this Pydandic model to disk. Wrapper around the serialization methods.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
path
|
str
|
Path to save the configuration file. |
required |
mode
|
Literal['yaml', 'json']
|
Serialization format to use. Default is 'yaml'. |
'yaml'
|
Returns:
Type | Description |
---|---|
None
|
|
Raises:
Type | Description |
---|---|
ValueError
|
If an invalid serialization mode is provided. |
Source code in src/leopard_em/pydantic_models/managers/match_template_manager.py
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
|
validate_micrograph_path(v)
Ensure the micrograph file exists.
Source code in src/leopard_em/pydantic_models/managers/match_template_manager.py
107 108 109 110 111 112 113 |
|
validate_template_volume_path(v)
Ensure the template volume file exists.
Source code in src/leopard_em/pydantic_models/managers/match_template_manager.py
115 116 117 118 119 120 121 |
|
OptimizeTemplateManager
Bases: BaseModel2DTM
Model holding parameters necessary for running the optimize template program.
Attributes:
Name | Type | Description |
---|---|---|
particle_stack |
ParticleStack
|
Particle stack object containing particle data. |
pixel_size_coarse_search |
PixelSizeSearchConfig
|
Configuration for pixel size coarse search. |
pixel_size_fine_search |
PixelSizeSearchConfig
|
Configuration for pixel size fine search. |
preprocessing_filters |
PreprocessingFilters
|
Filters to apply to the particle images. |
computational_config |
ComputationalConfig
|
What computational resources to allocate for the program. |
simulator |
Simulator
|
The simulator object. |
Methods:
Name | Description |
---|---|
TODO serialization/import methods |
|
__init__ |
Initialize the optimize template manager. |
make_backend_core_function_kwargs |
Create the kwargs for the backend optimize_template core function. |
run_optimize_template |
Run the optimize template program. |
Source code in src/leopard_em/pydantic_models/managers/optimize_template_manager.py
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
|
evaluate_template_px(px)
Evaluate the template pixel size.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
px
|
float
|
The pixel size to evaluate. |
required |
Returns:
Type | Description |
---|---|
float
|
The mean SNR of the template. |
Source code in src/leopard_em/pydantic_models/managers/optimize_template_manager.py
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
|
get_correlation_result(backend_kwargs, orientation_batch_size=64)
Get correlation result.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
backend_kwargs
|
dict
|
Keyword arguments for the backend processing |
required |
orientation_batch_size
|
int
|
Number of orientations to process at once. Defaults to 64. |
64
|
Returns:
Type | Description |
---|---|
dict[str, ndarray]
|
The result of the refine template program. |
Source code in src/leopard_em/pydantic_models/managers/optimize_template_manager.py
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 |
|
make_backend_core_function_kwargs(prefer_refined_angles=True)
Create the kwargs for the backend refine_template core function.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
prefer_refined_angles
|
bool
|
Whether to use refined angles or not. Defaults to True. |
True
|
Source code in src/leopard_em/pydantic_models/managers/optimize_template_manager.py
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
|
optimize_pixel_size(all_results_path)
Optimize the pixel size of the template volume.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
all_results_path
|
str
|
Path to the file for logging all iterations |
required |
Returns:
Type | Description |
---|---|
float
|
The optimal pixel size. |
Source code in src/leopard_em/pydantic_models/managers/optimize_template_manager.py
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
|
results_to_snr(result)
Convert optimize template result to mean SNR.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
result
|
dict[str, ndarray]
|
The result of the optimize template program. |
required |
Returns:
Type | Description |
---|---|
float
|
The mean SNR of the template. |
Source code in src/leopard_em/pydantic_models/managers/optimize_template_manager.py
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 |
|
run_optimize_template(output_text_path)
Run the refine template program and saves the resultant DataFrame to csv.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
output_text_path
|
str
|
Path to save the optimized template pixel size. |
required |
Source code in src/leopard_em/pydantic_models/managers/optimize_template_manager.py
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
|
RefineTemplateManager
Bases: BaseModel2DTM
Model holding parameters necessary for running the refine template program.
Attributes:
Name | Type | Description |
---|---|---|
template_volume_path |
str
|
Path to the template volume MRC file. |
particle_stack |
ParticleStack
|
Particle stack object containing particle data. |
defocus_refinement_config |
DefocusSearchConfig
|
Configuration for defocus refinement. |
pixel_size_refinement_config |
PixelSizeSearchConfig
|
Configuration for pixel size refinement. |
orientation_refinement_config |
RefineOrientationConfig
|
Configuration for orientation refinement. |
preprocessing_filters |
PreprocessingFilters
|
Filters to apply to the particle images. |
computational_config |
ComputationalConfig
|
What computational resources to allocate for the program. |
template_volume |
ExcludedTensor
|
The template volume tensor (excluded from serialization). |
Methods:
Name | Description |
---|---|
TODO serialization/import methods |
|
__init__ |
Initialize the refine template manager. |
make_backend_core_function_kwargs |
Create the kwargs for the backend refine_template core function. |
run_refine_template |
Run the refine template program. |
Source code in src/leopard_em/pydantic_models/managers/refine_template_manager.py
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
|
get_refine_result(backend_kwargs, orientation_batch_size=64)
Get refine template result.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
backend_kwargs
|
dict
|
Keyword arguments for the backend processing |
required |
orientation_batch_size
|
int
|
Number of orientations to process at once. Defaults to 64. |
64
|
Returns:
Type | Description |
---|---|
dict[str, ndarray]
|
The result of the refine template program. |
Source code in src/leopard_em/pydantic_models/managers/refine_template_manager.py
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
|
make_backend_core_function_kwargs(prefer_refined_angles=True)
Create the kwargs for the backend refine_template core function.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
prefer_refined_angles
|
bool
|
Whether to use the refined angles from the particle stack. Defaults to False. |
True
|
Source code in src/leopard_em/pydantic_models/managers/refine_template_manager.py
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
|
refine_result_to_dataframe(output_dataframe_path, result)
Convert refine template result to dataframe.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
output_dataframe_path
|
str
|
Path to save the refined particle data. |
required |
result
|
dict[str, ndarray]
|
The result of the refine template program. |
required |
Source code in src/leopard_em/pydantic_models/managers/refine_template_manager.py
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
|
run_refine_template(output_dataframe_path, orientation_batch_size=64)
Run the refine template program and saves the resultant DataFrame to csv.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
output_dataframe_path
|
str
|
Path to save the refined particle data. |
required |
orientation_batch_size
|
int
|
Number of orientations to process at once. Defaults to 64. |
64
|
Source code in src/leopard_em/pydantic_models/managers/refine_template_manager.py
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
|