Releases: ECP-WarpX/WarpX
20.09
Dependencies
AMReX: release 20.09
https://github.com/AMReX-Codes/amrex/releases/tag/20.09
PICSAR (development
, without QED): ECP-WarpX/picsar@82bc47e
or PICSAR (QED
, with QED): ECP-WarpX/picsar@b01bf73
List of PRs merged since the last release
This list was generated with
git log --since=20.07 | grep -A 3 "Author: " | grep -B 1 "\-\-" | sed '/--/d' | sed -e 's/^ /- /'
- Remove ManagedVector from Particles/ (#1273)
- openPMD: Generalize Mesh Position (#1296)
- Make BeamRelevant reduced diagnostic doable for RZ (#1183)
- openPMD-api: 0.12.0+ (#1302)
- Gather: Rename Galerkin Varnames (#1297)
- CKC: Use Enum instead consequently (#1299)
- Fix some more warnings (#1288)
- openPMD Mesh: Fix grid offset/spacing (#1291)
- fix typo in doc (#1292)
- Bug fix in Div E computation for RZ PSATD (#1287)
- Fix some warnings in RZ spectral solver (#1286)
- Remove ManagedVector from filters (#1271)
- Remove ManagedVector from PML (#1267)
- CI: DPC++ Re-Enable (#1285)
- Use Long for the pid type in ParticleCreation (#1281)
- Remove ManagedVector from finite-difference solver (#1269)
- Add structure for resampling algorithms (#1265)
- fix implicit capture of this in lambda function (#1282)
- Remove ManagedDeviceVector from BackTransformDiagnostic (#1268)
- Remove unused methods from WarpXParticleContainer. (#1277)
- In AddNParticles, id should be changed to Long (#1280)
- Remove ManagedVector from spectral solver (#1270)
- Remove ManagedVector from Utils (#1274)
- Fix 🩹(almost) all warnings
⚠️ with default configuration in 2D (DIM=2, openMP+MPI, double precision, no advanced solvers, no QED, native output) (#1264) - Disable ParticleIO for slices (#1275)
- Fix 🩹 (almost) all warnings
⚠️ with default configuration (DIM=3, openMP+MPI, double precision, no advanced solvers, no QED, native output) (#1263) - Remove ManagedVector from laser (#1272)
- update benchmarks for id changes (#1278)
- Only tag particles for splitting when we change levels if splitting is on. (#1276)
- [mini]Bug fix in ParticleListDistribution (#1252)
- Add copyright headers when missing (#1262)
- Use Long to store pid (#1266)
- Add .editorconfig file (#1261)
- Defining geom object for diags (#1241)
- For PICMI, added more arguments for psatd solver (#1259)
- Fix some warnings (#1239)
- Add doc about how to provide a Coulomb logarithm for the collision module (#1257)
- Remove Recursive Function from Parser (#1156)
- [mini]Fix normalization factor on rho for RZ higher modes (#1254)
amrex::Math::sqrt
->std::math
.amrex::Math::sqrt
was a temporary (#1258)- change default warpx.sort_bin_size to (1, 1, 1) (#1253)
- Bug fix for RZ PSATD backwards transform for GPU (#1247)
- fix performance IO automated test (#1248)
- Fix implicit conversion warning (#1249)
- Fix RZ PSATD backward transform for icomp > 0 (#1246)
- Make collision module doable for RZ (#1135)
- Domain decomposition by user (#1231)
- Updated doc for installation of RZ PSATD (#1245)
- fix typo in doc (#1243)
- RZ PSATD: rho diags must be cell-centered (#1240)
- Use psatd.n_guard, not psatd.n_guard, in 2D and RZ (#1237)
- swap fieldGather and external fields (#1235)
- Galilean PSATD: current correction and rho-free formulation (#1151)
- Reformatted BTD fields (#1158)
- Update checksum tests (#1236)
- Fix bug in imaginary part of divE (#1233)
- Travis CI: openPMD Slipped Out (#1223)
- CMake: openPMD Suffix (#1228)
- removed several other warnings (#1229)
- Fix the source of some "unused variable" warnings (#1227)
- openPMD: Reconstruct RZ Particles (#1225)
- Add input parameter to control Galerkin-scheme gather (#1191)
- openPMD: Field Names/Labels, Particle Record Names (#1224)
- Travis CI: CCache (#1226)
- Add some information about using async io in the docs (#1194)
- [tiny] Avoid particles with do_not_gather=1 be pushed in the last half step (#1210)
- Add job submission script of Cori Haswell in Doc (#1222)
- Docs: Hint FWHM_I in Gaussian Beam (#1215)
- CI: Fix oneAPI Activation (#1219)
- Input: Remove n options (#1217)
- Current Deposition: Fix Unused Params (#1218)
- Rename Input to
algo.maxwell_solver
(#1188) - Fix Diagnostics: Compiler Warnings (#1209)
- fix warning on LGTM (#1212)
- Added k-space filter for RZ spectral solver (#1006)
- Build: Enable Warnings (#1211)
- Fix -Wextra-semi (#1207)
- do not directly access the particle id and cpu in favor of going through the getter / setter methods. These members are implemented using an anonymous struct that will be going away soon in amrex, so this type of access is deprecated. (#1208)
- CMake: RelWithDebInfo -O3 (#1203)
- Do PSATD+RZ in the RZ_NO_MPI travis instance (#1202)
- fix bug which prevented evolution of optical depth (#1205)
- Workaround for 2D Galilean tests (#1200)
- Add Travis regression test for RZ spectral solver (#1175)
- Cleaner calculation of the simulation timestep (#1031)
- make the docs and assertions around the particle shape factors reflect the current behavior of the code. (#1199)
- Fix Gatherv (#1197)
- openPMD: Fix NOMPI Particle Output (#1196)
- [tiny] Explained print when NaN in LibEnsemble (#1190)
- define compute_shape_factor for VayDepos (#1192)
- Fix Evolution: Current Depos. and Shapes (#1082)
20.07
Important changes
PICSAR is now on Github
The PICSAR repo has migrated from Bitbucket to Github. Consequently, all users should update the url of the mainstream PICSAR repo, or simply clone PICSAR again from the Github PICSAR repo. The documentation has been updated according to this change.
The main branch is now called development
The master
branches of PICSAR, AMReX and WarpX have been deleted or renamed development
. While the change in AMReX does not directly affect WarpX (as WarpX uses the development
branch of AMReX anyway), changing the WarpX main branch name does affect users. For new users, who cloned WarpX after this release, there is nothing to do. For others, follow these instructions, provided by @ax3l, to update your local WarpX git branch:
git fetch --all # get all remote updates in
git status # check that you don't have uncommitted changes, otherwise commit or git stash them before proceeding please
git checkout development # creates a local development branch from remote
git branch -D master # removes the local master branch so you don't accidentally check it out again for future developments
For merge updates from mainline on your feature branches, just replace master with development from now on.
Another thing that you can do: assuming your git remote -v
shows the ECP-WarpX repo named as mainline:
git remote prune mainline # remove all fetched branches that are not existent in mainline anymore
git remote set-head mainline -a # find the new default branch development as mainline/HEAD (that's an alias for the general "latest" of a repo)
Dependencies
AMReX: release 20.07 https://github.com/AMReX-Codes/amrex/releases/tag/20.07
PICSAR (master, without QED): ECP-WarpX/picsar@82bc47e
or PICSAR (QED, with QED): ECP-WarpX/picsar@b01bf73
List of PRs merged since the last release
This list was generated with
git log --since=2020-05-30 | grep -A 3 "Author: " | grep -B 1 "\-\-" | sed '/--/d' | sed -e 's/^ /- /'
- Doc: how to compile and run on Juwels (#1133)
- CMake: DPC++, OMP Def., Binary Names (#1125)
- clarify Visualization notebook and fix path in the doc (#1137)
- Use PICSAR new development branch (#1134)
- Docs: Ascent & Python Summit Updates (#1127)
- Improve rho diagnostic (#1099)
- typo in libEnsemble scripts (#1129)
- Add plasma refactor (#830)
- fix typo (#1130)
- CMake: AMReX Advanced Options (#1124)
- Removed references to particle E and B from Python (#1122)
- Include guard cells for init fields (#1123)
- [small] Inject Particles from openPMD in RZ (#1113)
- Moved doxygen to header file for consistency (#1116)
- CMake: MPI, Asserts and Advanced AMReX (#1120)
- For RZ, added assert that periodicity is not set radially (#1115)
- Fixed minor typos and added pytest requirement (#1119)
- USE_HDF5 is now supported by AMReX make system (#1118)
- Summit: no
-n
in jsrun (#1114) - New BTD class layout and member functions - Part 2 (#1092)
- Use new github picsar repo (#1111)
- Add automated test for divE cleaning (#949)
- Added check of gridding for RZ spectral solver (#1005)
- Remove persistent E+B (#1050)
- AddPlasmaFromFile fix for periodic boundaries (#1089)
- [Mini] Docs info for blocking_factor (#1096)
- Fix Race condition in GetParticleSlice for BTD (#1105)
- Style Check: Eval-uable (#1107)
- Fix: Extra Semicolons & In-Line Doxygen (#1109)
- CMake: No Fortran (#1108)
- reimplementation of interpolation and removal of Fortran from gnu make (#1103)
- Renamining: development (#1102)
- CMake: Ascent (#1100)
- Doc: CMake Basics (#1101)
- Travis CI: Wait Longer for Make (#1098)
- New BTD class layout and member functions - Part 1 (#1085)
- Docs: Update Ascent (#1094)
- remove amrex namespace from diag functor cpp files and use amrex:: prefic (#1093)
- Add CMake Scripts (#759)
- Docs: Summit Restructure (#1090)
- update doc on ionization (#1068)
- Stop mailing errors from Battra (#1079)
- [Mini] Z Offset to loaded openPMD particles (#1070)
- CI Inputs Check: Fix Silent Abort (#1081)
- Cori: ADIOS2 (#1067)
- Doc: document time staggering in output file (#1076)
- remove #line wp_parser.l because it causes issues with AMReX make system (#1078)
- Fix typo for pml_ncell in parameters doc (#1071)
- Fixed bad arguments in PICMI_inputs_laser_acceleration.py (#1074)
- Updates to picmi, mostly related to fields, and add psatd (#1077)
- Change numprocs=2 for python reg tests and reset benchmarks (#1075)
- In picmi.py, convert the diagnostics to write into a sorted list (#1069)
- Add checksum regression tests (#1065)
- update release number everywhere in repo (#1064)
20.06
Depends on:
AMReX: release 20.06 https://github.com/AMReX-Codes/amrex/releases/tag/20.06
PICSAR (master, without QED):
https://bitbucket.org/berkeleylab/picsar/commits/b78ba49a4299ddc8000b0ad4a244f291459fdb10
or PICSAR (QED, with QED): https://bitbucket.org/berkeleylab/picsar/commits/b01bf73fe1fa4f2c860304ccd6b72bdc30ae9087
Below is a list of PRs merged since last release, generated with
git log --since=2020-05-14 | grep -A 3 "Author: " | grep -B 1 "\-\-" | sed '/--/d' | sed -e 's/^ /- /'
- Delete more deprecated code after in-situ uses new diagnostics format (#1041)
- Move sensei to new diagnostics (#1040)
- Improve documentation to compile with openPMD support on Summit (#1057)
- update link to APOSMM (#1052)
- Encapsulate FFTs (#1055)
- Macroscopic EvolveE with constant properties (#991)
- Set particular modified wavenumbers to 0 for spectral (nodal). (#1030)
- CI: DPC++ (#1054)
- Docs: 3D Define (#1060)
- CI: Fix Brew Install (#1061)
- Add Schwinger in developers doc (#1001)
- specify _rt in the particle pushers (#1049)
- [tiny] Docs Summit CPUs + PSATD (#1018)
- [mini] Clean EB field initialization using parser (#1017)
- Implement intervals parser for plot_int (#1009)
- Merge particle push (#1036)
- Esirkepov rt (#1044)
- Dpcpp (#1045)
- Summit: jsrun in CMake (#1043)
- Move ascent to new diagnostics (#1038)
- Use C++ templates for the PML field pusher (#808)
- minor bugfix for photon push (#1042)
- Fix DivE diagnostic in RZ (#1034)
- Added stub for current correction in RZ spectral solver (#1007)
- Modified automated test for Galilean PSATD (#1033)
- Bug fix in picmi field diagnostics with picmistandard.0.0.8 (#1032)
- Assign the external E and B inside the field gather kernel (#1029)
- Fix 2D3V Particle Position openPMD (#1019)
- Require Python 3.6+ (#1021)
- Mention the use of amrex:: prefix in CONTRIBUTING (#1024)
- better doc on how to make a release (#1028)
- replace release number 20.04 by 20.05 in the repo (#1027)
- Minor updates to Schwinger tests (#1003)
- Crash if deprecated input parameters are used. (#981)
- Summit: ADIOS2 Usage (#1026)
20.05
AMReX
Depends on:
AMReX: release 20.05 https://github.com/AMReX-Codes/amrex/releases/tag/20.05
PICSAR (master, without QED):
https://bitbucket.org/berkeleylab/picsar/commits/b78ba49a4299ddc8000b0ad4a244f291459fdb10
or PICSAR (QED, with QED): https://bitbucket.org/berkeleylab/picsar/commits/b01bf73fe1fa4f2c860304ccd6b72bdc30ae9087
Below is a list of PRs merged since last release, generated with
git log --since=2020-03-02 | grep -A 3 "Author: " | grep -B 1 "\-\-" | sed '/--/d' | sed -e 's/^ /- /'
- Merge branch 'master' into backward
- Implemented new particle diagnostics in picmi (#984)
- [mini] Update libensemble scripts (#1010)
- Docs: Dimensionality (#1020)
- use new diags syntax for libe input file (#1014)
- Allow to pass component in stencil templates (#1012)
- Fix error with Schwinger when multiple tiles are used (#1013)
- Remove unneeded ExchangeF (#996)
- Implement intervals parser for override_sync (#1008)
- Merge branch 'master' into backward
- macOS CI: brew update (#1002)
- Implement intervals parser for new diagnostics (#1000)
- Add Schwinger process (#784)
- Device field gather (#998)
- Generalize coarsening for MR (#945)
- Parser: .c -> .cpp (#999)
- Fix bug for PSATD momentum-conserving runs (#965)
- remove unused variables from WarpX::EvolveE (#995)
- remove executable permission from this source file (#994)
- Diags: Missing/Broken Includes (#993)
- Update parameters.rst (#990)
- Docs: Summit openPMD (#989)
- Add line in parameters doc (#985)
- Load Particles: external_file MPI Support (#956)
- bump tolerance on two of the gpu tests (#987)
- Option whether to dump rz modes (#986)
- Current correction in Fourier space (#675)
- Switch costs to LayoutData (#970)
- CI: oneAPI (ICC) (#969)
- proper name for checkpoint file in restart test in GPU (#983)
- PICMI: Add analytic laser (#800)
- avoid writing output files twice at the end of run (#982)
- typo
- crash for deprecated input parameters
- Added 3D automated tests for Galilean PSATD (#973)
- Fix some tests on Battra (#976)
- update GPU ini script for new diags (#978)
- we also need to specify the plt and chk file names for the GPU tests. (#975)
- Fix error (#974)
- Self Fields: Mean Gamma (#958)
- Do not rely on nodal flags (#931)
- Add parser for more general intervals (slices) (#925)
- Delete old diagnostics (#933)
- Most fun PR ever: print error and tolerance before ASSERT in CI (#967)
- Switch to new overloads of makeKnapSack, makeSFC w/ reduced comms (#955)
- openPMD: Fix no-MPI build (#968)
- Update Python docs (#960)
- openPMD: Binary Suffix (#966)
- Fix bug when compiling OpenPMD + 2D (#963)
- CI: macOS Single Precision (#964)
- use direct deposition for nodal tests also on Garuda (#962)
- [Mini]Fix Langmuir_multi_nodal test case (#961)
- Style change to match the standard (#957)
- Add checkpoint capability to new diags (#951)
- Reduce size of test output (#857)
- minor code changes to remove warnings when compiling with gcc DEBUG=TRUE (#950)
- Read species distribution from OPMD - part 3 (#883)
- Re-initialize diag functors after LoadBalance (#943)
- CI: Add macOS AppleClang Build (#946)
- Prevent the use of Esirkepov with the nodal algorithm (#948)
- ReducedDiags: Missing virtual Destructor (#947)
- New diags also handle particle (#938)
- [mini] Add contact us section to documentation (#941)
- Add hostname to LoadBalanceCosts reduced diagnostic (#902)
- Python documentation updates (#936)
- Adding m_ for member variables in new diags (#934)
- This macro needs to be updated due to a recent change in amrex (#935)
- Install Docs: Spack Env Update (#932)
- increase tolerance for test PlasmaAccelerationBoost3d from 1.e-14 to 2.e-14 (#930)
- these need not be member variables (#929)
- fixing bug to initialize CellCenterFunctor for Bx (#928)
- Enable openPMD standard for new diagnostics (#923)
- Remove code for hybrid PSATD, as well as remaining Fortran interface file (#927)
- need to import sys there (#924)
- remove cython from CI pip install list (#926)
- Particle Plotfile Filter (#724)
- [mini] SingleParticle Docs (#894)
- Redistribute only if the distribution mapping is changed (#911)
- Abort when trying to compute div(E) with USE_PSATD_PICSAR=TRUE (#916)
- Diags with coarsening (#856)
- Add section on LibEnsemble (#912)
- Fix link to Contributing Guide in README (#917)
- Remove Jaehong and add Yin to the Reg test mailing list (#921)
- Implementation of the RZ spectral solver (#816)
- Abort code if
do_pml
is used in cylindrical geometry (#909) - Add tolerance for single-precision PSATD test (#913)
- Yt release (#910)
- Interpolation with coarsening for general staggering (#853)
- Refactor AMReX IDs to Global ID (#906)
- Reorganize Tools/ into subfolders, in prevision of LibEnsemble scripts (#908)
- Revert "Breathe: <4.15.0 (#901)" (#905)
- Travis: openPMD-api Compile (#697)
- [Mini] PML ncell check only along active axes (#871)
- Breathe: <4.15.0 (#901)
- Reduced Diags: Fix 2D Emittance Label (#900)
- Loadbalance efficiency threshold documentation (#889)
- no OpenMP for GPU tests on Garuda (#899)
- Make sure single-precision compiles on GPU (#898)
- Fix typos (#897)
- [mini] Define and use enum to address PML components (#896)
- Contributing Guide: Add to Sphinx (#888)
- Charge in BeamRelevant Redu. Diagnostic (#880)
- Add space before bracket for function declaration (#886)
- replace ixType().ixType() with ixType().toIntVect() for clarity (#895)
- [mini-PR] fix test for QED - Breit Wheeler, optical depth evolution (#891)
- lower tolerance of Langmuir_multi_single_precision (#890)
- Avoid i%1 in a lambda, gives compiler segfault (#892)
- avoid dumping particle magnetic field to output in Python_PlasmaAcceleration (#893)
- Load balance efficiency threshold (#887)
- increase tolerance for single-precision test (#885)
- GitHub Action: Check Tests on OSX (#882)
- Badge for Travis-CI: Update Link (#884)
- Includes: Only From
Source/
(#873) - Periodic, single-box FFT (#881)
- Fix: read_raw_data Tool for Reduced (#879)
- Update release number (#875)
- Developer Docs: Include Guide (#874)
- bump test tolerances (#878)
- [skip travis] GitHub Action: Update to v2 (#877)
20.04
Depends on:
- AMReX: release 20.04 https://github.com/AMReX-Codes/amrex/releases/tag/20.04
- PICSAR (
master
, without QED): https://bitbucket.org/berkeleylab/picsar/commits/6dee60190e4ca1e0c56aba0023a129fa3211a8ec
or PICSAR (QED
, with QED): https://bitbucket.org/berkeleylab/picsar/commits/b01bf73fe1fa4f2c860304ccd6b72bdc30ae9087
Below is a list of PRs merged since last release, generated with
git log --since=2020-03-02 | grep -A 3 "Author: " | grep -B 1 "\-\-" | sed '/--/d' | sed -e 's/^ /- /'
- Cut gaussian beam (#868)
- Read species distribution from OPMD - part 2 (#859)
- Make Build System: No Public Includes (#870)
- Current effects in QED corrections (#767)
- [mini-PR] Clarifying ionizable particle charge (#863)
- Bug fix in ApplyInverseVolumeScalingToCurrentDensity (#866)
- doc: fix formatting for ascent yaml examples (#865)
- Added blocking factor to 2d and RZ geometries (#864)
- Port rigid injection to the gpu (#862)
- [mini-PR] Fix energy calculation for photons in reduced diagnostics (#861)
- Remove compiler warnings (#843)
- Documentation update - towards full SI (#301)
- [mini-PR] Fix bug in Breit-Wheeler engine (#852)
- Travis CI: set max numprocs=2 and do not overwrite (#860)
- Ignore python build/dist and egg folders (#850)
- [mini-PR] Read species distribution from OPMD file (#847)
- Costs vector of (pointer to) vector (#829)
- Tests: Fix Bool Switch Typo OMP (#854)
- Add Initial Distribution Test (#735)
- Add a few additional diags (divE etc.) (#844)
- Updated Profiling information in running_cpp (#776)
- Replace tilebox by growntilebox (#849)
- Add load balance options documentation (#842)
- New diagnostics support RZ (#836)
- Fix bug introduced in PR #831 (#846)
- Ascent in situ integration: add support for particles (#789)
- Diagnostics: Implicit Int Conversion Warning (#841)
- Can plot raw fields with new diags (#827)
- Add tolerance to all test, default 1.e-14 (#839)
- Updated Python interface for Python_Langmuir_rz_multimode test (#810)
- Bulk momentum (#831)
- fix AverageAndPackFields, suggested by David Grote (#837)
- Move kernel ToCellCenter to Average.H to ensure inlining (#832)
- ES Solver: Runtime Option Clean Up (#833)
- plot_int for new diagnostics (#824)
- Add capability to select fields to dump (#819)
- Add SmartCreate functor alongside SmartCopy (#825)
- Add costs reduced diagnostic (#790)
- Remove costs full diagnostic (#791)
- Diagnostics reorganization skeleton (#809)
- Averages to cell centers (#795)
- Density threshold set to epsilon by default instead of 0. (#815)
- Acknowledge funding agency and contributors in doc (#775)
- Add some WarpXUtilMsg::AlwaysAssert in particle containers (#811)
- Small fixes to Python to better handle particle weights (#807)
- openPMD-api: 0.11.0+ (#812)
- Add Edoardo to Garuda tests mailing list (#814)
- Add QED particle creaction routines (#698)
- Add AlwaysAssert with std::string message (#792)
- Added Python wrapper of charge density arrays (#783)
- For RZ, generalized the centering of the inverse volume scaling of J and rho (#772)
- Use C++ templates for the
EvolveF
andComputeDivE
function (#753) - Add ParticleHistogram Reduced Diagnostic (#727)
- Because of AMReX change, we now have to explicitly specify where BaseFab functions should run. (#803)
- PSATD Single precision (#805)
- For diagnostics, added RZ modes of scalars, allowed different centerings (#770)
- Add limit to #parts in theta in RZ (#765)
- Fixed FDTD coefficients of E push from F (#804)
- Remove obsolete Fortran function declaration (#796)
- correct misprint in doc (#802)
- Added RZ mode for charge and direct current deposition (#793)
- Fix misspellings of the word 'auxiliary' (#799)
- Changed BL_ASSERT to AMREX_ALWAYS_ASSERT for user input (#798)
- Fail gracefully when laser amplitude is zero (#781)
- Added optional user defined number of guard cells to use with PSATD solver (#787)
- Single Precision: Regression Tolerance (#771)
- With RZ, always write out theta (#782)
- Include private members of classes in Doxygen documentation (#785)
- Allowed for more general centering of charge density (#768)
- Remove old electrostatic code (#780)
- Remove FFTW include (#777)
- Update CONTRIBUTING.md: fix URL for Github forks (#774)
- Add default values for particle and cell weights used in heuristic costs update (#773)
- add _rt suffix to particle shape factor functions (#763)
- Fix electrostatic solver (#730)
- Fix and automatically test USE_PSATD_PICSAR=TRUE (#769)
- Permission issue with Maxwell QED input test file (#766)
- update tag number (#764)
- Option to specify the type of physical species (#746)
20.03
- Galilean PSATD
- Template FDTD solver on stencil
- Work on load balancing
- particle filtering
- Improve openPMD output
- Device synchronize when profiling, and make wrapper around AMReX's BL_PROFILE
Dependencies:
- AMReX: 1838cd8525e01550861ca753d41a577b497286bc
- PICSAR: 5e28bcc350da7fda6125c42b8c8701cfe1b0ecdf
20.02
20.01
January 2020 release of WarpX.
Dependencies:
- AMReX: 19.12-251-gf287145a3
- PICSAR: 5e28bcc350da7fda6125c42b8c8701cfe1b0ecdf