Loop id | Source Location | Source Function | Level | Coverage run_0 (%) | Max Time Over Threads run_0 (s) | Time w.r.t. Wall Time run_0 (s) | Nb Threads run_0 | GFLOPS run_0 | Vectorization Ratio (%) | Vector Length Use (%) | Speedup If No Scalar Integer | Speedup If FP Vectorized | Speedup If Fully Vectorized | Speedup If Perfect Load Balancing run_0 | Stride 0 | Stride 1 | Stride n | Stride Unknown | Stride Indirect |
---|
886 | omp-cloverleaf - viscosity.cpp:38-64 | viscosity_kernel(int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 8.64 | 1.29 | 1.29 | 1 | 2.40 | 38.36 | 17.3 | 1 | 1.51 | 1.51 | 1 | 2.67 | 0 | 0 | 0 | 8.67 |
178 | omp-cloverleaf - advec_mom.cpp:182-211 [...] | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 7.91 | 1.18 | 1.19 | 1 | 1.09 | 19.7 | 13.75 | 1.28 | 2.49 | 3.81 | 1 | 1.5 | 0 | 0 | 4.5 | 0 |
148 | omp-cloverleaf - accelerate.cpp:42-53 | accelerate_kernel(int, int, int, int, double, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<doubl... | Innermost | 7.84 | 1.18 | 1.18 | 1 | 2.52 | 0 | 12.5 | 1.11 | 1.12 | 8 | 1 | 1 | 0 | 11 | 2 | 0 |
237 | omp-cloverleaf - calc_dt.cpp:52-76 | calc_dt_kernel(int, int, int, int, double, double, double, double, double, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer1D<double>&am... | Innermost | 7.51 | 1.13 | 1.13 | 1 | 2.46 | 16.5 | 14.56 | 1 | 2 | 2 | 1 | 1 | 12 | 0 | 0 | 0 |
154 | omp-cloverleaf - advec_cell.cpp:159-202 [...] | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 5.94 | 0.89 | 0.89 | 1 | 1.33 | 14.19 | 14.27 | 1.48 | 3.17 | 4.53 | 1 | 1 | 1 | 0 | 8.5 | 1 |
345 | omp-cloverleaf - PdV.cpp:71-83 [...] | PdV_kernel(bool, int, int, int, int, double, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double... | Innermost | 5.87 | 0.88 | 0.88 | 1 | 2.63 | 43.33 | 17.92 | 1.16 | 1.4 | 3.13 | 1 | 1 | 5 | 6 | 1 | 0 |
189 | omp-cloverleaf - advec_mom.cpp:110-139 [...] | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 5.11 | 0.77 | 0.77 | 1 | 1.62 | 23.68 | 15.21 | 1.46 | 2.21 | 3.28 | 1 | 1 | 2.5 | 0.5 | 3.5 | 0 |
895 | omp-cloverleaf - | __intel_avx_rep_memcpy | Single | 4.87 | 0.73 | 0.73 | 1 | 0.00 | 100 | 50 | 1 | 1 | 2 | 1 | 0 | 2 | 0 | 0 | 0 |
347 | omp-cloverleaf - PdV.cpp:50-63 [...] | PdV_kernel(bool, int, int, int, int, double, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double... | Innermost | 4.64 | 0.69 | 0.69 | 1 | 2.13 | 16 | 14.5 | 1.08 | 1.27 | 2.44 | 1 | 1 | 6 | 5 | 1 | 0 |
165 | omp-cloverleaf - advec_cell.cpp:67-110 [...] | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 4.41 | 0.66 | 0.66 | 1 | 1.82 | 17.24 | 14.55 | 1.41 | 2.99 | 4.13 | 1 | NA | NA | NA | NA | NA |
186 | omp-cloverleaf - advec_mom.cpp:148-149 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 3 | 0.45 | 0.45 | 1 | 1.56 | 0 | 12.5 | 1 | 2 | 2 | 1 | 0 | 4 | 0 | 0 | 0 |
250 | omp-cloverleaf - flux_calc.cpp:38-40 [...] | flux_calc_kernel(int, int, int, int, double, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double... | Innermost | 2.94 | 0.44 | 0.44 | 1 | 1.70 | 20 | 15 | 1 | 1.38 | 6.86 | 1 | 0 | 8 | 2 | 0 | 0 |
176 | omp-cloverleaf - advec_mom.cpp:220-221 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 2.57 | 0.38 | 0.38 | 1 | 1.79 | 0 | 12.5 | 1 | 1.6 | 2 | 1 | 0 | 0 | 0 | 0 | 5 |
162 | omp-cloverleaf - advec_cell.cpp:119-125 | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 2.47 | 0.37 | 0.37 | 1 | 2.24 | 6.25 | 13.28 | 1 | 2 | 2 | 1 | 0 | 6 | 0 | 0 | 0 |
151 | omp-cloverleaf - advec_cell.cpp:210-216 | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 2.4 | 0.36 | 0.36 | 1 | 2.28 | 0 | 12.5 | 1 | 1.78 | 2 | 1 | 0 | 9 | 0 | 0 | 0 |
179 | omp-cloverleaf - advec_mom.cpp:169-172 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 2.27 | 0.34 | 0.34 | 1 | 2.41 | 45.45 | 18.18 | 1 | 1.42 | 5.89 | 1 | 0 | 4 | 4 | 0 | 0 |
206 | omp-cloverleaf - advec_mom.cpp:46-48 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 2 | 0.3 | 0.3 | 1 | 1.13 | 0 | 12.5 | 1.04 | 1.2 | 8 | 1 | 0 | 5 | 1 | 0 | 0 |
190 | omp-cloverleaf - advec_mom.cpp:97-100 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 1.97 | 0.29 | 0.29 | 1 | 2.93 | 45.45 | 18.18 | 1 | 1.42 | 5.89 | 1 | 0 | 2 | 5 | 0 | 0 |
204 | omp-cloverleaf - advec_mom.cpp:55-57 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 1.87 | 0.28 | 0.28 | 1 | 1.25 | 0 | 12.5 | 1.04 | 1.2 | 8 | 1 | 0 | 5 | 1 | 0 | 0 |
287 | omp-cloverleaf - ideal_gas.cpp:39-45 | ideal_gas(global_variables&, int, bool) | Innermost | 1.84 | 0.28 | 0.28 | 1 | 2.29 | 100 | 50 | 1 | 1 | 1 | 1 | 0 | 4 | 0 | 0 | 0 |
199 | omp-cloverleaf - advec_mom.cpp:73-75 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 1.64 | 0.24 | 0.24 | 1 | 0.67 | 87.5 | 45.31 | 1.11 | 1.25 | 2.5 | 1 | 0 | 3 | 1 | 0 | 0 |
292 | omp-cloverleaf - ideal_gas.cpp:39-45 | ideal_gas(global_variables&, int, bool) | Innermost | 1.6 | 0.24 | 0.24 | 1 | 2.33 | 100 | 50 | 1 | 1 | 1 | 1 | 0 | 4 | 0 | 0 | 0 |
202 | omp-cloverleaf - advec_mom.cpp:64-66 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 1.54 | 0.23 | 0.23 | 1 | 0.52 | 0 | 12.5 | 1 | 1 | 8 | 1 | 0 | 5 | 0 | 0 | 0 |
194 | omp-cloverleaf - advec_mom.cpp:86-88 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 1.23 | 0.19 | 0.19 | 1 | 1.58 | 0 | 12.5 | 1.03 | 1.19 | 8 | 1 | 0 | 1 | 2 | 0 | 0 |
158 | omp-cloverleaf - advec_cell.cpp:138-140 | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 1.17 | 0.18 | 0.18 | 1 | 1.56 | 0 | 12.5 | 1.06 | 1.21 | 8 | 1 | 0 | 3 | 3 | 0 | 0 |
247 | omp-cloverleaf - field_summary.cpp:49-91 [...] | field_summary(global_variables&, parallel_&) | Outermost | 0.93 | 0.14 | 0.14 | 1 | 1.86 | 7.41 | 12.96 | 2.79 | 1.77 | 11.83 | 1 | NA | NA | NA | NA | NA |
173 | omp-cloverleaf - advec_cell.cpp:46-48 | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 0.93 | 0.14 | 0.14 | 1 | 2.07 | 0 | 12.5 | 1.06 | 1.21 | 8 | 1 | 0 | 5 | 1 | 0 | 0 |
157 | omp-cloverleaf - advec_cell.cpp:148-150 | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 0.87 | 0.13 | 0.13 | 1 | 0.92 | 0 | 12.5 | 1.03 | 1.06 | 8 | 1 | 0 | 4 | 1 | 0 | 0 |
183 | omp-cloverleaf - advec_mom.cpp:158-160 | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Innermost | 0.87 | 0.13 | 0.13 | 1 | 2.31 | 0 | 12.5 | 1.03 | 1.19 | 8 | 1 | 0 | 1 | 2 | 0 | 0 |
172 | omp-cloverleaf - advec_cell.cpp:56-57 | advec_cell_kernel(int, int, int, int, int, int, clover::Buffer1D<double>&, clover::Buffer1D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<dou... | Innermost | 0.47 | 0.07 | 0.07 | 1 | 0.57 | 83.33 | 43.75 | 1.13 | 1.33 | 3 | 1 | 0 | 2 | 1 | 0 | 0 |
234 | omp-cloverleaf - build_field.cpp:102-113 | build_field(global_variables&) | Innermost | 0.33 | 0.05 | 0.05 | 1 | 0.00 | 0 | 6.25 | 1 | 1 | 16 | 1 | 0 | 11 | 0 | 0 | 0 |
224 | omp-cloverleaf - build_field.cpp:120-128 | build_field(global_variables&) | Innermost | 0.1 | 0.01 | 0.01 | 1 | 0.00 | 0 | 6.25 | 1 | 1 | 16 | 1 | 0 | 8 | 0 | 0 | 0 |
423 | omp-cloverleaf - update_halo.cpp:506-507 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.1 | 0.01 | 0.01 | 1 | 0.00 | 0 | 12.5 | 2 | 1 | 8 | 1 | 0 | 2 | 0 | 0 | 0 |
507 | omp-cloverleaf - update_halo.cpp:205-206 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.07 | 0.01 | 0.01 | 1 | 0.00 | 0 | 12.5 | 2 | 1 | 8 | 1 | 0 | 2 | 0 | 0 | 0 |
531 | omp-cloverleaf - update_halo.cpp:119-120 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.07 | 0.01 | 0.01 | 1 | 0.00 | 0 | 12.5 | 2 | 1 | 8 | 1 | 0 | 2 | 0 | 0 | 0 |
426 | omp-cloverleaf - update_halo.cpp:496-497 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.07 | 0.01 | 0.01 | 1 | 0.00 | 0 | 12.5 | 1.25 | 1 | 8 | 1 | 0 | 2 | 0 | 0 | 0 |
450 | omp-cloverleaf - update_halo.cpp:410-411 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.07 | 0.01 | 0.01 | 1 | 0.00 | 66.67 | 16.67 | 1.2 | 1 | 8 | 1 | 0 | 2 | 0 | 0 | 0 |
399 | omp-cloverleaf - update_halo.cpp:592-593 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.07 | 0.01 | 0.01 | 1 | 0.00 | 50 | 15.63 | 1.8 | 1 | 8 | 1 | 0 | 2 | 0 | 0 | 0 |
495 | omp-cloverleaf - update_halo.cpp:248-249 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.07 | 0.01 | 0.01 | 1 | 0.00 | 0 | 12.5 | 2 | 1 | 8 | 1 | 0 | 2 | 0 | 0 | 0 |
372 | omp-cloverleaf - revert.cpp:35-48 [...] | revert(global_variables&) | InBetween | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 12.5 | 1 | 1 | 8 | 0 | NA | NA | NA | NA | NA |
530 | omp-cloverleaf - update_halo.cpp:118-120 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Outermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 11.25 | 1 | 1 | 10.57 | 0 | NA | NA | NA | NA | NA |
267 | omp-cloverleaf - generate_chunk.cpp:46-98 [...] | generate_chunk(int, global_variables&) | InBetween | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 12.35 | 2.57 | 1 | 11.78 | 0 | NA | NA | NA | NA | NA |
509 | omp-cloverleaf - update_halo.cpp:194-196 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Outermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 9.66 | 1 | 1 | 14.08 | 0 | NA | NA | NA | NA | NA |
527 | omp-cloverleaf - update_halo.cpp:131-133 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Outermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 11.72 | 1 | 1 | 13.13 | 0 | NA | NA | NA | NA | NA |
513 | omp-cloverleaf - update_halo.cpp:185-186 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 10.94 | 1.25 | 1 | 13.54 | 0 | 0 | 0 | 0 | 2 | 0 |
534 | omp-cloverleaf - update_halo.cpp:109-110 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 12.5 | 1.25 | 1 | 8 | 0 | 0 | 2 | 0 | 0 | 0 |
203 | omp-cloverleaf - advec_mom.cpp:54-57 [...] | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Outermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 10.19 | 1.99 | 1.72 | 24.61 | 0 | 1 | 0 | 0 | 6 | 0 |
506 | omp-cloverleaf - update_halo.cpp:204-206 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Outermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 11.25 | 1 | 1 | 10.57 | 0 | NA | NA | NA | NA | NA |
411 | omp-cloverleaf - update_halo.cpp:549-550 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 50 | 15.63 | 1.8 | 1 | 8 | 0 | 0 | 2 | 0 | 0 | 0 |
276 | omp-cloverleaf - generate_chunk.cpp:76-80 | generate_chunk(int, global_variables&) | Innermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 100 | 50 | 1 | 1 | 2 | 0 | 0 | 4 | 0 | 0 | 0 |
896 | omp-cloverleaf - | __intel_avx_rep_memset | Single | 0.03 | 0 | 0.01 | 1 | 0.00 | 100 | 50 | 1 | 1 | 2 | 0 | 0 | 1 | 0 | 0 | 0 |
522 | omp-cloverleaf - update_halo.cpp:152-153 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 12.5 | 1.25 | 1 | 8 | 0 | 0 | 2 | 0 | 0 | 0 |
447 | omp-cloverleaf - update_halo.cpp:420-421 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 50 | 15.63 | 1.8 | 1 | 8 | 0 | 0 | 2 | 0 | 0 | 0 |
483 | omp-cloverleaf - update_halo.cpp:291-292 | update_halo_kernel(int, int, int, int, std::array<int, 4ul> const&, std::array<int, 4ul> const&, field_type&, int const*, int) | Innermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 12.5 | 2 | 1 | 8 | 0 | 0 | 2 | 0 | 0 | 0 |
177 | omp-cloverleaf - advec_mom.cpp:181-211 [...] | advec_mom_kernel(int, int, int, int, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&, clover::Buffer2D<double>&... | Outermost | 0.03 | 0 | 0.01 | 1 | 0.00 | 0 | 12.5 | 1 | 1 | 8 | 0 | 1 | 2 | 3 | 1 | 1 |