From 62413e61780b04c1574b14a387454c2edcf6b313 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Tue, 19 Mar 2024 18:01:03 -0400 Subject: [PATCH 01/44] Fix format and file paths --- .../release_specifics/api_comp_macros.md | 398 ++++++------------ .../release_specific_info.md | 6 +- 2 files changed, 143 insertions(+), 261 deletions(-) diff --git a/documentation/hdf5-docs/release_specifics/api_comp_macros.md b/documentation/hdf5-docs/release_specifics/api_comp_macros.md index 9e3c06cc..de629239 100644 --- a/documentation/hdf5-docs/release_specifics/api_comp_macros.md +++ b/documentation/hdf5-docs/release_specifics/api_comp_macros.md @@ -21,10 +21,10 @@ Given the scope of changes available with each major release of HDF5, and recogn The HDF Group generally encourages users to update applications to work with the latest HDF5 library release so that all new features and enhancements are available to them. At the same time, The HDF Group understands that, under some circumstances, updating applications may not be feasible or necessary. The API compatibility macros, described in this document, provide a bridge from old APIs to new and can be particularly helpful in situations such as these: -Source code is not available - only binaries are available; updating the application is not feasible. -Source code is available, but there are no resources to update it. -Source code is available, as are resources to update it, but the old version works quite well so updates are not a priority. At the same time, it is desirable to take advantage of certain efficiencies in the newer HDF5 release that do not require code changes. -Source code is available, as are resources to update it, but the applications are large or complex, and must continue to run while the code updates are carried out. +* Source code is not available - only binaries are available; updating the application is not feasible. +* Source code is available, but there are no resources to update it. +* Source code is available, as are resources to update it, but the old version works quite well so updates are not a priority. At the same time, it is desirable to take advantage of certain efficiencies in the newer HDF5 release that do not require code changes. +* Source code is available, as are resources to update it, but the applications are large or complex, and must continue to run while the code updates are carried out. ## Understanding and Using the Macros As part of latest HDF5 release, several functions that existed in previous versions of the library were updated with new calling parameters and given new names. The updated versions of the functions have a number (for eg '2') at the end of the original function name. The original versions of these functions were retained and renamed to have an earlier number (for eg '1') at the end of the original function name. @@ -33,23 +33,27 @@ For example, consider the function H5Lvisit in HDF5 release 1.10 as compared wit | | | | ------------------------------------- | ------------------------------------------------------------------------------------------------- | -| Original function name and signature in 1.10.0 | herr_t H5Lvisit ( hid_t grp_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterate_t op, void \*op_data ) -| Updated function and signature, introduced in release 1.12.0 | herr_t H5Lvisit2 ( hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterate2_t op, void \*op_data ) | -| Original function and signature, renamed in release 1.12.0 | herr_t H5Lvisit1 ( hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterate1_t op, void \*op_data ) | -| API compatibility macro, introduced in release 1.12.0 | H5Lvisit
The macro, H5Lvisit, will be mapped to either H5Lvisit1 or H5Lvisit2. The mapping is determined by a combination of the configuration options use to build the HDF5 library and compile-time options used to build the application. The calling parameters used with the H5Lvisit compatibility macro should match the number and type of the function the macros will be mapped to (H5Lvisit1 or H5Lvisit2).
The function names ending in <91>1<92> or <91>2<92> are referred to as versioned names, and the corresponding functions are referred to as versioned functions. For new code development, The HDF Group recommends use of the compatibility macro mapped to the latest version of the function. The original version of the function should be considered deprecated and, in general, should not be used when developing new code. | +| **Original function name and signature in 1.10.0** | herr\_t H5Lvisit(hid\_t grp\_id, H5\_index\_t idx\_type, H5\_iter\_order\_t order, H5L\_iterate\_t op, void \*op\_data) | +| **Updated function and signature, introduced in release 1.12.0** | herr\_t H5Lvisit2(hid\_t group\_id, H5\_index\_t idx\_type, H5\_iter\_order\_t order, H5L\_iterate2\_t op, void \*op\_data) | +| **Original function and signature, renamed in release 1.12.0** | herr\_t H5Lvisit1(hid\_t group\_id, H5\_index\_t idx\_type, H5\_iter\_order\_t order, H5L\_iterate1\_t op, void \*op\_data) | +| **API compatibility macro, introduced in release 1.12.0** | H5Lvisit
The macro, H5Lvisit, will be mapped to either H5Lvisit1 or H5Lvisit2. The mapping is determined by a combination of the configuration options use to build the HDF5 library and compile-time options used to build the application. The calling parameters used with the H5Lvisit compatibility macro should match the number and type of the function the macros will be mapped to (H5Lvisit1 or H5Lvisit2).
The function names ending in '1' or '2' are referred to as versioned names, and the corresponding functions are referred to as versioned functions. For new code development, The HDF Group recommends use of the compatibility macro mapped to the latest version of the function. The original version of the function should be considered deprecated and, in general, should not be used when developing new code. | -## Compatibility Macro Mapping Options To determine the mapping for a given API compatibility macro in a given application, a combination of user-controlled selections, collectively referred to as the compatibility macro mapping options, is considered in the following sequence: +## Compatibility Macro Mapping Options + +To determine the mapping for a given API compatibility macro in a given application, a combination of user-controlled selections, collectively referred to as the compatibility macro mapping options, is considered in the following sequence: What compatibility macro configuration option was used to build the HDF5 library? We refer to this selection as the library mapping. Was a compatibility macro global compile-time option specified when the application was built? We refer to this (optional) selection as the application mapping. If an application mapping exists, it overrides the library mapping. (See adjacent notes.) - Were any compatibility macro function-level compile-time options specified when the application was built? We refer to these (optional) selections as function mappings. If function mappings exist, they override library and application mappings for the relevant API compatibility macros. (See adjacent notes.) -Notes: An application mapping can map APIs to the same version or to a version older than the configured library mapping. When the application attempts to map APIs to a newer version of the API than the library was configured with, it will fail to <93>upgrade<94> the mapping (and may fail silently). -When it is necessary to <93>upgrade<94> the macro mappings from those set in the library mapping, it must be done at the per-function level, using the function-level mappings. As long as one does not try to map a function to a version that was compiled out in the library mapping, individual functions can be upgraded or downgraded freely. +Were any compatibility macro function-level compile-time options specified when the application was built? We refer to these (optional) selections as function mappings. If function mappings exist, they override library and application mappings for the relevant API compatibility macros. (See adjacent notes.) + +#### *Notes* +An application mapping can map APIs to the same version or to a version older than the configured library mapping. When the application attempts to map APIs to a newer version of the API than the library was configured with, it will fail to "upgrade" the mapping (and may fail silently). +When it is necessary to "upgrade" the macro mappings from those set in the library mapping, it must be done at the per-function level, using the function-level mappings. As long as one does not try to map a function to a version that was compiled out in the library mapping, individual functions can be upgraded or downgraded freely. -## Library Mapping Options +### Library Mapping Options When the HDF5 library is built, configure flags can be used to control the API compatibility macro mapping behavior exhibited by the library. This behavior can be overridden by application and function mappings. One configure flag excludes deprecated functions from the HDF5 library, making them unavailable to applications linked with the library. @@ -72,313 +76,191 @@ Refer to the file libhdf5.settings in the directory where the HDF5 library is in With deprecated public symbols: yes -## Application Mapping Options +### Application Mapping Options When an application using HDF5 APIs is built and linked with the HDF5 library, compile-time options to h5cc can be used to control the API compatibility macro mapping behavior exhibited by the application. The application mapping overrides the behavior specified by the library mapping, and can be overridden on a function-by-function basis by the function mappings. If the HDF5 library was configured with the --disable-deprecated-symbols flag, then the deprecated functions will not be available, regardless of the application mapping options. - Table 2: Application Mapping Options + +Table 2: Application Mapping Options | h5cc option | Macros map to release
(versioned function; H5Lvisit shown) | Deprecated functions available?
(H5Lvisit1) | | -------------- | ------------------------------------------------------------- | ---------------------------------------------- | -| -DH5_USE_112_API
(Default behavior if no option specified.) | 1.12.x (H5Lvisit2) | yes
\*if available in library | -| -DH5_USE_110_API | 1.10.x (HLvisit1) | yes\*
\*if available in library | -| -DH5_USE_18_API | 1.8.x (H5Lvisit1) | yes\* +| -DH5\_USE\_112\_API
(Default behavior if no option specified.) | 1.12.x (H5Lvisit2) | yes
\*if available in library | +| -DH5\_USE\_110\_API | 1.10.x (HLvisit1) | yes\*
\*if available in library | +| -DH5\_USE\_18\_API | 1.8.x (H5Lvisit1) | yes\* \*if available in library | -| -DH5_USE_16_API | 1.6.x (H5Lvisit1) | yes\* +| -DH5\_USE\_16\_API | 1.6.x (H5Lvisit1) | yes\* \*if available in library | -| -DH5_NO_DEPRECATED_SYMBOLS | 1.10.x (H5Lvisit1) | no | +| -DH5\_NO\_DEPRECATED\_SYMBOLS | 1.10.x (H5Lvisit1) | no | -## Function Mapping Options +### Function Mapping Options Function mappings are specified when the application is built. These mappings can be used to control the mapping of the API compatibility macros to underlying functions on a function-by-function basis. The function mappings override the library and application mappings discussed earlier. -If the HDF5 library was configured with the --disable-deprecated-symbols flag, or -DH5_NO_DEPRECATED_SYMBOLS is used to compile the application, then the deprecated functions will not be available, regardless of the function mapping options. +If the HDF5 library was configured with the --disable-deprecated-symbols flag, or -DH5\_NO\_DEPRECATED\_SYMBOLS is used to compile the application, then the deprecated functions will not be available, regardless of the function mapping options. For every function with multiple available versions, a compile-time version flag can be defined to selectively map the function macro to the desired versioned function. The function mapping consists of the function name followed by "\_vers" which is mapped by number to a specific function or struct: | Macro | Function Mapping | Mapped to function or struct | | ----- | --------------------- | -------------------------- | -| H5xxx | H5xxx_vers=1 | H5xxx1 | -| | H5xxx_vers=2 | H5xxx2 | +| H5xxx | H5xxx\_vers=1 | H5xxx1 | +| | H5xxx\_vers=2 | H5xxx2 | -For example, in version 1.10 the H5Rreference macro can be mapped to either H5Rreference1 or H5Rreference2. When used, the value of the H5Rreference_vers compile-time version flag determines which function will be called: +For example, in version 1.10 the H5Rreference macro can be mapped to either H5Rreference1 or H5Rreference2. When used, the value of the H5Rreference\_vers compile-time version flag determines which function will be called: -* When H5Rreference_vers is set to 1, the macro H5Rreference will be mapped to H5Rreference1. - h5cc ... -DH5Rreference_vers=1 ... +* When H5Rreference\_vers is set to 1, the macro H5Rreference will be mapped to H5Rreference1. + h5cc ... -DH5Rreference\_vers=1 ... -* When H5Rdereference_vers is set to 2, the macro H5Rdereference will be mapped to H5Rdereference2. - h5cc ... -DH5Rreference_vers=2 ... +* When H5Rdereference\_vers is set to 2, the macro H5Rdereference will be mapped to H5Rdereference2. + h5cc ... -DH5Rreference\_vers=2 ... -* When H5Rreference_vers is not set, the macro H5Rreference will be mapped to either H5Rreference1 or H5Rreference2, based on the application mapping, if one was specified, or on the library mapping. +* When H5Rreference\_vers is not set, the macro H5Rreference will be mapped to either H5Rreference1 or H5Rreference2, based on the application mapping, if one was specified, or on the library mapping. h5cc ... -~~~ +#### *Notes* Please be aware that some function mappings use mapped structures, as well. If compiling an application with a function mapping that uses a mapped structure, you must include each function and mapped structure plus EVERY function that uses the mapped structure, whether or not that function is used in the application. In 1.12, mappings of structures are used by the H5L and H5O function mappings. -For example, the application h5ex_g_iterate.c (found on the Examples by API page under "Groups") only calls H5Lvisit , H5Ovisit , and H5Oget_info_by_name . To compile this application with 1.10 APIs in 1.12 with the function specific mappings, then not only must H5Lvisit_vers, H5Ovisit_vers, and H5Oget_info_by_name_vers be specified on the command line, but the mapped structures and every function that uses the mapped structures must be included, as well. The full compile line is shown below: - h5cc -DH5Lvisit_vers=1 -DH5Ovisit_vers=1 -DH5Oget_info_by_name_vers=1 -DH5Lvisit_by_name_vers=1 -DH5Literate_vers=1 -DH5Literate_by_name_vers=1 -DH5O_info_t_vers=1 -DH5L_info_t_vers=1 -DH5L_iterate_t_vers=1 -DH5Lget_info_by_idx_vers=1 -DH5Lget_info_vers=1 h5ex_g_visit.c -~~~ - -Function Mapping Options in Releases 1.12.x - - -H5L_GET_INFO -H5L_GET_INFO2 - -Function mapping: H5Lget_info_vers=2 -Struct mapping: H5L_info_t_vers=2 -H5L_GET_INFO1 - -Function mapping H5Lget_info_vers=1 -Struct mapping: H5L_info_t_vers=1 -H5L_GET_INFO_BY_IDX -H5L_GET_INFO_BY_IDX2 - -Function mapping: H5Lget_info_by_idx_vers=2 -Struct mapping: H5L_info_t_vers=2 -H5L_GET_INFO_BY_IDX1 - -Function mapping: H5Lget_info_by_idx_vers=1 -Struct mapping: H5L_info_t_vers=1 -H5L_ITERATE -H5L_ITERATE2 - -Function mapping: H5Literate_vers=2 -Struct mapping: H5L_iterate_t_vers=2 -H5L_ITERATE1 - -Function mapping: H5Literate_vers=1 -Struct mapping: H5L_iterate_t_vers=1 -H5L_ITERATE_BY_NAME -H5L_ITERATE_BY_NAME2 - -Function mapping: H5Literate_by_name_vers=2 -Struct mapping: H5L_iterate_t_vers=2 -H5L_ITERATE_BY_NAME1 - -Function mapping: H5Literate_by_name_vers=1 -Struct mapping: H5L_iterate_t_vers=1 -H5L_VISIT -H5L_VISIT2 - -Function mapping: H5Lvisit_vers=2 -Struct mapping: H5L_iterate_t_vers=2 -H5L_VISIT1 - -Function mapping: H5Lvisit_vers=1 -Struct mapping: H5L_iterate_t_vers=1 -H5L_VISIT_BY_NAME -H5L_VISIT_BY_NAME2 - -Function mapping: H5Lvisit_by_name_vers=2 -Struct mapping: H5L_iterate_t_vers=2 -H5L_VISIT_BY_NAME1 - -Function mapping: H5Lvisit_by_name_vers=1 -Struct mapping: H5L_iterate_t_vers=1 -H5O_GET_INFO -H5O_GET_INFO3 - -Function mapping: H5Oget_info_vers=3 -Struct mapping: H5O_info_t_vers=2 -H5O_GET_INFO1 - -Function mapping: H5Oget_info_vers=1 -Struct mapping: H5O_info_t_vers=1 -H5O_GET_INFO_BY_IDX -H5O_GET_INFO_BY_IDX3 +For example, the application h5ex\_g\_iterate.c (found on the Examples by API page under "Groups") only calls H5Lvisit , H5Ovisit , and H5Oget\_info\_by\_name.
To compile this application with 1.10 APIs in 1.12 with the function specific mappings, then not only must H5Lvisit\_vers, H5Ovisit\_vers, and H5Oget\_info\_by\_name\_vers be specified on the command line, but the mapped structures and every function that uses the mapped structures must be included, as well.
The full compile line is shown below: + +h5cc -DH5Lvisit\_vers=1 -DH5Ovisit\_vers=1 -DH5Oget\_info\_by\_name\_vers=1 -DH5Lvisit\_by\_name\_vers=1 -DH5Literate\_vers=1 -DH5Literate\_by\_name\_vers=1 -DH5O\_info\_t\_vers=1 -DH5L\_info\_t\_vers=1 -DH5L\_iterate\_t\_vers=1 -DH5Lget\_info\_by\_idx\_vers=1 -DH5Lget\_info\_vers=1 h5ex\_g\_visit.c -Function mapping: H5Oget_info_by_idx_vers=3 -Struct mapping: H5O_info_t_vers=2 -H5O_GET_INFO_BY_IDX1 +#### Function Mapping Options in Releases 1.12.x -Function mapping: H5Oget_info_by_idx_vers=1 -Struct mapping: H5O_info_t_vers=1 -H5O_GET_INFO_BY_NAME -H5O_GET_INFO_BY_NAME3 +| Macro
H5xxx | Default function used if no macro specified)
Function/struct mapping: H5xxx\_vers=N | Function used if specifying 1.10
Function/struct mapping: H5xxx\_vers=1 | +| ------------------- | ------------------------------------------------ | --------------------------- | +| H5L\_GET\_INFO | H5L\_GET\_INFO2
* Function mapping: H5Lget\_info\_vers=2
* Struct mapping: H5L\_info\_vers=2 | H5L\_GET\_INFO1
* Function mapping H5Lget\_info\_vers=1
* Struct mapping: H5L\_info\_t\_vers=1 | +| H5L\_GET\_INFO\_BY\_IDX | H5L\_GET\_INFO\_BY\_IDX2
* Function mapping: H5Lget\_info\_by\_idx\_vers=2
* Struct mapping: H5L\_info\_t\_vers=2 | H5L\_GET\_INFO\_BY\_IDX1
* Function mapping: H5Lget\_info\_by\_idx\_vers=1
* Struct mapping: H5L\_info\_t\_vers=1 | +| H5L\_ITERATE | H5L\_ITERATE2
* Function mapping: H5Literate\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2
| H5L\_ITERATE1
* Function mapping: H5Literate\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1
| +| H5L\_ITERATE\_BY\_NAME | H5L\_ITERATE\_BY\_NAME2
* Function mapping: H5Literate\_by\_name\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2 | H5L\_ITERATE\_BY\_NAME1
* Function mapping: H5Literate\_by\_name\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1 | +| H5L\_VISIT | H5L\_VISIT2
* Function mapping: H5Lvisit\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2 | H5L\_VISIT1
* Function mapping: H5Lvisit\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1
| +| H5L\_VISIT\_BY\_NAME | H5L\_VISIT\_BY\_NAME2
* Function mapping: H5Lvisit\_by\_name\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2 | H5L\_VISIT\_BY\_NAME1
* Function mapping: H5Lvisit\_by\_name\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1 | +| H5O\_GET\_INFO | H5O\_GET\_INFO3
* Function mapping: H5Oget\_info\_vers=3
* Struct mapping: H5O\_info\_t\_vers=2 | H5O\_GET\_INFO1
* Function mapping: H5Oget\_info\_vers=1
* Struct mapping: H5O\_info\_t\_vers=1 | +| H5O\_GET\_INFO\_BY\_IDX | H5O\_GET\_INFO\_BY\_IDX3
* Function mapping: H5Oget\_info\_by\_idx\_vers=3
* Struct mapping: H5O\_info\_t\_vers=2 | H5O\_GET\_INFO\_BY\_IDX1
* Function mapping: H5Oget\_info\_by\_idx\_vers=1
* Struct mapping: H5O\_info\_t\_vers=1 | +| H5O\_GET\_INFO\_BY\_NAME | H5O\_GET\_INFO\_BY\_NAME3
* Function mapping: H5O\_get\_info\_by\_name\_vers=3
* Struct mapping: H5O\_info\_t\_vers=2 | H5O\_GET\_INFO\_BY\_NAME1
* Function mapping: H5O\_get\_info\_by\_name\_vers=1
* Struct mapping: H5O\_info\_t\_vers=1 | +| H5O\_VISIT | H5O\_VISIT3
* Function mapping: H5Ovisit\_vers=3
* Struct mapping: H5O\_iterate\_t\_vers=2 | H5O\_VISIT1
* Function mapping: H5Ovisit\_vers=1
* Struct mapping: H5O\_iterate\_t\_vers=1 | +| H5O\_VISIT\_BY\_NAME | H5O\_VISIT\_BY\_NAME3
* Function mapping: H5Ovisit\_by\_name\_vers=3
* Struct mapping: H5O\_iterate\_t\_vers=2 | H5O\_VISIT\_BY\_NAME1
* Function mapping: H5Ovisit\_by\_name\_vers=1
* Struct mapping: H5O\_iterate\_t\_vers=1 | +| H5P\_ENCODE | H5P\_ENCODE2
* Function mapping: H5Pencode\_vers=2 | H5P\_ENCODE1
* Function mapping: H5Pencode\_vers=1 | +| H5S\_ENCODE | H5S\_ENCODE2
* Function mapping: H5Sencode\_vers=2 | H5S\_ENCODE1
* Function mapping: H5Sencode\_vers=1 | -Function mapping: H5O_get_info_by_name_vers=3 -Struct mapping: H5O_info_t_vers=2 -H5O_GET_INFO_BY_NAME1 -Function mapping: H5O_get_info_by_name_vers=1 -Struct mapping: H5O_info_t_vers=1 -H5O_VISIT -H5O_VISIT3 +#### Function Mapping Options in Releases 1.10.x -Function mapping: H5Ovisit_vers=3 -Struct mapping: H5O_iterate_t_vers=2 -H5O_VISIT1 - -Function mapping: H5Ovisit_vers=1 -Struct mapping: H5O_iterate_t_vers=1 -H5O_VISIT_BY_NAME -H5O_VISIT_BY_NAME3 - -Function mapping: H5Ovisit_by_name_vers=3 -Struct mapping: H5O_iterate_t_vers=2 -H5O_VISIT_BY_NAME1 - -Function mapping: H5Ovisit_by_name_vers=1 -Struct mapping: H5O_iterate_t_vers=1 -H5P_ENCODE -H5P_ENCODE2 - -Function mapping: H5Pencode_vers=2 -H5P_ENCODE1 - -Function mapping: H5Pencode_vers=1 -H5S_ENCODE -H5S_ENCODE2 - -Function mapping: H5Sencode_vers=2 -H5S_ENCODE1 - -Function mapping: H5Sencode_vers=1 -Function Mapping Options in Releases 1.10.x - -The versioned H5Oget_info functions (H5Oget_info1 and H5Oget_info2) were added in 1.10.3, and H5Oget_info was replaced by a macro to invoke H5Oget_info1 or H5Oget_info2. However, this broke compatibility and caused problems for users because there was no longer a function H5Oget_info. In 1.10.4 and subsequent 1.10.x versions the macro was removed, H5Oget_info1 was deprecated, and H5Oget_info was resurrected as a function. H5Oget_info2 remained as a function, but is not a versioned alternative to the original H5Oget_info. The same is true for H5Oget_info_by name, H5Oget_info_by_idx, H5Ovisit, and H5Ovisit_by_name. The version 2 functions were added to improve performance. +The versioned H5Oget\_info functions (H5Oget\_info1 and H5Oget\_info2) were added in 1.10.3, and H5Oget\_info was replaced by a macro to invoke H5Oget\_info1 or H5Oget\_info2. However, this broke compatibility and caused problems for users because there was no longer a function H5Oget\_info. In 1.10.4 and subsequent 1.10.x versions the macro was removed, H5Oget\_info1 was deprecated, and H5Oget\_info was resurrected as a function. H5Oget\_info2 remained as a function, but is not a versioned alternative to the original H5Oget\_info. The same is true for H5Oget\_info\_by name, H5Oget\_info\_by\_idx, H5Ovisit, and H5Ovisit\_by\_name. The version 2 functions were added to improve performance. The unversioned originals and version 2 of those functions exist in 1.10 because having released them in 1.10.3, it would break compatibility to remove them, so the original and version 2 functions remained in the source but without any macro to map to one or the other. Therefore, version 2 functions are available, but only when invoked directly. -In 1.12 there is a version 3 of all 5 functions which uses version 2 H5Oinfo2_t or H5Oiterate2_t structures. Both versions 1 and 2 are deprecated and macros replace the unversioned functions, mapping to version 1 for 18 and 110 default apis and to version 3 for 112 default api. Version 2 is available, but will only be invoked if invoked directly. - - -Macro -Default function used - -(if no macro specified) - -Introduced in +In 1.12 there is a version 3 of all 5 functions which uses version 2 H5Oinfo2\_t or H5Oiterate2\_t structures. Both versions 1 and 2 are deprecated and macros replace the unversioned functions, mapping to version 1 for 18 and 110 default apis and to version 3 for 112 default api. Version 2 is available, but will only be invoked if invoked directly. -h5cc version flag and value Mapped to function or struct -H5Rdereference -H5Rdereference2 HDF5-1.10.0 -DH5Rdereference_vers=1 H5Rdereference1 --DH5Rdereference_vers=2 H5Rdereference2 -H5Fget_info +| Macro | Default function used
(if no macro specified) | Introduced in | h5cc version flag and value | Mapped to function or struct | +| ------------------- | ----------------------------- | ------------ | ------------------------------------- | ------------------------------------ | +| H5Rdereference | H5Rdereference2 | 1.10.0 | -DH5Rdereference\_vers=1 | H5Rdereference1 | +| | | | -DH5Rdereference\_vers=2 | H5Rdereference2 | +| H5Fget\_info | H5Fget\_info2 | 1.10.0 | -DH5Fget\_info\_vers=1 | H5Fget\_info1 with struct H5F\_info1\_t | +| | | | -DH5Fget\_info\_vers=2 | H5Fget\_info2 with struct H5F\_info2\_t | +| H5Oget\_info | H5Oget\_info1 | 1.10.3 | -DH5Oget\_info\_vers=1 | H5Oget\_info1 | +| | | | -DH5Oget\_info\_vers=2 | H5Oget\_info2 | +| H5Oget\_info\_by\_idx | H5Oget\_info\_by\_idx1 | 1.10.3 | -DH5Oget\_info\_by\_idx\_vers=1 | H5Oget\_info\_by\_idx1 | +| | | | -DH5Oget\_info\_by\_idx\_vers=2 | H5Oget\_info\_by\_idx2 | +| H5Oget\_info\_by\_name | H5Oget\_info\_by\_name1 | 1.10.3 | -DH5Oget\_info\_by\_name\_vers=1 | H5Oget\_info\_by\_name1 | +| | | | -DH5Oget\_info\_by\_name\_vers=2 | H5Oget\_info\_by\_name2 | +| H5Ovisit | H5Ovisit1 | 1.10.3 | -DH5Ovisit\_vers=1 | H5Ovisit1 | +| | | | -DH5Ovisit\_vers=2 | H5Ovisit2 | +| H5Ovisit\_by\_name | H5Ovisit\_by\_name1 | 1.10.3 | -DH5Ovisit\_by\_name\_vers=1 | H5Ovisit\_by\_name1 | +| | | | -DH5Ovisit\_by\_name\_vers=2 | H5Ovisit\_by\_name2 | -H5Fget_info2 HDF5-1.10.0 -DH5Fget_info_vers=1 H5Fget_info1 with struct H5F_info1_t --DH5Fget_info_vers=2 H5Fget_info2 with struct H5F_info2_t -H5Oget_info - -H5Oget_info1 HDF5-1.10.3 -DH5Oget_info_vers=1 H5Oget_info1 --DH5Oget_info_vers=2 H5Oget_info2 -H5Oget_info_by_idx - -H5Oget_info_by_idx1 HDF5-1.10.3 -DH5Oget_info_by_idx_vers=1 H5Oget_info_by_idx1 --DH5Oget_info_by_idx_vers=2 H5Oget_info_by_idx2 -H5Oget_info_by_name H5Oget_info_by_name1 HDF5-1.10.3 -DH5Oget_info_by_name_vers=1 H5Oget_info_by_name1 --DH5Oget_info_by_name_vers=2 H5Oget_info_by_name2 -H5Ovisit H5Ovisit1 HDF5-1.10.3 -DH5Ovisit_vers=1 H5Ovisit1 --DH5Ovisit_vers=2 -H5Ovisit2 - -H5Ovisit_by_name H5Ovisit_by_name1 HDF5-1.10.3 -DH5Ovisit_by_name_vers=1 H5Ovisit_by_name1 --DH5Ovisit_by_name_vers=2 H5Ovisit_by_name2 -Function Mapping Options in Releases 1.8.x +#### Function Mapping Options in Releases 1.8.x At release 1.8.0, the API compatibility macros, function mapping compile-time version flags and values, and corresponding versioned functions listed in the following table were introduced. If the application being compiled to run with any 1.10.x release was written to use any 1.6.x release of HDF5, you must also consider these macros and mapping options. - -Table 5: Function Mapping Options in Releases 1.8.x -Macro h5cc version flag and value Mapped to function -or struct -H5Acreate -DH5Acreate_vers=1 H5Acreate1 --DH5Acreate_vers=2 H5Acreate2 -H5Aiterate -DH5Aiterate_vers=1 H5Aiterate1 -with struct H5A_operator1_t --DH5Aiterate_vers=2 H5Aiterate2 -with struct H5A_operator2_t -H5Dcreate -DH5Dcreate_vers=1 H5Dcreate1 --DH5Dcreate_vers=2 H5Dcreate2 -H5Dopen -DH5Dopen_vers=1 H5Dopen1 --DH5Dopen_vers=2 H5Dopen2 -H5Eclear -DH5Eclear_vers=1 H5Eclear1 --DH5Eclear_vers=2 H5Eclear2 -H5Eprint -DH5Eprint_vers=1 H5Eprint1 --DH5Eprint_vers=2 H5Eprint2 -H5Epush -DH5Epush_vers=1 H5Epush1 --DH5Epush_vers=2 H5Epush2 -H5Eset_auto -DH5Eset_auto_vers=1 H5Eset_auto1 --DH5Eset_auto_vers=2 H5Eset_auto2 -H5Eget_auto -DH5Eget_auto_vers=1 H5Eget_auto1 --DH5Eget_auto_vers=2 H5Eget_auto2 -H5E_auto_t -Struct for H5Eset_auto -and H5Eget_auto -DH5E_auto_t_vers=1 H5E_auto1_t --DH5E_auto_t_vers=2 H5E_auto2_t -H5Ewalk -DH5Ewalk_vers=1 H5Ewalk1 -with callback H5E_walk1_t -and struct H5E_error1_t --DH5Ewalk_vers=2 H5Ewalk2 -with callback H5E_walk2_t -and struct H5E_error2_t -H5Gcreate -DH5Gcreate_vers=1 H5Gcreate1 --DH5Gcreate_vers=2 H5Gcreate2 -H5Gopen -DH5Gopen_vers=1 H5Gopen1 --DH5Gopen_vers=2 H5Gopen2 -H5Pget_filter -DH5Pget_filter_vers=1 H5Pget_filter1 --DH5Pget_filter_vers=2 H5Pget_filter2 -H5Pget_filter_by_id -DH5Pget_filter_by_id_vers=1 H5Pget_filter_by_id1 --DH5Pget_filter_by_id_vers=2 H5Pget_filter_by_id2 -H5Pinsert -DH5Pinsert_vers=1 H5Pinsert1 --DH5Pinsert_vers=2 H5Pinsert2 -H5Pregister -DH5Pregister_vers=1 H5Pregister1 --DH5Pregister_vers=2 H5Pregister2 -H5Rget_obj_type -DH5Rget_obj_typevers=1 H5Rget_obj_type1 --DH5Rget_obj_type_vers=2 H5Rget_obj_type2 -H5Tarray_create -DH5Tarray_create_vers=1 H5Tarray_create1 --DH5Tarray_create_vers=2 H5Tarray_create2 -H5Tcommit -DH5Tcommit_vers=1 H5Tcommit1 --DH5Tcommit_vers=2 H5Tcommit2 -H5Tget_array_dims -DH5Tget_array_dims_vers=1 H5Tget_array_dims1 --DH5Tget_array_dims_vers=2 H5Tget_array_dims2 -H5Topen -DH5Topen_vers=1 H5Topen1 --DH5Topen_vers=2 H5Topen2 -H5Z_class_t Struct for H5Zregister -DH5Z_class_t_vers=1 H5Z_class1_t --DH5Z_class_t_vers=2 H5Z_class2_t - -Further Information - -See the HDF5 Reference Manual for complete descriptions of all API compatibility macros and versioned functions shown. +##### Table 5: Function Mapping Options in Releases 1.8.x + +| Macro | h5cc version flag and value | Mapped to function or struct | +| ------ | ----------------------------- | ----------------------------- | +| H5Acreate | -DH5Acreate\_vers=1 | H5Acreate1 | +| | -DH5Acreate\_vers=2 | H5Acreate2 | +| H5Aiterate | -DH5Aiterate\_vers=1 | H5Aiterate1
with struct H5A\_operator1\_t | +| | -DH5Aiterate\_vers=2 | H5Aiterate2
with struct H5A\_operator2\_t | +| H5Dcreate | -DH5Dcreate\_vers=1 | H5Dcreate1 | +| | -DH5Dcreate\_vers=2 | H5Dcreate2 | +| H5Dopen | -DH5Dopen\_vers=1 | H5Dopen1 | +| | -DH5Dopen\_vers=2 | H5Dopen2 | +| H5Eclear | -DH5Eclear\_vers=1 | H5Eclear1 | +| | -DH5Eclear\_vers=2 | H5Eclear2 | +| H5Eprint | -DH5Eprint\_vers=1 | H5Eprint1 | +| | -DH5Eprint\_vers=2 | H5Eprint2 | +| H5Epush |-DH5Epush\_vers=1 | H5Epush1 | +| | -DH5Epush\_vers=2 | H5Epush2 | +| H5Eset\_auto | -DH5Eset\_auto\_vers=1 | H5Eset\_auto1 | +| | -DH5Eset\_auto\_vers=2 | H5Eset\_auto2 | +| H5Eget\_auto | -DH5Eget\_auto\_vers=1 | H5Eget\_auto1 | +| | -DH5Eget\_auto\_vers=2 | H5Eget\_auto2 | +| H5E\_auto\_t
Struct for H5Eset\_auto
and H5Eget\_auto | -DH5E\_auto\_t\_vers=1 | H5E\_auto1\_t | +| | -DH5E\_auto\_t\_vers=2 | H5E\_auto2\_t | +| H5Ewalk | -DH5Ewalk\_vers=1 | H5Ewalk1 with callback H5E\_walk1\_t and struct H5E\_error1\_t | +| | -DH5Ewalk\_vers=2 | H5Ewalk2 with callback H5E\_walk2\_t and struct H5E\_error2\_t | +| H5Gcreate | -DH5Gcreate\_vers=1 | H5Gcreate1 | +| | -DH5Gcreate\_vers=2 H5Gcreate2 | +| H5Gopen | -DH5Gopen\_vers=1 | H5Gopen1 | +| | -DH5Gopen\_vers=2 | H5Gopen2 | +| H5Pget\_filter | -DH5Pget\_filter\_vers=1 | H5Pget\_filter1 | +| | -DH5Pget\_filter\_vers=2 | H5Pget\_filter2 | +| H5Pget\_filter\_by\_id | -DH5Pget\_filter\_by\_id\_vers=1 | H5Pget\_filter\_by\_id1 | +| | -DH5Pget\_filter\_by\_id\_vers=2 | H5Pget\_filter\_by\_id2 | +| H5Pinsert | -DH5Pinsert\_vers=1 | H5Pinsert1 | +| | -DH5Pinsert\_vers=2 | H5Pinsert2 | +| H5Pregister | -DH5Pregister\_vers=1 | H5Pregister1 | +| | -DH5Pregister\_vers=2 | H5Pregister2 | +| H5Rget\_obj\_type | -DH5Rget\_obj\_typever\_vers=1 | H5Rget\_obj\_type1 | +| | -DH5Rget\_obj\_type\_vers=2 | H5Rget\_obj\_type2 | +| H5Tarray\_create | -DH5Tarray\_create\_vers=1 | H5Tarray\_create1 | +| | -DH5Tarray\_create\_vers=2 | H5Tarray\_create2 | +| H5Tcommit | -DH5Tcommit\_vers=1 | H5Tcommit1 | +| | -DH5Tcommit\_vers=2 | H5Tcommit2 | +| H5Tget\_array\_dims | -DH5Tget\_array\_dims\_vers=1 | H5Tget\_array\_dims1 | +| | -DH5Tget\_array\_dims\_vers=2 | H5Tget\_array\_dims2 | +| H5Topen | -DH5Topen\_vers=1 | H5Topen1 | +| | -DH5Topen\_vers=2 | H5Topen2 | +| H5Z\_class\_t Struct for H5Zregister | -DH5Z\_class\_t\_vers=1 | H5Z\_class1\_t | +| | -DH5Z\_class\_t\_vers=2 | H5Z\_class2\_t | + +_Further Information_ + +See the [HDF5 Reference Manual]() for complete descriptions of all API compatibility macros and versioned functions shown. It is possible to specify multiple function mappings for a single application build: -h5cc ... -DH5Rdereference_vers=1 -DH5Fget_info_vers=2 ...As a result of the function and struct mappings in this compile example, all occurrences of the macro H5Rdereference will be mapped to H5Rdereference1 and all occurrences of the macro H5Fget_info will be mapped to H5Fget_info2 for the application being built. +h5cc ... -DH5Rdereference\_vers=1 -DH5Fget\_info\_vers=2 ...As a result of the function and struct mappings in this compile example, all occurrences of the macro H5Rdereference will be mapped to H5Rdereference1 and all occurrences of the macro H5Fget\_info will be mapped to H5Fget\_info2 for the application being built. The function and struct mappings can be used to guarantee that a given API compatibility macro will be mapped to the desired underlying function or struct version regardless of the library or application mappings. In cases where an application may benefit greatly from features offered by some of the later APIs, or must continue to use some earlier API versions for compatibility reasons, this fine-grained control may be very important. -As noted earlier, the function mappings can only reference versioned functions that are included in the HDF5 library, as determined by the configure flag used to build the library. For example, if the HDF5 library being linked with the application was built with the --disable-deprecated-symbols option, version 1 of the underlying functions would not be available, and the example above that defined H5Rdereference_vers=1 would not be supported. +As noted earlier, the function mappings can only reference versioned functions that are included in the HDF5 library, as determined by the configure flag used to build the library. For example, if the HDF5 library being linked with the application was built with the --disable-deprecated-symbols option, version 1 of the underlying functions would not be available, and the example above that defined H5Rdereference\_vers=1 would not be supported. -The function mappings do not negate any available functions. If H5Rdereference1 is available in the installed version of the HDF5 library, and the application was not compiled with the -DH5_NO_DEPRECATED_SYMBOLS flag, the function H5Rdereference1 will remain available to the application through its versioned name. Similarly, H5Rdereference2 will remain available to the application as H5Rdereference2. The function mapping version flag H5Rdereference_vers only controls the mapping of the API compatibility macro H5Rdereference to one of the two available functions. +The function mappings do not negate any available functions. If H5Rdereference1 is available in the installed version of the HDF5 library, and the application was not compiled with the -DH5\_NO\_DEPRECATED\_SYMBOLS flag, the function H5Rdereference1 will remain available to the application through its versioned name. Similarly, H5Rdereference2 will remain available to the application as H5Rdereference2. The function mapping version flag H5Rdereference\_vers only controls the mapping of the API compatibility macro H5Rdereference to one of the two available functions. This can be especially useful in any case where the programmer does not have direct control over global macro definitions, such as when writing code meant to be copied to multiple applications or when writing code in a header file. ## Compatibility Macros in HDF5 1.6.8 and Later -A series of similar compatibility macros were introduced into the release 1.6 series of the library, starting with release 1.6.8. These macros simply alias the <91>1<92> version functions, callbacks, and typedefs listed above to their original non-numbered names. +A series of similar compatibility macros were introduced into the release 1.6 series of the library, starting with release 1.6.8. These macros simply alias the '1' version functions, callbacks, and typedefs listed above to their original non-numbered names. -These macros were strictly a forward-looking feature at that time; they were not necessary for compatibility in 1.6.x. These macros were created at that time to enable writing code that could be used with any version of the library after 1.6.8 and any library compilation options except H5_NO_DEPRECATED_SYMBOLS, by always using the <91>1<92> version of versioned functions and types. For example, H5Dopen1 will always be interpreted in exactly the same manner by any version of the library since 1.6.8. +These macros were strictly a forward-looking feature at that time; they were not necessary for compatibility in 1.6.x. These macros were created at that time to enable writing code that could be used with any version of the library after 1.6.8 and any library compilation options except H5\_NO\_DEPRECATED\_SYMBOLS, by always using the '1' version of versioned functions and types. For example, H5Dopen1 will always be interpreted in exactly the same manner by any version of the library since 1.6.8. ## Common Use Case -A common scenario where the API compatibility macros may be helpful is the migration of an existing application to a new HDF5 release An incremental migration plan is outlined here: - -Build the HDF5 library without specifying any library mapping configure flag. In this default mode, the 1.6.x, 1.8.x, and 1.10.x versions of the underlying functions are available, and the API compatibility macros will be mapped to the current HDF5 versioned functions. +A common scenario where the API compatibility macros may be helpful is the migration of an existing application to a new HDF5 release An incremental migration plan is outlined here: -Compile the application with the -DH5_USE_NN_API application mapping option if it was written for use with an earlier HDF5 library. Because the application mapping overrides the library mapping, the macros will all be mapped to the earlier versions of the functions. +1. Build the HDF5 library without specifying any library mapping configure flag. In this default mode, the 1.6.x, 1.8.x, and 1.10.x versions of the underlying functions are available, and the API compatibility macros will be mapped to the current HDF5 versioned functions. +2. Compile the application with the -DH5\_USE\_NN\_API application mapping option if it was written for use with an earlier HDF5 library. Because the application mapping overrides the library mapping, the macros will all be mapped to the earlier versions of the functions. -Remap one API compatibility macro at a time (or sets of macros), to use the current HDF5 versions. At each stage, use the function mappings to map the macros being worked on to the current versions. For example, use the -DH5Rdereference_vers=2 version flag setting to remap the H5Rdereference macro to H5Rdereference2, the 1.10.x version. +3. Remap one API compatibility macro at a time (or sets of macros), to use the current HDF5 versions. At each stage, use the function mappings to map the macros being worked on to the current versions. For example, use the -DH5Rdereference\_vers=2 version flag setting to remap the H5Rdereference macro to H5Rdereference2, the 1.10.x version.
During this step, the application code will need to be modified to change the calling parameters used with the API compatibility macros to match the number and type of the 1.10.x versioned functions. The macro name, for example H5Rdereference, should continue to be used in the code, to allow for possible re-mappings to later versioned functions in a future release. +4. After all macros have been migrated to the latest versioned functions in step 3, compile the application without any application or function mappings. This build uses the library mappings set in step 1, and maps API compatibility macros to the latest versions. - After all macros have been migrated to the latest versioned functions in step 3, compile the application without any application or function mappings. This build uses the library mappings set in step 1, and maps API compatibility macros to the latest versions. - - -Finally, compile the application with the application mapping -DH5_NO_DEPRECATED_SYMBOLS, and address any failures to complete the application migration process. +5. Finally, compile the application with the application mapping -DH5\_NO\_DEPRECATED\_SYMBOLS, and address any failures to complete the application migration process. diff --git a/documentation/hdf5-docs/release_specifics/release_specific_info.md b/documentation/hdf5-docs/release_specifics/release_specific_info.md index 3cda8d66..2721e08c 100644 --- a/documentation/hdf5-docs/release_specifics/release_specific_info.md +++ b/documentation/hdf5-docs/release_specifics/release_specific_info.md @@ -12,12 +12,12 @@ redirect_from: * [Migrating to HDF5 1.14 from previous releases](Migrating_from_HDF5_1.12_to_HDF5_1.14.md) ### [HDF5 1.12](hdf5_1_12.md) -* [New Features](documentation/hdf5-docs/release_specifics/new_features_1_12.md) +* [New Features](new_features_1_12.md) * [Software Changes from Release to Release](sw_changes_1.12.md) * [Migrating from HDF5 1.10 to HDF5 1.12](Migrating_from_HDF5_1.10_to_HDF5_1.12.md) ### [HDF5 1.10](hdf5_1_10.md) -* [New Features](documentation/hdf5-docs/release_specifics/new_features_1_10.md) +* [New Features](new_features_1_10.md) * [Why should I care about the HDF5-1.10.2 release? (blog)]() * [Software Changes from Release to Release](sw_changes_1.10.md) * [Migrating from HDF5 1.8 to HDF5 1.10](Migrating_from_HDF5_1.8_to_HDF5_1.10.md) @@ -26,4 +26,4 @@ redirect_from: * New Features * [Software Changes from Release to Release](sw_changes_1.8.md) -### [API compatibility Macros in HDF5](documentation/hdf5-docs/release_specifics/api_comp_macros.md) +### [API compatibility Macros in HDF5](api_comp_macros.md) From c1d88a6bc818b8cefdcdbe3f735a6ee04634d3f5 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Wed, 20 Mar 2024 01:10:54 -0400 Subject: [PATCH 02/44] Format the Software Changes pages --- .../release_specifics/sw_changes_1.10.md | 611 +++++++++--------- .../release_specifics/sw_changes_1.12.md | 37 +- 2 files changed, 329 insertions(+), 319 deletions(-) diff --git a/documentation/hdf5-docs/release_specifics/sw_changes_1.10.md b/documentation/hdf5-docs/release_specifics/sw_changes_1.10.md index 9b2ef3d2..9841a80c 100644 --- a/documentation/hdf5-docs/release_specifics/sw_changes_1.10.md +++ b/documentation/hdf5-docs/release_specifics/sw_changes_1.10.md @@ -1,6 +1,6 @@ --- title: Software+Changes+from+Release+to+Release+for+HDF5+1.10 -redirect_from: +redirect from: - display/HDF5/Software+Changes+from+Release+to+Release+for+HDF5+1.10 --- @@ -17,20 +17,22 @@ Note that bug fixes and performance enhancements in the C library are automatica The following information is included below. -* [Compatiblity and Performance Issues](#compatiblity-and-performance-issues) -* [Release 1.10.9 versus 1.10.8](#release-1.10.9-versus-1.10.8) -* [Release 1.10.8 versus 1.10.7](#release-1.10.8-versus-1.10.7) -* [Release 1.10.7 versus 1.10.6](#release-1.10.7-versus-1.10.6) -* [Release 1.10.6 versus 1.10.5](#release-1.10.6-versus-1.10.5) -* [Release 1.10.5 versus 1.10.4, 1.10.3, and 1.10.2](#release-1.10.5-versus-1.10.4) -* [Release 1.10.4 versus Release 1.10.3](#release-1.10.4-versus-1.10.3) -* [Release 1.10.3 versus Release 1.10.2](#release-1.10.3-versus-1.10.2) -* [Release 1.10.2 versus Release 1.10.1](#release-1.10.2-versus-1.10.1) -* [Release 1.10.1 versus Release 1.10.0 (and 1.10.0-patch1)](#release-1.10.1-versus-1.10.0) -* [Release 1.10.0 of March 2016 versus Release 1.8.16](#release-1.10.0-versus-1.8.16) +* Compatiblity and Performance Issues +* Release 1.10.9 versus 1.10.8] +* Release 1.10.8 versus 1.10.7 +* Release 1.10.7 versus 1.10.6 +* Release 1.10.6 versus 1.10.5 +* Release 1.10.5 versus 1.10.4, 1.10.3, and 1.10.2 +* Release 1.10.4 versus Release 1.10.3 +* Release 1.10.3 versus Release 1.10.2 +* Release 1.10.2 versus Release 1.10.1 +* Release 1.10.1 versus Release 1.10.0 (and 1.10.0-patch1) +* Release 1.10.0 of March 2016 versus Release 1.8.16 +See [API Compatibility Reports for 1.10]() for information regarding compatibility with previous releases. + +

Compatiblity and Performance Issues

-## Compatibility and Performance Issues Not all HDF5-1.10 releases are compatible. Users should NOT be using 1.10 releases prior to HDF5-1.10.3. See the compatibility matrix below for details on compatibility between 1.10 releases: | Release | 1.10.5+ | 1.10.4 | 1.10.3 | 1.10.2 | 1.10.1 | 1.10.0-patch1 | 1.10.0 | @@ -44,119 +46,125 @@ The following images show how performance has changed from release to release. [cgns, HDF5 versions](images/cgns.png) +[writeLgNumDsets](images/writeLgNumDsets.png) -The release notes also list changes made to the library, but these notes tend to be more at a more detail-oriented level. The release notes may include new features, bugs fixed, supported configuration features, platforms on which the library has been tested, and known problems. The release note files are listed below and can be found at the top level of the HDF5 source code tree in the release_docs directory. +The release notes also list changes made to the library, but these notes tend to be more at a more detail-oriented level. The release notes may include new features, bugs fixed, supported configuration features, platforms on which the library has been tested, and known problems. The release note files are listed below and can be found at the top level of the HDF5 source code tree in the release\_docs directory. -| | | -| ------------------------ | ------------------------------------------------------------ | -| Release Notes | Technical notes regarding the current release of the HDF5 library (RELEASE.txt in the source code) | -| HISTORY-1_10.txt | Release information for all HDF5-1.10 releases | -| HISTORY-1_8_0-1_10_0.txt | Development history between the HDF5-1.8.0 and HDF5-1.10.0 releases | -| HISTORY-1_8.txt | Release information for HDF5-1.8.0 through HDF5-1.8.21 releases | -| HISTORY-1_0-1_8_0_rc3.txt | Technical notes starting with HDF5-1.0.0 and ending with HDF5-1.8.0-rc3 (the state of the code prior to the HDF5-1.8.0 release) | +| | | +| ----------------------------- | ------------------------------------------------------------ | +| **Release Notes** | Technical notes regarding the current release of the HDF5 library (RELEASE.txt in the source code) | +| **HISTORY-1_10.txt** | Release information for all HDF5-1.10 releases | +| **HISTORY-1_8_0-1_10_0.txt** | Development history between the HDF5-1.8.0 and HDF5-1.10.0 releases | +| **HISTORY-1_8.txt** | Release information for HDF5-1.8.0 through HDF5-1.8.21 releases | +| **HISTORY-1_0-1_8_0_rc3.txt** | Technical notes starting with HDF5-1.0.0 and ending with HDF5-1.8.0-rc3 (the state of the code prior to the HDF5-1.8.0 release) | +

Release 1.10.9 versus 1.10.8

-## Release 1.10.9 versus 1.10.8 ### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros -In the Java Wrapper +In the Java API One Java wrapper was added: -H5.H5export_dataset +H5.H5export\_dataset ### Compatibility Notes and Reports -See the API compatibility report for the HDF5 library between 1.10.8 and 1.10.9 for information regarding compatibility with the previous release. The API Compatibility Report page includes all 1.10 compatibility reports. +See the [API compatibility report between 1.10.8 and 1.10.9]() for information regarding compatibility with the previous release. -## Release 1.10.8 versus 1.10.7 -New and Changed Functions, Classes, Subroutines, Wrappers, and Macros -In the C++ Wrapper +

Release 1.10.8 versus 1.10.7

+ +### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros + +#### In the C++ API One C++ wrapper was added: DataSet::operator= -Compatibility Notes and Reports -See the API compatibility report for the HDF5 library between 1.10.7 and 1.10.8 for information regarding compatibility with the previous release. The API Compatibility Report page includes all 1.10 compatibility reports. +### Compatibility Notes and Reports +See the [API compatibility report between 1.10.7 and 1.10.8]() for information regarding compatibility with the previous release. -## Release 1.10.7 versus 1.10.6 -New and Changed Functions, Classes, Subroutines, Wrappers, and Macros -In the C Interface (main library) +

Release 1.10.7 versus 1.10.6

-The following are new C functions in this release: +### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros +#### In the C Interface (main library) -H5P_GET_FAPL_SPLITTER -Retrieves information for a splitter file access property list -H5P_SET_FAPL_SPLITTER Sets the file access property list to use the splitter driver -H5P_GET_FILE_LOCKING Gets the file locking property values -H5P_SET_FILE_LOCKING Sets the file locking property values -H5_GET_ALLOC_STATS -Gets the memory allocation statistics for the library -H5_GET_FREE_LIST_SIZES Gets the current size of the free lists used to manage memory -H5S_COMBINE_HYPERSLAB Performs an operation on a hyperslab and an existing selection and returns the resulting selection -H5S_COMBINE_SELECT Combines two hyperslab selections with an operation, returning a dataspace with the resulting selection -H5S_MODIFY_SELECT Refines a hyperslab selection with an operation using a second hyperslab to modify it -H5S_SELECT_ADJUST Adjusts a selection by subtracting an offset -H5S_SELECT_COPY Copies a selection from one dataspace to another -H5S_SELECT_INTERSECT_BLOCK Checks if current selection intersects with a block -H5S_SELECT_PROJECT_INTERSECTION Projects the intersection of two source selections to a destination selection -H5S_SELECT_SHAPE_SAME -Checks if two selections are the same shape +The following are new C functions in this release: +| Function | Description | +| ----------------------------- | ------------------------------------------------------------ | +| H5P\_GET\_FAPL\_SPLITTER | Retrieves information for a splitter file access property list | +| H5P\_SET\_FAPL\_SPLITTER | Sets the file access property list to use the splitter driver | +| H5P\_GET\_FILE\_LOCKING | Gets the file locking property values | +| H5P\_SET\_FILE\_LOCKING | Sets the file locking property values | +| H5\_GET\_ALLOC\_STATS | Gets the memory allocation statistics for the library | +| H5\_GET\_FREE\_LIST\_SIZES | Gets the current size of the free lists used to manage memory | +| H5S\_COMBINE\_HYPERSLAB | Performs an operation on a hyperslab and an existing selection and returns the resulting selection | +| H5S\_COMBINE\_SELECT | Combines two hyperslab selections with an operation, returning a dataspace with the resulting selection | +| H5S\_MODIFY\_SELECT | Refines a hyperslab selection with an operation using a second hyperslab to modify it | +| H5S\_SELECT\_ADJUST | Adjusts a selection by subtracting an offset | +| H5S\_SELECT\_COPY | Copies a selection from one dataspace to another | +| H5S\_SELECT\_INTERSECT\_BLOCK | Checks if current selection intersects with a block | +| H5S\_SELECT\_PROJECT\_INTERSECTION | Projects the intersection of two source selections to a destination selection | +| H5S\_SELECT\_SHAPE\_SAME | Checks if two selections are the same shape | + +#### In the C++ API +The following C++ wrappers were added: -In the C++ Wrapper +FileAccPropList::getFileLocking See H5P\_GET\_FILE\_LOCKING for details +FileAccPropList::setFileLocking See H5P\_SET\_FILE\_LOCKING for details -The following C++ wrappers were added: +### Compatibility Notes and Reports +See the [API compatibility report between 1.10.7 and 1.10.8]() for information regarding compatibility with the previous release. -FileAccPropList::getFileLocking See H5P_GET_FILE_LOCKING for details -FileAccPropList::setFileLocking See H5P_SET_FILE_LOCKING for details -Compatibility Notes and Reports -See the API compatibility report for the HDF5 library between 1.10.6 and 1.10.7 for information regarding compatibility with the previous release. The API Compatibility Report page includes all 1.10 compatibility reports. +

Release 1.10.6 versus 1.10.5

-## Release 1.10.6 versus 1.10.5 -New and Changed Functions, Classes, Subroutines, Wrappers, and Macros -In the C Interface (main library) +### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros +#### In the C Interface (main library) The following are new C functions in this release: -H5P_GET_FAPL_HDFS Gets the information of the given Read-Only HDFS virtual file driver -H5P_GET_FAPL_ROS3 Gets the information of the given Read-Only S3 virtual file driver -H5P_SET_FAPL_HDFS Sets up Read-Only HDFS virtual file driver -H5P_SET_FAPL_ROS3 Sets up Read-Only S3 virtual file driver +| Function | Description | +| --------------------- | ------------------------------------------------------------ | +| H5P\_GET\_FAPL\_HDFS | Gets the information of the given Read-Only HDFS virtual file driver | +| H5P\_GET\_FAPL\_ROS3 | Gets the information of the given Read-Only S3 virtual file driver | +| H5P\_SET\_FAPL\_HDFS | Sets up Read-Only HDFS virtual file driver | +| H5P\_SET\_FAPL\_ROS3 | Sets up Read-Only S3 virtual file driver | +#### In the C++ API + +The following C++ wrappers were added: -In the C++ Wrapper +LinkCreatPropList::getCreateIntermediateGroup() const +See H5P\_GET\_CREATE\_INTERMEDIATE\_GROUP +LinkCreatPropList::setCreateIntermediateGroup(bool crt\_intmd\_group) const +See H5P\_SET\_CREATE\_INTERMEDIATE\_GROUP -The following C++ wrapper was added: +### Compatibility Notes and Reports +See the [API compatibility report between 1.10.7 and 1.10.8]() for information regarding compatibility with the previous release. -LinkCreatPropList::getCreateIntermediateGroup ( ) const -See H5P_GET_CREATE_INTERMEDIATE_GROUP -LinkCreatPropList::setCreateIntermediateGroup ( bool crt_intmd_group ) const -See H5P_SET_CREATE_INTERMEDIATE_GROUP -Compatibility Notes and Reports -See the API Compatibility Report for information regarding compatibility with previous releases. +

Release 1.10.5 versus 1.10.4

-## Release 1.10.5 versus 1.10.4, 1.10.3, and 1.10.2 -New and Changed Functions, Classes, Subroutines, Wrappers, and Macros -In the C Interface (main library) +### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros +#### In the C Interface (main library) The following are new C functions in this release: -H5D_GET_CHUNK_INFO Retrieves information about a chunk specified by the chunk index -H5D_GET_CHUNK_INFO_BY_COORD Retrieves information about a chunk specified by its coordinates -H5D_GET_NUM_CHUNKS Retrieves number of chunks that have nonempty intersection with a specified selection -H5F_GET_DSET_NO_ATTRS_HINT +H5D\_GET\_CHUNK\_INFO Retrieves information about a chunk specified by the chunk index +H5D\_GET\_CHUNK\_INFO\_BY\_COORD Retrieves information about a chunk specified by its coordinates +H5D\_GET\_NUM\_CHUNKS Retrieves number of chunks that have nonempty intersection with a specified selection +H5F\_GET\_DSET\_NO\_ATTRS\_HINT Retrieves the setting for determining whether the specified file does or does not create minimized dataset object headers -H5F_SET_DSET_NO_ATTRS_HINT +H5F\_SET\_DSET\_NO\_ATTRS\_HINT Sets the flag to create minimized dataset object headers -H5P_GET_DSET_NO_ATTRS_HINT +H5P\_GET\_DSET\_NO\_ATTRS\_HINT Retrieves the setting for determining whether the specified DCPL does or does not create minimized dataset object headers -H5P_SET_DSET_NO_ATTRS_HINT +H5P\_SET\_DSET\_NO\_ATTRS\_HINT Sets the flag to create minimized dataset object headers @@ -164,59 +172,59 @@ Sets the flag to create minimized dataset object headers The following changed in this release: -H5O_GET_INFO, H5O_GET_INFO_BY_NAME, H5O_GET_INFO_BY_IDX, H5O_VISIT, H5O_VISIT_BY_NAME +H5O\_GET\_INFO, H5O\_GET\_INFO\_BY\_NAME, H5O\_GET\_INFO\_BY\_IDX, H5O\_VISIT, H5O\_VISIT\_BY\_NAME -In 1.10.3 the original functions were versioned to H5Oget_info*1 and H5Ovisit*1 and the macros H5Oget_info* and H5Ovisit* were created. This broke the API compatibility for a maintenance release. In HDF5-1.10.5, the macros introduced in HDF5-1.10.3 were removed. The H5Oget_info*1 and H5Ovisit*1 APIs were copied to H5Oget_Info* and H5Ovisit*. As an example, H5Oget_info and H5Oget_info1 are identical in this release. +In 1.10.3 the original functions were versioned to H5Oget\_info*1 and H5Ovisit*1 and the macros H5Oget\_info* and H5Ovisit* were created. This broke the API compatibility for a maintenance release. In HDF5-1.10.5, the macros introduced in HDF5-1.10.3 were removed. The H5Oget\_info*1 and H5Ovisit*1 APIs were copied to H5Oget\_Info* and H5Ovisit*. As an example, H5Oget\_info and H5Oget\_info1 are identical in this release. -In the C++ Wrapper +In the C++ API The following C++ wrapper was added: H5Object::visit() -Wrapper for the C API H5O_VISIT2. Recursively visit elements reachable from an HDF5 object and perform a common set of operations across all of those elements. See H5O_VISIT2 for more information on this function. +Wrapper for the C API H5O\_VISIT2. Recursively visit elements reachable from an HDF5 object and perform a common set of operations across all of those elements. See H5O\_VISIT2 for more information on this function. -In the Fortran Wrapper +In the Fortran API The following Fortran wrappers were added or changed: -h5fget_dset_no_attrs_hint_f +h5fget\_dset\_no\_attrs\_hint\_f -h5fset_dset_no_attrs_hint_f +h5fset\_dset\_no\_attrs\_hint\_f -h5pget_dset_no_attrs_hint_f +h5pget\_dset\_no\_attrs\_hint\_f -h5pset_dset_no_attrs_hint_f +h5pset\_dset\_no\_attrs\_hint\_f -Wrappers for the dataset object header minimization calls. See H5F_GET_DSET_NO_ATTRS_HINT, H5F_SET_DSET_NO_ATTRS_HINT, H5P_GET_DSET_NO_ATTRS_HINT, and H5P_SET_DSET_NO_ATTRS_HINT. -h5ovisit_f +Wrappers for the dataset object header minimization calls. See H5F\_GET\_DSET\_NO\_ATTRS\_HINT, H5F\_SET\_DSET\_NO\_ATTRS\_HINT, H5P\_GET\_DSET\_NO\_ATTRS\_HINT, and H5P\_SET\_DSET\_NO\_ATTRS\_HINT. +h5ovisit\_f -h5oget_info_by_name_f +h5oget\_info\_by\_name\_f -h5oget_info +h5oget\_info -h5oget_info_by_idx +h5oget\_info\_by\_idx -h5ovisit_by_name_f +h5ovisit\_by\_name\_f -Added new Fortran 'fields' optional parameter. See H5O_VISIT2, H5O_GET_INFO_BY_NAME2, H5O_GET_INFO2, H5O_GET_INFO_BY_IDX2, and H5O_VISIT_BY_NAME2. +Added new Fortran 'fields' optional parameter. See H5O\_VISIT2, H5O\_GET\_INFO\_BY\_NAME2, H5O\_GET\_INFO2, H5O\_GET\_INFO\_BY\_IDX2, and H5O\_VISIT\_BY\_NAME2. The following Fortran utility function was added: -h5gmtime converts (C) 'time_t' structure to Fortran DATE AND TIME storage format +h5gmtime converts (C) 'time\_t' structure to Fortran DATE AND TIME storage format A new Fortran derived type was added: -c_h5o_info_t -This is interoperable with C's h5o_info_t. This is needed for callback functions which pass C's h5o_info_t data type definition. +c\_h5o\_info\_t +This is interoperable with C's h5o\_info\_t. This is needed for callback functions which pass C's h5o\_info\_t data type definition. -See the Fortran signature for H5O_GET_INFO2. +See the Fortran signature for H5O\_GET\_INFO2. @@ -224,87 +232,87 @@ In the Java wrapper The following Java wrappers were added or changed: -H5Fset_libver_bounds See the C API H5F_SET_LIBVER_BOUNDS for information on this function -H5Fget_dset_no_attrs_hint +H5Fset\_libver\_bounds See the C API H5F\_SET\_LIBVER\_BOUNDS for information on this function +H5Fget\_dset\_no\_attrs\_hint -H5Fset_dset_no_attrs_hint +H5Fset\_dset\_no\_attrs\_hint -H5Pget_dset_no_attrs_hint +H5Pget\_dset\_no\_attrs\_hint -H5Pset_dset_no_attrs_hint +H5Pset\_dset\_no\_attrs\_hint -Wrappers for the dataset object header minimization calls See H5F_GET_DSET_NO_ATTRS_HINT, H5F_SET_DSET_NO_ATTRS_HINT, H5P_GET_DSET_NO_ATTRS_HINT, and H5P_SET_DSET_NO_ATTRS_HINT for more information on these APIs. -Compatibility Notes and Reports -See these API Compatibility Reports for 1.10 for information regarding compatibility with previous releases. Reports are available comparing HDF5-1.10.5 vs 1.10.2, HDF5-1.10.5 vs 1.10.3, and HDF5-1.10.5 vs 1.10.4. +Wrappers for the dataset object header minimization calls See H5F\_GET\_DSET\_NO\_ATTRS\_HINT, H5F\_SET\_DSET\_NO\_ATTRS\_HINT, H5P\_GET\_DSET\_NO\_ATTRS\_HINT, and H5P\_SET\_DSET\_NO\_ATTRS\_HINT for more information on these APIs. - +### Compatibility Notes and Reports +See the [API compatibility report between 1.10.5 and 1.10.2/1.10.3/1.10.4]() for details. -## Release 1.10.4 versus Release 1.10.3 -See the API compatibility Report for information regarding compatibility with previous releases +

Release 1.10.4 versus 1.10.3

- +See the [API compatibility report between 1.10.4 and 1.10.3]() for details. + +

Release 1.10.3 versus 1.10.2

-## Release 1.10.3 versus Release 1.10.2 New and Changed Functions, Classes, Subroutines, Wrappers, and Macros In the C Interface (main library) The following are new C functions in this release: -H5D_READ_CHUNK Moved from HDF5 High Level Optimizations library to core library -H5D_WRITE_CHUNK Moved from HDF5 High Level Optimizations library to core library -H5O_GET_INFO +H5D\_READ\_CHUNK Moved from HDF5 High Level Optimizations library to core library +H5D\_WRITE\_CHUNK Moved from HDF5 High Level Optimizations library to core library +H5O\_GET\_INFO -H5O_GET_INFO1 +H5O\_GET\_INFO1 -H5O_GET_INFO2 +H5O\_GET\_INFO2 -The function H5O_GET_INFO was moved to H5O_GET_INFO1, and the macro H5O_GET_INFO was created that can be mapped to either H5O_GET_INFO1 or H5O_GET_INFO2. For HDF5-1.10 and earlier releases, H5O_GET_INFO is mapped to H5O_GET_INFO1 by default. -H5O_GET_INFO_BY_IDX +The function H5O\_GET\_INFO was moved to H5O\_GET\_INFO1, and the macro H5O\_GET\_INFO was created that can be mapped to either H5O\_GET\_INFO1 or H5O\_GET\_INFO2. For HDF5-1.10 and earlier releases, H5O\_GET\_INFO is mapped to H5O\_GET\_INFO1 by default. +H5O\_GET\_INFO\_BY\_IDX -H5O_GET_INFO_BY_IDX1 +H5O\_GET\_INFO\_BY\_IDX1 -H5O_GET_INFO_BY_IDX2 +H5O\_GET\_INFO\_BY\_IDX2 -The function H5O_GET_INFO_BY_IDX was moved to H5O_GET_INFO_BY_IDX1, and the macro H5O_GET_INFO_BY_IDX was created that can be mapped to either H5O_GET_INFO_BY_IDX1 or H5O_GET_INFO_BY_IDX2. For HDF5-1.10 and earlier releases, H5O_GET_INFO_BY_IDX is mapped to H5O_GET_INFO_BY_IDX1 by default. -H5O_GET_INFO_BY_NAME +The function H5O\_GET\_INFO\_BY\_IDX was moved to H5O\_GET\_INFO\_BY\_IDX1, and the macro H5O\_GET\_INFO\_BY\_IDX was created that can be mapped to either H5O\_GET\_INFO\_BY\_IDX1 or H5O\_GET\_INFO\_BY\_IDX2. For HDF5-1.10 and earlier releases, H5O\_GET\_INFO\_BY\_IDX is mapped to H5O\_GET\_INFO\_BY\_IDX1 by default. +H5O\_GET\_INFO\_BY\_NAME -H5O_GET_INFO_BY_NAME1 +H5O\_GET\_INFO\_BY\_NAME1 -H5O_GET_INFO_BY_NAME2 +H5O\_GET\_INFO\_BY\_NAME2 -The function H5O_GET_INFO_BY_NAME was moved to H5O_GET_INFO_BY_NAME1, and the macro H5O_GET_INFO_BY_NAME was created that can be mapped to either H5O_GET_INFO_BY_NAME1 or H5O_GET_INFO_BY_NAME2. For HDF5-1.10 and earlier releases, H5O_GET_INFO_BY_NAME is mapped to H5O_GET_INFO_BY_NAME1 by default. -H5O_VISIT +The function H5O\_GET\_INFO\_BY\_NAME was moved to H5O\_GET\_INFO\_BY\_NAME1, and the macro H5O\_GET\_INFO\_BY\_NAME was created that can be mapped to either H5O\_GET\_INFO\_BY\_NAME1 or H5O\_GET\_INFO\_BY\_NAME2. For HDF5-1.10 and earlier releases, H5O\_GET\_INFO\_BY\_NAME is mapped to H5O\_GET\_INFO\_BY\_NAME1 by default. +H5O\_VISIT -H5O_VISIT1 +H5O\_VISIT1 -H5O_VISIT2 +H5O\_VISIT2 -The function H5O_VISIT was moved to H5O_VISIT1, and the macro H5O_VISIT was created that can be mapped to either H5O_VISIT1 or H5O_VISIT2. For HDF5-1.10 and earlier releases, H5O_VISIT is mapped to H5O_VISIT1 by default. -H5O_VISIT_BY_NAME +The function H5O\_VISIT was moved to H5O\_VISIT1, and the macro H5O\_VISIT was created that can be mapped to either H5O\_VISIT1 or H5O\_VISIT2. For HDF5-1.10 and earlier releases, H5O\_VISIT is mapped to H5O\_VISIT1 by default. +H5O\_VISIT\_BY\_NAME -H5O_VISIT_BY_NAME1 +H5O\_VISIT\_BY\_NAME1 -H5O_VISIT_BY_NAME2 +H5O\_VISIT\_BY\_NAME2 -The function H5O_VISIT_BY_NAME was moved to H5O_VISIT_BY_NAME1, and the macro H5O_VISIT_BY_NAME was created that can be mapped to either H5O_VISIT_BY_NAME1 or H5O_VISIT_BY_NAME2. For HDF5-1.10 and earlier releases, H5O_VISIT_BY_NAME is mapped to H5O_VISIT_BY_NAME1 by default. +The function H5O\_VISIT\_BY\_NAME was moved to H5O\_VISIT\_BY\_NAME1, and the macro H5O\_VISIT\_BY\_NAME was created that can be mapped to either H5O\_VISIT\_BY\_NAME1 or H5O\_VISIT\_BY\_NAME2. For HDF5-1.10 and earlier releases, H5O\_VISIT\_BY\_NAME is mapped to H5O\_VISIT\_BY\_NAME1 by default. In the C High Level Interface The following C functions were deprecated in this release: -H5DO_READ_CHUNK Deprecated, moved to H5D_READ_CHUNK -H5DO_WRITE_CHUNK Deprecated, moved to H5D_WRITE_CHUNK +H5DO\_READ\_CHUNK Deprecated, moved to H5D\_READ\_CHUNK +H5DO\_WRITE\_CHUNK Deprecated, moved to H5D\_WRITE\_CHUNK -In the C++ Wrapper +In the C++ API Several C++ wrappers were added or modified to provide additional support. See the API Compatibility Report for details. -Compatibility Notes and Report -See the API Compatibility Report for information regarding compatibility with previous releases. +### Compatibility Notes and Report +See the [API compatibility report between 1.10.4 and 1.10.3]() for details. + +

Release 1.10.2 versus 1.10.1

-## Release 1.10.2 versus Release 1.10.1 This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.10.1 to Release 1.10.2. New and Changed Functions, Classes, Subroutines, Wrappers, and Macros @@ -312,40 +320,40 @@ In the C Interface (main library) The following are new C functions in this release: -H5D_GET_CHUNK_STORAGE_SIZE Returns storage amount allocated within a file for a raw data chunk in a dataset -H5F_GET_EOA Retrieves the file's EOA -H5F_INCREMENT_FILESIZE +H5D\_GET\_CHUNK\_STORAGE\_SIZE Returns storage amount allocated within a file for a raw data chunk in a dataset +H5F\_GET\_EOA Retrieves the file's EOA +H5F\_INCREMENT\_FILESIZE Sets the file's EOA to the maximum of (EOA, EOF) + increment -H5F_SET_LIBVER_BOUNDS Enables the switch of version bounds setting for a file -H5FDdriver_query Queries a VFL driver for its feature flags when a file is not available (not documented in Reference Manual) -H5P_GET_VIRTUAL_PREFIX Retrieves prefix applied to VDS source file paths -H5P_SET_VIRTUAL_PREFIX Sets prefix to be applied to VDS source file paths +H5F\_SET\_LIBVER\_BOUNDS Enables the switch of version bounds setting for a file +H5FDdriver\_query Queries a VFL driver for its feature flags when a file is not available (not documented in Reference Manual) +H5P\_GET\_VIRTUAL\_PREFIX Retrieves prefix applied to VDS source file paths +H5P\_SET\_VIRTUAL\_PREFIX Sets prefix to be applied to VDS source file paths The following C functions changed in this release: -H5P_SET_LIBVER_BOUNDS HDF5-1.10 was added to the range of versions -H5P_SET_VIRTUAL A change was made to the method of searching for VDS source files -H5PL* The parameters for many of the H5PL APIs were renamed +H5P\_SET\_LIBVER\_BOUNDS HDF5-1.10 was added to the range of versions +H5P\_SET\_VIRTUAL A change was made to the method of searching for VDS source files +H5PL\* The parameters for many of the H5PL APIs were renamed In the C High Level Interface The following new C function was added to this release: -H5DO_READ_CHUNK Reads a raw data chunk directly from a dataset in a file +H5DO\_READ\_CHUNK Reads a raw data chunk directly from a dataset in a file -In the C++ Wrapper +In the C++ API The following C++ wrappers were added: -H5Lcreate_soft -Creates a soft link from link_name to target_name +H5Lcreate\_soft +Creates a soft link from link\_name to target\_name -H5Lcreate_hard -Creates a hard link from new_name to curr_name +H5Lcreate\_hard +Creates a hard link from new\_name to curr\_name H5Lcopy Copy an object from a group of file @@ -362,7 +370,7 @@ Creates a binary object description of this datatype H5Tdecode Returns the decoded type from the binary object description -H5Lget_info +H5Lget\_info Returns the information of the named link @@ -377,29 +385,29 @@ See the API Compatibility report for complete details. -In the Java Wrapper +In the Java API The following Java wrappers were added: -H5Pset_evict_on_close +H5Pset\_evict\_on\_close Controls the library's behavior of evicting metadata associated with a closed object -H5Pget_evict_on_close +H5Pget\_evict\_on\_close Retrieves the file access property list setting that determines whether an HDF5 object will be evicted from the library's metadata cache when closed -H5Pset_chunk_opts +H5Pset\_chunk\_opts Sets the edge chunk option in a dataset creation property list -H5Pget_chunk_opts +H5Pget\_chunk\_opts Retrieves the edge chunk option setting from a dataset creation property list -H5Pset_efile_prefix +H5Pset\_efile\_prefix Sets the external dataset storage file prefix in the dataset access property list -H5Pget_efile_prefix +H5Pget\_efile\_prefix Retrieves the prefix for external raw data storage files as set in the dataset access property list -H5Pset_virtual_prefix +H5Pset\_virtual\_prefix Sets prefix to be applied to VDS source file paths -H5Pget_virtual_prefix +H5Pget\_virtual\_prefix Retrieves prefix applied to VDS source file paths See the Release.txt file for details. @@ -418,10 +426,13 @@ C is >= 0; C is optional and will default to 1M when not set A new option was added to h5diff: --enable-error-stack Enable the error stack -Compatibility Notes and Report -See API Compatibility Reports for 1.10 for information regarding compatibility with previous releases. -## Release 1.10.1 versus Release 1.10.0 (and 1.10.0-patch1) +### Compatibility Notes and Report + +See the [API compatibility report between 1.10.4 and 1.10.3]() for details. + +

Release 1.10.1 versus 1.10.0

+ This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.10.0 (and HDF5-1.10.0-patch1) to Release 1.10.1. New Features @@ -441,64 +452,64 @@ The following features are described and documented in New Features in HDF5 Rele Metadata Cache Image: -H5Pget_mdc_image_config +H5Pget\_mdc\_image\_config Retrieves the metadata cache image configuration values for a file access property list. -H5Pset_mdc_image_config +H5Pset\_mdc\_image\_config Sets the metadata cache image option for a file access property list. -H5Fget_mdc_image_info +H5Fget\_mdc\_image\_info Gets information about a metadata cache image if it exists. Metadata Cache Evict on Close: -H5Pget_evict_on_close +H5Pget\_evict\_on\_close Retrieves the property list setting that determines whether an HDF5 object will be evicted from the library's metadata cache when it is closed. -H5Pset_evict_on_close +H5Pset\_evict\_on\_close Controls the library's behavior of evicting metadata associated with a closed object. Paged Aggregation: -H5Pget_file_space_page_size +H5Pget\_file\_space\_page\_size Retrieves the file space page size for a file creation property list. -H5Pset_file_space_page_size +H5Pset\_file\_space\_page\_size Sets the file space page size (used with paged aggregation) for a file creation property list. -H5Pget_file_space_strategy +H5Pget\_file\_space\_strategy Retrieves the file space handling strategy for a file creation property list. -H5Pset_file_space_strategy +H5Pset\_file\_space\_strategy Sets the file space allocation strategy for a file creation property list. Page Buffering: -H5Pget_page_buffer_size +H5Pget\_page\_buffer\_size Retrieves the maximum size for the page buffer and the minimum percentage for metadata and raw data pages. -H5Pset_page_buffer_size +H5Pset\_page\_buffer\_size Sets the maximum size for the page buffer and the minimum percentage for metadata and raw data pages. -H5Fget_page_buffering_stats +H5Fget\_page\_buffering\_stats Retrieves statistics about page access when it is enabled. -H5Freset_page_buffering_stats +H5Freset\_page\_buffering\_stats Resets the page buffer statistics. @@ -522,49 +533,45 @@ H5PLreplace H5PLsize -In the C++ Wrapper +In the C++ API New member functions were added to provide const versions. For example, these methods, -ArrayType::getArrayDims ( hsize_t* dims ) const +ArrayType::getArrayDims ( hsize\_t\* dims ) const ArrayType::getArrayNDims ( ) const - replace these: -ArrayType::getArrayDims ( hsize_t* dims ) +ArrayType::getArrayDims(hsize\_t\* dims) -ArrayType::getArrayNDims ( ) +ArrayType::getArrayNDims() Several functions were moved to other classes. For example, this method, -H5Location::openDataSet ( char const* name ) const +H5Location::openDataSet (char const\* name) const replaces: -CommonFG::openDataSet ( char const* name ) const - - +CommonFG::openDataSet (char const\* name) const PLEASE review the Compatibility report below for complete information on the C++ changes in this release. -Compatibility Report -Compatibility report for Release 1.10.1 versus Release 1.10.0-patch1 +### Compatibility Report -See API Compatibility Reports for 1.10 for information regarding compatibility with previous releases. +See the [API compatibility report between 1.10.1 and 1.10.0-patch1]() for details. -## Release 1.10.0 of March 2016 versus Release 1.8.16 +

Release 1.10.0 versus Release 1.8.16

This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.8.16 to Release 1.10.0. Changed Type -hid_t +hid\_t Changed from a 32-bit to a 64-bit value. -hid_t is the type is used for all HDF5 identifiers. This change, which is necessary to accomodate the capacities of modern computing systems, therefore affects all HDF5 applications. If an application has been using HDF5's hid_t the type, recompilation will normally be sufficient to take advantage of HDF5 Release 1.10.0. If an application uses an integer type instead of HDF5's hid_t type, those identifiers must be changed to a 64-bit type when the application is ported to the 1.10.x series. +hid\_t is the type is used for all HDF5 identifiers. This change, which is necessary to accomodate the capacities of modern computing systems, therefore affects all HDF5 applications. If an application has been using HDF5's hid\_t the type, recompilation will normally be sufficient to take advantage of HDF5 Release 1.10.0. If an application uses an integer type instead of HDF5's hid\_t type, those identifiers must be changed to a 64-bit type when the application is ported to the 1.10.x series. New Features and Feature Sets Several new features are introduced in HDF5 Release 1.10.0. @@ -597,7 +604,7 @@ The following features are described and documented in New Features in HDF5 Rele Single-writer / Multiple-reader, commonly called SWMR: -H5Fstart_swmr_write +H5Fstart\_swmr\_write Enables SWMR writing mode for a file. @@ -606,51 +613,51 @@ H5DOappend Appends data to a dataset along a specified dimension. (This is a high-level API.) -H5Pget_append_flush +H5Pget\_append\_flush Retrieves the values of the append property that is set up in the dataset access property list. -H5Pset_append_flush +H5Pset\_append\_flush Sets two actions to perform when the size of a dataset's dimension being appended reaches a specified boundary. -H5Pget_object_flush_cb +H5Pget\_object\_flush\_cb Retrieves the object flush property values from the file access property list. -H5Pset_object_flush_cb +H5Pset\_object\_flush\_cb Sets a callback function to invoke when an object flush occurs in the file. -H5Odisable_mdc_flushes +H5Odisable\_mdc\_flushes Prevents metadata entries for an HDF5 object from being flushed from the metadata cache to storage. -H5Oenable_mdc_flushes +H5Oenable\_mdc\_flushes Returns the cache entries associated with an HDF5 object to the default metadata flush and eviction algorithm. -H5Oare_mdc_flushes_disabled +H5Oare\_mdc\_flushes\_disabled Determines if an HDF5 object (dataset, group, committed datatype) has had flushes of metadata entries disabled. -H5Fdisable_mdc_flushes +H5Fdisable\_mdc\_flushes Globally prevents dirty metadata entries from being flushed from the metadata cache to storage. -H5Fenable_mdc_flushes +H5Fenable\_mdc\_flushes Returns a file's metadata cache to the standard eviction and flushing algorithm. -H5Fare_mdc_flushes_disabled +H5Fare\_mdc\_flushes\_disabled Determines if flushes have been globally disabled for a file's metadata cache. -H5Fget_mdc_flush_disabled_obj_ids +H5Fget\_mdc\_flush\_disabled\_obj\_ids @@ -663,30 +670,30 @@ h5watch Allows users to output new records appended to a dataset under SWMR access as it grows. The functionality is similar to the Unix user command tail with the follow option, which outputs appended data as the file grows. -h5format_convert +h5format\_convert This tool allows users to convert the indexing type of a chunked dataset made with a 1.10.x version of the HDF5 Library when the latest file format is used to the 1.8.x version 1 B-tree indexing type. For example, datasets created using SWMR access, can be converted to be accessed by the HDF5 1.18 library and tools. The tool does not rewrite raw data, but it does rewrite HDF5 metadata. Collective Metadata I/O: -H5Pset_coll_metadata_write -h5pset_coll_metadata_write_f +H5Pset\_coll\_metadata\_write +h5pset\_coll\_metadata\_write\_f Establishes I/O mode property setting, collective or independent, for metadata writes. -H5Pget_coll_metadata_write -h5pget_coll_metadata_write_f +H5Pget\_coll\_metadata\_write +h5pget\_coll\_metadata\_write\_f Retrieves I/O mode property setting for metadata writes. -H5Pset_all_coll_metadata_ops -h5pset_all_coll_metadata_ops_f +H5Pset\_all\_coll\_metadata\_ops +h5pset\_all\_coll\_metadata\_ops\_f Establishes I/O mode, collective or independent, for metadata read operations. -H5Pget_all_coll_metadata_ops -h5pget_all_coll_metadata_ops_f +H5Pget\_all\_coll\_metadata\_ops +h5pget\_all\_coll\_metadata\_ops\_f Retrieves I/O mode for metadata read operations. @@ -695,19 +702,19 @@ Retrieves I/O mode for metadata read operations. Fine-tuning the Metadata Cache: -H5Fget_metadata_read_retries_info +H5Fget\_metadata\_read\_retries\_info Retrieves the collection of read retries for metadata items with checksum. -H5Pget_metadata_read_attempts +H5Pget\_metadata\_read\_attempts Retrieves the number of read attempts from a file access property list. -H5Pset_metadata_read_attempts +H5Pset\_metadata\_read\_attempts @@ -745,30 +752,30 @@ H5Trefresh Causes all buffers associated with a committed datatype to be cleared and immediately re-loaded with updated contents from disk storage. -H5Fget_intent +H5Fget\_intent Determines the read/write or read-only status of a file. Logging APIs: -H5Pset_mdc_log_options +H5Pset\_mdc\_log\_options Sets metadata cache logging options. -H5Pget_mdc_log_options +H5Pget\_mdc\_log\_options Gets metadata cache logging options. -H5Fstart_mdc_logging +H5Fstart\_mdc\_logging Starts logging metadata cache events if logging was previously enabled. -H5Fstop_mdc_logging +H5Fstop\_mdc\_logging Stops logging metadata cache events if logging was previously enabled and is currently ongoing. -H5Pget_mdc_logging_status +H5Pget\_mdc\_logging\_status @@ -777,31 +784,31 @@ Gets the current metadata cache logging status. File Space Management: -H5Fget_free_sections +H5Fget\_free\_sections Retrieves free-space section information for a file. -H5Fget_freespace +H5Fget\_freespace Returns the amount of free space in a file. -H5Fget_info2 +H5Fget\_info2 Returns global information for a file. -H5Pset_file_space +H5Pset\_file\_space Sets the file space management strategy and/or the free-space section threshold for an HDF5 file. -H5Pget_file_space +H5Pget\_file\_space @@ -819,66 +826,66 @@ Repacks HDF5 files with various options, including the ability to change the app Virtual Dataset or VDS: -H5Pset_virtual -h5pset_virtual_f +H5Pset\_virtual +h5pset\_virtual\_f Sets the mapping between virtual and source datasets. -H5Pget_virtual_count -h5pget_virtual_count_f +H5Pget\_virtual\_count +h5pget\_virtual\_count\_f Retrieves the number of mappings for the virtual dataset. -H5Pget_virtual_vspace -h5pget_virtual_vspace_f +H5Pget\_virtual\_vspace +h5pget\_virtual\_vspace\_f Retrieves a dataspace identifier for the selection within the virtual dataset used in the mapping. -H5Pget_virtual_srcspace -h5pget_virtual_srcspace_f +H5Pget\_virtual\_srcspace +h5pget\_virtual\_srcspace\_f Retrieves a dataspace identifier for the selection within the source dataset used in the mapping. -H5Pget_virtual_dsetname -h5pget_virtual_dsetname_f +H5Pget\_virtual\_dsetname +h5pget\_virtual\_dsetname\_f Retrieves the name of a source dataset used in the mapping. -H5Pget_virtual_filename -h5pget_virtual_filename_f +H5Pget\_virtual\_filename +h5pget\_virtual\_filename\_f Retrieves the filename of a source dataset used in the mapping. -H5Pset_virtual_printf_gap -h5pset_virtual_printf_gap_f +H5Pset\_virtual\_printf\_gap +h5pset\_virtual\_printf\_gap\_f Sets maximum number of missing source files and/or datasets with printf-style names when getting the extent of an unlimited virtual dataset. -H5Pget_virtual_printf_gap -h5pget_virtual_printf_gap_f +H5Pget\_virtual\_printf\_gap +h5pget\_virtual\_printf\_gap\_f Returns maximum number of missing source files and/or datasets with printf-style names when getting the extent for an unlimited virtual dataset. -H5Pset_virtual_view -h5pset_virtual_view_f +H5Pset\_virtual\_view +h5pset\_virtual\_view\_f Sets the view of the virtual dataset to include or exclude missing mapped elements. -H5Pget_virtual_view -h5pget_virtual_view_f +H5Pget\_virtual\_view +h5pget\_virtual\_view\_f Retrieves the view of a virtual dataset. Supporting Functions: -H5Sis_regular_hyperslab -h5sis_regular_hyperslab_f +H5Sis\_regular\_hyperslab +h5sis\_regular\_hyperslab\_f Determines whether a hyperslab selection is regular. -H5Sget_regular_hyperslab -h5sget_regular_hyperslab_f +H5Sget\_regular\_hyperslab +h5sget\_regular\_hyperslab\_f Retrieves a regular hyperslab selection. @@ -886,38 +893,38 @@ Retrieves a regular hyperslab selection. Modified Functions: The following pre-exising functions have been modified to understand virtual datasets. -H5Pset_layout -h5pset_layout_f +H5Pset\_layout +h5pset\_layout\_f Specifies the layout to be used for a dataset. -Virtual dataset, H5D_VIRTUAL, has been added to the list of layouts available through this function. +Virtual dataset, H5D\_VIRTUAL, has been added to the list of layouts available through this function. -H5Pget_layout -h5pget_layout_f +H5Pget\_layout +h5pget\_layout\_f Retrieves the layout in use for a dataset. -Virtual dataset, H5D_VIRTUAL, has been added to the list of layouts. +Virtual dataset, H5D\_VIRTUAL, has been added to the list of layouts. Partial Edge Chunks: -H5Pset_chunk_opts +H5Pset\_chunk\_opts Sets a partial edge chunk option in a dataset access property list. -H5Pget_chunk_opts +H5Pget\_chunk\_opts Retrieves partial edge chunk option setting from a dataset access property list. Relative Pathnames for External Links: -H5Pset_elink_prefix +H5Pset\_elink\_prefix These functions enable the user to specify the locations of external files. (These functions are not yet documented.) -H5Pget_elink_prefix +H5Pget\_elink\_prefix Property List Encoding and Decoding: @@ -952,25 +959,25 @@ H5PTcreate Takes a property list identifier to provide flexibility on creation properties. -H5PTcreate_fl has been removed. +H5PTcreate\_fl has been removed. -H5PTfree_vlen_buff +H5PTfree\_vlen\_buff -Replaces H5PTfree_vlen_readbuff. +Replaces H5PTfree\_vlen\_readbuff. New functions: Two accessor functions have been added. -H5PTget_dataset +H5PTget\_dataset Returns the identifier of the dataset associated a packet table. -H5PTget_type +H5PTget\_type Returns the identifier of the datatype used by a packet table. -H5PTis_varlen +H5PTis\_varlen Determines whether a type is variable-length. @@ -980,13 +987,13 @@ Overloaded constructor An overloaded constructor has been added. -FL_PacketTable +FL\_PacketTable -Takes a property list identifier to provide flexibility on creation properties.>/dd> +Takes a property list identifier to provide flexibility on creation properties. -H5PTfree_vlen_buff +H5PTfree\_vlen\_buff -Replaces H5PTfree_vlen_readbuff. +Replaces H5PTfree\_vlen\_readbuff. Accessor wrappers @@ -1004,11 +1011,11 @@ Other wrappers PacketTable::FreeBuff() -Replaces VL_PacketTable::FreeReadBuff(). +Replaces VL\_PacketTable::FreeReadBuff(). PacketTable::IsVariableLength() -Replaces VL_PacketTable::IsVariableLength(). +Replaces VL\_PacketTable::IsVariableLength(). Overloaded functions: @@ -1027,7 +1034,7 @@ Configure option: CMake option: -HDF5_BUILD_JAVA:BOOL=ON +HDF5\_BUILD\_JAVA:BOOL=ON Prior to the 1.10.x series, the HDF5 Java tools were built from an independent repository and were not as fully integrated with HDF5. were built from an independent repository and were not as fully integrated with HDF5. @@ -1058,23 +1065,23 @@ New versioned functions and associated compatibility macros Two functions and a struct have been converted to a versioned form in this release. Compatibility macros have been created for each. -H5Fget_info +H5Fget\_info -The original function is renamed to H5Fget_info1 and deprecated. +The original function is renamed to H5Fget\_info1 and deprecated. -A new version of the function, H5Fget_info2, is introduced. +A new version of the function, H5Fget\_info2, is introduced. -The compatiblity macro H5Fget_info is introduced. +The compatiblity macro H5Fget\_info is introduced. -H5F_info_t +H5F\_info\_t -This is the struct used by the H5Fget_info functions and macro. +This is the struct used by the H5Fget\_info functions and macro. -The original struct is renamed to H5F_info1_t and deprecated. +The original struct is renamed to H5F\_info1\_t and deprecated. -A new version of the struct, H5F_info2_t, is introduced. +A new version of the struct, H5F\_info2\_t, is introduced. -The compatiblity macro H5F_info_t is introduced. +The compatiblity macro H5F\_info\_t is introduced. H5Rdereference @@ -1084,26 +1091,26 @@ A new version of the function, H5Rdereference2, is introduced. The compatiblity macro H5Rdereference is introduced. -Autotools Configuration and Large File Support +### Autotools Configuration and Large File Support Autotools configuration has been extensively reworked and autotool's handling of large file support has been overhauled in this release. See the following sections in RELEASE.txt: -[Autotools Configuration Has Been Extensively Reworked](Autotools Configuration Has Been Extensively Reworked) -[LFS Changes](LFS Changes) -RELEASE.txt can be found in the release_docs/ subdirectory at the root level of the HDF5 code distribution. +* Autotools Configuration Has Been Extensively Reworked +* LFS Changes + +RELEASE.txt can be found in the release\_docs/ subdirectory at the root level of the HDF5 code distribution. -Compatibility Report and Comments -Compatibility report for Release 1.10.0 versus Release 1.8.16 +### Compatibility Report and Comments - See API Compatibility Reports for 1.10 for information regarding compatibility with previous releases. +[Compatibility report for Release 1.10.0 versus Release 1.8.16]() Comments regarding the report -In the C interface, the hid_t change from 32-bit to 64-bit was made in order to address a performance problem that arose when the library "ran out" of valid object identifiers to issue and thus needed to employ an expensive algorithm to find previously issued identifiers that could be re-issued. This problem is avoided by switching the size of the hid_t type to 64-bit integers instead of 32-bit integers in order to make the pool of available integers significantly larger. (H5E_major_t and H5E_minor_t are aliased to hid_t which is why they changed size as well). (An alternate solution to this problem was applied in release HDF5 1.8.5 but this is the cleaner/preferred solution and had to wait until 1.10.0 to be included). +In the C interface, the hid\_t change from 32-bit to 64-bit was made in order to address a performance problem that arose when the library "ran out" of valid object identifiers to issue and thus needed to employ an expensive algorithm to find previously issued identifiers that could be re-issued. This problem is avoided by switching the size of the hid\_t type to 64-bit integers instead of 32-bit integers in order to make the pool of available integers significantly larger. (H5E\_major\_t and H5E\_minor\_t are aliased to hid\_t which is why they changed size as well). (An alternate solution to this problem was applied in release HDF5 1.8.5 but this is the cleaner/preferred solution and had to wait until 1.10.0 to be included). -hbool_t will now be defined as a _Bool type when configure determines that it's available. +hbool\_t will now be defined as a \_Bool type when configure determines that it's available. -Public structs that have members of type hid_t or hbool_t are affected by the above changes accordingly. +Public structs that have members of type hid\_t or hbool\_t are affected by the above changes accordingly. -The H5Fget_info function was renamed due to the introduction of a newer version of the function which returns additional information. The H5Rdereference function was renamed due to the introduction of a newer version of the function which allows a data access property list to be passed in. Both changes are accompanied with compatibility macros, so while existing code will need to be recompiled in order to use the newer library version, these functions do not need to be changed in application code using them provided that the HDF5 API compatibility macros are configured appropriately. +The H5Fget\_info function was renamed due to the introduction of a newer version of the function which returns additional information. The H5Rdereference function was renamed due to the introduction of a newer version of the function which allows a data access property list to be passed in. Both changes are accompanied with compatibility macros, so while existing code will need to be recompiled in order to use the newer library version, these functions do not need to be changed in application code using them provided that the HDF5 API compatibility macros are configured appropriately. diff --git a/documentation/hdf5-docs/release_specifics/sw_changes_1.12.md b/documentation/hdf5-docs/release_specifics/sw_changes_1.12.md index f2584281..e1cba4a0 100644 --- a/documentation/hdf5-docs/release_specifics/sw_changes_1.12.md +++ b/documentation/hdf5-docs/release_specifics/sw_changes_1.12.md @@ -18,23 +18,24 @@ Note that bug fixes and performance enhancements in the C library are automatica The following information is included below. -* Release 1.12.2 versus Release 1.12.1 -* [Release 1.12.1 versus Release 1.12.0](#Release-1.12.1-versus-Release-1.12.0) -* [Release 1.12.0 versus Release 1.10.6](#Release-1.12.0-versus-Release-1.10.6) +* Release 1.12.2 versus Release 1.12.1 +* Release 1.12.1 versus Release 1.12.0 +* Release 1.12.0 versus Release 1.10.6 The release notes also list changes made to the library, but these notes tend to be more at a more detail-oriented level. The release notes may include new features, bugs fixed, supported configuration features, platforms on which the library has been tested, and known problems. The release note files are listed below and can be found at the top level of the HDF5 source code tree in the release_docs directory. -| | | -| ------------------------ | ------------------------------------------------------------ | -| Release Notes | Technical notes regarding the current release of the HDF5 library (RELEASE.txt in the source code) | -| HISTORY-1_12.txt | Release information for HDF5-1.12.0 through 1.12.1 | -| HISTORY-1_10_0-1_12_0.txt | Development history between the HDF5-1.10.0 and HDF5-1.12.0 releases | -| HISTORY-1_10.txt | Release information for all HDF5-1.10 releases | -| HISTORY-1_8_0-1_10_0.txt | Development history between the HDF5-1.8.0 and HDF5-1.10.0 releases | -| HISTORY-1_8.txt | Release information for HDF5-1.8.0 through 1.8.21 | -| HISTORY-1_0-1_8_0_rc3.txt | Technical notes starting with HDF5-1.0.0 and ending with HDF5-1.8.0-rc3 (the state of the code prior to the HDF5-1.8.0 release) | - -## Release 1.12.2 versus Release 1.12.1 +| | | +| ----------------------------- | ------------------------------------------------------------ | +| **Release Notes** | Technical notes regarding the current release of the HDF5 library (RELEASE.txt in the source code) | +| **HISTORY-1_12.txt** | Release information for HDF5-1.12.0 through 1.12.1 | +| **HISTORY-1_10_0-1_12_0.txt** | Development history between the HDF5-1.10.0 and HDF5-1.12.0 releases | +| **HISTORY-1_10.txt** | Release information for all HDF5-1.10 releases | +| **HISTORY-1_8_0-1_10_0.txt** | Development history between the HDF5-1.8.0 and HDF5-1.10.0 releases | +| **HISTORY-1_8.txt** | Release information for HDF5-1.8.0 through 1.8.21 | +| **HISTORY-1_0-1_8_0_rc3.txt** | Technical notes starting with HDF5-1.0.0 and ending with HDF5-1.8.0-rc3 (the state of the code prior to the HDF5-1.8.0 release) | + +

Release 1.12.2 versus Release 1.12.1

+ This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.12.1 to Release 1.12.2. ### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros @@ -47,7 +48,8 @@ H5LTset_attribute_ullong Create an unsigned long long attribute H5VLobject_is_native Determines whether an object ID represents a native VOL connector object See API Compatibility Reports for 1.12.2 for complete details. -## Release 1.12.1 versus Release 1.12.0 +

Release 1.12.1 versus Release 1.12.0

+ This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.12.0 to Release 1.12.1. The following are new C functions in this release: @@ -82,11 +84,12 @@ See the API Compatibility report for complete details. Compatibility Notes and Report See API Compatibility Reports for 1.12 for information regarding compatibility with previous releases. -## Release 1.12.0 versus Release 1.10.6 +

Release 1.12.1 versus Release 1.12.0

+ This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.10.6 to Release 1.12.0. ### New Features -For a description of the major new features that were introduced, please see New Features in HDF5 Release 1.12. +For a description of the major new features that were introduced, please see [New Features in HDF5 Release 1.12](new_features_1_12.md). ### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros From 14b9b457b13ca3bf6cbb2755e9c72fa693fb4591 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Wed, 20 Mar 2024 22:54:43 -0400 Subject: [PATCH 03/44] Added the Chunking in HDF5 page --- .../release_specifics/chunking_in_hdf5.md | 237 ++++++++++++++++++ .../images/chunking1and2.PNG | Bin 0 -> 160528 bytes .../images/chunking3and4.PNG | Bin 0 -> 332358 bytes .../release_specifics/images/chunking5.PNG | Bin 0 -> 108034 bytes .../release_specifics/images/chunking6.PNG | Bin 0 -> 246707 bytes .../release_specifics/images/chunking7.PNG | Bin 0 -> 161937 bytes .../release_specifics/images/chunking8.PNG | Bin 0 -> 4090 bytes .../release_specific_info.md | 4 +- 8 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 documentation/hdf5-docs/release_specifics/chunking_in_hdf5.md create mode 100644 documentation/hdf5-docs/release_specifics/images/chunking1and2.PNG create mode 100644 documentation/hdf5-docs/release_specifics/images/chunking3and4.PNG create mode 100644 documentation/hdf5-docs/release_specifics/images/chunking5.PNG create mode 100644 documentation/hdf5-docs/release_specifics/images/chunking6.PNG create mode 100644 documentation/hdf5-docs/release_specifics/images/chunking7.PNG create mode 100644 documentation/hdf5-docs/release_specifics/images/chunking8.PNG diff --git a/documentation/hdf5-docs/release_specifics/chunking_in_hdf5.md b/documentation/hdf5-docs/release_specifics/chunking_in_hdf5.md new file mode 100644 index 00000000..98865b0d --- /dev/null +++ b/documentation/hdf5-docs/release_specifics/chunking_in_hdf5.md @@ -0,0 +1,237 @@ +--- +title: Chunking in HDF5 +redirect_from: + - display/HDF5/Chunking+in+HDF5 +--- + +# Chunking in HDF5 + +## Introduction + +Datasets in HDF5 not only provide a convenient, structured, and self-describing way to store data, but are also designed to do so with good performance. In order to maximize performance, the HDF5 library provides ways to specify how the data is stored on disk, how it is accessed, and how it should be held in memory. + +## What are Chunks? +Datasets in HDF5 can represent arrays with any number of dimensions (up to 32). However, in the file this dataset must be stored as part of the 1-dimensional stream of data that is the low-level file. The way in which the multidimensional dataset is mapped to the serial file is called the layout. The most obvious way to accomplish this is to simply flatten the dataset in a way similar to how arrays are stored in memory, serializing the entire dataset into a monolithic block on disk, which maps directly to a memory buffer the size of the dataset. This is called a contiguous layout. + +An alternative to the contiguous layout is the chunked layout. Whereas contiguous datasets are stored in a single block in the file, chunked datasets are split into multiple chunks which are all stored separately in the file. The chunks can be stored in any order and any position within the HDF5 file. Chunks can then be read and written individually, improving performance when operating on a subset of the dataset. + +The API functions used to read and write chunked datasets are exactly the same functions used to read and write contiguous datasets. The only difference is a single call to set up the layout on a property list before the dataset is created. In this way, a program can switch between using chunked and contiguous datasets by simply altering that call. Example 1, below, creates a dataset with a size of 12x12 and a chunk size of 4x4. The example could be changed to create a contiguous dataset instead by simply commenting out the call to H5Pset\_chunk and changing dcpl\_id in the H5Dcreate call to H5P\_DEFAULT. + +Example 1: Creating a chunked dataset + +~~~ +#include "hdf5.h" +#define FILENAME "file.h5" +#define DATASET "dataset" + +int main() { + + hid_t file_id, dset_id, space_id, dcpl_id; + hsize_t chunk_dims[2] = {4, 4}; + hsize_t dset_dims[2] = {12, 12}; + herr_t status; + int i, j; + int buffer[12][12]; + + /* Create the file */ + file_id = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); + + /* Create a dataset creation property list and set it to use chunking */ + dcpl_id = H5Pcreate(H5P_DATASET_CREATE); + status = H5Pset_chunk(dcpl_id, 2, chunk_dims); + + /* Create the dataspace and the chunked dataset */ + space_id = H5Screate_simple(2, dset_dims, NULL); + dset_id = H5Dcreate(file_id, DATASET, H5T_STD_I32BE, space_id, H5P_DEFAULT, dcpl_id, H5P_DEFAULT); + + /* Initialize dataset */ + for (i = 0; i < 12; i++) + for (j = 0; j < 12; j++) + buffer[i][j] = i + j + 1; + + /* Write to the dataset */ + status = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer); + + /* Close */ + status = H5Dclose(dset_id); + status = H5Sclose(space_id); + status = H5Pclose(dcpl_id); + status = H5Fclose(file_id); +} +~~~ + +The chunks of a chunked dataset are split along logical boundaries in the dataset's representation as an array, not along boundaries in the serialized form. Suppose a dataset has a chunk size of 2x2. In this case, the first chunk would go from (0,0) to (2,2), the second from (0,2) to (2,4), and so on. By selecting the chunk size carefully, it is possible to fine tune I/O to maximize performance for any access pattern. Chunking is also required to use advanced features such as compression and dataset resizing. + +![Contiguous and chunked datasets](chunking1and2.png) + +## Data Storage Order +To understand the effects of chunking on I/O performance it is necessary to understand the order in which data is actually stored on disk. When using the C interface, data elements are stored in "row-major" order, meaning that, for a 2- dimensional dataset, rows of data are stored in-order on the disk. This is equivalent to the storage order of C arrays in memory. + +Suppose we have a 10x10 contiguous dataset B. The first element stored on disk is B[0][0], the second B[0][1], the eleventh B[1][0], and so on. If we want to read the elements from B[2][3] to B[2][7], we have to read the elements in the 24th, 25th, 26th, 27th, and 28th positions. Since all of these positions are contiguous, or next to each other, this can be done in a single read operation: read 5 elements starting at the 24th position. This operation is illustrated in figure 3: the pink cells represent elements to be read and the solid line represents a read operation. Now suppose we want to read the elements in the column from B[3][2] to B[7][2]. In this case we must read the elements in the 33rd, 43rd, 53rd, 63rd, and 73rd positions. Since these positions are not contiguous, this must be done in 5 separate read operations. This operation is illustrated in figure 4: the solid lines again represent read operations, and the dotted lines represent seek operations. An alternative would be to perform a single large read operation , in this case 41 elements starting at the 33rd position. This is called a sieve buffer and is supported by HDF5 for contiguous datasets, but not for chunked datasets. By setting the chunk sizes correctly, it is possible to greatly exceed the performance of the sieve buffer scheme. + + +![Reading part of row and reading part of column from a contiguous dataset](chunking3and4.pgn) + +Likewise, in higher dimensions, the last dimension specified is the fastest changing on disk. So if we have a four dimensional dataset A, then the first element on disk would be A[0][0][0][0], the second A[0][0][0][1], the third A[0][0][0][2], and so on. + +## Chunking and Partial I/O +The issues outlined above regarding data storage order help to illustrate one of the major benefits of dataset chunking, its ability to improve the performance of partial I/O. Partial I/O is an I/O operation (read or write) which operates on only one part of the dataset. To maximize the performance of partial I/O, the data elements selected for I/O must be contiguous on disk. As we saw above, with a contiguous dataset, this means that the selection must always equal the extent in all but the slowest changing dimension, unless the selection in the slowest changing dimension is a single element. With a 2-d dataset in C, this means that the selection must be as wide as the entire dataset unless only a single row is selected. With a 3-d dataset, this means that the selection must be as wide and as deep as the entire dataset, unless only a single row is selected, in which case it must still be as deep as the entire dataset, unless only a single column is also selected. + +Chunking allows the user to modify the conditions for maximum performance by changing the regions in the dataset which are contiguous. For example, reading a 20x20 selection in a contiguous dataset with a width greater than 20 would require 20 separate and non-contiguous read operations. If the same operation were performed on a dataset that was created with a chunk size of 20x20, the operation would require only a single read operation. In general, if your selections are always the same size (or multiples of the same size), and start at multiples of that size, then the chunk size should be set to the selection size, or an integer divisor of it. This recommendation is subject to the guidelines in the pitfalls section; specifically, it should not be too small or too large. + +Using this strategy, we can greatly improve the performance of the operation shown in figure 4. If we create the dataset with a chunk size of 10x1, each column of the dataset will be stored separately and contiguously. The read of a partial column can then be done is a single operation. This is illustrated in figure 5, and the code to implement a similar operation is shown in example 2. For simplicity, example 2 implements writing to this dataset instead of reading from it. + +![Reading part of a column from a chunked dataset](chunking5.png) + + +Example 2: Writing part of a column to a chunked dataset + +~~~ +#include "hdf5.h" +#define FILENAME "file.h5" +#define DATASET "dataset" + +int main() { + + hid\_t file\_id, dset\_id, fspace\_id, mspace\_id, dcpl\_id; + hsize\_t chunk\_dims[2] = {10, 1}; + hsize\_t dset\_dims[2] = {10, 10}; + hsize\_t mem\_dims[1] = {5}; + hsize\_t start[2] = {3, 2}; + hsize\_t count[2] = {5, 1}; + herr\_t status; + int buffer[5], i; + + /* Create the file */ + file\_id = H5Fcreate(FILENAME, H5F\_ACC\_TRUNC, H5P\_DEFAULT, H5P\_DEFAULT); + + /* Create a dataset creation property list to use chunking with a chunk size of 10x1 */ + dcpl\_id = H5Pcreate(H5P\_DATASET\_CREATE); + + status = H5Pset\_chunk(dcpl\_id, 2, chunk\_dims); + + /* Create the dataspace and the chunked dataset */ + fspace\_id = H5Screate\_simple(2, dset\_dims, NULL); + + dset\_id = H5Dcreate(file\_id, DATASET, H5T\_STD\_I32BE, fspace\_id, H5P\_DEFAULT, dcpl\_id, H5P\_DEFAULT); + + /* Select the elements from 3, 2 to 7, 2 */ + status = H5Sselect\_hyperslab(fspace\_id, H5S\_SELECT\_SET, start, NULL, count, NULL); + + /* Create the memory dataspace */ + mspace\_id = H5Screate\_simple(1, mem\_dims, NULL); + + /* Initialize dataset */ + for (i = 0; i < 5; i++) + buffer[i] = i+1; + + /* Write to the dataset */ + status = H5Dwrite(dset\_id, H5T\_NATIVE\_INT, mspace\_id, fspace\_id, H5P\_DEFAULT, buffer); + + /* Close */ + status = H5Dclose(dset\_id); + status = H5Sclose(fspace\_id); + status = H5Sclose(mspace\_id); + status = H5Pclose(dcpl\_id); + status = H5Fclose(file\_id); +} +~~~ + +## Chunk Caching +Another major feature of the dataset chunking scheme is the chunk cache. As it sounds, this is a cache of the chunks in the dataset. This cache can greatly improve performance whenever the same chunks are read from or written to multiple times, by preventing the library from having to read from and write to disk multiple times. However, the current implementation of the chunk cache does not adjust its parameters automatically, and therefore the parameters must be adjusted manually to achieve optimal performance. In some rare cases it may be best to completely disable the chunk caching scheme. Each open dataset has its own chunk cache, which is separate from the caches for all other open datasets. + +When a selection is read from a chunked dataset, the chunks containing the selection are first read into the cache, and then the selected parts of those chunks are copied into the user's buffer. The cached chunks stay in the cache until they are evicted, which typically occurs because more space is needed in the cache for new chunks, but they can also be evicted if hash values collide (more on this later). Once the chunk is evicted it is written to disk if necessary and freed from memory. + +This process is illustrated in figures 6 and 7. In figure 6, the application requests a row of values, and the library responds by bringing the chunks containing that row into cache, and retrieving the values from cache. In figure 7, the application requests a different row that is covered by the same chunks, and the library retrieves the values directly from cache without touching the disk. + +![Reading a row from a chunked dataset with the chunk cache enabled](chunking6.png) + +![Reading a row from a chunked dataset with the chunks already cached](chunking7.png) + +In order to allow the chunks to be looked up quickly in cache, each chunk is assigned a unique hash value that is used to look up the chunk. The cache contains a simple array of pointers to chunks, which is called a hash table. A chunk's hash value is simply the index into the hash table of the pointer to that chunk. While the pointer at this location might instead point to a different chunk or to nothing at all, no other locations in the hash table can contain a pointer to the chunk in question. Therefore, the library only has to check this one location in the hash table to tell if a chunk is in cache or not. This also means that if two or more chunks share the same hash value, then only one of those chunks can be in the cache at the same time. When a chunk is brought into cache and another chunk with the same hash value is already in cache, the second chunk must be evicted first. Therefore it is very important to make sure that the size of the hash table, also called the nslots parameter in H5Pset\_cache and H5Pset\_chunk\_cache, is large enough to minimize the number of hash value collisions. + +Prior to 1.10, the library determines the hash value for a chunk by assigning a unique index that is a linear index into a hypothetical array of chunks. That is, the upper-left chunk has an index of 0, the one to the right of that has an index of 1, and so on. + +For example, the algorithm prior to 1.10 simply incremented the index by one along the fastest growing dimension. The diagram below illustrates the indices for a 5 x 3 chunk prior to HDF5 1.10: + +0 1 2 +3 4 5 +6 7 8 +9 10 11 +12 13 14 + +As of HDF5 1.10, the library uses a more complicated way to determine the chunk index. Each dimension gets a fixed number of bits for the number of chunks in that dimension. When creating the dataset, the library first determines the number of bits needed to encode the number of chunks in each dimension individually by using the log2 function. It then partitions the chunk index into bitfields, one for each dimension, where the size of each bitfield is as computed above. The fastest changing dimension is the least significant bit. To compute the chunk index for an individual chunk, for each dimension, the coordinates of that chunk in an array of chunks is placed into the corresponding bitfield. The 5 x 3 chunk example above needs 5 bits for its indices (as shown below, the 3 bits in blue are for the row, and the 2 bits in green are for the column): + +0 0 0 0 0 + Row Column + +Therefore, the indices for the 5 x 3 chunks become like this: + +0 1 2 +4 5 6 +8 9 10 +12 13 14 +16 17 18 + +This index is then divided by the size of the hash table, nslots, and the remainder, or modulus, is the hash value. Because this scheme can result in regularly spaced indices being used frequently, it is important that nslots be a prime number to minimize the chance of collisions. In general, nslots should probably be set to a number approximately 100 times the number of chunks that can fit in nbytes bytes, unless memory is extremely limited. There is of course no advantage in setting nslots to a number larger than the total number of chunks in the dataset. + +The w0 parameter affects how the library decides which chunk to evict when it needs room in the cache. If w0 is set to 0, then the library will always evict the least recently used chunk in cache. If w0 is set to 1, the library will always evict the least recently used chunk which has been fully read or written, and if none have been fully read or written, it will evict the least recently used chunk. If w0 is between 0 and 1, the behavior will be a blend of the two. Therefore, if the application will access the same data more than once, w0 should be set closer to 0, and if the application does not, w0 should be set closer to 1. + +It is important to remember that chunk caching will only give a benefit when reading or writing the same chunk more than once. If, for example, an application is reading an entire dataset, with only whole chunks selected for each operation, then chunk caching will not help performance, and it may be preferable to completely disable the chunk cache in order to save memory. It may also be advantageous to disable the chunk cache when writing small amounts to many different chunks, if memory is not large enough to hold all those chunks in cache at once. + +## I/O Filters and Compression + +Dataset chunking also enables the use of I/O filters, including compression. The filters are applied to each chunk individually, and the entire chunk is processed at once. The filter must be applied every time the chunk is loaded into cache, and every time the chunk is flushed to disk. These facts all make choosing the proper settings for the chunk cache and chunk size even more critical for the performance of filtered datasets. + +Because the entire chunk must be filtered every time disk I/O occurs, it is no longer a viable option to disable the chunk cache when writing small amounts of data to many different chunks. To achieve acceptable performance, it is critical to minimize the chance that a chunk will be flushed from cache before it is completely read or written. This can be done by increasing the size of the chunk cache, adjusting the size of the chunks, or adjusting I/O patterns. + +## Chunk Maximum Limits + +Chunks have some maximum limits. They are: + +* The maximum number of elements in a chunk is 232-1 which is equal to 4,294,967,295. +* The maximum size for any chunk is 4GB. +* The size of a chunk cannot exceed the size of a fixed-size dataset. For example, a dataset consisting of a 5x4 fixed-size array cannot be defined with 10x10 chunks. + +For more information, see the entry for H5P\_SET\_CHUNK in the HDF5 Reference Manual. + +## Pitfalls + +Inappropriate chunk size and cache settings can dramatically reduce performance. There are a number of ways this can happen. Some of the more common issues include: + +* Chunks are too small +There is a certain amount of overhead associated with finding chunks. When chunks are made smaller, there are more of them in the dataset. When performing I/O on a dataset, if there are many chunks in the selection, it will take extra time to look up each chunk. In addition, since the chunks are stored independently, more chunks results in more I/O operations, further compounding the issue. The extra metadata needed to locate the chunks also causes the file size to increase as chunks are made smaller. Making chunks larger results in fewer chunk lookups, smaller file size, and fewer I/O operations in most cases. + +* Chunks are too large +It may be tempting to simply set the chunk size to be the same as the dataset size in order to enable compression on a contiguous dataset. However, this can have unintended consequences. Because the entire chunk must be read from disk and decompressed before performing any operations, this will impose a great performance penalty when operating on a small subset of the dataset if the cache is not large enough to hold the one-chunk dataset. In addition, if the dataset is large enough, since the entire chunk must be held in memory while compressing and decompressing, the operation could cause the operating system to page memory to disk, slowing down the entire system. + +* Cache is not big enough +Similarly, if the chunk cache is not set to a large enough size for the chunk size and access pattern, poor performance will result. In general, the chunk cache should be large enough to fit all of the chunks that contain part of a hyperslab selection used to read or write. When the chunk cache is not large enough, all of the chunks in the selection will be read into cache, written to disk (if writing), and evicted. If the application then revisits the same chunks, they will have to be read and possibly written again, whereas if the cache were large enough they would only have to be read (and possibly written) once. However, if selections for I/O always coincide with chunk boundaries, this does not matter as much, as there is no wasted I/O and the application is unlikely to revisit the same chunks soon after. + +If the total size of the chunks involved in a selection is too big to practically fit into memory, and neither the chunk nor the selection can be resized or reshaped, it may be better to disable the chunk cache. Whether this is better depends on the storage order of the selected elements. It will also make little difference if the dataset is filtered, as entire chunks must be brought into memory anyways in that case. When the chunk cache is disabled and there are no filters, all I/O is done directly to and from the disk. If the selection is mostly along the fastest changing dimension (i.e. rows), then the data will be more contiguous on disk, and direct I/O will be more efficient than reading entire chunks, and hence the cache should be disabled. If however the selection is mostly along the slowest changing dimension (columns), then the data will not be contiguous on disk, and direct I/O will involve a large number of small operations, and it will probably be more efficient to just operate on the entire chunk, therefore the cache should be set large enough to hold at least 1 chunk. To disable the chunk cache, either nbytes or nslots should be set to 0. + +* Improper hash table size +Because only one chunk can be present in each slot of the hash table, it is possible for an improperly set hash table size (nslots) to severely impact performance. For example, if there are 100 columns of chunks in a dataset, and the hash table size is set to 100, then all the chunks in each row will have the same hash value. Attempting to access a row of elements will result in each chunk being brought into cache and then evicted to allow the next one to occupy its slot in the hash table, even if the chunk cache is large enough, in terms of nbytes, to hold all of them. Similar situations can arise when nslots is a factor or multiple of the number of rows of chunks, or equivalent situations in higher dimensions. + +Luckily, because each slot in the hash table only occupies the size of the pointer for the system, usually 4 or 8 bytes, there is little reason to keep nslots small. Again, a general rule is that nslots should be set to a prime number at least 100 times the number of chunks that can fit in nbytes, or simply set to the number of chunks in the dataset. + +## Additional Resources + +The slide set “HDF5 Advanced Topics: Chunking in HDF5” (PDF), a tutorial from HDF and HDF-EOS Workshop XIII (2009) provides additional HDF5 chunking use cases and examples. + +The page HDF5 Examples lists many code examples that are regularly tested with the HDF5 library. Several illustrate the use of chunking in HDF5, particularly “Read/Write Chunked Dataset” and any examples demonstrating filters. + +“Dataset Chunking Issues” provides additional information regarding chunking that has not yet been incorporated into this document. + +Directions for Future Development +As seen above, the HDF5 chunk cache currently requires careful control of the parameters in order to achieve optimal performance. In the future, we plan to improve the chunk cache to be more foolproof in many ways, and deliver acceptable performance in most cases even when no thought is given to the chunking parameters. + +One way to make the chunk cache more user-friendly is to automatically resize the chunk cache as needed for each operation. The cache should be able to detect when the cache should be skipped or when it needs to be enlarged based on the pattern of I/O operations. At a minimum, it should be able to detect when the cache would severely hurt performance for a single operation and disable the cache for that operation. This would of course be optional. + +Another way is to allow chaining of entries in the hash table. This would make the hash table size much less of an issue, as chunks could share the same hash value by making a linked list. + +Finally, it may even be desirable to set some reasonable default chunk size based on the dataset size and possibly some other information on the intended access pattern. This would probably be a high-level routine. + +Other features planned for chunking include new index methods (besides b-trees), disabling filters for chunks that are partially over the edge of a dataset, only storing the used portions of these edge chunks, and allowing multiple reader processes to read the same dataset as a single writer process writes to it. + + diff --git a/documentation/hdf5-docs/release_specifics/images/chunking1and2.PNG b/documentation/hdf5-docs/release_specifics/images/chunking1and2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d0828675a3b6d2ce2bb0dca5dfe88195d0f6e621 GIT binary patch literal 160528 zcmeFadt8(C|NpO%VyR5CL<3o7O1(8fNf8}eW@UN8wBBd}Q%T88P7@fggNiy0fy@IS zuw|uW6idlCZ^8sr22)W7a@fXTi-S8bU>h6T@Ao3OA-&~W zdt>6_$(%p;>@52F?!?#9&-}9H<6DHEJ`$NK$TsQlFPdzEv6t}-R+Wyh5Oo*HCdXKhbwTYre&OvV&4i5eax*wotcN zRL8nl>$38V7vdtI8#gE;t)?7_F{g{CFIV@syYi_+_i~9#h7C0&c0S)S)aA-IR9QS!(Ft znr7=iP^Gna7L%hTrv(D{3PMFt1+5~xqO77trc1Ap7hhu6mp)p0+1)BP7g`4;3hVjs zsN`+yYTPNp{RLUAUzZr`B2;@~8N*^GeJIe{O|G*>=|p7HRdQBvSDw=EuB)|>H^lzY z_;5g-;F75Mft&p!_gBh0P`%guidtRZz|=lXzdBnp9|3(a$UzUT=%?)AO34~LyR~$ zY=QWB!W8BdcbdY7lNmC2C4GI(thg5U<5JPyJY_{~e(M2Vf(L!qtg=X}oOomSThr_M z)v8l1UUX~sSdR?PjQJT}89o`l87nk}wZAEUXYEZcZVld3UE#W#JTokaoDOKd zx!s&=?dM#ynmJb8esO7A%<{p;&|G;Mi7}K!GB^b!>ArXN|8g)YcSY+S#%85LK#E9g zZr%{bH?=C4hmig2BL}WI6C+FHv((EHhtjQm*TWgNY)Aff-ZfXIAjMCP`;_XElP!}rO<_xnAWeV)3Qs;kwB>7{o=oN=pFYmAzQ!FxoT=_$c)@idD3 zKO_}`#xv1RH(hbWE!mFL?d(R7fkI!aXL;cM%9LLfhVBMc^CpqMuoakF`H9*H&E;=aMlbf?NC!zaN z!%a^P!GG{_T245Kb z|A_ZD4WX}OtV`bKi!* zT=lDHQOpkF&Ec20r6KAjb%m?$dCEB5I9`UYrpjF5UWv6Y+19>7tx#v!$qTEmd4*!l z7bgxTYN~YJqN*S=!BbZzr0C9fU0F5d98 zSA55n$?q9p4|~v3g1e@%HHW+O47L8E#E>G%;QkiJ)8#by^0X;kx8`%R`8lgyaCd61 zibGZe$K3y{!B3g(!*m+QqgvayHU#hCCb3H9chYNv_eeI=i|0RLYP@4Fv{;L9(WDOE zjp37~H}q>mi#@zodk1(2dXv4wq{+oe#?an1@TrywyFvqRnd|A1w6pazb^ae>8H3sp zo~7Is*X)nuy%dYaDkJ(JSN7w=4(1;X0VFzVJ?46jxx-T_DOLIP`dQ67rG(39i&w7q zqIazg3!q)-gfUoXyx2cj$fxIb4BVH~h8j3*e!G4S-gtvHr_vRFbkjDHsY%4HC+LJ- zPI$us7=$!BG<#0HzrMw|H&gq8`ynpLR6xqACz^V@R^f+k(Wvan_z>GSqsoUtln zb^m?2G&w$}ILDad$By?P3-v-{P?B)i-YrA|f~$^p!jqjIA5MHHICjG89~UL+7Wl>J zt65|CRuf;X`b~R@XBhj^?j6KmWkU%tiTas_YWe21^d)}gUrH{|pZmP5q`j$=ZxLIU z4;wjFW4|v`=i4B$Jd$j%YH(JKRh1F_kzqF*y&T7)Qd`1@lKF<@riR8deS*(bYZ7M> z?ghUkh7rzl#;Mj&Ts*4tPn+<(B78Kt!*YZEo#}$)#6u^=1jP%A7Zno;iy|V)Usz_8 zZc=;~%=0(-3%hLnxWzeBSzMo?Zap)&-0<*fv!Xat8AcyiZdlW}ukf2rL-|$OEIdA6 zOY*?~O4nscvUvl)MZ~+%7V^z~M*g&~3}U`zpup3Tr07`~FOVi}vIxY1X_Tg2>Fd*j zqHp%!=Q3jQf7VvH5%~XlbcRdoG<)|S@uICHudlz59S@WG>_x+Pe}ZCN^43HB)XSdVWCQ9ph>S{wyrtXQ5bN!FCagHAigYvH?D_ z{maUdO|yALq-a=HkBdhd)C^3(%a1E}h5DUbR}$o_YD?ghB+3OMdFqPrka?wvJ@E{fhT8t>LAwLOL|xtZ zATn*nEoZ->ZVGi?@lbc3GVF9*c~7t|#@=v2VTNe544zl5DTZ&;a%K>w@y0Xl$$GE2 z3&Zwtr(YRb%#(f{xS)o9(wO9TIR1L@o;07>3ur4aGQ?`~PZu+>3n&O|-G>$lAH6_U z+ZvmOHC^eJRJSPup1$*bS!Jm?Ezl*C%{wi@J!P}AV;*cR@C<*q?2bf*SLr)hf5L@VYW_`_wiM2 zhTlIW`y0?!o0Kl?$)?n2hRL+Dhi(!>wQ<{axW;g`jT#D#T1QIh9E$p5OKQ)FqMG16 zUYd<@7YwiSekt7)7eSxF>&}0fT*ib2&)GKrVeR0(x))|HPaO-kKO>*c^qP(!o@wtc ze0L9;mOw*m+-^3fb)Wt@@(ZQ=LjATLz8o~YI(qB9ao=7JVrt+j8Wx}Jndot%Gx}Q6 z)lZ}og=@q!bbSG>>G{-9a|9~G^`Rq2<5$Va_GizjKe zFGzQyz^l5z3)PM#+kQNJ+``_3&;{v7;N4=zez8D|C)^u1g?FNJ=#X=0vHP<>^m=ne zYu18_Eej{w-tFhoO`*jW)FZX1lgi)|IT2>mc3yMe0q+Md6nzao0(#GF2Pc-c&8Xc4 zzyCq-n3=T$&bXMdhvB2~r0{ai&-_sKjo3*2ytVLkDsAu9oqumjK8XtN2w!<%7y24w zaPT#}SHt@qfERLy2@ZSDe@iR#ec|H4yM5yNZguo<#j4;j@X_+UsPJ-QpZOurE3;b4 zZ@y%^c<^q?CG(e@?ZJ7VCasR9&xEhB_}QzDz2_@MzxSj#n#$2sj#2gZq39S@jtTJD zS<|srIo2x2w!*QkaO?mbn{~%#ee^KqI9H9HW*z6Mk#n=-2<*69;kaAjxUuB82k5v5 zh~4dV+^$9UcpW#E95|?$%YuA?G&w#RkWJl^uUZ4K|45FUQA1CI zY&rxSD`O~-ZjjBJA^N6`69o3@S$WD8={TUxp?Isc-AgYRY$rN51yr718+ml1<+Yk6h-32qXLE}CcNs-MH6c%farshJf z*KmKQ}AD~mCNmyp1UHtunu931X53) zxFWDJy!5jLHIx6^5LeRB-&jM8P3T%nUS4h);Bwa9E~sB#OOdWxS?A^?5H|ps)ie!% zw9Qx_#|FsAa~+~5l(>)4NQwEeY?0>F%7Da&4ZF$L#{*aye33NtBk9}*g7&)6Z9BjW zk^8hMA5Rhm(7QK>kqH`U5AbJwgrBtE|AHo?1us$4Dsj9mZ%QXJ&F?#Xg0oLr&NS&b z8)L;{!?|kRW27Jgbw8WMap237QySK7$_7c;<%P5Ilo4+L$ zPwQB2La1HW>CGE5%j2OPHP?JY7HyWYdXih+cmU?*noqSh+ej7f*k(fo06OiEpYMO% zAvH@FwUe2ER3-xk5@e?tLahqF-W_(90k4~lvgu5b|0z2m(4sr)#ZJ>+f864(KI0N| zfg=6)Wp`-HzO#kd7)Xauh1}3I|JeLVZ&CeOq?bz!Qqpe1WO8BoqkXxhl3`T?Fj8b# zWr}|Ii6M2uFXMkKJwA5m-@r-kFKuoOFH!od{eUafHw2za@(Pl5xWp9+dXt?$rL|fH z3ppzI=>R?7Iy?YGoop!iLuStw0?Sr?xOcY3{Lex z)$r{t`JStjJ2ll9{@0FHGx{R?;B+tDr%1Gf1k&qI@-)y;ZAHBP`#sX6%tPgym59U% zU+{=3|9(M-__-*t<(oCG59|BL3d+sdt!_la9|(W zqEN`_e-XGKu4CXT!fu_tR+r*cLwbLf|In@FtA_w)xOr!1aTNVgbdO)J?BVi`+>fxKd$21L-^hGuP z3Qo9G(lqe7$RheVwkM#lJ()ATJ$Iv_>oqjguYES$^W53ckwTCl?z(8RnO$9qSH&wr?zH9XlL=t zV1W)g0mv)19!8uMG#f51j=Mm2@knhsvzUTbIsV_6*wj`x{VGfSmV7*Fc8rv*YCMxF zsa!-{8^%+r%UuWkiXsbhD4L3Ocj$$!|2q5QzdCmJ-)0f_Cp;)%FDdWc<(0*Zuw=FM z&jb1u<5~3Y>PnArVB!_BsY%M+{SrVIIc!slvYtQZa~LnY4J#h~(baJ(fXx&w=P?EX znK6R{$5s<|CRlVFQhE1h+`ECN1Xp8jy_LI;%NWR0N}5x=+PtZT_CgF0-L>sFxl@%f2}h-vP7n2)f>4 zpLj8PyXZ0XS{Zc3zMrv;*yIr+avPfCFzOX!t~$dfj+?smD8S9%ZH|ios7S6nvY1B| z#p)lZKP3my+NW7>E--6YBw9i}h3#W%S7S>sY$=1tROp&$!o_im>phG&R+r4*7psxx zzoYz=tXgBj6QC6_5UGO)`;;{MJc=kt#eQ4wAf$-yW?~d$3ofn2Mpuc`dB9)K?fr9G zRWxmu1Wj^A<{yRp;YSV5M9sl23dhs}q#^w#MM|j{2M9duAag~G!GebQWaF)-Y2>Vr z%4^qm34KJ_#QyWRuDqMZN>`qD4mudbD|38FEz;zJy=;A%5<^hYhB+6Y{5r7MI*F@d)*Ob$)7XL!!Mt3|aR&}($-{*kKT~=WXauC_ZAb%Ur?m1y(^sdP?VZFnLrVS#* zHWR#bEkblGz}mAJwI|-`A;4}HBdNP~Vd>XHsyKd+p9c0gJfC2Ov9kfurLM))_VL%n z!O>3bitEnjp}X>iA4Q17168hMLi#-fIg-y*7xvM5L-ARX1+dwn^=y-zTUgxjT~{sH z(zn0+Qf@uZ&^3;x-5hjywrdDgHp(Bn2JgRP{*Zb1W6wICVb4OEHYL#Phg*e)#D7Vp zK7B?Q;d5#K{TV_0+TSrpMAoG*6xWdo6HU;qlztkSe}-SW{tL$ImPXhUbgTB+78Y@q z#H?s)$T(v3ewj?$@*~$HtalB6@G7@X5{(!xY^R#3yFM)-J8nF5{Xm5>9Ya)O^h;we zTn{Xby)d#$0-Qy4E8RpN@WVEA_G2A7Z2(V>z(+WFrboaAjdcCEzg}Zk0CRb8 zTx*Q(_6IvsfP*xv!rG)Wzc;3#0uTdYGAWooaK8b^&?I%`0MFQ)>`SF-@26iMKPglk zlK7||!TCjh=9hH;VobW@Q@<>95Y8B{4WBJ6+m$*wzo`91bOe{qKCQ1uX#3z2ST+8; z-HjYJ?J5>jiO_$nN=JJh-s74V_F4fWv*ySIMO!42CmY#*94Lihqd*Pq@fpgU*e>r1 zw&Tgqg5h>M$)iK{o9t4lFVRd;70DI5`c9Vma)RN=hcTq7CLH{QB%v-SOsGfGtctZ79sGa}H=T#G`JA}s7UvbJKVcx6 zS#`djYT}wuZG*o!V2_xYfqx9}urS2*fd9MHAuISvx#Q znfz4fi&T2$3!Xyl*rbQB$E4GjoL_igMh0O2eNtxj6V=yl@=OpFNCvig>K zbGcpwZaIVfNKLX|E^@_PEl$f>#aTAKlCZi~;PbpZK&8+{EZJy9>3Ygn$#rYN>j zX+_nAgME{Quu=h?N;CMuJqHc|kjqeG3<k8zewd)0xMxV1JF$8GMz~Y6b`t9aT)sF82 z2hR?V9}v*uRDu*StXIeHrfFqMcx`5dZvd77_C4(uUbI7LGrn9WOu7SD>I$I50GR~p zb6YN#Iov}z@jarz0>MeO-`JTh!uBcdY1&i|-;!E(^yrM_oR=jOyd+;1@|MLKUilQ;%(h}N+1cK_|Y zZ67Z1ZJ$qUe1JfR9Qt6Bu3#cQU-oEn1XZvf!v8{EMkW?G7o4aqtJS?hY80SkyDM!L zfO&zMln7dAN#Cvc<@lw3LB2>brNq5&tXQp>)Sd?nA5blpa*QDR6msm#clw#T^29P? z4G81f8qd61J8+~&@#STAoik;EZUQgXIM}Nnq5OPm(g28M`{8r#ekmE_72B{SaG2{;>_Bb0L+ngJb<>dq~p7_;lKV0d{0@tPo(z4dS8g#w?z3e zik43Q)f~5f;C`T*2Doq7;ppd`&F@U%RkOsQJ8CAcfylCWI*vd%)^|++-mgGasANo3?r^QFZ{59H*F^ zk2Fi)P8HhRd!S8|k9~z~m!>Hn?o>%I+(cAC!0Cd7xf)Ws$Am0 zC8L$AJ(vRez$&78EXs24S7e6O>n+;1e;0m^@xJj}$o?A!s(fc^c1(umOyOkLxE3t7 zYt@Lq?s(A2>O5v6Vh{NsxK%4cA#e66ZRhasHL{Q!`HH)1y>jAwg)^@QLf36)9WabE zCFG?mY+Re{6EfXSg%w%vo6cVjB4x~pt%?@TGVFAzaHZTlneT5Rjr3FmlL9fTR2RFp z$6x{c7F@hXwX3KmD3IVKPkG#`mvp#8g~^>BhHK6n5ZRNPM(dc<5Xc|8Z|vD+{QerH zQNRi-JMQy_&%5$Hw4&I)o1Ov6oVd3A+A3F&oXtG%F7c=wlfs2@>-z@rjm~X}NIrGy zbJ~3`@`XD11IS4q6$Rev`xaQuFxuLgi*O7N%>iej_7$FC_gs&|Ga3#0SPU|Miq`~_ zmaX%8FukE4;^QayQzV#VV5n0V1}aSHL*nE;lQN44to z7=IuWys8M=9m06@8b+WS4(tQrQp{4?WjCpF0XC|n2YXmKb=!cCbPM&PrI52~!{3Fz z?x9)4_|228sWPFd$!-cOol3^^G(dV4c`e2)Ti)rteUF;dmq=TL;KQ@AC~Q7{>;vrk z6^XS30=$m+6;bUdztEdi9X2%xO3Pa(nQ?;2e*thR@BeExDFIUCq0q-t#v) zKNN@;lOF8}$nw|j_$x=XKer39r~RPUqVX1W<<;!?NZ}T2_me9BXmSBq7OP#@f+&SlqglR|FC~W1@m? z|9XgZpFsw$ZO#) z(bEGqOBV0dSwV|>`e>B{M-WQ{?yc08a%~v~rXAe7xA#x&bzudmX|iVYvkF|*_eHN)Gm?7N z0y#>IrBA=J4>6eX$Z73vZ&7vMk00n?VW>F8Tbv5u>_V{P`Uj)|8H@duEeJYq)8_s( zO49bI_Opmf7T$u3GY+^9_LcwytOvBWx39|YotV{PRaWQE@74qqZenek zrTS$mEE8pypW>YDkThc}rbl&vM8BJF-?jbrdK-y)(-kXNf1(BuG)}Gdb>$2P166YZHN;D79KftY{8Gss+6r%^S@aD zrxJCvDtZmf&Mk*0x)j`d8-&Gf!1P_>-#;$`A2A3IjmmxDl&mIK(Guun)$G$s*H|ZN z`>G`ha%eHb{ZSTR(*;7q+wL|d{Ldm~ilnkaSm7gV+?PhL$7U<&!O|DV)I9!?RcMy3 zj*v+$EKe0{?iBl;(YE}`WjMR` zW|deUoCZGr$n1zg#9`)!fnF42IgN22AVZXomxli`soz%&&p8E0LhPqx0C%K%{yMBCm%HRd2HA?j2?Ry*qFXfd#rD zF`p4z%m{B`xoP|}~R2ROK*-(MFUK_Ow`}6?dIMbEBuZVVt&<;14Dm&7U z4uaA6jn&ie4_c7_8nXt6ap;5nm(%F$z)Tv*>pRnRXyU?*dXm-bH>JYWX(owY>HH8T zV$($gHrohaeX(dg+K%;q6Icc|>32Vjs&l(ptYojC_nqS0gK`R75%{wkkhr`FEyz$i z;Afby{q0M&z4Hq=K(*TH$jDfx*G4VGo3L5>zk#uRYJC1XtS~1w0;`d8s!;@p`o+ii zGp07L@?zYfNChqZppj;<&u7rpv4y2|JQZwB)`{ZlDGL2zP&BX75y}t)&hAcbat&Bu zh3-5C0CO=FrXRAQ(p3@0WWUuk88Qd?UNB=azD>7b$4svMD7>ge{ zb7+;|;DllbHXZB}hSZyM3U;U%*|ZsUwt>1BJ6Te0KDiICcNhJ~O&eBTs5Lgi-2ENG z(;LW^PICRkPDD~OaByt)p6IheD|xZtW&TTFmIW4=l}TgITA`tS@#0OL9w4lw$^{#V zRDl>M>k_O+&+cIMTrcpy8k>V28*iIV;jhTILi48y%D=^zw6FSvx8%5AlHr@M4Y3il zqB@DrW@ZmFRAT1QHok_n8nzcLN>oBbZmFR|<9j_Wz_BJ&&4H;~Jr%Z61fe277mCcdUk2e0EgzOa%Ln-@};f z>humi2+lGUPPp@Bacss=R{q%5}Y(2K*Xp>ha`l;Is4f$-}3#FMb9W*#?@bPc6#1NmJ=^3<&Kn`O?Lq&aAN z1_y@(p#S|v|EBHr61$Rq{^09tlsA2BhoOAFWvI&&4kPh#*E99eSC zSkh_x`5I^T?)e?#kSm*;+XnwMioiJTN4@48qDk@u7I{hR1=P<+3sJQ=!-ncmK`>M| z`(Q-VJSRADkXaOKs|Zw#TP&jFV8zV5_7}FwBS}z*g`HNMPepVxwlPF2#_%+8U=3D5 z%x#MGASLvNUlq)Cegr;L%ecrH?hVti!oqT59`qh}n-bAaTXu`Puifcu`hZkPvKmv? zet-FQxu9p-hGjcaaWn2wrFQ~x-OnBK-46qr05cd{KBaBl1ec=mof@fZHEHOM`!UVH zW$eyZ)CAI14ODg5LSBFE$?6Tnf%{HR-ukKSJqB^4O7-G zJbdU z`F@dIIQSA~7Y30rs(OOH##j_m+MbF$x$r`x+2`M`9SM%G+l3b%fUOtUg~wDPyD%2` zd*+8We6gY^@zh+K?-#QRqcTWf7q->FSq#@>*Rxk0d(ZiiJH&2|rgAiuV^sZpC^|+J zR_Wd`0Xo(y$67`G*|Dvd9^=?nICg-J&AMZ=?l@PW8{&?0mE#EPxLZ-{xLbihRL6~_ z=n>Gyabw9D?zo|Iv*RA1<94l+<94m%&bs3vh~ps$S|1(HtI$I($DMV@o%Ls*M>=jS zIc_XDZY()&EIG0jTWv`WM-0XhgK^wgdLk$0xUuxV?8efJi7PBg#DRO8a|4(|4Vaq= zGy0_50KkNK+ZO`1`yX8u*W(%OT^XUNnN|Tq;MV3%2VD%ungsGPf!lLVeTeDsTX@YC zAEK+)Ld-h8L{m9YITita0JDA{7!*}yeiy8*Q^sFGkSBs;6=SnzCtz`DY7yYOxhUYA z0O9WCCSW}Qkz&?6{R&WWz86ipYe6q^7(Si5j=~IS<|s}FI)haW9qA`4vQ@^53n`#7XS(S;Al@&HhJ6Z4bq{LBf z2~>lqYj`_Ke@2nN7%_BqHWx?)+4VMk4q%cV5kkGt7|JcjGR-QM9qDCbkz5RS4I=ku zHLkeK>@H~zcdhl;9K>ZKXWcp^LR0!qJG!{-FMyZ>$@Bs9ybY1pSof*zf~)e>72(S} zPj9{m!qHPY=Vr*C8>Y`~#}Tj18()EX!O@Dzn8eL|>P`8ouYvHG&}n%0bcCWpd~6j} zV1+a+fqxz$R!&Y$Ncm-|aMivdcE!DGHX4rK#CYwe6ZcP8J0ELg=VaKxE4$IimJ>fDm5>MBT|Q@PHPJ62}xwlk``X zGtEB{3LY4h9FjHeCzQZ$7l^d7SAC|RUx9zodwyEP6s`NCGXE(6g8ko>NpPe2bt}t!|7LV8HdpT~W^*RLhRh%6QdI6#^tp^QZZ7xORAGdIo z@!J&NM9~ghgp_u5?y8v)8q~hd1nJm@Jo0dN*BlV#nJbWf`RJmrsBIm_e}Sh8iV=jE z9*Q?$hz)>QpMgdj$9ev>Nw>}YmBWB+xXGswg^KxWUPve!Z?pM2w@Hm(?H>PSKBjKw ztvO3lB5NLaHf^F{8xD%usP!umW>!p!=D6GO<&iKpYGC+#gf_wO=n)6ysKjdoIe03S zy|%E`&F4X5rzT{Bcb)S%U=_}quHQBPK339OnYg5uN&Lgl*l|jk*#nx!bG&mPamJBq zSbIUJ=F8q^Ctsm$GvmzLFWZ_{I~!$xn7w+IsqyKC_8o034aV=p6b@pwIS}Dht*IMz@=8rSA2=ERPl64#&tnG z-m1lmcvNYHcpArW-Prs-bz|oU{&?)&8P&klfh`e(pRNBT;vB{7Al@8CC>7;--Sd=j zx^d9Be>1e%35x##N)?IQP1i^OH|-~|!2+UFv| zFdFzqU+eA!#O$r;$U1E}kU~zL$6}FNuNSH`2bF%xY##*XWijNwj8KNPz3E7>izv$m z;W7N*FpZ5xH5BM4TgLzmZ6|DO2spyu!TvdFWPdycIv6+Un_X}t7l|@nH=g3Gt7$y7 z*ha+5hHN5vCGiG9L_cZtV6{xN8ydl&Dti6Hyh@v$@p8mY^>xc}z1QF;y%${8x8Aw> zO(%GkttXMKSQO!2YuztOY@=9WUxZF%sC-3|4K_zZJJgdvG+Qo$vUC!yjU{r%nSXjt z{RtB5)^K!sj9J1UQ;f625DXUPFP^1e3$OM!iYng_hp5s+7=Ab_Ae0@(6Mx1{!r915 zDg^eY-TbLGMz?~mThXAlsMPh82kPNA_4+t)DJ%5jRaRQhL8XSJA49tbbHQ|VD`v}W zT1%z_Q|$az%=8C=d>_Sp_9q!!i=1grYv7yWtl<`^f@u*!S5AIO(%0^*>p$>U5?OM+ za1%|FgwJ+jGp%atu(`!Zw$w5+Rfumas%^qn;eo2FRqGakPq8qP{Dto|_{MfoJ$!!v zY-E#}07@2#qOhVXX$UV=CEFB~fLxFLTYEc;r|XWP-PQoAsGz@hCa`F;SjPLK>D7B}!-gZc1#U^|u!{U$lbT>hoG9~qBnpKQ@>o_kMi zXm|RAhFr>VT#N%F0tC(BxuLE}d4#aBp-LMF1?^-m76)>C^1W1vSl^|8XPRqwsdKdr zzX@FpzmVv@j7=C8igED~;qE#DSi`w_L}xq!mlpAyJIWs{?uu^J^mrKt>I33$ZNA6? zb*-+v+ICgR$E$tIHDj0Z^ShAZ7S)FdfX#Q(<(1Pgr=g^N)tEkCrp{N#ZFqf>EbBDQ z+D9e$-WLo%)pa^}Z?RaTQpKeBByfL*rU$0g$eV^_!^!?Ho8BDU#JZ^Z>+`B;gnbg3 zkvbOBz-r(OH*wZ;Kx6M%PyCF9_`d0sS zPh!+y73=)r*UfDM2h$cEQUx8`%R!KcZolZ+4j`nD5cio3Mqm%RLQ3rqg`p(_+`YV7Cf%OeuRrEOOm z@@nMTuZJV8a^j80Ra@xR?y(+N1&E65in59pnJ&FXUVOrc<&cgm0B_8R6*eR1RXKhOppu078(z!eGl z5MB)o{DyP%;fLJehx>ak*KF`gY^uG8_JZi#^CNd2Yi|!S?DjW_7_pX(FO#p2rxmCfH7Hz( zx6ksVEV9o>FZY3swnp!jRzo@E-(p4Qi4NXhroae|z}60?e{Khm-x94~eIHoX{z?NH zyhf)#VO>l_f?FriLEJdA#PUc|Z=J1s+nKstkrApOmshdGw4dp+Bd#0J8Mqz^Z)fmk zobxL0zuSe(y1mIbu5loSMy+$c(2@-cT;#ss*rr`N)(^CaINq^UhR+VusOy(ivc!nR zzQ$^Neg&#;&m)!as*&;qs7jJyC(^DyTMG&fj!SI|EoFE>9Ds_K^`GLHJF5L* ziqW>*bJ3HCKO0SatH~I6K|9&|uB%zIcRaUz@S#z#WOrw9h`&c#SP#qgsajlN1WaaR z_+)WfQ1T*B=n1^IGSphjzTjTpKohOPT}FN>2R_mz5rPKcR_NkOJ0 zk|D{DC|&ia)(h21s5j&oCW&ZEe8jK7VKni)r2nFCUDO182+Z}e6d4Q3gqhF()eMAr zlWWujo+0K-TEk2DNXldtb|G*~eH_zw^=k$h<0IM;FUG!Cne}dbR3c64G}5sx?i{R1 zppe)<)?yl&g`XqaYcV}jxhGSesVv4XmiQlwq#(;Gg`l9Ie)-

)f$Ge-qt1x8V#+VHbBmmi+C3HF~6EN1ZcZ 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 literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/release_specifics/images/chunking3and4.PNG b/documentation/hdf5-docs/release_specifics/images/chunking3and4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b17c7bacb645c049b4e5f6568ac72a450fa21d7c GIT binary patch literal 332358 zcmeF4cT`hZ+xGQw98?AwD=G?uj)GF6ARtOn(Xk>bCG-dgh#(OVq$FSgQ4z2K(nSTN zh9Vsj1t}7WiXk9PN(dwnAR&Y#gnauXV3}v0_kGtq^Zm!HH8TrM4$0Yj-}k-uxqkO` z=k%!~V#_uxTd-h(*s-IB&MsK6%z43rpPHBa4F1Gz!(9&e-$M7ZM-DE?YTP&ke)!4Z zfZl-x3v$9lr>z%*pO;=fYU;jV!S936zYA~JF5b9c0YB;3p#z3qR>M4zSKI93JjI)@ zySO#3FS(=FsByFZ_uJ1OO_nnxpK8f{fh8dmD|4!{<34;t_SrD z94=4vF01x&3wNx+H!Ul=oLJH_L~AD1_fil>omWRv8l6dwGkrQUmFsNp?W+E(|4j2A z;DRcW|N1Z2+1B$<&q(q0T34?S{_~*cOMF=E;2!nObN|pSF0`8)etp6Eoiz6Cd!g=I z=Kg+jQ(!^);Xu8)3oPuLzrg%GSn=Sm@4;|fHoFdv%`KZqf+@yaDlj!Y|KM<)b6$h} z*ZI3@)uc)*@tprnbZFKPK0fT|%EpGBQzJ-!b1a`X8Yzz{%PnJOA{D6^oL`h}s7BqV zR0I5rV~;j8^?X|a=(_%QkMP5JO;#h0&ZQ#-q_?Z|71X;??%rc>MDTrKIx`bWwuI0W(&-4IzN@`hE?uG*#%~`)|}J1 zi58nwZzT^#V~5$dfA8t|4fI8m1iyo2t=4Z*r-UCr7^;)bBqv%Fb za_J}5OU;0TX_~K2HkrLbr*D)Bi%}%+V?L9qS6AA7WcKVBmj$D{FXRx{Sw~w-)C)fJQI@9;xbk3<- zYll}X%$P|W$;B(#jh3^NxU^Et(1FP|hlI2+J+-zM3i+ST5-Ja3=}Va-h27ZU5^B~Y z;n63{kz#VZU0;ZLmQO_)!e=NcU5v8nYDdm+LAwh9e8#Sm&ebfVCJ8iwVZ^oel0cHb$TRX8jr$@yuXcB`DaQt_!?Y$}(zdI8zVJLvHb4SP_nnCyZHMa|6t5R| zf2$di02>G?ww)PHm+mP!Bx{jUWc9%S&Fl5~13tZpOF1%_NDF57Vza@2b1{B_N+yV$ z#x!!emH#e;Cjs+bgtdCuHap=B_K)(K531-k#)@MV#p{0-*P1w8Oi4?xTP$I5I&?4P zC8eXRZb!Ny*}mnP9@)LwlH&Vmy^8%~QX~Rf0=IOnT9eK-Y`Lvh^MrO5vvBA(Hp0@g zEo~poz|?*BCfkw|1_=4gS07cl3eYQZn@{aCB3F*1$DJm3nQl=7FAzoVLR`u3aKjt* zplVTVaQ@j*4NP{$vZjeDcDCQC_gC%>DNR(NKCB`i9B>|}k0JGxo~IV_>k~6QUgAO;7C`dF3{k7-WndPhH~TEUwXipPqHKJiUxn zKAMk-4`8QpZLouPMCcRM=H6ZG#;c#yEt<#eZ46jd=-(KJ^*f|LO3ux=D$ZSxwN%B%pbXq#Fx$rR z4|pS(R)}FlcGw%gpSc@`k=ae(%?Vbwzd!p^indYLc<5C_mNsgM4Tv7;ST#x#$1YPd3$wuJ&kn9@SP8+{+z2gmY9}ISlc!0(3lgkSiI!^_Z8fYa zk&q`a;oNbn-&JEs)@{7*ftcnPVSJ3hxOO#r%?`d1FHx&8s9wT}lWcqPs&!MbRUQ%T zs(l{oH8(+c)yXj~W@xzpjdtsxO=)Z!@#LX(&6c72Xhj#XgQ>J&U*Cb?!i9nv7ngl% z;AV&i!UE^zay$~6mlYae*diAhWG?MlB@8`uf>fh3GyYvf*sT9a$2}ovqcm^u2wnm= zRpr*{K{V3w@4gZf<5H69lS#`bTA3><7qr>OP{M0ti@a}peK;%;jzN*+!8AG7i~y07 zM90H0r@qv$!Gw^jZ;R!hfR(>OjW{9lF!BA>l1NlCY#=!PSGmCv5Ym{hlS(X{i(V^Y~{!fL4*Z9~Bc8T%2j;!(46hCZb4Ut*Rw zTG;IeMT=j(Z>ZWdL!m%|QI#L8esEP|(6Fr^8;@|&1c||)&+^C6)Tg$u_dtkjyu4o( zp(%R-nv0xXzng^z++j_zo36Y+Kwt)IJ%K(2yMwF^Z;)W!ny6A84uqksRS}4(3W*J2 zyE+3;6?LD>qF{^s#ycJ>#e{-C!9Ib33A#>tt#@-wmtiJ;hM~h}3|amJ_QqJA9~_ zV7^`Ma|a14q8*7VkA`s$%Js=3hl)6qbUesI)*!eLm83q&+>3LqUT>t|;XW4L%^;%^ za71W=>{S0DxBRcsMHkV*ca^T?{l*Fu1en8!4xP_XEXlx_IOKHMWSRJX0K-vo&q;#% zN*JkHap$CO@_w0AZS6kYy87K)kaYS2^`z{_&c$Oaj*NmdDwrf0+l!8%!QfdPi_r}5 z84pHSl%I*68(`MU+V{7WxWjq+%xa0QnZ}ZGXthsWmO`c_!KB_cOOSP2u4fEELqobN zpY^gaD0b11=!Xad!(gq+Y-q}nt>FWzRqw zEtu;aA47k34Vp8T2SdEA#8evg@fU^ouhSI!Zgn+ zVW)c2U|qG9OQ&y$D!o)o_ST}W(%1ap1+91D^Du2QCX_#Q=nok^-sCtqt&Gu_1|x&2 z!D5Pv;FoAlk5v*-A0!U0Cs&H22XzGnm=61$ek_PFQhwmh8?yFF^QUUku|=Rp!I7KT zSTH{)UQh2lQoqU_Tw8)s-LcER-dYfOJnm3e5w~Z-EeebLK1dK%vYafsiyBooA-Ad3 zgVY4g6%b`=(VH2wbEN|HU7X?AU`--jmCnbt2*VXuLQtfz@AJe0^&Xszjj`To)!J|U zvv@y(M}fnM9}@V}>lad<>y0Mp)s_;?U8m{p26)UN?3VW=l|g>2opBg zBG2*XF-wWc19&V)Fae;cvdQ)B3IfWN-z}_Ect3ySyb+PMXlSEau}Ua2_h+L?7Yhq- z)ZtH4J{z&B%|7E*Pp^8 zX3id4dDIUKlwOo_(q3t|E%<{gh63G_uZU}bk{p++_SCetS%S3@MPf~BbQfa$_6v*A zU2yQ8UC8=PjGB$dS(hz)Id47gQr8d_vk((i%!~+rQR6YzdkL0*hlrcbQBaJyB|z04 z?kTK4z|86ks+JQBLTHO!tcqz0^uoDuKW%OBy9C*O-KUCe;vU{|O_I95$`ysuWp)lp zWNg=_KM0%FLoBhImLnr(=#lz-#Uas&DlJM+khIm(51M=WuWRaTc;ZnyA*#I^&%TTT z$-`76H#ySp`dCGDocp;>FzFBOb~-d90hM6+qHTefp`yZm2k&1!f!q+YbFxP^c^E>O z;=bPjM7@Oc@&ljGH->`k!bNQB%?EyOHbk>~!GJP3L>x96=6CQu_)UhdRrb8amB6wP zs4x2$X8Z5d1#jH_Me&10&1yBSUVGQGisX9%74~bF#hA)D+b3p6E!L8A9@sCwEJow9 z<=NKy>)6$5?oVNX4I2kfSR0(*vq!yhzqN{JV1vSHwY<}<^#{NI;fCs~3j5`POAUM| zD14c{eG9l^;MdC^fG+#~CU}iSV(+Vyt_yUJ--E>#^TfwEIK#E)z zqrCF#{eUhnxGZ#EUV9v~{&rdDzUYDTn2ui-{q_BTF5mJVd}rY&Ju-j01v6*+Y|+sQGQq{H}6-SNZK&;M;-0e5#yJ zmGh}`K2^@A%J~D>?@y=a4`Bc8w0=HS&Zo-xR5_n2=Tqf;s+>=i^N)tVKH#5!5I)fz;j}F`tYM9dk z^#l^;i^twwk>t!NhBD1s`+cfCLa36&Vn{HUOiTA$cS;{z8qy2R2@88sCZaJvNKz*i zXN848AL0yjVy8u8G_RyBehnmYxh0`96gcjpWu2XP0YFeL3!RAlt693(|6BEHniwW0?hR+UGabZpeWIhQB(S=7mY9u~nrt9fVS` z2_w;%qjmvK>lt2&EVjmRHUY1hT~6T9pw%&;scOja&N{egXu7WfpFR zL*c`uHqcLZU5PPkLG|8|O_NM4XLXeVCG|$a&6j{Az(9IXLc;@~*32g%b@*Q$B%*GDMOprO02i9FxGssWOL#cLMtmClW-PPxdw zQUYFVQR*crqMio{;|QzfbYSFBp}tRyQMqxK{={31Vny;%C7@dZca%OhbZyb{mtCi;JytKw9zwa4;4QCq8g)LW-v`)3 z;X?W!QnNP}NQwd3@SZYqeo4#{nC8y&!ZD5&Utv|v0>8}TH=(xNyWrdjpb}dlH>(o; z*FImHD}jd&TwHkHAsG_vDO+V{au1$!!2W7ACk}m@VkVc~-CFCDDVQVAqA;9F8I+x( zvFNoqiJ$GPT6nc-3G|vlAP+r1xJX>{w6)4L2)9`lqj`-35eHf2lbx;xEcXd)v~U=nP~F2OvuyVoY2+dpU;@7EMK21mq=WAGUj#7G3!w<^e#-L>}n~Q;}?Mqw5zzla3QJ#2@dVyzf@}&P+ zoKb90fTqF=*!it~%0D~3{i+8)U2Be6zIX8Haj(?H0+qP6*zGZ8EKpr%EE2*7CwPgi zX4y&LPnN9CSRqtpx2}3F|NFADqSrd~A?g1K#a1_@2^jCOK54!eGxn)qz*>vDpUU=o z&{iN=B}5}u(C{0GToJvY$T0HX6M#Xj3uXiM1VoESvuqLyyqy_LPQKCx#fYP?I-0f+ zH#^glF9bIDH5U}Np0Iu-ax2C;_ZZVL=h3OXsU=GoVZ%V3d2eXXbkT3x*Bg@uVgTKg zJ6DZhcuBYDlinDtFU>_E7ze6ZbO;h%PYQ6W8-BZ}=iB*Bm+VR!aoI z*79#;v3&)L(Y+GV?KV%bZMvT98)(9ER(uV;Lb2vO>IR~EmOJ#~hN(ZV&K7t^o(b}U z1QqtbD|JBx?qH4Wx8;r$!b*p8Pk3x19l@!_HR)Z|7zDvf)d z@0EsR%@77K2C`9>5Gnyg%bgDdz+IUKGGqh+8p3tr#ILqm2RT4j2y3&~6XOR0-g|;6x0RNXMb28{lv`R-F2S_P@yQQeJ}^L2Gkw z@~l`lDf```uA~UFw2V?(2|-6~txVa0fWkXZXqDy%2X6)i0C94^3Oci}%ZE_?i+Vm- z)9(rKzBJR$B9~Vm{xCu;flcJkaHw#JZV=B1Sf7W2fj@+put)Gj(I3{t?L3E$#t!c+;lt82F0KNFbQb?xVH>zF~|6vVL z9YhZR@o5oQlJ(&0%TLTQLL3|3VW52NE=->Z&@M`Wr2F?uAlVe8#fEb1r*jSJPAwU^ zACJo$5zn-2{4*q`P(Ja|u4)ZDgJv+2?hmmYa1-mmG>l!OYH^!O@ zhOUpC4go)$gF6K|es9nEjwvjKkqAchN(Jh}8U%aDaajy6`4TcGvcg{R5>yI~K zs4dVS4;`Rrd*z+rjlIKiqDn-$b+^%WRoGm57^j!jhwFx9>7OjY3VMWQ?wbr>!>z01 zUqa~BMBi!ZrUqZpLrkI$J-qC4>wuzj3$pxRa>8B@iVE>VGQ_D`^{xaKPv&}SP@mhjssjUNAbE2sC-3RGQSp=c}I|16Xl40yM4 zIUykvBzCs6waegL^#|bARY@+OvU?w)QB7=!FH^5})qf+){#Ld9i8vhHTH`D}>QR(Vsmp9powO-Ly?@YoTA!QybTYNdnE+SRx5J89pr4q08buXv|sDV=` z6bMqeHpx$5U4~#eh#^n+qV`~6ewH{HL2{+2KPDivGrQ$#AXKm--rWGflzax|gCtN& zO71AnETh*6F+x_A1p)1fY(kA!_Xz7RnmWZ-4BJB1AA1FeEX;mv9xZM?L)_b zc}7|!J+ZO!r8{ zd$gF6pkyFG1`i@2ybOOwHr@mcg>j!fefL!AxBxT|!iZmyuy5Glz+I3j2139P3SkXh zghfKpDc5p~!+;zhaKsN8M3#9t11XBHhGe&dd}=Fz#p&&5eYWf;FHxJ`x6EkXC_= z9smKjAhhb2%Eq2z8w_% z2HM=VCIM4w>Ca;dc&CA2?5}lzXgR=0f}vA6@q)rV3(KLq|I-GG!>QKASCIOt2v9S0^CjbiZUB081<%elcZ!S+e zABl(I%AoXYvMASHx*OnM1Hr=7ftq0?U|NP_7imbl@p_51tL92WFjLkb$F_l5Uw$~< zpWQ2gGwDQ*tvW#gb4VEhk?4{T>IZ5KpI(Ulk}=IfOcHP?fTU#&1p9`RU?j>14--&m zu!b)|vte(K-}9MN3$Ttrd58c&zhLH|9cW}~!ojKB$Z`-z$g`WcH7&748Y{+rr2te& zL0o4#duR^?UbB0|{Y}I)k#0TtrSA2+j^r0PJbx4@B7PNY%Gl#!{uT{PG^-O{zWol? z>otCHq<#{@n-orX*Ew4n3P`{>x4P|w>fPdf(3=2gXh_5HXWWRESB*d@USfx`!)Ae^ z#EsQ?wH>ZskxvCn(q-$}vB^FEOVLoXQ4NB)!1udDT}_nFGPeNm@V{;6xcdi!xd&j{91BtBU^{1#GXo+|u*Z6$Qj4Q-Q<&rbM*C;(`e7$I=ezyAfc_t^7&w98e55Q~ zjU4RR>jRD#cE^Ka(OU0K%zAG;UKHS$lsB5?g+<>W(ew@hz)0AfjuwzRQkf$dF%`!2Hkv;D^ucD<(W%g-H~Y0Ll*Vis)nw7ShAzZUHb*B#p-MAF<{}|U}VbbSU3K3Mnq@o0MwQM z4^CQSn_Xw7YIGuG6HvLDASn>O*t#%Y-)~r_W>fTlBohvnGhjwX@etf6<=y|lZM;eX z4k4mguS?334x0D;!EwNbF!fb2vm1u8epKzvpZb?^+(4pe3Cs;vAi zAQED78{zr~#R1(6OY@Bj^PlcBLd?;j-B5lxC)gGigTsR0@Aic~C2#-ZgaE&wNW9SEo6-rj9uoi(_U>bM0D63N$8+p} zDkk;qQcmyn>8+6#XESFvd__k{GMdP%JqJb~9Fa2B9>1e+DBL<6@X?0yb7GJb=cEt= z6JmW?;0Fy6Fkh&mu(IqqU=U(MgVp&fvh1K@7{==IMXDl>9`isP+30#m6)>+5Jt&HH z#k~<(?j^dA^n>dUFJZQ(` z$YiK|#Y6Zn#V@|FW%FUifg`iqNOQ1_Jj0aT;^n)NzaYtXhKid>pJq4tXGtyb8&F9| z{b^a(x*KmAsv`BGeN_G^A!Gb`PRwlHRUFr{c;e%Ubgb8JO|oX%oDX5f>cz}~S67;* zph%V$C?TaZHi=8%4LeK{Rsm)XXZY}^hteQ27$l!eZ48p;w$`KtZvH4rJ~<@iGu43f zGq|)r?|ur5rZH7F%67*h5xi?sPoxKKd)s7zZJ1ya8K&`=_8+Ff3tw>7p+j3#{QV)% zdkMFLiZDVBznc|X+s;v#4<@Eh+2xOZL3 z_g=k=-GrX_KtSb)Y~kHd-7Oem(Kiw7-jtt?;lAiD*1V}Zoz4X{g2?jK3%DXGZ&Bk1 zZgNKQg$w?SwZR`hsOWA;K}4PiKtw6+}30k78QM3E~2ar#2Ss(E0u2UZhKds=hf-kVS@(lpGe?a+u_#q>4jhegg zlZFXeB&}ci1IQ=1EOcMKl)M07A^5ak?@My+Ww5cj{*~AGfpdf~N+)m#vr+g-pI<`G z-)?ZH=5P1EEuQ(=J&PUB2b1|=0y53FAUhws=ToIHea=@Vpn2nbWip>C=Tl{5#eCg8 zzs;G|v(N7;=XaI!yUK4Hr*B6P^Qm$^RnDi%`4hpfz1ikd<$S7~PnGkja{g(~{L`H8 z+e^(qJTq*ae^xpFtn#}awX?gZ`Dc~$&noAI5C6UJA*T>D%YNFZ%^h|FEP$cxT~1=+ zklO7PnyW!udD--k-0vx|CLJ84!6h_g08yFdP83j}rHfr~2^b6(p=%D>x!=-rTFU}H z1=0dJSqbdLF36?A3TR8&rULt#SkVV&t?$oc2c78s?+EPsF-hD}9B!peEXEIXj|bvN zBS4EmEZg^8!vp?ZLL@+mij;(?*j?&cB49ke=Kya38^LUTudD3l7$cvB+0+pjb`~%MT_r=oSqYg79G+0o(ROP zSRk+w0C+}f%WxleFTHk4I>5yQXi|@EME*H*R$$qk{cnW2WZkY|y+GkpQ2UZqKaXyLBM%*OgP2M?)f{@Nd63=Be$ z>FN(5Pa?u1U8zF?={c}UNt@ZE#Tk4a0w5nfMSf1=yFd?2`J~T)*zt~zF4vk(gx*S^ zDV2@)>W#ua!I*g^s&~D22OtkTSiC8Sw}equxk;@S=)WLyi5L~<8`=}^b%A^k$VpRl zc#iq6zcdg16?ybYd{uSRf3ORnh;O|7y>U$?XsTa>{_U?N#?N3ah>S|8W4uMFNs53z z1iHaFXNlEnhut8;ATO{1Aep#_h@#LI>AR}DrP60LM#~sG9B&j_j;l@Sifg^%JhkIJ zT+p15{d2!m{#q+9yy(H*;{7Wg3*bK0FW|nJYqe%_fuwnFwx8qOA$?#6ly$M8Q3C*m z2*z3kn!XSNY+cp&8E}F{5xWr6KP3vJq%-%qVl*)-_Sa`ou=9BWz5qs3zyA)x*c`gf z;du~{Qg$6k(m@OPKtMOhbPN4y#(r7;rT|z-usO2%fNJUXPdTp6s1&x4w?P8O zjQx;6Uf?Pt)xxmdnE z16t)H+G2Z-M7mk#gNryxh>KFBiNIIrFAPKsMXxc1q|v{LhM6MEi{f1^)3?4B!o9)V z{WOuGJ6v5KTWk^X1>{SS2vf6x%tN3t7662OpR4v}{s4iZAvXw%SvLro)kujW#=U#Z z{N-9EWYxR8Y?%=kUo7ok+NIRkZsm2ZR#S)In?Gwd9)SeTQ$1Z`i2lLWutq zEa+lDEF`RWM#WC45_iwZjAO-zmi5e91AK;XCDfN|z#TwtORTuJ)B3qZ4GG0V+{zpu zsr$J5*Gip)D1)(+L2Q63L!-+K&Nmf+2TPm24Bo*GhCt$A_RfQ|FhZ4Ze8blWECOr* zVI{TBrEI*K(C`5w7!)_N4Y%nWue>68D^C9@BQ;zd7z5co4^i9EoUA7g@rL;iCIR|U zXm$vUWJQ?ymsKc*W!_qvXaEUFB+<KN+O!7Xt@0z)XS&F7R&?kHQ$7(n#Wb3IMSm zpoG^39yJ2ySLX3}cvbIuhuAZn?*(2i3QLL~kZNG>{{uA8M;7XVAXCnD-Jf_8EDQigZp08u%xFA&_Qpi9ii{N1z6MR9G^$;3BY|k_YBc zj5Mm8IBCv*O3DKW+%ro)1Jk@Z;Kwylzc(8Sz7*9jfVwa#==5yQ1wK^az?&>-Bam=T z5-PKQKJ?@qfQW=7VY0xMN_#;y5=|OL;YCUu>fhleTleEONh4D)T{o7 zC$yW10QH8))td%@AwGMxO47^g<%v0rFmjV;YhuYDU4Y*UCE)-iRKp4vTZv8L8`K9P zFbhn>NIGX9@Ob`~B}m>TZ{78CfP!5IMhEm6M^t!=K^7KfkFG&ULU10lAh92xtNK9xG;SL z3NtrSeNYN;HvsS4Lk5m@Ro)L0jwWWeA))lU-Fc1m^klA1M)c@uPD~7A zqi3>)w3}$b-R*FHhB{hrLk#Aa0e<*Vbz_iGa!kA(>rupNGQC-vvI+d!AT?TJoR?NrDBxA{`+%y1w*XNOedCewn-Cc5J#`JS` zFMxud(CA?TOB(@*7!KU|4oGQ#dO7>$xVQAQwSqU*|FMDpKKmwQw-Y0E9zclcoL10R zBB8DS1q=X)hpSVX0dJBh@9f((Q4yw}(f#xg0@AMsKLoMG15vj14*OZku{=GcV14tn z42`Cr?eOfY3hj+J^EO8;x~`Ei;;^^z6l28P^T}0AZf99(q{l!3 z=9XQ$cRXB(y0!XsY1OGQhRs^y-Jhp@FHT>gC2&4_YoVozI00u=v%d1{m`migOy^y! zP`d^VHMw9TbciJ`4Xd_3CQ}O^%AjdY0?I}_m1B0UFqd>=Uqt>u=Til3^w9Co0A1i7 zrb!k{_h4TP`Bj~CF4A`pLJTZ{fgblT776DqMQ00v77rlf-W&z+_H)ycYHf?m=K#k} zfaFU;WK%Z$UHn$0UT|qn=~a(w+^cdEz5Fl7LQ4})yk0KMo|tLq{jvV zOGpSQhz?~u2t&OP;0&BSl$X!bRxMnsE_(}J*1LuTY^xMU{rTLHbXjX%&NQP52E5Ns z0VlI@^d`__gcPvqlw3-JpAW$ivWrrg%|_8@TVfq}Zm)Y`Fr*o+h>pa^n}wQlI^23c zN-J+7PbD?MY81RZz1vrg!bD(K4w z_;`^YIz$vI__=xa+z2xI7Q+5ykVim;G_3#5zskMiEIGp8y!Vsa#Iu@k9@*bJO0|Y# zSLbX?#N=SDUcG-nvOE!Q6lzJiN&1OPIUI@@=%5#nPAMYIdRpl>lB~`givcwN_Yh5@ zSiHwCfcr3+yGA9)+H#hs2AwVv08Jsm)@IS?lHEC>nI7ct`VFGoMr@EM`?A;$FpAr! z*E#t4x0pJp3V0|C9WqE{K8FFAkV-kw1GaDQrG*ah-u40`ObOP@E3cqr*Pzy(!Fjqu z0KP+%Xag93$mObky?}s(JS+(+8?}G=10k?(q(aE*8~{^J565I=S(>{P+pPf*4AC(q zt_5;qgowyAh72pv18_5-e9+g*7f|uR+z`cr)@OS`<~v&0A^jQ7rvnNG6OG|~K8!$J z2w?AJ_dgNBH&gmtP zL{*STP2lp1-P2N;ByVM|T`;YV*HN5_Pm`U4XqtpRuumihf;4R62UDXlIU2T5JBBa~ z!8RDXv#-GI!?MUo_Xr-!yYktnQcOd+t_SZKrclZCB75REF|w(lC<)~_5C`qx8YGO1 zGcC$EBvP5G4x(#!Uu!Pu;J%19S^ad{s$xXHb^vz;ZA%OdUjOzM_lhtV=g^>{s{@v+ zWQ(r;x9WOQ9c-Z>NE=}6*vWj1A`JMzr5Dx;91=YyZb`aa5H!=V+Ugr|rK(m0ANjHF$|qf`JRSDvbvcKg&5!#t2)rlvQxbN6|=+<}09qML6V)M*?VC@z5R! zIKo$o>sa_rJeM{?iqBG<%;S7c_3fZrpezEAoz8Zs5tCrE53t~}G?>&_u0}(OecNs8 zJ`TXsE<$sMf`x3I;lQ@FZ2V$Opyzge!N={Shxu7@h-i-^#coW#0x@d_P^0k7$x64j z9jr)LLs@#6Z>oD;0fT0|)ULfg&zw1lI{_~#SZSMOG4iGwa*36~7SONa9UM9=x{CWn z(*7@ge(qIieA9Q0M`QRUQ`_yR-kzxd75C`)NDfD4pb+fIG#xoOX7V|7`GGoBDFuWT zHI#nG10#n-kY43>ZY~XXe3W9uy3+x3>#pT3VQtl8$pe4VlDoo_n~YM(Ad(fFfj3FW zIVCV6o#VjHA)sIgnZMnWQ1i~lFJedHrbz^k31ATI1kFA-f)U)vH=<1Sr<@3pGZWS5 z9nz---i(}Hsqmn&+vhb0Nn-A0ISJy)0<%9=qJ_b`SAs$g;GWq~xqjfR4uIy<+;Qy=+!;C`#O+gGB-P3|R4lXqFx_s6j_<4i;EAWz( z0^1#MWEJ)}7=|rU9$5i;FiFSNN}ju~3hK4>piDljZy?)X_z>soB9 z$EE1fOc)>BIw?BayUm!_>G5{j$}Pk$!e92FfxIJsXcW~jlII6M7L$h6$!y*WjdE?*?*soJ4!d$r#P@68(O^ z2i#w2M~YyMC5Tqe@X1mT*kh}*JDE#NVFG$Hzfg`v(^^tWqn3i;8E>b z>Y!soZD0=>2_4DK=4o&3%dgED51eKX8lZ!uL)M=GU)=KR%);ZWX`(+5&SoU=Ewp}} zu6NKj(7M(eB2y+66%32n&9uLFr3pgg>D+EUb{bemru!*Kqh*|JI{ZP%%lzJ5GGHv1 zv6=h$k+BvIb%|Gs_n>N9VDlOuk$j!_Raat1vzS3{?HS#M54%(GR%boqk+|b>?cP{4 z{umxrWKmGZ+Hq`XpA!!|4w`=zJ7fgK5U1>l-SYVgvM}HO+7g_Aum)ZGsFik+ zRjl*?y>AKh#0%dd{UfJdk`}jELcZDD!!33hO(x&lRbp?=_9lB7*g!0&c@T8HyXq?! z$z?rG;!Dqv<2zeW6-Si1gKMwN(|SFj>+m+(yDM?a7=t@U>+?2Q3A@+>=Q%^c0S zdi~nJZ7%ukS{VRLJv^tWI(#eeZ#NDFpKJD7@_OHXT`P){K;B(DhYxe64 zuvUZfCV$_sbN*J&-%3$%v^_s7e{{K>#peH~Ci?RWd_GnJL(}=RGnasWTtWY%PxO4+ znNK_aVA>hbX+%5mi#tju6RKy*XL9z|bf`>@PIl$be44r{yLql3$aZCgzun^Ghgxo$ z>wWywv@Wzc#5d$gt>=zTTrRc_Nr>Fnf_k-5<5;sRANG9Ccwuv8#oumF@0JYjYp@(W`9~t(hH6|z1(zakRE-w>&%RI4lCR? za!+AwaeWFtP~O4{yOS~L#!lm(afxDn@-O5M`IG@p_ZQK>-8<)p-9o#2O>~$sKOSZ^UPq^G)iGIa^`$oV%|`QZkCaQsEwSk56zX#K z5lgF`{6x}NVE5S>?{StfUs2x_oQJf~6BMP*dYniP!?SiI#JQeeQ|efT$S-An%!CN@ z6?=)OXPlfNexc4@%YS_HG|~fl8g2-CoNmmu-g-$YuU~_dB#O;))?vllg*!ThS0yVL z89zajayb*sIv;lzE44UZZf=8SX*ju|)W6MlCi3x3i9OFY=8x^G+qYIHFScMpw(dwI z-=1A@uN}W;dT=5KoGlcVBS&;Xc-GY5s z|MmovaSA>ELAm`gh1e|HaAqJ*)8EvKZe#Z@6(7FF0g<1fcBxa@iF3;? zQ$sDw?;gj~ebjU^j%7y*7cDEErant~Y!HckfkFi$jmj->9R2ht>w>xNR)2qnfgbv{ zjP2I$7u!4&E%EL4vBuiPEk-1Hr!J!`tG*-QUe+a`&#jgrHouOAhue2qc9nk;!Gp7U zD{xldSZeOgeV7udpLqohEo5+?OxuidU|2c84Q-Vr>;poU|&)Q1j@_t(u72;mQ~boXMYV?;VAuD7m|`Tkl4O z>o*o9qg+VlcnNsa|qbfd}mN4Gc25Q@^4Gs?}b+OMXGcn!Q? zVrpS|;BI&J>q9ybFs^iDX|XKBobWw6$M#5bI3wsDjv%PgNv> zD4%MAFgN~d?}Pd^jH*~ckL@|-n+JH>7_lm%>}i=>qIw83zsdl5kQ{2(zsc4Tjg2kr zh{OktP?7WpIb+=;ty>!vF^H+w-0rfV$6_f+OXDZG$4xKLZ3tn9j(k4!DI>7K>~p_w zUXxlT=flvFSXA8AkN>jEd3PdwO-k0;mUygdn@v_6P*c$0lTrMwq%VP?axn8LG1B|P zGsPQ=TiffXk$!ORW_nHd%}5^)Q-`jQboFO6AP6Q@w;}x)F%J< zAmxZ~4&LAY_}rH0;%H6B2`E~K4xa=~YJO0}-i0LPESa3N8T8vSljEKYfN=UP* zw{%Wm7ibC2O0pw3I>9%KAy~2GFLcUcerB0mOg z9N3`yd;6vMMfgA5oed(QOHfo!XRBWulKaB4UziIG@iqUP{lJjAm8cq&Ow;dxkYe z-`JHFPs&N^b(dr)dt~Mg_HRuuwBKw^N8;A1@{wopF$VTAX61JtVQwdYxnIs1A7bd4 zWh-cLm)S8jh>9v?ljjPW9yw_k$W5S(nTb?{gi82)qLsOp^OwX<+c2$xcC~$npknB6 zo~~(Hz(K=9byKaGsXh{DE}E*85i9aQX&_G7-_-51vR&0s`s1i(I4u1nB0Xa-`ckv2 zaa4h^srTm$W!uji!ee)j_OsKS)*&LFlsKEZP8#9sb4JI7hB!V?jv?|eRuL#;grH|X zcu=fKAZ{Q4FBOni=4={#p6t5B%)uJ3r#eL`H<{=YnCTQJc1o#PGj`^Hu@rYSZ+cih zGAUUB&f7Clysbgy6lliZ`n&$Im`CZFOj`n*$@gAFE_);)7ktvPOkt1517&i5aXJn+ zO~*%qp3>NjkUR(Uwoa4E?E=!Sri`i?9DkJW%LzTaZRJe6ys#7F-)j;!la{^yu%dJB z!iEre@*7;ZQnF!`jZb)r&w*Rs$6w}P{K(Qw!UPNG{Tyns%Anc)MGkiWN9IqnxH^0> zJ|d9M`As)&vInn@|!r;>4!-)szGB0`I-(Rw9TYe3`W@LrZ^U8DO5TEm&}dhN<2-S>1XXI&dt@w zVj64)x=$!x2o={^4w^nEM}j3`9TZnJyC!^^MTSF*8q z5EuSjLL;lp`@t%`8t=Z%HIYQcD z+C=ZZikishYkiJrpsp7hx~)ex_s`wKADw$Zi{>XPKeYKjqA-Odkr>jJ@#?G@U@vlG zBA-|W+kvqhv?Pg%N}G4Rs$CjV!$&UXTkc_%UA*qUgWKSKw9PYAtIjMBX&4b()}gan zjh&a$6>Ew+=Kj$D*|c$=edsawaBo@I>9x_h7fhY&&W7(Ptsj<;Af;ql7)KZQn4&|O zb=3@Kb5DzNqq#$<_DH)FjA8P|BKph93I#pH%JBc z3JL<=CFH`u#kv=%b~o7tau_p;9w{Ka5tf3PdgnH?46$9>bVf3{&mwyo4po5ISnNa+ z>Gt6+GqqSJJVne-vRqVFj1X5V*;Ma4^mZw%gSTR>&bP+;IssFfsIjx z>W=BFzO0qf3K;XLC%G(5*mmm4_6!9TyCh})i$M8>tF|-RbXLac^!YA{3qY&_yPJwf z5-_}8lxa&e_KcwPQ)18%lZY>CNOqz)?8bsY++(8BWFx(LYZwe^H5ou}l8-mEDw|kg z*U47f4hcUdK_7iLP<H8obL#geY)b^R!lDGgvzKwjS}z8Uu%9LHE6OYxN|CwzP4o^t1X zqb>qbiP=CUiEhMyZjtv{msG9l*X1?MZ|Qhd4Z};=cNuFJ4NKJFlsu2O*>>HmqZ`0e z-{Kwf8qUmg#i)8yx9NOFah%=5?6N4t^AC=lcpRRbVXPKg;L&DFyIGegI%D8XwMmI+ zjwpU%QPfK!bvtxfV6l{PlDU)SX>3u;CDJ3RrD<0&Wyp?u*b~;gO&>#BW!lPkvjS4B zJfQs-MIY2|0kU(8U#aE*+Xu_l*Ki~-@Wd8esYM~JlC+PiX^JhJM4YT)(*P|4Hrskz zcf^$pZ?z+{C({FR!!At;-t99 z$;<4iyWKlR&FC5QkBbrJYB5ehxwVhC%Cp_-ob%xPfs}f+q?4Pt%vU)&F+u7VPMKyX zsCuxWD$A~6NHW5M+)?JdhuC75SA11&Uqc?E4T+5eOK&V0>^iWR*s@Q7q)NPhIm)Fv zlaxmAGgd>TB@>Z5z1^q)Lw&=#QEphJ6xgEnQX@yQLI+WP4wMT zju#kJ7>Ues^Dnl~ko@UGY4zSInu&0M+XJlTpE`fvs5o7C@Fi;WthBs{(q$7aznnq#`&4&>Czs41Ih_X2^K@2 z>6u12gbO%5BW0;dOYaNfB|?u7(mDz!6B6D{@wtK#_$NQOvp#xxiA}x;IF0rzEwg8}8Hx(svc99VXQkPp*s|J-r@aIf~?e#|u<3R$_242FU>r5kph9|v9(zckf z8)t=Au0@~luC%F%@VA_P?AGy+9Ig_CMS6R@HGKR%WJb3ur5 zWhTJ+Xzh||J0tDlkNG5qe77++x9)14UAiB}LfdnBiTyCHM+`cOR;I!UVW-JB`I>I9 zd^Ye46P*70Q%tv-sI<$dA*sR{xty zzc-8v67=6cNf3U#dG*-55KjS67W0}$$Y%uH2_WA2PO@@NEHgXmrr@coH!#iG;aqog zF0g(lHJz6{%}bu<9&rCSf52p#mpo-h9ck}+R*`%!U{1aOiK&0shY0W5-+%D=r;=b^ z|2=;z{~XF^<9f?`;6o*h;q$X{wpsE&B3hnp1_PPO0t>>7Q>z8;@d9r*@x=-MkG=Pd zYI5t^g%dg=#YT~C0|aSqgLE{~L_k659cdDz34(+sN)ZH9no^}J2%-1h1A_DrK#(rI zmmqM~4es*1=Y7ZboiWZhzxI#42PV0byUca1S+03ap!xJD3AI$Q#ScxC+!$SkTC$5q zJlveFLNlXjkH@==1+0RZSS>Ju|tVLvou8Fch?C%Q$R(h$!^ zo7IW87R()_4^?~zDIBK*OR@H+eXfZ^xqaE#f;_g%X?&jd23+^kKu!r18)J&+{jee$ zWkq^LAn&&5#CF&qyT~>-*I3|Tz;8HCKIz`-j>^n-2Z^hu%2l`hn5DI&+Sruuj&X1l z*VJe5##GQh<_?xv$2MVm^E~cX=3`kWi_O}vh_@H@ch^o;PVVud6Nk$C1X@|G53+{x z7LPJnW&LjDdS#sPk1>Th#=wlf=F*@I zrvD-+bUHul|=S$9FCvy>uF?OGLBYzg^^8aJwrCuX3x73sGN5USGv&Md` z8Z@F4p$?!sPqS9(3hYpprh|yipmECy942-C=oNv%bkf06feB@jV}B~pP|Sk~b=YPX z_@Sx^-9IFygb#IQhCml=?;hFnldEEmo4z9DAOD&~2z@q7-^mb~VsGL;44uo9=P>_t zZ7{}u4obn7LX+(olJ6`|Lp@r%sm6mUQc`IXZJbfAqWAYI2KN6Y19FrfiqTJ6N5k;Tiqzn4wCbq{R6YwH@s+ z{ERl-Hp|`6wc|GX**UAF+5a&|4^>D?O#hm5%WpVMKIxeEm}kjge?E7Q$W3a)+b5?| zCDz`!#G@iUOcw##&m5CRuCaj`s6+C41p~C$$iniJnBsQw)^??Neah$|E{CdScZ#j^ zL-L5>?5F_ht)Gw~^%8N+3G^BNPp#I!g^ZR_aJz%Ot?UVgtR#xtheOo2L$S~}X~k3J z3$Nm(9A`fIY0w^@izJEKe^FU1{{@V4JbUienoOLC!8K?aWd~6^=w_d-c?=CN?ems6 z52>LEy-&wT6tt6bGK4;8Q|Zi;^4sX3^z6jBbb^K9ND+wyfXr08s8c&_$aVuiW+ zAvtLKzG{n^{A=(j_5AOqv1({cXgJ@IS=Ex$(4poki{rCB)vSLXy@n3;i^*yj1*BW$2}#9CKli1YV{@CoCn-1qUm}-U_C6ehEUg2n zk?HKafqU>-RsI_T5V)f$DVdbt$bl^CAsS3Wc6_;%1uVBS9EZf%Zsi^Vf+TY#M|4B13$@;u=cJ7}OQ9oweK6bI)X%p*@e46z{ zZs769;fy&3_X^wIkO*tUzHy0tcYN3&;$YHKyzdVBF;iK{_NK;Gc!#YcQuOg&9#%zZ zLHkc@Qn+ICr!ArCG0-I4J*A?iD~ZYf0>;6&r!NSO~*y|TJFjIdn74`!{^Zo zlk<5USwI&n0BRF{Hb_N#{CyMDnEFxRFJUYS0bqO35ZyelymqlUTf$A)!%8}X!`6AA zOXM!+pS3&Iuh*@0{?(}i*4_{)xKI%dIF%ufqZF>cYu>Mo7u7yTo zxq4PPI@|TD_2)TgsOr=2t`<-$J`hNQm3ZVFeN^lRF*)>7u?MI9s_~1X(*vD}tIOTo zTD-h}HAYjIL7G=i!qIzf+y5q}(KG`dSIgli`^elRvvNd8W1eW2X4X zC9^KnyVlaR$7%+-J=R!pi#Vap3M%YRYn&##13}AhNq?bk5*OaV@5i@S`ga-YKP4fe zG9Fbn{yALrP!i(1bYDMZMvU&hO^P};FhU|R^XgI~RLU|aXk%_|$#Bn)DI~m{4APFb zgaias3>{IGePY?=rVHw=t>$dneY!61gq>FBd)?1%1rGVyN!Pk7cJIAtEk6Dzx&)t4+46P7(be3)Xkj&R`_u4U62za|X>WovOA_aik6SM?veBk; z;M(bqFP{p`wH4WGqs4%L)UH@xe>ro+7Y4M!Mnx<`4n)dw z)^Z8SUAS2mQ7}E6J{#ypbL2k_YD(Xv{hJ`#)eFgW{ni(mu`YY*%&W^^Y^v=TM~xlp zp0S=MTr?d*5FSJ&_U_ zHcN|j{=CU&(H^6%p=JCsw@tV;EL=n9Q>ki7)t~6})4wtTNYQ*2Kh!dcBNa3}QgQgL z_%+dHvGpLHb|J&l7zo^S^{%!G7y_v__m#GMs6~HvN5{V5%%MmKdoU2g`fH~9m-1CC zG|aafGKc1lHcj`1F>80AskHx61%bCrI_Lvtb>ts`*6Ep76&7(+zhyvxHUr70AaZ8) zG?g#4x^U&Ho6_qK4ViMXGjW$60paMua4> zT85^>J(3UXE1xlU_-P;hn#SRmp4r7>w=1{5!HLpp&8w_{69-sBV5JSuZuFrYOo02J z^<4w#L)s2p=(buH!9%O51RM-Uv>?Ftce}N`C;@E&IG7CZxtg zZWv5dIkXMd6$APowIO5UY~e+EEA$tE(xXrMGgch*AUDp2 z21n?c@8q_fY>hZWum35tthupQRd~Saqx+qZ+=l1kVb>V6s`$hYj+qU}#?3;iT2q#@ zxF?Z7Mr(r^770WGXZy=Zfle9&5C_z%f`{5&NfOwMg=AoXCKutg!;3ZGa9-U&cb)%S{l%4>jrTPucqDFCBiHy;VV;J_~ufiHB3=KV}oq&6@jvIzd3&2w|hMK|7x! z;BMu*J2+whlpD9g*V@Ii@p@N>r;zM~yQ0vva!7sDT{t!lQzH5XXrBlOG_g3|fuy+R zGq_4dpHpFh>sI3cgrUMAvX*CeKd<2q)?vuLDZE=n{A=a2w@2gOi4B0b=6r_X4?P#K z(?vq0F&6v!6MzRKfOhZAFnFLM_A`0b4U+Bae{T_|ts=EE;ea##A62vd@TiOusciZM zJ*vZpYhN)|+5q+Nl4 z^xA?TcY3g|s7S2T&wBXm*8ZouFC+x2*Brz7)_%|AXdwLewYaVO{fAmu3PmxrBfH%>ri!C_o-5VL7t(A97d;nDH8N_DsxxmBTe1vp z3s1j+o6R-D^_O=WcS1=gAgLvXVW)mkLrF@>A+X0C%F)tu{H^_a2oy&$R{=XF?NK6A z!8@ij(ZM38nE%v`{BLZ>xU%>lN#IBrcJUOniE9F_U(L)sEnEBFW8+7r^_qX{R?%(> zKw^?UYn*?nxFpacAbqF^hN|s`-obiWAh|m$_H1vXUj&j++Zki1(t<>&K4r7~E4p4+jw8=+q`oHSq65{MN?TrWU7#AaYM`%4Gcxu?Gp zZn}2QHbqEkN+!(b{HQc5%Bgf|Zbj$Fp&&Scq^o*A?7b8~8#_r&aD832eklBBKtCVQ zc}CjRyL?7g;Pa+75cu1{_g88FW?a?5e#bhPRlh^nEUFrYgsFf86`7yEz7v(Z6M^&?~39u5&?p ze#fFE(`;-Zk#OlT67T1M%U_DV>v;ScXOE2Eo3}_E|FxbbeT7zX{q9a@h{yd3CqMQI zL4Z5=rEjKJ3Y7v62Y}B`i>ikj8+y5BwVIgrzU|1z-zrvJ1O7kY*}whgDBc$g&&Ji; zn*}#}<0XDA*G)o^=0yd;L-Xl}{JbIHp!a@#2M*9H12Q&C;e(IMzC62n{_joYKS)N0 z!1K2O5ylAhPOs+9^j`s*R1F(Jb7%WSvK*BmP3vI>NNd)?uz8QOLg+|qc8<4CJF_T? z_y3=$aLppnPgk$_=r=b5!lix};HkX4Mk;*8*7Zi_x-R%2Gw`LrbBPn&l#u%-3BV?Xcqtn_kZgSGuYTw z-B491Y-6%T{vDyer&((#$XJ~FhNS(HWmx_q=}#R~g}EW?Zw&ncanY+Let(8n@oWIc z%YI8s3%vYVGW8)t`1y`Kx?Deid^JRR-({yee*d9ZJ0y0t3Zke8pe>zw7LE7{)RoP- zsAyGAN{j+k=!vbW1NWWbB@azD*NHa{D-8^q?kh5Jss$LKugnoH>D%?ERR4eyDC-+D zNg?|OIPp_2v~nZ}w@7rXRdDzdKff**$iXB-a_XYcO{J~?e0u`Lx##}e31rs- z;KC=F9;%U?czBxRMq=la1I4EN*qVCAcTpe9`j^U_2Ac+_@7wpWEBmoOd~e9`O&IZk#X zL-3@>Hc;hZY7|q7;G^6(X{#~Z@0cqW@H`_|OWVUfdtxKt8TdZK9+6qrjgV(i5r#i! zE)gygxClH1UcwcEz%N-(xhlB>IqAs5w`LjkO<0;;=%j_D9>yqu1B2KnvuhQ41g13G z@}g`z*@O?kmkCUn<-cs}?poz#9ez>eZ%Eg~5qHB)0gbFqy|5EDt8C9riOP+tN#tx= z=?vKi0H$Em5q_CpD9tE{&>-L;G*AD$>U!|f;K;sn)cMrOd!LJ6R6*B9Wr*nruBdN} zdHTkEF_RZn^K&HEM$+?-sYD7YM?$k-r|e{A^$_JiZZVYL--W z-5{FKuq}NhM6KcCuLc(%R-89B-NF#0qwBUq8Sm(@rMyx?1+4KaN7n<64(TY)@|UiGub0?`%EMRPkw|3TAJ$tM8z7_=El5+s2n42 zWqKOUg?Pa3##mF3-u>*dx8-?Iw6~G%Nlo<}ct*6f&pE|?F_OYQy3hZRIlZcBJX5tl zSM}WwAsRvJnZrSAe*lEhUfg(mTt(?jc5+p^;WiJE03SbQkfkavwCWfVC{B(LU4T!> zgNOFu^L@$%PGap#uVe)B->WrHN&f-}O%1oaw7MNAMDDpGoxN81>jC3`XCmAW%4Z^H z;%CxkvS*5Bs+Jk{v|k*|Oeenrmhr3Udguy=hY7m*`WwPU&odFr40bnPFj&&Q_xvF+ z%djSlzcXb8e$Mkm6-V$537^fokU@k)20;|fH=E1d(Jlcyy`J=o;?8A0p|ov~(O7|d z!o%EwBTxi&6fL>mzI^(JKx6v5ODefaP0E;@>5!t<_Wi`+{%Ns2K3d)BaQ`)8) zeOXC`dr6XTYtQ8C{mXpta>4JTRvc{7jwYB<80Q5yD-uIyL+Eac{kp4S&BHAes+8ee{n#9z)c>zw+-L``5<)T`&J4 z%)e;)@BRYz*njuRf4z%C|LI>(>0jUSUqAWZ$m0J_lw|(wSx%GTyxo@cKuy=k;Qrf@ zfy%cdxbKg%2fe#Q>gEKT4+1NC#jsj4T|pm8TdI`!lONY`)KNwxI{1IPkMjH zd553=#R08X9}wLoLcyN=wh{pH9|GXG7gZ#v+iEKc8>!d-3JAZhlZ2HNO*pxw&UK(1 zr`ZR6gZ*rj{d@{j)>Ki3MI+_pHv2p2$mpX$@}H*@g`@(J=TT4^zuG`gin=}dk4+Og z`5)xaud;*P^u!)`>o7RoqwxG4v8um)CI4BZf%C7pHZ{#B#gYd)vE zc{jtU@bjM3;P=U1%-W@Isb0!FPz3ysANs$K&)^w-+-0{>Ei%MM@E@4B4ld;G>SpD? zS7rmF3o4D*bolZ}zf{@=>Pnl3*{#_#?Py#IWtQ{RXXdkRNSI1Qa63y)SS`Rl11h3SU@{^32mRR!MqJHS7@hhfQM zZ$Mh)_g4TT`57?YK49i(*kX$^+jU1|4+!s0KP$pp%lSU(3=Zlp{q;!xy3uVPNl}D1N0*_xV-iS& zNOAb{QhtB>(B^7s!Dab-fVcj(Il_tklNcVwhV#AAW1)ZDiM6x>R@#ABW%e9Or>xw( zU}p2L8HG7I;j=p3*e{u;;fv1Z8y}sGzqBr32}J{$skDQ2U-}0>)9j+ur!`Se!Nb|_ z5}B9z8NG@AxwLTiC;R-%MbBd#Tz4&9L+&&DmHYV9Wb0XUz&RZ)r~NR2LT)4V%m2la zD5WW&Tne;)W}vsA)BeZ$d3#?%t%8TU=lD#`4D9!$Z{Ar~TH0^hZ+@x-B zIg*)=CkYy54wBYdDenu?@$Gol!Co=VC97fU81stYIg2z_&tU4$JCw}2Zi&iL_Merl z%bV#7x4qrd7Orl(q%lCt$X8!vL{d!h;PL+x7-4fgT)wVl`iQ(1ld|OY$c46XU#;%X zUusuonjU<%>J9$1q9VqhJlhmw)Wojd`bgumsd7es?qXA%Iq{>Q{J=-5xdI}^y^pO+ zar6bxdMbw(t#pT1M0H1glDg%twHBtds-oQbA|$;{}} z{K@IkII}jvAWI>~$8Xy@rY(Km?HGFQIqlZ5?}uLPt1EDg-<|Mi*~MFDzZB)SA<0S9 z%c+QpcRlTBSSj*8zTZVaNrHHXX=_b?BA}zXsw53?o_GCiny+%%cqu1RcY7)CSD*%R zF z{KAbUh1H$U`N5lAezMUo=-P5WF2@upsax)1?_b4YCHf14xTVOvx|55Lcv~7{hFoP2 zpl&fNWRYVBZ%$lABeZE+IOY=@@I~_5xfks@A9$B;RH(QlwHt&`7Qf_444k!#oyb+VrTLY{Fs(y*L z4pC-xAxSK3pQxp?O53&~ntaRI);z;XS=QEKTb_mT`Ds^Q^15Q$q!nDe<#He-J@O_c znR-lec^JnY9V#73J9f1`_YN3$Fsvsq)sf3NCb{S{J)wh+tNInc%P66ddm zZB_8k9|A-YU|B=E?Ekhy$j5nIDtfZ-xmn>Xj(VJT(OJ8~I&;L{r*372npY%mwuyy3 z;p^w7`<`46@=Ql|boXKp`m>&xcp=2ubWJL(W2~lQ1Z(B`DslXoZYBCU2fUlA)VBE< zXTRo0pY13T|KL8nXj{@1QQ(T#c#2~WRv8&yU~o=Y|7wRKlrH+sZ@$gOztk5fSW_h= z$GXkR0Lt9jJQ%J-LDvu`={65$RDF%nrSmb)3EyU-s?{w-Q93zp%=T^q)uX}oSn;|< zX~(cX?DeNU@C|iUE#h*{=Qm_%e95I|M&SCs=n~&*F!B7LmHe9OXZ;GJ+(M^3dqIJ9KmMJn6w{P`eN1ls5N|DoOxA>U zCAtJK2~0OZ`40EJ!mW;=)rbDjpF|CYGMc#&ex@CSP!F&MOy40!a4COS-xq_&2O{)J z9L!wkQO!=Sjei&;e-XQQWp|^R9Vchmlc)oD!wP;hzGkkoE{{yfMNEjlLrlaK7o9KQ z?1;(dL%C2`(fUaDhHou-A>MNza3mGvdZhT*DlMP z26iTuz(Q;~KT;(f=D7%GM}03B4FmQ(u|LDWG+pmdZ2tAb@{;@RCMmOdgK`e%GL=+9 zOoKzS<0#UI7p35?tls6D!_Q??Y%^GBgv4q`BvPB|PnGfbg{7s%J-ZxczbK%T!_ri$ zXTYrH%m!4lUXt{JoAk+ zTjfoVi|=+D4)RHbr0uKpz{lUlN2%wsj1l9ve8_31uJ{eH$A4sLEWM-aMGLD~9SAM- za`*)(g%yU8JXB%h!(~tXq)5e6;L(}}u4ar^9hP$V<(bEPv?3h`=njmM7@KN*^@w%v z3Ir#!$T6$Ynh*Zj#;O0-gV?ekzD~w3ypUyKz zsnW8Ft$TlOx!*mJ0P46VR9<$aF=;PP$~lS%E`_s7LnaNB!i z7kwNQ^i!+G-MZ?Xtf-nhDol`-@eT?ev-Fe1hqu$v-HDNXbsqPjYRIkJb6=IUqnGW{ z+_~|q^S%e%bz!`#YaS68_`(UB%Ud!4sOE7mcAFZtCqo^oi(fj(xsMy{NSFmW`_7rB zWfmrczFbhy23}pb(*1LnNx~z1Z-Q!7pl_hcE0yOh&jCtlbb%u8uM0+bcAz#DxlHUM z4v&`l9SfY?JGB=EA=&<`8{F{dmjZv)uM{t{efoadPm2XAaJBLLcEVgA2C(uEEUe13 zEY;diIYzs8OR4WFIh()!*q8N4Gs7NK@8*TBWv&W6_|hd5{#_~j3s(FfTjNt{Z~Bw+ z-p_jdvzm`luQT$Ge^Ts?=p*2QHFOqEizg8{c5i)EntydF4Y%G%OJcW1zVLK#s{P<> zu*x)Uyrp)hM}AWh5=HSK)%QH9t>p+Uv7m(LJp*f5Oa`L*CoEhX zVnG<=L?sz}TCK!)U7Q{U%_KypWyDENv&clEXp&R-0tX z!?yJ2CD61mhiVLBa^4z#>i5zWEI+;{r__nKVdlkv{yYD{Ix7eG3B6P8vCJG)qhWkG zMt90z$y(6YEP?TJnASm{0*G>)YNHgAqu+2G5Nzbq_9B0zh!5RArf`T-0-*U|t6v#z z4~xP*plm+Q{2k1Jhv#FTs{m~J0lQ#V1$dqABfe`>U#U7C(5EZDl6{iZu?I&kSK#dM z`BpW)<&AFIuYf^%C2qGTQx9;ya;wv@y4~pFsu2f_l^y`j8Ps!|+yoL6)(MO6WF$95 zC-!;#w!K*C;TIhSLao(;^EHJb!ZE`%+X5~W6SKCH%NVsp@z zc1zHmu#QpU3cbzGd@}FHzJD~)MOo%CV(bMkYA4ZF-*Orp(cK&RjlSz;668_|L-%Mt zWm|zIT^jTijC02uA<=Ym!Z~Stvdn6cE28^pENXF(*ymk@LpZb)FBQtZSHc6lDZL}v zadLA~YC!q%w}czcv!Bv@H|e%X#fc*B(ePwjy+R~kN#Gv=O-Ae(&IQg%L8`~#7BJW- z3{L|Oql69eFK&Ue$l)IWbIzOr&C2iB_UTdXNNTH$mJTg|Gg2spG77Kbb`jYu4xVT- zZk`AvUL7lBDuOlUXO@$p;^yu%!xBxpw7k9ek;NqK52I6V-E3-o>8<4*Yu)st#Lgj8 z6?%x|pmAcab6CzwReY!vDZ2#^o~}4RDkT#jTUZ@mHO1g9aGg2K9FOuj7s&S;`m7Qq zg8(|HKW+}8whGbK{K%qa*nNxd&6bN?^<^yQ9_6In=KR1%$>i9S3hYUz_nT3hp$^Rz zm{vdKeeI-_RhMWw1Fd%<188^bCla?hvfE}$nr_IVRoSo zQKWh%b+|M*xe37jjR5P;Ms=FJsn>^C2(wFK0WWh(C4_ubZ81Ci%Qo%sCHIqNF{O9h zVgde28U4DUe~BFtG)`2lh~->R`QYz5YEAf(*C8dI?A~dIQSn}skfRU6YeJ%&N}b` zqsuu9Jwt1>yngVWnA3Y!bDp*Bw+?pzR<@o!Z;HedtvY6JQv=Lx>9{J?7<~89S&U-5 zobK(|G#2}%mHi!Qcjc_jP`A3qe2XB`9OnI`JL*}@A+K}8SVmT~=M@a%SflTfai?h` zl3Bh9+-P;8`>I6l-p?eycoEAwxUtU1PdhC1;-0J0(BxuOv9 zJwTiRj$Uys?eSH{QK8}nP|2s#{9WX4puD&j4i2LKXGl860M+`h|5@ulf=jA8J|c&S zNiKOb);HFv(mi)e*4cDR+(t1?86;91Z}a?&wm}T!H*O7BSnuV<>Y64yWj%Y_n{~e< zSUffLf#j4Hai7GcWYh1e%t^|oVfG5$mJ@GlJ=P zQRkYN@`VXUl2|6I5T#&vhogi{YfXd#3Dq=hJl$bI8yLIRbDPUQ>grg?Io>q58d3K} zcGbslJ-=8@>qUnaDI15cz?$Hs6GZ&ywQ8SB$=rA`@5RZb8pqPO%$IJ#^Za64T7YI} zJcjBF)zrKPC58kQdZx-^U+zwzTQWP*B?Ua445^I&GzprU3bo2K%i=*~NvvQbl4*&A z(b6~P(f4Rika?I0#ahE;JKHbWP+VwuY7yYV(ofzFrx|qv-rKeBttY=7ze~JKF|q;p zq(6xf_1W7Dx+y&P(BVQC2o#Av7_mc;NN_O;IKc;B{K(>PP%j5F@wV{Za~KeOei7zW zeW6;R=R8N`+qWm@Myfoc@+{!dJtwe2%cOV7_E@)IX!t1n`ny)&FyvwgB1-tA4TT=^ zJ;{0^i<(9E3+nS)Hvt66q~>&xdL*+D`6g2`cX6o)e`>|CT&Dt<$-z7;>^KgfkjUpA z&5HD7=qicJP5pLKJ+(-lrnU+mM~L{niwNRir!$BsMifrRbx5q;nZp-YThfvrXQay_ zO};7G_PiWp9Q0Bx5}uz(&C`_c7ly=_|8c@G5J3|3V@*ODxGG(24#T;2x@!5S+8z|E z;@Jo$Sk|o&RrnKt`wsrJFl$TAL~1Jrc(_+Gx1YA%@yXEL@vA|@+)MN63Z6Gb$%GRj zf62+m;f`d0)B9W*QL_9*7C8trp^<`E>IiLz7Maj;lu$VW@V>mZR06e;0LMgamtGp|hZRsaoQvZC1 z;RKFg^P+#gVt!MP**r2j@)DMF>0Yq+6tapQxQPmq9k0|)nPnta)#boNQZ=hGePro+nnKAe%wJ7D#16vB zLu@4eW(J=*!p7Mo7PSy)Yn1Ypx(GH5E^dpUkKBG?_E_Wjcj>L$+)80c!mVmE{Iyl% z!#!i=VWXtBwN*ZGm|^9q=7>!wq=6S!jJ@I|+P)2eW38{fUNtS5WtB;lN*U~zf`0pR z(ogK=K5NGI9B zgET?nkyzut?OEN|mWWp}DodOqe> zoByK0a_k8srppw2i1F(97QM+(sh1A*+o8|oV^h9N8gNI3jq8mgXU}!OhLqe$_^{g~ zGhv0t*~fe`UC9blBm->D*)WXXO0a1>rWfhp`z805c4EvL6Z+=+ua}GD)x(DMCN&`n z)V*(?6iz=O3;g3dgp0>d1K;r8Up}U6ngEm_B_>w+@4U=^r1Ab+%%mftdS2&Clb1(` zwMpB&K1_HrV{5A8-k$YHxI6WaQhA<>`rSr_`Wn+`cY7$~^YSuiiyl8vE%XilKyH~w z5Ngt%G`&1n_HF8bC_1@#+&tVgnA($WbM9C|AG_r+^JZb;hM1NQ{&l9u9svZkBH~*^j>HMX*Tc@Z zna4HbX{l!U^oR?e%zWdNVS=6G!%jWYeV0R=Kr!nK_=-@+AI)8u9odGowa|M}+MGm+ zfSe@uk>MnHT5&L!yjG7g-D|h?B<7sEcwi?CUabwg2-9U5#EuCEZfKvQKf{pZJ>~@$ zd%B3Sh_RQ`(js4n-EP*oqk<3JVWs*BLJ-dp-*wgerxF(Qn3hBl8KSkPGGx`qoXJ?O z+Zkz_?$j%wtdZz46k!^<=`Oz+!t z*><~1teAGZl>2jP`1xWHRQM&1TT{(Bp5&vozG*QIx4q6|6oXh(19luqV!X~_1k4hi zE`6^dUzZH4%M{{31bLk@qMW2-F0>ik+^avxk)_8d9v350sg}fry1^XI$<^_@<3zxM zTBOAgV?wuKlNiG)kB@hV(qLi_y&Z4}qT4XDuxRH6{L5XkyFV&<{ItDJB1pFDeSz^O zcXf4b*-(r=xAmVh50GMICJG&OoTUTd&~X%*%T1;hH4-J55w~OY+c0FcHi{xWB7^1R zDdLG*=N{?Ney7**C!-2)dE>#V~Kpa-oApvMG{3oV3I z2W-BZPLoV#ag@wzy=qR$yvmaAH)K0f>0X!RGSQSK6IC)RY;$dA-~?@Y5E@{xEC(my zDJqH-MO0%4{7acvh^W%z3FMXyk3rUr54bW`OYjB%_<9gz13+~#d3tL;j0~lw!gC;V ztH%t>xu0~Unmj+UXA(G>{OZB*=iGihoLMJq6qs5_SLB(A&|PVF_f6xEDUe=}^?Y|G zFNuE*)$=s&W$s{(Y16m3Ra+y;U(uv2_h`I}EUD64!6Rr_1;EC|aS=T-> zy25}RZ!8on6vEhHyZ31FWJCdk-xek7Nea3bZ1rv#F0EpWQZHl;sr7}t(c&Nnf9fMd zt&BlPE9IXGyE>{xI1Qc^on2V2ihiTKb|Om`7g0o4T4;y^V-x9)M<|kMLL9bKvZe7w zX8=ghGvd#qV0Q9u{@Eats34lkuTC?Lqws_sSEI@Ept!L&Dv6@VR25A={Wno-$&IjzABBO8f)^cej)P)++S&6lwDKb*uc?^PxBqO88M-yZM633 zfso(n1`rzZJAcV|pl^sy>{|7|r(L_VLM{ptI}3tN$FGN%s*20hg2w}$r+(@PDPh7R zhjr&u)i#O$RZX|%ZLlqsHdlNLsTY>1FbZmC6mRuaoC$Z3sgh%7g`=m~COSU1u0LqI zR!p;XvtsO7iL-{JPNK)d*Sw&9b5t%oewuN;%SA}E`q0Nz^t@NK{0?}R;fIBTJKO+T z=?*ET>q_>WFZW-0C{>&PIQD1V?x+y;J5mQ9J?VH16d3A*)%X(N>0!>i1%+Smy3u5; znVPXu&WkJOZ7g4R-gZ^1dW6i(pXKRGbST59Un)ash^D@RTSN?-T{V2wluqpM_WMim z3}1cmf%j|MmkTltUiVEXRy*G|%zW+9Y5G3x?UXFDE6I(+J-C#Bms<2W zEhG6>>T@7Xrxkk1_uT_cCf+>f`XOIg&8fsTo3jWMBYlcCBUzV8jhJ$qYgB7)Lc4n| zYy|Z7!Op-eFx+kD+$u?3=`*~~Y7I@5SodWzC7evSlJLN&nGfzumq8>*MD%gKKmA^v zPQK*{4s!ah12_C%ZvBztA4FXuPrvTn_F3c0**IeGxH~OYVyvn!EgvuAgR8(gVY0Dy zwUm7cH+*1KL`?7-=H8sR(5SPBWcGIZsyb86z7tada3GMh-k3E~t=QftLy~;WVXJ%`3s{bw8i;8^`3aL6~bwfP(_d z_4a{n^cS6io08S!^TFizLrJf}NbGD9$f_yO-Q})p%g3E&dvZVq(l3{;Mt+RX>;}6@ z+&0XG*q;*P>sCz;GlhwlpcICDcTJnF%6zayCLpmF?1+uXoe;`6I(AInIp8xPhr)AV z3B(U?KwhE$4I>aZ%?eLq0D3MB(tRTxnRssPf8GQ+j}!%U1~UK(rqvIyWM&tXyqa)y zbb-R;mI|UI+r)Ms`H8T~R z-GO=}z~oQ{1W9>~Z~Ze%X;%;6p$PSlmkwD(07s2yt7T7aCJY4MmS>hPD&_Z1khdET z$x4B6@?15i7afS)aU}jf_P3AQ(Jqj$$U-r=7Y%q7QSY0-C3AP)1mp*8;FF9BuY@?A z#~jVPl{qw5;pM>JO~x2!`cyk?UqA9WN8ed@1=~|&Pa#M+>YKC^fhSmP3R8zx`Y7!v z9YxswC0=t7V1DCsVk)}`eA5um9H$TdBPPtyUBaB-6Sg@y8O5$)B!X}IBd4&|EuXYn zD@@m;`G$LfWUAyu6J=Xk?kzWkcsVx(_U4MU<1L$XhM?+#qqB_I1pX93p-QewMHeQh zDA}PyUWG|%8!ZhA$-SkYs!F0!-#(E9zDc+phE8HJ z|Kd(`t$V4{xtqO{<{nT6MpqBLcZe#O6P^sUhmUiO-o=HUy2Hn$8eiMZ40gVB^Avf4x zNBtGH-}2)($`d@yY(h*6s0#u(p8p?ZdZ9EZtI0Q;<3%~qnPnqxJ%kCkmOjv|!`lD7 zRAbI6r712kjLRug=h4@U{G4auXLY{bF8G2M>b?3D*A@>$jJ!mQkcxl-3K|)Dbt=~j zHN38cNEfC)_<}}xo%K4Vl|cR+PH*JVp>o5_^r4J@IXMpY1b(`j=(7079L5f!Yg9Sf zMwI#Z@k3Fom20N^MB*iZL z$KaaAA;!LmC|iRRR)Bt%$bQsl=deddyW$DXzW~Ax`A=rhGEM zOU&oI%jLv0BG0U5k=|NTZMqoSv0NdeE%WL`&<`enl1Qxe2W~&FM>0vtV!PZ58HyFOmfOxMhk$59?Oo}D45jjM)6`9Yu%rq&;Ywl;02(pm4 zD^^J7p!zE9QGh@o4SS~~pzI<*Mhh&bjll>1y;U|F_$dEm=>7`_#*pW!EK?s&b+dJ` zf&bF%mSmpg`+4bjrG)HPh{-!bEj1M6o)u+O5ZI@v2gf8Hyt6w&+6|CY$CE4lUER z0%GwFvL{%Tj2<&Q9hTGm3e+&Vd4a0>^a25!4676H;{Jb9V7W&-=F>IN;oe>ltbLb#>j1s+K%mb zcJFU--`MOuagi3v>LduOKyG3QY3XyYgr-Q`3o(sC!<5HY+sDeRTCIwHb{CW5|HyjK z`A=x`eh%>KHX)GkG9Hwjvmk%&f9ozf!@$KzJH`bnHM~ca8io}rc=X%*EPwK0rcOhw zpO?n;6ax)pGuawn@fzc}@l5kxyhf3OyLgTRGDYH(%H*kq7q<&C2}0NAai*V1i&yJv zKD3;!`TFoP>cQm)t_)q7YLdUc=zVgCqRKtbB2Jfsp`C}7*T&@VrPpgkzBKRiT$c2r z37nZHA)&j0emxwJI~sHF%p$nOgfH-GP$c|3jM>Wp=4P4UZICM?p1@gseDSsHQ~J1_ z$MoUeI$qRXRoGg4#g#kx7ptB56!N^NfU0*CZdX zATlK!yL@pZgAZ#&!;q_MLDdW(W@S%!@e3E@5Y;2u z&Zs^ZB*K`Y^TttNPrhE+(rXK4!bgvzX|!&L*3*N06y&-=ziEVgPfQYUSQ42QJH|YC z)q>o)#t>FCuRviZubs@_-Tu(~q9RDOSye$fLMXg+zOAm!yy_Yk4>taza>;3%W_O1w z9Gy%EaMrGaN(qnO1eX-3jv|uvCtPes6VQ`_wP7-9xL8mg0I^oD)HmmIGZXCRIj%iY@OJQ%E(a@`}}8!;mgqbw4K6 zu9k01Vw)og0=3ES0BY;_X0BNwXN8@W@N_QJ2j(^X&}s9CthaW8h#%nO1-Zjwi5GAn z%>bT(Fe@gTrK_z3o05JQxR6uFWoID9ma6jrr z>7AV>;C=yePhI8;>!cu*_aiXOp4+S|%;8^?1cm|ts%az)BoRR!{}7)*u`23>?%HsE zK)z?b>;+WyfotsMWu-8Cw1Vp-A-^febY_H!d4hT52XW)K?NDJ@G1c#MRV9gR$sbQ@ywVXBy@=w4+Sl!aP`wPP>#RhW|~_I~i+B0{ck^ zm@tKJ_Y*yS9KsNw93It@Jrec-X^-p4b$Wlexz??A zqL`>W!TyIgu0N;tGOH$)q364hN2j;xmZbH~;szk=@U^cFdy()Z=T(1|hy>}mai=lG zwt)AhD;0c+#Jw>8oVzhpi^hu$CgOYK3ujzm_qFQDMoAQm+~=!=r@G78Y$zmdu!1tE z>|sQiqFx#o3Rq;V_)zO@FO za6bK5QzXZ$Wa<^({XIbh$=SL~oxWCyERDZ{*0v?KR7LB_WjLX{(zz^U(MxeGt(*0=Jj}bxRQ-kbf-EIjCs6Pu)}V^pJoe1zS%9d=r0KD5XyL z0H_(~jo#&RI*DqE-ZHcCKLEZ6(WoD^)&QYnYS}##tj7`m)Ly z@%Kcy{p3yRv}oX8AjS&tQ@#Vpoo@1#P|D}*h`NYUI35D7ZbjM#zEi@^Q44Zg5bMMZ zYYZ47bnGyONx;j1st+v=jP9`OvZ51?kbQ3jEmV-UhN1@OekHq%TEgYBql`*#=M-ayWXYPC^J-D|srmNwQ z<2LHX?KdP2R8pNQPdBH&V4l=oH_^r&FZuwcaA$TZAX?i zyDu+UA}hI+ae`CR20JR1@q}APtdkWHYFxb^?(#s~TNg5v40Fv@^8jmk7;70ZmPk_F zcIBe;S5mZ^JcfNsb?+j7dkEw9Jxa`_1+o1rgW0R|VOOx+mD72!s!VT8*`=}# z9^-vY0OM#KjCmI_XMH8a#f)BL3az0V)vqQdCn;VF26J=b= z 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�(gPda$7lH9s% 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 z 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

huw+f$!g{c3c>AcJVD9>-Pf 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

h*u_B;x=di=)zU0>(xmc+r15&h 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

SDd&u{vNy;0^b^#S=&l{^*8nX03qG zD9+}C>dY@d?HbJ7lc8%|plYqhai zL2$ZNdIH~bURq{9vj=$w{BLLo)O-b$qi>h2o68a(mY1tA_$9t|`*u_usp0-M58x9GIyjo>T4hhv_@_`nuc9Mc6yD8- z+y{t(f?gfhH%HsQkh^fBZnH;`Mesg7K_h!mJLW^_@s~2l;*%vy z|J4uUTgL+y-r{*+tFQ9;y>Q|RYXl82V>ERkQ`?KH25+YYId5+~}6tEcKj=V+Zx zIBSV4U#{v0XMlmV@RVzyOd<4=NZI>8p|0c&&D#1O(zgY5@Nwh56w7(`B|3%?@ z*&M0(cH7}oy2Q%fzxP1T)}INt{hB>@tXSH4OkVk$fSXVut=RCyQa8?>?wX~Fi*Qh_ zzmTukyFiML)Y}rrkChj^uQfCEdLJ@7QeVJI!M@c%N|9N;XKoQc}>n`F` zvV~rWn%pI0)6xN#KL(1lnzipqj9y-&u z7;~9;ggA}PlknUnnLdYB_JjsE@TI896({*^&gl~1DqW$KG|EzW!Oz;<9f?HRWjkJ(G!l#w~QU+=8?4&fQCo83QHj8(y zXOIP5y3_!E$8O??1@Rq{=$A0Fxi92MR$S72TLhfgj-W4n{-*7|6N}sTkKe(BJhb*G zoFgSL7WZ)%koi9cG39I<6%B{0o4`3@{N?*GVEo>5^B#!eJg2-wz*?v@EG{mf>qgO_ z8>px!t1oIK=mjUP&oCuhN%s>RJMrp%BncneS2}^z`KThkkt7i|dsn$4T0{wlAWZG8 z;Gq>po%f=~ACR$IA3?4!jf6hYy(io~Mn1wU&36zbcM(}9)XKFq)giBmPp7L1isqj)(S4$KAn4CD-j(@NqP0jyBQus$B8!mBiKVL^J zwm)1uKO3==Qy7Lq%~09AP(6mX0esTkaPv#vg*kvy(9kL&C3~tl`Qnk3tlipq>EPa? z?JTS2-v)~farG_pzn)$g2a&uEK{pfcl}pJTe8sy_75u=E6HuihHYxl#g8!R+hjpsd z$l~*@$OI`Bcn22BDL&|v{>ddDkP@y|Q%k6n5>h7QPtlp<^FDc68jKW1`7kZLF+!-BElpYwggjIi<;|GXC#ueNlAX)m!TVbF9;TZcG6WlhN z#qWp$c#}y<5NQ2E`0a|h9rsx`F$?+1D2x>%77ALhHTVx_7}uP}5Gm^;Y^qW;R#!?u zNJ$76Cq`tt+>OG-BQWLjwVa`$&0l$cLY|-fPD-8!@~=uJdY{PQ-@1-QrBz{hE-diL3b~r{xt~_yXz7(Kpiy?ileo}@( z6g^(%cq$zLUtN+>@RNAww{70EWcF+5qYd?M|3PS9V~# z{=Cs}Bv^y$zOHNOQ)03feGMqB)K&c{N+VKpMZ(OO_Zy++G z0J)uHB7xu7*Z@^ft^<641i?4Q^r!$`5Z-!3xD5OFvvayL(QniK9lLV(UkCPj%QYOx zA-+KnL9*2uydAWj_uQ4%SmJHLS;ORqo>2Mrtkyv1pz%IihN9H&1gt)wZWrTcyy)0O zb!7=U+2@U<5c43iAjN4?Ao+L3@t^Q3lK_S~02rUrD{rj-GjlpN`*XU+lm&8yBN(&9($-})4^B}m z>%*4eo`CA8@#aX)R*>mbD=+%Iclh1BXWb+<;KB#nZC&s^8S72VLc&>5m6EYRH&uvq z>bhm&-*^q8%5d=U0JHIi8x9FgT2Pxhfv?!Kq9V>H1j-cM<%6Pr$^j6TPy9SkEXhEz z5+>Yq(R^tGW`hL{EsHwN@_qN4MFxKC9^MIMK!C{f@7i#VAu@jVehW!FQ-}9Xp$VVM zae7LAM?YM_Zpa86MK!7)8?rNQ!eF6a=HW+Iiceg+y+F)ASk0MKK8&EkeEqJQrCYl; zu%M#cTX>5qxOHs(7$jU^t(-2oaQB~>-!@n-mteaN=`>d6fi+jcya#7joIH~@)sQj? z5O#sAD8RGA9k>A+w|Bv!Z5{3#G$#yXasf*r#ih(^8Owu696Ruk8T;^< zw5qX%Ou9U8Y}xBlutLeqgHQ)Il3HL7pbB8^@fM2ryE9M>i(0k+rdz{2WtLY`r9zSu z7vU|@S5P!cQOybHF6M@YkSyaW%{ZYJ7mT(cU}D&ut^ z$~j!JDQoe6>kaT#o$?pWX?6yQa+mf`nje@Xf8qfVpl%8F2f-ebV|-G0&k&FGWkINt zJ%8bdv7-J7e$fRh7yq2af@MlO)I(0w0o5Vx?gqC8gtp`k>vta`scy;rHK_=hjxco1 z6cAaJ{??=@C2^?SI-eM4p0w_xOG@-B?j}%$w};{NUNwjgkur`a84W%YvME^=x{P4x z)h*9`iZo&bMJ&XvU_U&(w@9k0t9qFq=N=1qqk&+F{~AUh=9^_I_Pykrb%7<%MeKKe zkMvOvL0!io5O;kLzOvK)U$x^&g-49EvNaHo08R4=@v}^6GTve;t)UN~y`zWLc-gED zJ|40A%)Yg&-K3NW!DGoweGR34#3nHz@agGDy=B%fTbfS5ml+=+*pO6QTQgfv(=*4r zu$ij5^c+@tQ%L=<{n@=*u0kJdhO2JV9oLMvDH%R0F0?I2+&ePM$NC6j2_wlhhk4NT z)-RdPSl8!#vbG9dGWy;H>+*c4s>+9x`F2bNvsr(KXh5K^ zK_eS~^-aG6#j(E8^=a{2p>d=IyPOHIW8LDMkSpQg@k4dC}5fBanahl7@qW zj^zO?Gm&`F{1*^p^Y`|<^q(I&7nfSp2umi(;6&C2xPvH`;BNQP6OhS;A_*QM>k=5E z-YD~`5PKsC%UL^V`@l5vywf!(KmZuO^#w!BVz^a7^c%@`$(F&wzb@I{LM9FR!RL@Z z8*BJO9OruQs{;uet!C*>BugRRf+Cpv?+if4N}`{t&E)uwI%62!y0miHI9kFpNiQos zgxo?1A~P&E4bx^#+b+FPD$w+|)5a0@-Fh1hqGcF$M; zk)bPjlahGow@@PEz$oEh&|pGh)`~3RPCB6_(s*6vzM9nj_ABMVq_yK>01&!fkaq*% zp}rNU)v%O+WfsFPz(nLpCe4Yj(~1ni62!xaStwvns=f13Ob`>ZfQ%xO+&89bPUVjL z-%Ia@f(Nd-iCC(LT!>$$QO87dis+zHcsaDX)8+UXA=P=u;%}=*ulU^MCGx5PvVRGj zB?YkB6wgm3kF=?IzuCZ&qKejp?sz{N;Ts2BEe>RHWoFy{67>!dq+_($hzDaa)O?i6 za()cdW0gt)u#=DDA>@VyT*wjr1i&EwSiT)*SZXG_m6e@meu~IVwaC&Xb6a_pJA&_r za2xQoxZyrxo_)Kv+TZ}M>t3ZR(Myt*!JrMj@$KA#aSd{L?vC|;Et@Xu>TMNN<3_Eu z@$6Bd$*S>s&r5>e>5U#EJ8=SfH0b)J!S~}ct2h}Una>#rPqc;gld2y~?nACIyr)qi zF3hS2U_^!?v@al^Qs)=QhMkQ|2|{)twfeKVouUxTbt03?0970!T|!a`@Z^;#;{JRnoWYk7xeAfYxU-`rH?p%%G?t z)`MGa%32L3TY%xImnI?t*Xzljy{G8gfCsQPG2&sTR-}IWULlynTw`6gbUTc0R>>g} zaH+;p`x++Y2LwCZOeL%qdAj?){O~t4yxovr2y}PwkjDYR8VWWp4 zhfD*;M1ae@MbRq6!L66}1P|R}xLDYRjI6(klL)HRaqCb-%Kx}<`YSa9QTrIfHfg?` zz1CA2$mayp4M!lkf)`xjArqdS^KTra)ZNj8KWM~Sd6lm}FnEg`%xVJQ1374+4c_Et zz}KO_x@XBp@Q>LYJ{h9b_U&hg3-~D|Z^QY#z--iB^oIoCF&iO(CP#noK)scF{QjCe zWUNMrcZW;yHiWD~H-LqLXt7k$dnV~t_=wa)sl)&t1+XOZXM@hjf`sn&JS3={keK1E zCSdX!qH_MW_7zpIoH1e>3eQO5Sn={CMkM4}kZhV-{R$jtH%0>vQzX|hPIQ;-5PHy+ z*|gcZ*vxSrugY0+oJxF`Y%o@d23Z?p^p6$P7A^huF5WXkaRByoINCn)6Fl?H-b2bI zKQ)+-92(g<9jSx641>s=3?e4*b~Lv}-z|UF*q&_T#l=XX)pK$XikF*ZTi)R)97e_vFFSjj?W^rBn?xbf z{quZWV@Ei2#U}1UUiy=ShSoe`B8{Os$Uv)6N0>2zmW=09GuL87HbEm=4p~LIL4add z02N0|fJoF##OX-z-5Upu)FHo-sMp-l$_>+%Cp)3XhQ1IRcsx@iU+s1)%aOVnZFnV5 zxWaq~Bs_PG1l=qMC+hQ0meNlj1IRuNzna*(M*#vfHC6x-igZM%TI!|yN?yqTw%d&q zx`oDZO$qsd7a5wJQCYCxK)2&3_4_gc#>C@F?7v0{a_39OH%R;RM`I{t6xqg(krCo| zDVGmDhWY4MH5uOtcBy?^iTd4J)cZMH^;H%4^jjF?8WCsnf`+AfyKe3lQ)9YpZl%XJ zF!EHN6hJ8SaeQ4qZ8$87+C6jE98Szh@INRw{&R;jTTKGUH)em_n@x!Zjs) z>UAB>?w%zVU&u6Y!Q;veo=haN5F|AG+H+Epd!)V#%zQO5|41yl z_C;b*Z)^vI1EIL01Nf_ug>+c$pV3HbKR0Tq)h>k(LAgi|2&*Av>DktQW-uKDdH9nI zrU$l>@F6IG>6h`nkmhtE;GbbnNuP&3{X$)8F_H9ibLPPL(5};H9zm*^{YD zbkFGotO~lBn0>UI%yd(Djr?@QYz$6CdTj} z7zSy{bRTT`0iJ%|c(JFtJ8`ItNY5W@<|v)8Zt&1qiL)g zbg>bI@!VLlucp6Vk=AyW^~e%OiBIbT=MUNOSaeLzr;{bZ?{DXyrgG9P*rMycl8Q)h zs0rYuky{|7rYarjFg-)VueamL;M4Kf%5gT>4!99{4#X{*D?!x&)gy)1u0+kY4($Dl z1r^r^QCyO^91>d!_s1Neblr5Op)>&Bf|;^VwE3SY3q2)6a;tg7pjI|S107WVS1G<@ zC8!B`ELV4DP^2A%=y>=OWkag}KzlYN2;MkkBG(cq-2~I{nSrY|mreNS7pnd-<$(cq zHpq?z7?!qgvuC$U56~fLzHqgp8dS_@BE+I-)vX`ioDYiyHyfFKGRtftIYfz&eot-W zA&5SeJ}Cb}TZBAVkP5W~cljCODI)R}9n&#EjYamFj+yS}&3##*?TJqc`$)F6T81C$ zeJhM4k3v`loRk~6Wj}RMt+hj1O%v%Q!v!0CV zQ>_CEh*tb63k5=G*B`==MC)gaC#;j$ygRDTdoROjeq6XYb3+f*XZuKFlfnil5*Ovi zm_XIp^T{8G70x!blX*IoBj=QIkMd7%4419+1#s%bxs&q^qZmj11+Q&!WvH0@96Bt1 z0|q^)6-Byw)g&( zFmu@r{njY|tKQPxdP>lhL76(BH`L#9p{r3!*RT{YW8uDHV{JFGf#?HISIB7AYUNzt zyg;dcJj0hAf^TR|e@&tv$i$_w^2%qr-V1VV_B}+5&1A@sGD}@Ok6@h>si(;F(J<*4 z66Nb=hVuj^RaJgIL4}IMX2s@VkO*%ALXiVNlOt<3D7PMk$9gP>(;Sm-<&>^fPQ9f;OQV<+A^8G4~DAk3AXMe8bR(%{Z zDidR7(t}}wR_d0r0tmE1V4AYp4@xd8)J0B)0)I$QqwyF-35*=TO8WJ>!+~t${cQnC zDi|i%qAw~Fa9gp;pf8CBV>p0cIRFGgg>Lg*)#t3)B*p_lONdQP0#*2!rrtmNoF|JF zH{HD0?JB9F_0sbn8VXt+(pP}|$4X^Zx`qb1HfCCJT8rFkmu8lS(mIH&EPA+aFzW>| z-znF>G>sMm%^d~HI3zFFNZAd&|zIiyR4T87;r=`HeCmz0x5<*7+n z;3w%|QnS(0Gz|t>CSuk2V~g2gnqh1)2)MbRwW_Wxk+bE$@I_D*BLvw^NCjMc$7exh zQ<*nXYp%8=D~$=Okvhg5fKu2Xre>A`V#PwDR`rzNUYNAUj8C@`Evf(~ouwLogUpL*~()rXXxr<-F-;gkr|U3Hu9Jh61I z&1}u9S0UW8uN~RqZ0VkAO?SPQM;otK&E%3(ltse9Q6HYAp9kIXo;CeJpF1RPq=5&{ z`0=?0+=AKk<)o$0xDK_4LaJpkV0f}zTayLuO3+6Tki<9h0p)Zmdq~!&%z4tS#0`C|VWy`MYi^^7GNg>e3OEOK~POe=3=3HwM&LLk6zN}x^<^A;Z_*+m$c$B z%M8|*=H6}z-B41Fx5V;XDB`W`w6|5-@hUD2TMoOo!1NKSs$`!3EYxqKQuTKH6%>fK z6Ib?n3*BXt<|;%doc4Tbzo8s^1F{BDZi-d(0`_isX7DzY-;(B8GT?Sfwf^E$#olj* zQ6r*h8>Ss~MmcgLVw59yIZqPU9T^?j6nZ!m;Z@O{#&dScUq{(KDCX=?=*aP0m1mF; z_c0U3YIrFyqGnz3+sPlJy1rBT5W;IpG=v~A7xN%mEe)ZwHllW=EEJ(=a(0=L=vBKN zxMwl9BaVk#w7yb5XNJd;lk1O2<@Nxey{z7zhHtc`#Um|Kl815A==a@^Jvr)-Uh7LR z3o7x|cB*P-7d!uukXhkPU%(#6vRt(%<@+acrW|FJJ?&wMr1Gy8UQw#Yq?o78d_v3_E0)=+_s3;@O5gw zBZUOHZe4M96OL1%R$uUw#Tpw?;F|*D{VR0?;bZF9V=36OHaYvn+*0Jig6vo@MET1c zeAf%WS3-M2+f;7tI%$k{>_f15V<$xtm59H=1FF_5d9?$ zS;T>YA-Yg;?6mN8o|bDjCjch;(bmxv`Ym7mlsqR=R%WT&h-Fbjg6rv&2wG+ztC43V zA+Rprif^`gHr_`kjpq6@@wS`A?-OFvG3)^WFQEm$Y3{8MU43NcadJL`IVSa9TGA0b zd2gceW##Ix9`GP3l!{iUd^5w5I$ot;zBeqy;vuqheJVwfS<;;_SgM4whHK5$afQg_ z?0*62Xi7)Y)P5=382AqEZzh@rh@ihS;lOy(Yw&Fp;dBo%Dx}|z#FzoR!!e}-vopAz z3X{%i(Q==y#l~a@lzj8`$0VgGo>TPvd*a*y1$X}0pzH%1Ngfv~5^0LG;S13EFg2M+5K+RY78Y5) z(EWg7IWK+a!1)&`=%%Bt!vfT~ICVV&57#c>hqhUz=cu#-F)ir?f5Ghc*DYl(51iKy zKE~JCEY~?Th9vs`C9|>8Pg+OtWmwqt4$)Iz-x*NW@Hoxu^3j80$UfVkd9liHv>7J2 zwV#k7`V+};WpmJ$b{OyL+}}9qbAy%yEm)qwKVfj%tq;GRZUIOG`>WQ7&>r^)se zpBDl-MG!&{IPrU^l7Uh>P-D*iOuHf&tdow967eW1@9@gLDhBVHLzC2-ya6Y$ff6Q% zu;t7?c;cW5ds(Wb2@LT_QHpD<`uHe|7D{F06RI)wd#o}gRCjW7-`_kXO2~6~;-E5k z46xjDf7_ofc4HMNs8uKAzE7jk*+XxAN6t!8(aLP0&L`7iIet5Y=y}B^zm}Y3tZV25 zL&SCt4;zmU2v|aj#jp;-Q1FSHKqeF^q6ZnpTSMgLlo^-K}gvd!A0?-fb ztdS<*=0(PF+3i`5e_j??%EPh~7al(YZ(Fyf+fthNHhw0d5N(z|$#omV0b30$)n|7J z9^YRqNT`N9($Vyk5SDXM@sI;v*n}5ruQb)(gd#4}CvmFasLc#Zf3ct&L%z`7o`aa2 zvETup6;b{#SD+zenPrUiVQix1l-f3GVVMtj86=T0MUYC)0K$;r{6n%nH<{NIB1w+V zDqY3$%L)p>9&H(yHBB2DqhuLx(R*g-`nX$RRyP1t&(TfMT{?)TjmVBawDu_&r9Jl3 zr>N#Pg(9piG)kJ(mGbMcx5a-2A>ioJ#?YXpWW_*~)CHTW(bk|Wsb!YNRedET_eV1~ zLPf~&n3QzAp4*|wU{uASGbt`$U4nD+KMAUocit7>AlUGsE_(8l&SdaJwSk3#!cxDo z{74Zg+3KFxgk)A#xF)pP9C{3iUfV)Gizx)Gx_>A5XMKbVQRTz!`;VrPoM~2S#hS6; zHICD))HK94O&3nnh5Kht0H#2JR=!$z^x!o1IgNd411`I-X3x*22c~)4X;9i^|L`>S zIZd!nmljNy7EITCM0{b8GhK}HxsT>_G0t?Al+<4L|2^#U#8n-Q_|yBbQ1D2TN;a?8 zWyx!Q8@6nP3K)QxhZ&uHt)cy5ftlVhNMu@L9JtX!31+>_n9c@(b3X!92Y-lVC&lyAmp6n$|H!$rQSJNO&*TCA@9T zejO0{=J0TpMZ{Y6XuNMP0-Ca*C>Y;3;KPdkMO_chn_p{D(jB&TEMcL{gVaAe?|P4t zcduBW$$q#Qr~2|+LA0^r4afijo+8YA6|rj*c?mlV2?J7ll(R`k4+r=D6`P4PUsuWa zD9S^aaQLWf#mlWw8ve>_d(>@<>P?_C^o-Q4%p?2Fkc>;+eLhQYLEMDCD7YnfsKQtq z#UZ_U)!F%KZHf!>UZOiD#@A-N?|D^wb+{j8B40R5eXt)W$!+F&#ZdV$o3Cq)x6e(q%cOATp8 z*`)LaVLfLJL`XZ4CUhOFX%4#LN^|e`^%7o@&Ckf=7%62AVaAVBJQ&WjL|%?>#Yy;GGpu-3cMEb!WzaKEuKgr)EcimR=k458XY~kWdG(wS7$-L5`c^MQb zBqQ>`MRw?o`Qa_!Z!oPdBVQ6TRx@`(2=S;9gC zD(L-M+a?=`gHd7Lepp_-)@I-j-@$T?EI<$(KL19efO=Fv_;P#}7d-{JNWjlr9KKBsg2Vvh-h}HIwzFnnlY6&Ne(}V^js~ z4+1Sq{WfOgNQsbv_&4zvDGU4_BGyT_<#c0{hdn_&;Ysy<1aC%;D{BWob zGDA8ZTVfXRxw}~BIZ!swjxLYO8lP1l{-K{Cu$4c@KI~w)~ zd>l-E95Wd1tNcK+_3LVgU-DXR?6$3+{r#d8tfdIJk1$)mO!UEWW51(+Yl46KP>o)5 zx%BQlyixVwTrXxr{4Zx@i!oZUW`EpNw-J|Ni2bCQ9mbAt z4|QsyT+ZlkauUJc0~TObHQs1rk&fX6 zmCQjk&|F~Q#o9gcOLOZdtC_Qw>r?}3W0!k+OflrC;% z3ntjx2?Z8l=g_zu@UaVIxk;L*E?O?&lJe*~X z4X8@Y$TI9SX1%bL>=NEu0cgnk0xZn}!)F7^-tT88EK86)K)gE5(Gs7+qLdrCb_BWB z_*wxeO;uns60(ao(Nz5OQ$k>;iAHV7!cn0a9d^hzT#z3Tcq1e z*p(=fTUDt%dm!K-xDlDa1W7b6SyeA6TllZBeBjD3p>?KcRJzJdC0}Z=_rks2p%&1| z9r78f(8Wxya#t3-Y(h?)fC?unQ0JhSv581D0CJ}yWdCi(+!qkgr=hGT<}0b%td!qn zvIPR8$nv2t5Wd6%yPi}Ork4icTz+e*YHtz;_@|ZeE5IElY7q{?SqG3cj*<@_d=nEP z>edt9NKdBc8wPOTCI>cBoyb8i8JTO5E5wF>$_?7ewZQ}-6I-PS6#C|pY`GHa=# zGO5fmRjq(kL`xNrAt*vbW)PVIsiL4|lFA^n78I>af*@lef*=V20R;kqFeRWM0Rn`O z5Wam9)Y{(L+unD5?^^F#{MjW-c`#IL#LUux~o5rEG^Ue%w71wC$2J+dG zhDlIZd6v5Rkgb+r={0+lA`n9Oj@mqt(hp|@0JKQWBL5SjUn@w zgMQyOAN|kqho?%Q0TL_<`a%YK8V}^vzT0S#wwG0aKuIM0GQIb#FTeZinCr9E6-kKT zlh1zf!d||^rO#fot>)`rI@A6PIMnYR8uk>x)VfQj9Mb6ux`d$`vRbBIZM53~Oi43u z61(X@VA5o44CeG){8OES$=UjEoZoPn&2lPTYeHP!*!bLT7FXSCPz-GWi+ajsy6$n( zTblHFPtKE9YZd3~56N|r!WVLSyhj%8)VxR+{EC~$Ieu>{_2*6$BtBZv-h;iSuA7e! z(mfq2-`!RcXvYDuOpm+vP&Tr!dDU!M%(TTmkLfxlgvqZ8Of2f|Pto^>kzhyS>D zn1W0~e&A=tFrS^=18X;2$+Onx>%eZQO~SSK{!zEi5=!H`Z0OwX#J~=oSfhevP%^!{r(xFdWQs!K}CNA23tx^;zo)UOiG6h-u7JF-dU843#iO0D(b>8yra18J?+t>5dT zjFP!ECJtFGeH)zPF2ov1Y;gXPWHM-{vtpJ2e>}+B)w(q~_ReN`Q}>zv(paOTui3j= zhvbYT<)c>Bn`EwuR3|)!Pd1Wd5hMyMG+VbyvJzvBS|ZhzC7iwQi`GY}|NKL9V(ga1 z9jzOj)wPWz9qqG@uHyfUQj4aastVzcOYxEFKRabPH<(OP0@)<>P%h;#!WlmV@Bs=Mw%y*79@7|LLRRJ#oG_#=A}e9S4G$ z2THc(4+F0ES9h<|_1`!A@f)c5-Ug`0Nyr4-?v`>c&08U&ebdIXdL^x-+ucRh+ka%7 zRjwVT8_3!umF5G5t$sT*Gh?0VvXW?TM)CJki+gUhnjf|v9Hm9?U(94sGkhrzMz9GP zu5+i^Ef?{sa;P^<$H4~c^O~)mwyqPnnOqMIq3bb*Jb#}vFBqe3J1NzioucWLi#&41 zf)yFkef(c88a%QO-f}O7FkR<{uA9vUn@ZQnxjvB#o^Ao9!lO6H|og=^7cu8LW?bh3BibME8r(e@1_k9`EloK)#B; zn`eZy?D#Dex^mDS)XTcG?`08mR=LRdJPGRP!1HFDV)T6IjZH?9c@b(K<8Y;BWw?<1 z2#30P=EAoW9c?lRFq}1LR6Da;PpWnOnKchr$&*|j3u^>S4Hb5~ zS7=aW&XF`a;&jJLGue#6{uk?X)BOjo(${80HNl8korl7|CZl9%aPVLZ^0TBBGrk?R z7UMY1IK7Kgr4rpAJ#WBmO~n1!3-!HznyrU2O3#vmdO``?tg&SnhYBg8MoN#lJ7uE9 zyX|7VQR7_GDpo>7M_FEKNnHm)E_Vt=SS2PNKbg5D&dQ;Et8ktB53@=0dETwB#p6bY z4O>}^=G`F=`xpdKy0S90w=aFF-wJzNGr7_VEl+xVKi{r*CeJVaph{U5Tf`A3|MR|E zA*c+vo$b}okL;$-4jw2-tk$dAQOG7mO}j_qSop;SQnh$(5kYGHmj z3@chbJ=XvDK+;vTLi(+8NoOR#<~?v#K@p42FBqu0SVT%Ld7ubHL% ze8ZWw>O%4)?}5w7>drrqLpX1U^#-#KyrEQ8OSJ1pRoU~>4??x(L7;Pw;#sqnW}Y$s zBl9u&rHPvF>lb&zn6c}{Q5Y{~<`bJBe8;NX=0qly)y9EZiWPg;!HqHyKoEMkBQwnBRMV2xvMZ4@jZCsOiDJxlCl z1j-dxSBeWkr9}6Ow(l|cfd-AKjC>egKT%$q)O3gotwoZHOxI_AL{<=gi9H6FlZTd^ zmiNf5@C2BMkBVZ$Tm~h}j^`!0Fj&djVTP7smQt4TmWq~YFcOxdR!l2SfM{RUO{&Yl z240`URrKccB>(dR62HOXu=Jm9G1dx4^;j@cA zYWmbts7$DgCsrhu6U0)s zxVZspLr+c9^wkMRpj2X47z@uW+F)!=be#b~Rt zLmTvOMapWFN6KjAv3u0b>vJrR%RK5jh4|ghJ*&mGoP%S`&BlR2e$Ls^Jkk@Mvo7bW9ON9znaN>Su}(8;^fFoLjcQ`ehxPXP zYP3%DJR7U76k@KWpUy3A-+n*0Gg_0cljWRn`JkIe*B<)uFSFKK+5z2r$~es zq?P(`@?giK(yK?V*B^oz-G4J8{{iqvc%>5$@3NySmv)-!D6QVoByo`~tu>;{{Fy z=V22sXfL7{&HD88h6k)_Hfa=YKBT8Rx#lHoU?;_e3T)I^H-l)>p#d-&(nqGmZq`15 zJJIxsw%ABdXm2>o+UG%Y2Rja#ni0xk2Iqg|rte_{n}dL@D9i zUkM8=>SDa<5pj7^oR>MVPEAvlLkdO*Fjm#aWwsmOxD97Bl(D-wKJre|I!rU-Ej5E5 zW>M^k!l$2iYZxA_F>5&_Rpo8v)|l*g{i?@yPR?}GR4h5;6^DhEF>W?^fH~8iO%!sH zMV(JBK_{v4{HV8Do|@F`Ze9!qu(b!1pqQaZVemH;&dv;IHyDGhWbeNs-32qz^V#Ei z&V+DvfF{z^Yk^@WYTP)7wEOxl5(&0Q#?;1i{ff8S32(!{8H1&;Z)mNQZL8>+> zO7*`r_oN4oq!e)`u&7E1flb&as{f;G@bppR3HwmyM2%>okQ}BUHDvx3Nh%n=X)}gV z#ZrMS?gUd<2hnLjH_VvnU|Z=LnVH}@KpAhj0v`$60{2T&`l#%Y!y#>`goBT&@@$G< z$bu>Q4?itUTeWu9p+#BDw*+l2C_aD}|u%OtawMoG2oM!5qDn?7yz{2G)zbu87XiwW;`g%x$*g6=i@*LD2Rv!7H8aW4R(Qvjr^dqj)dc<%Y& zIRyh!MHQqWZqaid*mcG^$dk%z&cs+zvkKz&gkUuCfLcn%uR1;zcoiynvdOz9Atp{& zYd(XP9TB2`sxD?dH@M7oJeNi(&QrqbE$nmT)ovy+e(ldbvpy==fsE}6BHVMaIpJS~$wWMh84oNwVR4Y`P&-m3Pvcd0|dUW&sXVs-wNd2~N-*rAB%2 zE=VX3&mf}hpSG`R|E&G<_DI-E+5_7$?IFD@O3f03_2KzOPij)IpqBQxB2e>ah7YE0 zez3mWqG@NRqL20gJx*5#uAQsC79Vj7dHR6xY0f8go#z4($N&5lP0zIt4*qGo>kCfQ z2rc>6;ikrO=}2`V@+3({XE@!eg0Dype~q;3BJC@dKM%S{VH$fl!$VUTLfJ{hotY7_ zVa?n1AfzVl7q@+(*H`fIsiIzfF#UqH$zu+lY8=AlNjct+SA{3wDgA|0HED|_l=2x> zLh!*5>v0sc&@=txYnwD(fqxh+T>WR+K;e6 zJD&PI6Fc+Sk7LdA$U~Y465O^VTlxcyt%1+Jzcen2~%?VYf?9Kul0tN9uF$eY??TJZhruDHAe9izq}VMfw8CquVwEm6K1qu zWu^_-V`)4NL)8q*CazTE<^481dLOlLHh^f|+X~NPud}RZeF5Q#!hYq2l+w{qTDAvI zj&{q`PD#{*yBK|A&$GGS%8bN_jw)QG-^&;+{JBNHSf@9Ir^nXQWE5qsc;319i7O7; zjUXqGs1iHTn_+}^4*8XSNe3NgYSCHV7E1?9=eNwB2E8HAtvaoF_wW19ohJ3^jKfpA zyFp+U+=piAVdhKr>Q#9W`wq|^8>MQ5GF}g}c1|2U^nM4EpDZu``Oi=9*ep8>@k!*? zv!sw?-&Y69F-V%UoT8?)IERpLWas_93UZ`h;x{!;$ru@6-9wH#cqCd^pKCb%q zmKUoSOEwwl$j=xwUQYPd{3icl&nUU$@pAfonTS{>B9`CbgI0dFN$#ez~6E|LqbJXR?V86#V19aQ4^stc{-cMm&QJJFpQ;<(+?pCdPcr?Nz4B0b0{?Y*s@o0)z&oCeehqK* zju=bw%K3;uX0$|phe;d%74-DiYu(_jY0$|2vt( z9fg!c4Y{5^&4^aScGbml4$4DdtN1V64vnj=*-mEso_dd z=9&|q`0Tg7x%0VXqyngG;`iO$#AQMYhVz&`r>WV4I8!%T8~nXs#tO=Xu>`!DndEjUL=|4$i2JT zvHgaQBd;@xXlLGg)S#%VjAYh5&EXV9y9_T>V$h)(@j$`ZMW+VrwNiI(17_>xaqC?6 zcs7(?7jPlVc~(RYVQmmNsy9X_t75WFDkanbN5lj2@TR!K9VZp%o6d+ER**m@_|DMK zNrVZ*ASM8j`e9N^2S5SEUQsrR9gW2T94BXW&e{(UgPa9q)f9}4_5*7}zVbm%Pcr1! z2uqVS_R6QR?fe;CVBvIFJMOeu05p+{lTdR)-~|MTLa(5Nz8x;I1o}*l#QWhwpTu-|F@?jfA?Ich6h&uYx{U}q2^$>HLWzuEMo@HL^(VwT zadIgOU~#fT8Un%nxo4i80KMgIl{Eovn9Wv+bIB{a!$5}YE@PkO{S?>21CZAHS?st< zcQd&dfKvzk;v>|H(im)&S%d|q3^>`o~92I2P(Yd|>I=-a*_)v=gtQB@33|2oTc+yrO z1A5*OR*KskfgGsE^g`D;Kn_Gex_m;5aIHrVva=@nHG6ZR6dr znKngKWpEG*Dz9>iK$n-DJKPSgn^GNV1|MShuc}#brroOJX74`-Sf4%fUyt8SK}tB1glDta~T zO_8XwkQsLIiX(NuooK2cUH9<70B?{oR!!%G$ z1Z=*`$7=jsYgs*h)Tunbs{8E2Y<`M+u!<4vp#%Fy3ZuOT@g#MjFvRb#&;zJT@xsg)(xFtZU1pY@DiEWB8X_Kue-C^oN6}djg%ZJdI znCH>e8Bd&R5lap#jEHp_>wMryh}%Z$kYF@maPx(zi0IO4%nsE`xfnS^I2Xf&&Wcpb z+4v$l zEuA7Ssn2S7fRU*?cg$c{i;(tU38yttkBzfL3R}*VYPvA0?&RJ6(1dClw=yng&W2 zs6RQ@WBpEmHr*TN3L!)4xDdZSZoeY_mQqqlKtRps9+F2L8iq*3u7<_%5o! z;Z9sjW?kIs%q^ORrbVwiUlJ&*g$Y{}U0)*S`W&Oj|FSZ10PZAd^{D2@KZpOMVkD{A zuV>Fp^GCWZl21h_&xhC|{D4rBDE%^{@05Hmz!UWFeH(FVNg1d6#McWpd`h^U!X&Y= z!^Vf?#Q&53avuBDM6dhUdkAhW{b>Fkt@9=B2=DYPoDO*pQDSFdBKeOD4JysWo;2v5M>5eo8+^VQ zY?_REM94z`0P0m?hh30Hcs=Z_IZPz_Wj`}EXw{RN3R2+X;xVehuMX0(t{>hG;g>6O z%~QV|WRrEXk?$aA{3W%FpswjrzuVyltbR7^C^o67DqZApv``K?m)}AI;~Mm#OJax5 z7zADo{r=(!BwTvSM#*lj?;DF$Q*Ua$q4+yEaA=_u$U}RBKhtY-YdTazCL?H|#5q~C zbDpM(CF{KakkI32GyRz#1HjLgqUCR3T?iTZ(E%UfvL+CYl?80*>*DhZ0GSVwJSyIl zi~^==;QX?XLGg=gE2+9`Q&yu)3%Axg;%+rf^d5bZ4TO0$SBTirQBjs!MyJuz+G4gd zx2UKL8k;H=)#q4gN>@0OJziH3#pyObxc5$o^AF^Dgy<;fYw>iVKgL?kwHCl5(Q$qu6%QZw|7-6LJDrWhpvYFoG zcUI-+oXa50BJQl0Zo>?_zuSY<{)Ddqin9a~x>br#^FKjPeln-_-Ig@bCW#4#Zi)Ly zC!XYm?17 znYZU)pHBMw)r1f?y+MpSfs-p2fK$Uy84X;KX*OKM6dm;k6o+VmpMO~hEr6j;V#3xe z?sy&(=BP7MV+tW#mO`c)XnmYNR!}1XfsEP~k`gC>v7VM{IG5u6#yaG92=`7sp*ew@ zk1!e%J45HZY4e84!}-Cc0j$VO;>80}T5`T6T{nsezdlHbUy)svpZb8VMX-(F-9pyU z1U0A|c&I30S;Y*?g*f_PGpwRg6`U9Yf$dmSES5RZ(C@h5`|64WJm=XIt@H1@AVj#T zklrb60>d;R{~8m{g@>08>5KXh9tNWT>#tX9)-y+*Pw3x{AXFuDry;DjzoOQB9{}sg zlzkkuM*t8eSN{>aF;n%#B7~Ux_)ACRJA@Dbq$mk_c9ISpxkWNgUqV0xaqeOvzcQpq z?JWuNjsx9|z&Gu>OVQGf*2+~?CPfS!CjlO{9#P==f?pV7XM_7m=D{EYyGp8+6MKvL z3N|8bgVUnbZN#a;Pw1&a<Dx_gdNX7;T;r%yuw6_Z;M?z0=vaz;EtoaBG zBPMdaobz`ZX$Fqi68-~;eSTvqLWvhq?~jY;hs<^!3}_S~)1g*qUe;=*;Xn zqBj!xaP;+Wfw(#Ml_3uw5@YFq;GII82Ol*=(E6hmsq56nZKe;ge@{FmUcTNt@qL!n zuJaL7(O<^7p zt?kPQ3BCGBojLBQT40O}%;5Ql=jCII2~YRl=v3e|anzivvMR(Y=-uALG^xzXJGBIx zjd*7Xp2Owtb-diqCjb}fkUa_R4ph0A>WtBOiv0+RC!C(bMdpzZcq0c)3~Da+E7Wsl9W$7b2kv21%< zwmmHixR#x0%TBcaOPac?Qlf5LJW5g(r#H8V)k;_x?J`R4#Sd3+UOXX-VN+i+@}*`G zUEY$x?{6uju1b6-_A7y^5`v@P=Q0S*iCiBhe)Tq@QCvxE7?1cK}DZ!7<5Bki=yf-=!5{@#oMtSiq??5t+U3>MXGQX@A^^&y7gU3pgAp!o&g z8d;D7nu6l*Z=3#h4*JE?ADQa08=fc-MTZT4#1&On(eQ3_{%rC97W1#J1(7 zv6x#5F@du>NQT#C@7ij|S46qsSO)`a@w3mCG`Wj}Rz73BXac$&?Y*Xt>R| zdCryW+-g9px-V_b!_4Hz;q4f8TM8)^b6T`n5LjURdKZXaIgeX&yAyfy*+fygp=Fa5 zhv40qbDa=-KmAB_M(_z8$C-nK+oQdfyzYzj9G=$yFtOI|CG9(Cr$oIGbddclQj9n& z=BFBz<9S5Kvx`G8KCb@&6OhJ8uohqVjon%3LhpHG6C2hy*%N@ZR&?-3JTLaPK(czY=vhMZD*N$xW?jKSom=#o(n41~ZX@<;v}?V_Gu>i9DXF z)}HVfZO*ft=D0_B{+5r3T}4MNx?s`dEDDb31JTxmlCol^Us&^zVz{VKWMFYVwZy^-DRifI>NwussYYtZ=@wnD}{Sc7j)CUE(pj`9YVMB#U+lH9UKy z=#_(0;=N3Z?SsZ0G$txoaDE6F9C9NL9c?4j9#xF<%G`pRUNloyjIk?jl&o^H@|xaGGER$< z(I{EHOU=01IixErqkPj?q?AVgZ9^^GAqo9l*Ii!s3#kul2$O1Nswis)-J3ch+%!6|c_ymslqIp>`Ks3$tRO=F}lf#9rBd<(TH7>UbyQIu@8L9k zcPGjCS5t|qQ&uOZAJP|xW0+!^NRmM@#;Vx0;)z^>{GCN-o!}_^Hn7&9N%%}E-tg={ zJ>rKXxLHK;_R7*Rbw>tW;q=@AiI7ua8<`a!sojcn{)9B*lsmi_9q_7oaySSZiI0vs zVC~zOTF7}AO2~G~IHqFDx-*r@#-d~`r}k2@9xwiB2-Bd(J3q+;gb063#O777W9DRv z1|IA5WaNP96$!PoW5f$|>cusSEGm!1;BCOl7#>jb8A~mse$P+=E<%eIBt=0XToF@D zcY#-R^dHaZ=DxvaV2}|d#HthtVGl0r_Govs=sx(Q>Cg_N`yCWLFkOXmL`3S1Q@m|VAbFFFpWL!vb(*H$JO$H_b# z;1HdzmnbVnC-q`3Nf?^83GZAa_vNQ)pY={sb5EPxG{2f}=8Ct%K{t?u#@_l(|z`oU_}hm_A6nqUsyTj;YIP zQH(og)T|_2=kbGqIumHYh8s`qlc}GNyyJ-Q3+S?XIRXhn7jtN zgDX zr+k+YvY5B#fBHHFJD3oQ+aIZ5ezPg>jiNo5FxHB7;@&;5_^Li_-I=;b$!@O3XcX$m zd7G2@Q@!yq%KRg9aP49c6>AapH-ZBHTaoGkzteuZ=#>tkh$|vcTRR##-BTzhSqsp; z*hy%e-79wT^$v5TKYc~DHqaQ&nX(w|eg5gSkj3=>bY}=#FPKL&nQo-69w3w{#vh z?D+5D>ldnVv0L)rySKg98can_X0F7d4qLuaC8Q`UoU{rWt3W4uzS2BAOOg^$q4k5(5mHdQe<%C(%eob2%z8unw;S_ zjVHj4(8|ilIQfrve`!CJz&kKoO=)dK&D(@>r+I~wwaUb~qt}zE`Ze__FJr^}YZy66 znt|~UGKngq>{!VVgeIu4JLs8h^9xM1HUIP&OdW(USP?n0_@WBqy!mX$`(K?`661xM zsCi9iLD<+>*xorqthj@{%Y8|an&+t%{f%wzL%)6MAS4ZywUqoHVtmHkXmc+Qt73Qf z#?V7>!OrX=W4zv!DN#p^})3b)jONO8&+&{4kB=qgOC=nJ(Y#eqzFs zJ&=q&#`ApoC=o)9X}(rvi&)8ak2J0^4c{~$;XO0YnqELVN&WXt^g}Pcju76A-uo24 z%})t@A7jP&TZ3}XnIx&7{hryT?qC!Zy!kl-I^}4(=N2w}UXjSk!?^0WHFXeJ!^&?s z&5fG>ecgR%y!RFf={GbqWj>0?P!-P$awB7DHN=N4iV)--KNFG+C*$0`WZycEBeQms zY5c%mJeOHR&-R#K_#Z}#JJ?#L74LW0@V7?kqCl~;bur11mF&+xOEES{`37> zVOeEAk7-vb_V7QS3|O1uYFpZ%njxwrt<)t+%iYV$xpCTJe{z(9hn2yDu5G0H)SluI zIl@B3;ys3;Liaz8mke=QjA2^VOO>rchl0(>r&?zn+dFkkQ(@D`Btf`9_P#7bK+{vZ zVQWz34Nvv`f`tjt@Q)|JRE(6k-iam@M;FvE={Dyx&VOqa#GQ8>yX)mh82O4A*-}J2 zY|h%Afnxp&#Koc|vL{SEuUoA6-!2QW(s)0e_e&^h=Q;%pPiGRiR}T{Aj*1bdTZ#x> z4)pk{J2F2sS&mB4c$*iwtti7?pZuM$;13-sO5t@DafZ2=2irm}?QYUyu~Jgy{v^G? zvsP#dw~$sVL+HORZ4Pf4DrgrrtMav9|8$4r4)UHZ{s_5tL!zlLFTg(1l*4}Yd*Ub6pgsl5_$*W z(eOf!UO|H}pUoInwQb{5H{C|~?bzMJ(@n<7^3mGAVi-YGMJQh|DViK*6@z82Z=uw0 zW9^W!C*Gdw4e-XKpHWpx>f$EprZ7> z5%V3^@m4sS*MEGvY|~EW}5s=@*pwhe85dE`_6FuquiOi!kI`JqFl57ZqS!r)o@hR)uJ2$_iBs=l|}_E9C$htK_pv=Sr|om;LLeo&02w1kS0inU9Js*GUSQjY)OOkIylN**Dn&-=TMd%k1 zMpN5-&^1b}Bo73EIBi5SqyaWy!xp{`c!~Tr1qo@uwSF}l{M=JjO;PR2o7}s1m# z(BerpHX&>pss1z960#F~hxwgD+Yskjk;K5Q`ClVcwp-YE?WZC}S=i0+&{i^muk7;^ zL-0s#=i7w~^SX(m9*Yg$Q*!CHyi>yw#6&-MEo)z|XhfNtil%O_cb!7ha$Vk_O6+{= zy(cKFI0vfd4{UBqlOpy(4@v`zqf!%nQy_nJ1 zl2K~Vb>Bj2#~pC;vK$N+=b+)9DkHF?f&dIQ6y9i$bb(Jcc`+DJI8C7k0<$l5X9(!4 z65GrStE2%LbOaA3V)FW*hv=j!23o~-q^>AfALw-50V#6%OdZkeGG%y}Mnui^mZ5z% z!&)LVy~66c>Vw4JS4v21W7H!)NuND@6_mf>oh7X-6iX1GYoa+KTTTSrv_ksa^F1`^ z*y+c#N=6EkZcjRNH`a^jjy=cJ0dGpWv|22=xsbk_P1y@IZVY}+9f&vOJm?Oe0ztVY zD#fN9R?RfMc74$9CP^$@aqG za-p~dx@_wr z!iBa}C|2I1IK1JHj=CC#PJi|W#A)cHd@euL!BcLR0*8Ueik+c1XHW%&63BQU3}Cr& z!_FJR|DMC7hu-;?UmUjNJJkrB9=YQ>X|EqVKkd{{``CVVj0`nKdef_f*D+rJ%O0%l z+?qw7@BD01Cl55AM!|B0hbNq1t59>AzOl=hI|S_B+=yC;@!FmCS<&%Za(+0zLF@J* zY2AB=B(!qb)cc2QiW_gJ@5+x@9Dk)6wQVpve$t^14ueP;-4Zfo($>Ffra&;&eXp_Y z*QW0FJd{c&0De%vR8S;*fk=)Dginb`>;Ds$l zY_Y&>3l!GlHDF|&9IQ`-x``@pQTUh*Rji?T18J!KSOWT{$M-O5q%(1%I&b%tjnTeMW^5I z%ZWR1Q)_D0P;b}yZSg3hCG>`0UB%i&{i?Ro)3g4TElkGnHJC)nMMKu+jvj%)b^TOo zt+D=u%vtGcP`mOMh^eVZE|ega2MEfdbp164B(4VZzY~4?&(b7rxHu_8;l@s=B?vN} zy*9R)Y(6y%hChA?!-?q!P#$EihX<6Rh85m}@&apg+0AXwVGqucSkihAti2?3)?jbn z^$hN5rajWGT+3rC+^*r|bf{3{Yvn>P9+Lx4VH0+J67U$7^`U-MOusM*s-Xnd&}TIg z9`m+9zxqk0co-Nm)iT(Jm5tza)2y#_UH*s`5_DsvFK#i)!LMV_XD_ z&r-+?$_=K-%^@Z1xy>O*&%+I*M%CA!$AEm(jkf_WmL<>;=4#X8%#*Kyojxe;r3I== z;AUl0ZT_Ih zQjpR>=xmWZ#We6PP&@BtvKGJ+Bz}V&Gp|PwGmek;Ke=#mGGcAeSjEGNf&D_ zK7>{czPnqe^G2ae!%eo7&Ey+ZW9AKzzaSpgee>d#NlgsN&g`iz(Ojh3{5a?Ol6(K> z#?^xDvqD<1bryZx^ce+C^c*3ijxHJ8UpD+Hcd!0oE79ezde@9}`3Ao4FuOc0mZt^MczAiYc-OjkdAohz zk9v7pEKiH&*kU<2TMjv6jiBkIGGsuPBc|nuX*puzKW@IYx-Lgd%MsJ^dy5xL$E@YI zG0U&BOxghd`ybvh&3sLQM!nWekc{Aqf)IFw|3+CnRQ`NHXTeCpCdZRKZjX9)%Qy#i zJT>Biq7&Zi3z~JUKhgf_cnxBY90SQEq@0SJNZS!_O4$@akqE8rUf76t;03SXtNOmZ zqN6hysYU=?qX+n*+I7Z!og#wvkTOOEtyzVFq$aN)-hI!t{M8-AP}2eM%8z{i&c+-; zQb`%}`d&5x62CqFTdsI%=(YySwTk&7TPmk}@9LUZH z2_!@I60xMJ;6{fAB2@W}8ZUpNQJiD>)u%T~fjvVH8UB(d4(u}$QIh1tk83tX#~ipakSUfb7wpnrTT?)*Rw z_Ikf$$m!UaFXq6RWQVX@-jK9Ym)c}JX20oFCc%`47+(4Jl;56qWux(G5UqYiN)e{6 ze9rfXQXn6fPYG8@_di8Gdp{THFWh*eMeljR0|)b3V}H-3d&=5qs7Xwf_M>=__8^FY zT&(BwJwh5FNh)3d*{*XtN6_Ne_nPS((j?j&dIKk378VEPRZemH3DN~|ArWu~f7Z^= zAybf6hi0mLFh=s3*^YmvD*AIWq(i*mk{tE);TwwMx=X3LrJPdGb7a0E zQdCfS-KitLZxh{BA&T7ghoAn=RMdAlS=;Lr(^i6Oxg|o`LrKq-sS^h2If)Uyj zzDIyw2tm(v|Ht&+%D#)j^GJuln0yRPk#yl3>QTUr3f4oq>MyeM?;3G~O7LBBPSAo| zkeR0^-9Qf_W~tH-lFE>BFw@Me-OC)AD;teQ zppmzG$f34%hL)FZh_1H^!Bhae_TuV36F`Nc3GcM2A*CAIywqzP70#>3Ws?OD>fP$-&dvTj_-kz1{bj0K)8X(rcyG*pKDI^~` znhqB{gRzGejxM)YCvnxO6Y@ora2Pj-x=3f-;H4F+j2cWR+up8JRM4$>F!)B$4mmwl zuYc7BgF6#(sv1bqrK*arX3cfZ0H1nw<9* z*ik%dMaK7~C%)zs0Gm>D6uK-UzR#S?fXaw9im`6-J*kt=8)CAV4iS3KC!7#3o+hd> zdal|AkP<16N-t)Qnv#iaq&j92$t;q5agZGcy)r@2lo_L?nDGGdUDh-vyX0AEf&-1; zR~vsVkBW$sp)qjdYU%^xif>_;68Z&Z$$2v9Vk{qFN85@hAW41!5?Td@Yx>3F3-4}6ary`8?LXk4OY27# zm?`uJ_Xq^dKe6od;8Ig-t)MS1(rC3VV-$KQLu+W@U^H$Bw;S|^JHG`6CihOtC~!N+ zPKL`IH((|;$Eh`GXR>V!ao1!Xgzmr6JRPLZJuIntzPs|_$BQ5@d+s{kWWX7-FtBc2 zrwdF?Mld&!ou=+e;A4r{)c0GC?Wc{aS#}**g|*?|VsN`NJV+W#R_f5<3~Y$bn}==5 zF#&z{V3c$sQxDWIP72({Di8qCedCN&KV8cL8=-S6;HNt0OCjJqZA)aV=i03MoEo< z0@$zMynd^6$Xq|)5{L-+1Lj|4r@WhX0iQV>o*R$MebfuhMZ-qR0m`=1`PT_(!dkng zeUHc%IXF@2x*WD;1f=c_PW?Ozp>7JnAx6I)6D)|vC=Sw}A$_80bAvIe5$l!zA#G}@ zCgAiC2qir@U=`i!1}6?Z=!g^=;ICaN32Yg%N0BbR|2LTgT>#{;{%yH|u?wQ&^v%*?R5A%>*!i}p2o(3%vWBl>QYyvOzyg_H zrSkP!;WyB0o$6X^+~w`QwXH2$*K9)ZKw1UAfNMu696ezlTbL;J`Oi{! zpgxG_FT@6pP>)ei0+)N&=%!Xrqu0SVgq1JwdDsokcJlJ3?n>%P+Ddvro7@|Q4t-mz z*t=S{{t|1n z{3=M<(zhuN`s@C1Ih70!Wte~{ZlJBL-#CSz3q0h)Nx`Q^w$$q4R4PNf1;L0ZyNvTKk_)WJGtlhU|ER3O3+D- z(iq$d)L<4Q0;`Z(U4HrrvCbgcA`VW4-?SGgWcLQPCmw08tYlem6J{pE$YAK&J_36< z1CwlXNTLbsvulkyuXijeKY7Y8{u~JYe-fZ-arqbJo zbTl0!s_kfgq9?|5rM%-)1PPRebfjlr(ML_6YD@LKPlO^39ABbcAq$=wF zdkzYO2TR4|51vi+Y=OFFH-1x8@z}1XF`FmZUO=d%?Dp|O><6Og%1u*0)j7>TV_Q{G z{plmj37s$G*DjJ=DM(H|VTFkH%`z3-PgE9;rQtE3o$CF)4vXT$zhBXi%|mbWVayox z4quUvKBIXbqaZF9u=5M*1p9%#f%yVru7QGev=yj^KmsuKg8^bf5Y@sY{;Pv3xJcQF zo?TGgf0mi{%fSRCXORi*Z%>9o5qXSO%FWpI&M?d=ULxh^A)Qw^UOuWx^_@Zr&jaR$ zk_Cg%8^gXEix6*!rp2-U$z{^5)pGTplN!K8R^oGjuDYC0J|12b}zz(U7Bv+z9R?pS3o^9ku_d5oeA} z&ZeBr|6hCG8P(Lv_wLa8d?%5A=Cs2A$Q^4`#a}5Xsk2~&7vouSTZ&g#w@gSfxi*!^cRhTjSIp@z#(TkEb686D8hmAjpT z#|Smh`IWBD-JK!}1?LaDuGDzW|Mox7FI%^Ev6xTKK;t0`G=#o=2_Y@LQ3KBPH^c_M z{};UgK;Y$THFY^$8SQE_dtIoj90B~colp7PRz?r!-Xb^@Ra{{CmY!;#96 z!$hEO*BRXsZ~gpm;U{h)K79ql*9< z-~Lkj`oNdy8e>XgJls6Z9Wg*o#K5i7Ueea7S>1rDOC_GmUAglpRdNcG_=Ut}l0MFu0N?3&weiYc&6%%>uZ-<9MSTl!XEAFN7 zA*?CC7$$a!XP!h%Y^E~FRzBa(AhRa5PHno&TV0+zr4js<+PWNu6sf&U*Gd6m5_9DZ zIN-zPva8b3hS{jf7WZ+%4LAE{GVX*1XOnvMuS>#3*sUs`Tb2Sn3SQ&n{m+_snZSO z6{pJ6R>#md5zo6r08lX5dKeED1!%V*8-?zH#Mj*$-0Dj&Dbv~;JTIa*MC&K8i5&0Z zm(G((ztB1~rZCVL)p?)ue&++u|0ohF!u?zFwVNp)r{82S0{F_(DyVQeL5OP? zZL#Lh2hisEziUnuo<9J8n)1n=(#Dc!PH00bCe>#aVifM-Z$M7iHB!SXe*vRLgMN{& z=qqv$-#p0nyPFTNP=qc&S^lyd{Dt}z;t`ps09VqO>hdXCwzLE?5M#t*Ej6ioK|7#@ zicP$BNd3->c?iINl58DZ19Ze*YYfzil;5RgXb!)F$61U5?goH6C4ly*Le%=84Y{iw z8g3f_fzH@@pRZ8>rtBKOE!1~KXk**tlEw}I4lU&o-qjX=dVtT-(<%dqK$v{;QeeqT ziNIavB*^*6`aa+IDS=a~ysDe2!V=4>IE04%C0jMB=j%&BM*YU(Bu? z$9jqsP8O02XA5bC%YVU?*;f02j^=+c2Lbm_bOHhJ4M#*3SqKBSOhX`cnS|hzzs6Y# zpc2~C(2bJ*cL9g=6)&%bM-lw+|1qn6r*DZu4*re3GCd7FkiY`xL1tb3ioL4C&{3gYhhrH0StRhBI5QtD$4sdg5b*WE`7kypSXjv z&Elap7IVU*DLyUQtE?+TZQx6S-hqjus5Y#Nidned>iTvR$9ZVl2o*T!@g-{X!QsJz zYhEQ@hv5qBIlgU_iuXuG1C@=sug6I)=upG@vPIk*Iy`PA!8_GZ2!|n`YRk?hoTbUm z;u{R7RPnC9H6#C7>4GvNq@=fGQu8wL>x$JN=gq$lU`gdqMgCZfDq>eJ!-&mg#z=;FFgnO*GqbaQ(1nY$@`pz~UwLFd42@j^sc6Ri1b~QT- zwG25l`0eAQyFxjHF!GS~c3!~rR}DX-*FOTQGdq0J12;=%>&R~vIaFgZ1-!F(b$EJT z`lV}FE30I=(~corC5PV7{n-J?+sp6H|1%JqtP)*-hP)d)%_;%Gh<_?QIoHjtr;=&0 z6h{`n##tew#C8ZL$XmS|je^@1-j~FcY56O!v8Qcnwz}pub1fe(*3L(gh4r_mJ2@#Y z{rIADRtlUW{nquv8m#tCto$MDMbK8=@7q7@d8ZZ^6(}sr|8~l^#2Mh3{9CHsoWXH+ zEV%a1k)HVB^E&pdZd@b$MFuinf3JS04sCs4pU$9wvX(c|{d zQ?Ed0+FOrn+CP4KMnd-RZ~MMnpMY4#q}?_0^71j#_mXO2v9B+$6vw2^&TaLqL)p{c zp6ndp;@ZeZUWEzkDPmp6tUtZKZg#};F*Vl=Ej6TyXe=ZZeL8oV^IDb=lZrM zz9xrGox+oxP~$2*B(URksm(F-C;_{j8)z;Ej`cMJ#ChHxSDx?_ybRDATctnXQL8Ps=qnfoWD528cx9U z_2@f2kl%NuRr3BLWk(cix@1U0Pl;-~*{m?M`5>Sm$#b;(g8VDNY4NDgVA@=vf7;ys z@gAy(){SavFEwZ%?BVI>YlMc+tEKdL&(X4AC$09HpMr2p9I?Jc?2Czg!T7+~%YpH9 zFga2QENUK@=--qZk8Cxdbc;jd<*(Hd+qd^L#f})nD5_61hf0>`bI|U(Izr z$UGq4L$$QFVXzvSGKP0fWR@JpjoMlt!j&$0=B_-dZ_=f0KY5l?LahpW0&(dk>#Pj5 z{j3OL^36pVRNYd~oo_^$`r)7SJuU=Am~zxSO(8BWE~lI5whzq3CRv9)+;E7y)xZuC!Xin>XVuD?H@egg_MH+BnrbSz zNt?cYD=`WCIf04d2^ zkxiwo_>8O#msb^nkFIu9%0kEE)3o*$)FUjDxOxBZfiT7lhu8(dz;OSN;_WZu_LOAB z_7O_Na8#Z98lR*{5gW65n8F^^4yv6e^AC&U^G8(ZJON!M=p=qz@z)<>L+ z#@3=N3Q4tN(SyeNi6i&y?(v5R?Z4-Pvy^i|&23!65>VAYK1e!dh(=xa7agiW)-{k= zfo?>7s{nd!qp{>P@feKw9KE^J{$`~K1y@M5?604P&b@d46h|_i7wPo)sza>IX2(od zQ&LKvR~xHQ%4~~k?s&#% z96wkU0-Q(~{X$6nf>vbFGV0kuU6`t{EIM_-$2(ciy3lhr(X*Uk960jUPmhYgXS5X+ z{eUGc(mkXrf=ffqSle-x0whp(4N~$pT8aUsL5vSa)#`If#)GwqfD*T*&%$hGrAeex zjnnrFX<}ArN@bU-z}cY*1a)vVThpfEZiuAp6>mFQVPp6F%2rFx>fF@im~f(u9UpS2 z=CPY$T#D^W%+mFicbhd8+kZqCEcUBkBS^JID>{Q{7kmsjA0-FZWYmldj1T0ye9W-E zlo0=gCV69+)A!cVC0bYp=4s_Rev#*tXsn?J-LiRnK{9MmM~rt>Gcn$Nb>k<;_=s{eDVMWZL=D9_4NDuK8<`)J~`~)*UbqeNM1fi~>=n~OUl~mc4Eb8BxadmZPK&&Ow)fVfh_Ytn;I_1qu@`0MhB(}i zX$MOi)0cBDV}-p#wuhe`6jh+gs131)+y&;JEy@>P6yGuLvHXow-&ztkscWfmhRorZ~sIc$TU0{W%JBZQ&a{PbIR-1 zbb;vX9BGVxht+Slnm}b_H!VOf@5?eI?Yu*5NBUW`Ce4Rx4{l7f_7CW{6Q^}&fBGN~ zi(Nn$;WpDfi>J0%>PP#cbf?Q3orM2LZCNlU|(0en}PAfNYquss7Y2&or2>|^uj60=MjvPvv-I;aV^IBO0GZI2s4Vf ztvI=l6H8;_K`+!IK_liHJ&lba1C|$RUDnTo9En#PZi;uO&icg2D={xR3?}4?@%mZE zhd23I4OrsJ;>%>O-!reCQ@mtIN{LY|G0T*nu)I=|h5C@kdwi`f*-2$M@QQvOTVXLc z(KMQmn(7u=_RRX$3qgW-L@LXA<71x5t*98I> ze^1I90<(PXRjmg{SB5S6JEwFvn&3w5?MK`9PlOTtGt+t{hc$GkQf|$5%-eYexLF{R z5QTYu771$nc~j8wtLt$q-kBdCr!7JU35I>CmsAsZPi>`}4T!?pUK!gPkeSYnR&S7VIOEy~Rr9_i);NJJGI;QmoOB)%PDOt19ynUvF@Ep6zMTH^l zpeyrpsY=DywM{Q8>VKzy3a#7AG^`U1X;#Q_19yBOhC&@T)gGR)_IcY;l>O z;j6JnOG(CI6v@NCXChl+#IG7+fe)_3D@iYnw^iDX zDNMvx_S0UG;-9)9O~obfHFUu>NAYHt^H7+A7ul{^wSVD#^+ieKI>AUH!F$;l_t_9< za_U@O5j;lGj;*&vvAE)O!O`$Qy0}Gav5WQCCR%iSq3q|~Wt;ZG9mOB6lN+uF-ox7j z_o25UROwr9$LI>w?1(Hq4>8fij~ZUb?rec2CaHQrL`Fk8oCNSYjxN1|K38~>(72;* z>bVtdUt3h+Wh0njOh!Et?Kxg=f2AGK;5;XD7M8TJTDke)#h2G5NH}_aZ}|@w?T^#j zhk-dDBpB5F?qq=Sc}P^Rfo5x1F~NMKTQ=C}qdZKZe-wMXiCre$NKl(?5Vt%z>YVDc z-3>uZ`3+PZ5`!OC!I39fYowc?FmZPFR&%zK$9a?M?9;qSc|jW@m>dw@WVQ`qfAK(+Y8y%{OSp5WK z_O|lyI!0IOV2Wz?jTlApv>`D~pwh*!%b%O=LI{*Lhn#!A6M;md;9g}{3Vt1>as z6i?|IO-X@D#AhR8ul2ZhAl)&l?ln>l2ckvA)b=n$rrj5m6pyn1(&bxF_q~=3-G+pdV?>Qn$BQR4{4rYqB-63x5 z@A2GwiM#Mo#OfSPHj{1y1Zr%zv`HM#j^EDsIWp`1!;k|{xc4y7qzp;k6rYS*!98KK z+oWToO;cgSs=`0!x^>eZKB>Ai?G_FpoP_!)>|LKL-tUiJ-u0_I=nH%NCox>D^UlF^ zdGC3~&sF@iAX1k1_cgYCYJ8Ltg__EvA|NA_z)o9|_oTi&^?kiop-ns3NT2xnVlpsg zE;8Rvkc`YwCnGY_ipxz&T!s-AJRi1$f)`W`N>iF?smutZ~McI&1|$XU;5k9&o* zq?ehM8*tk za2Lcf^oK3a!o}ahlg?rEOV6GzT=`w~x24=btswZTXP*y0B}=^v8Zizq7#>hn`#2@; zu*eM7%*b+Z&**T$*C-I>LpCa-CX{Tut0Pqusl!X|UvotTT0)NFfWh!?YobkOvvaEO`?oGTATxiT6AgUXW6AtzxgW&EH#mblhFsf@XLoT z-ZFleFK`iys^z$*RpgShWZJU@aPo@7sdRY;Pr#V`R$t zk3o&a3r$EVeb*EWWyo-ojuSpbZF8R5rYWSkFmhZ#SZNE{1L54AIMDQ!qQd0I&EAHi( z!zcep@IeBhnx#!#z&QJKW2!jws1mA%k|8|8IxbY5axf}{m61{*XcO#4`b|Xj93yVU zCPiWZ%C<9Ky!uIXGnoAKf@zJ1<$&2pIjdSrB6KV`_+phLAU6>{YhAQ`$_d@+tU!~( z6VK8K2~Fi7UA@MGn0L1fjBa0cFgbVN;i1ig!i6@Z^N3)d@H)ar=A!qw#MGfs8}qnR ztlO&4d{`2sgei4CZtjc()a2@f5x3e9(#tf-ZqJc=Wu_#Q%lnMS(KFB*^(P_~4P_T< zkei_hXh(#hz9|_N6>ydf&PDF8{;)ziZKW}ZeE&TBPqp|rhqiV;UoR-5m2TE-{CGY1 zvP>=A^LS=s1WN9h^Z5F)Y7#xn8a0V44OkGXK>0oGHELMQlHa<~n!#xbr73hkbh0;l zPz!&K88=V@Zt|_JS!q=TrpVk~yNmR+e-^@CN_{U>HuC-6(&!@}Y`_jUSx~9LQriLWcUR z?B~pzP>COXSn{GyBN4n|9@J(eV!5rMc8$N`h(D|-_hmnC|C5Ykvq!PQgt97dI9<2nJ?GE3xYh~Wxbw_SoLlfiJu{`^L6SJTEmCDGbT9?=o`R?&MW-4Ulm~p6z^5ekdcb>^Wo)WH ze3+;`3D|}f4=gEmRRIx25ZdTKE4KNI2a{_o8rE-?oA8_`RL9uqcc-wfSv_ji*M9#& zrUbK&5h(d~d)(hUTs7z%EhHM06i=Z&+&St0w)}l~&td?HGkwBj$@KC;Zk{`lG0UmF zz`AUUq$B8c@9KoXS(EJ815j6c`M{SZm=$LF)~9#Vz#eweTSgwW^ODW%M){96Za5SzE2O6%QNsS@2ZJ3`CN6 zPr$9@apAWRG_Mt^ymw!paYxkhw-5MUf8;E3G@382GO=1b#QUNn_F?NlncTfs)Q7un zB?)r8-=@$TlD%ZtVQq@encqsbmETZjGlv(xoxq)Zq#wGM+7{*!LQW|ZC~C|2?XV&! ztPnw4UDcpgo+?;GS|3d+0h?D>-kR_M>%?5N;Owxgf z+KOGs+|e$)O+>9E`2vxz{Hsso`PESQG!`CfXQPD#5)?sxU57Ni^_>8zLE&MBy>WKx z&dBvOFU^aLzZL-}VM!lm{43tR%mB3s!jiheJhf7={Z@aP?7E+Ymi={4lbnFXqz$4@ zyoFIMwtCaeruK;gC+`4%NUPOE-#Nwa-(w<9Z}nrsR<=C1^n*na%BsVQeMK)Y&s7sg z!jAV1H>qziIqDM5;=LTJuhL88ibvsMKNdQ+vU{+s0iToue!is_d$ktog$pMfo|Sgg zf+zQs?kfx8x_CYN0FILGpTn!J-jB}e^;mVm8ys=9mUMyuf;_NNx3a}D@Ytr%Gt)?@ z`iyQw8dALn5lET1mZ$og0(h9Qn{fOIiogI-@Gj9rQ=g6~tVD$jYHovqqJ$}y;?bz^bO9yxOtvEos|a$-8e5us`?w zU_{+&J>$VkQim~!V)@J)`*tk&{y&jWn|RptyAM9Zk|k{oBc4Ok*N7CI}9({kv~&*4Y(}$bI#BJp|ef_kz)|0dVyyzOCDveKwrE# z=D%w2I#Ct1pd!n1v|`;CDZKc*+Ha36y;PGcUlN;h(!=M?lD#E)gI|ppzcq^tiArm* z8mO9f_bLx?Z2vS#rPW(4sHZD<3vI#bFYwADK1HplKmFm{c|t9EHt!}{@$Gv$n77hC zaoP!=;3gjxCL<*HE5NFEk%a8V*MVF_dTKCzC_d*7t|slNg(z~Iy_=H6RXJi?Y*iAY z#y*{3rnsW1vW)Hei?s69pWx&+=sQ})`ua&aNEe7Q_5u;Nz(>hkWjrn7E#H)!{>Oz~6b;odorw1|ay+P~WmT#tI z?Qz@ymgpqc(HKOEi5-xr^(2Q^rT6yl({4LSH%o+E>f}#rzrB?@A0?1IyNz5dXkgL1 z3dD?->lDr#`<7~7dKU4>-D)ph-5$}dq3h!*IfOOzD6#_|C~BPvC^zY{e89A2!sp3F z5MFc7=AXX7RmI7bl5B$`h?n5>12&>By9r=B7%P0)B<8S|=&v-qXl;mLjV8>m|GcBL zAer8?)%sw(-Z-|g_~~eQn>@8C0juB;@F~i%Kc8qCb>!*jnC#seMpbuHIxA08(i@!< zKRu~sIjfeWf2VDxG41K>9^B@FXiB}t{LAJnf}6k^!rwp5Cbiz>O~m6wjE3qQurxXM zlhtiAu|75c`P!GArF-(g^P(`*QKV$U5viE0k8mIts3#2?pj3U<>qB|RdobS`?v4LS zB#o*+zFJqO=a#kAF5_p9pHPLvOaww_NSd+Fx*UfXCf3&Sk?zfgJWh$ZF@efkKsZ{} zU3SVGR4H-kU2aMTRM_ zL*RI{04aSy-T#hQlfwL1lZ?~ch`8q8TBc-3Xq zuB82mH?uomHs!lUZpSelB4{CNzBKYVTYse7zR%0-A~&>)q;y`v(}S+dkSl3c=uF;P zPK*!3)-hV^h*vK}6zJPgGrb=*Jx5P_SjR`uvL)|xJ+(DooTXXv_vLdwjZ{dpd_`G{ zO$!0#ZOMUJ-eT$3VrC-HGAJPTPgIEv0nZ-`gC(18xGS)3P_WhHcAqV(2fEl_b>(|P zdXC*}SwHneetN=4=V{Cdb)@>^sK*fngsdWKwWdMLVn{sndBo$$9T-~b*c$sJT9Ief zZWP9Gv%+{eTZnd@D4M6-5~z*Z$5#^64svu#`c<3q>Pz3;_{y#uDsQ9j;8He~h$1H? zVVQaC{t;Ka$cfbyy~Hj^7%^_Jb6}&GqBy^??$KsroL*E=lAteLDkpn+t}zl(Co%80 zm*5py2%5GAs)07!ojS)`U2o<`47vv%1pKo_6Ww;j>bS&(NLoJiIQ-NDh@DfLP1&OZ z&B3j}f(C0@TpBf3=Aeqd6)fQ8Mcs${Ql6z)T;)+LrASh}a`7x!tlEe_Au(*e!AEG_ z7H7n*fa6aSC2hB<@AQ_>92%w5zMUBSLNv`G|KMQ*H3S*>hf~CzT(nChgZxv{@rv=+ zQ}MReYwz!pUxaLqbnQSdMXV`by8@H@lpt5*!SK{6hU~Oi_AL+WU{{@bm$-gtD{aVM z?BDkuUtk(@WnFjpS`w}TnOk=5^pJKakX$4F4213taO_OVv=n!qi8}kn#*|WA!^T2} zx<;(7$dR@z>kuyexda)uODz?-=O%&!g2nu{wc`X6z8Ym$9AHfT`jO4>U_4;xP48|2 zVCIPjcD*ew>m!hPA1@;f8lt?p>T3i&rQ;huzo-j%kSvccr|9uO;qsKYUlruy z@eH&`z0I)i!c#af-v#B6gHY3xA{SNFlFVmP!uu%TSty&Hk>1`qD#t#Z%)EZ!BFe6fnW<=YAkgW;`VN zJ=hb{g97W>u8$XW1hmsty(gP0{kM4GQIF8KheqPo3x+;p4IYSo^0q6G<(hBZa=}*G zQFCjbs$RWAWMT`IY^y6(7@{@Vg3Kk!enMXbzA8|>1ZPuO| z`byM;^s)}z7G_i8gFeBMYa&{d>6cuC6*oIm>V=Ld|568t%Q%9wk^6Qicn-X~N z3yFN`63nM25mgvq1HX z?+>Fuj!#=Ka3#6UE!-M*h~e#NwTQ49(8x{SbNR8_5Q4m1EI?-GcZsb{&pJhMgwOnQ zo6kU;4e}GBEC+EF92$@tMM{~As}NbEIvvH8=1e;XRWjDFIuIQA;mV7fnO1uX(!k?2 zX6QTvuxi@i*2+SDB{H3rs)+_>_1)uz23j#`H}A}jeracKVC5;m_e^o^8X4cr`-G#F zlY}9+vKDkK{ORfKS0!dufV#b?blHvne0AM!Vxy9M;Hg??7sQkm=F`Ka1>=-xc^K&Q zEin71iBNyPdwRp1_}I2Fnmj#N;y?e8ki`)rQ{~48-Nx(ygRTRs&cI(}eyqR153Ui{ zcZda++cYE9FVlx$yW6F^$C4IWieP2E8~*)`DOsBlr)JdL?<5JFBI8#v#GS9F9bS}Z z{s(j+Q%g9%-U;0lK<}@5p5bMOR{ZO0xVEFSfRf^0M*`QsUgqLDas8hk$Hnz%@2_pz zzdm)B3nu)}6)$-Hr4BBx%X>hM|GdE^_2OR|=K8$<-T#+2dGQ6r_vXfjd*^>Y^zTpE z;~5gLoBz!lZ#=YbF|B7gd;gKs#L@o~`A>X*yRFgQr1+}%rJls@rLbFie-z(%^y+^B DOe)sD literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/release_specifics/images/chunking6.PNG b/documentation/hdf5-docs/release_specifics/images/chunking6.PNG new file mode 100644 index 0000000000000000000000000000000000000000..495d55f4aed4171c9d4f01da6b6f5dbd5fdaf764 GIT binary patch literal 246707 zcmeFZi93|--#?y`CCiMZ>|q()LwwxTTA z#*iq9NGWS>vhVBfobKoQeeUPJKfizAdpvU-9Yr%-*L9xfdwDJIL|bcfo&%x>_Uzfi zV}Zlk@7crFvuDqK9S%0|9pg_L`@vrEf|Xf9uL*K z@(GWz1voyWy&T3fE#E@^gjC{@N8BPvLU703$=aRWk?^nEz2$lIPcBYjSH<(Xwu@F= zreGyguliohHmw@$$|jQj_F|yz9{rDRDDI8B{kQ)oF_5wr(L`1A3Tho4TLReD;t@#n?Ay`tLbv+ynD##z+X#l~5=t&+xB z#jP16c)g8BAID-*HUV)1x)V9+ygJ{nRqSj`6)yLlRk=|0Bi=jxxE3++zh9dtv?AGm zT;+?D{c%+w(){;IWWWw+^6^m(+79~MatZa;o1~?8o3Kk{q!?}dygZ)m_3-plr|Q4G zw&lg@W9D9S)ThtA=B$4p*Mr4kEg{S`#N8b|P|t6*1Sq z9#vxreiIf;o14?;s85>H=d8aor+`&*6Xf z!~Y}af;K%@zq?sK>AJgdW~0@3hZ?!FKC$%m>QKS6`km10UtSJHisjAM%&ZPY+3fDD z*6)5!0&!{nzO4WspSGDxJo!|!+%!u+A~`tX*u!MplbFNQ9@(;g{* zb!n)MYw&LPLfg`ClFCEvZ^2SDQ43~#bvOUVXQ>`Pz||gejaWVvy1TvlacT17$JeuU zcfN&87$KZK-zIjc6wS5;(mtU4|BXMAcwLkxQ%afEK_jeg6M$?Mo= zj*>3(UHbW9GTZB}MQ!M^rG(yP+(hnG7rh0B)JK=FUk9UHE`Konoh_uy$T-)?^)bmX zM;(UP=uh8gwTBj4>$2aL;#(i8)U6?#v@alz9i}>qsuOVG7oCGXokI9`f^^yQ@c5m}VAT@H2#L5yR1fxS(;M7H zX3^g58S;|_w_FY+_P+|6y4<1GN_%|j$-`5p9i@LgZ{nRKNu}U!xkiSB{#jIr40@qj zw!SsYVl3{Oe_D?qZ9u&#Wu9VX7`lX0I{U)v-0LemrSw6h zbre`~<8KJ0{m$gTEP(3$zIPpVj^2qzM@4z*`8LZv-^U37huo(*>*Ki`^ zr_zhh$WtZGy1%L??iN|3%OG@a(ROo5xDbd_S|5wmLBvYGY|v!4w7t$!qI&~|1<`mz!V z4*KBkFwb~<(CH$3>8Gz}UU~nj>`Mu`@cy0&tza$0gcF@2ziV?bz=pCQrOS9hTgb9c zU3xj`E%Ro{LmtRJg3btmr$8FK#u(bgz%xH)lhvM`UA+Ex`P z`3tOrozcy^vHRG#=UB=}#kRley#q;q)oLIRmQ~o!%!B7?ZDTNx4fo6;(nah%p+#mP zZ-ROqWn)DnY7U<+7H&)~3!>#w)a+kn#M{2LKb;r8U=jNLIy?H_hqqI2_Cd(qG1DiV8gXz0^C$V+ALNPQqmA?BR|czyMdqn6JE!!`M=rIYREMeF zr)L>|ggr`R+=%^M2|oXQeG6Ey>c_YstISYx`K{7RTBg!jv$oa~*1FQ4p1B%-dSoYs z<&Ef}_$;0D?RjLE5fKjZ$j6Rs4UjN04izAJ9z0g#$0IP(IzhqfDCafbah5z>=*5_JWoCwho+@ax7ek|SkC$K zA0TpBHpTNKVTT8+12Ozm>$7P)=N0x!Mr{#8=Uaq6p1b<>=El-w`o{8<(BhkLRh6We z($S!yh}Cl>-Pl120^>eyak)EeZt7XR7N6XIiu^nz!3`t3LvtV@*?<5O?DOgIsU`c@ z;G~`a>+un6p1VH1#o1c@gmk%GoTR4ZXX>jTi)NO$y7_&|mfoM>wX?EJN4b7^aUtTT z0%YTyx7{HJE4fUe@f^vLP6 z7j9kwmoMkBIvChxx~>;$^Wo)Gm(0{bdfr+`a%#{S|(bU!HL&k z?#)^Uya+QZ*FN+Wg!9P`jV|u|^7g||u$IXc1EsC7JFw87`9JmJ$ZO?qKhNKTQR6!B zBePK}O<^>azGTXeu5PHP$Eioeul>PlP{(^CUr+oHcMP4{bT_(p)u z?LAQ8{o(2qvqX6P>&01)O23iH@ZR?ie81I%P*0u}4SwI*6a{;=yD{|)F%As}2ggHv zH%X2mCVzjv%_9a>31L_8_Ne>!a> z`$BkXpW;(e2R*5J=SPC%c&gCIyDAM>$3A>Ro?i!_tCw@|yByuX;hNy6-lnIcgZ|dy zF}nGZBF`p-oi#SkyK)Vb5xr^^eRiGAGcEBh*)Okt3z6+L!qhsBCDG1-|+Y>WM%WXSlYF%18?==0Did*+TZ82@ooHL?JosA+(^}P+!s3R{%&#;V> zO3xeU&P0#jex^1qo)AP$UXLz`nVlCc$u<^YPia`ymE3qwgjKJiCT_pu>}z->Kt0HA z#P!$N{=H6roo)MIXxD@(2=NapBocGdZH#p7y$mWQ7Fmg^9_<-D1;=h(e#62}1Ff%i zyAiSnS5fKPr_2oM$McK~VZ|yu27~6fIorEkg&-zq8qPNhOj6BZ77(Mg^GiV^&alX} zA9BVPPBY7WuBqzjwDF5zmDj=_prp44^@9EsoM`KtWLafaXMHYVN?44HdVt5?sEGz6 zS93uM13y&rENXX$$lV!JALzoY4dz9){2W4;KA3;Zz4|Tt;;YGrI?BUOK#@709R_Nq zLXhedI-`ER&!?_nbO`Pjh^nx4j!G*U;&N6wpOhI*HZNSg^XAm|&@!Gx@cVlx;yFS{ z52C7Te=x#N#wv?)H)?17b5x#D#C^X%R%gEAtuF$+LYRvn7^SZA^;J+(_2j1~XL9=1 z=0`9a&pRF1tKo$@Y?BtT$|GHBP?x0@JX!bj3pL1ep6-tg+-+jyw3L8vbzrIiTDW%g zTUe>tXJcdS$=rAc7f|ng1jT)xPhUyy?IYf4;2a1{|rX)CuEsLK?8 z^^;h5_lJE|6p<1*K9NUR$5nsc~-d_b2l@0>EDAoAQMeBC-l;db+u>M zdo@O4{KghNOx$g-?aa8(NBw(UEpNa*k*}L~Q0UxcJ3X+>C*Ec%VGetw#j(#Z;IK{* z6MxwKNli;tcvcfI0Jh6VQ1OVNd8?12J-pBFiYIJK0qhRsj?}cUcegc@F264-yem2; zbGFjwVA*$2s9HZg`_fuA_p&{M*B+}sQ-x zK;4(9_QRKaa3a+YZ?L{)>Y`+EL&Y_pUPVx|S{DY6l*oResKl^Cc&lT$ zkryg-D7NA;c^U$;*4%DAFD`r$PI{1Pq$d$R*MK+&mUQ;yQ>RMY5p^vx=VGI?nl`9p zQy0;e2r;UCaf~w*C%$h!{+`=8@sLq!k#(+K5omFWzzwN&ZvJ}dx>em}wAs8fxsS1| zW`={K)&!Q`X#MbRr z;j$OdTOIP8rYPyvz3w;FbbnQRMAJ)ovto`ZSEC4hZ&m8IT>D<@IMf&82^wiP!lLKT zUm)~#W|gbSbnFjoBxXy|H-lG z;gZybc`7d3 zV0ep~!EuOwsUu4bVOHfC+u0b4u0!+4H!c&&R4McLa4a<78;|G_()@R4aNn?KN;6+; zzW7ihR&pXs;j~31)%F$G3=>Jmu_s38$@mUo0W72ylY^)d)@Owv$!czqSvJkwiPF8t z+t?rDj7qLokA(8+aafJ#Lj2s03~3hiknr-Q zE}A(kE@o-I)Tv^(xL&GdQGm#if7iYpx;5Y0suS2beJk15b7VF=m+0matb`{CnvWAZ zJEYt6=&`z<23h+?rB;ofnWhonk$ta7swRl%sY$W48NQ9e`=6`HT=z_&4l-83-qF!A zQV?!Bq~z3Gmwk0+UuQnS$r{@(`LFoFX@E6%fSU$$bYTLFH00*ZvJFutY>*WT+MH8! z3uplZJtX;j8Oq&y3^7=b3Qx5(D^*YYRx=krCub98?Z!cchZkOc)dDr0LMJsK3a80` znpTfXroJ&D!K-zIP;A|7ET--Uimr*nug7CeWC)F_>87;6vV|zrMan)}I;dL&TV;tc zS@$YXNYau}-ZKs@6nufrBJMKwGF&p)c;NtN>@~M~8kus4<7S$CJ~=#2w68H}K5$P1 z2AOD|-7&=}n*+r&g8WKb4pDET{V01M2%gu1NxP*$CCQKp>|q{9tZ3pCRxYg>{TS(G z5#~{#M^)lb!b0z-Eysl8tsKlzPuD_Pa^QOd5tU|Tsq3|C!%0#iEkvkgF-w~Dbl!3( zC>UEx9U(PrlNj|I_~$Zfu#vlW8u4F=Uo+6OL8(deW~l|zx=j9ycUoVXH^y`LOq`n} zt`4e2Nm1i#2!py&p$Q)nk~eRxyPbn)G5cPe4YEMTxc5g|hPmlOgd1O8akHs`B}pl^z=^6Idt2#_4@Od@62{Hu`=XB^Rr z-S4eB`q9xV_nIJAv1?X~HVy<9W^0YJh-rkzdH_CG} zcx2x5JgQk@Oq!3MaoFe!MU&PB6s(y1}Z_R*N5l=KVpK>hY)5IEbSSNi&)}__H#ogN5G>#L*(Vta3m^d zz4TbQMyy^@r_kO0){YBuU!bz6FLIc+>h#a<;S_&V^BSz+aG=SRQk(8*oLYAx>4YUL zKzuxvh^E6gDFL8<;rY?F(GjaM#kQXCrmfbjB#A$#WB(L~eB7MWve~3{uXvwDHNdiSQ_3VEq&FWyIFEoqSe!&I<-oc?=_A%PTst>c!;`?{Ll6_X>Wtc;aK*5 zgDsh$IKdzJhKYjqp5ZF12>sdoGlJf-Y3if`t3!63$*4p3_ct`xS-hIFHIfW|)72Eh z?_YvfG5-_J^(}Jq*UzwcX#OpM-SKkB2QxkPB6=7!lB9;(GYO|5__^K6 z;m`vd>Kl)U$sC%o9QM~@q21SJ)4#hFmyIl5jpdz4fTH3s*~YQFAe@Af#l|Gp4a^QG zS)ml4*uIUU2_>Sif5`OgOhoO-cJ9xo>q_+;x}wa1EK!+yVwz}*Jt(~m)u&O{LNH|z zmZmN^jiAhc*@uutHsQ6g6q870t4G8O&Qg6hej@kBIS=cEr!EfbbO_xiYrgH$p{bNn z0+Px4+wXDRRCmnf(oDxYe#NIclL)8+(e)6EM(QRD3wGUl1~R^f+B!u!)o&JEJX+1|+XXdCc`zuogd8!@VNZD*JSTe} zD$@FSAu`2c-M$xsM>|m~P^)|k;cn^&`PxNI9(~ZJYLduf&QMP>r*DR4mto5~d@Y_^ zgg+pg0H5M5GP6t$yB6W^n)YpEBcOmr%5eSH(G_HfHnT?;1C#?q+zt4X;5Wy8;`-o+ z)q`zq(1{DdxV;;m)GCuBh)>Ydv{op*Mp-~;{Y|OGwVQ%IsM|WOSm87d?>EG<4BBWuLX$b*;fDC%w%TkNOCqgfxql#V?j=8{C(cMv>KJq`gH?n?Mh%C&pb zl0_;h9{@5%F(*O04VO+~mgcjqc8lT+v5FV+;|K3y;rP-DbaJ4Zfv`=tHG^+F&ex5c zrGP!`&L(pECbT22@=c@;FaNE;HcPd%>9Z8uks9g))LyDL!)0TdC{E{@&yYx1P81xT z!oiwlkq74!1Wo-GG^h~)upG$Loy%go51SE|OhwvTa7F})gr8JwCkrm>>Ysm(A>jm~tUn^J%ghvf_lN-^;itE`7C z-}Mgm&3j#l#_T}6b@eSQE&RdXDTE)l?3oZa_b6oVK5By(D`YF=edo}6=!(CQ(9XL} zD1@{hdm#FN-L+|Vj38wPDNk<-viDiP_MLIi$1z(MHk@AJ#J^T7B^^UTxM3j*-D)HZ zO*EP%gb_4$qlw!HbL@a-s5#;)j#Y`5hPof^;!fJfuRFaj+f)~Aub-iT-5ao#Ht|MS z@e(*nh^J6v+Djd;Gz;>+z-Su!2mF@Q!FH|@Xv zvpv>H<|Us`D=f^f<`Qwvu`#^d#Zjf$mDQlNtNVV(e3~;zUl;y;22ePPFk_#+H;1gf z56YTi%9UodCH5ow{n0l70GF|s;V85U{@oZvtrh3z{7B=-+;1m}=HZ*`)Sr!|yqas| zdSHNXC&zLd(xA$qojov_ut#1Vdh669#7Q}i1X_ME0!@yvji-zXri}vF`vw6bUo^OI z+m;)hyg0142J?-fNfa1TPdc;LzR8j;xgKO^Z?DAB+YGoN3ZyQB&};xRFAbh@RQ(hWeoNs@Z=Q0`k2Q_o_5S{;9nfwnXwr5I~C) zu#TXI9&wVZPMH2tF5=d_ys+VX!{iZ>m*XIvk|*7vGA1x7-D-prCPsp$T18%3h*h0C zM9Zx)RxZh+-wrDhc&aQ_NS%!(VcK0$*E;jA^JmfhtULv}A+wQ=mIDwYc3M~mB|vTn%)*Dxy|ahqTGHm$SjlG9h6Bg#{V!=pO)uT=GSp zYVl&+*FteX`YkFy2zdkDK}y23qlhj6az8F%K8atF>%oy&(P8OyZNLZylJ=qY+9w4T zKn}Kvhhjk_hE#(zhp~cZQ;w4Nl7a8chUY+YpR{wn z8l9Z>kSrCDpxH1VATI;bRMQ}GKLA_BijMY9?`+OWF3y1_%``fh=qyeaz&EaQ3#-Ce zCHh+Ey3|3!ajCWtiN*9|-XL`=Ml347o-UJnc{_Pu0Hm!gWPL~mIVSmc!31Z0#^D|; z>XtL7Nn0&wrA>_sq*4vk?Nuc7uW&n>4ynLORD2#dqtb39ENc4nkod0|5X>tmtiw}` z!vsjHvs2M&QFQVMk{#+9ekkoBCIxXu=gi92a<8s6D{Oei^y-UZbh2+}ETll%#&~;4 zE*+SK47|7dsryY096~ig6;@p= z2_kxk2mT1c9a)Kyb9bdx>bSB(8xu8i&n}cIa%%P}dfSaB1*CQe`DSW{gOW8tm2e@$ zS%WJ&D67q*7qK^27fbe-qLe)gmr+fTo{a$~F2kjuMs|CkYBnHFbTu7)oX~RgpEzq8 zA)1}@M0a^!}#`eQZL_4M0 zAXe1h8GCH@TdmY2W=L+OweIICU3cMmUWH(5hlgXF6WfGp_}bj(K7eH(RA*6(w}qRU zdK<5tu`dyfu^ovRX-!RCRqta6#lkI`V|exCnAo5tL|KW<>8|u;ZMD0YFZSR>dzT(c z6rENfHg#dVBO8PabBk=7-e5-oA95H#4v?Q1AqfyE+_F5-nPGUNAH zQb#{W;9gz%B?@^jR5_mwls~ty{7Tv;F>@wWOcbMCq+5#X$8~WhQ8#-hG!N+e4z-^M zxXWN&iE|j%qgaG1X9_A7NcUV56k6aGiT583{VX)hCU0_pdp+%#8i!`HfH!u-RTDr) zo!OBg9V*fq>+8`ZdDdc~ZhJD92TndYagNFEqMqX3&1>+mbkK+Tg>A-3qtavCBA4h- z!G0LeSUjp@=cJ)f)V}?uE1)w*OURGWDU4eInD&X zvpw<7-hi>$u7idY#dTi(+0 z?NuDVg@rFB=o~(VPTtH2pwSLj->PC8Pl_74{PDOqpd8h-r6+ueWPn7EiYzj!;jL@> zV`?HJ`@cQ`(1X0vKa;mSXLLNOhfAe~qIY#hoDXuIENH$ZSj?}<%vgXY)pub z#zJ+>pc6VMw=z~RmI%85dA5ABb!+wY?%(kt93)HxH*UlEO1}ry zR;ncsfIx*zel}?Ko8hzM?o^alzzLPD#4V)m65!+M`+@+rFJGY40}K9s9lD1$59N%y z0-9d6aU2Zm) zC3F0{h4N(0U?8oC=Xg*d>y4$et;Z^Q*1dIVGavmEz!!W|d77`3Scy#gWtCo;}+G1+K^|VwbUfv@%b$huv$6hbJYtKx~rMh({ z2e|)V`T=fO%884_&KzB85BmPRYEHt>r5yB6#kWmi0?cKrAzydUZ=1lfcU}AJ6KZ6B6af?=$!Wu%tFi^0Zl)FI!^E_O(3| z8&r~X-}Ep%xvi2qfQQL{Y|kmvT8Ay3Ti5`H+urG)aWBn8ojbc_-xSO+6x*-UEOadhx$+~B4C!IJg?wadLpVK)MY!{yA|Mehyb+j{N*q{Wi!?*$Pv z2dYyXa0l9d2K{`GNHbc3_yS&^mI}385_u~$%DQ)-8s-M)kC^Af4f+fF<;@;*RKIBo zB{U7oUC1|Uynz)}=c4AU|)GHFO^mx zsNtyaKFerz*JAx%Mc=ID)kZFr=56OPtI0-&{bMrMNPBHtCDF!?trCa}N_*FG&vig^RSGFd zg?W<%J7b!~w;w<)8E_*3`DIcLq9Ofl*#XU!#Nr1zQVXn!(d6?{8FLsP9d7(s9>XhEsIO7i;`ujjdLZ!9OxyVvOQPRSqB^Gs|sm3VRl z0O%b~ZY4X4`Sd=ERL_XfpT|kf=*GK%uT%5FS$BpIRjqT_-7~`OhUEo1Mr|)YV3nUb zd^VxDA#L^gf86fZ5=NGsh8wi=SPXK^gFoC!tY|MIRgj%S-h(n8kU;FF5KY*?;`iJP zzDY$``-u(cdKvS!5z@G?@3kKTsSM&i6rZ7hErB~z__^?oaiReSh%s0!*Z z?v)#{;`SbH(WT&U2i`fy{_M%AC#T8gr?t|f%1bDj9SQ-55??D)UcH*F+q4Hgd^ez6 zL>5wr4@RY?k`}QjrQ%VkR`W;HQTL}RPi--JYO~q4BQ~f*fjU4?FKrp8^u$)Glo6ut zwWL?s2yE;fz`-VCt#FP^K zI|A&V~*G`p=kLCxYCUN;raq%5S7#TLzmj8Q)UWHPK%V-!=_L8RJ|--3?v4pT3ab+xx^ zI97D=X#2u^tEA1Xb5|V2A)NGZVwZEo@+V?4SNeHoS39C-v^Cds1f(E`Lco=$Y$jHl zmoQ85w96Wv9VFe6;A%We|7Uw6emllC7JV~_QQJHSxW*+}F!SQuO1Ym_Mj@(aK1Dq23cEV2|}( z&oHr17FI*jf6>ydZ*<3Ww0YjSa40&y;@mCebHkdbPf*iiWiNn47BevKb)}eD=(Q`B zr9j;o`j%Jj26pO}DrbrDpXztmHwBT`^6JcCO6d|VqZ!m@_rXK5JvuWP@+Z21fND6X zSfp3Hc6d$Sm!&`cUVBQlDu{b(hqlDMzEu@EG!>ugjEnREJzPqiSFt2kc=7Z?j_|RS zrb_j@sIPzaJ(HYDsO-=?&x5e!OO$SvViscm3QuLj4f`%Pvm)7auQ`8r(}9#x1#m3( z#u>)6%dk8?1G4!~it5`~`Y?fIPSho}`MaA@E8f*W*lSljiG4L=;K3yk^=lPSr1#wS z2I@Do3`Kp|#Avh4aHTO;)SlCVURt&~aWOpC*X%L;eo58vjo@oGki#hc$-|b00e3Up zM=QDTCg|j;qi8r>#|WPj7QU104@jOO=q*yh_Ue%FC~p91;TF)~c+ui<2(=Yw?Y_Ks z2z+}r)fNp8u%Zi=#-1z!GSgQ-?ns9vH1*_=p4Jw<(u3TR? z+_Tr$korKKC`CTqSqO^-4}@itXc*kNRiHrT{a5 znmgF?rY4M{K2j`Ew4cUtS>N5XAl>VtkSZ$IrTXnF9GtOGNJR*=PAB;1yD2IggELJX zCxT^dgEt@aR>lfLzK2}1o-~IwE`~IF@r?pR9-cQB7JXSoH+WAg`kq$F85|6fAo~u47@xGLtg^&CP;R?mC0$ueqD9~ zM{UDrA^bW}=C+EL8OI85j@rZ?P>-D-(D+2Dbo&GX!2X-2#hIB&YQaPu(Z^PsBBy=MXbn~3_LJTUDICR_Kxis z_7d`ivNZV$M_Gy^19ZGPB|ey{9JN&a2J}IT+N089>O91zb!HcYxaeTa;qt9@US!t_ zUdE=bOU^)d5M4NqjOP-hx+(KsGuaS=a9>Lu&KvO*_tHab61VZR^pHaWbMs7{FJ@Y} zfQ+CCAxXVYGKm$QV96eIch)fjmBxcxVulC!e4QnuMIFH*sUk!bAJdxISMuOQq4nad zMQ6;s)YEpo(Yt_t{;p2Fndm@3^r3ZeDVRhYtFFCJK0QRWwK%)zL?L}U7DwPImu!}E z#Wbf)Prc8_gs-T|4t@mu!CS+|3AR<`zV?kVaV%{s|L?2^P^uRP!`XtLzrzGsew(L= zu4C(!?UhLRfG%P-vhIubB!A3*~>yKl?$nY=bK3?&`{CW7ZMnErq@6QHz!G?#H^hcr-Wqt z=>b9f{Tk$Aj1Hq)ha?coi`1m!QaMPUZ0&U33){H0N@= zq(QfEIWI;f(q7k?RnTL<2>ZCf7wD;Q9z;_;Uj&B`N>!bT58!4!_VVIabYt12-aY8U z3PQMHD)F7x_?-~XJcbPGVSKYFTsl#3WV1MIBNagqksWoD3CtFVj6^=CWRV4?Ql~~{ zX|Hi&0g%!tdP=kSCWhNn%)+SKl|vRKK0=N~<4PrGAS+#i)P-RuYIkvxbKBdhK%)+Y z;TxMbw-E(6a;Zl&Ut(L%bLD=@jX`#ro`^!M)?!zvyK%qX=)kcOj1ha)%j!eDii=k2 z{JNc@gkP%lgOWH?npoLEwJuRlMe5D)xcFv4*ef8curB48op z-u$@tM;}qInA}AuuK8i$@Sl_es1l&|Q+FMtw4(zM+cv>>EY`$n^oX9BTMkdoP;dm z1`_5y>p8?bh4|u8$ob|-3O?0v#i1sC8-53>ilSvfXwV6>RKrnT{?v6Wz4UHCfmCB$ zav(MX{z<34I7iMti50OqW~_Y&(eWq&PBj{@d-CFha53Ok zBBWv+_mPBGQU}pAgb(EplJq!RcI*;%EqOT8n+3;a9d%wt#CU9F z!XD3UWT5GPiY#;R9QK6__$Z4ZGH!`u5(RTud@jM+QZHYa@cc)EF>()Ig2VT6yaho3 zvMw)AdShY)$5IX$IGa=EvSa=@`V$dRmfR(U+B*>!J0c!ZmAA|?@;M_(K^|ynDgIL4 zF?-ObDF;SO4Er#9D}DR*+M16uOY2HmZ?1HRh1* z@K%d(pwBXZ$D2{3YK*!H)u|qp=@C9*i9@DSl$;g%aBaq{Y-O<_qqjvajYB`68x@W{ znwQ1555hy#8=9)%+j6%U;m;-M91U3e8-zox1R3oWH<5)Em^6nor>l(srP zGY)SobWBV{pjYhv?Xc*eb{&nY&in9P!W2J(i;mE@bk3qdz*ZRLNZwDzKUc2SnnCpL zS#^3bUJe8W-}+aDFQp^|zdM)E;h|g&SQf-Yi($K_e{GI2r*TQ#cHkxAHc55-@aoR} z%TlhG_hmcTm&U1GdwMOjc#AI(MDb?3`t)moQ0l^Ov+v(%g|cC40Uft7cm6i}1db(E zL`-_7tbQ>_3zj8yyX>1OP6_r{h1cF-DGd25j*J-xs6u^pYsc4s)LaQkk%q`%QfDdP z%-a=_6%-%ZJ*ZrGCL$pCUe|>9{n&(MTny6(1?!Zuf*1)lQs4pn2fV^-_n6iWa!USuO7Xk z9G<71KxPkY(J5OIVjXGFDNUhX?BHv&UP-LM-0-}gU25(ibx5PX#j7c;7*p4!NAN3i z@t1yvc+FeanX{-zlM8GK)3r%y>8moL$7~b&?&|aUh3AzLigmlv?gPy-`#&^?j2rBe z%B=e#%hg>WS;ueuK@@|GQ>_hX<_G4UM-b<}OZaKJ)^SLQ%`GA}IE=bE@?29Xk6y?9dA} z$?1g3H@Yf5gX;6Kw!=<*SxZe1Dr5p1f>o6{teZJq&2Rfh6rZAd*d^ka3qk@i2W9fr z7izm?P2b!;!ld%JSP@-El`ZGYjAogZ!%Jt`S$SP;XAM_8xA2*g#E>yj9p%N&AcC*r z9oJE0AH6yaN_cBH6Rp*myX}9srk*zVHZCkC5dTy)5@)eu@`{I;nJX!Vjm zc3}Hw#Wp>{ZVm7CMC?fIbi!uJGqsieV8x%?eq?lG0mX;bhoWy^2Y{X3IHwd=ZcrLOB3 zwYHD5@!d@365Ac03eUqUCO#hto4&LBCOGXVzNS2Ry^DUkkARF1oS1cPjiz6#q$UeZ zJs8#Xf7f3*uh*F!G8QZ@6w=yPrkQz;y|1~FXyjMj>in5rT`Jj`z8W}_ggmRzU)yO^ zR>=_d!Z+#eh)hwo7hhR9FS@KWRV`?iTq2G%tOm56x0{eddIJX~u@X1FMUj6CkW5^ykT?=#y%;)#p3jXB}F0(4J zJqzf&UCg89*`eLkGY9`NiBA5rD91Ved?oCa2Ii2O2eME&+XyEVlZfTym`^m#J1 zq*l!5&QV#rGN4ciYD*qTBZFiS4VhXnTw^}_w}UTW{o4DtgaN=WNT^?${#?p55KaPJ z`i;v2;D%x73m=bb^R%r16C#c2tf>Y5Rd3*rL#*mV@$vCFs{U&c4>GOeW{Ku$Zh$H~ z#xyJg7~(k7&-@sub({dY`VsUU0`5;km;am(YBx!PV`^&W>0*<>zikabjW3d6&U#Rv znp<7RS7NNffQ$Hk1s;$__eZ7VHPZr6J)+tdb6#DZOk;X_mOyWt-~cF+)!{8uESAvl z@1=xGtN@cZ4OkEYBK4R=;N)%JlEfnp04T=zeR_IU8<1{_b&&w_D*!?)MWCq(L{$9r zHfvOrWL`yga=1|)*tC<0vUhRXUoW3v%BM!wn8v=POZpo>A21ClQnh9(FIo1n(U`t- zrnRd30$8xJ^Z#Oh6>J~R17;E^FD}(CpB6O;_J0Mu=O=&}eI$@+A1VTLRO$Ssx)gsY zL}o#c+-qFB61a>EU+honk+Ai#TbSPEnXmdxwlpO#7sIpy15Ew)3|Q`^_ZUda6vanC z#)=floEY+-em&3|YD@v!8V)qY$z3Ja_pvKqc`%4v;9&t=cd>`%Bg6Rc~4}S|G#f)Ysz)^2Fx=f0yWm+)dTMD^=F=SGxg+vREA>O z#r12pBek@i@ppHGB6@y~y|{-Tzj)%IRbn5JH*mZoaTSapU_}4Z=1nWU_I?8pV-oJb zEC?)ecO$o#`=ke;#G0MF-7T+aS=X|_^TrI#mDl%1ZVm=Zh)ulP{Er&|JP4${;y<^= z|9%&Y#reIE|NC_Q_c{ExUH$*(T%(i(U8uR6I8SCmR3*n^j)KisJ^rDnAZ^)VMSowY!;m=Bcn8 z)b#(1O8TE42VQGy5FC#~43}(~u5n=IuAzE%-OUA)pq?y&AsbybPi}fay`4vlch|cp ziOh7p3teE$ zl4E*OnWo9(xq6xrK>aZv;nF&Fh860O!RoOy(U~i@YuMn>aa&U%0!Uv-L=)x-hs!UAASF9ahQWO&4NRBJb9UL#Jlmn)jE zMF1Zk;vEpvr(LWb%VZh^fj~*S0K7rvcS@63HyUXH7lOMtKP1#)jQsWKj4RIvJs_tz z0)qV!V6t5T_1!~|Ce>Y9t0?vwMKZ{He}^~004y+Mehd;-e zuhRiiam!$5JOtOOnHx4!?G3men}Z6ct-#~>JviG~LJTOLS-JyLV6h zE^P5O&LX$08)s#(JLo1wP7nR{tf$yxj@EX z#T0=~4FSXX@3PS?K_W9ncRcGdsB9jVcNyu^$*a#R|M-BUOMem0TTnN17V8TIYBU;{ zOw%l?3)n@BmO89B8H{70S0V5rN>ivWWoqpbPtrzC1q=qf+@G6%=g!&w{x!ev|24U6 z#`pK0{;LpfOLxwv$2{A|s{{XSFam;(V`3Mp+y)5g$Nw5Rw&VLHcqDmbq8SX$p!5Pq zR0Z&B72G`IqPyb^^hUqy++HA*Tg#6A;|nnT9jeMJt5IWf782`g)A9f1=UZHAwpHEh z|;8uOKKL{*Nj`i(OkRS z$SGU(d+?gl6{(1dp~%gG+$#g}7hd#xBGOMgc^9mIIsBxU-xZVN2ZGnU)3?ALJM)`Q z^0b|g0cWICwi)^YAaxTHn)-FNx^}m0{I+V*aR(4^Fdg6%h4SQCT_~AvFRw`j7&%wa zep8_kjB#k$H^!Wap!vspxJ1}=>15SN%GvMpNkMpLolBj0Q=fr~uN$yuVvSTahQysg zB{6OKVKJ3ndo54$85w1b#J0?251At&s;MNr@{7;zNfp37N0Yen8S$%TvC|t6csAhZ zc+t2-CI%{f3o*R9D4+nm6nVd-IQiwBvmu|s{EMsnk=j453Pzs!arIE-RZxLbJ^t%C z?XI;Nch`h0-d|s(S)_M^PD4C`>nD2?edz1&bv{%%|C~ubLFSKEV@6G7FrT4tS{hW8 z<7RRA86be|2Gfvg-$Z0qDs5J;gV_~@cMZcHuKfB^$mF1Yfq4y!1$<{q6w&-@S{(PB z*UQ25nF8P?*QZI1Atw<`W#!M-m1Y5(=By95E|^T%`JL5L24hi})qnEcunyy?Jw(Q` zhEX;0>1by1Ihh{y?9=L#^m>ujw2`(~UjR;xu~nDk_zK+cSPR|p|BtFKkB54F-)~Wo z%9tcu%#5L#P!WkNF@yIEB|}2mES0UYv=Av-#y&HKXdw)mQleBk(n+#RPBNAvCzU1I z)3i|ZyPx@d>ht~i>zvo=Waj;To_o2j>%Q)h@~aP-NOor8R8b1?-)f>Rv<@N3k|TP0 z1Mi02HLt%7KXKKXrT_ES+j;8o;{7CxQZ!H4Q0tRErmSQd+4tnjs5j4 z_Sc%zFOP>0^g(~|FDFBie-Xd~?-gTuhi>Z!`_>v2HXimbAzc-7*wx;JIq6H^WYE37 zyzbII-gxHG)AVN{A-&h+Jd>40) zSjI3}AZgalq*thm%t_WpHoWX;!D8i60^J4r1yW(+VcROgmK0A}11d^~-VeZ9OMAV& zT56E}2q7lyzG5t?rwX6QCeRgUu*0~Z(%8Z0SU_8(UDBA#J#*_-{t+>BR2p&%AP++q z1I)7f1lW0rL9MPdKYnJ%8*Hp<;pw{=?R&iS(0s$VpUrgHU-kzHt1;arXd2rH87EM7 zu7LzMPQ6&A--%m+sSGL(gu- zrjgH^;C4hnDlbc2ev2aBM824)prwf)fg5(FU_wtf*LC=$+mct2zR%cCRU8+AV`*<@6D)BWvgz=EO&c}>{n-JY z8F`Q+a;yM6KvjvIICV0|pKGHg-+n)r&;_a=#h0>`Cq_JTjYX>)Gb&$xNz-AmLtva+ zo(ck>e{eQ}$0O^%qAU&yV7nRfY#5AxoUO*me!Jau#{eJL`d(+XVvwu@FCFAYOr(+) zCa~?oTwvVP?~>n)5SxLk=M9c%`8FR_+1CgT0j6obZsi_^jht-<_*9))Pin$nVdv99 zR0K{XtGWwG(pM<@--VTt(;R$^0+`YZK*E_?!kY$_CaHB}lH1@vKqB_QFwV%E#Ghx@g!)JeWrV5# zum(S@XMZlK180@&6$BI@=cFiCmkT&5uOuNXVNTVF!9~f$s4eXdsdZ?uDFx2~82!Sc zEu-}%(?jWDnY>(b6ADbp7J>z~^K24Vin49sXuS=)p&x3OBJaY_ULg<+LIyg05GqC7 zDSlpXce&>+D3WPv(jqVoismJ9hQq;;m`O%*yni(E2h4p1E-3`&W>m1Wug%!DTXKfR zHrSgMb|W|~%wH{l!HVIx27{#IHH192{Y2Y8xrW+gZ6lSt4h)h0l7N0=6mY4T(jFVm zZO$rk)QEaw`MNY>1m?m+Yu?e29ZaD4krc36~C==W>g~;>n(?>U%IZ zl!kxPsJ?HW@G4ZSNwN>tU&z)dz8_MnNlm&&*YJOe483LqBrQ3}HroRhC26BjkSt=Q z^EiSlRd~*Wt3S2FnQ~Y|@6FHw7PzMPywiXL&8^ekl!)7M%J8L0t(Cg^v&{X1Um7t# z_CmNe-v9h>k1bF%gkaZ(%x0rkM2gk@lRV}H7}4kJEZ~}=@d5H9+-{u*Ux}9A)n3jN zCVpR6*Zw#~GZvvX7fdN1Ewu&Z&k?C>!UE6=LGpuHqwrj{+YzBuHCVm z>)C4Xk{?#Ub`VGNuOO5~O^0yuU|Q9e`#)4toz7Rbfl9k%cYdTUY6SlC;XPmcIcU2v zb#BxIAY{c7?V%qWb4S*7h3WN)#)W*M+(pQ<$n~ofurpH`T**Sk70sDdl&&?qWx8FR zEwiE5(;PLFAyKP!REv3Abkh!7muU4+vYH$Fxp{)lk*7##j_pR1HmL9p05RJrvN;2^ zGC;P(=eVJ57|K>re}_JV<}cP;;Z59^%5#+-j~b&$C5?x#ETB?TJZiy=w|H|ulq*Gj z|SL$3HYiYJjXS_rJG+kHg1-^G1x?+JnK8_atJ1hPGKXVU+t9aa|QF2E#>N zahWj&Uo?}IjJh^K|HuuyJF6$Mva9_RS^L5GYxMXWO$^OQcxzb>QXDa6<{JmTp|ZSM zaqz$o>?ZP$2!Z6?u2qhhbiV5bMp?npD04`99T1$)T)y@CLd3rZ9w(eZ4WXc8+!BWfJ3u*pL=73W-*9~CIMQxr_1u4&lnnWcH=1Gt+>Z8{e^TPXVMhRO+p z-s}Kd%MZ?{i*I(iVms5q>esRS*w!Uw-g)*#>0hpnmO^*J+dB{>Tl4Pv)8&2! zEjLi33bMeZNE05f?eh)*@ytQBFpvNLJ5otj$X^t|%Mz50ql!YnCFk?3<|03r>z~vH z@uc{Ob~N`jq&Rx%Alya)#8gXxQrNPEH2*>;tykEE3^x_t8?Z2PhPHb_0LDt^tF^3x zo^PPO@f-DvM@`s}%67p~R&H-hFtpi_Jv5dexDQ5iyu|tHIdBvB85U#Bpk%D# zCD-Zy+x(dEeiLLa=C-P@*ZaaA999TR&kwInthO`aDCztNX)m&CZF+w91dR@34y$4S z1qfYGZiwgl$5==c_kVFUlAVm47SE5bCXjgnPK>HWY?*f6+-h%|I5+LB*Fd&gnzg~4 zS`8DsqA%?i=O35AN#o~TQ%hbc=mjq?pR}m2Z}Z@o)sB3+e}HE(aBEd$PWl{maCN|Z zxPSLT5kb2E2NvpUVeGFdVmwwf3Fg^)9VPOk9~%2uGsb`v0H?_a*JgOVM9)>zTfBDq z#(dh>ErP#PW7JY)hg^ml{2|kj43l>hYmi|y6DzN519|B3s9)e*b=eXeNV#8&`!#sq z0oB#JYWWkrJi2tQ2PHK+bf*ejLa~CfW$o)u;lh@4b|n?ey?Jy|gW8N_y5f-HA*g$? zi%3RHm#6CD>Hc;R`}3Pgg2h!MV78R;Y#WM>g7Y`K^&_*>XZ?EE;PUlQ<3eG>4~}gt zAWI$KuBqvdS6%qE?IwQ{XEXU7AoDd$`U_B%5-xnw zA1qMJ(sB^G-j4>NH_!24zkV2Q>yFo*0sDnX^TO}pasPZNM?~| z8@~rllL48M-FrPm{XR0ba=!-yLs{A&J<|klCsPYzIpqPuVdX{T8&W zx@?k_>b-U>t!@W@IXPex5IZWHd7GL|8c*^P`Nu54u7D;(G#<6F$7dK8%J_LIS*N+` zc5%EgH>NkMlpADExqRbU)aL{});r*&oM7hG3C(I%rPnId*o)@dB&JzH57Ys2o+Ub_ zqiu~|1Cwdg$;TePX-jpq+kknB7|Px(4W*V)qK(4&+5lY0q(X8~nDiK=s3PzLelRXK z`@XtKpj%*1l|LGf!xqrnadS=Go5A2VrCy*UMTFYy7-zWqmy%lH-g5{+e!%Sw$5QUrVX@;R{ zjq4-z)kJq#Krp~08sV*m0l=bVh@)h+=(Flcn+5(`bXQi1kMO^)h4`#}J3Hj(>6m=* z$>nO;_CoI;f>J*Bd(j{{MkJcSzH7kTHmh6&UdQI+cX(Q>z1)*WaaMx97kU6DVn%I6U@iR>5X;Rw7rnWD;Fr< zkloh3!ru%{(IK1u#v_MUjAFcFl1Sf4B4*Z9t|5@VWJ4*&iRxDtGJO`GP{Pfa_rj)k znd7uhiEx3d5SDpuGo_94N3D9Y|;`Y<&R+zKi_jk(=3nNIJ!IfmoVY43bw*W$alC2F5RckZ(P) zzTJ!kWG@=c<(72fj+5W-dU!@vXUPX3_dJ$*FHN?SQE9P^*DLx0iNXn)f4Mif*cA=!~ufG9w*r*A{*!?Oz1} zhF&)Q+Ta%nSNqa+7}}tZ(?sixas<_@`}W_%IiXqU-V$Vyh>#kVSDI^%z^7Iu${i9_ z!`;_I4Curt_x(jTAq!~=$Sv4Uu)AB)-CW-+&@E9PH8nl_@i{I>Fb$@ia-lh_z-kQ_ zr|J2ojQDNyXk$Avol)lV(}+7MQU76E&Ry4v5Av_hM5+WfKju&Ro=ciuW0xY^z8{EzF7i+l%41_5Y$X! zs)?7*^E`h3+#vCGIVz(N638KemsJp3>+3&_{o`utI`ewIM|nCyzo5A*UDr zS{xofvh%HIZknok_%F~$&{Mb(U>|i80kWvNMuwZaDz@XI&zhWIm)y}{SIuU)WAwAm%8dRUM^TwnRDXWfd*#G4p9)8w23RIVZnXK^i4(e^=sE z7H2k@jqy=IL?jvA&H6HnHuiC!=ym(wkEQoCUPSP9Q+N5%|&hsyDtV?B`28YR=;8uG2rPaD9lJ#hR;x*cA(kioG zed9{#8&lW+IsHuCIh^f+bI1=g<`QKHn~@&j)!i@uDIEHs66lib7&OsB7Hh@RsfovT z&=wTCi4;7K%ogbh8aQ5jBl?1NhxdSxr(RoRiywaiog(H(OsX>09B}eV$LI3Xqd~P` ztG^Xkv`x2OY$bGI-(6-@fn7Rx zfjT70X8XoP!t2H#CxWejm(%b!nln!YN3{_#Nbfhm6fh>>R`vO$8u+ALH7b?e*{}t0 ztD?3gZ*l?p>yP0^`(DN!lyxER@^st`Dke78^QW#I%76-d#V3*0chR57n| z$8F-@ux{WK0vt<}xmU^!1ij*v`o2*ATGcJApto<}i_G_QVz_p%wtS6iZ1!o)6{xAl zz6xsIDWfj55$D1%ITNAgf_}==uB@IyeA0(J@tYH}1=N9OXif$|- zg+L{%5a15n7UhA%SW-k6zyXVX>9%LJ$T8QAeS>I$Sb?MlLKm&3)`^nsPzU({?T1Km z`wL<%?Fo#RFBKV+*f<9XPLH8`Tt(|yW_c}ig{0)fHQISO*~iI@``#-RV21S?k$qUf zp8ytQ(GUEbJ*SPL)JAVJYUqXJ?{j-)e)K-ioxzIX*cG5ylWx9wT(Mmsr|K&@Y2*xN zM0Prpm5whBF87zw6;?yBY{d*WDj>h6tT%%jhC2X-!2)5+I7!Z|6h(Hd?l(e}qCuZV zIx)4o&Em5Y>hWQ$hLluwg1<5tjV-frrdhh{Q+QF}q%Avs?+tc=NJ2iRQV96{zkek~ z?L!-)c7b{G9^^sl^Yi_!HLgIzNH&mL0ehjM|_*&~P{> zQOPfuanZkN-BIG*ZJ?eq-t*|31lleKx%B`Br_~+9jCpzGL*>?ls`;adl;Hzp6K)uP zwVjwKWA?4;Nyi2h$y1~Q+vp*1PeiYaa?#CfSa`b=XDaB#&MpCKh4wcoAHeBMmQ7+V zLO3AtUrr!@nV9RuDnykPfGf-`>w37T=MAr3RQFAa}zAB8tlp*;82cn*A zAa+YLC^6xh%W5*$v9?_WHjS%6FEp-i@|_$Xlbe(Dm1RhEZdli3QLUoO9(N zQDyD-GR8{TJ7sq5Wnfe5nH*le0JoxMkT-6W74a{0!nU#`HTn_F_A}boFtG@|BO8SIeP`Y94m?IKtEi(gRg;BsQmz3 z{`S|;JpAPvXSJ}OAR!hS%Ibjcnhi<%1jp2oCXIaG5!iMDot!nn`suH(@2{5iO?F%Zv!_vb_ z`O&TTIQ5WgE?%Hpq#1nxq?W7c*B5Cy`C-HwyM;?O2cl!7zp-}3`MxrAWSirDgL(Yv zxE0N_>CTHCGcAYuP)+{;i92h@Ne1r>IhwXIx$> zatvX&!lc()KV2Q7Vi4OGe}*4FXjSO6G%Wp-Luch|W%u{4=sgO^zuQeC8B&tbLBRp9 zYkL%n(i#>pR*4o5+s=3mB-6Y|TAQ&0~CgO*fOeXDShsOfcQ>I zreD2cvi-O{bESB({`MydMM+AFs5atbFc_dfI=~5nF{cfDGI>4hH7G{Ph|U}P`mq+` z5GT6Xim6CiKXj*st{#_ufEjDt{S%7yY~)b`*~94~sxG@Jp`x3+{WnmLcmYjv*kHi< zW%@OOPx=v=fF`f!`7bngXeynBP)g!Sbu{R!%{%@#as5{~5T)QCt&MjkA3**kBa5=- zsU|WqB@5=jo`cIEUZJdKA6|E%60xhJz}Tft5)yFofS7D;K07woXLdlGMGM`%?ur&~ zSF;mY;dYn#!M7@wudAj4F{gO70F%Z#=&QLa-y&ST8Z}XP4^KH;yN9v&a<34rRrhsI zJgM}R%2wV3(}$M1lmXPxbQ2l*vH~Qk0wwb8?$yr@55Q#~^82Y6gv!L$E+E=fzjc6& z6#p4xI1e8`@X{L{MohX*?Z02|#c^xlc_J-QfGPndygn??8*I`larU)S@NMLU_P?lP zXZNX45TT@lcVEV1m)VN#ZuvGj99u8uU`Bj0Zaw)XJw_Eew(gC{Pp$59Xlb5uHyS0o?85QL9E(< zqfdI>am<7l*gA9I&Wl9##2vKSQ0r^KJw{NkY~@aor#BtF`h|$z(;u9}NG2{VX%hWU zXbanGSb3sm=tE~;Nx1ulI?3L@PV+51HW#(bqps}PQPEo=E^>28!h3a9`1sO@oOyHw zUQ*Q=v{?yxE^C`4^cD6IbhM~5llzEfc9|>U9|8oRX?ZsvcC%1sLeJAmacHSiInor{ ze#M@#iPsPf#adA`l{W@!2V{480y`^(1<^VkzU3x#~yo;&AvnetT7dhG*N* zjBu5S>x%CzmZJ*PV%~zTJ73DEfnuZt!9U_eFkTGYMWxPqSidvcqbzUFQ2-Rghy}i~ z^ByUi!Ek6SFgk;TvwX9XpSnhQH9It~0|S#g2cOWS5$@DF>vlJ%3n&owI3cDvrfKq( zC3;;|FaH$b#e}_>k$&d(TNy%kySl6b_=@lJqmqC5aCDVBL32~| z0{&wbhwh8&toHhQF@9>XV;}Axmp#|7r1NfX?I&>l1tO9rE5kE~k*NjzI_*4~^-94h z+ojej`x?kGHM12oHDX>vFyv+c%}<$`{G@Om`SxvEa|b04FPyLJ zY|&#Ed4-@}XASIW6a&S&(3bLMiH_qO-^9+srpK@?tau(dfGWcA zWCWc9;IYSp%Y7S@BXx~@u7>NA^h8kc7#Ji?p>0&8OLs@ZbKc#_zdeX1s<9#)w4kef zar)GrW+u~|CreH~2rW6?c41B0bMM_}54`-q1}pf9D~8+o8H07Bkl_1h{9JlqmOW}} zxMRQLvfnK2h4W=kA>WA!JFZv=_yJmML@IFylE4jEev0dN_*5lO(=m5mNh3Vw6p*Jz zTI}{!qy0E}4g$4-4K+5yJD@^#2I2pvUSPgx&k08{J0esJZ)dvr)!Z#PQR$XD=2 z)~m1D)4RKMq#~zeb`ta)F>h4*k=D?!2iS&_2)@9|To&MK59zBfXxKKN|z)tlE#1)sBZ>0h>7Gl+%e>$f`0sF#n1W4K8qkDqypdt!VR1sdaSuc z^e-wyxtyYJXs5-ZnGdG{T8f@-d>RBgBEwJdL0I*~}3uvAx zP#c;vdMVNEFYsru#YZFX>(+~ys<)hNwu4TvkYv895&6KIZUe!*k~s`n)>m#P0iR^8 zXo~jo2)f<_5|MiYT2ND1qP3ei!Z8(9|Fqe#>$6S8Uv)7*PtpC!)z3PdZgxD@Lj6n zcqI`d_wAVPK;PtyC?Rw3$Pzi`0toCfBuBUn!wtkaAl3iYw9U_R-T9wT zXt^8>hXrV(AP8hg1y~Z>mxOML8QW<~(5334zUPQdDv>=6yF(DP*a-$!9P3u%51YA+ zqlB8Oal$40xtz)pCaqQ=6*xd!X0rNa#s@ZdnE3(3oh=QuoJCz33C?}4H9DB;|icX_j(NyyC}HO9RTs- zMwhk}1Y2>=%C5d%Zm~3A-Jsex*@1^KaS^+$eoy+`|GCmxvSr{%-&zo!$|*Xiw!l8W zq@VOY;??y+L|pUd|87w5q$E~^BsvNV9>j=6UI5{jGd)k`T;IRQXDQ$`Y;-7Xv;Jj4 zpGm@UmXH^WCC01P^RD%Rp;WGU#0buxpa9G5uEAW+d)DXXEs9G4QX2ELH-zV zw8jPx3Y*Ov5JisEV7B^?T>qiFjdD(>*_IRb;S6M}rY3(Rty~MQs5rA1BI=SVUA>vf zS0ImtpEx$~MbKAO7dZEnzxKkj*1vv+OFV#kEK!HSqqB(%mYhPHw}jR5%Wo2p&=Rd! zGhETCIBGK02Zl67-n&6k{IZVpDH4_tmI8Zd7Ig`YG@vj}=&>^A4l8|0OT?_Z!fFsJm{QHG_NaJIXEr-#@-+-|{ZkH-iBHt~2=1 zvQU#&tiN=KKy7FIS{}dPGfli7CZD*`6Tn=)?b#%{@{AiS`v9(;U92(vGu)3n7){a$ zk3XghR!Am;$ZbvY^Zov-ov#4ZPk5$Y+lTZppz20Ui_mtg0}_zND7!>!q)iPP3SAt>`rO60|fZkaeYkOsufG zF#h))32{@R%nvYH>Oi^$bQOJ{LBQ^;@_)cFWUEE}%ViZGdWXWA*;xZR3+1g0D{!$kX$eW&;=TDW6$0nNc-kI)JR@>3+yO}-8i zTZh0)Q1Tk?gC#p)2nBNUgp#$0!OzkDZ)>XPNsyf(n3jAR>0q@p){sJ=ej`r9nPTdi zKl>pk5`z#&Gc=05%XQO>F^atRorUMf5UYma7c!y#ia;}O0c&IPDHsv6=OsVe>KVBK z{Op}sL7?hS+qM-mjbGqz0ecEtkld7_!(cF2$*fx|O9iXB+xuwJrY-a>h-F|$+ZO&I z3-AQ%K+1P$8#IN^6Bk3b6MHC^yg<@NS=?fI5G-*8P!26e)Xvvc$W|^$Lp!VJKh;D1 z?*@Q7tNz}2xr36Bw#EK(k1xX0{S50CwcraZk|lGSSPEXb>TN$z&chC zKVGn+7s;r@(rTKA)9M1TYP5d*{fgoFR8h?Jdkfam@0hR(VPRN^WQCwfs@YhwUqf22 zVSiLu%|1l`Rp4G60iBjK3h@Fg26t=A+096iQEw?j>oIvDy1V8o45SKdQjoMR>KS(( zT02J;BkBs5&sU%QrfX3Ol~CK%&hs(fr!+*G1_0KXD4`wvl_W)+f%FKCXP&oQ0-Z z$^Ss@_UhYPWLrhzHhQ;zTTpo&$Oik~ZsElg9Z1t3}sQ6ql?L{msXircpt&7?O~&xDX=Z-q(O{ zNcG5|#u=ERWuS$;)W_`q5pKnUC4K{7y2uj$WLb$qulV2WYqlCnQ$?3i2ZE8Z#Bz}+?BgF zD={JINU9;^jt?D3a1ZkNB|;PNxt9rqB*x*ZV1pXq_DQfx8G= zISmNBvgPf==QBOBtQCe+49l$5T9yvKhT2pi0IBlOA}};rK(E;lKQBD-8gkv`p5VIX3H)a&OA!W9w`Jbmw|2QrG9VD<6@v#-P zA8jp0`XRp*rx94`GXH=YD(}?lkW(!YvJEMbBbE;qRgoo z`|}g!MsJZ_DlUlKE(KHy(O3uciZq#TsA>g(@|mC;jF``$Sz-#wGJ^_h|Ag2Y)q%HcA*7YfJ(bc?ty-*;|*Y?jsTQwL+tIVvM#=1?1H>K15-N} zz;?DpmUAm=hEH+25p~ZtVI`8gr4)IvrzaNw6iE|=E~0BZ58wG5Z+bcECJZZThCI)1 zfzQpIC7o_Z|5OrZ<%C8PCSd%dxZD@ohN3gi;oNHZB#wn!Jbz_lRq_gf8K}`ZeAqdR zIR#!Cq%ZVdR232Z0d>qps56>%as$q5ykzERmtB2wh3l>>pg#K)C7R81^0US??>oNO znbyPEN~UplpfTjZrIVkq@~y}(@t1U->e$Q$>>9E#aU<;t*W)P!`)WVgle>`X70w7+5O>M&%MawU zBM3VETl&(a)r zHR8wDU zQOpTyCEo6qHWMb;Y2?HBEUC57oA9G(p5SK<;r7jwH-EwGm=f3>SN6h00A-X>&*`Lm zBP6>pkC6US4B{u1d)I`qJ0T8PzHdVSZh<8;y2_e)OWc(1yYf!X35cNFMN57^`oUQW z5{8g__!LyGXlt7*#AFs^ZgIxi_qpz#{@IwNi`7T8%MP-cub_ys1re;1m5V(!30Uq4 zB=)dSHILZCKOl&Hjyj(qbLt{&#d4+%FR*CyV?_rIF4C+3Z&;SQ@7V(@kC~zz>&1=g zhW|Wi15FSD3YZs3H@Nw?k9^ArJ1dY!CbmLjI<g9YGH9YXX&rEa(O3r-lF3~V&zT!P^RCgJ+fp#TW(vOB;^k;gK z369+0)}^*@;a)nT9kYSpZVy7)Ky2^uq8DfX(F=F_bq^_x@gZpAOX~{W0RVA{Z?WQC zEQ8a#UwNU=O8!5e)ej-JBlj9+Mzfq`Re9^7K|jbpO{@0?AbJ$7Wl54?H(?X44n0lZ z8b|gN%TbZqy9{v-Q5T8sBZco&CN4S6EOglaOJ-JmvFed&7dvUh-67~bh?;-3)k z2Vr272h*lTclwsrXPEeoyTc*>?`m#TY#QC8MGMr75~?y#@gUh{{`}ZX(ihtgx>2FT z9*DiQQVP?$I`Z?d-D|rXEo_BAt)*0IjR7ZY6d46q9)x35hHT3xLWy3uVrb!O364lm zN|_l61!Mdbo0}U+95es*luq~_;f?v@KqD+K-mb~873^MJ!L9=4+GJvY=%iR8=)^tm zyW08z;f@d`3r4B|=1*vu(U43Du+k2!e~ev2Z2(SP4H!G61H^(4a!p0kVHw@UOAxzVR_{+W zxQ+oQmol{lZAXDoC=bBy*6oth9qJv^$trD~*_SYQtfcL4ykT!f2LE!e#7Mqp{kRF6Mn=(497wQ}JD)-#Q=43v7vyLDdA<39ye3Nn)c5B9rVBBl?dxFZ z0*UT$PHuHVRd86vc}C)#&+z2K%|VvI`tkK$2V(a9M-R(7uUJvy82Yz2$Gtf16_jwa ze8K~)2&phwj;P!pCttF!4}c8fxb)0^+gm@!9%x@myn<}FB@eWzB|ALp{8;I9)z8ex zHh?tjYtZ{$MgC^Dcq<<S!cYLG%4N4lSu#{dW1pEAprYKlejzxzn4tgI1UFJ?l*fZ6#_i^EHY;^GSzFCI(K z+yMFmXN%TXg;oj^G1Int6U?|fTbIUMg;nS(LUPm#uAl9NU??sE;8&$zQws;4OUd>0 z>JTwp#?uHc0U0|!z(i)r58B%`kMB?aY*VGAXs_Coq!~qN7)@BbO(mHQT;BuVZHfV{ ztK!nF^cT3DjVba=IBX4?WJk+7 zT<{B~(^Sm{<>eMPsNKHt5bCW?kXc~Yp$+)HW4RH~eg+fI45h+o)cHxCUjX16{LG__ zDv*+z|COA8X<0Tv#VR@myHNG`GR9mFjg<r;* zK=3)dKVRoGW&&v63eCpPxTBx~-XO*BA*!;V&@T4YQ0P-MwF+Lb!KkM33~zO@!r}lj zo()y&AxWQY6{3HHz#bVkp^b%X<>6cj-Y8=#SXN`$D`n>J>eJh=m-qL=QKQ9K!7GKX zXD<^4Qgcuf3_R1x##jc2>c&mKnZ{KETkVU6e&L#ixa!OcO%Uh|G`X!4k!iH9I#@ zd%i;{QUW3*62c+TB#I?GwNa@1*RMZioLsj>wgdKN>J8^s9g}RKT{#0o`p76}6nc-$ zsYq&{{m1E=?Y`+I z!w)uf&+>VP_S2&%0@YW_Sm9gvxaBhk)r>N$pPS>LX7l;2U?a_1YTAxSUy3>!sdPis zGDO`5+Beh(ZK~L285M%M7M>${Gi46tzI>H-R-oi567VAS#uY}Biqn<`m@uP|oSNuK znZw@k6iRbfkkE;NL?}S5n?C`Hk0E2=wSVD)Sl%lix5~59-FhIgilJ;R61;)JItz{8 z!lsXlxC?0VuNTs{_Hm}I;lkja+Z$@I_lLH%sXd=WVH)XgwB;NaE+QMRxh$xKQl|ed zK$Xro-Tb)YOui>-D#RK5qZa{H^8#-I?UKYjg<2huXq1L#Qnj%#MvB(3N&qv`d3YYt zHcGg!zm5wH$X^HfQ^l>X0Fyg~NXKhEyH1yEJ=mkuAVT|JEw5usNyASv{RydAZ;$Re z${9psfvu75c;3`uemELZ^W6sh+Z_n|bHlPXx#tzQ3CI*%%QuyW-c~j>?yiSwMUByf zq{#xcHz~f-#^txG3~8*ae&%68FF>WIksR_cdmE6A*I@ru{GJ!ne*hMnFI_mM^9_ox zHfQ}$xa}!gc&AoXpLvl?QYEP7+m~iG;N^4%nYt`S#is+T^}nkKvJ&W%?qN2QQ1q2{ ziKgYb*~P(qp`rnZ(9EoL2!E%QyS&aGFMYdoNQ+TU?D0_Gr;z_a+hfY0hDl6Y0_IKv zFUE3lQ0BJ10(Y|o1#?nXL+l*C`n!^7E|@D+)?{bxQH2m8@HqUW4gjx`1Kpmmdk}T8 z79Mwi9xs;B@E?NUqqoq}Ki;XF(1l7@P?g9C_>jvG`;H7665L>kg)280A?)U$c$xYBo;swU=S6^_(YqV9YGXF1I``*JFweL70oux;2NFVeJ0eNf1(e9u@nrs;GcXS zjhWSLL-rdmNNpGJ1VOZ@?&!V;b^)5VCq|mE9>$S!pk$g0q}wY{FEHhH`1{%H)YFjd zkf&917Bty*On;ON5Hw)nw+~Pui}+aZsum+9Cqsv-?)N!uhs|ZfLy#ooD;uLb)?Nf6 zp4f?9;BF8o5iGkA6p;G^N!F2n7@moF+-LM0i)@=HH~faoD+G&b`l$oGC_x1w-i{qH ze8%Jo{7-gpy9;8qA45h~n(W3*x4|Akt`{0P;h!W|iwwONLnav8{d+=zJ2XS#U-%0j zP$t*F^eR>?WlTL@Og{pQ)=L}n0D#A9bmlKHH-@~i|5?(Azrt`T{{=jgg)I%pn~t{! zZ4R%CY+cJRi3%ciqcsPda=tvdCntM~CIGsd+H6i$2T54;($5Z}wPJc7w81 zE2a|)QZH^8r`bK~J=bsW>a><9m>w=eu&szq+KplXWkvG-SD$4W;X*O>Z^a2yW zY0OxnPWl43L!t6uGciekZf*#$B1kRVzGWX`vd8y9*)17R10Q^L7iuB|r}*BnFjfd4*)E(l?MSPa0qyW=EJu_bQwiB z*U=EJ$%zgE`t2%I&lZA zmUO#%h}Dx2NxRJT5M>J`|JVxrhJI0gwWvJ-%Zm;)7wAt?T)|esGitR$mP8~HOOT}ZJ{65fOmYBzcZbx$lt z^CtS-$!;~1KqYD^hz1g)Z5jw(3=;R4Yd(LyQTtb@sO$pT^zX9wSOWlQo7=u66b5Ud zt|*w#Hen`Qt`aT#WKtIko;d$N(E>(C4M!=eKOhu0n!mWJoi%ne5k7hI%in1LbGdtB zFKBOUX*n8U&BRZ~&Q!&sf?m*#t@syUL+JoG@Yd|44_3GpKM1C zLdjKE1Z^YL_QEE3RtY=M@999KYO*~(2nkIEUYW>932}j->a@>XJ*e>m;oHUiYNH+< z=@31u*8J&W+&KCZ$S$J%xe5<%fB_G-)MW;*Y9Au%P`5(vs!Dpntgf0LjyYd~ zhixDZ1R(PG0eC>Ah>a5+<9T>T4rO;hC83rqxbt&p#U~S9Fx%bl0UTvo{gn*C+xkhT zsCku%!FJKek&Ej!P!|iAfL2}rwvd&pF{3J7PN38=>Fl6dT*#YCH!{LF(5vl148zN- zzCgcL)=^9z+!_dPXoI_~=&ABMgi@Drmi5pikbVs`b4@{2{SIiHcD>}J0c5lV<1Y>t zDzOm3iu>_19@1Ik$4&l@7Q3b%*biaeu6_j6s0$+P@948qksKCt$1|eOUQ-K7+!hR7 zL!jiLj~4&9TP|PWDBv#=DDfO3A0d6`v)f0cc4HHzE(^w>#Z7BV0;JZ8msYO0dTN70 z9o(&^-ArgmZU5#a#y}z^&2lgwgHi6(qkEfUx(lV^jsI10i)0lvcW7HvUVVq_jK)Yx z5DJO>k6^>;@%nqAVqN4gM(zQ1^J1YcRm;yO+sX@gMh5>CEguAZOGT5!?yoRd>M^H$ z4uD%v5E~`P=3GLtifw`ql6_oWaf)>*_?`u+3ymgV7p2hr>(6kuGmL$~f=ya>SbqHq zASG5teCeqjeKZ*EhRbrLPX|G(QHo$ANHYFJA1ZYmdeJ10;wClL$pc7QAoUD`*TOAI zFxrPzA+OH^qhg&X9e<%9+ue(b`YtXO0IY2kxPldF;Ys#8Syndt3FcTn(Ha2Ln{H74 zL1pyq;>N=IpXp>4bVszCBnD;(+pLxf-SlENRvBgm^G`%WdbF)Y+EJqCXvOtsQE%*o z8<~l_-ozVKAq_b{)#CN}Vnmc_ij{?E;SR+x+0FMKzXF5HOAvm$@K5<{Kz6|>L{UDl zwH$3!1LOxv03$;{<)>zcN-dWmvjAxrnvnXTfy{8r?j_ce)M(nTU>+wiE_C zC==ye57Zz-TUiU@s~#b!uG^FLJutYD*2W9Iy-^b+JKK)D%SMnq#ef+ImFZr28;8gi zFhnx$K8FBBzx#h$dpiY%mOIF|5YDh&fP+|9z&$)|gV6dqvS^#omD<<=CzQ$x@odwl z#;&YrT>%)@JWpFKeUSypgF2s?Y|Tr98uuuS7LBC9l^32q5 zhG#DNLt0RyI7|6q+6RmdzI{UZ(lm3g=qGn&VT0CWC&uU4qRnGsD1p?6rc+g^LkbPE z-pqiR>F;n*Zg(w5nnRG=W2!EqOe0P+UhE*N#QeoI_gNw}E(BnQ=s+1rs@-%UTPxSG zTLeU&Mz{rNsz&ZQ^j3rapAg2ph>xMz;DJPIu{gU8?>8BE@se`ToEO*OH`@pFpvcj^ z0Y-KP!iNEyPpvkER`h#qp+2=KVm{RU{69hzmgM7pb4Rkv-ghvHfvO)SpaAZ@a9LSU zJCioW84Cf<1yR(+q9$d_OpJq#lea9!=CN$c(~}o2ZR|S)Vm<^zweM3HWkx>IzhoaZ zKQs)wKl|-g6Moz^Bw?c4Du1`S=59GEy+KXKkD-fd9~WlMvs6Gk)`L89eh;$xbr5c( zTLvYzDT_0()iMVDcHD2Z*Fh>c3YB1Tn*adiraDh+6!QPO1OQ$LU8KZb$g~#EN#!@A zvGEpdKQ;f}?`w+&!7(RIqL{1{FW;hV#~7cjib}%~m)^`THbo-|xlQMzTYxPc_6!lK))t z90g&dtksUck74YM7ebIlmuGz=Z9jbr;LpXIm3avgMb>)J3QQi4VLa7Uy9CHj#}Y_h zq2tNrqagZBKVS&`00XdZ5hx1;fT28`hS9nqY;%paMMdnQIt&T zUXx*oLXPN9&q57HJ2yHkro}!#K1U2E=M?A^vS4`k>NSv&3eb>?=3(uw_Yg)UU_1#E zPK}K5#Ok{_*|K(m3>cTe?}3Myav)Br&{{btA*`@`ah?76BV^@(W)cFR_#uWYA`BG- z|FiOOxw=5VV6j$=#6=CLve)g!4uVHWUq4cjxKUf!*t>HJ6dt~o+#OGm3a%ggozCVU zY-Qw)gC~PmjhP54P{Z|Sev`GU(6}F>M80(Nqup+?-3M)!L$fgpL*2K9?9z}iD5Xk~ zs~9sqY1m@j$uUP=j1$N<90r7M3gK%)G}*ew_FTJj`WM?OZq-qk;mk1Ng5^Tm0lNT~ zhIfEv?;L%!NM<>Nw>rX+k8ujV^VqXJJ1o`+uWSNH4YDNZc+8y>;!P;!O(Sz_P z?K7*D4ZP?e`Lu2^?M4l17V@QPL0s1T!E!i4s=t-1B!6YiD42qNB{dg9fsX%9n(*n} z;7$4cD%9OvWumb0#9OBnN~g%W)o_d-fqN5wG>Y7YU^dEwLkJzvs!my?hn{1ih7AwZ zua$c*12=;UmE5;I#@S{BH`gY2Ox31nkhKr3PcR}<@^ zAz8lv8CC={888XfVKZlmQa}%)uMtBysNru1Syp$M`%H?Vv$bKIpq z^O_4(6~*+yMVq}9Z$H5CezF5TpnP$> zeppVMRySTftf0CYS!;QK8uZt+ztsj~XP>)94tfoU#F_q}f2wubl~rVZ4?!FT^m-elNgoP=4xmDFr5^4up&)>(Prt>EVU8!Y$qlPfe?Xph z*xo3&P*-4cVzwQ_6PygUjowW%z6fWsyu|4WQ3|_oCi&_m!DOHG1}|7*R`ghH$ZkB? z_B-i`{wz?|u)P1gf!2E`_G+%n(j*DHK|VvdcO7!HR8fs5NgmiMa3-j1ojTSv}y~xoiMQ;N|~rf~KaqD+%N<&_A-E`00T9Di2MQF9SjcsgpS*i@s9w zAmGeAB;-H~1h5M&DROUS3sY(jBSZ^?1RP{#)d>SRBQbU&t~e9J!K(pLV|&(zGvN>A z#tl)ZRwBBMRNI-Y^OOISvsr^o7+XV#3kRECV z!QFl^=XY(**TaOw)qn-ADcY=Pl%DihV)*jIoFx$((V75lxj0!vmuo&*ElYfun2nUfCCC)m$Cv1%YNt-Cd;B+pMfmiX(~jcbUy z7ru#WQ=Rxwy|3R2vC)W)O*H{lBMn8npgu!ImP>sFwAY^cZSSsYI4TBJ(8MUq~n@5hz$9}C&psRbp&%JA4h$AzocYhNsS3V0cG^9F(MFFqS6KF3M@6L|L;+l>;2N-+>pqcI%OM z)x>UOb#07nsnN*Vy%8MaSxdy|&HK{}ZzkArRGKRxY{Wl5*WZQA6)e-L_-Z=c z8Eam$kyo4Dm@m@0J_R_?cSRK`PGZ|k(&g+Vr;hk0$kc#Zt2llS?0_it*3uzxH8HR5 zMajj*8RpBRp+q{u0t5O*4q8F1!t4K!uCI=(GVR(ORHRfw5CjBC36b1{(j_1$-O?d! z8c~!|K?&KwCX^B+71(r0gLI=HjnbgfpoG*}kMB40e&-zLA7_5!IK#8|bFX`?tCq!+ zN!dQ;YJ^kXQDx5k4MmYk4ie8@{I;tPl?O?JR>~_ZizxHfWpdpfwhaGDq}<+y43bD` zL70|VTJ&9r3uAg>P=#C$H2)j}CnUr&O&-XunsXV0$bv&9KXr>-pc=E><~oo%`ti*j zxDqtJhZ9T^leOa;$lSsqC0-K~bXsMDsbBv_^mj{3M+6PPvdh*NW-75WX+?15@!$>q zHT~Q}rs34C%0#W|@CxvEb^tisL}rJ5(!X%IxKA8thbT4S;9da=r+rd9#KjJ-d<9L5 z$fLMN2b)sotk8&k{KY>~plGA7DEV9542Dub&}D&mgGuh*uz6q!9HmSImts&wfCM*2E8pJ)n&JdKkSQ!)=R6uv*&5sl(+F(>SZ z?SrrF0vcPYaKvrk+8!C9G>BM+`U<1pWb9v_yJ#SSSk|t>z0{8=>+~(5CsPX&VjY9h zK$mRZW~72GI>$-SencakEPMiFnTNK=2I;4JG!cz!XV~8oj}9J#3Y1C;Vjq}2$r*v{ z@n%qE8Q{ooX|z+xlUS=izV4FH=TLp?1esa1Q+h9h^+nE+>lKoHGSL(n<17cCki9Lt zM9dx1fG!GNfD9!jr3kj@M^=s>XKv{_C}HM&C7A}5+G@ey#?*)~`d}tl_JqEum3GEG zL^A?WrQ-xaKW4>ZcSE@i$yR_4m1oc>S<ae`ZFy*M z@ZlwF2wl>Lv&Mp_Y=JTH!Q~Vrash1h|N>8O*Ek26GL_5<%;36*W%I(T@ zM7I9x4LGP-1}TqGrzj?)BpV|fa3XyU(HK_D7)Y~z0K(J~pCIY;@E81@>^QcZwPtY? zWTF36g=(%$JzfWWKArU*NA5jvzh*)yY;9cNDH~>vR3H>q*+FoZkK82RWFAO9B;Tz! zc;q3SO_-%nV2GH1wZ2pXz`JVhok zrAwSnZ2qWcU#B-ij))#0c=u9QS*!&!jV@z(`NDLoIqfJyGU;; zrZhNs_nduySq=2wv}x-ybXXthYIr5`#BS(`Ct@xWs$evWu%)sBMZmy*Y+Xg7Ie|DDg-ISf zU4!(In7%acS_CWmZA7#hgPs`coPD4~!c+dQQ$QVwQ}P2pxiw9Sx=MVeO5$ zkbaSzhJfBhdK6|T*|&wY5oJN74|6mk^N~my+UXjl)9LX_%1Tj80}&?C4pucE7#%0; zA8RN=Rvw}u_${1*&@#Ey!Y@Ub6Hai=%HayPc0$n*2^n4Q10%6qA0q1LP_y|xOU@qs zV_l#+6KRvqi>MEg^q+%I5%#QNx)3%0)u$Bt7{v}k{wI%SWXecmtzE4$6v!=sXb+*J zoj&$hargQlHJjpYlssz&)3>TYkoY58j}R10fw=vPZV_w27lHOI0OJ(CBfb!1YO@2# z_jGW}Rp<%_WWN?|A#wN|av@f7mDoOoCTxeo$*3|`o_1gNp%k4VnEDq2Afx2tY&4u1o$U8Vyn@fT%8;vGah_z_XE zqC+CRqiGbzi?Fn*R;I8MA?+RQq9Y)J8cxw)3^G})%?rMemH$?_f(pGqfaq)=3{x+G z@;y6ukr%uJ9Og!Fr;<4!(|+$eTocb?I0IVgHY+_8et#sWYAMhpGX23fiCtt$n2-*G zUcczS$Sl>lho%}=PaCwz%>vDGwPPI|w?|~(FffV+etj)+j`W3^eOs!TqgAB;C$hd5 zNk0E^Wa{5&BT)%;g7pD*uRI3hOixl2KGsh=^$p(Ab44$IDr*vE%~wW67O+R;rrToe zk+wDnF89plg;A)~GsVx-XYr|x$ubzo%UM~#k9APeLW}O=B`^TIS4k7ef57%w=OUfC zMi`|=t1o$V$8AJ1`468+OhWpMoRN?ufPga<8Zw27Rsab^DCl7}a7R=`i0Vt$B|?1q zXL^MEixct$M9GMUboS)jParQ6fL?ilgvv#{gSKG(Bl>iTE3#n%ti{(&bCB`MPx!FQO!?2&23`7__m=`#J0e3a~q%qZ1k*qSZ^65YKiyRdw)SLl)^Kdq`{Nc7b2aI z6`B^G`)&y=Zf?Wcmg^RnURg=G7zgBY|A(HYdVv#X{Km*Yxec2+nhX$J+u`CTG6q%= zg#Ra_2fu(S3`Qnxr?G5!Q;)o*LokdG*>kn%1rq#mu!kg+A3KhHJpP)Mb#7PR9Wf_Y z!rAD9-jMEKK&iT7%gWVCS^2~gsH|oL(IB2J3{z6M2k`qL!LcTutWqe)mj*9DQ}(m< zDyu>T+`8ApfdV#p_$>o_H!X1%$!CN%>qX|RWQIlB!WMotjgTOv2mjzz+(IM%wkjFe z*^61=Y|i)G^dNXd z2{MO_%6&&B6eiEHQuIqCXLPq_AHJ?ZhNH%MXksYP&Y&b>sz-R+V8O#nPtIJpnhq4B zqW$S$KmxK_9?out*G96A>@bojaC+kEH@%O(Kqwtp8|Is}ClU2|&;&KtI)v=e+=QU>##I$4- zex+M{E@}Vc9rJ}aM>uiHV6P1M!TRkY>&cCm0+C7-0Yq%u(dUcOBVrRJyzV`O5Rrap z<}XOFVyzHEUpAE6Q6v`UbKyDV9HxigwxPm5EP$;R=7lzh;rG|pasmj2DT-ctwEONd zQX>2kS$m!uwDY`w&*$=oey|!|2PqNacjb8n-=)UG@W6Jz-A>a!xSn2u0H6-> z1O9-baXn6{kD*%6N?H1H0amwDWxWP8DBplFRQ_#lhBjRbTsO?8OPbFa$@`TeqU&Yo zewoG*?%Lw?x99o^5Q)0~#XjV=fu=sMQYpY-O-J(5Vr>W*h=|Xy4K+xP0fMq2@N>e(W&dYfjaUVFxVxnkf<2V{dYlS7F%1}27Wz^ zph4+57#@TfSfex%D32vW<`z@rd4RpW#Y5+(O4|A&GX^5g1R2bZBD_3elLpTEyhJX? zQ8}_;keG_A=@$!Az$XQZ2rk(GZ}3%OPih*r^+mMb9=wPSJW6>K8Q~3lU}UcpaCL6c zC6L^HxNvOHyo_Pjcy za{k~_c(_`loZsga!&P(t+Xbq0j<+1=aQYE>K|g~mR_7AkS78z4w&_HGqwLDn1$i~4 zqK%qfK?eMydquYM#@5wdp$7EefxI(Tma8mW9KQ^vPX1QH_3KlKX~r(4^geJ)u0hul zzvYG7N)b(a`}%`N>1Rt4NtM%jbZxL1AznB=@%gxsTB_{6hA8Ps?F+_JueE2yAHpZp zEs3VIARuLEf)|k=rYop>#{r2|ba24g;k7?#|9-pYM$)Ab_99S--}#vO)b3U1y$GW+ zhxhO^*lii4i5~)yC3Nd4nd~e#>!$!RSwbfGCCCqtdjQlQr&+jK!Wo^p1osaP)H2Ap z2g<`gfSb;BvL3JhODNHuvYVC`hQSu=wo~INpE5irYjvZ`aA#E1)KD?@IKqveKT+;j ziZrlGE3Op9M-JG7^D{oK%HeqX(8okdzjHn3b@MceG@h)BUoR|!oeQUE`2K==^e*dl zXjqu=fPG?kVnW_zMI@u7S;9CZ=En(VB=+0(CZXWB-r(M*t7dA?Z}*8)$r57qu?s$;McD&1_TBs+>3Bc5fM0f~`GUJT zh=_w1lKmKNytpg_w3bGxy$%b%K2uW@|5ySfSqD>3-vBd3n)8{ z+BvR%r2rpV0HdHdTeK0VBlG3U7e$=Lnx?VK1QHlzHrEl8sWSn(6g3hlm8(pL95@)H87fqp z9+a+|3%w#bwfoY?at8Gcvba$2LOmcSLjLmm3t}eWbM^l5RU>MDxi5pH;|0(2$w@O7 zA^qTw1?FF0>OfjB1n{jE~`{*VSW6a&)&VRM6t8TPS4Hx?(V?T z6lc$ppFQjU;e)!?$PK(M_e;&lTAl9Qy8v4Qm~#9KqohLEy@`= zA?GOU|9;2h&%F*R_udr%3Z4iSwvm7~S;5=8I*WL^R>r|y@%?*0FHj4p=1AzCDC|z6 zsGrW4#@2^i*Cjy2@`_c7lDQH)#7j8WEqn@dE!LuCcBYrkp*TTCfdOvrL!yp<~Dw>+}zt$gI%s= z;u-3h+G&L6;EQncHzv2g9!9UhK}q}+(pWhtL&VR*u<^u>r#Zk(CeX6Ja58onqa#CF z#*!9c<|R-jIK!Z8Zf?%bsrul32#IcPp#{`L1)E!_6`rPCYTG>|Z=SmpG4upPF*1P0dZ= zZDD{B@&x~RkPQ_+gVu98`?FsE>nYBZUA8Q7`aG(gS@^wG=kzQE^}gSVdGo=*a6{;^ zH0ZSEMXQFiISw6MZWb=zffgt9@{FW?-a(fBD@B>9`FWdp_Bs4!=QsgKzj3o>nGhAZ z?LNBllPaW+BGHt`s7xrv29QbtW{lUKM&^1WL1J2B!uhAP3pp=ez7z}J81MLQ%Ai+l zqsB6%Z=JQ7g?!*{QSc3%=Y8=%A3yvBJNDk^Hq0}4{h8UX8~G>oT~wD^RQ~&9ZrpBX ziBSLfw%}jan3R*{x$wXK0alMi1goy~_Xk0VFUk6;?|=V;2Pn5Fai&kkHPvS+DAa*k z_~*Zs(uP%1QIWN>N*_sPn-L5SFuZ!C^47IW^d7xjRiRF_oP`B5l&LNgU9e31=jZ2- zoNYrr^WNgoOeaiDP3$+p;OR zP4THz6+VKEdu!FbUSwaSY{lyYe?NsN-+206hwEZrJDM87vzCLbf)5&uP#XSY@UAHU1fgE*{XqWu^@NHJu}*i#7WBCz zdK#KLJyoh58}WcdT>G&)!3eC1$nN#qo$z8auj2Q1ieK-i`gs211?#^*0#EaqzmNvq z6QsI`Dsu|lAql?^^Y53+>c-mn8Ngoap{XhGT(^M7oGG)VAS%6k7^6ND>$)WRjQ)ni zyMqZ)ze8~ts5qBKOGzNILs)>>GWDenxrEmi(i*wWwvi*7z{>K|)UEC#nM`%b$CJHQ z#Bio{3@{4jD{B`T3e1RGE09{#azBn2cC>F=MHGt=ymjs+uW6Z&&r{}0GmzTr2~LFd zrn9%qz=%O3@lXhSbpFtO$7Y-AYPp@Ut+pw=iivT+;cyUvhi!O%j;8^l7uI1n^Nm_ll>h>De8SCxOFdo(W9Sr$# z{$1RN70ON|^8?`|f&?!OL-aCC_FiNE_lq8uku-Mb><#KdcID2dRTzoDu|d#3h)u>> zH;Ayap9G&LU(C5^CrW$qXO`LP+Ot;so5@E)=marp_H2&UGN;cWfLp|cFcP~D8J|9L zMpy^Ee*_w@_>j)0B-9oVvt4(i6eQm>0GSHqXI131eVa4})j;nW=s%{RlZRDaZ?Y_2 zQ`*c4_3M(gj--}cK&&%S?Za&NYK=Ey1bhwB|-t)nuJ-?${|NEdEA}eOM1B;>G zOSqL|>;1n@Nl%Q!Z0sn;L*`5v0Hr>*R*ldo*pDs(D}NrekwUqx99$ec9G5r;!Wbk% zVA>!<8i(^*NG&bmK3woSY@Ia%$rpiEj5`qd;vhd!!~xDn0!eZrn#?nY_WOQig9yI} z82%l@+2zkwL*DlLAPMDLINou!YW0n}m7Yr&;=`CfPS|z9q}=6w8()$w=R?ST3jxPd zoNi{dZXqpvKBqcRWfOB1?|`DaGhV*F>Ucly?cBbU>+}f_`0)t7xy|TOuqTGR57^DA zNPF>#{`1Oj4XhacIzudF&=4v4QuTj&;Gm`HqrIa;DV9eZ;$;pa7Lwgb>v8h3Jg@xN zK8f1UUpu_k8fnS3G&Ky;%4>?T8qy{91072gJ-bH- z6Gt^avt?(+yDk(N#=A%8L^-5&iggW!fsl(o#tz&os0Aav8(KZqhjENflZWW>=NJn| zD9(^LTW%NJK`II)JMa8Yv3%6Kr)1MT(~lZ20@g6qO2pR26Ta__qCG5+<=gHPqFqu}7Qm&9~(F|#>0zj`7&4bBb$ z=Eno}u;H9PMiMtUCH6>1BC$9c?U2!Gk1FH2Am+vjLXxK-d6|MyNjRDLP0$B1?Qu@e zBF=Gs2N>fDINq5p`htVr4T1)dyqwsEi@SqF}rQhNhEw%?eQWO zW9TK7OO*5()oxfnP8xmBn7c!dm`T2eCB;T=9xvkWDQ1?H!rtJz>~g*wQ_Jikw6*@v zsd?jdU`l?D3kFpHbdHh+TdO32*} z%B7;BdiL(lPVBjeX!69y#46~f-UB9Ch>RWJMa<-inwAN=hSwWaea7{SR`$Ag=e;Vu zd=nI-&1B*@1XOsl|eB(M8c{k`$Feg-)49FGnU6lsc4 zyklw`qn856m~FA@#Y~%jDZM57PuK4T1sm7MAEDkUS^j1eEEN9G+@=8hZ$rxH=jX?A zX*euY=PYhZ48kOoPZS#}>DV)iOvc+t&Vx{*30&R*per(ii&8PWxw$#+dlEE`3A>#~ znt2e>bQ&r5ni!tV;fLWd_T#G^F%ut+&)ui!5$U<6BCKnoiF3UIl7kCyYoUe&%20EG zwB>pi7u=+!AKBrztEjHf>DN5;xVtn=9(C!K@Q{QqdGWC@FVYSAZc-_$aVd2e#A;5&{Vv{+wX&*XX{i&6dzNqGp% zJX~xWt~^?4_*_{&=vr{jbf7@!UiK?7_mjxjzA@LSwkNK;qMfbXz9i8sfyc?LpWEV& zZzNw-%E>)8d}S3t*Cs?uHD8qdu<2F6X6*ZY<~i!^Uo*y;YZscyE;X zTT$6~dW!Dv@2mc#9osCj$c6d>8r;Avml@w!IuR!!^faiqTj3{F%`wTN9@?gqC0rl+ z)3?Qv@}g#KcMEV<{^hnLm>pn*>M!vHd{7oMAn72|vYt@_DXT$t32*q%Rp2jN9@+&( ztJPNcRlmdPtPchd5k_uHc{{KZQCNkchKsQ4po!@RzWf*EB z1)MA40ZIp+7N6XJHZ=rkjIBwN{PmTEg^XjMoblpqrbnuBw%)8eS%}) z-paV$=qoqBdI)*w3bLq8BC8+gXx zC=sgnqS9Mysl0n;I4ck=inzc$UMzA8^s1`Xq+<*GuALn~4F8H9i~t%YUAc!Co8TfP zrMsj4%r(3YkV`yB&f&9ggg#I)NkgFAa8BcD!LP^#k}?r%ZY>o87%XubJ<5DR;{kg~ z8lD>7t~WQ2pSmT!9*~utZVaBdXV{kgM{)oabSK$6ICt2ilJa+_2o5FYj6gNdZ`DRt zEHwrk^%{gO#~u)j*hK2MQnq!t5;HY1%E@*=>pFfhh5bJeK$|k_r=qX`!=Cr9mL5&; z_>Noy5XWw}^_^1}M^jx>)9nWyPW#dC8riOlTud9sqRosqDIFYMZG$Kg=|F5Igmjk* zmRWK4vglVi~1?ie=rdI z;y=%Ar zUo&_)K(1PpBZ^NsjH_cp4LiH#C!ie5H4|ZNXS7>f7bV@TB-O1W?pHcb5&}LpHXgwybYXNu3P)Qq51k@n>73*gRr;_#NnSabW zEbr9dF4$X$GxmaRS&eNTz+fxM;rgu%9R2*E9VmrSj%t>cmfgE>NMg{@_6}6-`Q~$( zITu)Sum-OlY%LjRmCi>xRG+!iL&6jwL18Zp&BNc&jQmaJlouYzJt}tm>|5_Ib2}PJ zd><=aXB0t^ArTZFepHi7v#pKpOD6(yBLt*+!`j(}4`qX@|61T}KCZ9|Rb>sjoP-A| z!5?6>(6VmtxIv6MiBGpF>40sm=y~yQZ+o>B@JwIoQ&*GWMO(1ZHLV<#`2r{vVF5T~ zJH2n(cweZRx-MV;350^>;r_18s!)>Odh@D z)N0XoIzul?hLoTMWQ*@{(PD*YZ#LmoPWOi%~f|NlDh`8)?H(v$X^EP=RK z$V;QtVWf|cVC78<7ivWc*#&o5zo33eN@2aeDK9Bb!Q?T;qlFV8cxA5X+B3WUG2&1* z1Y*SD7Dg349(akT>>vO%t!{Mv>p!&CwN&*FV zGk7pWNU+o{rTiKCY1)<~t-Gb1M?@V!*=!@vcqkW%=8rjdT= zNnHM=EcT6KiT-(FJ!nR5PR?4eB5U=RZ6iSN^2L!pta}Y`Hkosr8S&xa;aK}Caa}%x zo|5_MDNmpe^1-h-ngq^t9qdVQ*(eiIq1C5k_yAwf{h>3se@^mv@z0sv&4t4It0usj z3~LKf@|x`5FVuZ=^8)B0PC@`;E7Tf?Y|mk4)!rUv-i8Y0^&2D72FRSPg;o4m@AF2# zrt#nyCmqKid>^)k(>w-6O>IQFmHbjo_Nqg>ijgw23ZmC5hG?G-L*OOf{T1U=v_ga+ zESH5st>(c#N6S4Ry1+S7o_}#nUN=j#nGp1LE$36ZNOh_~;_eA^qFOWUw&5Pg%+`TJ zQx+g$BBuOPU4TP$+56Dix);JuR5f2XHbKP>M&`mTPZJXpMcHz$2XH9{gH)zf3B_*s zv<+Qgh+&>YsE*|&P+My_jF*25LY1{ZX{S|rdF8;Xl=djuuXQUEs9zzAWf)U!{7@?R zd8Bi}@+JWbW=YREBg9Nc&TJsf{N}4YA~#96>PMEa?W8K|>{@SKrDRt4V6s; zIT`_AQIEp{?nn#z39VakK4bc)7e-Chhi)^;%Siw60vdf4XxYAC#(uNnO%L>8-G^EL z(7U+13&x1QfB!x+)f{GfQJ-HWS!QNld`ug(xYVh{%)ef{m{F1D@FfHATg+$%2Ue|= zc5Jeus;UwC1MQW9kicE0Bs4I%p^bs03HGnRTHKK69?*s^AC+;-6HIPjWU&_5Ou&_h zL$gb6g%fugE=aN4RZ3}bzbbY4{ei&l5gs01CL4s_E=biS4dLlJxJ{J7emDc2cG;j~ z{sHl)|F7`}nt}^NrQ`ljmijVoD2f+UrT~7Kd7EZTs&X`-aP%>iIPO=9gIT0b9Vu3C zs@f_E;e?x^R)?Cw0t&JFP?G-&`Z^Y}|54E_ew$9B4 za_JYgWLxXj6k03;k~ClKcks)@y~af+&yI(XDKX&Rp2ckmu1VqPM?9+#q5lY(owA=s zM36Sxh-JtEciqLHWlR78VfFA@2199z_eh0j%AbyG6X!)npPPkS2vP$5t|AAL|Qk8)6*SV;$y>?tlI8eqVC<7nUL{hFEr%!1K_|s~16WtT362vF8_%;)JHznBU zat0ATifa&LLY7Q9CG!Es&sf{n@P=I8oV z_jn-B@J`aJidIVQbLH<0;hOyL&e>F}z2zXwcz`IKh zeSqS79CXQLY$l1*iWsuTRT3=RYOzJ??e#C23 zhO3a=Y^0*>gJfF%J@iH?EOxfstORBX?Y|g0aSJU+h<*7leYS`Tn}OIDK+6Pj-|JU= z05Ua7f6hb;XFPedxw@m;U1qv($bR!_8)^Bx7#q#DBG9e^AQV5}-{J%weMKDjYT8Qb zX1o^|w4w=d;~)(nLgZdxA4tewIJ8H=j!n}FHf-|b)ycq15H={-Uxsz`hIZb5G~tS2 zNt^ebX=udxml+T^Q&RPPhgzAuwUJUDX<4wtmufN4w>xqTda9ZI6fg~3X5++hzG6#! zO7`I24iJeXWAXRU0b8VH0Rk`x?w$k{e0FUgA0ONx120WcoJ&kI;E3mE(8QXB1 z$8AQF?cygbirJ3TMr+2x8zndw$ZFy_h3_y?djaHtC>?aPZS~2u{Z(S!Tzmq81g@T@ zCi#BhQuw`j8U_T`jo-@ds;W!}*ke}V&ok*94+rf|V%G_7ZfgC)`fU2L#^)Fe%CU}v z3i7Q(zz%B;#S)oVRTFqu`qQ{hU?(OMGqlrGCynQ8HDQ|?+=hE6iw-X2xN(q`=Tqjm zmovaY_6N8*J_Ol9F`_+N@Ex=G=$K5<{z)UDjpGzx`3{cjhk>>}lI@1CGr`Dfnd9y& zwqw^#2!@Gci{fGuaVDU(eKO*{hE#C0C0x_<{^!BVo=xrnHae^U%eXUU$YahDz9zhX zDGQ`}7E=g{n_I8%$OqOeD8-$yYq0bz6_qtb4qWac$DXw7v757flK1s@f5H5iXAQKq z=37rvPYjniCXC!D@Y-InS$PSQo%XysL-b_>3IuQFS>;HKv%CtlCy=*jH#MC8S>`%y zp?#E2hhCmB|1zCHaM!_cy<9_UE5R{w*v3Q#XzTn#>B1JX1a0CwCUmqSPN4{+1N$9g z1#QFZ2p;V3xE3q!;GNRT(Pj#0bNrXD={CoCa4p@?dLWn8LX5w1shR7-ty{OEl;(W3 z#+?D{l~9yl+cnfwo7EG&{~&Kl{17gFuvrjkrSt=)iIfm76eA;J|H;0wv9XfJR@~K~ zOtYBpiWBwTDIhac5P zlW^LW%{?&2eSp%Y71zl1s=i*D_0pvTE+}yYvVlA`m@7Rb(CH`ZK+Mxq7Yq&0-H z0d#;y%C~xiC1fuLaK!T((pjo@(jzUp_u={x_R0Z`c$@Z?i?eVDVTWDmW6E9fJc6Nv zQ~CJRye2|J{s8z}0!eSvD^n&lSNa(3KXgKuPpfGCIE^tQ&M-}TCQv|sx!UagF?Sz7 zAph53Y@Px&;{2!#dH1~tLvC4s|Nh+ZRFkwO_I5d#ZiCk=wkB2Iyk6LZk{BobTHS1~ z3ha=vtlwadw^=p~Vm&v?XO=%~&|#C~>^dQ3G*S3H)B>}>sv@|;784tL$8fyR0<*lL zpEWZoXWtY=4lC~2ZYGJ_g}sT*)IQ5B)qsASb72-CLbm8;A0#n{F6=|XL|fN=l?7;d zQbD=Ral5i)cM^a5^C@6|_Q*CWp(s6rPM;P}jwDIQb2A2=*@7%8&hO-V%n0Qxhs?B4tJfUJ)Uu9D^B{*2PQCen z13TfWq6NR*A@DG-~U1r$P%r+Rv3 z2BU5H6VER&nh=?J+jYu(tpv1#)v*&PLS`}NGlt^?ZB@Or%I;Z}8bU;_IzY|{cUmg_ zzD0%p@IsDQMe8Jd$SzC6{MFz;VyABQV3PN3(P?kryw>|O+6;1ypJmNjU2B6HVg`c= z4TQtMo+)t7Vxyx2+S-(gZ*mOlf9?Vt&)Y2*3B!s-q0d2QABZeW=oQ}#wX6CCLvZY1 zRyFAd0-*r15zN0l-ec~Odg6rNh4*a1ZR)7>@k@a^1UOlIm2nJXYZkC2#Hz>B1aB5?6ZBxWE1*AOS>o@s~K2Gc`= z2NVCr#J?5_7kvZ!;s&~K^VJW3a)A(+4HlfA08O~y&~qp)@e+d^{rcVC78Yy=NpfCs zrj7`MJ|R2v7qZz_zw&ODSW@Z=e2Mc{S+m#!+MNES?D6h+nXxs1Dis4wE-kj+)?p>4 zvFyHTMA4`jgu1hncZATh>vOXFxJG&NF_F&-o5%XJLZYZ^gZ4}TMIg9OD$9`Ew|UaHQvkN6k$s|krU7P9)gu~24Q!!)hPb<@)$LuTA2=A zd_sX?Yy6!l5ka1r%jlY^97yT;JicqQ&~Ri{98qqE^!=0; zC7L%f_}FFN1+;jtb{u3CYR$(>%d`xJ8FRz_WBz50kwYwFhgm7@5QzfaHpgs@G=Tbi zE|b!#aRT@--3!Dd8N1`2%#40yK+6WzJ^9mH7WO#6@bHOdXdP)s05EIj5Kx&p{b(-> z#^?l<;~@bEcnbUC*|8le#}2QseF}il4_|l28_4%eT3fiyZFt`zVB;gU>*t zl4WA)aTCztZeM=~yl>gsXB(7Ve98xdxXruKc-%vxtMGeh!xUfz2TD|}GX(P)lai8b zYWT#(#k(d7-FW!IqO+`c0qh1x&6XoCIt#;_neO56Bl3b-O1{Sp1rmUG$FwFUMVFC5$e0#2Ys@`T$$?I)d7^*V6#@%JL49rjHs z?*qGV>0i!@Y5D!rXJ10aZh@3?paH@Owss~}K_By6AU&mRysetJy8oyJ5pn|rZw`XEOj-<&ra^9tN2AZ6{kcjo-& z&$GA0&71I|;-l>WpHjp%H#NmtEx;}{*R@F*7LwRm%7%9JfWl*e%04P6-7o5~8do;= zTRP};vovrOh9mIdor1I03=nQ1%yGXt=ru$slKD$5=2b&*xn$ydR3q^%__LlxF)Yor zV{hC{WmifE!Pe*Q!wE+6EZv!3=0-{?cDnM&0PAl>qHGeb&-M^$5_fl@)1Cr2QwXh0 z$YiYab|m7#U;ikI#XyY(G)m_LA9;tFHQshp%4HBCpEoRX2wq!r>EGh#_wDwvH<76U1yc;sGl)U@xdXX!)FMY;~=${E^7-= z!fD8x>3^Uu`XW>lGZY11Q%i~C?D&GoE8yr$3!vN3;x}802U; z$(cUX+pS^`Hdv9UOBTAFJt}yweAFqufvfR^>?>8bWVZ?!tlny8McN&2=b{V2%cDB1 zfR5|yM4c3946Fw~fdR#4L!a_Au3$<`LsOdaL^(AQb7(gB*YJi=3mtN~q0Uf^-Y$nY0S;fi_#~;2xBZ&3IhUjK}jKUOluRf@@1gyC1Q^kIxM`!>Vbs0y z9efjfk)g{=fOI-=IdPmEZs?&h7TK?Yur&+lJ2N*n!E(W`IR!T_D!`*Tkkig)9g+I}N#38K``egvaTa5K+h3=SfiE|DfJ9aEIecmIm0kcg*iFQyHhs*6U zOyNt5?FXa!2HhUYS($sMnTQ$w<#~>u-3x`B@X?Zi=~@)h*!NE6l^KKP`K@t9(a5Ec zc6E5evx%ne8ZY|m@Ez?hNMSBcnrI-?IKtMzz{+&xN>7PT`l+=aKZIh09jsqMU!Cm= zS=ttcnI_eq8ViaVW|Ngu;tQkZ3@@K7BT6WXxFOn=iT16xl)a!q64}ct6o?q325 zI1Hyo*H-L`K^@$`6&8F$F9ySfCoj|B(QU?kZ6zO$hp<*KVhPv!*j^SM{Sh?N^GBRR zkx@}}6^ggfszY2%iI4wyy`UBv0$8Hr zRewl}r+&4+tz2TwUT$_L5k zHh^diLikSD8A*e%c6ox71E9@N1ihr{Ks@l(QcE&f=gyxGMlS1nSYsnxs!ax6xYWZR zZ%4MHVqAfk0tTQ+GS5S6=BE=8H+sLxp+U<1N* zRjM)Ip}P*z4*6{IGEX!y=x6T9%XA|rHxP{%k4D^wRZz`G!Ju_kYA8I%hpQQs zPeUUB8~WvEYV_QoWHnw4+CDvQiQ&=VtkdV|UL@o00mtNXwi_>EeZ&p$;{nV|kI&J> zEOIk5HyFQ(l>@ob;Hsl;#n5PqTwoV%+W!32v$C_!f9}SpPH_-&5CG)r6dAei<4#If zHf%w1P4W#Xqa-~9SCN5RR4wYSx#FvStM*xJ#LVKWuB+@Jk3hskn+3;QomCdOwgq#!DrKe^s}LP zrggO=w{or8BQq(Ysn8BLRNGrTT6D2_As-O79AJJxRG=Lhh0q_Xty3A*X=d)ZsM}Qm zZH#~ZO1NqGQhL)_#++Sy-+)eq2CsgW4SEcR!sc_qV50?{_X%?WMuQ;>(n9suoKWg~yA zH$#@v%9H08Kon}+(+FW);y-(J$|NZoJ^nI+N4H|a(A#@|)q)4$ZC6*f_RSnU0=7Pud?zBk9mf|s=_ zoS;EfE4Y0dcCM<@DXml}u9tyGk7YnVHxnJk@wI%Vclb<<8)h+Nz#2gc(P#)_S5(xB zU9SyDjbH32ZSl*yL_%9#QObzg;}rR84(px zsUK;pv}~@~`;JE-ri(8#7=QW9>usU+?K^kgj=X#3HL6~&acr&skP@AD@3t(Zys;Z* zmwUblL6Z9iU15s;+L!TsWF`x+oy^m$_$dD)Q(zE)if$`;F77h?zJH6>jiw`5t}M@8B3eerG>O-uvEi%!#t^t`|cuJLUc-D-qVDsmhy;t3b42rb^1iKGWTY8P zm56LjS#hJ{w!1W?m9ge7+}};0bG4xOi72N=UPe%%#!Yhp!w3Q#o5)XZ;1c(Mal3Db zeMl+9FEtXL&<)K#rcHU*)5pAd6rowRR%Z#sKnzj~i+^NrM(@r*rz!|+%?dv#jd1+L zsF&3?UTq*APXj;Byg&1Cf-^!5UT}wtLOrv)?+v8rrUXavPdsv_jWd7lYKR%~nwlXT z<2eKrB^-Pj{#7U+OtH4LC9JF>`A(|@RNZZ?5X)jUZK|xqLC=;efZGRv;Onv3rHl%OU(^<9b8nfwig9I)qR&={x?#(wel1*>?S-;o=8oW?w z4QSxeO0bsT0^ryA1jM>9p`YyRzw~Fs4Ewh=!}v9jJ?e3{j@&0oKs6SB>zCHs!lGx(r8}H{E7Z-mwl~iw z>70-aN>~i?I^_#SN1NVE;H1rfN>GgTfDt}XYvg9kVldI+*ROZ94n|THNJ42*9o{@f zV}++@!AB8}w1Bg10c0Xm9w9^YA+{@pTS%Wk`uMVGEj|3FwJBp_7{xJrjwJGsAb2EudD79hdhh12ScQ8Hhkjc z*iSIE%K@O%9dF?#B`P|M<17oXLbm})Z;oKOb-p!OwdM)e*njG9vNWlAzOv|v1?8)z zGw=?xf@8TG4}XCC4zVW03Rs7LNNNKIpp0U6;pkNk4#KIaDGr$8up>DAv=8$H3gv+u z+lDivGqtJ6cGDH2r)_NiIZ*gIZx8B@cKvpC-z2ZkEtpOhFN(O#MD?!kUNRLGcG_Qd z_uhI(xAVg}`SZDbud4j}Dr*v^M>|^H8|#+__YQu{?;Ru@3|-}{-T86D`=EJfXKT@U zy|cG&vhJv}B6(@*c-W%V5sZrQ+xsJzM7mbLeB2z1ZxvbC_CWiZ-ZJgInKa?;eDvLC z%%|q~lhtmImBU}1`Q08l7fU>UF)q>`EcVt-Rpr;V4ki2f^GY3b-1DZV8XTWrO{hcn zIQF<6t~k~WGGSePtDgAX+laSWOWHiSD&g!M#^}5A(YTKI*ngze_sSK^b)CFza$nub z-JE_iC^oHymJs9f^xc{KOzQG&-+n=(x?R93}}D}?Iw)4Jq3yA*}<^}-&i`>VsX zXQ_Kli&lJc_fi&jy^KANd=H!l4_;9vU!6R#Le=i?b9-<86k!+Z{?2u2!BT*j_e;O; z!NAbYkIJ7_wWWD=J6#XMx-)kY&0BWd6MYVN=pTM1zkIvo)b@`h{}8(vb)j^cWBbRa z=Dt}Q_U!_3ZzY9a4_dQA`vES<-8lt}L}lEKoms8Lh1tYvG2Z3cg*sw}#_jeBpM$fD zhdq@9d{Ps+1=rZ6T31)QA5J72tR^h}+TK1OXuTqZztCzsXl&!X*Zq!NWU8a^>TU&Q z6}$HucJb+n?zI?+K3t>G<-P5Xl~YVpXngTjJ&!rHA$4kTg@9MY*|YLNLu2>xq?IIO zJYu9Ve?9{Y1>!EXSw?J)nTC7I+^dt$j6QCg6-SnfVpEojhr5>O(_cDBW>vhs1$T=1 zhIT|2_v?=~ddo~#1Nc^lu7(@b`G;aJ`7(;pSM$zPJYRVbKAr3R%FDB_Bd|R`y5;7HE9wt^>Ihf zUn5N_9%cwkHmkflMRAkT1$IHPhR zBkI*IzPjb`&bq?Z>UYb}cWXr~=MHiT9S(^XeVm0>#|~rn8I4{pHDxvrR(P$Sq?dG| zbWVEE?@bYrTbeRkcI+VQPOdT?vHQflPR!Glf<+ld4RquR3xdd`hy-DB(1-(Ic_yfpnBzuTku zTQvOn%n;#FM;SqxWvAhyiEsDKCF9~&Y@ubTM{@Bj-sR+X#8KDP6vi@_HOjQbC`pOr z9yvcEw{Mnvo(A{%Tfh50r+EXzZf#lq*wfS8BIeE0G5Qr&RKj@=CrQI^`-V6!-ZSfu=kYW< zI46EMe75}VdQrQEi`q4@-j1!%gWGX*gN>3YaacI%)5?M zfA#*szMB3uKYuDZHHXBy=3hQb1rjZs?-QqwbC+2h^$@sjmA=FM-0#edTXp!Sr2G7A z*0YiMu_#QKYhQYO@B8Nur5h4o4YR^o(tMse-N6o?!Dt!AJ~wQPwz(5IO6=HiU-qR+ zjbpg0Yzfx{xknUTs+$FB{M9&3u5-=Am6*i6Dw`i@QOYzgwR)dH|3(&qut|S3;}>}C z{7G#9zF>oOU5@nE_BmGQr096iB?_A%jvs3yOYy&s_c4 zEhfSa%01Va5fSJ0ORo&9_nPD`xgLFGqv^M!I4MN$bWQRm(NLwM?d=>o!=XDp%T+kB zFXFkmKUaHdOiFV;P<3mLy?*R*t6}?dTjlksUrt6T&*ge8MIf_$<&IH4%hj@#Cm6KI z)aU^EolR}=e;gn08c{{A-RyTA2Jn|@@5(Ry`uuTbMKUbZ>Aum>6T?>@arWGwlyk$0 zGq_oZlgg_b_a)AtJ{G+BXgE z)T`zXc&nUy@j@9<j@{9KW4a+{)gA%&U znmT0ENsp$VvXISEpJL=SWx;{KjacCFW%>-27m98cT-kbWgB4NnsXhliU&r5Gt3-XX z-t#%sS&L;ajW^2IA}P)JB-eS>@k328DnCJBDZKs2{PURb_s5y{OXa&mN?rBlD(`4i zm7?y|IMxoH|CpsAQc_vPV~BDJH0Yn7{FoLVM~^=wls|HFu8~x-Y3h2I*_MwxU+MzQ z-JFjE-8agvH@4}%HNtV)pP0ae;Gr~n-cYD`u`%@(vxbxhGS^EGCOLgsTU!eV56>q@ zgK0HWf)(HBTde3J?aR;&*BFg7)eGaVhEH^Nl*uHx-TuH?A#ydLd?AdW?*5xulRGh= z$bVAMrD(?4zl|FHizn*puy4)ThUy8oS0Bn9xP_D)Y*NiF+!wb$o^$NaE!4T{vF(f7pA=u&UOzZFngnDM&YnNJ)c~l#+fQE#1;xf^;Jj zq`M~Z-2>eF+3)im-}~&f|9;Oget1k>YtAw5arJdx=Y`pRsf~#rk0~s5UEv0f$q?lX z#yK?z+rr4fnIhaw_el2%DIrudsH4iz9Dh*8IEi=Yr@6Q_kDsGiMMNA_CepF!HN;{c zzR4yRT#;6q%3?j+&bECqod>25V!r4MBLwRUS55Dv6mNo zm$G1x$}>lO;DU^&vRVhOzFuL|YWjrf2i7veSE?bFdoDp`z(s8l(uxjr>YL&Wk+}qM zckDPD_GV{{U;5UsRcHGtS6?nTG7rox!hY_I&x%dn-=M~!^KlDw1N2+n_Fe5Qd`nUHgnGo&;j`&1_ zw@$=!l%+xTuN;s4N1hqHbMi5nId)_bKt{lBSG(dGJ&N}vGb*4n5$kqEul9Hn=vYkv zno}L1RI>vrX^=nlJ1(pXTCQiz`yqZn>=!7>G$>e&v?WOtNSQn8`b!VJ!a$*04V{jg z`1lcqNYJ>);FCH8a{{w))VDti4qstlr3@iEVsaJy_7u37-zE!Af7_l-ljCRc&WFV$pKZiTNil8CA%b4EXf*zHwF-q#D_F zHwrR0-krml)7<{nGDug$`9AEWsK(G&Q=M-JcOPl)&%mH}`m4!Qy8%UE!|yCqPMpsGlm++tL8FnO4wGl9q-f-5QSn;dJVBx zkq{%6i*0_V$yw7S$n}1eUmh1uH=slZ!*W(G!`t(9q0~L8I;9$98h=@_JGWF9^KL^K z<>UEQv-V}g5Nk1$2HsX+B<00m>8kAkJ=dgXWB8m?i@d-vZz}>(HyY4)o17OOu7tt&6ip1?gaUg|0==LyPHx6qBBYn zeMmJG`BTPP!hay%3JL*}1gTzTQiFV)tC7yT0<3J_x41flLJM|jNr|MTwpzb*wh@v( zML`gujgM&wE{3ymyHjzskpV47VdF68d>VxQ3~%n~s-h#Iu|yH~wu{5LAqY}GsA+g3 zwg0TgoY6dPuURJP6GWE_5I6xurwCAg-Gh6h!?%HfwQO2cCR8&xbC(ZqryFS<=tl+Wrwh0lkuCJ8ngOlU14b-@;n_I)~;-$Wxt%OwM z)h?V(z?%1NT*@1DGJ=Go*z*H+q0LU6L%C&}Z6Dtmi{mt({WL-qqld6;%Q7;G>^nu0 zTD4))Ti@Rd?iyQHmXTw0NHDTG%mKA-O@BYd%52c!B+ouNowP%4lz+H_$fil^CC`<& zVSXS(=HKqZ*%2z1x6^O5;=M{u^(Q@=Z8(WEJ8tcMPcG@lnm283DKEItIj*#&$QVB7 zYd5sd#$)jCu78xsT=CE<+0$nJ9!C_SVDn2S#c7V_mw9Xp6u)r7?E@G-d%3d6glLB& z?k1HKZnRVsrK%cQR4>KfFa3*2q$W*Hj{`lNFpAp9STINz>o zVLaA+Mm1C8Si4K2gn3s#zyEaw?_Ymi9Y~5ke;GU#rp~s``f%FanVB8e>2~77QHEQW z*3WkwFyBN46-Aqior_>8@}S~{{d^V{+)sF)17mnGPT#5eV$?z~(8{dCs*%Fb=!Xt^ zWTOAm01yJFYqJ&p;^%*7e@9b^f>S7JhV7J>r$JLGD&bh*i8(6qok}i>U{XL1z@>g| zW?R3NeTrA|rVLa~4Gs`d(c4CV%SQTEqrw=IyO*WoO6)Gg57uT$aENDujFw&WEa)xB zr$d=C^H)xkMjbr!%VARF&0pUm6+bcNhKUKhA&SmpeQe296NE0d^yVmMRT*a}CA05r z-)TR{g_6Rx7SLuf-4B=%xxa>`e_0={ifVq!DLnOAhfu-sHcb#q)B9Cz*de$2oQZVc zcIv0--TK~8tsrvB7KMpgjHh^8QAAjIPz-1*vl2TVjFkoiFWSzy7YXl^zodRx36Fa= zSoapl{jhzvLBZU~yml+!m0nNcIHMnHR5VW53L$*%z;?a$WWuHfq6p~Psf_eDuV z8ycy^$qFiHjy~b;gV%pJVkjK-f=FPj=Fc@tZ%klF#gdUdmyXc1O$h{l}bL}v*Ha`3Hb46`~vmeLh5-w9dK*C zxFCuf_6CwDgfurSwq9TVaZi9N&J*2Fm?p#UnGYjNqKz%2U3y%U2?a?wpVyTk4yY4e5re&{c>+$A~H(ZckBz=X!-A#6BcTO z)nuP;!wqdaaV^8Vnxoez@Z_m=+D6~g_6l@8T=!y$m=0i~j#}FF?-_M>*%Fu#!PEU- z^|*9sZOd7$)KQ?Y;bQA1#s~A1lbc%g2Za;aU&NLx2$T4yYM2||RQ71DcfD;|8KTX1 zcrXwkUEo2QLP8*F+0-0t1tW@V!bFQbVzz+!Yf`#Y5$rvCZ-aQi@Dv~OgC}lBcXAuU zvh_Idn)h_pUHeG1UWZoS-P7o_cvuusCq79QQhz*-3dpx5uN?~Zj(`2>Zpa}Lv#z5aGb?z zscl2~pD}7WHVj<%W&&pNj+00c9q{BDDywZTZ>toj1z=b`HPG?<$)mWLym?W?Pz7UF zclg!!%Vt;UM>Y@f6^)8G+4t3She4WRf**BxNrw_4?M^QHCCvNj)=+Tt4d^NIA>vqGzw{B&BkQ=;dWUHU&54yB$|; z2zz%r-R=>c8C_e#cl4o)bBb)qe_nt{=!BKk2;H4?J8UNDXrYJ1{B$*R8q5U~q$x~! zN$1>SqG?4g(4@V{JVTGZ{0ah}d!;sefjYvCTe(Wn^ znm}f8j=BDLaH?8&PQ2ah>ohJKAzkO!S-uS$(TEs5oH9K1{m7&Gm;WR*?BhS#?p<3_ z*Nw3u%NH_UCfdEl;NHO_)~ZE-o{)X-1xTl zi%wie4AM77)JOA~_NkLVb$FC79Y|$L$#;}p^u6M=$Jw^C6hK=kxinz1JgUU#6vMG# zjAW^2pviApehR3~qLoFTj@-q)f!K@h?$0L7`ZnJZYP=?PZWj!2>As4C%#d=(w!TLf zq&(Q`v;N0)Q~5%vGOiu@F13cq_mLPH{83)P(hp}gOH_n6kKZXs1A+zT9|0PC;nFF7 zLCU({v^C|BQ{b)`zpCG@h^COZMQY(4em-=GGW7X998Xw*EbBX&@j*4+%x`%U=0{hg zWO{#`xFuA!BXrdZmawALjR~s`I#zI=V_-ona;k&vPIg#4C<>^f*_-UN_yYXG)5jN> zg|FZgbuMF9^9p_hteI`ox2Z;4G1sxpNszXh*UoBfb4I0klusStB{c|kT+4jxDZhxx zBRvqMGn@@wS7plRr*X>9Nhq865EsaY=r(ljqy*F{HkaalJ^Lv#)m+cU?uZ{Ny7`1c z%bRh*7i+>seLZr(kVrRm;IXIiLMd9R{t07?331`^d9mP?>5lpb!|x`_f*E`29|!V1 zotNPieC;T9H9sWARX1@}MyB4%inx%ZwUdfHzi-Zw&5hM*0GAS664}aNna)xaVT?u{$q5HqK zjq7bUcdOr=f_KgmZ!vyBU7_c=%e#utPI!2plo4)%+B}mHE@Q~hsdtiU{R-<42HJ3V6bq>k>^B|%(8~@(1nSxuq?Qk1OVSwxt8elhd!b|2ZQ;~ zgNb!|G-53wY*ovvx|iGqrxYC6nFI8i;Wd|iy(#R1*4{e|xWR9P1BU2|nT*Bq+oDg# zc7YA;RFU=E>gpK)!*1B-)$}9mcT+R_GtW)m@8C`thW2q-tv)^*6;+H{M7G6bf0d>K zWVDqDmu+h|XL*XyFHEj!GG2s-(B9H5p9>?-9I7_g^&N-h;0{Byzk{ zhyj-aXj(y6KcFQ8bPF?prJzP(X&)_b1f%T}n+MJzJv%X;mwCFsgk?f^pqyCJd`ixi z54S-*w!%15YkswX^+NEzl<=oF#;Yo?k=p}iY$nCG=nwNJaE{7<6?xBz6et7U5&y*f zPPw#pi{u2M(dyJ!762vcRL2E-U@T$Dif2(D7AcxHzm-Eac!yr_Bi1HXQ2LhsjuYCm zcbZtD9_^HEwV}D@78KJ+Ao0;NIC;oOSAs`k7`gcDH$ixQ#%k6H?6}w5`kgK z|7a6mYY_{iQX7$71CSaSbAyr^ke+hiH`j>1S}=R+nATpjQ2$Qyh*sSJT*Yg<~D4}v2md1!8190?KN z=o!1v&VF+Vy|qXxz5wEu^1BI@OXLIk>oKz!zF7^nXFnscZ;jW#aWDd-w(rj*0=rzA_Kv893NmSDGgJXeT z#Jy|f(f`r;Oa&184Y0|uTZeg(8iw_WwXN@cGBfXxwU$B zr-q0KA{d=}yMb05n4bt$C`GGy^BO+VvRjmdZ+{UME+Wu~|6)Hk&~)Gj-6Fa9Xo>_S zi>Rw;##bBdGR!qUlr{nb!>)|cr(U;lLWUHQ7@;Lr|xL` zAsKp(-)0P%G!x}@@Q32m-(MOR!kx5@q+gVB6|5`4lGCo0>EG0>$tyf_^sNZkq@l6W zIQA2?jqn%8@3RoKi#6H&-9*z;e9%hACVybp+C93wS89Wv`gU*9;oY@j;hTFlxKo{y z3=4id4TzwQ(o^~6j!yTq>Cs*f{G|lSfLdvsGBD%Omh^(Jdc6Y$M7G-AJj59kEXG_r zD|?nY&t`1H1>8aapddlxgze3~xSY%vt9U)5xyHMn77drSY;WBOSk<*8oy6S=(eRE? z7_H?G_4x3{Chad=XNFLP;}@;&G@t8ioJQ_h8f#R|D!;}R59(*L(&la_ZECS&(Hxt! z$a?ydx#;1wql-XqW&I|cdGEXQhTEgUp#Z#zPn1oKe|EYz_sk*kPN;x$X}xY+gytUur-Eh zIoM=*hJpCF8G)LjZQNjg=xH&MQXNCfz{^~>=HWiHS!+RKUD}FthIPeTxhby{hf49? zamgbO*@F6jwc`a0!1g*hMp|LXhUf2)i!4}ZynJbKiu6o!vsw8(>#@cTFEprTIf!lr zpte-L6RJaXyK3O_Dp;ptkgmSc_-0~MhQ1nzCAQ5$A?TKKAf1&yRW8oqO%1HWrvgIDI|{gE`I0Tpm@7b#Fp8yr)N)$y(N2t}WUJNtswMyS`M7GDQ}u3kY;v?=}wkqhDzKx$?; zD~Ws@Ec{thzf@dgS{Tc?VBpENxheMGY`){gd9W8QTsoDDS9EL6ndTI2-;4Rn z@EZm&AgTvLe&C`JKJy_=3^p^_QuekLzrnkLv}g8G|`@0Q_`gA z0xwv@3?IelAP!e|ukUzT&`DGQ|b1CZAMo`Dxn zE2hp_rwlf_-ldyxfe{r~9gI}qRLyyGM@4kI<=0N;s;VQS#vNxdqtr=bFMK-&ZwId$ z#PlkOM^bLogp@kNjg-Vl%c3TY1MKj)VI zEm69#NQ0pY&P`9N!fezC%kTC1)jVjXYJapd0sETcVfXT=8jb8We6gXp-1X5G=Xwg; z_RF?Er(;ZzuTou|J&ed$o+9gx81)RXD3NYCA^85W!H)fYU{Dh6G-`EPya!>o$JjIJ zM(cRonme^ppV&JZtP6A-F!pgzFJ|STo3!@aa;(zeu(u+M^dQU2AaAZ3gbxYkusn7h z6V5Le40H2u8Jn2{GnITV284BX=zk$K3cscM9sOpqL3T*MlrAfvfOY@awHZ;lK)l46 zb?cQ3Q^RdpFFpf<)rTmYNP$3jCatasRUmx=h7AZ4REC0%Yoon`9#S{RtN*byN2vkC zsa9&s&GP-*j}M>F_%n&-ecpPpUto-V_I9f&_)z8wa0`1 zVLZ@IA8oK`m8T4I%kS)MfkIai{$d@d^pgkZRT}It;l450TA*9{=)2b7l2q<4Kcq-V z!i8D-a7n(pLJdw<_7+C+?=Hm!33kLk#_(1Jn``O9>SD? z+NxuIsQcif3;LgX`*m@^o|TfM@{!dsE6F5bCVx3MoqXO9e}Iz0>~XIHhuOg8w}}j2 zC;dWCACl}Eyj=LbiI`}WM9Wx>@mbaB!_FFO{C#8*lp?iOw>VA;rCd;i{^WNzU3vbm zCr6ua%ykag(#IL8hBv)2XaN-mbcsO}gx7(v&b84ai%Er^1_*F6HWXnY-U38^RB6t9 z*ydO2IY#Iz-8&Y?vF;dDp##FN8r_li>Ga>9ZUs!sD!ogsFj>!wV3Uxsk3LpCpRGRh zd~_o|8twDMiw+}iO1+YLTAK1_De+^spW=xoPLJGP3P;T^sNr2a zkW(L1uF%O+6H40qWVV!;I=a<}3dtx6XV^7=8F&C#-Sv+GV9m7ypE=>Vj?}I}ML~uS z(qcg&jsnNLPSqfNr>nKHgb}p#@X7q1-jY@9<{R3;Y7sDe@AWv%PR}D8Q!{ubQ-0y} zOVqA-H+MBn(REz#aAcNg;A?ymUIt4X9KEAQ>w9246;!MR#^M=>T7#XVL_T=X``1W3 z=w!MRFcX#@?t;37Y8oEdbiw-YK#(zbI+U!0cK3DjlqjmLo_k&OJ%}x}u}tT$C^j{Su5c&6y+KV&1*MRG>ClrY>{>YkjD-i0ZN1s5s() zM%Fj#c7a)B&M4uO%E@oD0MYqXUZ8AuJD@8~8kE&=b?9AMUX-8P+dyIooR=Gu>&!x; zf%lH*T9om&u+$DMcG3JoRh(?kC|esWUHiL0j&VU3HhE^a!agw2+romz@}fn;vnsA> zRUVJJ-D4%J=CW4tJXxRubymDY#7jO8i%s@a{bPq;K{rZOdd=u}onN9|n?6t^yH>M^ zC}qez6+8g)bCZy7Mxk)3?xegM`xqqE7!IeZ{H*-Kr`01)BuAnO%iNMr^=Bjb86HWP znBvr~-n6tU(`k?9fRxLTjuNDw&`Z9_2@TH z0VK^<7ajA{TV84|J;M#fQt#@bhj|M+-};fxzoU)4@a~e9y0*v=lkJVR{m&k3#h_+7HKf3d|X|(E=>~}?y^R)1n?K^|NUFo){_scC6jgFu4;z6P*2eK=b1rD@S?GyCUHuu)A zk=;}tGqwjP8-M{=ib?g`KLzDc9xH7Mmo~u&-USjFi;l+)P6eDKw{0x??Cafe_gF2) z`cPF0tG~+ixW6hctp8MCG41G}olUq>eiZSm$Y)@#YSdn*SNZP?%UHl92uPPq&(+sY zw^_ygXM<`HG#)ln-4&Z@k-41;=iSsUIGE@EOk?ubLpHCC)(h z;JNbeJ;%k`EHBd3=)G=@=s%i7+DpM6)oDTRkW;7AhpcNg`K{e8Rz$sMZ?vW$VC~X{ zsw?|8Hha{bJHyaulnk9+sLs`5l;nxOh_Pey@B>Uf78hy?k~wBfq+ z$EScDXwy4#`tP_asQUeA&L^}U%T86zQd0Gi%TDLfcQTD{AjJIAzIE?h z)A02w;|Am52gws%DfnUJv?}xx@E)bLnGdjD?j(NP#5i1_eY6dKkLv=zt1t< z7ZV6g;_R)LQTEE4FMK0zs(M0>&dg3!+B~N3&}&E|1Q-56%agj7u{jW}`S<;lE`fP? zp4pYvRyIaQqkc-*BzgV_9y@BY1 zh)F&NFjn%7Jz4^Og+_6}ITEBb&x<}|x*-CYscnWRD?T=3=0`@~bcVM~s&SxOhiY)aNd}w7<&!1sHVGDH%5!p{DuD0M z%x&OxpfB^dp%r=Cy@5&gl?F=Ddpa1Av0zp6;W`LeAMxh3ED7|a#mZATq7eIsv=QiA z^-@Ar(v%lfmi;9Bw6?Of{RGt?TR!|@GEcki(w5RZ9UQSr%#YkP`!Pbs z(BrWxLMb7Dt?=?Wbp|1x_DHc(3c) zpqwCVD`13g-sj1uuNM7Vjliq(7l})|pj99IBA%$^E>-AUP>NVkhTB4a&VnjMh)!@b;aM)9NP*r#T`!^xrf$fYcLCP2%4Fx0RN)4?-$XVV-S^NF-n>%8TzomP zaoTXj3^^CnZwgCetdjjEJg~>(sP8@K$wGV()(tT9?Z=hMn5Ickbj;{BRB&%uKhNr> z?i6T!8Q<E(r2*^?`o7MF!FvcD1#d_@~*y7fJS2pZV()It@ zk})b$;OMemPuvF`((#vjgm(!(`PN=&P)^ih3(rvX>X;YYt~GQV;vFY+7l^Vf|A0Ch$x&zuw4U2n&8oUQhrXX;#yi`DW7Xn zLT8U8u0Hm&u*pwRsF?Hd$A^C|rK9WeIpa&<*N6x4go_ zn{X{Iih^f@>g@&=L>I;Cw6-|*&s4V*bYkYDp&W6E0|nZ4(gTRKuES+8pb1@|BzT>I zfnEee0S|2SH`SaO8RX01n(VVKev*O+-e9mY;j`DEz>EFD!1l{c)~AjbTy3OnLno!i zm;|+BUHvy-0dH*b`Weq7lyHJ^6zh$_kbZ0kYX33sihfVsH>y*T$qbXAl*ipimPmHt zeYu|(G#cQcr#BQ5k5h7sPwG?I=#NiRn9=_kY*qFu zT`xlk3T8*6r66w0*vfI&iI>B}n?qo{rc%8=1}G%%+loIYy$K?gK0pt}fP6!EIR(y5 z2UK=+bZ2EwM_(3iuy_&2gt0v5XoPIxU5j)IcAo+NnNO}Ne@t0e5}e%rUhyji%`Udo zk_YxA?ivF=<(?#zlcgW31*`Dv{X8gLPHIjmrv*?$$jwag#t}GLRFjgC$8Z>aZZygt zLGqRe@;%DSV1-&D?y;S|*uq|u^Ok&(3V#qaV6CT9G@T3vtP+k;eDpF;y1=S#OjM=Z zo*OIkpu`*|e*e*8VQUETON>#oP?45>jBjfyfWnt88^ zItJO^*n1$GkN1#VKdho1zWkAG=hKQGPUlWhgG=szc3HqmX^8~@B18l>UUSLQB#Mw0 zfpXn_Uiy(s?H!MA4-X@L*~rw6@?9iDm5%@TovP<3zOyS}ow&4|IJTqPLa*o$3<2#1 zeeaOI@mFVN{BZ{h1>2_sq@}IwzzFymY&+900f^kHv ziL~RRCd$=*u2ABrZ4r&n+fw?uq?J~e?PnMexZ(PdtEoo_&u0sZ;m677H-&_Mt891U zWB=vALG#~mI$r}Gy46^PTm?`{4-v~6EVx5x$S(X zZ(MQjQHoTZxkosTfpRY!Iz2nyp{Ity%b|(UzV#)Zgp%Polbr72VHU2gb>F7-s``mejOW61C0{>ENzuqYjXM8C4Q+yX{WejX zYJ$)<{b9KJwle^*b3GFBZ8BRLtWt5vSF1wZ*79B%?RDY$uTcw(*gl<*z~v-;y=FDb z7f=0H-WMGH`tDjYT|16*j1C~3&EY$*;_)j;V_ISjat~K7b_cHU=ULNmHT-%c0l#gr zo;TL<#0{jFv2IxMA8XAolALrc9Ap|IM=*Ch+c0fw){w@Pwz0ykxXQnylry2Z==~O0 zXUl6xwfyRcETKGGTyOl8@+8061YfXrhbVA>-7{;UJ`!hpU+cKsbIwzIx%6?W`sqfu zi5i5a#iVWY|7ixd)s0wIW7DH@&Y#u>Z{@%kt+?@0*)^>{2;<(mi#D7%rF#9b^Gi=s zLxYw1t@&6&d=5O#Zi>=VcauAF+gqWuB@gU4vf7y1!mIG&@fwLOl*wDuzOq1LKCXrR zwQ4F(eC}WFiLPYLlo+-!d)h7aXmZR=+%U{QL*eJc10`-hRmuuy$O{af8X9y3j1zhM zcx0DMn3s;B=f3-qQ0MjCz(ARn`FCA}nvSyt^8A8kkf>R=iaVka`+n7N$#B`Bo2Dpf ztJC$qZ4YAODe!bXG0ujsf94{}dLEy9` zv;oX)$B#rrvNVqAhWk?E#J9M{%%B%ix-^<*A?!1f>&cBjpc%>#H`~Cu|0&`IrT3|a zpipn9m%1uXOTdwS2D5Z&%)q9ZBQpGxQA+c-_qA-i1}K3+avg(%xrADl-%j^K$LlMA z*gDfDH-G5NG*zym-8!-fNo&j2dzE`J>Y7}3*;i9k&I?9$esGM(8Hfd#6t5P_5{^2` zyu~pmfeF1)pTReHeVQ8|Q-)8nh&iRh0Y;ZWTcM{9UP}&B4;*;HojR55lDbk;v}vR{G?1v&1kJ%@z2u8 z@E}bAKO{}Thzlk;1NBb@tGZyTC4M7GJ$8_u;-)Ng|0mw6BQuebA7T2g-LJ!CJ_Qb$ zaj<2dJ+`#m`3wQZ5tve&51xh%W(gCNnN5>xj@q=Xa0@nG9~^{N`urKSoFvsdGJ=8p zS!p8E(1UcuyApD(Kd`xbR6Y@Mw5Tl2KI9n6+d)>gpA)d9J41?U`7+q1hFv{;1O~6- z4fY4SYs_T#^COSmdgUio1;B9hWkx5w>Xi+Q&!y16@@D}}l$GW-bdRg9%093~k4g?q zpjH8BcN_!7Ul;(o7YypSiaptE?nqIs`8$VMHHHZYE8GlDGE*6yn}jc4vlE|Gh;eS8 zWrdokoIHg@7l18VS34(GiFna*Gau^G|{$ntXp-iu3+2fx?KZng1 zFDKCKelITH=pwX#WUAWnk{vdn_U5aRMfxi(lW^I@h@Z>HyzDApHk%LpmkCwuQMc&X zZrA6p`wVna65{hAa^R>!V*qLi6-X`8vSLdHn+m12UI(GXf$EZ@UUi)0=asLPk0;6F zY%&%F^K%Wv4!zq0j)9Ch>Hgt-43%K$0xduB()-aYKAqzcqv{`@sDGwU*!~ zLO#5<*^2FvJ$vkjiMK{5wZ#vc66X>c1RIgSz$D4svA_bAovNPUG}#EY-$UBOV=FLx zVc@)I9?r-|cJX*RjOe(xB@0gzHBv#-O*toGmH#f9M}9NR;)F{dIwDWcX2|QTEQF-BK4$=ILr33euu%@5e4*!c;DaA4A3BN$pZt1v!HMZ?KynVYv~N8 zKHAYCEV+n%QXvFJOpOp2%+-yaK6rh54PGJsYP&YVbN+f#fQ`YPOkBKIG%A>qaL)6o z%1mV;5NI7q5!SSk3*e7G%yWi}(Nw(NB7Sn`XMXhzs3ik%xh1RtnsKC0>tUsHO$TF% zt1h|in5e~4eLqv@LfF{P1j~XqgUxd}S$#%tYt=kRYyUHVNmPf{q z*yD2@%`SDSjXBW5%Ctij?}0st1q-X14s>TDgq9a>?0{gx8nX2wMcRZjrl^V3m2KK~ zE*UljX;qCaQu&+J2nDmkdkP(o3kYOSUtYqJ}{j|dWD^r;c&4PKjBh%!G?j{FjtL0pfB1{vN~sge7Ax) zu&H3X?F%_a@#~Yvkn~~7%!aVd(59Ph;+xKXq2{szz%RmU2&(oXk2Y>-}R~a-%!L7Yj+yBoL@Gq?)k+vBI;u?XK@wQVqLM z5+8@`m-)03dd`!t&rr*AKbd5hY}`kWjQ7vQ>bV{ZXF0!haF5*YsbHT%OD!dUm>N&k zDDkkd*+7|F18qviX#+ecyk!R1wzj-Nv)|n}>Sx?)K25?#Hq(rxueEQc#_3=MoQXip zT|>{@B&N_$#ApQ;*kfBC7Nz^habDH0r#ILzP{k!zrD!)jKE2hnRN(RcR--hhwZ;G@ zoaZ!UV>X8f8ioFvrP6V(ek`3cg9@8RN?cm+s27&Xc#W7Ej$rUww+age2RVPTyk*4#ZOX8xGE0dGWlvRtlAqGox_w zaO&aMrMF^J#YVdrVCu<>v6g5*YdWgwA_$j1t-_ovD0<|n3%pDIcDMmOzWTk6*0 zXsT|1k9{@8>ayl}ur^Kdia|vr&UuE_;s+@tDxQt|*`SoxWXM{4`~bbd1Uc}CERa4U zTYq925Biyk!r91@mW~Yd3}e%wIz%q3X@9WV2jU>OS<#^Ij$wqWU^*PXeDbqoNChF0 z6UC^6kgx2J1Q`+Ti>1&R8*J4J)F`pk<_tE**Th?Bnqf|gLC`@01S2WHU8cVu(_STh zLdemqqP~6n`LI?nJc0|%TUQC`;{?7+P?*;c6fAaRFm}=oe!gqS#_UdxFKSZ`BCyuP zoFG~GGjZ=tg@MWd$-2^RBQP{-Squa7)2F;#q7-Z^rVZQCVkT*z#yPz_Jl@IKaIJ&V z87_wQ2L|ZD#9_HiD+ZhS5g^JtWCB|Q+6%5HsmB<{m@|pRPPGMP2YVY!PwykIT-&SD z1x!7VmB3QI6gk-lC$tL3 z6Fjk+#09)yEr6J;PhbGB5ATc{Moo~f_^Xu~-xH4{RR`{{{T>OMOFw@&i2%7YK4VMD zCVXd=(t??X)!AwyVmE{Kvt&lr>U0{Kv3#nZADp~t0V!&6wIynj96&R+fA74df_cf4 z@)0p5mWzTJFWb2?b)K>-EJ#GAxU4$PCyq58+)43g8wZn1(LN|x%#lNTTaM|SSDw-W z*h?Kv0w!XaNc4z-)_SlNgZf0%ajkyKU1)Labj%Jkk5|XNEz?=~ZI>Al(>ek*7UIAhl)@e4?hV|Oy?B}cSm=VM&0!4}fX%5Q&J%l|iYv(jTO|`P zx4*ZNmRx`PvqlaI_|?>%DF7LSs2{Oxv1Jo#o!9B7e~GykykWCa`4=&`wMAI3?RF02OF<;dpQQ6 z%~w^Pr{6$490FE>AOiwXW?SKiX2-)dPPIB)HjE8{H*s=};gu})OP#I@69mPMyGo90 z<3xT)_nKg`nmeN;E4I7S)LIR;ZIJ(q8_;bEsAOIYSkY+>&14wN@W4D+pPDO^<~xSD zK@v5+zasRBEHzS9BdNiPT7`ssI%rfiZdu;)08&=8eNjr+p2 zo;t3+1NVpApo>Z)#VPe}k8ldVT+BqE@>HlMEb+YCIRKPgv4 ziqLu*x910?2tkWF4GGByo2Ez6d;r?y)<~e_)4p6b2N^MbjZ;SBF%3uo3-RE^Y1?v) zxpjzq$|%J5Yz3Dkv}7)B4ok_W?Q|ry7w-K4 zrihN3;2(MGq8ADAqydWC>OP#IV0;mb%A}tvsp!Gjh_9>!;Z@19iJ|UfDOB#LvP2x) z;I-Hk{B**MFK%55bM`^UNC+>Wrr-wD4?MK3F(@{M4!w5M6yBw;n2y7yNcZDU0p_k2 zioX!>QaZ-FO9#K{Xy&Vb!%!`%^8oZ`B!2+D&{Au_B5NW@)+>(+t&@XY@UeNrH@Rbq zmq3^7mCUR{mcVW+PL=a!B6LhXm;0$afczX<4GXq}5SAQ3+xP&-FX!=@a|aJK#E;7B z0K?@;gO-R{cyF^iBwL)dn{e;UT^U7$AS{8Ed`(+39;~0Q{*p=IN9>47{Vp$b=|AUv zaqsH9LkMzUv_q6sLko)e8YT6_mPvt7pQYApE2_V_oj%!?j$fq$yY`wQNFAv5Fa*u|7KXidCI0mf8|oAdFew+ z1R99h#7Pbul(%7%rxK?Z+iDSE9kOrrTWhI1`|LwtQ=ilyHUYf!YlxeXT zfKrx;47D7vmtS4}J_gH94o4e#FfVoH0Q+#v2P0~792FU@lBb)1(Y5aIRllD@0-o7$ zwtUCu=YHWbjC7|VaXRi@z3aX-BXlGu9>%t^J{N~$l?~l)#bShWEGtK4X2UXgUt7xA4E%iBpcJ(KKp)4m@-JoVt4Z%^*|_SGfJ<%-W`hbOW> z-pF||rY0VXb`7pg!zrww$e!G@5&TtVm2}oF`Eme(4(tAG?he=i|D>diIuA58f22y@ z1kwMOIWAHJ5Me^yp=7Yi!9Q^rD%3kXzG-6ozRB%wKJ-8PXH(~T76B7zT?^ZFngco^ zT~MEa_a4;3%Kmpp$o}`I|M$Ql+4^5GGylIR7t?V7@e1*Fwa?|L$vIe5;<&ko%m58ZDS2711r;JA9c_poNySgoZmpoYxk=P zdpuM6`^%wjBJAa!pF&SnVd*+4)xX(Z{C@am;LCge$;LnPFB)4YMoZyUl8cZWkruCB$c-qzk#$;Xx8o*NS2X?2;e^k}!ihcCyy2XrA&gUnM zyhC&b=*Zc-^l4goFSYh3u3>n}U3tP0D_DiRaSv8%U`PfHSC=09$3A%f2d*GCMmXX} zXo#)2H8Lag4-oY9k2rx9O8~feyYP`fj1(A_B8N6!fjM6nm7Lv}%|fmy8D#ln9xMTm zqgJp*m({2n*K(@j9@xUzH(GZC1DyQyb}q)y3vBSB>Ya04x<}Os^2bmRmTiryUT|JJ z87Un+b6m4zAO6O@m3g1jeXq0M*|5aR|8`;k2oirMyUt+eYO{gndN}PGEb+$?{ns%6 zpP^D`lYmL?IZs1uySmC0Hp9EnI*4DtUdKF1<}ks)Am=y5&cZgI086p_CqMZQ^nWnR zmiyGa&=O>~I!IZXMgNoTN9i@lGaGurMm)>sV%rRi!m_ISAW6W72o5gq4cKSq^RgHc7cu-LTLU0`|v{j z@0+p4Ki&^aFS8-do8z@TqKw%5iECVo z^FKiw4sy`5;oUizA3##3`3O+?0{`_$yWWXijx@*#f2BTkdaO}q`W7t3pnCEI7wqSG z237z>?0~pBT(a9_<$THFI-2-c_h3Y=so9~&VL%{gxhD=1&k^DghBRvWX8^S?_y$d++S-K9`X} z4@4*O1-G3Dx2Bm*Q0u)$V1Vg#e42WY*NHjY`#n|30(LGcW=i1=kA8G`w-UEudQak? z@9UfhJk{xk&G=Kwc!Rdkge$Ps=V!7@RaQ0r)t`9mzhsX%<_sixEnjmGR<&P0>UL8V zPFBSxMydeaFf%pMassx2(A53|Foa!AIpUg9_3jKuM;@>Yq^;z`{bNG5+embnbNJ@c;jB3R#JOp&QxYMj6oHO|XNm-8hsU@2bil9~o3_!LA&zj0_!^;wO?WsP-zKRq|B&%6wj&iVi0 z572}oD9qhXm*e_KlX&bNf@Ph?f_HGp$Rg(F^&G(x_p&#?20BwY`TE)ZyK$QYg{1uL z5)uSqn$Lwk9AK!irKgWXC%{wY!*Kybbz*3B@SHTXF`+7B-k|w>#!{{qnk~2nqXQ{x zAZL(@qD}4qEI6zz1~|}ktNOyaOgX(zY|;8K7Y8=$TfEK0>!glqv~Qnm;B#wq7^_<#|6DO((QtkjfD(vGfPK zREVS7zdq@H($9Mt=kx!t^_2lpc3syX3L+&UDy>q|-D%OC(kL->N(_w>(%miH5+fif z-6P#yBAr9?ol);6-sk(l{p+4_uIrq$&)#dVy;f*Y5XT5G0MqIDdQ(U2#N~JVSONcD z1I-u?!Hl32>-rq9w~IQrS50w&LKDn;fiY9>j;~&tj%sentD@iKP$yGH`%VwAzUtfA zh%~*pD`RMwr2&s#ejW7SH85wi1rVr~xG~=Uygn?+wE2ud76YK5gd93_xJde3sjdNd z>pWdPFLSABNsvfLM=xu=lh@ZCzx=6c zcysc>b_hDEC2}%^F=*0&ek8TRgS>tiE@s;?LRjgldFDn3X{gEP{L-;&z~cOaW$!|dqDfg z9lxdoD!Tyl(}RPt?5$Gdxr$Y0U2C(a+Cd|SF5?5Uhc=a*?5wQ#0#4n+p!;+m^75Y9 z3$1zNO#tWN|31d;%Tr)XY1eRZiiU2C#gOsW2^YtC9<=rpDX;uCRZ-$l^5t4MYW%}f z6fh%#50sijraT|~ljTg)WwgH%nGz}q;q%!>ibdvf->Xx;yFe78l2%|sFiemc*w3~W z1-UoZF;aQm9|5BVzZE&S6d*u141AN$vjM92@eH*%;-?OInJ(t-s**m~Wm39cL|L`S zJ1p|bl0I;U8lCh1p)vo@cI~nkK5x7_+jvv<&X;Hmn3nta`X zxZzlOF86p%3lx#0#7VIrlca_A;=_ zIF3y#{N`k?MyXmV>_h$)2tu)7(P_Q@x;bKu;!KTVpY|C;nzvuit96nAEjHQORpBR@ zKvu<(l;Pk(Kb2F7k#j+`1=M);xymm4~;&g zoubezvww9l+`T>xKn!L}C$$QAVocXk)BY)W&dsYMFG$6^?Y1*o>0^<%&x5d%ZsjYH zs9iQTHsez2R09tH<7kye{;6qVz=)29&xJ1*QX0nRdRZKv(R2E?taoYbAfRD#~iS^=QOl5312EMwT+EwH# z0S^~^eEdDvW}ziFgU_L9UZudN%H?>|)B`urJNXZMv;}WzJ!fgW_yGRyA^lWAhY0Bc zN!hGX7FiR*V5B)xpejp^<@r!%976jyWZ&WPNCQ<23CCfMrKkU~vtQ)ZEC#}K0 zJHoziOn>2tFo4m3fghzz=>9V8XFtV@(pJ7j+?-GyK%!v(M2}fmiF@5u+5Vx#1<4yS zOP!=3+2;<|XU1vD);ttofQP6|ZKR6%+XM38^XAdS(cWo!Hi6QV|L;3r!;YE)K6PyX z=pF!$X-GqEDpIZ2HIZ9HA3YyZP*_LqBkhmQzb>mhmHb`AgI7*C{`@a0*#P0mh~QL>$KP_Bd&|6$HqDnQKSuOWcUDcAr5Gy3Uh^!R&vIg=F4ek})h9+|?glzmNtB7`R`%KT@+GCPx4I zT(XosN2zbDkKze=n?hSD?zdZb?UlQP;}6cOk2pMi#)_8Wn<`xUivBgSvz?`2@FI`)0}I z{J>leNxnvkfPngS23uDPYTdN4yqK4Q9QgvXaGYbtYUxS^Z9o<4o3%SqoUJAz$)@v6 z^C}n&>claPDIn9+{|+qnFG2!D#u95iF26~-?ZJS>kuNcqS<~3q*k*#UdO~~SQX?Ck z{3*BRm0PkP^xhl@5XI_n-9O>{idSayz=5{}6wF+foRB=a%iGx32zD@P{G8=~PGUruCu}5cBzYQ-&=n4W zc9}`m!yU@<-z)bolC~qQ&t%(h+TOcC2hysBxyksCkMQ}iWYGkkfa&Z&XP?AYoh%5p zk{d&&!@@R@3Vk#sEo|z3d5dysQg8<}WRhofz_wjgz3yuH*JlH@$lvpN=A0hm>3 z_W#BkAX%Xo6#1dl2>>M^2Wi?2XqT^s$aEVe8(`D?9G44>VU(#;wj&dC{xR*kt9-!s z7YCyF7~oDb3)M|$g%}av;vM55*i0DX9^)Dl(rR(|`2!W$g>i^<0D?g;JmNQ)$rqD+ z-^|St9scnCOq~@T2{$$-CT7m(WWrpcG0rjG>(J|1;Gc^PoV6$Nz@doHX<5 zmA37pg6Hnq-!uq>zphA^d$y*GkDsb&yc4Ssc3b7JIAHX-5UcQ}hXp-!xH8nWW*Xvo z0*OJ+B_M~ltT16crk*^-Z|J^NfiWQNv+d4BzFNs%X=4@mmRo_9R1 zy4&j9npx-M@Sc8}0!(TeIBjw`KV7(k90vuHo!c*2{&xvFd=d+BNTYBM@6N@iF9|ahYgM&JQcEL?!UNZnt*SXI_qff!_^r8((C#S$2^C_xe}yIk z?gqcZFT;B~+H*4HQIpl*ROUVI{1?$9{P%T+WX^-3n zX%D^_eJ`1PdZb~5kU68>AqDt^7RYI&w7dFl_7nWU5B~}O$cp(YE*g;K*9)88!jqsvwb7w6MiV zkv>J0r)>z*$xdx=zBl!wzEdIVM1?H?fmEsn@(i}Rl6h-mH|p<%HGSx`#)f} zg9M*p$Q+=S;Kf#;gKU?17;Ve(IW#`J2Z2g(H#^~a4!y!HRw00u8Y4wistH^)+Y7Bo%Ry*E{|tgK8dnyoCA zk1dWZKHZ>JyqkyS4&TEX5rQb=x}AQ^KheJ&J#2y3<9GtX>v2&n`FSi~83VY_a+x3N z6)>ywg0%iSNb9){ zI0gg=i$8obu=wewJm6Tc$wfJG!U3Uv!tyt7`7{l#@g?oR!h#h+}j-nUH%Jz=YAAmLPzERQ+v1a~04) z&&U{394RGl7J64?ZjTSN(m7qJb6ixPD>sJ5YrA10hx$vS&wI6#tOH?1dRjMlSMzzEu0Rj%L0>81h$OC9o3>+YVdm1TIrSZ)mj=+n*~41 zyvB;!8Q9KNgg4$oe~|LYH)5)+@o+s!q;TS6fXIfYZqUD$MEb>+_OGy0uS5*}QnnRuFw6ZPsu-l^w2wV(+HHsiNrR=`aSxk8j;*4yDSWTPz*va`k z{QDSOPCMWY@_NjTNO=*mv5aJDP^dvcX(s!c&&UZlm?{>i&{gC>g|5`cEU$!&G(|%8K|7Ys;9#k?fAal;uQZL|Fe_N z%f`r_L^6ILn?v#B4fiZRx>C;8Cg&?0IN|xEX`ytx#ED0F9V2T9wbvph4Oc66JVgec zZs+Ok(HruHhDwBIuwlf4fZ`zO0JMbffm&t1=C-*aJ=1Q-t|e zniI`bLeq4;D-UR;8XT+8Ykl3c45$IFI*8!!$F|X?;PP&)@-w){ zmK(X_vx7{U`tmO{GTJ@Y&T``UZ5Ms;-^$FY=PR{Q4blyjM><1pqN68v$APNjT~{Qv zv0iKP?=j?jWH4Ledx-3~R*cb=?of({a$1su{D>=MB+$--Z0x zvTgkDV*qxrfr1U&-m%i417&xt*tQrVJOf~vAA!;dgW$Z?>uSh-WY0?2S3K$FG|)D+ z)C>D}{Gl0sq^*pEm2OUO051v4-si|-_7TFFa@Y;)^m}1=+=M#QcS^$I8!r0Km({?~ zJ1S5ap1s&~EbaNbe7Uc5@0*p(e-n<|&#VapP9ZrH3}w$n&4&hKiYbJOxnyh9x+(ET z>bBdP!X=GEW-ZpwHX4N}kkB2Fhxo6Jzhr-o?2q5Gj|QGfAy1i}K3)9E9i~BOT9W=L zC@_#+l3%U%a)4XS6CJtRfnX_Cnte?Jcu|)Tpp^Cj*g{3)0)@_8^fD6f3~-eS3j+ZE zs8g56pUl+pHrH3k6>vq~owkR+U2F}Ikd$QmkQ}q%x!l51@}LAjo?J@X03tF@Yx@g1 z{iC0{LI|{1wx{-07Hgfq977CAuA(J7L zd)D)O8$!lb*Uylvh3p2^JwuM`%Va4RkOg`Y+Eem;*4n)bLd6Fq-2kM-T#On1He24N z{X?MK9NdCkj;R8f+*l6A}lRrDn!?yuBgsr`-)(+c&gF4uy|J_cqdT4f0&ymq_ zjzYtpFrO&mDLh$eY7n{g{rmS_1cIlF`>U(rVu~tbiF_T0Mu*6Cp^qTJPA~p%pK;6t z&R)|$IjYs7)VTe&=k9k5UWZ@zksTEzE3!*Ap`BhyeZ{mLc3%2HPyO>NOqD`4oO+id z_Jd78AE|0EI7ZSgR#mQw6qXX_*`iIY>yKh5I6??>0g0E3LO(-h>4=}fJW;P@o(;%# zO#>}O&|n`!9)siS3IzEN)e((3k@XlVswYoy1|L7kaLSTU=9gf3dRv0h$|%lPb0-s8Y$fxP4G35xGYr}8r4=MC_RQO|48B7edLR~3CygD~_QJ7c=F zUDG9m*wmXy)4|RoQaH$4#$io27VR7JA`TTuC$`bIA4Sy&|EBBLF-H~m+Tlk7)1h+V z{rG2e-&JAB(?6;M*hQczYX@ZEapoS!SpF%fTxe#q+hHVrr8l@X?}+p2Z~9(%b{;3k z899uI8_6s(Y5roPd#t*MMlUTRnw)i0HO6m&DO>CCaYACH3i)BLV#l3^a01`C{E!Ep zdT3_o!*w$hRoHqMX1#PpDbWtu;*&YOxrDKZAQHOM3JS%<8J3{tDo5j~{c-VP_U0#zc-o*Wa$Bn#YHfn%+5i(d~56R%U zH(|s(VN=cV?6mWlE-~&Wzok%5r?Wyn_#-)f_UUI>JSIOLJ1keg8;04Duf}Uqei7Qy z(8bB;yqgY203<-fDrODdw+fv}4O>cC;GMI#v*Q#9IemA2ytNP5*;f|?EDfaMMaXw! zHMDcfY#fbs3$S7%z`~nCjX$XE9~=-y#%Tw6n(M=h)(k)MSkG#&5qgAyY{7i=EIS@mpAop zIHM|>eYWeNevQxyT(kM;b=ZvZJKRsJ z(1uU?Z7Y}ZJXT`V4@u$n5h*FfkApWWL1SC;#fuMAG&E*JbdR-co!hUMnwGc@Rqc`w zu&+{PO@Rlyia!PJg7k!WR|N8>t&rs{%Xf8qiFiM;WGjz*C8Baw{d(a|T-wo|aQ>`9N?vKzwVShCtwLD9yn-jm zakKiQaZj^k;S86Izw>Z?=t#rBs*T5y&Jb(^@Yyh_Srp_`xe?{ntL?_b+D*s0zp|3P zjMCOwcQGY$$Tsv{l{68pR=HEesPP0kNOfVyL{|0KsNT3hNNY*xQoD&4`SEGq3)H-~ zkc-p~tj0kZSeq%B6816ulsW6rrLCfwqw_5Js@~HOiE}_e zdTovTg1T97NIY+tjZ>vxC|u1M8o+3cT=vNZc^rK>15Ky{yj7`~A3r~*%E2&_tj*hI zr+Mo)9dYI*7MM{|!O02TK1pQCbF4(QyMuKgREu4>m|OXrE{7%# zyQO%&UPA`4`u~?;GHMNbs~LV7ixZn*eMnM z06Or|ffc>rjluS@hi$$cBp*Pe*xq58j}}F+8MK?A-wCzf9QIxkg+=x|T?LbI*i;`l zg)XI-CvscT8+3$@6b(Jpb5m>pZNW6p+8~zS@2mg|)oh&GQFQbX!l(BK^k7vIAPtps zbjR3K9l}A7h=&xocUi2)E<_U6Kph;LD&*P?@SpoHSE3w^9 z^eU9fmbEuvZOCt`u{uFhILGw4)PosV#BWx(asc(S)`>yRqT(!cL#b@9SD2-DGu-3% zUv6}*MCh#KWWC;37=7ZLxc$HyU@T>emjdEzxsFOo6k$%qE?(4myE;Zi+4 z0N_(^jFpZ>+BbPgGa-Lzw}65@=?-XzRGIf_1^b#tF|=S|di@fs0g=QepxukuRDnif=`!6M6j5%*bQvP?2AC z%C2CK9`3atR%@>tw_=*aMN+KhY#@o%A06mzn^+u6p3H>vLhG4IlAckDVC+F+QJ1q! zyJ{jGSw^RD8@ihaym_h;nI{JBQ2KD{Mu zCXCNTR~v#s4KME3&>G}I$UJm^c# zAc4NAaC@d!+SqtiBi^rtywmT%6_DlZE>3Ju0Wa3`YKu7qd5bWFiH59A+4dh0TexkE z7MrD=tUo)tz1!}0%3^~<`z=cK7w=S=9_c3b)tqgwK&X@M92i*ZGyL8kuY7%wc71U% zrQ`Pd(bZD$6byt~(0?X~t&f6?-b9QK;g4-=ks$gI{W>i%v4A>J<71iD=EK@c7&doD zNlmB_3OD-Z*~J0;$f@@JpDQ&{oZ8w8xu91l!#3QDD!JBJ*-Np!*-M{Y&AK{v??g;C z`rcEKT8XsWiSZ7X%wn;ixuVt?bTZ1#e)`C#EoVvUcJyEzU9!&|T?fP!^^3fCy zR(0V79Aq23*XzRWj_O9u|K%2jB@_N_K{ng9S3f}o+EA2#7B3iwXgJop(fM~F(?qu# z9U4#zP`h{FZfdK!MN#JTve7j7mYm8=x;@|2VuR-`ObI6xO9GOf9TXI)zUkNg!h?|2 zNGt33pOrKZ5NB7ni7&&Lhx0nxG(_2!n~yO&3{vpgh?2P(#w*@n=iyOLvE$wLG6!!i z8W6(h-cNmb`;mWX7h}G1$-%H3RHK?bN@V=Y8m>Z!2F_y=l`{YjzgKkhYhL&E}7O;Mg*YytMe0DDhSn}&wQQsw0RrPkpE768Y!*R7S8aUG206X>0F7rskkN(&G z-0j>KElf#mYhJ13J$p;|lsfB0d@F`p>|{nrmcc8EbhqeDK7oa_cOh6%|!9axTMGj-J!{u`!BBM2n+tM zB-r8JvK*b{)XJ8gvp_G+J?L1aC5PZfB<#=tOx03h_WS~ z1cCM?!^Ixc6a?;X@S9E{T8uca@a`|~NR_kQF6(!NdD@t@6q6{jDUy0s<2V^8P znQf?MytAmQhp$_Sf_2!e^|j)p{>0NYkWKN78nM?sWYH}$r+1h3UXFGtQZ0;qVegXv zb}EJ6A+kM$gy9*aRQxOPW3nIUDiG#py8HN3G}1WX9xXULCg`LaoZKDo#{W2%qR?Ar zX(^|<7tj^4_1W^O_oe)zR$bc6ct#YFmJ|Lue4~b&(KTI&&Q>3&o%@9a(L)jC94cnT zwUOAOkGiFMBYUE&9yPR=iW(|LQP`!N8i~GDaamrR0hoDNqD<_MH3vViXRArP%qJOC z`QZh0q@NL@d+VcGXV%38JI{ud zMigvlOs&o3$`?Hwf=-iHu9Q;v%3jI2CgPAw21WR*E^+a@1)nPutB zlMv22c2GlsIIEau$h zG=N%mPxFa3h%~qo5ui9Sl*ryNQk+CjP&JB~j(1LKekqLbIjM2E)G^f(vY)`x^^7HH zZ=OD4e`XzBX*H}C%lw8WSFYjUAZo{oNI}5!cRq(n+h1;m9(-Og#Tu4x3HI7k1!)oKW)E@Aj$jIjSHEk@AKb38np!yX0xY7kBry5R`r((4x!L&*3_YLr7nSY0j(FYA{y@x zVrj@zz*La&Y{n#@`ANK0)X@v+H81MeT=6o2LZN24MP(>3z%yQN@ayGz%%_nP?It57 zH8^&Fs7q~xkafgPVDXFM?26&RWRtkpb?22PIny3`q4O>a&;+Fj-FeP0h?p(0ZP6!R znphR)2(vB4y#EZ3J$>~xwKei=L4>bVwsjrDw1H3)r_zdUYzK2#Qp`@R9CFHeL{)xd*p_ez|k;u;4&e`$x(X17bL7{BicL#B)F>awA zLIth*_aW2cu8HsEDIQO2iaxn|)zmWs<=eWJa69a2(}bW+0em z`|W)YIU`Q9rqo-Bm+SXOh6STp>qf61Q&6t@{1jfKx%ErR|azzZQzaPSDI}*VX_2Y>>YZK?2KMfnBE;!D*tF^ zwhqz;#XH@UX!KGs^Vs=hvu`F}Bf^grg|gkV)*A7Jgw7*pzlp39x)*Dc2uzH)mOqy? z$TE_`$WKw1U+qt(wN7!~SfibrVNZ9wVoyJo#=jMM;8zae_3a2D$yJ=QB2DhG{h=6W zJKyA;sCwge3-Gh#4`ob-g>nRqu>e%SxIZ~RJMB|6ZA%*+rZ~E^wsx}dm-!|%3Asd0 zNl*0bl~2L6H^}`3h*%6Ob~Q;e4F^%aK45$^f8E&E~ zxBAwLZv>_LBPiY!yGRsty(eiYJfHT&P1A*Ja7JzZ6f`BB(Byx87{!c_rp-6$=Ma~Z zv6W?IW1kOD2{Q~HMTmOg7dem18oHHn?xG~)>Sc_vn5=ZpfIGnvKfG)(i|+m;dVWvk z$*X4iR}wDzUx)E(WSH@`=(k!*2H`UkJ+9y0Q6ZvAeCvD2fb9C76w$1EG^d;ioh;>) z#8l_@>`oY#SjVS^LDtHcV~U>J-7zjt`m)`f;c00bSK!dVzVA%X)ukQtT09ul-GA{* z%1*(r6`e-HS=1-i6Z?3aMZ-Mi27RG@Lk48F8>^u3IGH#;pS4WK8LxC_$8X@tBE2d3 zgzhgft{Bufyog&>jEqjA#rAS6>&e4o;2!Kz(AphmPB0Z5GWFIttK-47T;e(2#1_Wj z?sFS{T$&uwC!%b1A-%;m_y9A{kFp~KEmvUT8Se~PF28%!3CF-D zwO)`xP@XBN(5p&iq4mS6$+B|2o zNiP_iP!%2v2xxh-kjC(CNgW`b1$}pVLDvW_4x0-lzv!Jrc0Z5`?Yn?|Z&P3Z7n~AY z8t0f3K=}-Cf?wJl!ZmoJR#&N>9q1?vyvtoG8HXhO?=d15oSkmqID4*&Z<5t^#HPqR zAl=i3!}pHQbvC{G*iWW=sl7y-P#$NTkS>4yj%X7^e}>9gq+L@!jmovkj`6kHVb|h- z$lC;mgnQVo5QWturV-5N)J~S8wVb++I;`@hUNh@_`{{u@WmMl5Tc&y?O+$Qe)3L>& z$?jO#uo$(QOrn1ScpVGGAP$aQb$b`wbW<&lsc=b`5B8>AYuj-?!uyCmQz-X;DpxIqlP zHF$I|?C`;XV~9wwhGgM#Y?gqL)JmJ3&V|Z43C|1WujA>`Kj_NO=)6pxZ4I3d*B`ZbCONrT@k@@Zr$wsrW?k~$E z%k9gzKu{)WFP3!bN*}k?+^$8@io5jsWYYH1PceCt$>+GR!v1=TL6BWY6 z>rq!3vP}ccaLBUL4>V3v>gM8qELL#S*u=DRGyO)_o$k2ia52rZy_{BG-MKj&1F8Lc zL$CtE2~Fi*>VxML^D~>pHtRY9^c?QUF}Lsb93tPnmh%6EDrn2k|Ciq zFVVzDK&1}r4JW}EfE$K|m%WH3ju?39?{bWiDq@cp*ce+LZdede<3~WSM#>se#EC-G z&z-DW=O4w^bpEh0)lP-CHF@*F(*;}N2)0*_z8rzq)6#4|&&4W5SW%suc4R7rj2@p> z4W5v7n}xHzQWJ-wnF)FV&}L|dI4LJOzUq9*ugtLPUY`_5Er>c&*STJ=i+AgSy{IB0 z^6|>|Lg>2R9W|Z<@ivWj*fuN5Tl3AEJY1`CA$ag1s|_6y>3DwCU{?9f{5EyU0uDO^|bgMpEZ1v=T)> z!Z+Lo?bw$*qV(JWGY5JW$#%KpT*pGjy^nO9yg9wt=XoY_M6E|H%K1~clGZT4pmn~( zMaiq^j~Z!Dgqx=f2F2O!LZLYc2A!Nn!b^O)+GR(dON=OgMG?VR0Wn{Gr+o^JOV zxHCv59|_jl7Zye64zy%R4~r(KK@*NKrc(~SP5M-syV-7DLiJn1mPun}6V8`&y0Nki z3@P&QRm8U*u*%V?pB1R$$|$c1XqYjz@ONdkPAz-)u7Q7-r2S=$zv1g`NBKr~T_F;l1G=Dm!;pL8h6~eKln!~z6 zTZ{MkBv<{5v7b(}S3Pj~hFT-htqbrM_b$z!BajiBbl`9=y)=;oV})s5OKgX*}62IS)8 z4X96l+7c69Ys9(iy6)A6k33%`4SjVcxRA$mB~WW?G4oCJyAs&?Zgae;rzI3FKc8%= zE+MmzA3WFsw?Y-sL!rs%HjAy8?(Hewmk+Nw>T%27vcr>Qlu(F5-_PHoCWLx8Q>^-9 zP`D{P5g=kfaUk6>gxd(EFGYxx@16a=1ok!Jo#Jb4&kp!(6p-^Lx}_jv?{D^l=Ahm^ ztYown#i_1v+R^=8+krDryxaoGfzxK2p)y4~8w#z?rL4`B8C+422m$6=zkSiV_D9Qi zaKq%cbB5vXa(jag^<9rf)M0UScX3&_iuP_cgyV~Q;Wu1Fx_*>qJGlhhS=(DOh7Zwt zP<`ZqmTY|2HMpI;f`K3P1xt@r`G#BAD(+PzwOrkjF zLe3x)hJ+_vm3Rc90#ee73(_Lv_C@xzuT$z&H$-&jrYJhL&q}+J zSDj)(wR;`NWC#CpZYcRtq^BO18VND4-#7w`QU^LAMP1``E$?W%yaEjjHGX}xd%RP+ zFSgJ)LSCn{)bnvJVeWDzF|F&Yz!f(3Eqh91N;C^ z{PjyW`Z}3IvGzkA*(>cM%*ILxM1QFCfm??8*5_#1K@sChP8>v0-*+hS?hE*W(ff93jWgs@`4$m^vOKDBNJ<>py#01g182_skrdf ziGhRmVsgt{S+zSxnLi6(1UyT&=WReS1v)A*Zr7KHZ`O_;qfT?~xuG7U8Hd?uhI_#g zd+l(0U3FkL?t>Pg%h>chc@W6rczeiQ^-XbE5npeFrek50j5cd)26^Lc+{%_ z@U0;}lK6HAi?wJ7BcsLi6u6<0stF@!+a8tjB5_she*4WM-If z0i4I4M9^|=e-W(QNo_V~1<=CSI zYm9R;yQWYNT{Ej=L8wo$IAsYwmR8zU^`H55NS2u5@Ojh;B}n zJC;-i1l9xC@h?w3qYQ58{W^Dc_4Fk3H}`z1Wlk0;U^c_xgs7F@X7U%cv`eYkSJ*=P zT}s1+zt%RkyO#4BMI8o^GiNU5^t2bqpB{Z%b}MP&f_G9*uynD*69t&x=2V9LqEr27 zC+K*gY|S;gX7*%+umI;18Kv~#wsLi6;+5D!6$lJz9h679;axauSJ=bb5kotV6bv3I zFx*2ld1*$Fri*z#XhOrEy*?1RUg}=hH1ASEDyl>lu;JD z^WP^SzPCa9{YUAiP6tv1;B!aeiCid)kSNTb}~*cN9%PV4}AAb!?-6haH~Zco;- zRXA`v*nH^8^fg3h@l`JAv+R58A)gLX6dOI<`-a=ByjQ#=M$t%*PY%J{TIqG@(9F7j zC+TxK{@JP%_&1f0@K(r@6J_QjeR$z*NPa? zzqTi~CU$F!VJd%6?4+U1?49Dmwm1Ov!f*bRQ`lbUGMUSiD|@Xbrj`Sl1A zqkUYsFHaQKvpb$-sL*C>2bp}iuXNP`d7D^ee(_engZ55il)BlKG=~XxKbH_A-2ts2Rg% zxf9=^f9Y=h>1xuE?ouAh>6tX&?(_LiG#ls;%6|T)NVFkvug0RvEY>iCrpHbKBpGs- zHXB(TpfWBW+yL7h#g241^co~)-U=52)K5zr&dmB)Gkdk%-0F;Tb)YLTcbMX7tJ9Kw zYj9m1lV_tdGARfWETcVJOHj46l`lZx_wL)DIGK)4$OQ6;n+xE%y&2t4BB3J5jsnTVfxy(>Xo9@SWFc>eO5!97R+Y|lx_KlnI$|tA)0H`f~n77mCa#3NQ zIWRLBjYNyFZz;IWGb+?7dQax_UsLalo`UfH5$YM!CxQkO=)VE$sEosq6SN*X*+2<6EyhsZWYI#!1Gk_2ihzn|~$8g_byx#?Q{q zQM59-lWuF`#l*TDSDk*-lyF9|ow`4IWj)DAs~{0jr$G%-gB*&2Gsyk5B)EoolxzgYU3Y4^DAA75Q@ zqnPpVBwHhiOr?Rpi8#0l_Gc9+!_)K)>g)q3CcK3mPxw8_6vFLS0K;e>cLJITQvm<1efxMbN{Ue zdKf1xUtfsP_g@K^vK3R0WOYVExRvBWCV| zP18TdO2=}|Zd8*@SJSTR?|KHoN#in)owRxW-1~-IH%F9?96Fu*V5eM5C|UecFIFAK zd|w{LZ+?%;-|n;(ni=oXsZ4a} z)SE3jA~n;<;oAk2fG$N%_gL07U-gbebhXz_rt5Lx0)J$q3-p?3!`2!~#%$|F1lVwp z{5lYCu=^Hw$JxG~ScD)9%}0aE0UZcCkc`3MWs=m$JZT>%4&ZV1{`fV>Sze4?!m0Zp z$0}T>rnKw(MObBUVHM)I>MfFdqy=bb=@-`~)|E4dNREvT zqa?w}C8cCxkq5(p*|@HxqP%-u#!JN3&2Po=Xp`L!MWMiO^Dvmw4 zW_NhoY-J2;4dWM0axDxjEQ)T}uU^wB=lr~EwhfC)F)uS%=AEazZs#8WeN84T@c>B| z@`aNtFidg;i_`qmzZ{=9y}{LBU)}{JqbBL%?d$H2TwY$TxV(D~ctq}Nol+38)ytr% zN&{)b5O}JPmUIIyDX#)5sX0x(YL{8X>EV`*6@}Y`)#-v|?d|m|}L@-pudS@N41=-04QDg3zT{Bwk8r2+= z4kd=v%n#$pyYY-7F`n3}v~JJepw)1Dlpn`T#kgv7jNI>q`XLa2evMom60pnnlrcN6 z2l+NrgHr}sR{6Vd8N<6#>CAefJ#WT}W3)X$a)c#w7oAkaGmgc5A3F)%QsB_uu>SA@4UyP*`Js4NU4Xe{D-2_KK* z@Jy%oyCl!oIhoEFbl{sKA7bkL6VVW_2ivzq{Wduv^8T_zSRpc8^L*bK$FHru*+vh6 z>Xrm({Ed{*#RbWt{h-Tq$wv~&{(~4djXeywR54wcRni+j`UmOC(+=}_wOv$5pW-xY zfzDKcaXvM=N(8+((I9t0Qfz1~$K~5ww*Ka+1NW43FYXro?&NO~dy>i-W7$8t%rd4f zj?`sq$r3ZM49L5ijq7}tpN$TYD$J8(XY`2dmDi!wD#z{4xM(z=qw!?EHu?P+Uc}tR zX=4U)c*a63QTME)jw96Rp2_1B{6DZesBBM)*GM`a=OF(48=Obs=9r@|l`}N*+nGKrPFJy`Lr+nH$u#5asgh zv13CrVyC#S_&mDVGyU&?qYI!HhUrqIcv;0(|65k$WSx-yU zFdfO43!NMFnei!Z2(avIQ2g1gs9YU6r`m_iI*Bfg+Ull>??ZpF0H0t9P5m77S|63$ zF(>KWkp!BL`<_nqjJIkT>5R;jm!9cyMom+E)JaAjyUCh=ai}($68th9f$ogvF=n{f zs?G-`{CBP9vlH>%(6j@sF&#$a zJ_j!{Gm@tXd3<=#U?9(opbL;*?%ow5w_G zp~g`0J(e}|<&0g}<1w9!r7dhMPB6pG+I{#1$yG*X*3jJqITzt6BuKQfu9YQyh$4yA z8{6%je~;viWQH?RVBT)#lQBD|M5-wPz9H z1dE&O&5E(JoHks)J0ShbhchNPoiqS9ShY4Z?=F+AcTBeXd-;UO%2(Vfu1d$N4X5_U z>tQZCb@f#&ze$e$)W2CZG3x1lL)f3ht}}r)+d8Bp|7BP1;o*Bs9GnpeM04{CB5sR# zS^{xa5Zy!zJK+2lthlejI1zoM>0+uceYV!)R`&Erc`DvI`W-Kj?$ z9`V-F5&E~JruhoR_#r=NU)Xy8%^$8# z!s$seoT7Xi7eMR$eM(dNiH-+OiJr`VuMBJ-WtiU&5kV9a*F&k{Z{!K?a3tB*F{XCq zSM}Z?=jUQ7bhU^RFRJ|e3K~dai-RF85xI!QgRCNT|BHbSo@TLFxKL}6jxj%Epa(_Q z+H)w6Fo~nHQ#E2!Hy_g zx{CP#zucZhQdd{4(vMRu^3Jk)rF9vi2&~6s_6zB8W7P1;vW-oIB=NcYE(PiC24w&V>5v9NP^6imOX==zkS?V= zq@`{4}96u zh5ZQdzS3g(8RSWXKVr4}As_g*t?(V&6h$KbpJS5@CrKqQv}cv;cqt(*J*b%1(a{kz zRs``9tOn$KiQP)(*gr*8iS;)Ibv}QsoSb`IWXnW01tX;8=X)f zS`>&!>uL|BB$Rw|H_XX5H%qy?h6WKG@`%hiIm5 zFbsFKUNhn$_s3h5Oe+<9uZyn+kWq3!#R3gvo|_iXLzDzdy%5J-QL&CJtfscsp_1nTNB&lfclRw@tF5?l53jf+8R9>J zZTYwGcf%psFY`m4REFClx-qx40}oEI{drM087C$T-zxJ6!I)F@)FOMECOWc4)IwI9 zO86yBJMuQ2Y5_pm-)sGCA=xAk#MM^>xa0eDZV{Dd24E{d<_o#?E5TB~FYkykM z0!q!keQ8SG!1Jwv^kAd>jhT8q0T7Q?{B1RLPQN+|Qd8#gVZb`eUMwr6%MNubk#2!k zTDi?7kQg?&S*bP|3xsQDHJ(k@f;E-0qL$@k3g*8~Rv!N~fW#;Xf)|L@d*%Xc;dYT{rPn5<|XO52V_Pcn}e@br{TlG_*TmHz664VSQFqvUO9R zkG|kD`}+!M?3Td2(L?$%@1n<{;wE`OCB>iUqOpoul+h^~ z9c>pm8D$l_8&s*f>c<)RB?S^j3{ zj8F{a-&*;*5dNFiWgL#smS_7WARMhU|7HQ-g9lGR9Or$&Y=;5Edj~^)&F5ab^;y^T z*pZ)_OE+;+kY#@jB)9g#|C>p@K&alOs2xofVfuQ!By<01iYvo8b+hZq?_YSymp$id zdmVe2&8j(2hLwK`Vn{n8?$`>o5-IaVB{+s6Co=tvHMJ?&s!CC+Pwvb1dl#o@zTK;YqWQioN9lPaH|}jzd4PrL)AhMy?o75C|7LZda0%J<6KD(kye^s1f;Eb zoa04xiCXHFP!xFakvwxUDUi}Orbc-)w@fY}!(B1xj_c;$^6zoTWt8iRUW#LAI8GVk z=Ac(4*Gwyv;KG&Qeb}NEed?`fH5s_wO&83}%GxE7>mbCUtKWnwV!Zu8;rE3E@m? zUB>c_&)b>Ne73pQgmE3EbR}d4{(A=RZm^B|17POO{Gce7ROUY}-?&>OJ_~D8;V$}1E z$-QYsU*#&@J1J)pn_aG=`^&W~z<)D*Fkf49dQwD;`kmlO@Z(Gx=5+QkDydQ4xz)op z5xtWI(WH+a^&%M<_9Iq50l6KQOcUnAR7LsEgTb$u)mjLUvEg?*sRVUmfNZxrI z%d_cf@~Q=WOl4ciodyNh!LxAC;$@hdi(z z=`x%nqXJz`6F-N{p;(cenIC7wQ)DZ>@JFqL_*)$0>_jqsY82ZICo;~DTn6Em!FLa z0BJ0CoYoW1tJYV#D+14JbK0^*nICfLaR*iNv@;WrI~nqoLxyXdY&&{;Rii}n2SD@J z74^j6c3Az0vz!{lGKPlCS1~xb;zNk7&bk0(BidaHkJmR6R4c8<;^#k zng;&2C7S&3Y=c&*f%hC?*AXf5OjP%kpV9kBHouP;zk*~f2!_|EjHUNF>zx=MH9^n7 zhBgW^S9C%%4RUkc>ESH0U6$P_?JqKv3baUvD@#iUz>SO~!C)dd80_JEEpE9XQHq}j zwRk;3sG_pY#I+4HTVdcTH(R13IQa47)w@Nm1-iZW;lyJ6WgGc_R+<3Fk0V(0fI!CX z+w9$8Ga9rZY{z#cYmRm%p|1`qkiXVG0FSYg`kiKD>9y~#Q?4RNZh3sP zd%sE--3X(id#oZQ*oyV&)k=kKVe>*-%DW;S1Hbj$vxueuPQ3HekN;j@?aT7XZF32e zw-Szv)w*~cf{9YbQZpM>sHyIY-1N>C-}ou2dB^72BDalWtHT)5R=Zfa(xYW2JI4>& zQP_iLZ9C`ZV#ibh2q*D7>E>Z`zrs_WF93&x(YaLr|iF287oeYcuVQ>Zdww=e}o5-@tS6Gk@BR=B@P>V z7FVOg&Vfnc0JBt1;80{ZUoXG*T89W`5U_$|yV20lWXo9$W+>oIwZA<4Js*5}ROv`s zh`QosTD-==G%LH!M+~{ZwxGFmLnufmJvG(DVLV5pcp=(2;T!B2z#K=1Iwx|_PyEYx z3}8)fK{l%l3Z~!b>wPYAUM-`)wNf=+@pj;5(IGKzf#s6^?j1JhH1cp&k|>c&O3x3I zLd^ZYwlY|1UX5d%4a+x=&nd?MR9i`H@@_Yf?16m~iJ7RBx=_WJORW-;;wmP0r*!h< zqNp8HU#ny|0Q$H7O@0yi#oy@I#I2P>kM6hjh$e=vsB)FYxQGL?J7o2y`~#tfn8}2B zi+)4MI%`Tp_f8(Cuf<#FUk=Cl+5dYxBOH@`=0VfL1Zr_4Ha>BNLC|_hLxWJJR(amO z(OB8*Se{A1pV*$BO`#2-Y`zxQrd)BLvGu_W!W{S!>pLI6ZPmT;d%^1Kyxln<(@)3C zE?OslOxP0BQS{RCGQ&N`VRL=r*|<7W&=&V|$Jd#R`qX#+ci{o7(2KKMLzNoGVqQgb}k{S2tRnrDa{EZS zrgu)+=q<6~jdTbcAnQ=i{GXD~h5=X*ZQ~jb16&R^k)URl02880NJ*njc2)g9ejKo| zLPS8x6g>H0d=YS~F>hWhFQ(}zr|b_9{vo^JFkRz>*Gab}?m;cY9c|jZwyWNxum(>% zie>G$yC8!~OQ9AUAll=_4k_mVb5%%&=Nr_mer>oij z0R(=zcoI9f1Np%a`Bu+lx_qE?>7&p{DN}J6Zq{{1q<0prvKiTsMpye(!nU!~{T*(n zyw>9*wk~3n@d@0gk>1?1`qN@n9Qooi4-IY_i388CB3n+v7c6SiJEqR!5rZFJG4mVn z_sR7?)0o$2b~?S$7jvd%=3#Hkz1m4q4S1GIbMGwg8%SMD++rfXfY2jZ{ZiL=ej z%v8))Wg>d=(uc>``g`G-t%YMa3TYvcpO0Q*vzDC#Zi@g4LEWwjjDdpJo=!lrSgQ9O z*hUtA&Naux`_4}RvmV%@$6myB>A)@}9z@Fh5TrT|!(!`9JWD_+jRh4ML)>K5G&^x- zCp!P$kI6`Zj;T%klq7{nFP*hZ; z;^0ty_Uu^-$hTLNmrtr4Sn7>u0Cm`4G0#kOJ@2Fx>TH(-6Uzjoj7T)=bOzy@toG2BzxI|O2$5Ign!b?;RvUnd{^rH=ZNUucbI}$ zSkZ`jv-| z?r~~b$kZvhaL%nKyOKf-ibv+ZcC%Lun=Z>qxltDS(2}wSliR!~?IoIUYWl~b4>3Pe zvsL)A6I5$se+e2^v#lvp-kyUgJ?G56EP2*f5rq`x5sxMv=S1 zAEQ+ADKb@6UAXdLR^;-G2mRWSdaqf`oWtjz6Rem^(2xGTEJ)-reSb}T9?2YF& zJlb7ZjY`J3av!Lh@~NGfL*rYQJvK^5+}&{wfQuAl0-(WI<)V{;4$$n~EQ4B}GKs}- zPV_j3w_-4mfGhi*K;o|GbP!#dtGkAc>dH9K5kI^|9mc^MTH>e)_4OXaV`&l+5}K=_ z^~ro}Yp}q8baFjQEVb zcq4CvFm9XCxWy(OSOQ@D&2H^6nMr zUtKA)D{~CIly-TVMeq-KV<4Fz1muNp_`TP211-&})(kMS_0Ip!R9~A4QTRV)oz7@O z;n}Nwh9a&-T_SQ$jpF`xMM~m?1nGdu5R8@UPRM{Em~jpz@a5sB+Nd4Ijr&%3G#sF*~! zo8Uj{Z!ZrlmuzzT%g-1!g20b6_JfPH!osw7Io)r}rQ!_Kmc8MzN7dmW=L&+u( zDCNFyoZuvSb~I9d2HrpvYHEQ7-oV6P-q!@aCcJ9+2_|&B>SH&LwFw4ZH&$TV)2MdH zZHfd=*Av%L7gW%NmJhJeKI8|_srgKu&I>M$v>+MG!S=`L>^r~_c$*J>cJhCkaImeL zuw@0}610kS5xo86Ax}QAr3kkqDBhcv4|}Tw5-n`xV{ZElM*_?UF5Pt1{wRE`)n5DB z&k95@FSHqfo~3X8B}VB8UVYf|wt#$wg9~V1)K91?`Kmq+Ue0DB#GFrgDHNxSD;>E$ z8`J-!Dp*=PjuJq2RKakHVV4u5+%4wzv2!uhJp{UDes#GHE`va|jEEX_=T?GH-y2M& zIcDPT9z$Js7M5D1?+YeF{q=j%$QsGzFq*9T)PfrJWm(k0xZo@*aWkx^v7<=2ZA6Nd ztiE1f)CDt2B*ewPu9tv-A2Z8T5TwurCcExwJWg8D1tqOVl5cbTGQ#Pw_Fy`Es@ky& z&`&9P_3mM@vDwikAOu{qzZB$F9L4R_%qOL>r%a$0n?%`l#(918Nqk}lt>sKz?Y{6; ze0(H``)B&rZETz?V84pk7q*)?c>TY93fRzJ162+;%F|X2Sov27R)F!r)ORR+ z7Vpz|Fdg$_-7MdQcEcNFDIP5f35oTJpT=WB+Rps0Vnj5mM*>_PAM+#mdAEYONPdnQ zwq+G2LPw?kXO*8{vSfn$LjnEC%~Ozx(Gh7hw~?aPZ4c=e);st=E$SWeOHwAcT-2S* zobBwuho9PHQzUseB`?zKyJd*)ja;gSNuP~Hq*^@HGf5E-OPgcbk)gGQ+9!+}v4v90 zvd&q^JE-F8PfHjU>q(qC_51YD-I}!=IN|A4vQh}RN$o^x9aje>EP(G_qs%a3NVN2 zj*2Ld7g0kazp=8KzR;&~&{^>%x}UG87XEHQ;+cFAM0ZAczRA29@&HhvuV%hf_m|WA z@Xkgnt<3BWoYvVj{HZ_ga-f+_w!Iz`W5+Djo22cylFIL9Unp5D26K3+p-1`mo8WO7eeym6k$j#mCL9@sv2)D-+P6eMyzHTqDNZcp4(3X%*2;l6E5JG2B{XKGTCkk=Kfj$G9C`wy^z zJ?MTuTN^ZZq8#r*k_G(Ms+CIED#Q#Rg({?ER=USd;<9u^Ns_e5?Pf*|qlWeE6VZlmK`J{#+%B;B`S`9V(aufk=oU7033Tj*lshlckD+C#(Pv98~CF zQ{?BkYEE*UQ`3kl|L5p&INp#h-S0@ApS88;E%z?=Ky`t2XK`J<=FfNI%fcFdx3dDJ zqv)Y}Pxh79zSNgIFH@%n_E6pgQ%?=mhQL^Yn}}}aVWqL|@AA6f@`L(&{{~LMJq-Um zYc6Ot>zPoy5-gf27H2C`i8+8xK#BsE2^si~1Mo=}yl}|n+mNU=4At@?-j|W!5*Pqz zQYzr4V=6Id+gdyHKRIeP`{Ek{3gYMxKcf;f)syIhadjrZS5TN&>zW3}cu4_rp=87a zXcgda_z&XVnL@Q#AdiZ$ama=q7QiC{HzmZT0cdwd@XfV23mUUiF@nW&8Ha_MoW=RP zzT2bc(f`YDgPr)j)n54RZ7%(D}dw~^I@f9HAaKlOFRZK1$l1IK3+ zJsem@>)rfmso$MjwJCu&@g_w`PU`n2jEA>_2D~%f22~(23}4KtQrft6U+MJp@yn~w z*SngbGpesMe7q8UMZ>^r@fuu!A)LN1vg;xEMs{J(N(=CAXkxJP(@Nn96L%(66hbi% ze9MRNv@5Q32cpo=|1APB<(ubx=5ggk_wn42KQeEVljjNHXLR@$~$I61Na(lEBc`{wR& z|LoUH7j)sGt`uc(rF7#03|mzzt526LrDGUq@Ws75;@O8>LH!FAua4xA4(iEjJRHDEUJs(iYjCII$& zjS|9;qAaBVG}4UUhVrCV2GY9#va+%2gwiK?5cX|=LA2BqZo8qqNGCRF@K<7_=ZN>gg&aBj!(kcF-QfZr^5wbc(Zrv)Aa9lhLW8ikiixI%`q*%kvR)}~- z(r8!)7;W4Eqb*SXZ8{8Ulu3{7Fp` zlux!Kt{05{{=36v_s0V|Iy%id!YI*Jy2WTU2+}6}+7Hxzn5N9A5B!&}2RF<|-Zy%m z$05b_zGZX>mm0BeX&9ox6ddKGXGuP4@0BZ5DO1Xxm6obdgr}Ru^@}@`W_#>9qH1VV zi2{T2nz(69-5B!koJeiT&M*tVd?bE4+eJl5D+b7ZDu}CBz8wBIm<)K?Dd%q*b%Jb{ zn0Wtrax|O5rMrLbmbk`AbW)ekM_Q~5PN{b9*Qv*z!b%Zl1><%Z5sorfB}4O`U_uDr zScIE;eRyKg;Mwu#u~O(V{?q835N3n|snH6s+@ll^(#hJ&uU=(b!oo87att^zcux#$ z)n~EPH6IY~b$mPBY|vS$l(j%NMfezy3jn*=KF^o2&J$8X!qimqLlzCwT^(njFoOvr z`>hc!wTls2;Lj^#51!o3;C35`@>91&hr=Tj^N^=^pFW01jDU!)5xS)fZ=7qZYtTe% z)XNO^^W8srfzU03vvsVRyERl;m*2_@;mgrcTxwNq+Dv=RVB}H^ZS$4G^RK!e!Q1fc z-@WDuZpK{5JYUa2^P%%hof~n708pvWF)|L;nTS+{r#gThsk6puXV9rlH-c43+ZcM| zv=*_GTF1iso=Q}JXS4%Br&N+-;O<@*;Y78AxM>aEN<|u8B6BqCB@47z)Y}_gj|m%o zjiHZ5EoAdnTfKP9+Yk;H*Vj+NZurXbda}ZrM-Gf}lw8gQdJ7bbB?(%9&wm76n5K6< zW=T_B<1mNFI|ZnAl!hf|qC&$cl;!#{*gzZ+T&N@k=onw93$GBfi63*k?%?@Rxx|uS zR{!&8dYKJ{kOR^^xc`!AH~yrs`!q1|bq);4(Tzr_I%V1g5>wefi=|b*l6C!a@4;Y* zsUmMp;cg%a9b33sN2{q^HvW#z8<+DdM9|&?iAG$_(ZbUid%2`P*FQKc)zCw26D9o= zqs+4jaaH*`D6a4U`X|uu^OmHQ_^;AJnxW3!*V~|7-hO%3raSXL9{@jtyN^4lvU;;h zifj!iP5J`}JvC)zgP`=P)?kYKULw++oE5H|ieVJG(ups$0ZgDn#^E_^M``x!qY7Cn z*=dWj?R=@0#BNBd0x+vxP2l9G@TqJEJb5|npY=DtE{;Jp0aCZe0QF{>t6und9CrNV zjGQ;k_&Z2LvkTNKHAU`=u_rCbJ`p1UHI0MnALTaoAoEni4arPeNg<0qfrsT(Q*=5H zvBg2B9d<`q28ck@nixbRKpD3iRIA!J0YXL>SBSS>vGa}S(cb?na^#b|l|e{xqP=vb zv(N(YxYDu}I#ptNO!mz&l0Xv#sIpAV1jP{h=2(gP(Y1x)g=%(8U+H^C^cW+xwFifP z>zT>M@jjPutTTWaCLFuv_kLn(=9L8LLn2tJh@YO~Jwh^glHuS0EgXFrD|)!`pfBOO z3O?c!3(3yg@&my{=#BUb9)h?)SC$#qoj{%_tL_^;1VWf;b5YGJvJ|i*rn&ck*s0B- z%)3Cd!Mlu2yG*pGaRM-t-Gdemba-WDrDiKK%xYIAxnvED(j7Fi{<;$_c)ZSbTEjPi zx~F8o0}>ZtGdv6Cx34*t+N~&V#72aKBoU?OOu&%?=T?7#nd?{ePjkzs`xWz0Kc~>k zXCagu^(P+_6meAw3l+z~Jd#@=gUKR)+n7jU8Rggu%NsHmn^r5htw7CHI# z8J3w)X-SB5CWUphT`&=2IQ>l8>4*cIVkqa%^zuPB_n$K`noNti2jz+}9l!5QL>O&q zS|@=^3;}wJ58F9igqQ}Y&gx7iWJ40Zt#Sw_ITJib*GO{P`JY1Hvl(7 zfdg;(q1oPKr7Z}6XI>3RKEO+zH66_OH0#snJ&#-`tdkNusYh*OWIYBfK`x<%!u|JC zU8hAtjdF|l05V?HWw^eRon1+UHMmR)1Blo}i`A{ZV)jSnqX?g!<$XZ1o}L1xjpsl= z9L&HCIXgWzOJp}E&H!^QnV9;zoqNq7b14+_XU~jE@$I=t8A2uNffKMH@8=qSo_>G! zRZk!POpDm+tNOft<-qrS_;eu|p7(I^FAr>6BfXVUo(~eT^1P^;j6Nz@Z+CwVp_3yA zXDICms?tFa${(AYlw(|L;3%tLIDlz{IVWBXKE@45_k&9ay%Pdn7d0GLBXN9_yF)sn ztuo)v%z&!;$DXV2m3YUCZo}c1A7+J|^X8!$mfp&w69|W6P2CPl?5y&Ig-UvTxOw|} zjz)&i4x}KmT)$jdx~+pZ+#$5L|K~RRi-XAt;fqaxY|qgb0)VGl@gfDoLqh}nCDxHt5w!dIGB;-016h5yOE#OuK8Pw~= z@~lyN!U9mHEdM;csyxDt#0tMk&!ij{N!7%Te@G52cK#3uyQ?ZjkCQ5Hryp=h<#HIH z75ka1`~v(FAAMBfG`VyN6znFMbfo#y)AhemUlOW$I`3qh+K^@*Mw|CIOQ1K{<0>s~ z|6o>RVpqHQHtcp*3*a;ZzmD5Di5OQhyJs=VO{_<|$hJQX#;@1?ZF%Z0n@B^2y2*fi zl1wnS=Ugr!(^_-ba6KY3fnPW=YEDtGrZVM{aRxt*%H@cZS!JlRc2=uVHKJk~Daz{` zexs(FcPKZdc2bhgRqyr=+RT3rfGZhv0E~HsJZ0E*LT1ag0@f*= z`o48Ln#^wksf5}?6v8)2?{Ud=^Z@cXJ9Idf0=4MMU}iYa6#AmIwe>jXYmlpCe4OS6 za<&EaPA}Lca0WP&d}Y`K0A(5<44ID`QeHIs-XtN(PK_>n-N_~gqLu2!mS}bR?9m+1 zF3`^Z`5fMf%Uqji6xFstU5Qx&%t~Pq;`vc8`e{ESjjArGT^@e*d;O~`klTu4w*`i4 zbY$OtC~xGy9lCrp^%wrVriWo_Ie4VXCWAiDz(yVlTw_wfquHf!Ggo=Tjdbk$eR!D< zm?(KWLn?4t2iVTdbM{LjtZGBJ|74a%I&hioFkqec!y>|h5CH5q`3zy|HqXpVa~re-a9czLnkuk+A?~Six7B1nWCyriHmzV z)DsW=ruqZGNpq+WjTI~h&q9Kn`4&j4V+AoP zCJ=%klmlv;x7#Ntt}9ofairZTEqz> zv@IY4$2HU1d;WCJ0|lE$#s^Mry7d)`o+82d!*~6 zI8=ecUs>?e>1ft-^Gn3f~RQiG*v6dxH))2GX(}zOXNCGm(FHJ(D!* zA?&T0)Y|)A&6wz-yqdGanrn7C%lz(ZF3=A83;gB-R3|2FsXsybOFTzgbbK1VU zkNQaewcrxK@BItc{8UNu-8mV0%W~U?FJvzclBBy0X#&3PmzTs%vg-`M zp$5!mIYb$1qI(hFehnBJ9#L+aPgiei&Z*UN9(#vB8 zC}6LGUUpR;)Zpa{OH07s1ln1i6`0^Sr069G@K-JpK#!~nDbBUFr_BKS3s8p-^j+6X26xZs1sD#I~9RBM;_XyhZvygZ&w{d?!-)n7b>+rnx^kb z<`H+54->&^6&DxE5W)E(u47ff{2>Wg2 zy>for{x-Ztcczd3R%F$IV6zPCtqxsofCS`q!Sh1`MTsiFgpUvY{{5_qKscdfd^L!( zXrLF|{m>#HbKguC2*;(3Zob93lHzfG7USgargVoOYPiDMfa#Yr0CWxkQ%cxyIv)4; zhJgb6uLtZQx3Hr`w}e?`z2ClNzy1iAJi**qI*dYi$O0(y@N-wE97OOZpE_Rc>ccW2Mn4SA%LkAfR3YGOR)# zm0SBVeS5NcD7iI6=QWRb5!cWBYRX@P#GygJ8!&;8E@hzK4?8JvzIjVtf*y-X@|jT4 zg3lm=;G0@U)EAus%>c0yW$Sbb3G%6sN57`Y-XGJ~)WtF8VZnOLMps zILl1#j6n)^m=cq~eF;U3Y{}Dtt`xm>@#xSR?O|0n>3vlXB{uo!V#(ePXeIvu!`swJ zt^CW~>+pOiSev+KI#Y?JqrE)@h)_=R2h=`nh0-1XHuRO~MCF$Q(+lw6nowX-V50j` zW|PfqL()_46oq6_yl-fx+}zxzTR^C&cnl_8mhenFsn!~%qoU>~Pb%HWGJf&7gBYMH z-RpnqsoXx(>kHB8|j>$G>+?9*lv z_j06VbRVjT9E8z(siZ0bN%ZchWlMv)ed`FG8Kc`vF`zpZG@~fHyL0}D=*hoUz2ab< zXqxs!wLUg?jHNRxKn(uo1fEIZ9{mM;x)x8aU>z~DSt;FDWK8JX9CLRx^j-%Wg(?kK zE*L|F=ij@X1s&Gg*-&CxcPRR41P~cRW3o;lC;R2gmrymws^5TS-whdC>Q48yrt-i0 z@cun>$9W+;b z(CY8%H-7tVHT)5xCXBL%u4c0Ua*dkxzGSfu$gLCKOVaEInixj$!*HIXgv?)exmACs zu4kQRb(@qmK|6H>nq1P-HjyxMi{|Lcp-1H2(0=FMhhkWE$^8a=B&787B;=W29u<_}xZ9O|Ra3!5yRsR`bbFhS;7&|Lw?N{Yt9 zFLWeueOHwPZ_)vz41pgl*SgR+8_nz^4&J4VYp)LF~>c z)Q=uzHOC7u0w(VG`3yU${M~JS=-7i|ZntG;nXAJKeUv$s+`0$|KBa*5cwaqBvowom zex=@r?Gy|#;m(Jl7zk*w!NqDTE}^=lu^wSu`26FY7#RX8IT@KDn>=_N#>XG;#5pGN zu^J$7?7vIJ9m6DFw)lWzK=g+|V-qF^VXTZV!b$?F6cyjPciJ^tN8VF^p1k1lMVpCJ z85nbn%_GxIYnZfF`B>Oum{IRJtQkD#2j@(ETe$ZCo-5I#3(G zj;k?orU;D~bXH+>nfVMyIDDJpU)v9~aaqNNNWS7BTJ#R>f2+FmfR?#AUeT(7Db9~l zG~la%B-bJ>36}IcFQwUQFu)I}g3KesZfrsoJ?d7kE8x}V4zlY-098x`s6b5gL|EnK z=jT&(Yn}U(#jc&^f$}^(Bw$@Bj~{g&Y(X~!N{Gbw<~GC1oovAXFo4Q_qD6#dYJeFq ziWx4nheEo3te4BHekdpOf0r?l;5sIeHJq4bEjg_0Che;dLv{FIFU3a4pJ(2i z{*qalrlda1gw(y#sEIG?Fz%$%s(f-1o&ep!c|>QI2Je|R+n*&yyx`aTDd$wyT3z(m z&|903U)dCUXoNB1E8ZNC(4`TXfs$ri?X~7M+4x;+y}&~X$!r*q?=sy>*i?hinC2}w!+2;a4t`g(VUP?T9Z06<8ErfEM;q!ds?q7GNrVzO>0z7pHaH!K z=2|W;zV+zLn;a?W9)uwQHQ&J`td~+&UD|+p1S`6b2f1U6y z>={^|oGetMhXDYqyM~ zMt*n!A5f(-f%La&(@}e%M_>`lwTpA>eT{<*iqK>s2qVGF& z`Kb@A62p5jtUbH(m~q8M6u_Y&n<$V=lzxF41IPZqzQ8$}>ABmThiLc?OLg>XSsTOC zjDT8|RFzKvvjENqgXtdY+B~}g8Q@HGD#J@UH}2;WmxWFku^>itxz9kLx&W#m>Jr*W z4~R%i8b|NrtD!t5)QCQNA0Shq0tDjWCm~ge+_cY&WvuI#eF;rXMsDD8c7+Wd!)2C| zi;7x>ZN%nkfh1v4uNb*C)1t?Gz4)f9boYQZT zwLz*+OyS#NG9W{$b=;a>mH+YtOj6wH0L5O?h;GK8LW9SKbZc}nQz`xS+W-F@iZlt0%hyfsJ@m(+I|o!t#W*LQeAa+Z8V)Ag$8Zx+8P`4%&IRy; z=IRac?H|d(s|P^MkoV8K{qGVU6O`~)v$Yy)yi72AkELP|jbDa}EpL2x^KKL^l*V83 z%m*-lVLln~4vFjs_*Y`vbCrxc=I#dncW6eX{#(>gh2)9Ny{6!;=#*kyUdDX_#PYP9F zZU_*fIa|9p}{(k8qNZ9&U!JkJa2V? zs-mG95;x;T@~#YJcHEX{x3zQHw`KN+51&a@mI0ftOA?5qP+d;GI4=La^*umxjS5*C z*^OTZU|K^g14{&i#wfgD0RHfP0co_-9|iX^wdpjnQVlywN3KTVP>kl7th0-r*W#e- zp~%}ajKL_|-xkm~FNY=4a21mYl)T-z8>UE8^8xMym$K8(0q$r?hgWqa0X2%wU+^Ou zI}8k^OEX!kk6%_A_a*`!(+b=;dPz(0Y_jg-_8m8VhMlmH&Qj!~E-(^_iY7%U?5!eH zzGoDTJB>u4_dlsDFX`O8pG#7TOuZ7(kr}=PU4lT7)vI^m{A5V-^``I}1A5#Cw#&Up z(4U&Yd9ULey8!md4rs)rguV;$1Fwrwo>kge?M&dsyThDo^_~qHLur2|@F-U7`P?+CM8!WgnSa7+d*59~@b3tx}-?_bw za%vu8s%e(tPkxn)SHIs3yQ`@NytdGoGT;vo2g>!1fDYs&{b7GnLE$9FvBTf+<15BE zI7)GnK$oTUckNsIsM%fvPnKr?6VOa{J%7@!Z}RQ)JLyCL9e~aKse_pf~XeIYxI6?D|VgyGoy z>PC0tu$avFngc1G;zbWtlZemd^aC*K+h118&qQ5((|=#|V7IsU4MgHr{InXr!aA`t zhOJD>6#2XaxGbeV;0A;jG+5zYz8nGsI&rVVdc6{*VFZ^D$%nOmZh9BXjyZUCz=b$> z>@kfFuhGPA4GhJ;5h<}aOCOUdirb!%rpVl%Vr8o_i#rb{%XWg~ngMG?@1mqa0s5^ z1uvQht&f0sZ#BmCNrKKrJ*mS}SQqx(zxMk{-CABXI~)FSYaVEp_UiG8+2v`tH5j`E zd*hB>MvS394(^pM;*1w!2rZ+{OJQ>HJSs8lCZ89hHOkQ!FMTO78<9OuQry7u7~Luq zTtWq6b$Z7E-HqmxKjXIm(_KHuwK<)4s<#c4FVI{w4UpmzAQAO|>~mgNQvr6^?YPfE zfx=ILN-b3_U)NdO(6+5H5WkIr``&MV=xNz8PTB{^R#ASd2_P))m#3d;h*C{bZG5hl zavzn`U_yB0+>WEo{G^g%TU7d{;2SR(jZo z?-3^rQL4 zaX_f_SGWf|Cv)`;FZDnG_aPI|XR(;EI&^;VsqCk#%3tukBPsL_4Hp;p8@pqJrXK-W zNgrl!6jU+1KosBjrG~0)`h@U9n&N!$w|d=lR6#jN!oU);|BW92TQb1IdA8tr5I~Pq zN>P3B8a(|U$u)lreJ5=_9rLY432FhO(>v=Z2x5J>0l*w#A0G=2PfHLI^tXgzIM|mY z_4Px1{QRV*s`en)an;?nMqh&j?zyzHRj>HMrx{h&J~o(;Lan_F6fM9&Ki}tf>bBSxga5 zW7&qU&t#oS_Pd}UX?2zP7euiF!aUTw5hScj?fgy?dpiQEZ96(6+)E&wob1{V&wVKy z&d%SvT8mkO*{KqyQXS&i^tiupZ{8sPg!2v%0hQaG42DfUxT_)D&bt{AnIH_(a&Vs| zf-Q-?<-2Sef#0_c5{J&!LK3)9IPXGGRqR4tm7G(pn#Da{Q;JY5ZZktGWMMyxlTUXy zz<_THFz~LCB6aL__nbkPgTSrC*Df2)HZHx1@K>FeR*+y4Oju?2PG#aR=fL{FK%j{H zK8ep-xN5!AmsAZ1{Qh?Qumy)p6#R)s`A9cHa;|7!_{ z&$-v^-P7TK;!0^BITwJJ*X243Xk(l^6v)xH7b zDJ~7ON!mbsekO22lpX{nu>K|h!+=w~JV0R1P+yO0`@u5~FYw=4e+-m^gb*x(6G1n( zNqSa^SAuAKQ^5M!YwJ4V>G$!qR11#7JGUJ+tKXPq?d&}r9o$#C(aivby-KQA=UO>V zLX-i5HK%u;VJA9*X+}rpa&cV0*16+mJ{r$Jv~YpOCW+MtX}zTZ>-p9WU`5zl|Gq)Y zc@^V%=y^3$i68mjL{!x0wCwV14Clt?ecKhf ziig+lo}M!Y|Ab-h6*tN*e;PbW<{)LolS;YLC_bjX|ESw!T6fF0aoNzL#9>48onLpT z>&S1)H=7{*(znsEXZq58UiXtXJ#QIv-4hL&FimyAbWIQgxxZLn7uHtB#~hv?Pfs}> z6iE^@Ltj2zEo?Nbv(#y=wBf{>r=NATFY*4!k{(O*c3YP{%n~6{YSh7GANi)X72n|5 z9209n>*W=M8&W%-Q}fYqOlIQ2aFtYT-E?AG3C|Tn^Tyjm%JV#xS;Imr{S|&C^)=pu z^chUZTMT9hf*U-8VUXp`!aTmtROIaCc|E6MI^#Rx57TTS-F&6CiIYw{rbKRIR77eX z{*&642_r6xzKyngS^7o0owb_IO9Y5H7)>W)yxi%`J#+ccVP4z8Z+s(wM+$D&DAS*Q z1ncKdPc#;YO-h_NhMmD4jU+G_@Nw{s8Z?u!R!hbY`YOU6NYOv17Ppdb?+bN!5*8Nr zS=RFgrD&Wzmm4%aZ>Ye4^T!U`d6==I08LlgG_@@bQ^eTD6sPfBic!Y0E=~UKV$mJ* zgFU`^zH5BPsF6I;6gpPLn-Zh3`hBAZfu&0oFXI#DqSMFxevUaWT}5=Uj*IUtxMtpr zr2lq2%GkF8k(K55VR;AaK7+YNwPY ztDc8cGd$cguC6{-uHxKenj+aNdeOWkHp78w zsJ?ZB^{fiFzfjn?qo;SMotNW|mzUS-?F^;#py9AqFQF8I8{P;xIKfYvjMgow`YVzq zHFiG>7-JpNcg;A(t2p;2KR!A?o*pfjTT3=;PU!z+L1UsbD!XdPi3muM-YCCKO#JBS z)5cYwWzU9BUj4+oZ<0!|3GR{p9L=vcE^*yysbBp4i4#5%6JNBuM95lqfUmoS#3wmp zArpl4fC(p~fuRhycE_-0NQJk;3GP@>qVXE*5x^#7)psLa@oZ8_nYKnH-@ zTeLJjGTl*6gyYq?jJ!1O8q8i^`zl7b{Y%>%tCt(x!Gy>I zD+2kx*vs^tI&oaq&%p3xv(gu=vZpG7?&rxT8&maNh0DQRO2O;lIBJ3md%9xA4t=!m5b&EkhYq;vjCx=b^c8m6$=qRbMB_stScP{K?_g zcZ!x2IeI5t#tW=JVbZY6@+4T#{t6a6`wii2b7tRn=0Z~LKGtBG-t1_(H%hmUU+{&l zGl3|o)%jyHKRvx9B(B?81tIFNowwXxYnN4b_7gbF4m~%TvtC%ib z!elc+_HM#V+ihN%AY3=y#e{(L_PVV+dH4J@t2nLH;J2uV58`@Ot+~x}9 zGAj%@aY;uC(Zu7w@w)6f+#Zu(?rBcZ@;6TG5z99G+aYr$ha^sUmeBCqH%l!Q^J-(a z%!#yd{fsYsyta={X*BSx@GL5+$Ca>4>lg2+n{n?s?2KY`vja9SNS=!cG}&$Xdq-67 zW!)H)&FR`GuYLTXu{37jJO}ThK^Q42=I`$nA;|1A8^)E$?DU!jG``?MRlB^X(K0Kw zdcLf*Tt}>mn^Y1bc4s9yq&sBTFe#M2Zv#ix|NK663pNEA9VAGH)y9>7l?Ov0)g&5IWqCf-oSpvJ5_zN$ z^>VJ<8y$q3bSJ#HrP_+uJrHRe>);D6VR#=CR#-^OH3!Li={cM>iv0oIu~VIeT$r-D z*IwL3Iv-;E7ckpj1bz>h7&z6u4chZ*x$ zj+2&FJ29)(G+=72^M;URJU@D;PbBF}^FL<+qrFJdn{ztS39Fiy4M!4m<#bwKg0?tw zJw)z+&NMH$61#d|X%No&;FeDZz2be^mtF1aapzJ0W)>=eHcaZLtw3`1)1CZr%a)P~#T7*{Uprj7g_HvQe~Yg@II9peCzB%W|7 zy1j#m$%6vnq*N*E7sNu4gI;n_%D*ZjBO^ygkXZx%p`1;GtDw?ax^BJrP9L(k{}#&U zJICCopT{Os?^^iL7P4`xaHoZNH+&TxY=U2m-H=WODjSk82%0#o=PN?YBMs8`s|ceG z{_|a6WAXBqa=a3O>Ph!(osfT=gnakJJ5(06AK{KjQt@^~3z~;Anwjh2y^v_7?$LLL z!W=EpZhm>6j%3GklmC5nff$IUZ|~RO_IQUvUut{6>q!rZLNC)dBN>B#m=rz z_!-W7sJ}}j$?btJ^PW%t8}bCtYKj!E5#c0?*8rqpGHq#8h1Q3TRix?GAOCIc_V#;< z^1;tpX#nJIUT#ib#W}V|o#PuqdaR)I&3N+0G1V^Yul@g$iIa*0s3+`Y&MH1=i8|DC z?arrsh7k{LL)G{LNwmCsH?#s@3dk3aL?wVlZjs3W9S1Z6!l(>wA9=bbP0^`g| z8(eHm_!4IluPf)rlc=aOAZz6Y--cyBFTV0ClKrakUW{h6*4ss8V&-n4ARWoEl}s>* zxs^$^WbNP*-!G?SaajMqsB~`0;4oCB~m%9?w*l%`&{C*0dA*ei%0DEJlba)^By0M=aD8x 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 literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/release_specifics/images/chunking7.PNG b/documentation/hdf5-docs/release_specifics/images/chunking7.PNG new file mode 100644 index 0000000000000000000000000000000000000000..ce73cf82553d33dcb747cd27c281eeace27c8167 GIT binary patch literal 161937 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 literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/release_specifics/images/chunking8.PNG b/documentation/hdf5-docs/release_specifics/images/chunking8.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d60f8166112410ffc91114710a244450f9c573c3 GIT binary patch literal 4090 zcmeHK`8(9z`yVMI8cfzEvON)!JSNH#h6ZU6Qj#soh>VPNG}eiDLXv&SBqQsnL>Noi zBE~kB(AamzHg>~j_sz7$fWKxA zKb8=O6T$!hcZ`9qwz;p(V)}s#|6NGS1wLnQeju$Ze-xjh^+Mh}wGo_0T0x(tpAc+4f&SG!qIv|=Ua+F%ji?(fuA z7}EEclj=yDh_@8zYB4KHwLjI89c29f{ywk(y+;s0e_^Jnzt>^j%rE&<2hy;HI* zv9#0ir6f;*&LNBU9zF`7JAyM@q#iU8UdQ^U#DDtnlc}YF3IW;0ypG^taLPC72fP5L z9DUiRTtX?sm7y)Dr}y@Yu6%XNUahX8Xet}61vdBbBXs<%D&XUSn`U<($yI&YvmVqc zTq-r|`_%5dN0Z;K05A^$L;)&5n5n1fn)LVI!}H!1ZPv`vg8Zrq_$UH6a}L(Ys-lOQq}dK)JmYU)Ur`j zRdSCOe&uDg=38Nk^3GP5>!0zrYTb>I7zY(>O%hG!O)*&_;qk0vi(Uz9s;|~&95o@M zvn?WEPM_^pDND+!ZysEWi{wcfg(s0KrsKo5#{IPH(Yj_kXFO|S-J;uXW)Wy`kAwTa zQTbL#QL@OcY;0Sk5ko0)rxFnU&UE{V9Q_dgRJD`=duYwDVNb*0Y(`FBE(W8wqvl6Q zp~(nsJhm9eHMZKpTsggLFk+hxLUQxbXig7Xmg8Om&!(GnA`}MleQY+Rcg><>ZmIL` zMv4`b4bON=AX6*hGX#09#B&|)cONRQQT-}p*7*U<5=7z&P|Mibcg-Y!n)k469TW4C z@)i*hBsODD@bnJKLl{tS$)Nvimis72hOnJhM8gdw`ey1KwSg{#a(qHuKcG zxJWn0377F#X9$5bRFiD9FG1%!%88voCT(|V>rP%p5LdSxcOLBCJW$hfzRC2PNlhSk zYJ2l^q94WUdBwEfHhzC#cV#F`gPBe!uJIUX@jm#@zG@xWe#7AHf z9jO=R;<9Dt3?IZzh9v{Pr!{;CL34wgw!1q9r=2%fuMi#juV?+z+g{V7_u(=yc}={1 z!d0gy1jh~|5BXtYuaCBicHZU1+}ejA+GeCR&$h2{N_;4rMV+oJEYeO9#N2vZJ^0B3 zF^NtQz(fWe1&*zVeMH*U2+*n%UA{7J%TRkQd~)jI)RW=WY1I8bV_s8Zk*^dnCyp6m z_G$SY>K=A-&51#6wI2BL9MKJwgi6yVKuk%f`v@3!p4;D>S4D0GcbGMKL1<$x5`DxS z5&dW!-Gbpdxu$|uytF~NZKw(QCb7;3@K?%LggJcH6nEyfzQ==^(+`LD@{ix=ZMD>$ zgO}bGgb;1}A@2?m4**pBcR4jv!|H5Y?IkC0Cc zy2^^jAH(BWju3#46=etUvx7iKc!E7@PYd}`3yD0!3tGqtAWY{3Oo#OdSzwZyrg;2r zJC=xLW)&+Ag}xKTQ-YQbxrkdXmsmMvEtc3rA1DY*MIZP)T~y2dYN=N{TwO z6}bXO3RQ-c0i9l)3#H5#+BT)y;=pOZOT>Uk`{!Fcn@-g938vn2t#t@}bM0Nt-rfmV zpU=IAebAb8m5Z<1FBWaI9o`w~vM1NK>SU)K)ZcRgc^SdfUI;J6>PdKMvXK#|h5?~_ z8ifl`Du#~Sczyp$)3if@M@A#1<_&W-&?=vfDtB1us0es4*-8(0`Y6{aI@eaKxX@M* zb~0*sy4_3U_>ck*HRbBtPO#zATDmoo6d9%6Lmz>{T ze<@^y{P0zJA6nThfOe7al{UO_d{=~rmpT}SjO|L;IK9$XDoAb_d}F^7Vj3vlKTZ-l zRF1v+xt!`nXN70JZ)F$Fqc5DV8@pzeOBA5}>`HpeVpEfb!jHV-U~mgiSxEENZXyLreDrvfu$e2Qp=e$(O=mlYn^UIvXm zmEnjc%F@F|WDuN-`*{h}suMxXmfPln;W&M=x?WQ7Y@yoBuT*6%Ydb1s*HB=N%rv>c$FZIVJ2GS)zzptxe!jfs T(nf_ccK{4-80i+l>_Ywn9yR4k literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/release_specifics/release_specific_info.md b/documentation/hdf5-docs/release_specifics/release_specific_info.md index 2721e08c..bb4a5cef 100644 --- a/documentation/hdf5-docs/release_specifics/release_specific_info.md +++ b/documentation/hdf5-docs/release_specifics/release_specific_info.md @@ -18,7 +18,7 @@ redirect_from: ### [HDF5 1.10](hdf5_1_10.md) * [New Features](new_features_1_10.md) -* [Why should I care about the HDF5-1.10.2 release? (blog)]() +* [Why should I care about the HDF5-1.10.2 release? (blog)](https://www.hdfgroup.org/2018/04/why-should-i-care-about-the-hdf5-1-10-2-release/) * [Software Changes from Release to Release](sw_changes_1.10.md) * [Migrating from HDF5 1.8 to HDF5 1.10](Migrating_from_HDF5_1.8_to_HDF5_1.10.md) @@ -26,4 +26,4 @@ redirect_from: * New Features * [Software Changes from Release to Release](sw_changes_1.8.md) -### [API compatibility Macros in HDF5](api_comp_macros.md) +### [API Compatibility Macros in HDF5](api_comp_macros.md) From 256d44dc75237212b6977270543c288997c0f998 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Wed, 20 Mar 2024 23:37:40 -0400 Subject: [PATCH 04/44] Moved Chunking in HDF5 page up one level. --- .../{release_specifics => }/chunking_in_hdf5.md | 0 .../images/chunking1and2.PNG | Bin .../images/chunking3and4.PNG | Bin .../{release_specifics => }/images/chunking5.PNG | Bin .../{release_specifics => }/images/chunking6.PNG | Bin .../{release_specifics => }/images/chunking7.PNG | Bin .../{release_specifics => }/images/chunking8.PNG | Bin 7 files changed, 0 insertions(+), 0 deletions(-) rename documentation/hdf5-docs/{release_specifics => }/chunking_in_hdf5.md (100%) rename documentation/hdf5-docs/{release_specifics => }/images/chunking1and2.PNG (100%) rename documentation/hdf5-docs/{release_specifics => }/images/chunking3and4.PNG (100%) rename documentation/hdf5-docs/{release_specifics => }/images/chunking5.PNG (100%) rename documentation/hdf5-docs/{release_specifics => }/images/chunking6.PNG (100%) rename documentation/hdf5-docs/{release_specifics => }/images/chunking7.PNG (100%) rename documentation/hdf5-docs/{release_specifics => }/images/chunking8.PNG (100%) diff --git a/documentation/hdf5-docs/release_specifics/chunking_in_hdf5.md b/documentation/hdf5-docs/chunking_in_hdf5.md similarity index 100% rename from documentation/hdf5-docs/release_specifics/chunking_in_hdf5.md rename to documentation/hdf5-docs/chunking_in_hdf5.md diff --git a/documentation/hdf5-docs/release_specifics/images/chunking1and2.PNG b/documentation/hdf5-docs/images/chunking1and2.PNG similarity index 100% rename from documentation/hdf5-docs/release_specifics/images/chunking1and2.PNG rename to documentation/hdf5-docs/images/chunking1and2.PNG diff --git a/documentation/hdf5-docs/release_specifics/images/chunking3and4.PNG b/documentation/hdf5-docs/images/chunking3and4.PNG similarity index 100% rename from documentation/hdf5-docs/release_specifics/images/chunking3and4.PNG rename to documentation/hdf5-docs/images/chunking3and4.PNG diff --git a/documentation/hdf5-docs/release_specifics/images/chunking5.PNG b/documentation/hdf5-docs/images/chunking5.PNG similarity index 100% rename from documentation/hdf5-docs/release_specifics/images/chunking5.PNG rename to documentation/hdf5-docs/images/chunking5.PNG diff --git a/documentation/hdf5-docs/release_specifics/images/chunking6.PNG b/documentation/hdf5-docs/images/chunking6.PNG similarity index 100% rename from documentation/hdf5-docs/release_specifics/images/chunking6.PNG rename to documentation/hdf5-docs/images/chunking6.PNG diff --git a/documentation/hdf5-docs/release_specifics/images/chunking7.PNG b/documentation/hdf5-docs/images/chunking7.PNG similarity index 100% rename from documentation/hdf5-docs/release_specifics/images/chunking7.PNG rename to documentation/hdf5-docs/images/chunking7.PNG diff --git a/documentation/hdf5-docs/release_specifics/images/chunking8.PNG b/documentation/hdf5-docs/images/chunking8.PNG similarity index 100% rename from documentation/hdf5-docs/release_specifics/images/chunking8.PNG rename to documentation/hdf5-docs/images/chunking8.PNG From 671fe702a57b864721368bcdff959504bbe48a4e Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 21 Mar 2024 00:15:23 -0400 Subject: [PATCH 05/44] Clean up --- .../hdf5-docs/release_specific_info.md_worked | 27 ----------------- .../release_specific_info.md | 29 ------------------- 2 files changed, 56 deletions(-) delete mode 100644 documentation/hdf5-docs/release_specific_info.md_worked delete mode 100644 documentation/hdf5-docs/release_specifics/release_specific_info.md diff --git a/documentation/hdf5-docs/release_specific_info.md_worked b/documentation/hdf5-docs/release_specific_info.md_worked deleted file mode 100644 index 0804823e..00000000 --- a/documentation/hdf5-docs/release_specific_info.md_worked +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Release Specific Information -redirect_from: - - display/HDF5/Release+Specific+Information ---- - -### [HDF5 1.14](/documentation/hdf5-docs/release_specifics/hdf5_1_14.md) -* [New Features](/documentation/hdf5-docs/release_specifics/new_features_1_14.md) -* [Software Changes from Release to Release](/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md) -* [Migrating from HDF5 1.12 to HDF5 1.14](/documentation/hdf5-docs/release_specifics/Migrating_from_HDF5_1.12_to_HDF5_1.14.md) - -### [HDF5 1.12](/documentation/hdf5-docs/release_specifics/hdf5_1_12.md) -* [New Features](/documentation/hdf5-docs/release_specifics/new_features_1_12.md) -* [Software Changes from Release to Release](/documentation/hdf5-docs/release_specifics/sw_changes_1.12.md) -* [Migrating from HDF5 1.10 to HDF5 1.12](/documentation/hdf5-docs/release_specifics/Migrating_from_HDF5_1.10_to_HDF5_1.14.md) - -### [HDF5 1.10](/documentation/hdf5-docs/release_specifics/hdf5_1_10.md) -* [New Features](/documentation/hdf5-docs/release_specifics/new_features_1_10.md) -* [Why should I care about the HDF5-1.10.2 release? (blog)]() -* [Software Changes from Release to Release](/documentation/hdf5-docs/release_specifics/sw_changes_1.10.md) -* [Migrating from HDF5 1.8 to HDF5 1.10](/documentation/hdf5-docs/release_specifics/) - -### [HDF5 1.8](/documentation/hdf5-docs/release_specifics/hdf5_1_8.md) -* New Features -* [Software Changes from Release to Release](/documentation/hdf5-docs/release_specifics/sw_changes_1.8.md) - -### [API compatibility Macros in HDF5](documentation/hdf5-docs/release_specifics/api_comp_macros.md) diff --git a/documentation/hdf5-docs/release_specifics/release_specific_info.md b/documentation/hdf5-docs/release_specifics/release_specific_info.md deleted file mode 100644 index bb4a5cef..00000000 --- a/documentation/hdf5-docs/release_specifics/release_specific_info.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Release Specific Information -redirect_from: - - display/HDF5/Release+Specific+Information ---- - -# Release Specific Information - -### [HDF5 1.14](hdf5_1_14.md) -* [New Features](new_features_1_14.md) -* [Software Changes from Release to Release](sw_changes_1.14.md) -* [Migrating to HDF5 1.14 from previous releases](Migrating_from_HDF5_1.12_to_HDF5_1.14.md) - -### [HDF5 1.12](hdf5_1_12.md) -* [New Features](new_features_1_12.md) -* [Software Changes from Release to Release](sw_changes_1.12.md) -* [Migrating from HDF5 1.10 to HDF5 1.12](Migrating_from_HDF5_1.10_to_HDF5_1.12.md) - -### [HDF5 1.10](hdf5_1_10.md) -* [New Features](new_features_1_10.md) -* [Why should I care about the HDF5-1.10.2 release? (blog)](https://www.hdfgroup.org/2018/04/why-should-i-care-about-the-hdf5-1-10-2-release/) -* [Software Changes from Release to Release](sw_changes_1.10.md) -* [Migrating from HDF5 1.8 to HDF5 1.10](Migrating_from_HDF5_1.8_to_HDF5_1.10.md) - -### [HDF5 1.8](hdf5_1_8.md) -* New Features -* [Software Changes from Release to Release](sw_changes_1.8.md) - -### [API Compatibility Macros in HDF5](api_comp_macros.md) From 07f67b683b85c84205b6040fa8885be12280ca88 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 21 Mar 2024 00:24:32 -0400 Subject: [PATCH 06/44] Minor improvement --- documentation/hdf5-docs/chunking_in_hdf5.md | 13 ++++++------- documentation/hdf5-docs/images/chunking8.PNG | Bin 4090 -> 7627 bytes .../hdf5-docs/release_specific_info.md | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/documentation/hdf5-docs/chunking_in_hdf5.md b/documentation/hdf5-docs/chunking_in_hdf5.md index 98865b0d..c000bcf3 100644 --- a/documentation/hdf5-docs/chunking_in_hdf5.md +++ b/documentation/hdf5-docs/chunking_in_hdf5.md @@ -62,7 +62,7 @@ int main() { The chunks of a chunked dataset are split along logical boundaries in the dataset's representation as an array, not along boundaries in the serialized form. Suppose a dataset has a chunk size of 2x2. In this case, the first chunk would go from (0,0) to (2,2), the second from (0,2) to (2,4), and so on. By selecting the chunk size carefully, it is possible to fine tune I/O to maximize performance for any access pattern. Chunking is also required to use advanced features such as compression and dataset resizing. -![Contiguous and chunked datasets](chunking1and2.png) +![Contiguous and chunked datasets](images/chunking1and2.PNG) ## Data Storage Order To understand the effects of chunking on I/O performance it is necessary to understand the order in which data is actually stored on disk. When using the C interface, data elements are stored in "row-major" order, meaning that, for a 2- dimensional dataset, rows of data are stored in-order on the disk. This is equivalent to the storage order of C arrays in memory. @@ -70,7 +70,7 @@ To understand the effects of chunking on I/O performance it is necessary to unde Suppose we have a 10x10 contiguous dataset B. The first element stored on disk is B[0][0], the second B[0][1], the eleventh B[1][0], and so on. If we want to read the elements from B[2][3] to B[2][7], we have to read the elements in the 24th, 25th, 26th, 27th, and 28th positions. Since all of these positions are contiguous, or next to each other, this can be done in a single read operation: read 5 elements starting at the 24th position. This operation is illustrated in figure 3: the pink cells represent elements to be read and the solid line represents a read operation. Now suppose we want to read the elements in the column from B[3][2] to B[7][2]. In this case we must read the elements in the 33rd, 43rd, 53rd, 63rd, and 73rd positions. Since these positions are not contiguous, this must be done in 5 separate read operations. This operation is illustrated in figure 4: the solid lines again represent read operations, and the dotted lines represent seek operations. An alternative would be to perform a single large read operation , in this case 41 elements starting at the 33rd position. This is called a sieve buffer and is supported by HDF5 for contiguous datasets, but not for chunked datasets. By setting the chunk sizes correctly, it is possible to greatly exceed the performance of the sieve buffer scheme. -![Reading part of row and reading part of column from a contiguous dataset](chunking3and4.pgn) +![Reading part of row and reading part of column from a contiguous dataset](images/chunking3and4.PNG) Likewise, in higher dimensions, the last dimension specified is the fastest changing on disk. So if we have a four dimensional dataset A, then the first element on disk would be A[0][0][0][0], the second A[0][0][0][1], the third A[0][0][0][2], and so on. @@ -81,7 +81,7 @@ Chunking allows the user to modify the conditions for maximum performance by cha Using this strategy, we can greatly improve the performance of the operation shown in figure 4. If we create the dataset with a chunk size of 10x1, each column of the dataset will be stored separately and contiguously. The read of a partial column can then be done is a single operation. This is illustrated in figure 5, and the code to implement a similar operation is shown in example 2. For simplicity, example 2 implements writing to this dataset instead of reading from it. -![Reading part of a column from a chunked dataset](chunking5.png) +![Reading part of a column from a chunked dataset](images/chunking5.PNG) Example 2: Writing part of a column to a chunked dataset @@ -144,9 +144,9 @@ When a selection is read from a chunked dataset, the chunks containing the selec This process is illustrated in figures 6 and 7. In figure 6, the application requests a row of values, and the library responds by bringing the chunks containing that row into cache, and retrieving the values from cache. In figure 7, the application requests a different row that is covered by the same chunks, and the library retrieves the values directly from cache without touching the disk. -![Reading a row from a chunked dataset with the chunk cache enabled](chunking6.png) +![Reading a row from a chunked dataset with the chunk cache enabled](images/chunking6.PNG) -![Reading a row from a chunked dataset with the chunks already cached](chunking7.png) +![Reading a row from a chunked dataset with the chunks already cached](images/chunking7.PNG) In order to allow the chunks to be looked up quickly in cache, each chunk is assigned a unique hash value that is used to look up the chunk. The cache contains a simple array of pointers to chunks, which is called a hash table. A chunk's hash value is simply the index into the hash table of the pointer to that chunk. While the pointer at this location might instead point to a different chunk or to nothing at all, no other locations in the hash table can contain a pointer to the chunk in question. Therefore, the library only has to check this one location in the hash table to tell if a chunk is in cache or not. This also means that if two or more chunks share the same hash value, then only one of those chunks can be in the cache at the same time. When a chunk is brought into cache and another chunk with the same hash value is already in cache, the second chunk must be evicted first. Therefore it is very important to make sure that the size of the hash table, also called the nslots parameter in H5Pset\_cache and H5Pset\_chunk\_cache, is large enough to minimize the number of hash value collisions. @@ -162,8 +162,7 @@ For example, the algorithm prior to 1.10 simply incremented the index by one alo As of HDF5 1.10, the library uses a more complicated way to determine the chunk index. Each dimension gets a fixed number of bits for the number of chunks in that dimension. When creating the dataset, the library first determines the number of bits needed to encode the number of chunks in each dimension individually by using the log2 function. It then partitions the chunk index into bitfields, one for each dimension, where the size of each bitfield is as computed above. The fastest changing dimension is the least significant bit. To compute the chunk index for an individual chunk, for each dimension, the coordinates of that chunk in an array of chunks is placed into the corresponding bitfield. The 5 x 3 chunk example above needs 5 bits for its indices (as shown below, the 3 bits in blue are for the row, and the 2 bits in green are for the column): -0 0 0 0 0 - Row Column +![5 bits](chunking8.PNG) Therefore, the indices for the 5 x 3 chunks become like this: diff --git a/documentation/hdf5-docs/images/chunking8.PNG b/documentation/hdf5-docs/images/chunking8.PNG index d60f8166112410ffc91114710a244450f9c573c3..f21a46f4d9b4cbc93ac95964e893fe6abcc8c801 100644 GIT binary patch literal 7627 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 vVPNG}eiDLXv&SBqQsnL>Noi zBE~kB(AamzHg>~j_sz7$fWKxA zKb8=O6T$!hcZ`9qwz;p(V)}s#|6NGS1wLnQeju$Ze-xjh^+Mh}wGo_0T0x(tpAc+4f&SG!qIv|=Ua+F%ji?(fuA z7}EEclj=yDh_@8zYB4KHwLjI89c29f{ywk(y+;s0e_^Jnzt>^j%rE&<2hy;HI* zv9#0ir6f;*&LNBU9zF`7JAyM@q#iU8UdQ^U#DDtnlc}YF3IW;0ypG^taLPC72fP5L z9DUiRTtX?sm7y)Dr}y@Yu6%XNUahX8Xet}61vdBbBXs<%D&XUSn`U<($yI&YvmVqc zTq-r|`_%5dN0Z;K05A^$L;)&5n5n1fn)LVI!}H!1ZPv`vg8Zrq_$UH6a}L(Ys-lOQq}dK)JmYU)Ur`j zRdSCOe&uDg=38Nk^3GP5>!0zrYTb>I7zY(>O%hG!O)*&_;qk0vi(Uz9s;|~&95o@M zvn?WEPM_^pDND+!ZysEWi{wcfg(s0KrsKo5#{IPH(Yj_kXFO|S-J;uXW)Wy`kAwTa zQTbL#QL@OcY;0Sk5ko0)rxFnU&UE{V9Q_dgRJD`=duYwDVNb*0Y(`FBE(W8wqvl6Q zp~(nsJhm9eHMZKpTsggLFk+hxLUQxbXig7Xmg8Om&!(GnA`}MleQY+Rcg><>ZmIL` zMv4`b4bON=AX6*hGX#09#B&|)cONRQQT-}p*7*U<5=7z&P|Mibcg-Y!n)k469TW4C z@)i*hBsODD@bnJKLl{tS$)Nvimis72hOnJhM8gdw`ey1KwSg{#a(qHuKcG zxJWn0377F#X9$5bRFiD9FG1%!%88voCT(|V>rP%p5LdSxcOLBCJW$hfzRC2PNlhSk zYJ2l^q94WUdBwEfHhzC#cV#F`gPBe!uJIUX@jm#@zG@xWe#7AHf z9jO=R;<9Dt3?IZzh9v{Pr!{;CL34wgw!1q9r=2%fuMi#juV?+z+g{V7_u(=yc}={1 z!d0gy1jh~|5BXtYuaCBicHZU1+}ejA+GeCR&$h2{N_;4rMV+oJEYeO9#N2vZJ^0B3 zF^NtQz(fWe1&*zVeMH*U2+*n%UA{7J%TRkQd~)jI)RW=WY1I8bV_s8Zk*^dnCyp6m z_G$SY>K=A-&51#6wI2BL9MKJwgi6yVKuk%f`v@3!p4;D>S4D0GcbGMKL1<$x5`DxS z5&dW!-Gbpdxu$|uytF~NZKw(QCb7;3@K?%LggJcH6nEyfzQ==^(+`LD@{ix=ZMD>$ zgO}bGgb;1}A@2?m4**pBcR4jv!|H5Y?IkC0Cc zy2^^jAH(BWju3#46=etUvx7iKc!E7@PYd}`3yD0!3tGqtAWY{3Oo#OdSzwZyrg;2r zJC=xLW)&+Ag}xKTQ-YQbxrkdXmsmMvEtc3rA1DY*MIZP)T~y2dYN=N{TwO z6}bXO3RQ-c0i9l)3#H5#+BT)y;=pOZOT>Uk`{!Fcn@-g938vn2t#t@}bM0Nt-rfmV zpU=IAebAb8m5Z<1FBWaI9o`w~vM1NK>SU)K)ZcRgc^SdfUI;J6>PdKMvXK#|h5?~_ z8ifl`Du#~Sczyp$)3if@M@A#1<_&W-&?=vfDtB1us0es4*-8(0`Y6{aI@eaKxX@M* zb~0*sy4_3U_>ck*HRbBtPO#zATDmoo6d9%6Lmz>{T ze<@^y{P0zJA6nThfOe7al{UO_d{=~rmpT}SjO|L;IK9$XDoAb_d}F^7Vj3vlKTZ-l zRF1v+xt!`nXN70JZ)F$Fqc5DV8@pzeOBA5}>`HpeVpEfb!jHV-U~mgiSxEENZXyLreDrvfu$e2Qp=e$(O=mlYn^UIvXm zmEnjc%F@F|WDuN-`*{h}suMxXmfPln;W&M=x?WQ7Y@yoBuT*6%Ydb1s*HB=N%rv>c$FZIVJ2GS)zzptxe!jfs T(nf_ccK{4-80i+l>_Ywn9yR4k diff --git a/documentation/hdf5-docs/release_specific_info.md b/documentation/hdf5-docs/release_specific_info.md index 7de6acfd..45f7ae4c 100644 --- a/documentation/hdf5-docs/release_specific_info.md +++ b/documentation/hdf5-docs/release_specific_info.md @@ -26,4 +26,4 @@ redirect_from: * New Features * [Software Changes from Release to Release](release_specifics/sw_changes_1.8.md) -### [API compatibility Macros in HDF5](release_specifics/api_comp_macros.md) +### [API Compatibility Macros in HDF5](release_specifics/api_comp_macros.md) From cf91ef6dced9979eef08a95dd4268917703e8d3b Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 21 Mar 2024 01:14:52 -0400 Subject: [PATCH 07/44] Add page Chunking in HDF5 to the menu --- documentation/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/index.md b/documentation/index.md index d4f2bf26..772b02a2 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -17,6 +17,7 @@ Look for more content here soon. * [Registered Filter Plugins](/documentation/hdf5-docs/registered_filter_plugins.html) * [Registered Virtual File Drivers (VFDs)](/documentation/hdf5-docs/registered_virtual_file_drivers_vfds.html) * [Registered VOL Connectors](/documentation/hdf5-docs/registered_vol_connectors.html) +* [Chunking in HDF5](/documentation/hdf5-docs/chunking_in_HDF5.md) * [Release Specific Information](hdf5-docs/release_specific_info.md) - \*\*\* UNDER CONSTRUCTION \*\*\* Can't find what you're looking for? Visit [docs.hdfgroup.org](https://docs.hdfgroup.org/hdf5/v1_14/index.html) for many other documents that previously resided on the portal. From 33038efc9a2a2b0c592d13218232ea81e9b6f49e Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 21 Mar 2024 01:20:52 -0400 Subject: [PATCH 08/44] Fix typo --- documentation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/index.md b/documentation/index.md index 772b02a2..de0297bc 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -17,7 +17,7 @@ Look for more content here soon. * [Registered Filter Plugins](/documentation/hdf5-docs/registered_filter_plugins.html) * [Registered Virtual File Drivers (VFDs)](/documentation/hdf5-docs/registered_virtual_file_drivers_vfds.html) * [Registered VOL Connectors](/documentation/hdf5-docs/registered_vol_connectors.html) -* [Chunking in HDF5](/documentation/hdf5-docs/chunking_in_HDF5.md) +* [Chunking in HDF5](/documentation/hdf5-docs/chunking_in_hdf5.md) * [Release Specific Information](hdf5-docs/release_specific_info.md) - \*\*\* UNDER CONSTRUCTION \*\*\* Can't find what you're looking for? Visit [docs.hdfgroup.org](https://docs.hdfgroup.org/hdf5/v1_14/index.html) for many other documents that previously resided on the portal. From f5827f787fcc543df615ca6026da811db7f3d01c Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 21 Mar 2024 02:27:54 -0400 Subject: [PATCH 09/44] Add contents to Software Changes in 1.14 page --- .../release_specifics/sw_changes_1.14.md | 366 ++++++++++++++++++ 1 file changed, 366 insertions(+) diff --git a/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md b/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md index 7d48f806..1bd049c7 100644 --- a/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md +++ b/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md @@ -19,3 +19,369 @@ See [API Compatibility Macros](api_comp_macros.html) in HDF5 for details on usin * [Compatibility report for Release 1.14.0 versus Release 1.12.2](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.12.2-vs-hdf5-1.14.0-interface_compatibility_report.html) +This page provides information on the changes that a maintenance developer needs to be aware of between successive releases of HDF5, such as: + +New or changed features or tools +Syntax and behavioral changes in the existing application programming interface (the API) +Certain types of changes in configuration or build processes +Note that bug fixes and performance enhancements in the C library are automatically picked up by the C++, Fortran, and Java libraries. + +The following information is included below. + +* Release 1.14.4 versus Release 1.14.3 +* Release 1.14.3 versus Release 1.14.2 +* Release 1.14.2 versus Release 1.14.1 +* Release 1.14.1 versus Release 1.14.0 +* Release 1.14.1 versus Release 1.12.2 + +The release notes also list changes made to the library, but these notes tend to be more at a more detail-oriented level. The release notes may include new features, bugs fixed, supported configuration features, platforms on which the library has been tested, and known problems. The release note files are listed below and can be found at the top level of the HDF5 source code tree in the release\_docs directory. + +

Release 1.14.4 versus Release 1.14.3

+

Release 1.14.3 versus Release 1.14.2

+ +

Release 1.14.2 versus Release 1.14.1

+ +This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.14.1 to Release 1.14.2. + +### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros +Following are the new APIs introduced in HDF5-1.14.2. + +#### In the C Interface (main library) + +| Function | Description | +| ---------------------------------- | ------------------------------------------------------------ | +| H5FDread\_from\_selection | Performs a series of scalar reads. +| H5FDread\_vector\_from\_selection | Performs a vector read if vector reads are supported, or a series of scalar reads, otherwise. +| H5FDwrite\_from\_selection | Performs a series of scalar writes. +| H5FDwrite\_vector\_from\_selection | Performs a vector write if vector writes are supported, or a series of scalar writes, otherwise. +| H5Pget\_fapl\_ros3\_token | Returns session/security token of the ros3 file access property list +| H5Pset\_fapl\_ros3\_token | Modifies the file access property list to use the H5FD\_ROS3 driver + + +

Release 1.14.1 versus Release 1.14.0

+This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.14.0 to Release 1.14.1. + +### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros +Following are the new APIs introduced in HDF5-1.14.1. + +#### In the C Interface (main library) + +H5PGET\_MODIFY\_WRITE\_BUF +Retrieves the "modify write buffer" property +H5PGET\_NO\_SELECTION\_IO\_CAUSE Retrieves the cause for not performing selection or vector I/O on the last parallel I/O call +H5PGET\_SELECTION\_IO Retrieves the selection I/O mode +H5PSET\_MODIFY\_WRITE\_BUF Allows the library to modify the contents of the write buffer +H5PSET\_SELECTION\_IO Sets the selection I/O mode + + +In the Fortran Interface + +h5pget\_modify\_write\_buf\_f +Retrieves the "modify write buffer" property +h5pget\_selection\_io\_f Retrieves the selection I/O mode +h5pset\_modify\_write\_buf\_f Allows the library to modify the contents of the write buffer +h5pset\_selection\_io\_f Sets the selection I/O mode + + +

Release 1.14.0 versus Release 1.12.2

+HDF5 version 1.14.0 introduces the following new features: + +Asynchronous I/O operations +New tools h5dwalk and h5delete +Subfiling VFD +Onion VFD +Multi Dataset I/O +Users might find these names familiar already and that is because they were introduced in the experimental series 1.13. + +In addition, this version provides many new C APIs and other user-visible changes in behavior in the transition from HDF5 Release 1.12.2 to Release 1.14.0. HDF5 1.14.0 adds no new API calls that require use of the API Compatibility Macros for the main library. Some calls have been removed or have had their signature change, however. + +New and Changed Functions, Classes, Subroutines, Wrappers, and Macros +In the C Interface (main library) + +Following are the new APIs introduced in HDF5-1.14.0. + + + +H5A\_CLOSE\_ASYNC + +N + +Asynchronous version of H5Aclose + +H5A\_CREATE\_ASYNC + +N + +Asynchronous version of H5Acreate + +H5A\_CREATE\_BY\_NAME\_ASYNC + +N + +Asynchronous version of H5Acreate\_by\_name + +H5A\_EXISTS\_ASYNC + +N + +Asynchronous version of H5Aexists + +H5A\_EXISTS\_BY\_NAME\_ASYNC + +N + +Asynchronous version of H5Aexists\_by\_name + +H5A\_OPEN\_ASYNC + +N + +Asynchronous version of H5Aopen + +H5A\_OPEN\_BY\_IDX\_ASYNC + +N + +Asynchronous version of H5Aopen\_by\_idx + +H5A\_OPEN\_BY\_NAME\_ASYNC + +N + +Asynchronous version of H5Aopen\_by\_name + +H5A\_READ\_ASYNC + +N + +Asynchronous version of H5Aread + +H5A\_RENAME\_ASYNC + +N + +Asynchronous version of H5Arename + +H5A\_RENAME\_BY\_NAME\_ASYNC + +N + +Asynchronous version of H5Arename\_by\_name + +H5A\_WRITE\_ASYNC + +N + +Asynchronous version of H5Awrite + + +H5D\_CHUNK\_ITER + +N Iterate over all chunks of a chunked dataset +H5D\_CLOSE\_ASYNC + +N Asynchronous version of H5Dclose +H5D\_CREATE\_ASYNC + +N Asynchronous version of H5Dcreate +H5D\_GET\_SPACE\_ASYNC + +N Asynchronous version of H5Dget\_space +H5D\_OPEN\_ASYNC + +N Asynchronous version of H5Dopen +H5D\_READ\_ASYNC + +N Asynchronous version of H5Dread +H5D\_READ\_MULTI + +N Reads raw data from a set of datasets into the provided buffers +H5D\_READ\_MULTI\_ASYNC + +N Asynchronous version of H5Dread\_multi +H5D\_SET\_EXTENT\_ASYNC + +N Asynchronous version of H5Dset\_extent +H5D\_WRITE\_ASYNC + +N Asynchronous version of H5Dwrite +H5D\_WRITE\_MULTI + +N Writes raw data from a set buffers to a set of datasets +H5D\_WRITE\_MULTI\_ASYNC + +N Asynchronous version of H5Dwrite\_multi + +H5E\_APPEND\_STACK + +N Appends one error stack to another, optionally closing the source stack + +H5ES\_CANCEL + +N Attempt to cancel operations in an event set +H5ES\_CLOSE + +N Terminates access to an event set +H5ES\_CREATE + +N Creates an event set +H5ES\_FREE\_ERR\_INFO + +N Convenience routine to free an array of H5ES\_err\_info\_t structs +H5ES\_GET\_COUNT + +N Retrieves number of events in an event set +H5ES\_GET\_ERR\_COUNT + +N Retrieves the number of failed operations +H5ES\_GET\_ERR\_INFO + +N Retrieves information about failed operations +H5ES\_GET\_ERR\_STATUS + +N Checks for failed operations +H5ES\_GET\_OP\_COUNTER + +N Retrieves the accumulative operation counter for an event set +H5ES\_REGISTER\_COMPLETE\_FUNC + +N Registers a callback to invoke when an operation completes within an event set +H5ES\_REGISTER\_INSERT\_FUNC + +N Registers a callback to invoke when a new operation is inserted into +H5ES\_WAIT + +N Waits for operations in event set to complete + +H5FD\_ONION\_GET\_REVISION\_COUNT + +N Gets the number of revisions +H5P\_GET\_FAPL\_ONION + +N Gets the onion info from the file access property list +H5P\_SET\_FAPL\_ONION + +N Sets the onion info for the file access property list + +H5F\_CLOSE\_ASYNC + +N Asynchronous version of H5Fclose +H5F\_CREATE\_ASYNC + +N Asynchronous version of H5Fcreate +H5F\_FLUSH\_ASYNC + +N Asynchronous version of H5Fflush +H5F\_OPEN\_ASYNC + +N Asynchronous version of H5Fopen +H5F\_REOPEN\_ASYNC + +N Asynchronous version of H5Freopen + +H5G\_CLOSE\_ASYNC + +N Asynchronous version of H5Gclose +H5G\_CREATE\_ASYNC + +N Asynchronous version of H5Gcreate +H5G\_GET\_INFO\_ASYNC + +N Asynchronous version of H5Gget\_info +H5G\_GET\_INFO\_BY\_IDX\_ASYNC + +N Asynchronous version of H5Gget\_info\_by\_idx +H5G\_GET\_INFO\_BY\_NAME\_ASYNC + +N Asynchronous version of H5Gget\_info\_by\_name +H5G\_OPEN\_ASYNC + +N Asynchronous version of H5Gopen + +H5I\_REGISTER\_FUTURE + +N Registers a "future" object under a type and returns an ID for it + +H5L\_CREATE\_HARD\_ASYNC + +N Asynchronous version of H5Lcreate\_hard +H5L\_CREATE\_SOFT\_ASYNC + +N Asynchronous version of H5Lcreate\_soft +H5L\_DELETE\_ASYNC + +N Asynchronous version of H5Ldelete +H5L\_DELETE\_BY\_IDX\_ASYNC + +N Asynchronous version of H5Ldelete\_by\_idx +H5L\_EXISTS\_ASYNC + +N Asynchronous version of H5Lexists +H5L\_ITERATE\_ASYNC + +N Asynchronous version of H5Literate + +H5O\_CLOSE\_ASYNC + +N Asynchronous version of H5Oclose +H5O\_COPY\_ASYNC + +N Asynchronous version of H5Ocopy +H5O\_FLUSH\_ASYNC + +N Asynchronous version of H5Oflush +H5O\_GET\_INFO\_BY\_NAME\_ASYNC + +N Asynchronous version of H5Oget\_info\_by\_name +H5O\_OPEN\_ASYNC + +N Asynchronous version of H5Oopen +H5O\_OPEN\_BY\_IDX\_ASYNC + +N Asynchronous version of H5Oopen\_by\_idx +H5O\_REFRESH\_ASYNC + +N Asynchronous version of H5Orefresh + +H5P\_GET\_DRIVER\_CONFIG\_STR + +N Retrieves a string representation of the configuration for the driver set on the given FAPL +H5P\_GET\_VOL\_CAP\_FLAGS + +N Query the capability flags for the VOL connector that will be used with this file access property list (FAPL) +H5P\_SET\_DATASET\_IO\_HYPERSLAB\_SELECTION + +N Sets a hyperslab file selection for a dataset I/O operation +H5P\_SET\_DRIVER\_BY\_NAME + +N Sets a file driver according to a given driver name +H5P\_SET\_DRIVER\_BY\_VALUE + +N Sets a file driver according to a given driver value (ID) + +H5\_ATCLOSE + +N Registers a callback for the library to invoke when it's closing +H5\_IS\_LIBRARY\_TERMINATING + +N Checks whether the HDF5 library is closing + +H5R\_OPEN\_ATTR\_ASYNC + +N Asynchronous version of H5Ropen\_attr +H5R\_OPEN\_OBJECT\_ASYNC + +N Asynchronous version of H5Ropen\_object +H5R\_OPEN\_REGION\_ASYNC + +N Asynchronous version of H5Ropen\_region + +H5T\_CLOSE\_ASYNC + +N Asynchronous version of H5Tclose +H5T\_COMMIT\_ASYNC + +N Asynchronous version of H5Tcommit2 +H5T\_OPEN\_ASYNC + +N Asynchronous version of H5Topen2 From c62844cb86e417afad5da1071f2556121ce12034 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 21 Mar 2024 02:37:12 -0400 Subject: [PATCH 10/44] Update index --- documentation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/index.md b/documentation/index.md index de0297bc..62a96b39 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -17,7 +17,7 @@ Look for more content here soon. * [Registered Filter Plugins](/documentation/hdf5-docs/registered_filter_plugins.html) * [Registered Virtual File Drivers (VFDs)](/documentation/hdf5-docs/registered_virtual_file_drivers_vfds.html) * [Registered VOL Connectors](/documentation/hdf5-docs/registered_vol_connectors.html) -* [Chunking in HDF5](/documentation/hdf5-docs/chunking_in_hdf5.md) +* [Chunking in HDF5](hdf5-docs/chunking_in_hdf5.md) * [Release Specific Information](hdf5-docs/release_specific_info.md) - \*\*\* UNDER CONSTRUCTION \*\*\* Can't find what you're looking for? Visit [docs.hdfgroup.org](https://docs.hdfgroup.org/hdf5/v1_14/index.html) for many other documents that previously resided on the portal. From e77559fc03290df850e17fb3bc5cf5c9b1cf3d34 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 21 Mar 2024 02:42:02 -0400 Subject: [PATCH 11/44] Fix typo --- documentation/hdf5-docs/chunking_in_hdf5.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/hdf5-docs/chunking_in_hdf5.md b/documentation/hdf5-docs/chunking_in_hdf5.md index c000bcf3..77f137a3 100644 --- a/documentation/hdf5-docs/chunking_in_hdf5.md +++ b/documentation/hdf5-docs/chunking_in_hdf5.md @@ -162,7 +162,7 @@ For example, the algorithm prior to 1.10 simply incremented the index by one alo As of HDF5 1.10, the library uses a more complicated way to determine the chunk index. Each dimension gets a fixed number of bits for the number of chunks in that dimension. When creating the dataset, the library first determines the number of bits needed to encode the number of chunks in each dimension individually by using the log2 function. It then partitions the chunk index into bitfields, one for each dimension, where the size of each bitfield is as computed above. The fastest changing dimension is the least significant bit. To compute the chunk index for an individual chunk, for each dimension, the coordinates of that chunk in an array of chunks is placed into the corresponding bitfield. The 5 x 3 chunk example above needs 5 bits for its indices (as shown below, the 3 bits in blue are for the row, and the 2 bits in green are for the column): -![5 bits](chunking8.PNG) +![5 bits](images/chunking8.PNG) Therefore, the indices for the 5 x 3 chunks become like this: From 4f8b5a2ce7ecff4b0bb03ffd9c0e8bfb9b96c1bb Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Fri, 22 Mar 2024 22:53:48 -0400 Subject: [PATCH 12/44] Add documents of several HDF5 features --- documentation/hdf5-docs/feature_doc_list.md | 16 + .../feature_docs/cp_committed_dt_H5Ocopy.md | 92 ++ .../feature_docs/data_flow_pline_H5Dread.md | 330 +++++ .../hdf5-docs/feature_docs/file_image_ops.md | 1300 +++++++++++++++++ .../feature_docs/images/tutr-swmr1.png | Bin 0 -> 86410 bytes .../feature_docs/images/tutr-swmr2.png | Bin 0 -> 23079 bytes .../feature_docs/images/tutr-swmr3.png | Bin 0 -> 33333 bytes .../feature_docs/images/tutrvds-ex.png | Bin 0 -> 30484 bytes .../feature_docs/images/tutrvds-map.png | Bin 0 -> 36966 bytes .../feature_docs/images/tutrvds-multimgs.png | Bin 0 -> 278199 bytes .../feature_docs/images/tutrvds-snglimg.png | Bin 0 -> 243661 bytes .../hdf5-docs/feature_docs/intro_SWMR.md | 153 ++ .../hdf5-docs/feature_docs/intro_VDS.md | 108 ++ documentation/index.md | 1 + 14 files changed, 2000 insertions(+) create mode 100644 documentation/hdf5-docs/feature_doc_list.md create mode 100644 documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md create mode 100644 documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md create mode 100644 documentation/hdf5-docs/feature_docs/file_image_ops.md create mode 100644 documentation/hdf5-docs/feature_docs/images/tutr-swmr1.png create mode 100644 documentation/hdf5-docs/feature_docs/images/tutr-swmr2.png create mode 100644 documentation/hdf5-docs/feature_docs/images/tutr-swmr3.png create mode 100644 documentation/hdf5-docs/feature_docs/images/tutrvds-ex.png create mode 100644 documentation/hdf5-docs/feature_docs/images/tutrvds-map.png create mode 100644 documentation/hdf5-docs/feature_docs/images/tutrvds-multimgs.png create mode 100644 documentation/hdf5-docs/feature_docs/images/tutrvds-snglimg.png create mode 100644 documentation/hdf5-docs/feature_docs/intro_SWMR.md create mode 100644 documentation/hdf5-docs/feature_docs/intro_VDS.md diff --git a/documentation/hdf5-docs/feature_doc_list.md b/documentation/hdf5-docs/feature_doc_list.md new file mode 100644 index 00000000..35cce898 --- /dev/null +++ b/documentation/hdf5-docs/feature_doc_list.md @@ -0,0 +1,16 @@ +--- +title: HDF5 Features +redirect_from: + +--- + +# HDF5 Features + +### [HDF5 File Image Operations](feature_docs/file_image_ops.md) +### [Copying Committed Datatypes with H5Ocopy](feature_docs/cp_committed_dt_H5Ocopy.md) +### [HDF5 Data Flow Pipeline for H5Dread](feature_docs/data_flow_pline_H5Dread.md) +### [Introduction to Single-Writer_Multiple-Reader (SWMR)](feature_docs/intro_SWMR.md) +### [Introduction to the Virtual Dataset - VDS](feature_docs/intro_VDS.md) +### [New Features](feature_docs/feature.md) +### [New Features](feature_docs/feature.md) +### [New Features](feature_docs/feature.md) diff --git a/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md b/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md new file mode 100644 index 00000000..ba5a224b --- /dev/null +++ b/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md @@ -0,0 +1,92 @@ +--- +title: Copying Committed Datatypes with H5Ocopy +redirect_from: + +--- + +# Copying Committed Datatypes with H5Ocopy + +HDF5 Release 1.8.9 May 2012 + +Contents +1. Copying Committed Datatypes with H5Ocopy +Committed datatypes can be a powerful feature in HDF5. They can be used to share a single datatype description among multiple datasets, to save space or ensure that the datatypes are truly identical, and to assign a name to that datatype within the HDF5 group structure. The object copy API, H5Ocopy, can be used to copy HDF5 objects from one file to another, including committed datatypes and objects that use them. However, problems can occur when a dataset using a committed datatype or an object with an attribute that uses a committed datatype is copied to another file with H5Ocopy. + +When copying a dataset that uses a committed datatype or an object with an attribute that uses a committed datatype between files, the library by default does not look for a matching committed datatype in the destination file. The library creates a new committed datatype in the destination file without any links to it (an anonymous committed datatype) and then links the dataset to the anonymous committed datatype. This means that, when copying multiple datasets in separate calls to H5Ocopy, a new committed datatype is created for each H5Ocopy call. While it is possible to have all of the copied datasets share the same committed datatype by copying them in a single call to H5Ocopy, this is not always attainable. + +For example, imagine that a user has an application that automatically creates many data files, each with many datasets that all use a single committed datatype. At the end of a project, the user wants to merge all of these files into a single file. The HDF5 Library can have all of the datasets in the combined file use the same committed datatype, but the default behavior of the library is to create an anonymous committed datatype for each dataset. + +To make sure that shared committed datatypes in the source are shared in the copy, use the H5Pset_copy_object property list API routine to set the H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG flag. When this flag is set and H5Ocopy encounters an object or attribute that uses a committed datatype, H5Ocopy will search for a matching committed datatype in the destination file. If a matching committed datatype is found, then it will be used by the copied dataset or attribute. The next few paragraphs describe in more detail the process that H5Ocopy goes through. + +When the H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG flag is set, H5Ocopy will search the destination file for committed datatypes and build a temporary list in memory of all the committed datatypes it finds. Then, whenever H5Ocopy encounters a dataset that uses a committed datatype or an object with an attribute that uses a committed datatype in the source, it will check that list to see if it contains a datatype equal to the source datatype. If H5Ocopy finds an equal datatype, it will modify the copied object or attribute to use the found committed datatype as its datatype. H5Ocopy will then update the list if a new committed datatype is created in the destination file as a result of the copy. When later datasets and attributes using committed datatypes are encountered, the library will again check to see if the list contains a matching datatype. + +To determine if two committed datatypes are equal, the library will compare their descriptions in a manner similar to H5Tequal. In addition, if either committed datatype has one or more attributes, then all attributes must be present in both committed datatypes, and the attributes must all be identical. Each attribute’s datatype description, dataspace, and raw data must be identical. However, if an attribute uses a committed datatype, then the attributes of the attribute’s committed datatype will not be compared. + +When H5Ocopy encounters a committed datatype object in the source file, it will similarly search for a matching committed datatype in the destination file. If a match is found, the library will create a hard link in the destination file to the found datatype. If a match is not found, the library will copy the committed datatype normally and add it to the temporary list of committed datatypes in the destination file. + +By default, H5Ocopy will search the entire destination file for a matching committed datatype. It is possible to focus where H5Ocopy will search. This focusing should result in a faster search. If there are locations in the destination file where a matching committed datatype might be found, then those locations can be specified with the H5Padd_merge_committed_dtype_path property. + +The example below shows how to enable the feature described above for use with H5Ocopy. + +Example 1. Setting the object copy property list + +hid_t ocpypl_id; +ocpypl_id = H5Pcreate(H5P_OBJECT_COPY); +status = H5Pset_copy_object(ocpypl_id, H5O_COPY_MERGE_COMMITTED_DT_FLAG); + status = H5Ocopy(file1_id, src_name, file2_id, dst_name, ocpypl_id, H5P_DEFAULT); +1.1. Callback Function +If no matching datatype is found in the locations specified by the call to H5Padd_merge_committed_dtype_path, then H5Ocopy will by default search the entire destination file. In some cases, this may not be desirable. For instance, the user may expect the datatype to always have a match in the specified locations and may wish to return an error if a match is not found. The user may also have a very large file for which the full search incurs a substantial performance penalty. In this instance, the user may wish to log these events so that other datatypes can be added with H5Padd_merge_committed_dtype_path, or the user may wish to abort the search and copy the datatype normally. + +To support these use cases, the functions H5Pset_mcdt_search_cb and H5Pget_mcdt_search_cb have been added. These functions allow the user to define a callback function that will be called every time the list of paths added by H5Padd_merge_committed_dtype_path has been exhausted but before beginning the full search of the file. The prototype for the callback function is defined by H5O_mcdt_search_cb_t. The only argument to the callback function is a user supplied user data pointer, and the return value is an enum, defined by H5O_mndt_search_ret_t, which tells the library to either continue with the full file search, abort the search and copy the datatype normally (create a new committed datatype in the destination file), or return an error. + +1.2. Function Summary +Functions used in committed datatype copying operations are listed below. + +Function Listing 1. Committed datatype copying related functions + +C Function +Fortran + +Purpose +H5Ocopy +H5ocopy_f + +Allows an application to copy an object within an HDF5 file or to another HDF5 file. +H5Pset_copy_object +h5pset_copy_object_f + +Allows an application to set properties to be used when an object is copied. +H5Padd_merge_committed_dtype_path +(none) + +Allows an application to add a path to the list of paths that will be searched in the destination file for a matching committed datatype. +H5Pfree_merge_committed_dtype_paths +(none) + +Allows an application to clear the list of paths stored in the object copy property list ocpypl_id. +H5Pset_mcdt_search_cb +(none) + +Allows an application to set the callback function that H5Ocopy will invoke before searching the entire destination file for a matching committed datatype. +H5Pget_mcdt_search_cb +(none) + +Allows an application to retrieve the callback function from the specified object copy property list. +H5O_mcdt_search_cb_t +(none) + +Definition of the callback function set by H5Pset_mcdt_search_cb. Provides the mechanism by which a user application may set an action for H5Ocopy to take after checking all suggested paths for a matching committed datatype but before starting the global search of the destination file. +1.3. Resources +See the following for more information. + +See the “HDF5 Datatypes” chapter in the HDF5 User’s Guide. + +See these entries in the HDF5 Reference Manual: + +H5Ocopy +H5Pset_copy_object +H5Padd_merge_committed_dtype_path +H5Pfree_merge_committed_dtype_paths +H5Pset_mcdt_search_cb +H5Pget_mcdt_search_cb + diff --git a/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md b/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md new file mode 100644 index 00000000..d105d3b0 --- /dev/null +++ b/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md @@ -0,0 +1,330 @@ +--- +title: HDF5 Data Flow Pipeline for H5Dread +redirect_from: + +--- + +# HDF5 Data Flow Pipeline for H5Dread + +This document describes the HDF5 library’s data movement and processing activities when H5Dread is called for a dataset with chunked storage. The document provides an overview of how memory management, filter operations, datatype conversions, and value transformations occur as data is transferred from an HDF5 file to an application’s memory buffer. The intended audience includes application HDF5 developers who would like a better understanding of HDF5’s handling of filters, datatype conversions, and value transformations, or who are concerned with performance tuning and memory management, in the context of H5Dread. + +Contents +1. Introduction +2. Examples +2.1 Data to be read +2.2 Example A +2.3 Example B +3. Data Flow Pipeline +3.1 Step 1: Read chunk from disk +3.2 Step 2: Reverse filter(s) +3.2.1 Compute and verify checksum +3.2.2 Uncompress data +3.3 Step 3: Put chunk in cache or heap +3.4 Step 4: Allocate temporary buffer for datatype conversion / value transformation +3.5 Step 5: Copy array elements to temporary buffer +3.6 Step 6: Perform datatype conversion +3.7 Step 7: Perform value transformation +3.8 Step 8: Copy elements from temporary buffer to application’s buffer +3.9 Step 9: Scatter elements from chunk to application’s buffer +3.10 Step 10: Free memory +3.11 Step 11: Return from H5Dread +4. H5Dread Activity Diagram +Acknowledgements +Revision History +Suggested Revisions +1. Introduction +This document outlines how data stored in the chunked storage format moves from an HDF5 file on disk into an application’s memory buffer when H5Dread is called. + +Section 2 introduces two slightly different H5Dread examples that incorporate filters, datatype conversions, and value transformations. Section 3 follows the path of data from disk to application memory, giving a step-by-step explanation of the data flow pipeline for the two examples. + +Sections 2 and 3 include code samples, references to HDF5 APIs, and notes about default buffer sizes that are not crucial to the description of pipeline data movement and processing activities. This information, which appears in highlighted boxes, is included to help readers connect the pipeline description to options provided by the HDF5 library for controlling behavior and tuning performance during the H5Dread call. Note that the code samples do not include error checking. + +A UML activity diagram that summarizes the data movement and processing steps in the pipeline is presented in Section 4. The activity diagram gives a high-level view of the operations that are examined in detail in Section 3. Some readers may prefer to review Section 4 prior to reading Sections 2 and 3. + +2. Examples +Two example H5Dread requests are described in this section. Both examples read the same data from an HDF5 file stored on disk. The data and buffer sizes used in the examples are unrealistically small, but serve the purpose of illustrating the pipeline. + +In the first example, the data read completely fills the application’s memory buffer, overwriting all data that is initially in the buffer. In the second example, the application’s buffer is larger than the data read, so only some of the data in the buffer is overwritten. The first example applies a value transformation to the data being read from disk, while the second does not. + +In both examples, the file datatype is different than the memory datatype, so a datatype conversion is done as part of the read operation. + +2.1 Data to be read +An HDF5 file stored on disk has a dataset, D. In both of the examples, a region of dataset D will be read. The desired region is 4 elements x 4 elements, with the first element to be read at index <1,1>. + +HDF5 dataset D has these characteristics: + +Number of dimensions: 2 +Dimension sizes: 32 x 64 +Chunked storage with chunks of size 4x4 +32-‐bit integer atomic datatype +Little-­endian representation +Compressed with the DEFLATE filter +Fletcher 32 checksum filter applied +Region of Interest: + +Number of dimensions: 2 +Dimension sizes: 4 x 4 +Offset in dataset: <1,1> +Therefore: + +Total cells in array equals: 32 * 64 = 2048 +Size of array (uncompressed) is: 2048 * 4 bytes = 8192 bytes +Each chunk has uncompressed size of: 4*4*4 = 64 bytes +There are 128 chunks in the file +Total cells in region of interest equals: 4 * 4 = 16 +Size of region of interest (uncompressed) is : 16 * 4 bytes = 64 bytes +Hyperslab selection for source + +A hyperslab selection is used to specify the region from dataset D that will be transferred with the H5Dread call. A 4 x 4 array of elements, positioned at <1,1> will be read. The C code to do the selection of the hyperslab in the file dataspace is shown here: + +/* get the file dataspace */ +space_src = H5Dget_space(dataset); + +/* define hyperslab in the dataset */ +start_src[0] = 1; start_src[1] = 1; +count_src[0] = 4; count_src[1] = 4; +status = H5Sselect_hyperslab(space_src, H5S_SELECT_SET, start_src, NULL, + + +Figure 1 shows a conceptual representation of dataset D with uncompressed data. The desired region and the chunks that contain it are shown in green and yellow, respectively. + + +Figure 1: Conceptual representation of dataset D + + +In Figure 1, the chunks and region of interest are represented by the yellow and green areas of the diagram. Figure 2 shows an enlarged view of the region and chunks, with labels added. The dashed lines delineate individual elements in the dataset. Elements in the region of interest have been labeled so they can be traced through the pipeline process. + + +Figure 2: Conceptual representation of region and chunks in dataset D + +Figure 3 shows a more accurate depiction of the chunks and elements in the region as they could be laid out on disk. Note that data in each chunk is stored contiguously on disk, and that the chunks have unequal sizes due to compression of the data. + + +Figure 3: Conceptual representation of chunks and region elements on disk + +2.2 Example A +In the first example, the application’s memory buffer is a 4 x 4 array. Every element in the array will be filled with elements read from dataset D, so no hyperslab selection is needed for the destination dataspace. + +The application’s memory buffer characteristics are: + +Number of dimensions: 2 +Dimension sizes: 4 x 4 +64­‐bit integer atomic datatype +Big‐endian representation +Therefore: + +Total cells in array equals: 4 * 4 = 16 +Size of array is: 16 * 8 bytes = 128 bytes +In this example, the application includes a value transformation in the data transfer property list for the H5Dread call. The transformation specifies that the integer value “2” should be added to each element in the region of interest before it is copied to the application’s memory buffer. + +Example A: H5Dread setup and call + +The application’s memory buffer and dataspace are both 4 x 4. A value transformation is used to add “2” to each element that is read. The C code to allocate the memory buffer, define the memory dataspace, specify the value transformation operation, and make the read call is shown here: + +/* memory buffer */ +int destA[4][4]; + + ... + +/* define memory dataspace */ +dims_destA[0] = 4; dims_destA[1] = 4; +space_destA = H5Screate_simple(2,dims_destA,NULL); + +/* create data transfer property list and specify value transformation */ +dxpl_id_vtrans = H5Pcreate(H5P_DATASET_XFER); +H5Pset_data_transform(dxpl_id_vtrans,“x+2”); + +/* call H5Dread */ +status = H5Dread (dataset, H5T_NATIVE_INT, space_destA, space_src, + dxpl_id_vtrans, destA ) +2.3 Example B +In the second example, the application’s memory buffer is2 ax 16 array. The 16 elements read will be distributed non-sequentially in the application’s buffer, as described by a hyperslab selection in the memory dataspace parameter. + +The application memory buffer characteristics are: + +Number of dimensions: 2 +Dimension sizes: 2 x 16 +64 bit Integer atomic datatype +Big­‐endian representation +Therefore: + +Total cells in array equals: 2 * 16 = 32 +Size of array is: 32 * 8 bytes = 256 bytes +No value transformation is applied in this example. + +Example B: H5Dread setup and call + +The application’s memory buffer and dataspace are both 2 x 16. A hyperslab selection on the memory dataspace specifies the 16 elements that will be updated by the read. The C code to allocate the memory buffer, define the dataspace, select the hyperslab, and make the read call is shown here: + +/* memory buffer */ +int destB[2][16]; + +... + +/* define memory dataspace */ +dims_destB[0] = 2; dims_destB[1] = 16; +space_destB = H5Screate_simple(2,dims_destB,NULL); + +/* define memory hyperslab selection */ +start_destB[0] = 0; start_destB[1] = 0; +block_destB[0] = 2; block_destB[1] = 1; +count_destB[0] = 1; count_destB[1] = 8; +stride_destB[0] = 2; stride_destB[1] = 2; +status = H5Sselect_hyperslab(space_destB, H5S_SELECT_SET, start_destB, + stride_destB, count_destB, block_destB); + +/* call H5Dread */ +status = H5Dread (dataset, H5T_NATIVE_INT, space_destB, space_src, H5P_DEFAULT, destB +3. Data Flow Pipeline +The HDF5 library performs a series of steps when H5Dread is called. For datasets with chunk storage, each chunk that contains data to be read is individually processed. After all of the chunks have been read and processed, the library returns from the H5Dread call. + +The steps in the data flow processing pipeline for the H5Dread call are detailed here, using the examples outlined in the previous section to illustrate the process. + +3.1 Step 1: Read chunk from disk +The HDF5 library reads a chunk of the dataset that contains data in the region of interest from disk. For the given examples, chunk A would be read the first time this step executes. Steps 2‐9 are applied to each chunk. + +If one or more filters were applied when the dataset was written, as they were in the given examples, processing continues with Step 2. Otherwise, processing continues with Step 3. + +3.2 Step 2: Reverse filter(s) +Filters in HDF5 + +The HDF5 library allows applications to specify filters to apply when a dataset is written to an HDF5 file via the H5Pset_filter call. These filters perform operations such as compression, encryption, a checksum computation. Each filter operation applied when a dataset is written must be “reversed” when the dataset is read. For instance, if a dataset was compressed when written, it must be uncompressed when read. + +If multiple filters are specified for the write, the application controls the order in which the filter operations are applied to the dataset. The read operation reverses the filter operations in the opposite order to the one used when the dataset was written. That is, the last filter applied when writing is the first filter reversed when reading, and so on. + +In dataset D, two filters were applied when the data was written. The DEFLATE compression filter was applied first, followed by the Fletcher 32 checksum filters. The last filter applied when the dataset was written, the checksum filter, is reversed first in the H5Dread processing pipeline. + +3.2.1 Compute and verify checksum +Using memory in the application’s memory space (heap) that is managed by the HDF5 library, the HDF5 library computes the checksum for the current chunk and compares it to the saved value. If there is a checksum mismatch and error detection is enabled, the H5Dread call will return an error at this point. Otherwise, processing continues. + +Checksum error detection + + Checksum error detection is enabled by default. H5Pset_edc_check can be used to disable checksum error detection + +3.2.2 Uncompress data +Again using memory in the application’s memory space (heap) that is managed by the HDF5 library, the DEFLATE filter is reversed and the current chunk is uncompressed. + +3.3 Step 3: Put chunk in cache or heap +HDF5 chunk cache + +Every HDF5 dataset with the chunked storage format has an HDF5 chunk cache associated with it. The HDF5 chunk cache for the dataset is allocated from the application’s memory and managed by the HDF5 library. As its name suggests, the cache remains allocated across multiple calls, and is used to provide performance optimizations in accessing data. + +The default size of each HDF5 chunk cache is 1 MB in HDF5 Releases 1.6.x and 1.8.x. H5Pset_chunk_cache, introduced in Release 1.8.3, allows control of the chunk cache size on a per‐dataset basis. + +If there is sufficient space in dataset D’s chunk cache, the data for the current chunk is stored there. Otherwise, it is temporarily stored on the heap in memory managed by the HDF5 library. Data in the chunk cache always has the disk datatype representation and is always in the “filters reversed” form. + +In the given examples, the uncompressed data for the current chunk will be stored. A chunk cache of at least 64 bytes is needed to hold a single chunk of uncompressed data for dataset D. + + +Figure 4: Steps 1-3 of data flow pipeline + +Steps 1, 2, and 3 are represented graphically in Figure 4. At this point, all filters have been reversed (checksum and decompression in the given examples), and the datatype matches its representation in the file (32-bit little­‐endian integer in this case). + +If no datatype conversion is needed and no value transformation is specified, processing continues with Step 9 for each chunk. + +Example A involves datatype conversion and value transformation, and Example B involves datatype conversion, so Steps 4­‐8 are performed for both examples. + +3.4 Step 4: Allocate temporary buffer for datatype conversion / value transformation +The first time the HDF5 library is ready to perform a datatype conversion and/or value transformation for a given H5Dread call, HDF5 allocates a temporary buffer in the application’s memory to perform the necessary operations on the array elements in the region of interest. + +The number of bytes needed to process one dataset array element depends on the “larger” of the file and memory datatypes. In the given examples, the memory datatype (64 bit integer) is larger than the disk datatype (32 bit integer). Therefore, it will take 8 bytes (64 bits) in the temporary buffer to process one dataset array element. + +For the purpose of explanation, assume the temporary buffer is 64 bytes. In the given examples, up to eight elements of the dataset (64 bytes in buffer/ 8 bytes per element) can be resident in the temporary buffer at any given time. + +Temporary buffer size + +The default size of the temporary buffer used for datatype conversion and/or value transformation is 1 MB in Release 1.8.2. The size can be controlled with H5Pset_buffer. + +The following steps are taken for each chunk. + +3.5 Step 5: Copy array elements to temporary buffer +Unprocessed elements in the region of interest are gathered from the chunk cache (or the HDF5-managed memory on the heap if the chunk cache was too small) into the temporary buffer. The size of the temporary buffer determines the maximum number of elements that can be gathered at one time. + +Considering chunk A in the examples, eight of the nine elements that are of interest will fit into the temporary buffer. Figure 5 depicts the temporary buffer at this stage of the pipeline. + + +Figure 5: Temporary buffer with first eight elements in region +3.6 Step 6: Perform datatype conversion +If the memory representation is not the same as the disk representation, datatype conversion is performed by the HDF5 library on the values in the temporary buffer. + +In the examples, the values will be converted from 32-bit little-endian integers into 64­‐bit big­‐endian integers. Figure 6 illustrates the contents of the temporary buffer after the datatype conversion. + + +Figure 6: Temporary buffer with first eight elements after datatype conversion + +3.7 Step 7: Perform value transformation +If the property list used in H5Dread includes a data transformation, as it does in Example A, the algebraic operation specified in the transformation is applied to each element in the temporary buffer by the HDF library. + +In Example A, each of the eight 64­‐bit big­‐endian integers in the temporary buffer will have 2 added to it. For instance, if element c in the array had the value 65 in the HDF5 file on disk, it will have the value 67 in the temporary buffer after Step 7 completes. + +3.8 Step 8: Copy elements from temporary buffer to application’s buffer +The HDF library scatters elements from the temporary buffer into the application’s memory buffer, using offsets computed from the hyperslab selections specified in the dataspace parameters of the H5Dread call. + +Figure 7 represents the contents of the application’s memory buffer for Example A after this step completes the first time. The elements in the application’s memory buffer have been converted into the memory datatype and have had the value transformation applied. + + +Figure 7: Application's memory buffer after first pass through Step 8 for Example A +Figure 8 represents the contents of the application’s memory buffer for Example B after Step 8 completes the first time. The elements in the application’s memory buffer have been converted into the memory datatype. No value transformation is applied in Example B. + + +Figure 8: Application's memory buffer after first pass through step 8 in Example B + +Steps 5-8 are repeated until all elements in the region of interest for the current chunk have been processed and copied into the application’s memory buffer. + +Steps 1-8 are repeated until all chunks containing data in the region of interest have been processed and all requested data has been copied into the application’s memory buffer. + +After all requested data in the region of interest has been processed and copied into the application’s memory buffer, the HDF5 library continues with Step 10. + +3.9 Step 9: Scatter elements from chunk to application’s buffer +This step is not performed for either Example A or Example B. + +If no datatype conversion is needed and no value transformation is specified, this step follows Step 3. In this step, the HDF5 library copies the elements in the region of interest for the current chunk from the memory it manages (chunk cache or heap) into the application’s memory buffer. This gather/scatter operation is based on the chunk and application buffer offsets the library computes from the hyperslab selections specified in the file and memory dataspace parameters used in the H5Dread call. + +Steps 1-3 and 9 are repeated until all chunks containing data in the region of interest have been processed and all requested data has been copied into the application’s memory buffer. + +After all requested data in the region of interest has been processed and copied into the application’s memory buffer, the HDF5 library continues with Step 10. + +3.10 Step 10: Free memory +The HDF5 library frees the memory it allocated in the course of performing Steps 1-9. Note that memory allocated to the chunk cache is not freed until the dataset is closed. + +3.11 Step 11: Return from H5Dread +With the requested data in the application’s memory buffer, and the memory used to perform the processing associated with the read released, the HDF5 library returns from the H5Dread call. + +Figure 9 shows the contents of the application’s memory buffer when H5Dread returns for Example A, and Figure 10 shows the results for Example B. + + +Figure 9: Application's memory buffer when H5Dread returns for Example A + + +Figure 10: Application's memory buffer when H5Dread returns for Example B + + + +4. H5Dread Activity Diagram +Figure 11 shows a UML activity diagram for the H5Dread call when a dataset with chunked storage layout is being read. The diagram shows the activities involved fulfilling the read request, without the step­‐by­‐step detail given in Section 3. + + +Figure 11: H5Dread activity diagram + +Acknowledgements +This document was written as background material for a specific project. The principal author was Ruth Aydt. Quincey Koziol provided information about the HDF5 library’s behavior, patiently answering questions, and correcting technical errors in the document. Mike Folk provided advice on document structure and presentation. + +Revision History +April 8, 2009 Circulated for comment among selected parties. +April 12, 2009 Incorporated feedback; circulated for comment. +April 12, 2009 Incorporated feedback; circulated for comment. +April 15, 2009 Corrected errors in V2; circulated to The HDF Group for comment. +June 8, 2009 Updated Figure 8; posted on website. +December 29, 2010 +Light editorial pass. Modified for inclusion in HDF5 product documentation as draft. Add to collection Advanced Topics in HDF5 + +August 30, 2017 Converted to web document; updated errors in figure numbering (Names for figures 8 and 9 were used twice.) +Suggested Revisions + These suggested revisions were deferred due to time constraints. Readers are encouraged to send additional suggestions for improving the document to docs@hdfgroup.org. + +Add a simpler example with no chunking, no filters, and no subsetting. This would document how things are different without chunked storage, and introduce the concepts more gradually. +Move the Activity Diagram to the beginning of the document, and add text explaining it. Possibly add another activity diagram that shows the data flow pipeline in less detail, then show the detailed version. +Provide rigorous definitions of the terms used, either by referencing definitions provided elsewhere, or including definitions in this document. +Revisit special formatting used for code examples and information about HDF5 library settings and APIs. Current format emphasizes the sections, which were meant to be “technical asides”. +Consider adding explicit discussions about performance issues. +Remove details about default buffer sizes from this document, as they can change with different versions. Perhaps put the information in a summary table that will be updated for each release so that it can be referenced from this document. diff --git a/documentation/hdf5-docs/feature_docs/file_image_ops.md b/documentation/hdf5-docs/feature_docs/file_image_ops.md new file mode 100644 index 00000000..366aa129 --- /dev/null +++ b/documentation/hdf5-docs/feature_docs/file_image_ops.md @@ -0,0 +1,1300 @@ +--- +title: HDF5 File Image Operations +redirect_from: + - /display/HDF5/Migrating+from+HDF5+1.10+to+HDF5+1.12.html +--- + +# HDF5 File Image Operations + +**[1. Introduction to HDF5 File Image Operations](#introduction-to-hdf5-file-image-operations)** + + * [File Image Operations Function Summary](#file-image-operations-function-summary) + * [Abbreviations](#abbreviations) + * [Developer Prerequisites](#developer-prerequisites) + * [Resources](#resources) + +**[2. C API Call Syntax](c-api-call-syntax)** + + * [Low-level C API Routines](#low-level-c-api-routines) + - [H5Pset\_file\_image](#h5pset_file_image) + - [H5Pget\_file\_image](#h5pget_file_image) + - [H5Pset\_file\_image\_callbacks](#h5pset_file_image_callbacks) + - [H5Pget\_file\_image\_callbacks](#h5pget_file_image_callbacks) + - [Virtual File Driver Feature Flags](#virtual-file-driver-feature-flags) + - [H5Fget\_file\_image](#h5fget_file_image) + * [High-level C API Routine](#high-level-c-api-routine]) + - [H5LTopen\_file\_image](#h5ltopen_file_image) + +**[3. C API Call Semantics](#c-api-call-semantics)** + + * [File Image Callback Semantics](#) + * [Buffer Ownership](#) + * [Sharing a File image Buffer with the HDF5 Library](#) + * [File Driver Considerations](#) + * [Initial File Image Semantics](#) + * [Applying Initial File Image Semantics to the Core File Driver](#) +## Examples](#examples)](#) + * [Reading an In-memory HDF5 File Image](#) + * [In-memory HDF5 File Image Construction](#) + * [Using HDF5 to Construct and Read a Data Packet](#) + * [Using a Template File](#) +## [Java Signatures for File Image Operations API Calls](#Java Signatures for File Image Operations API Calls) +## [Fortran Signatures for File Image Operations API Calls](#Fortran Signatures for File Image Operations API Calls) + * [[Low-level Fortran API Routines](#) + * [H5Pset\_file\_image\_f](#) + * [H5Pget\_file\_image\_f](#) + * [H5Pset\_file\_image\_callbacks\_f](#) + * [H5Pget\_file\_image\_callbacks\_f](#) + * [Fortran Virtual File Driver Feature Flags](#) + * [H5Fget\_file\_image\_f](#) + * [High-level Fortran API Routine](#) + * [H5LTopen\_file\_image\_f](#) + +## Introduction to HDF5 File Image Operations +File image operations allow users to work with HDF5 files in memory in the same ways that users currently work with HDF5 files on disk. Disk I/O is not required when file images are opened, created, read from, or written to. + +An HDF5 file image is an HDF5 file that is held in a buffer in main memory. Setting up a file image in memory involves using either a buffer in the file access property list or a buffer in the Core (aka Memory) file driver. + +The advantage of working with a file in memory is faster access to the data. + +The challenge of working with files in memory buffers is maximizing performance and minimizing memory footprint while working within the constraints of the property list mechanism. This should be a non-issue for small file images, but may be a major issue for large images. + +If invoked with the appropriate flags, the H5LTopen\_file\_image() high level library call should deal with these challenges in most cases. However, some applications may require the programmer to address these issues directly. + +### File Image Operations Function Summary +Functions used in file image operations are listed below. + +Function Listing 1. File image operations functions + +H5Pset\_file\_image + +Allows an application to specify an initial file image. For more information, see section 2.1.1. +H5Pget\_file\_image Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. +H5Pset\_file\_image\_callbacks Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. +H5Pget\_file\_image\_callbacks Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. +H5Fget\_file\_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. +H5LTopen\_file\_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. + +### Abbreviations + +The following abbreviations are used in this document: + + + +Table 1. Abbreviations + + + +FAPL or fapl + +File Access Property List. In code samples, fapl is used. + +VFD + +Virtual File Driver + +VFL + +Virtual File Layer + +### Developer Prerequisites +Developers who use the file image operations described in this document should be proficient and experienced users of the HDF5 C Library APIs. More specifically, developers should have a working knowledge of property lists, callbacks, and virtual file drivers. + +### Resources +See the following for more information. + +The “RFC: File Image Operations” is the primary source for the information in this document. + +The “Alternate File Storage Layouts and Low-level File Drivers” section is in “The HDF5 File” chapter of the HDF5 User’s Guide . + +The H5P\_SET\_FAPL\_CORE function call can be used to modify the file access property list so that the Memory virtual file driver, H5FD\_ CORE, is used. The Memory file driver is also known as the Core file driver. + +Links to the Virtual File Layer and List of VFL Functions documents can be found in the HDF5 Technical Notes. + +2. C API Call Syntax +The C API function calls described in this chapter fall into two categories: low-level routines that are part of the main HDF5 C Library and one high-level routine that is part of the “lite” API in the high-level wrapper library. The high-level routine uses the low-level routines and presents frequently requested functionality conveniently packaged for application developers’ use. + +2.1. Low-level C API Routines +The purpose of this section is to describe the low-level C API routines that support file image operations. These routines allow an in-memory image of an HDF5 file to be opened without requiring file system I/O. + +The basic approach to opening an in-memory image of an HDF5 file is to pass the image to the Core file driver, and then tell the Core file driver to open the file. We do this by using the H5Pget/set\_file\_image calls. These calls allow the user to specify an initial file image. + +A potential problem with the H5Pget/set\_file\_image calls is the overhead of allocating and copying of large file image buffers. The callback routines enable application programs to avoid this problem. However, the use of these callbacks is complex and potentially hazardous: the particulars are discussed in the semantics and examples chapters below (see section 3.1 and section 4.1 respectively). Fortunately, use of the file image callbacks should seldom be necessary: the H5LTopen\_file\_image call should address most use cases. + +The property list facility in HDF5 is employed in file image operations. This facility was designed for passing data, not consumable resources, into API calls. The peculiar ways in which the file image allocation callbacks may be used allows us to avoid extending the property list structure to handle consumable resources cleanly and to avoid constructing a new facility for the purpose. + +The sub-sections below describe the low-level C APIs that are used with file image operations. + +2.1.1. H5Pset\_file\_image +The H5Pset\_file\_image routine allows an application to provide an image for a file driver to use as the initial contents of the file. This call was designed initially for use with the Core VFD, but it can be used with any VFD that supports using an initial file image when opening a file. See the “Virtual File Driver Feature Flags” section for more information. Calling this routine makes a copy of the provided file image buffer. See the “H5Pset\_file\_image\_callbacks” section for more information. + +The signature of H5Pset\_file\_image is defined as follows: + +herr\_t H5Pset\_file\_image(hid\_t fapl\_id, void \*buf\_ptr, size\_t buf\_len) +The parameters of H5Pset\_file\_image are defined as follows: + +fapl\_id contains the ID of the target file access property list. +buf\_ptr supplies a pointer to the initial file image, or NULL if no initial file image is desired. +buf\_len contains the size of the supplied buffer, or 0 if no initial image is desired. +If either the buf\_len parameter is zero, or the buf\_ptr parameter is NULL, no file image will be set in the FAPL, and any existing file image buffer in the FAPL will be released. If a buffer is released, the FAPL’s file image buf\_len will be set to 0 and buf\_ptr will be set to NULL. + +Given the tight interaction between the file image callbacks and the file image, the file image callbacks in a property list cannot be changed while a file image is defined. + +With properly constructed file image callbacks, it is possible to avoid actually copying the file image. The particulars of this are discussed in greater detail in the “C API Call Semantics” chapter and in the “Examples” chapter. + +2.1.2. H5Pget\_file\_image +The H5Pget\_file\_image routine allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. This routine uses the file image callbacks (if defined) when allocating and loading the buffer to return to the application, or it uses malloc and memcpy if the callbacks are undefined. When malloc and memcpy are used, it will be the caller’s responsibility to discard the returned buffer via a call to free. + +The signature of H5Pget\_file\_image is defined as follows: + +herr\_t H5Pget\_file\_image(hid\_t fapl\_id, void \*\*buf\_ptr\_ptr, size\_t \*buf\_len\_ptr) +The parameters of H5Pget\_file\_image are defined as follows: + +fapl\_id contains the ID of the target file access property list. +buf\_ptr\_ptr contains a NULL or a pointer to a void\*. If buf\_ptr\_ptr is not NULL, on successful return, \*buf\_ptr\_ptr will contain a pointer to a copy of the initial image provided in the last call to H5Pset\_file\_image for the supplied fapl\_id. If no initial image has been set, \*buf\_ptr\_ptr will be NULL. +buf\_len\_ptr contains a NULL or a pointer to size\_t. If buf\_len\_ptr is not NULL, on successful return, \*buf\_len\_ptr will contain the value of the buf\_len parameter for the initial image in the supplied fapl\_id. If no initial image is set, the value of \*buf\_len\_ptr will be 0. +As with H5Pset\_file\_image, appropriately defined file image callbacks can allow this function to avoid buffer allocation and memory copy operations. + +2.1.3. H5Pset\_file\_image\_callbacks +The H5Pset\_file\_image\_callbacks API call exists to allow an application to control the management of file image buffers through user defined callbacks. These callbacks will be used in the management of file image buffers in property lists and in select file drivers. These routines are invoked when a new file image buffer is allocated, when an existing file image buffer is copied or resized, or when a file image buffer is released from use. From the perspective of the HDF5 Library, the operations of the image\_malloc, image\_memcpy, image\_realloc, and image\_free callbacks must be identical to those of the corresponding C standard library calls (malloc, memcpy, realloc, and free). While the operations must be identical, the file image callbacks have more parameters. The callbacks and their parameters are described below. The return values of image\_malloc and image\_realloc are identical to the return values of malloc and realloc. However, the return values of image\_memcpy and image\_free are different than the return values of memcpy and free: the return values of image\_memcpy and image\_free can also indicate failure. See the “File Image Callback Semantics” section for more information. + +The signature of H5Pset\_file\_image\_callbacks is defined as follows: + +typedef enum +{ + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET, + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY, + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET, + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE, + H5\_FILE\_IMAGE\_OP\_FILE\_OPEN, + H5\_FILE\_IMAGE\_OP\_FILE\_RESIZE, + H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE +} H5\_file\_image\_op\_t; + +typedef struct +{ + void \*(\*image\_malloc)(size\_t size, H5\_file\_image\_op\_t file\_image\_op, + void \*udata); + void \*(\*image\_memcpy)(void \*dest, const void \*src, size\_t size, + H5\_file\_image\_op\_t file\_image\_op, void \*udata); + void \*(\*image\_realloc)(void \*ptr, size\_t size, + H5\_file\_image\_op\_t file\_image\_op, void \*udata); + herr\_t (\*image\_free)(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, + void \*udata); + void \*(\*udata\_copy)(void \*udata); + herr\_t (\*udata\_free)(void \*udata); + void \*udata; +} H5\_file\_image\_callbacks\_t; + +herr\_t H5Pset\_file\_image\_callbacks(hid\_t fapl\_id, + H5\_file\_image\_callbacks\_t \*callbacks\_ptr) +The parameters of H5Pset\_file\_image\_callbacks are defined as follows: + +fapl\_id contains the ID of the target file access property list. +callbacks\_ptr contains a pointer to an instance of the H5\_file\_image\_callbacks\_t structure. +The fields of the H5\_file\_image\_callbacks\_t structure are defined as follows: + +image\_malloc contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library malloc() call. The parameters of the image\_malloc callback are defined as follows: +size contains the size in bytes of the image buffer to allocate. +file\_image\_op contains one of the values of H5\_file\_image\_op\_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file\_image\_op are discussed in Table 2. +udata holds the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks. +Setting image\_malloc to NULL indicates that the HDF5 Library should invoke the standard C library malloc() routine when allocating file image buffers. + +image\_memcpy contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library memcpy() call except that it returns NULL on failure. Recall that the memcpy C Library routine is defined to return the dest parameter in all cases. The parameters of the image\_memcpy callback are defined as follows: +dest contains the address of the destination buffer. +src contains the address of the source buffer. +size contains the number of bytes to copy. +file\_image\_op contains one of the values of H5\_file\_image\_op\_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file\_image\_op are discussed in Table 2. +udata holds the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks. +Setting image\_memcpy to NULL indicates that the HDF5 Library should invoke the standard C library memcpy() routine when copying buffers. + +image\_realloc contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library realloc() call. The parameters of the image\_realloc callback are defined as follows: +ptr contains the pointer to the buffer being reallocated. +size contains the desired size in bytes of the buffer after realloc. +file\_image\_op contains one of the values of H5\_file\_image\_op\_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file\_image\_op are discussed in Table 2. +udata holds the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks. +Setting image\_realloc to NULL indicates that the HDF5 Library should invoke the standard C library realloc() routine when resizing file image buffers. + +image\_free contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library free() call except that it will return 0 (SUCCEED) on success and -1 (FAIL) on failure. The parameters of the image\_free callback are defined as follows: +ptr contains the pointer to the buffer being released. +file\_image\_op contains one of the values of H5\_file\_image\_op\_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file\_image\_op are discussed in Table 2 . +udata holds the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks. +Setting image\_free to NULL indicates that the HDF5 Library should invoke the standard C library free() routine when releasing file image buffers. + +udata\_copy contains a pointer to a function that (from the perspective of HDF5) allocates a buffer of suitable size, copies the contents of the supplied udata into the new buffer, and returns the address of the new buffer. The function returns NULL on failure. This function is necessary if a non-NULL udata parameter is supplied, so that property lists containing the image callbacks can be copied. If the udata parameter (below) is NULL, then this parameter should be NULL as well. The parameter of the udata\_copy callback is defined as follows: +udata contains the pointer to the user data block being copied. +udata\_free contains a pointer to a function that (from the perspective of HDF5) frees a user data block. This function is necessary if a non-NULL udata parameter is supplied so that property lists containing image callbacks can be discarded without a memory leak. If the udata parameter (below) is NULL, this parameter should be NULL as well. The parameter of the udata\_free callback is defined as follows: +udata contains the pointer to the user data block to be freed. +udata\_free returns 0 (SUCCEED) on success and -1 (FAIL) on failure. + +udata contains a pointer value, potentially to user-defined data, that will be passed to the image\_malloc, image\_memcpy, image\_realloc, and image\_free callbacks. +The semantics of the values that can be set for the file\_image\_op parameter to the above callbacks are described in the table below: + +Table 2. Values for the file\_image\_op parameter + +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being set in a FAPL. +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied when a FAPL is copied. +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being retrieved from a FAPL +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a FAPL close operation. +H5\_FILE\_IMAGE\_OP\_FILE\_OPEN This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is copied during a file open operation. While the image being opened will typically be copied from a FAPL, this need not always be the case. An example of an exception is when the Core file driver takes its initial image from a file. +H5\_FILE\_IMAGE\_OP\_FILE\_RESIZE This value is passed to the image\_realloc callback when a file driver needs to resize an image buffer. +H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a file close operation. + + +In closing our discussion of H5Pset\_file\_image\_callbacks(), we note the interaction between this call and the H5Pget/set\_file\_image() calls above: since the malloc, memcpy, and free callbacks defined in the instance of H5\_file\_image\_callbacks\_t are used by H5Pget/set\_file\_image(), H5Pset\_file\_image\_callbacks() will fail if a file image is already set in the target property list. + +For more information on writing the file image to disk, set the backing\_store parameter. See the H5Pset\_fapl\_core entry in the HDF5 Reference Manual. + +2.1.4. H5Pget\_file\_image\_callbacks +The H5Pget\_file\_image\_callbacks routine is designed to obtain the current file image callbacks from a file access property list. + +The signature of H5Pget\_file\_image\_callbacks() is defined as follows: + +herr\_t H5Pget\_file\_image\_callbacks(hid\_t fapl\_id, + H5\_file\_image\_callbacks\_t \*callbacks\_ptr) +The parameters of H5Pget\_file\_image\_callbacks are defined as follows: + +fapl\_id contains the ID of the target file access property list. +callbacks\_ptr contains a pointer to an instance of the H5\_file\_image\_callbacks\_t structure. All fields should be initialized to NULL. See the “H5Pset\_file\_image\_callbacks” section for more information on the H5\_file\_image\_callbacks\_t structure. +Upon successful return, the fields of \*callbacks\_ptr shall contain values as defined below: + +Upon successful return, callbacks\_ptr->image\_malloc will contain the pointer passed as the image\_malloc field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr->image\_memcpy will contain the pointer passed as the image\_memcpy field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr->image\_realloc will contain the pointer passed as the image\_realloc field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr->image\_free\_ptr will contain the pointer passed as the image\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr->udata\_copy will contain the pointer passed as the udata\_copy field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr-> udata\_free will contain the pointer passed as the udata\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr->udata will contain the pointer passed as the udata field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +2.1.5. Virtual File Driver Feature Flags +Implementation of the H5Pget/set\_file\_image\_callbacks() and H5Pget/set\_file\_image() function calls requires a pair of virtual file driver feature flags. The flags are H5FD\_FEAT\_ALLOW\_FILE\_IMAGE and H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS. Both of these are defined in H5FDpublic.h. + +The first flag, H5FD\_FEAT\_ALLOW\_FILE\_IMAGE, allows a file driver to indicate whether or not it supports file images. A VFD that sets this flag when its ‘query’ callback is invoked indicates that the file image set in the FAPL will be used as the initial contents of a file. Support for setting an initial file image is designed primarily for use with the Core VFD. However, any VFD can indicate support for this feature by setting the flag and copying the image in an appropriate way for the VFD (possibly by writing the image to a file and then opening the file). However, such a VFD need not employ the file image after file open time. In such cases, the VFD will not make an in-memory copy of the file image and will not employ the file image callbacks. + +File drivers that maintain a copy of the file in memory (only the Core file driver at present) can be constructed to use the initial image callbacks (if defined). Those that do must set the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag, the second flag, when their ‘query’ callbacks are invoked. + +Thus file drivers that set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag but not the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag may read the supplied image from the property list (if present) and use it to initialize the contents of the file. However, they will not discard the image when done, nor will they make any use of any file image callbacks (if defined). + +If an initial file image appears in a file allocation property list that is used in an H5Fopen() call, and if the underlying file driver does not set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag, then the open will fail. + +If a driver sets both the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag and the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag, then that driver will allocate a buffer of the required size, copy the contents of the initial image buffer from the file access property list, and then open the copy as if it had just loaded it from file. If the file image allocation callbacks are defined, the driver shall use them for all memory management tasks. Otherwise it will use the standard malloc, memcpy, realloc, and free C library calls for this purpose. + +If the VFD sets the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag, and an initial file image is defined by an application, the VFD should ensure that file creation operations (as opposed to file open operations) bypass use of the file image, and create a new, empty file. + +Finally, it is logically possible that a file driver would set the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag, but not the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag. While it is hard to think of a situation in which this would be desirable, setting the flags this way will not cause any problems: the two capabilities are logically distinct. + + + +2.1.6. H5Fget\_file\_image +The purpose of the H5Fget\_file\_image routine is to provide a simple way to retrieve a copy of the image of an existing, open file. This routine can be used with files opened using the SEC2 (aka POSIX), STDIO, and Core (aka Memory) VFDs. + +The signature of H5Fget\_file\_image is defined as follows: + +ssize\_t H5Fget\_file\_image(hid\_t file\_id, void \*buf\_ptr, size\_t buf\_len) +The parameters of H5Fget\_file\_image are defined as follows: + +file\_id contains the ID of the target file. +buf\_ptr contains a pointer to the buffer into which the image of the HDF5 file is to be copied. If buf\_ptr is NULL, no data will be copied, but the return value will still indicate the buffer size required (or a negative value on error). +buf\_len contains the size of the supplied buffer. +If the return value of H5Fget\_file\_image is a positive value, then the value will be the length of buffer required to store the file image (in other words, the length of the file). A negative value might be returned if the file is too large to store in the supplied buffer or on failure. + +The current file size can be obtained via a call to H5Fget\_filesize(). Note that this function returns the value of the end of file (EOF) and not the end of address space (EOA). While these values are frequently the same, it is possible for the EOF to be larger than the EOA. Since H5Fget\_file\_image() will only obtain a copy of the file from the beginning of the superblock to the EOA, it will be best to use H5Fget\_file\_image() to determine the size of the buffer required to contain the image. + +Other Design Considerations + +Here are some other notes regarding the design and implementation of H5Fget\_file\_image. + +The H5Fget\_file\_image call should be part of the high-level library. However, a file driver agnostic implementation of the routine requires access to data structures that are hidden within the HDF5 Library. We chose to implement the call in the library proper rather than expose those data structures. + +There is no reason why the H5Fget\_file\_image() API call could not work on files opened with any file driver. However, the Family, Multi, and Split file drivers have issues that make the call problematic. At present, files opened with the Family file driver are marked as being created with that file driver in the superblock, and the HDF5 Library refuses to open files so marked with any other file driver. This negates the purpose of the H5Fget\_file\_image() call. While this mark can be removed from the image, the necessary code is not trivial. + +Thus we will not support the Family file driver in H5Fget\_file\_image() unless there is demand for it. Files created with the Multi and Split file drivers are also marked in the superblock. In addition, they typically use a very sparse address space. A sparse address space would require the use of an impractically large buffer for an image, and most of the buffer would be empty. So, we see no point in supporting the Multi and Split file drivers in H5Fget\_file\_image() under any foreseeable circumstances. + + + +2.2. High-level C API Routine +The H5LTopen\_file\_image high-level routine encapsulates the capabilities of routines in the main HDF5 Library with conveniently accessible abstractions. + +2.2.1. H5LTopen\_file\_image +The H5LTopen\_file\_image routine is designed to provide an easier way to open an initial file image with the Core VFD. Flags to H5LTopen\_file\_image allow for various file image buffer ownership policies to be requested. See the HDF5 Reference Manual for more information on high-level APIs. + +The signature of H5LTopen\_file\_image is defined as follows: + +hid\_t H5LTopen\_file\_image(void \*buf\_ptr, size\_t buf\_len, unsigned flags) +The parameters of H5LTopen\_file\_image are defined as follows: + +buf\_ptr contains a pointer to the supplied initial image. A NULL value is invalid and will cause H5LTopen\_file\_image to fail. +buf\_len contains the size of the supplied buffer. A value of 0 is invalid and will cause H5LTopen\_file\_image to fail. +flags contains a set of flags indicating whether the image is to be opened read/write, whether HDF5 is to take control of the buffer, and how long the application promises to maintain the buffer. Possible flags are described in the table below: +Table 3. Flags for H5LTopen\_file\_image + +H5LT\_FILE\_IMAGE\_OPEN\_RW Indicates that the HDF5 Library should open the image read/write instead of the default read-only. +H5LT\_FILE\_IMAGE\_DONT\_COPY +Indicates that the HDF5 Library should not copy the file image buffer provided, but should use it directly. The HDF5 Library will release the file image when finished. The supplied buffer must have been allocated via a call to the standard C library malloc() or calloc() routines. The HDF5 Library will call free() to release the buffer. In the absence of this flag, the HDF5 Library will copy the buffer provided. The H5LT\_FILE\_IMAGE\_DONT\_COPY flag provides an application with the ability to “give ownership” of a file image buffer to the HDF5 Library. + +The HDF5 Library will modify the buffer on write if the image is opened read/write and the H5LT\_FILE\_IMAGE\_DONT\_COPY flag is set. + +The H5LT\_FILE\_IMAGE\_DONT\_RELEASE flag, see below, is invalid unless the H5LT\_FILE\_IMAGE\_DONT\_COPY flag is set + +H5LT\_FILE\_IMAGE\_DONT\_RELEASE +Indicates that the HDF5 Library should not attempt to release the buffer when the file is closed. This implies that the application will tend to this detail and that the application will not discard the buffer until after the file image is closed. + +Since there is no way to return a changed buffer base address to the application, and since realloc can change this value, calls to realloc() must be barred when this flag is set. As a result, any write that requires an increased buffer size will fail. + +This flag is invalid unless the H5LT\_FILE\_IMAGE\_DONT\_COPY flag, see above, is set. + +If the H5LT\_FILE\_IMAGE\_DONT\_COPY flag is set and this flag is not set, the HDF5 Library will release the file image buffer after the file is closed using the standard C library free() routine. + +Using this flag and the H5LT\_FILE\_IMAGE\_DONT\_COPY flag provides a way for the application to specify a buffer that the HDF5 Library can use for opening and accessing as a file image while letting the application retain ownership of the buffer. + +The following table is intended to summarize the semantics of the H5LT\_FILE\_IMAGE\_DONT\_COPY and H5LT\_FILE\_IMAGE\_DONT\_RELEASE flags (shown as “Don’t Copy Flag” and “Don’t Release Flag” respectively in the table): + +Table 4. Summary of Don’t Copy and Don’t Release Flag Actions + +Don’t Copy Flag + +Don’t Release Flag + +Make Copy of User Supplied Buffer + +Pass User Supplied Buffer to File Driver + +Release User Supplied Buffer When Done + +Permit realloc of Buffer Used by File Driver + +False + +Don’t care + +True + +False + +False + +True + +True + +False + +False + +True + +True + +True + +True + +True + +False + +True + +False + +False + +The return value of H5LTopen\_file\_image will be a file ID on success or a negative value on failure. The file ID returned should be closed with H5Fclose. + +Note that there is no way currently to specify a “backing store” file name in this definition of H5LTopen\_image. + + + +3. C API Call Semantics +The purpose of this chapter is to describe some issues that developers should consider when using file image buffers, property lists, and callback APIs. + +3.1. File Image Callback Semantics +The H5Fget/set\_file\_image\_callbacks() API calls allow an application to hook the memory management operations used when allocating, duplicating, and discarding file images in the property list, in the Core file driver, and potentially in any in-memory file driver developed in the future. + +From the perspective of the HDF5 Library, the supplied image\_malloc(), image\_memcpy(), image\_realloc(), and image\_free() callback routines must function identically to the C standard library malloc(), memcpy(), realloc(), and free() calls. What happens on the application side can be much more nuanced, particularly with the ability to pass user data to the callbacks. However, whatever the application does with these calls, it must maintain the illusion that the calls have had the expected effect. Maintaining this illusion requires some understanding of how the property list structure works, and what HDF5 will do with the initial images passed to it. + +At the beginning of this document, we talked about the need to work within the constraints of the property list mechanism. When we said “from the perspective of the HDF5 Library…” in the paragraph above, we are making reference to this point. + +The property list mechanism was developed as a way to add parameters to functions without changing the parameter list and breaking existing code. However, it was designed to use only “call by value” semantics, not “call by reference”. The decision to use “call by value” semantics requires that the values of supplied variables be copied into the property list. This has the advantage of simplifying the copying and deletion of property lists. However, if the value to be copied is large (say a 2 GB file image), the overhead can be unacceptable. + +The usual solution to this problem is to use “call by reference” where only a pointer to an object is placed in a parameter list rather than a copy of the object itself. However, use of “call by reference” semantics would greatly complicate the property list mechanism: at a minimum, it would be necessary to maintain reference counts to dynamically allocated objects so that the owner of the object would know when it was safe to free the object. + +After much discussion, we decided that the file image operations calls were sufficiently specialized that it made no sense to rework the property list mechanism to support “call by reference.” Instead we provided the file image callback mechanism to allow the user to implement some version of “call by reference” when needed. It should be noted that we expect this mechanism to be used rarely if at all. For small file images, the copying overhead should be negligible, and for large images, most use cases should be addressed by the H5LTopen\_file\_image call. + +In the (hopefully) rare event that use of the file image callbacks is necessary, the fundamental point to remember is that the callbacks must be constructed and used in such a way as to maintain the library’s illusion that it is using “call by value” semantics. + +Thus the property list mechanism must think that it is allocating a new buffer and copying the supplied buffer into it when the file image property is set. Similarly, it must think that it is allocating a new buffer and copying the contents of the existing buffer into it when it copies a property list that contains a file image. Likewise, it must think it is de-allocating a buffer when it discards a property list that contains a file image. + +Similar illusions must be maintained when a file image buffer is copied into the Core file driver (or any future driver that uses the file image callbacks) when the file driver re-sizes the buffer containing the image and finally when the driver discards the buffer. + +3.1.1. Buffer Ownership +The owner of a file image in a buffer is the party that has the responsibility to discard the file image buffer when it is no longer needed. In this context, the owner is either the HDF5 Library or the application program. + +We implemented the image\_\* callback facility to allow efficient management of large file images. These facilities can be used to allow sharing of file image buffers between the application and the HDF5 library, and also transfer of ownership in either direction. In such operations, care must be taken to ensure that ownership is clear and that file image buffers are not discarded before all references to them are discarded by the non-owning party. + +Ownership of a file image buffer will only be passed to the application program if the file image callbacks are designed to do this. In such cases, the application program must refrain from freeing the buffer until the library has deleted all references to it. This in turn will happen after all property lists (if any) that refer to the buffer have been discarded, and the file driver (if any) that used the buffer has closed the file and thinks it has discarded the buffer. + +3.1.2. Sharing a File image Buffer with the HDF5 Library +As mentioned above, the HDF5 property lists are a mechanism for passing values into HDF5 Library calls. They were created to allow calls to be extended with new parameters without changing the actual API or breaking existing code. They were designed based on the assumption that all new parameters would be “call by value” and not “call by reference.” Having “call by value” parameters means property lists can be copied, reused, and discarded with ease. + +Suppose an application wished to share a file image buffer with the HDF5 Library. This means the library would be allowed to read the file image, but not free it. The file image callbacks might be constructed as follows to share a buffer: + +Construct the image\_malloc() call so that it returns the address of the buffer instead of allocating new space. This will keep the library thinking that the buffers are distinct even when they are not. Support this by including the address of the buffer in the user data. As a sanity check, include the buffer’s size in the user data as well, and require image\_malloc() to fail if the requested buffer size is unexpected. Finally, include a reference counter in the user data, and increment the reference counter on each call to image\_malloc(). +Construct the image\_memcpy() call so that it does nothing. As a sanity check, make it fail if the source and destination pointers do not match the buffer address in the user data or if the size is unexpected. +Construct the image\_free() routine so that it does nothing. As a sanity check, make it compare the supplied pointer with the expected pointer in the user data. Also, make it decrement the reference counter and notify the application that the HDF5 Library is done with the buffer when the reference count drops to 0. +As the property list code will never resize a buffer, we do not discuss the image\_realloc() call here. The behavior of image\_realloc() in this scenario depends on what the application wants to do with the file image after it has been opened. We discuss this issue in the next section. Note also that the operation passed into the file image callbacks allow the callbacks to behave differently depending on the context in which they are used. + +For more information on user defined data, see the “H5Pset\_file\_image\_callbacks” section. + +3.1.3. File Driver Considerations +When a file image is opened by a driver that sets both the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE and the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flags, the driver will allocate a buffer large enough for the initial file image and then copy the image from the property list into this buffer. As processing progresses, the driver will reallocate the image as necessary to increase its size and will eventually discard the image at file close. If defined, the driver will use the file image callbacks for these operations; otherwise, the driver will use the standard C library calls. See the "H5Pset\_file\_image\_callbacks” section for more information. + +As described above, the file image callbacks can be constructed so as to avoid the overhead of buffer allocations and copies while allowing the HDF5 Library to maintain its illusions on the subject. There are two possible complications involving the file driver. The complications are the possibility of reallocation calls from the driver and the possibility of the continued existence of property lists containing references to the buffer. + +Suppose an application wishes to share a file image buffer with the HDF5 Library. The application allows the library to read (and possibly write) the image, but not free it. We must first decide whether the image is to be opened read-only or read/write. + +If the image will be opened read-only (or if we know that any writes will not change the size of the image), the image\_realloc() call should never be invoked. Thus the image\_realloc() routine can be constructed so as to always fail, and the image\_malloc(), image\_memcpy(), and image\_free() routines can be constructed as described in the section above. + +Suppose, however, that the file image will be opened read/write and may grow during the computation. We must now allow for the base address of the buffer to change due to reallocation calls, and we must employ the user data structure to communicate any change in the buffer base address and size to the application. We pass buffer changes to the application so that the application will be able to eventually free the buffer. To this end, we might define a user data structure as shown in the example below: + + + + typedef struct udata { + void \*init\_ptr; + size\_t init\_size; + int init\_ref\_count; + void \*mod\_ptr; + size\_t mod\_size; + int mod\_ref\_count; + } +Example 1. Using a user data structure to communicate with an application + +We initialize an instance of the structure so that init\_ptr points to the buffer to be shared, init\_size contains the initial size of the buffer, and all other fields are initialized to either NULL or 0 as indicated by their type. We then pass a pointer to the instance of the user data structure to the HDF5 Library along with allocation callback functions constructed as follows: + +Construct the image\_malloc() call so that it returns the value in the init\_ptr field of the user data structure and increments the init\_ref\_count. As a sanity check, the function should fail if the requested size does not match the init\_size field in the user data structure or if any of the modified fields have values other than their initial values. +Construct the image\_memcpy() call so that it does nothing. As a sanity check, it should be made to fail if the source, destination, and size parameters do not match the init\_ptr and init\_size fields as appropriate. +Construct the image\_realloc() call so that it performs a standard realloc. Sanity checking, assuming that the realloc is successful, should be as follows: +If the mod\_ptr, mod\_size, or mod\_ref\_count fields of the user data structure still have their initial values, verify that the supplied pointer matches the init\_ptr field and that the supplied size does not match the init\_size field. Decrement init\_ref\_count, set mod\_ptr equal to the address returned by realloc, set mod\_size equal to the supplied size, and set mod\_ref\_count to 1. +If the mod\_ptr, mod\_size, or mod\_ref\_count fields of the user data structure are defined, verify that the supplied pointer matches the value of mod\_ptr and that the supplied size does not match mod\_size. Set mod\_ptr equal to the value returned by realloc, and set mod\_size equal to the supplied size. +In both cases, if all sanity checks pass, return the value returned by the realloc call. Otherwise, return NULL. + +Construct the image\_free() routine so that it does nothing. Perform sanity checks as follows: +If the H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE flag is set, decrement the init\_ref\_count field of the user data structure. Flag an error if init\_ref\_count drops below zero. +If the H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE flag is set, check to see if the mod\_ptr, mod\_size, or mod\_ref\_count fields of the user data structure have been modified from their initial values. If they have, verify that mod\_ref\_count contains 1 and then set that field to zero. If they have not been modified, proceed as per the H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE case. +In either case, if both the init\_ref\_count and mod\_ref\_count fields have dropped to zero, notify the application that the HDF5 Library is done with the buffer. If the mod\_ptr or mod\_size fields have been modified, pass these values on to the application as well. + +3.2. Initial File Image Semantics +One can argue whether creating a file with an initial file image is closer to creating a file or opening a file. The consensus seems to be that it is closer to a file open, and thus we shall require that the initial image only be used for calls to H5Fopen(). + +Whatever our convention, from an internal perspective, opening a file with an initial file image is a bit of both creating a file and opening a file. Conceptually, we will create a file on disk, write the supplied image to the file, close the file, open the file as an HDF5 file, and then proceed as usual (of course, the Core VFD will not write to the file system unless it is configured to do so). This process is similar to a file create: we are creating a file that did not exist on disk to begin with and writing data to it. Also, we must verify that no file of the supplied name is open. However, this process is also similar to a file open: we must read the superblock and handle the usual file open tasks. + +Implementing the above sequence of actions has a number of implications on the behavior of the H5Fopen() call when an initial file image is supplied: + +H5Fopen() must fail if the target file driver does not set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag and a file image is specified in the FAPL. +If the target file driver supports the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag, then H5Fopen() must fail if the file is already open or if a file of the specified name exists. +Even if the above constraints are satisfied, H5Fopen() must still fail if the image does not contain a valid (or perhaps just plausibly valid) image of an HDF5 file. In particular, the superblock must be processed, and the file structure be set up accordingly. +See the “Virtual File Driver Feature Flags” section for more information. + +As we indicated earlier, if an initial file image appears in the property list of an H5Fcreate() call, it is ignored. + +While the above section on the semantics of the file image callbacks may seem rather gloomy, we get the payback here. The above says everything that needs to be said about initial file image semantics in general. The sub-section below has a few more observations on the Core file driver. + +3.2.1. Applying Initial File Image Semantics to the Core File Driver +At present, the Core file driver uses the open() and read() system calls to load an HDF5 file image from the file system into RAM. Further, if the backing\_store flag is set in the FAPL entry specifying the use of the Core file driver, the Core file driver’s internal image will be used to overwrite the source file on either flush or close. See the H5Pset\_fapl\_core entry in the HDF5 Reference Manual for more information. + +This results in the following observations. In all cases assume that use of the Core file driver has been specified in the FAPL. + +If the file specified in the H5Fopen() call does not exist, and no initial image is specified in the FAPL, the open must fail because there is no source for the initial image needed by the Core file driver. +If the file specified in the H5Fopen() call does exist, and an initial image is specified in the FAPL, the open must fail because the source of the needed initial image is ambiguous: the file image could be taken either from file or from the FAPL. +If the file specified in the H5Fopen() call does not exist, and an initial image is specified in the FAPL, the open will succeed. This assumes that the supplied image is valid. Further, if the backing store flag is set, the file specified in the H5Fopen() call will be created, and the contents of the Core file driver’s internal buffer will be written to the new file on flush or close. +Thus a call to H5Fopen() can result in the creation of a new HDF5 file in the file system. + +4. Examples +The purpose of this chapter is to provide examples of how to read or build an in-memory HDF5 file image. + +4.1. Reading an In-memory HDF5 File Image +The H5Pset\_file\_image() function call allows the Core file driver to be initialized from an application provided buffer. The following pseudo code illustrates its use: + + + + +H5Pset\_file\_image(fapl\_id, buf, buf\_len); + + + + +Example 2. Using H5Pset\_file\_image to initialize the Core file driver + +This solution is easy to code, but the supplied buffer is duplicated twice. The first time is in the call to H5Pset\_file\_image() when the image is duplicated and the duplicate inserted into the property list. The second time is when the file is opened: the image is copied from the property list into the initial buffer allocated by the Core file driver. This is a non-issue for small images, but this could become a significant performance hit for large images. + +If we want to avoid the extra malloc and memcpycalls, we must decide whether the application should retain ownership of the buffer or pass ownership to the HDF5 Library. + +The following pseudo code illustrates opening the image read -only using the H5LTopen\_file\_image() routine. In this example, the application retains ownership of the buffer and avoids extra buffer allocations and memcpy calls. + + + +hid\_t file\_id; +unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; +file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); + + +Example 3. Using H5LTopen\_file\_image to open a read-only file image where the application retains ownership of the buffer +If the application wants to transfer ownership of the buffer to the HDF5 Library, and the standard C library routine free is an acceptable way of discarding it, the above example can be modified as follows: + + +hid\_t file\_id; +unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY; +file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); + + +Example 4. Using H5LTopen\_file\_image to open a read-only file image where the application transfers ownership of the buffer +Again, file access is read-only. Read/write access can be obtained via the H5LTopen\_file\_image() call, but we will explore that in the section below. + + + +4.2. In-memory HDF5 File Image Construction +Before the implementation of file image operations, HDF5 supported construction of an image of an HDF5 file in memory with the Core file driver. The H5Fget\_file\_image() function call allows an application access to the file image without first writing it to disk. See the following code fragment: + + +H5Fflush(fid); +size = H5Fget\_file\_image(fid, NULL, 0); +buffer\_ptr = malloc(size); +H5Fget\_file\_image(fid, buffer\_ptr, size); +Example 5. Accessing the image of a file in memory + +The use of H5Fget\_file\_image() may be acceptable for small images. For large images, the cost of the malloc() and memcpy() operations may be excessive. To address this issue, the H5Pset\_file\_image\_callbacks() call allows an application to manage dynamic memory allocation for file images and memory-based file drivers (only the Core file driver at present). The following code fragment illustrates its use. Note that most error checking is omitted for simplicity and that H5Pset\_file\_image is not used to set the initial file image. + +struct udata\_t { +void \* image\_ptr; +size\_t image\_size; + } udata = {NULL, 0}; +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + ((struct udata\_t \*)udata)->image\_size = size; + return(malloc(size)); +} +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, + H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ +assert(FALSE); /\* Should never be invoked in this scenario. \*/ + return(NULL); /\* always fails \*/ + } +void image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, +void \*udata) +{ + ((struct udata\_t \*)udata)->image\_size = size; + return(realloc(ptr, size)); +} +herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); + ((struct udata\_t \*)udata)->image\_ptr = ptr; + return(0); /\* if we get here, we must have been successful \*/ +} +void \*udata\_copy(void \*udata) +{ + return(udata); +} +herr\_t udata\_free(void \*udata) +{ + return(0); +} +H5\_file\_image\_callbacks\_t callbacks = {image\_malloc, image\_memcpy, + image\_realloc, image\_free, + udata\_copy, udata\_free, + (void \*)(&udata)}; + +H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); + +assert(udata.image\_ptr!= NULL); +/\* udata now contains the base address and length of the final version of the core file \*/ + +Example 6. Using H5Pset\_file\_image\_callbacks to improve memory allocation + +The above code fragment gives the application full ownership of the buffer used by the Core file driver after the file is closed, and it notifies the application that the HDF5 Library is done with the buffer by setting udata.image\_ptr to something other than NULL. If read access to the buffer is sufficient, the H5Fget\_vfd\_handle() call can be used as an alternate solution to get access to the base address of the Core file driver’s buffer. + +The above solution avoids some unnecessary mallocand memcpycalls and should be quite adequate if an image of an HDF5 file is constructed only occasionally. However, if an HDF5 file image must be constructed regularly, and if we can put a strong and tight upper bound on the size of the necessary buffer, then the following pseudo code demonstrates a method of avoiding memory allocation completely. The downside, however, is that buffer is allocated statically. Again, much error checking is omitted for clarity. + +char buf[BIG\_ENOUGH]; +struct udata\_t { +void \* image\_ptr; +size\_t image\_size; +size\_t max\_image\_size; +int ref\_count; +} udata = {(void \*)(&(buf[0]), 0, BIG\_ENOUGH, 0}; +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(((struct udata\_t \*)udata)->ref\_count == 0); + ((struct udata\_t \*)udata)->image\_size = size; + (((struct udata\_t \*)udata)->ref\_count)++; + return((((struct udata\_t \*)udata)->image\_ptr); +} +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, + H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ +assert(FALSE); /\* Should never be invoked in this scenario. \*/ + return(NULL); /\* always fails \*/ + } +void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); +assert(((struct udata\_t \*)udata)->ref\_count == 1); + ((struct udata\_t \*)udata)->image\_size = size; +return((((struct udata\_t \*)udata)->image\_ptr); +} +herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(((struct udata\_t \*)udata)->ref\_count == 1); + (((struct udata\_t \*)udata)->ref\_count)--; + return(0); /\* if we get here, we must have been successful \*/ +} +void \*udata\_copy(void \*udata) +{ + return(udata); +} +herr\_t udata\_free(void \*udata) +{ + return(0); +} +H5\_file\_image\_callbacks\_t callbacks = {image\_malloc, image\_memcpy, + image\_realloc, image\_free, + udata\_copy, udata\_free, + (void \*)(&udata)}; +/\* end of initialization \*/ + +H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); + + + +assert(udata.ref\_count == 0); +/\* udata now contains the base address and length of the final version of the core file \*/ + + +Example 7. Using H5Pset\_file\_image\_callbacks with a static buffer + +If we can further arrange matters so that only the contents of the datasets in the HDF5 file image change, but not the structure of the file itself, we can optimize still further by re-using the image and changing only the contents of the datasets after the initial write to the buffer. The following pseudo code shows how this might be done. Note that the code assumes that buf already contains the image of the HDF5 file whose dataset contents are to be overwritten. Again, much error checking is omitted for clarity. Also, observe that the file image callbacks do not support the H5Pget\_file\_image() call. + + + + + +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(size == ((struct udata\_t \*)udata)->image\_size); + assert(((struct udata\_t \*)udata)->ref\_count >= 0); + ((struct udata\_t \*)udata)->image\_size = size; + (((struct udata\_t \*)udata)->ref\_count)++; + return((((struct udata\_t \*)udata)->image\_ptr); +} +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ +assert(dest == ((struct udata\_t \*)udata)->image\_ptr); +assert(src == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); +assert(size == ((struct udata\_t \*)udata)->image\_size); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); + return(dest); /\* if we get here, we must have been successful \*/ +} +void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + /\* One would think that this function is not needed in this scenario, as + \* only the contents of the HDF5 file is being changed, not its size or + \* structure. However, the Core file driver calls realloc() just before + \* close to clip the buffer to the size indicated by the end of the + \* address space. + \* + \* While this call must be supported in this case, the size of + \* the image should never change. Hence the function can limit itself + \* to performing sanity checks, and returning the base address of the + \* statically allocated buffer. + \*/ + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); + assert(((struct udata\_t \*)udata)->image\_size == size); +return((((struct udata\_t \*)udata)->image\_ptr); +} +herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert((file\_image\_op == H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE) || + (file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE)); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); + (((struct udata\_t \*)udata)->ref\_count)--; + return(0); /\* if we get here, we must have been successful \*/ +} +void \*udata\_copy(void \*udata) +{ + return(udata); +} +herr\_t udata\_free(void \*udata) +{ + return(0); +} +H5\_file\_image\_callbacks\_t callbacks = {image\_malloc, image\_memcpy, + image\_realloc, image\_free, + udata\_copy, udata\_free, + (void \*)(&udata)}; +/\* end of initialization \*/ + +H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); +H5Pset\_file\_image(fapl\_id, udata.image\_ptr, udata.image\_len); + + + +assert(udata.ref\_count == 0); +/\* udata now contains the base address and length of the final version of the core file \*/ + + +Example 8. Using H5Pset\_file\_image\_callbacks where only the datasets change + +Before we go on, we should note that the above pseudo code can be written more compactly, albeit with fewer sanity checks, using the H5LTopen\_file\_image() call. See the example below: + + +hid\_t file\_id; +unsigned flags = H5LT\_FILE\_IMAGE\_OPEN\_RW | H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; +/\* end initialization \*/ +file\_id = H5LTopen\_file\_image(udata.image\_ptr, udata.image\_len, flags); + +/\* udata now contains the base address and length of the final version of the core file \*/ + + + + +Example 9. Using H5LTopen\_file\_image where only the datasets change +The above pseudo code allows updates of a file image about as cheaply as possible. We assume the application has enough RAM for the image and that the HDF5 file structure is constant after the first write. + +While the scenario above is plausible, we will finish this section with a more general scenario. In the pseudo code below, we assume sufficient RAM to retain the HDF5 file image between uses, but we do not assume that the HDF5 file structure remains constant or that we can place a hard pper bound on the image size. + +Since we must use malloc, realloc, and free in this example, and since realloc can change the base address of a buffer, we must maintain two of ptr, size, and ref\_count triples in the udata structure. The first triple is for the property list (which will never change the buffer), and the second triple is for the file driver. As shall be seen, this complicates the file image callbacks considerably. Note also that while we do not use H5Pget\_file\_image() in this example, we do include support for it in the file image callbacks. As usual, much error checking is omitted in favor of clarity. + +struct udata\_t { +void \* fapl\_image\_ptr; +size\_t fapl\_image\_size; +int fapl\_ref\_count; +void \* vfd\_image\_ptr; +size\_t vfd\_image\_size; +nt vfd\_ref\_count; +} udata = {NULL, 0, 0, NULL, 0, 0}; +boolean initial\_file\_open = TRUE; +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + void \* return\_value = NULL; + switch ( file\_image\_op ) { + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET: + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY: + assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); + assert(((struct udata\_t \*)udata)->fapl\_image\_size == size); + assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 0); + return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; + (((struct udata\_t \*)udata)->fapl\_ref\_count)++; + break; + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: + assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); + assert(((struct udata\_t \*)udata)->vfd\_image\_size == size); + assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); + return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; + /\* don’t increment ref count \*/ + break; + case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: + assert(((struct udata\_t \*)udata)->vfd\_image\_ptr == NULL); + assert(((struct udata\_t \*)udata)->vfd\_image\_size == 0); + assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 0); +if (((struct udata\_t \*)udata)->fapl\_image\_ptr == NULL ) { + ((struct udata\_t \*)udata)->vfd\_image\_ptr = +malloc(size); + ((struct udata\_t \*)udata)->vfd\_image\_size = size; + } else { + assert(((struct udata\_t \*)udata)->fapl\_image\_size == +size); + assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= +1); + ((struct udata\_t \*)udata)->vfd\_image\_ptr = +((struct udata\_t \*)udata)->fapl\_image\_ptr; + ((struct udata\_t \*)udata)->vfd\_image\_size = size; + } + return\_value = ((struct udata\_t \*)udata)->vfd\_image\_ptr; + (((struct udata\_t \*)udata)->vfd\_ref\_count)++; + break; + default: + assert(FALSE); + } + return(return\_value); +} +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, + H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + switch(file\_image\_op) { + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET: + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY: + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: +assert(dest == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); +assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); +break; +case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: +assert(dest == ((struct udata\_t \*)udata)->vfd\_image\_ptr); +assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); +assert(size == ((struct udata\_t \*)udata)->vfd\_image\_size); +assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); +assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); +break; + default: + assert(FALSE); + break; + } + return(dest); /\* if we get here, we must have been successful \*/ + } +void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, + void \*udata) +{ + assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); | +assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); +((struct udata\_t \*)udata)->vfd\_image\_ptr = realloc(ptr, size); + ((struct udata\_t \*)udata)->vfd\_image\_size = size; +return((((struct udata\_t \*)udata)->vfd\_image\_ptr); +} +herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + switch(file\_image\_op) { + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE: + assert(ptr == ((struct udata\_t \*)udata)->fapl\_image\_ptr); + assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); + (((struct udata\_t \*)udata)->fapl\_ref\_count)--; + break; + case H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE: + assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); + assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); + (((struct udata\_t \*)udata)->vfd\_ref\_count)--; + break; + default: + assert(FALSE); + break; + } + return(0); /\* if we get here, we must have been successful \*/ +} +void \*udata\_copy(void \*udata) +{ + return(udata); +} +herr\_t udata\_free(void \*udata) +{ + return(0); +} +H5\_file\_image\_callbacks\_t callbacks = {image\_malloc, image\_memcpy, + image\_realloc, image\_free, + udata\_copy, udata\_free, + (void \*)(&udata)}; +/\* end of initialization \*/ + +H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); +if ( initial\_file\_open ) { + initial\_file\_open = FALSE; +} else { + assert(udata.vfd\_image\_ptr != NULL); + assert(udata.vfd\_image\_size > 0); + assert(udata.vfd\_ref\_count == 0); + assert(udata.fapl\_ref\_count == 0); + udata.fapl\_image\_ptr = udata.vfd\_image\_ptr; + udata.fapl\_image\_size = udata.vfd\_image\_size; + udata.vfd\_image\_ptr = NULL; + udata.vfd\_image\_size = 0; + H5Pset\_file\_image(fapl\_id, udata.fapl\_image\_ptr, udata.fapl\_image\_size); +} + + + +assert(udata.fapl\_ref\_count == 0); +assert(udata.vfd\_ref\_count == 0); + +/\* udata.vfd\_image\_ptr and udata.vfd\_image\_size now contain the base address and length of the final version of the core file \*/ + + + +Example 10. Using H5LTopen\_file\_image where only the datasets change and where the file structure and image size might not be constant + +The above pseudo code shows how a buffer can be passed back and forth between the application and the HDF5 Library. The code also shows the application having control of the actual allocation, reallocation, and freeing of the buffer. + +4.3. Using HDF5 to Construct and Read a Data Packet +Using the file image operations described in this document, we can bundle up data in an image of an HDF5 file on one process, transmit the image to a second process, and then open and read the image on the second process without any mandatory file system I/O. + +We have already demonstrated the construction and reading of such buffers above, but it may be useful to offer an example of the full operation. We do so in the example below using as simple a set of calls as possible. The set of calls in the example has extra buffer allocations. To reduce extra buffer allocations, see the sections above. + +In the following example, we construct an HDF5 file image on process A and then transmit the image to process B where we then open the image and extract the desired data. Note that no file system I/O is performed: all the processing is done in memory with the Core file driver. + +\*\*\* Process A \*\*\* + +H5Fflush(fid); +size = H5Fget\_file\_image(fid, NULL, 0); +buffer\_ptr = malloc(size); +H5Fget\_file\_image(fid, buffer\_ptr, size); + + +free(buffer\_ptr); + +\*\*\* Process B \*\*\* +hid\_t file\_id; + + + + +buffer\_ptr = malloc(size) + +file\_id = H5LTopen\_file\_image(buf, + buf\_len, + H5LT\_FILE\_IMAGE\_DONT\_COPY); + +Example 11. Building and passing a file image from one process to another + +4.4. Using a Template File +After the above examples, an example of the use of a template file might seem anti-climactic. A template file might be used to enforce consistency on file structure between files or in parallel HDF5 to avoid long sequences of collective operations to create the desired groups, datatypes, and possibly datasets. The following pseudo code outlines a potential use: + + + + +H5Pset\_file\_image(fapl\_id, buf, buf\_len); + + + + +Example 12. Using a template file + +Observe that the above pseudo code includes an unnecessary buffer allocation and copy in the call to H5Pset\_file\_image(). As we have already discussed ways of avoiding this, we will not address that issue here. + +What is interesting in this case is to consider why the application would find this use case attractive. + +In the serial case, at first glance there seems little reason to use the initial image facility at all. It is easy enough to use standard C calls to duplicate a template file, rename it as desired, and then open it as an HDF5 file. + +However, this assumes that the template file will always be available and in the expected place. This is a questionable assumption for an application that will be widely distributed. Thus, we can at least make an argument for either keeping an image of the template file in the executable or for including code for writing the desired standard definitions to new HDF5 files. + +Assuming the image is relatively small, we can further make an argument for the image in place of the code, as, quite simply, the image should be easier to maintain and modify with an HDF5 file editor. + +However, there remains the question of why one should pass the image to the HDF5 Library instead of writing it directly with standard C calls and then using HDF5 to open it. Other than convenience and a slight reduction in code size, we are hard pressed to offer a reason. + +In contrast, the argument is stronger in the parallel case since group, datatype, and dataset creations are all expensive collective operations. The argument is also weaker: simply copying an existing template file and opening it should lose many of its disadvantages in the HPC context although we would imagine that it is always useful to reduce the number of files in a deployment. + +In closing, we would like to consider one last point. In the parallel case, we would expect template files to be quite large. Parallel HDF5 requires eager space allocation for chunked datasets. For similar reasons, we would expect template files in this context to contain long sequences of zeros with a scattering of metadata here and there. Such files would compress well, and the compressed images would be cheap to distribute across the available processes if necessary. Once distributed, each process could uncompress the image and write to file those sections containing actual data that lay within the section of the file assigned to the process. This approach might be significantly faster than a simple copy as it would allow sparse writes, and thus it might provide a compelling use case for template files. However, this approach would require extending our current API to allow compressed images. We would also have to add the H5Pget/set\_image\_decompression\_callback() API calls. We see no problem in doing this. However, it is beyond the scope of the current effort, and thus we will not pursue the matter further unless there is interest in our doing so. + +5. Java Signatures for File Image Operations API Calls +Potential Java function call signatures for the file image operation APIs are described in this section. These have not yet been implemented, and there are no immediate plans for implementation. + +Note that the H5LTopen\_file\_image() call is omitted. Our practice has been to not support high-level library calls in Java. + +H5Pset\_file\_image + +int H5Pset\_file\_image(int fapl\_id, const byte[] buf\_ptr); +H5Pget\_file\_image + +herr\_t H5Pget\_file\_image(hid\_t fapl\_id, byte[] buf\_ptr\_ptr); +H5\_file\_image\_op\_t + +public static H5\_file\_image\_op\_t +{ + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET, + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY, + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET, + H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE, + H5\_FILE\_IMAGE\_OP\_FILE\_OPEN, + H5\_FILE\_IMAGE\_OP\_FILE\_RESIZE, + H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE +} +H5\_file\_image\_malloc\_cb + +public interface H5\_file\_image\_malloc\_cb extends Callbacks { + buf[] callback(H5\_file\_image\_op\_t file\_image\_op, CBuserdata udata); +} +H5\_file\_image\_memcpy\_cb + +public interface H5\_file\_image\_memcpy\_cb extends Callbacks { +buf[] callback(buf[] dest, const buf[] src, H5\_file\_image\_op\_t file\_image\_op, CBuserdata +udata); +} +H5\_file\_image\_realloc\_cb + +public interface H5\_file\_image\_realloc\_cb extends Callbacks { + buf[] callback(buf[] ptr, H5\_file\_image\_op\_t file\_image\_op, CBuserdata udata); +} +H5\_file\_image\_free\_cb + +public interface H5\_file\_image\_free\_cb extends Callbacks { + void callback(buf[] ptr, H5\_file\_image\_op\_t file\_image\_op, CBuserdata udata); +} +H5\_file\_udata\_copy\_cb + +public interface H5\_file\_udata\_copy\_cb extends Callbacks { + buf[] callback(CBuserdata udata); +} +H5\_file\_udata\_free\_cb + +public interface H5\_file\_udata\_free\_cb extends Callbacks { + void callback(CBuserdata udata); +} +H5\_file\_image\_callbacks\_t + +public abstract class H5\_file\_image\_callbacks\_t +{ + H5\_file\_image\_malloc\_cb image\_malloc; + H5\_file\_image\_memcpy\_cb image\_memcpy; + H5\_file\_image\_realloc\_cb image\_realloc; + H5\_file\_image\_free\_cb image\_free; + H5\_file\_udata\_copy\_cb udata\_copy; + H5\_file\_udata\_free\_cb udata\_free; + CBuserdata udata; + public H5\_file\_image\_callbacks\_t( + H5\_file\_image\_malloc\_cb image\_malloc, + H5\_file\_image\_memcpy\_cb image\_memcpy, + H5\_file\_image\_realloc\_cb image\_realloc, + H5\_file\_image\_free\_cb image\_free, + H5\_file\_udata\_copy\_cb udata\_copy, + H5\_file\_udata\_free\_cb udata\_free, + CBuserdata udata) { + this.image\_malloc = image\_malloc; + this.image\_memcpy = image\_memcpy; + this.image\_realloc = image\_realloc; + this.image\_free = image\_free; + this.udata\_copy = udata\_copy; + this.udata\_free = udata\_free; + this.udata = udata; + } +} +H5Pset\_file\_image\_callbacks + +int H5Pset\_file\_image\_callbacks(int fapl\_id, + H5\_file\_image\_callbacks\_t callbacks\_ptr); +H5Pget\_file\_image\_callbacks + +int H5Pget\_file\_image\_callbacks(int fapl\_id, + H5\_file\_image\_callbacks\_t[] callbacks\_ptr); +H5Fget\_file\_image + +long H5Fget\_file\_image(int file\_id, byte[] buf\_ptr); +6. Fortran Signatures for File Image Operations API Calls +Potential Fortran function call signatures for the file image operation APIs are described in this section. These have not yet been implemented, and there are no immediate plans for implementation. + +6.1. Low-level Fortran API Routines +The Fortran low-level APIs make use of Fortran 2003’s ISO\_C\_BINDING module in order to achieve portable and standard conforming interoperability with the C APIs. The C pointer (C\_PTR) and function pointer (C\_FUN\_PTR) types are returned from the intrinsic procedures C\_LOC(X) and C\_FUNLOC(X), respectively, defined in the ISO\_C\_BINDING module. The argument X is the data or function to which the C pointers point to and must have the TARGET attribute in the calling program. Note that the variable name lengths of the Fortran equivalent of the predefined C constants were shortened to less than 31 characters in order to be Fortran standard compliant. + +6.1.1. H5Pset\_file\_image\_f +The signature of H5Pset\_file\_image\_f is defined as follows: + +SUBROUTINE H5Pset\_file\_image\_f(fapl\_id, buf\_ptr, buf\_len, hdferr) +The parameters of H5Pset\_file\_image are defined as follows: + +INTEGER(hid\_t), INTENT(IN):: fapl\_id +Will contain the ID of the target file access property list. + +TYPE(C\_PTR), INTENT(IN):: buf\_ptr +Will supply the C pointer to the initial file image or C\_NULL\_PTR if no initial file image is desired. + +INTEGER(size\_t), INTENT(IN):: buf\_len +Will contain the size of the supplied buffer or 0 if no initial image is desired. + +INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure. + + + +6.1.2. H5Pget\_file\_image\_f +The signature of H5Pget\_file\_image\_f is defined as follows: + +SUBROUTINE H5Pget\_file\_image\_f(fapl\_id, buf\_ptr, buf\_len, hdferr) +The parameters of H5Pget\_file\_image\_f are defined as follows: + +INTEGER(hid\_t), INTENT(IN) :: fapl\_id +Will contain the ID of the target file access property list + +TYPE(C\_PTR), INTENT(INOUT), VALUE :: buf\_ptr +Will hold either a C\_NULL\_PTR or a scalar of type c\_ptr. If buf\_ptr is not C\_NULL\_PTR, on successful return, buf\_ptr shall contain a C pointer to a copy of the initial image provided in the last call to H5Pset\_file\_image\_f for the supplied fapl\_id, or buf\_ptr shall contain a C\_NULL\_PTR if there is no initial image set. The Fortran pointer can be obtained using the intrinsic C\_F\_POINTER. + +INTEGER(size\_t), INTENT(OUT) :: buf\_len +Will contain the value of the buffer parameter for the initial image in the supplied fapl\_id. The value will be 0 if no initial image is set. + +INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure. + + + +6.1.3. H5Pset\_file\_image\_callbacks\_f +The signature of H5Pset\_file\_image\_callbacks\_f is defined as follows: + +INTEGER :: H5\_IMAGE\_OP\_PROPERTY\_LIST\_SET\_F=0, + H5\_IMAGE\_OP\_PROPERTY\_LIST\_COPY\_F=1, + H5\_IMAGE\_OP\_PROPERTY\_LIST\_GET\_F=2, + H5\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE\_F=3, + H5\_IMAGE\_OP\_FILE\_OPEN\_F=4, + H5\_IMAGE\_OP\_FILE\_RESIZE\_F=5, + H5\_IMAGE\_OP\_FILE\_CLOSE\_F=6 +TYPE, BIND(C) :: H5\_file\_image\_callbacks\_t + TYPE(C\_FUN\_PTR), VALUE :: image\_malloc + TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy + TYPE(C\_FUN\_PTR), VALUE :: image\_realloc + TYPE(C\_FUN\_PTR), VALUE :: image\_free + TYPE(C\_FUN\_PTR), VALUE :: udata + TYPE(C\_FUN\_PTR), VALUE :: udata\_copy + TYPE(C\_FUN\_PTR), VALUE :: udata\_free + TYPE(C\_PTR), VALUE :: udata +END TYPE H5\_file\_image\_callbacks\_t +The semantics of the above values will be the same as those defined in the C enum. See Section 2.1.3 for more information. + +Fortran Callback APIs + +The Fortran callback APIs are shown below. + +FUNCTION op\_func(size, file\_image\_op, udata,) RESULT(image\_malloc) +INTEGER(size\_t) :: size +Will contain the size of the image buffer to allocate in bytes. +INTEGER :: file\_image\_op +Will be set to one of the values of H5\_IMAGE\_OP\_\* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C\_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. +TYPE(C\_FUN\_PTR), VALUE :: image\_malloc +Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call. + + +FUNCTION op\_func(dest, src, size, & file\_image\_op, udata) RESULT(image\_memcpy) +TYPE(C\_PTR), VALUE :: dest +Will contain the address of the buffer into which to copy. +TYPE(C\_PTR), VALUE :: src +Will contain the address of the buffer from which to copy +INTEGER(size\_t) :: size +Will contain the number of bytes to copy. +INTEGER :: file\_image\_op +Will be set to one of the values of H5\_IMAGE\_OP\_\* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C\_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. +TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy +Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call. + + +FUNCTION op\_func(ptr, size, & file\_image\_op, udata) RESULT(image\_realloc) +TYPE(C\_PTR), VALUE :: ptr +Will contain the pointer to the buffer being reallocated +INTEGER(size\_t) :: size +Will contain the desired size of the buffer after realloc in bytes. +INTEGER :: file\_image\_op +Will be set to one of the values of H5\_IMAGE\_OP\_\* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C\_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. +TYPE(C\_FUN\_PTR), VALUE :: image\_realloc +Shall contain a pointer to a unction functionality identical to the standard C library realloc() call. + + +FUNCTION op\_func(ptr, file\_image\_op, udata) RESULT(image\_free) +TYPE(C\_PTR), VALUE :: ptr +Will contain the pointer to the buffer being released. +INTEGER :: file\_image\_op +Will be set to one of the values of H5\_IMAGE\_OP\_\* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C\_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. +TYPE(C\_PTR), VALUE :: image\_free +Shall contain a pointer to a function with functionality identical to the standard C library free() call + + +FUNCTION op\_func(udata) RESULT(udata\_copy) +TYPE(C\_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. +TYPE(C\_FUN\_PTR), VALUE :: udata\_copy +Shall contain a pointer to a function that will allocate a buffer of suitable size, copy the contents of the supplied udata into the new buffer, and return the address of the new buffer. The function will return C\_NULL\_PTR on failure. + + +FUNCTION op\_func(udata) RESULT(udata\_free) +TYPE(C\_PTR), VALUE :: udata +Shall contain a pointer value, potentially to user-defined data, that will be passed to the image\_malloc, image\_memcpy, image\_realloc, and image\_free callbacks. + + +The signature of H5Pset\_file\_image\_callbacks\_f is defined as follows: + +SUBROUTINE H5Pset\_file\_image\_callbacks\_f(fapl\_id, &callbacks\_ptr, hdferr) +The parameters are defined as follows: + + + +INTEGER(hid\_t), INTENT(IN) :: fapl\_id +Will contain the ID of the target file access property list. + +TYPE(H5\_file\_image\_callbacks\_t), INTENT(IN) :: callbacks\_ptr +Will contain the callback derived type. callbacks\_ptr shall contain a pointer to the Fortran function via the intrinsic functions C\_LOC(X) and C\_FUNLOC(X). + +INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure. + + + +6.1.4. H5Pget\_file\_image\_callbacks\_f +The H5Pget\_file\_image\_callbacks\_f routine is designed to obtain the current file image callbacks from a file access property list. + +The signature is defined as follows + +SUBROUTINE H5Pget\_file\_image\_callbacks\_f(fapl\_id, callbacks\_ptr, hdferr) +The parameters are defined as follows: + +INTEGER(hid\_t), INTENT(IN) :: fapl\_id +Will contain the ID of the target file access property list. + +TYPE(H5\_file\_image\_callbacks\_t), INTENT(OUT) :: callbacks\_ptr +Will contain the callback derived type. Each member of the derived type shall have the same meaning as its C counterpart. See section 2.1.4 for more information. + +INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure. + + + +6.1.5. Fortran Virtual File Driver Feature Flags +Implementation of the H5Pget/set\_file\_image\_callbacks\_f() and H5Pget/set\_file\_image\_f() APIs requires a pair of new virtual file driver feature flags: + +H5FD\_FEAT\_LET\_IMAGE\_F +H5FD\_FEAT\_LET\_IMAGE\_CALLBACK\_F +See the “Virtual File Driver Feature Flags” section for more information. + +6.1.6. H5Fget\_file\_image\_f +The signature of H5Fget\_file\_image\_f shall be defined as follows: + +SUBROUTINE H5Fget\_file\_image\_f(file\_id, buf\_ptr, buf\_len, hdferr, buf\_size) +The parameters of H5Fget\_file\_image\_f are defined as follows: + +INTEGER(hid\_t), INTENT(IN) :: file\_id +Will contain the ID of the target file. + +TYPE(C\_PTR), INTENT(IN) :: buf\_ptr +Will contain a C pointer to the buffer into which the image of the HDF5 file is to be copied. If buf\_ptr is C\_NULL\_PTR, no data will be copied. + +INTEGER(size\_t), INTENT(IN) :: buf\_len +Will contain the size in bytes of the supplied buffer. + +INTEGER(ssizet\_t), INTENT(OUT), OPTIONAL :: buf\_size +Will indicate the buffer size required to store the file image (in other words, the length of the file). If only the buf\_size is needed, then buf\_ptr should be also be set to C\_NULL\_PTR + +INTEGER, INTENT(OUT) :: hdferr +Returns the error status: 0 for success and -1 for failure. + + + +See the “H5Fget\_file\_image” section for more information. + +6.2. High-level Fortran API Routine +The new Fortran high-level routine H5LTopen\_file\_image\_f will provide a wrapper for the high-level H5LTopen\_file\_image function. Consequently, the high-level Fortran API will not be implemented using low-level HDF5 Fortran APIs. +6.2.1. H5LTopen\_file\_image\_f +The signature of H5LTopen\_file\_image\_f is defined as follows: + +SUBROUTINE H5LTopen\_file\_image\_f(buf\_ptr, buf\_len, flags, file\_id, hdferr) +The parameters of H5LTopen\_file\_image\_f are defined as follows: + +TYPE(C\_PTR), INTENT(IN), VALUE :: buf\_ptr +Will contain a pointer to the supplied initial image. A C\_NULL\_PTR value is invalid and will cause H5LTopen\_file\_image\_f to fail. + +INTEGER(size\_t), INTENT(IN) :: buf\_len +Will contain the size of the supplied buffer. A value of 0 is invalid and will cause H5LTopen\_file\_image\_f to fail. + +INTEGER, INTENT(IN) :: flags +Will contain a set of flags indicating whether the image is to be opened read/write, whether HDF5 is to take control of the buffer, and how long the application promises to maintain the buffer. Possible flags are as follows: H5LT\_IMAGE\_OPEN\_RW\_F, H5LT\_IMAGE\_DONT\_COPY\_F, and H5LT\_IMAGE\_DONT\_RELEASE\_F. The C equivalent flags are defined in the “H5LTopen\_file\_image” section. + +INTEGER(hid\_t), INTENT(IN) :: file\_id +Will be a file ID on success. + +INTEGER, INTENT(OUT) :: hdferr +Returns the error status: 0 for success and -1 for failure. diff --git a/documentation/hdf5-docs/feature_docs/images/tutr-swmr1.png b/documentation/hdf5-docs/feature_docs/images/tutr-swmr1.png new file mode 100644 index 0000000000000000000000000000000000000000..711241619d62cd2a1dc94080fce7cc2274a87a3c GIT binary patch literal 86410 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 literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/feature_docs/images/tutr-swmr2.png b/documentation/hdf5-docs/feature_docs/images/tutr-swmr2.png new file mode 100644 index 0000000000000000000000000000000000000000..15c6b453a7f73da2f58ebd11aa4277dfd472c7e8 GIT binary patch literal 23079 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 literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-ex.png b/documentation/hdf5-docs/feature_docs/images/tutrvds-ex.png new file mode 100644 index 0000000000000000000000000000000000000000..c9867c9f331e93912e849b21f9e81ebc5a283393 GIT binary patch literal 30484 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 L>w1CG?T7yd2O2QY literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-map.png b/documentation/hdf5-docs/feature_docs/images/tutrvds-map.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb2013c3d04cd733571296d747cac6dfa8e4583 GIT binary patch literal 36966 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 literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-multimgs.png b/documentation/hdf5-docs/feature_docs/images/tutrvds-multimgs.png new file mode 100644 index 0000000000000000000000000000000000000000..68328cd62cb7950fee729f4196a41093d32277c9 GIT binary patch literal 278199 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

-%a{IRZ1nSjUTYp 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:FtArTx%{9?Pw+-D{z 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

dLv* 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

%H8H+23L)s*11k^4@ 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�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 literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/feature_docs/intro_SWMR.md b/documentation/hdf5-docs/feature_docs/intro_SWMR.md new file mode 100644 index 00000000..e5cb72be --- /dev/null +++ b/documentation/hdf5-docs/feature_docs/intro_SWMR.md @@ -0,0 +1,153 @@ +--- +title: Introduction to Single-Writer\_Multiple-Reader (SWMR) +redirect_from: + +--- + +# Introduction to Single-Writer\_Multiple-Reader (SWMR) + +Introduction to SWMR +The Single-Writer / Multiple-Reader (SWMR) feature enables multiple processes to read an HDF5 file while it is being written to (by a single process) without using locks or requiring communication between processes. + + + +All communication between processes must be performed via the HDF5 file. The HDF5 file under SWMR access must reside on a system that complies with POSIX write() semantics. + +The basic engineering challenge for this to work was to ensure that the readers of an HDF5 file always see a coherent (though possibly not up to date) HDF5 file. + +The issue is that when writing data there is information in the metadata cache in addition to the physical file on disk: + +However, the readers can only see the state contained in the physical file: + + + +The SWMR solution implements dependencies on when the metadata can be flushed to the file. This ensures that metadata cache flush operations occur in the proper order, so that there will never be internal file pointers in the physical file that point to invalid (unflushed) file addresses. + +A beneficial side effect of using SWMR access is better fault tolerance. It is more difficult to corrupt a file when using SWMR. + + +Documentation +SWMR User's Guide + + PDF + +HDF5 Library APIs +Page: +H5F_START_SWMR_WRITE — Enables SWMR writing mode for a file +Page: +H5DO_APPEND — Appends data to a dataset along a specified dimension +Page: +H5P_SET_OBJECT_FLUSH_CB — Sets a callback function to invoke when an object flush occurs in the file +Page: +H5P_GET_OBJECT_FLUSH_CB — Retrieves the object flush property values from the file access property list +Page: +H5O_DISABLE_MDC_FLUSHES — Prevents metadata entries for an HDF5 object from being flushed from the metadata cache to storage +Page: +H5O_ENABLE_MDC_FLUSHES — Enables flushing of dirty metadata entries from a file’s metadata cache +Page: +H5O_ARE_MDC_FLUSHES_DISABLED — Determines if an HDF5 object has had flushes of metadata entries disabled +Tools +Page: +h5watch — Outputs new records appended to a dataset as the dataset grows +Page: +h5format_convert — Converts the layout format version and chunked indexing types of datasets created with HDF5-1.10 so that applications built with HDF5-1.8 can access them +Page: +h5clear — Clears superblock status_flags field, removes metadata cache image, prints EOA and EOF, or sets EOA of a file +Design Documents +Error while fetching page properties report data: + +Programming Model +Please be aware that the SWMR feature requires that an HDF5 file be created with the latest file format. See H5P_SET_LIBVER_BOUNDS for more information. + +To use SWMR follow the the general programming model for creating and accessing HDF5 files and objects along with the steps described below. + +SWMR Writer: +The SWMR writer either opens an existing file and objects or creates them as follows. + +Open an existing file: + +Call H5Fopen using the H5F_ACC_SWMR_WRITE flag. +Begin writing datasets. +Periodically flush data. +Create a new file: + +Call H5Fcreate using the latest file format. +Create groups, datasets and attributes, and then close the attributes. +Call H5F_START_SWMR_WRITE to start SWMR access to the file. +Periodically flush data. +Example Code: + +Create the file using the latest file format property: + + fapl = H5Pcreate (H5P_FILE_ACCESS); + status = H5Pset_libver_bounds (fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST); + fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); +[Create objects (files, datasets, ...). Close any attributes and named datatype objects. Groups and datasets may remain open before starting SWMR access to them.] + +Start SWMR access to the file: + + status = H5Fstart_swmr_write (fid); +Reopen the datasets and start writing, periodically flushing data: + + status = H5Dwrite (dset_id, ...); + status = H5Dflush (dset_id); +SWMR Reader: +The SWMR reader must continually poll for new data: + + + +Call H5Fopen using the H5F_ACC_SWMR_READ flag. +Poll, checking the size of the dataset to see if there is new data available for reading. +Read new data, if any. +Example Code: + +Open the file using the SWMR read flag: + + fid = H5Fopen (filename, H5F_ACC_RDONLY | H5F_ACC_SWMR_READ, H5P_DEFAULT); +Open the dataset and then repeatedly poll the dataset, by getting the dimensions, reading new data, and refreshing: + + dset_id = H5Dopen (...); + space_id = H5Dget_space (...); + while (...) { + status = H5Dread (dset_id, ...); + status = H5Drefresh (dset_id); + space_id = H5Dget_space (...); + } + +Limitations and Scope +An HDF5 file under SWMR access must reside on a system that complies with POSIX write() semantics. It is also limited in scope as follows: + +The writer process is only allowed to modify raw data of existing datasets by; + +Appending data along any unlimited dimension. +Modifying existing data +The following operations are not allowed (and the corresponding HDF5 files will fail): + +The writer cannot add new objects to the file. +The writer cannot delete objects in the file. +The writer cannot modify or append data with variable length, string or region reference datatypes. +File space recycling is not allowed. As a result the size of a file modified by a SWMR writer may be larger than a file modified by a non-SWMR writer. + +Tools for Working with SWMR +Two new tools, h5watch and h5clear, are available for use with SWMR. The other HDF5 utilities have also been modified to recognize SWMR: + +The h5watch tool allows a user to monitor the growth of a dataset. +The h5clear tool clears the status flags in the superblock of an HDF5 file. +The rest of the HDF5 tools will exit gracefully but not work with SWMR otherwise. + +Programming Example +A good example of using SWMR is included with the HDF5 tests in the source code. You can run it while reading the file it creates. If you then interrupt the application and reader and look at the resulting file, you will see that the file is still valid. Follow these steps: + +Download the HDF5-1.10 source code to a local directory on a filesystem (that complies with POSIX write() semantics). Build the software. No special configuration options are needed to use SWMR. + +Invoke two command terminal windows. In one window go into the bin/ directory of the built binaries. In the other window go into the test/ directory of the HDF5-1.10 source code that was just built. + +In the window in the test/ directory compile and run use_append_chunk.c. The example writes a three dimensional dataset by planes (with chunks of size 1 x 256 x 256). + +In the other window (in the bin/ directory) run h5watch on the file created by use_append_chunk.c (use_append_chunk.h5). It should be run while use_append_chunk is executing and you will see valid data displayed with h5watch. + +Interrupt use_append_chunk while it is running, and stop h5watch. + +Use h5clear to clear the status flags in the superbock of the HDF5 file (use_append_chunk.h5). + +View the file with h5dump. You will see that it is a valid file even though the application did not close properly. It will contain data up to the point that it was interrupted. diff --git a/documentation/hdf5-docs/feature_docs/intro_VDS.md b/documentation/hdf5-docs/feature_docs/intro_VDS.md new file mode 100644 index 00000000..4517b624 --- /dev/null +++ b/documentation/hdf5-docs/feature_docs/intro_VDS.md @@ -0,0 +1,108 @@ +--- +title: Introduction to the Virtual Dataset - VDS +redirect_from: + +--- + +# Introduction to the Virtual Dataset - VDS + +The HDF5 Virtual Dataset (VDS) feature enables users to access data in a collection of HDF5 files as a single HDF5 dataset and to use the HDF5 APIs to work with that dataset. + +For example, your data may be collected into four files: + + + +You can map the datasets in the four files into a single VDS that can be accessed just like any other dataset: + + + + + +The mapping between a VDS and the HDF5 source datasets is persistent and transparent to an application. If a source file is missing the fill value will be displayed. + +See the Virtual (VDS) Documentation for complete details regarding the VDS feature. + +The VDS feature was implemented using hyperslab selection (H5S_SELECT_HYPERSLAB). See the tutorial on Reading From or Writing to a Subset of a Dataset for more information on selecting hyperslabs. + +Programming Model +To create a Virtual Dataset you simply follow the HDF5 programming model and add a few additional API calls to map the source code datasets to the VDS. + +Following are the steps for creating a Virtual Dataset: + +Create the source datasets that will comprise the VDS +Create the VDS: ‐ Define a datatype and dataspace (can be unlimited) +‐ Define the dataset creation property list (including fill value) +‐ (Repeat for each source dataset) Map elements from the source dataset to elements of the VDS: +Select elements in the source dataset (source selection) +Select elements in the virtual dataset (destination selection) +Map destination selections to source selections (see Functions for Working with a VDS) + +‐ Call H5Dcreate using the properties defined above +Access the VDS as a regular HDF5 dataset +Close the VDS when finished + +Functions for Working with a VDS +The H5P_SET_VIRTUAL API sets the mapping between virtual and source datasets. This is a dataset creation property list. Using this API will change the layout of the dataset to H5D_VIRTUAL. As with specifying any dataset creation property list, an instance of the property list is created, modified, passed into the dataset creation call and then closed: + + dcpl = H5Pcreate (H5P_DATASET_CREATE); + + src_space = H5screate_simple ... + status = H5Sselect_hyperslab (space, ... + status = H5Pset_virtual (dcpl, space, SRC_FILE[i], SRC_DATASET[i], src_space); + + dset = H5Dcreate2 (file, DATASET, H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT); + + status = H5Pclose (dcpl); +There are several other APIs introduced with Virtual Datasets, including query functions. For details see the complete list of HDF5 library APIs that support Virtual Datasets + + +Limitations +This feature requires HDF5-1.10. +The number of source datasets is unlimited. However, there is a limit on the size of each source dataset. + + +Programming Examples +Example 1 +This example creates three HDF5 files, each with a one-dimensional dataset of 6 elements. The datasets in these files are the source datasets that are then used to create a 4 x 6 Virtual Dataset with a fill value of -1. The first three rows of the VDS are mapped to the data from the three source datasets as shown below: + + + + + +In this example the three source datasets are mapped to the VDS with this code: + + src_space = H5Screate_simple (RANK1, dims, NULL); + for (i = 0; i < 3; i++) { + start[0] = (hsize_t)i; + /* Select i-th row in the virtual dataset; selection in the source datasets is the same. */ + status = H5Sselect_hyperslab (space, H5S_SELECT_SET, start, NULL, count, block); + status = H5Pset_virtual (dcpl, space, SRC_FILE[i], SRC_DATASET[i], src_space); + } +After the VDS is created and closed, it is reopened. The property list is then queried to determine the layout of the dataset and its mappings, and the data in the VDS is read and printed. + +This example is in the HDF5 source code and can be obtained from here: + +C Example + +For details on compiling an HDF5 application: [ Compiling HDF5 Applications ] + +Example 2 +This example shows how to use a C-style printf statement for specifying multiple source datasets as one virtual dataset. Only one mapping is required. In other words only one H5P_SET_VIRTUAL call is needed to map multiple datasets. It creates a 2-dimensional unlimited VDS. Then it re-opens the file, makes queries, and reads the virtual dataset. + +The source datasets are specified as A-0, A-1, A-2, and A-3. These are mapped to the virtual dataset with one call: + + status = H5Pset_virtual (dcpl, vspace, SRCFILE, "/A-%b", src_space); + +The %b indicates that the block count of the selection in the dimension should be used. + +C Example + +For details on compiling an HDF5 application: [ Compiling HDF5 Applications ] + + +Using h5dump with a VDS +The h5dump utility can be used to view a VDS. The h5dump output for a VDS looks exactly like that for any other dataset. If h5dump cannot find a source dataset then the fill value will be displayed. + +You can determine that a dataset is a VDS by looking at its properties with h5dump -p. It will display each source dataset mapping, beginning with Mapping 0. Below is an excerpt of the output of h5dump -p on the vds.h5 file created in Example 1.You can see that the entire source file a.h5 is mapped to the first row of the /VDS dataset: + + diff --git a/documentation/index.md b/documentation/index.md index 62a96b39..62c244cf 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -19,6 +19,7 @@ Look for more content here soon. * [Registered VOL Connectors](/documentation/hdf5-docs/registered_vol_connectors.html) * [Chunking in HDF5](hdf5-docs/chunking_in_hdf5.md) * [Release Specific Information](hdf5-docs/release_specific_info.md) - \*\*\* UNDER CONSTRUCTION \*\*\* +* [Features](hdf5-docs/feature_doc_list.md) - \*\*\* UNDER CONSTRUCTION \*\*\* Can't find what you're looking for? Visit [docs.hdfgroup.org](https://docs.hdfgroup.org/hdf5/v1_14/index.html) for many other documents that previously resided on the portal. From 6e1827108668d07e2076fb9dc2f7737214f3e224 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 23 Mar 2024 00:28:12 -0400 Subject: [PATCH 13/44] Update feature docs --- documentation/hdf5-docs/feature_doc_list.md | 2 + .../feature_docs/cp_committed_dt_H5Ocopy.md | 51 +++--- .../feature_docs/data_flow_pline_H5Dread.md | 49 +++--- .../hdf5-docs/feature_docs/file_image_ops.md | 150 ++++++++++-------- .../hdf5-docs/feature_docs/intro_SWMR.md | 65 ++++---- .../hdf5-docs/feature_docs/intro_VDS.md | 29 ++-- 6 files changed, 183 insertions(+), 163 deletions(-) diff --git a/documentation/hdf5-docs/feature_doc_list.md b/documentation/hdf5-docs/feature_doc_list.md index 35cce898..9025fc67 100644 --- a/documentation/hdf5-docs/feature_doc_list.md +++ b/documentation/hdf5-docs/feature_doc_list.md @@ -4,6 +4,8 @@ redirect_from: --- +##\*\*\* UNDER CONSTRUCTION \*\*\* + # HDF5 Features ### [HDF5 File Image Operations](feature_docs/file_image_ops.md) diff --git a/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md b/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md index ba5a224b..8de9ba82 100644 --- a/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md +++ b/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md @@ -1,8 +1,9 @@ --- title: Copying Committed Datatypes with H5Ocopy -redirect_from: +redirect\_from: --- +##\*\*\* UNDER CONSTRUCTION \*\*\* # Copying Committed Datatypes with H5Ocopy @@ -16,28 +17,28 @@ When copying a dataset that uses a committed datatype or an object with an attri For example, imagine that a user has an application that automatically creates many data files, each with many datasets that all use a single committed datatype. At the end of a project, the user wants to merge all of these files into a single file. The HDF5 Library can have all of the datasets in the combined file use the same committed datatype, but the default behavior of the library is to create an anonymous committed datatype for each dataset. -To make sure that shared committed datatypes in the source are shared in the copy, use the H5Pset_copy_object property list API routine to set the H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG flag. When this flag is set and H5Ocopy encounters an object or attribute that uses a committed datatype, H5Ocopy will search for a matching committed datatype in the destination file. If a matching committed datatype is found, then it will be used by the copied dataset or attribute. The next few paragraphs describe in more detail the process that H5Ocopy goes through. +To make sure that shared committed datatypes in the source are shared in the copy, use the H5Pset\_copy\_object property list API routine to set the H5O\_COPY\_MERGE\_COMMITTED\_DTYPE\_FLAG flag. When this flag is set and H5Ocopy encounters an object or attribute that uses a committed datatype, H5Ocopy will search for a matching committed datatype in the destination file. If a matching committed datatype is found, then it will be used by the copied dataset or attribute. The next few paragraphs describe in more detail the process that H5Ocopy goes through. -When the H5O_COPY_MERGE_COMMITTED_DTYPE_FLAG flag is set, H5Ocopy will search the destination file for committed datatypes and build a temporary list in memory of all the committed datatypes it finds. Then, whenever H5Ocopy encounters a dataset that uses a committed datatype or an object with an attribute that uses a committed datatype in the source, it will check that list to see if it contains a datatype equal to the source datatype. If H5Ocopy finds an equal datatype, it will modify the copied object or attribute to use the found committed datatype as its datatype. H5Ocopy will then update the list if a new committed datatype is created in the destination file as a result of the copy. When later datasets and attributes using committed datatypes are encountered, the library will again check to see if the list contains a matching datatype. +When the H5O\_COPY\_MERGE\_COMMITTED\_DTYPE\_FLAG flag is set, H5Ocopy will search the destination file for committed datatypes and build a temporary list in memory of all the committed datatypes it finds. Then, whenever H5Ocopy encounters a dataset that uses a committed datatype or an object with an attribute that uses a committed datatype in the source, it will check that list to see if it contains a datatype equal to the source datatype. If H5Ocopy finds an equal datatype, it will modify the copied object or attribute to use the found committed datatype as its datatype. H5Ocopy will then update the list if a new committed datatype is created in the destination file as a result of the copy. When later datasets and attributes using committed datatypes are encountered, the library will again check to see if the list contains a matching datatype. To determine if two committed datatypes are equal, the library will compare their descriptions in a manner similar to H5Tequal. In addition, if either committed datatype has one or more attributes, then all attributes must be present in both committed datatypes, and the attributes must all be identical. Each attribute’s datatype description, dataspace, and raw data must be identical. However, if an attribute uses a committed datatype, then the attributes of the attribute’s committed datatype will not be compared. When H5Ocopy encounters a committed datatype object in the source file, it will similarly search for a matching committed datatype in the destination file. If a match is found, the library will create a hard link in the destination file to the found datatype. If a match is not found, the library will copy the committed datatype normally and add it to the temporary list of committed datatypes in the destination file. -By default, H5Ocopy will search the entire destination file for a matching committed datatype. It is possible to focus where H5Ocopy will search. This focusing should result in a faster search. If there are locations in the destination file where a matching committed datatype might be found, then those locations can be specified with the H5Padd_merge_committed_dtype_path property. +By default, H5Ocopy will search the entire destination file for a matching committed datatype. It is possible to focus where H5Ocopy will search. This focusing should result in a faster search. If there are locations in the destination file where a matching committed datatype might be found, then those locations can be specified with the H5Padd\_merge\_committed\_dtype\_path property. The example below shows how to enable the feature described above for use with H5Ocopy. Example 1. Setting the object copy property list -hid_t ocpypl_id; -ocpypl_id = H5Pcreate(H5P_OBJECT_COPY); -status = H5Pset_copy_object(ocpypl_id, H5O_COPY_MERGE_COMMITTED_DT_FLAG); - status = H5Ocopy(file1_id, src_name, file2_id, dst_name, ocpypl_id, H5P_DEFAULT); +hid\_t ocpypl\_id; +ocpypl\_id = H5Pcreate(H5P\_OBJECT\_COPY); +status = H5Pset\_copy\_object(ocpypl\_id, H5O\_COPY\_MERGE\_COMMITTED\_DT\_FLAG); + status = H5Ocopy(file1\_id, src\_name, file2\_id, dst\_name, ocpypl\_id, H5P\_DEFAULT); 1.1. Callback Function -If no matching datatype is found in the locations specified by the call to H5Padd_merge_committed_dtype_path, then H5Ocopy will by default search the entire destination file. In some cases, this may not be desirable. For instance, the user may expect the datatype to always have a match in the specified locations and may wish to return an error if a match is not found. The user may also have a very large file for which the full search incurs a substantial performance penalty. In this instance, the user may wish to log these events so that other datatypes can be added with H5Padd_merge_committed_dtype_path, or the user may wish to abort the search and copy the datatype normally. +If no matching datatype is found in the locations specified by the call to H5Padd\_merge\_committed\_dtype\_path, then H5Ocopy will by default search the entire destination file. In some cases, this may not be desirable. For instance, the user may expect the datatype to always have a match in the specified locations and may wish to return an error if a match is not found. The user may also have a very large file for which the full search incurs a substantial performance penalty. In this instance, the user may wish to log these events so that other datatypes can be added with H5Padd\_merge\_committed\_dtype\_path, or the user may wish to abort the search and copy the datatype normally. -To support these use cases, the functions H5Pset_mcdt_search_cb and H5Pget_mcdt_search_cb have been added. These functions allow the user to define a callback function that will be called every time the list of paths added by H5Padd_merge_committed_dtype_path has been exhausted but before beginning the full search of the file. The prototype for the callback function is defined by H5O_mcdt_search_cb_t. The only argument to the callback function is a user supplied user data pointer, and the return value is an enum, defined by H5O_mndt_search_ret_t, which tells the library to either continue with the full file search, abort the search and copy the datatype normally (create a new committed datatype in the destination file), or return an error. +To support these use cases, the functions H5Pset\_mcdt\_search\_cb and H5Pget\_mcdt\_search\_cb have been added. These functions allow the user to define a callback function that will be called every time the list of paths added by H5Padd\_merge\_committed\_dtype\_path has been exhausted but before beginning the full search of the file. The prototype for the callback function is defined by H5O\_mcdt\_search\_cb\_t. The only argument to the callback function is a user supplied user data pointer, and the return value is an enum, defined by H5O\_mndt\_search\_ret\_t, which tells the library to either continue with the full file search, abort the search and copy the datatype normally (create a new committed datatype in the destination file), or return an error. 1.2. Function Summary Functions used in committed datatype copying operations are listed below. @@ -49,33 +50,33 @@ Fortran Purpose H5Ocopy -H5ocopy_f +H5ocopy\_f Allows an application to copy an object within an HDF5 file or to another HDF5 file. -H5Pset_copy_object -h5pset_copy_object_f +H5Pset\_copy\_object +h5pset\_copy\_object\_f Allows an application to set properties to be used when an object is copied. -H5Padd_merge_committed_dtype_path +H5Padd\_merge\_committed\_dtype\_path (none) Allows an application to add a path to the list of paths that will be searched in the destination file for a matching committed datatype. -H5Pfree_merge_committed_dtype_paths +H5Pfree\_merge\_committed\_dtype\_paths (none) -Allows an application to clear the list of paths stored in the object copy property list ocpypl_id. -H5Pset_mcdt_search_cb +Allows an application to clear the list of paths stored in the object copy property list ocpypl\_id. +H5Pset\_mcdt\_search\_cb (none) Allows an application to set the callback function that H5Ocopy will invoke before searching the entire destination file for a matching committed datatype. -H5Pget_mcdt_search_cb +H5Pget\_mcdt\_search\_cb (none) Allows an application to retrieve the callback function from the specified object copy property list. -H5O_mcdt_search_cb_t +H5O\_mcdt\_search\_cb\_t (none) -Definition of the callback function set by H5Pset_mcdt_search_cb. Provides the mechanism by which a user application may set an action for H5Ocopy to take after checking all suggested paths for a matching committed datatype but before starting the global search of the destination file. +Definition of the callback function set by H5Pset\_mcdt\_search\_cb. Provides the mechanism by which a user application may set an action for H5Ocopy to take after checking all suggested paths for a matching committed datatype but before starting the global search of the destination file. 1.3. Resources See the following for more information. @@ -84,9 +85,9 @@ See the “HDF5 Datatypes” chapter in the HDF5 User’s Guide. See these entries in the HDF5 Reference Manual: H5Ocopy -H5Pset_copy_object -H5Padd_merge_committed_dtype_path -H5Pfree_merge_committed_dtype_paths -H5Pset_mcdt_search_cb -H5Pget_mcdt_search_cb +H5Pset\_copy\_object +H5Padd\_merge\_committed\_dtype\_path +H5Pfree\_merge\_committed\_dtype\_paths +H5Pset\_mcdt\_search\_cb +H5Pget\_mcdt\_search\_cb diff --git a/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md b/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md index d105d3b0..cd942a6f 100644 --- a/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md +++ b/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md @@ -1,8 +1,9 @@ --- title: HDF5 Data Flow Pipeline for H5Dread -redirect_from: +redirect\_from: --- +##\*\*\* UNDER CONSTRUCTION \*\*\* # HDF5 Data Flow Pipeline for H5Dread @@ -78,12 +79,12 @@ Hyperslab selection for source A hyperslab selection is used to specify the region from dataset D that will be transferred with the H5Dread call. A 4 x 4 array of elements, positioned at <1,1> will be read. The C code to do the selection of the hyperslab in the file dataspace is shown here: /* get the file dataspace */ -space_src = H5Dget_space(dataset); +space\_src = H5Dget\_space(dataset); /* define hyperslab in the dataset */ -start_src[0] = 1; start_src[1] = 1; -count_src[0] = 4; count_src[1] = 4; -status = H5Sselect_hyperslab(space_src, H5S_SELECT_SET, start_src, NULL, +start\_src[0] = 1; start\_src[1] = 1; +count\_src[0] = 4; count\_src[1] = 4; +status = H5Sselect\_hyperslab(space\_src, H5S\_SELECT\_SET, start\_src, NULL, Figure 1 shows a conceptual representation of dataset D with uncompressed data. The desired region and the chunks that contain it are shown in green and yellow, respectively. @@ -127,16 +128,16 @@ int destA[4][4]; ... /* define memory dataspace */ -dims_destA[0] = 4; dims_destA[1] = 4; -space_destA = H5Screate_simple(2,dims_destA,NULL); +dims\_destA[0] = 4; dims\_destA[1] = 4; +space\_destA = H5Screate\_simple(2,dims\_destA,NULL); /* create data transfer property list and specify value transformation */ -dxpl_id_vtrans = H5Pcreate(H5P_DATASET_XFER); -H5Pset_data_transform(dxpl_id_vtrans,“x+2”); +dxpl\_id\_vtrans = H5Pcreate(H5P\_DATASET\_XFER); +H5Pset\_data\_transform(dxpl\_id\_vtrans,“x+2”); /* call H5Dread */ -status = H5Dread (dataset, H5T_NATIVE_INT, space_destA, space_src, - dxpl_id_vtrans, destA ) +status = H5Dread (dataset, H5T\_NATIVE\_INT, space\_destA, space\_src, + dxpl\_id\_vtrans, destA ) 2.3 Example B In the second example, the application’s memory buffer is2 ax 16 array. The 16 elements read will be distributed non-sequentially in the application’s buffer, as described by a hyperslab selection in the memory dataspace parameter. @@ -162,19 +163,19 @@ int destB[2][16]; ... /* define memory dataspace */ -dims_destB[0] = 2; dims_destB[1] = 16; -space_destB = H5Screate_simple(2,dims_destB,NULL); +dims\_destB[0] = 2; dims\_destB[1] = 16; +space\_destB = H5Screate\_simple(2,dims\_destB,NULL); /* define memory hyperslab selection */ -start_destB[0] = 0; start_destB[1] = 0; -block_destB[0] = 2; block_destB[1] = 1; -count_destB[0] = 1; count_destB[1] = 8; -stride_destB[0] = 2; stride_destB[1] = 2; -status = H5Sselect_hyperslab(space_destB, H5S_SELECT_SET, start_destB, - stride_destB, count_destB, block_destB); +start\_destB[0] = 0; start\_destB[1] = 0; +block\_destB[0] = 2; block\_destB[1] = 1; +count\_destB[0] = 1; count\_destB[1] = 8; +stride\_destB[0] = 2; stride\_destB[1] = 2; +status = H5Sselect\_hyperslab(space\_destB, H5S\_SELECT\_SET, start\_destB, + stride\_destB, count\_destB, block\_destB); /* call H5Dread */ -status = H5Dread (dataset, H5T_NATIVE_INT, space_destB, space_src, H5P_DEFAULT, destB +status = H5Dread (dataset, H5T\_NATIVE\_INT, space\_destB, space\_src, H5P\_DEFAULT, destB 3. Data Flow Pipeline The HDF5 library performs a series of steps when H5Dread is called. For datasets with chunk storage, each chunk that contains data to be read is individually processed. After all of the chunks have been read and processed, the library returns from the H5Dread call. @@ -188,7 +189,7 @@ If one or more filters were applied when the dataset was written, as they were i 3.2 Step 2: Reverse filter(s) Filters in HDF5 -The HDF5 library allows applications to specify filters to apply when a dataset is written to an HDF5 file via the H5Pset_filter call. These filters perform operations such as compression, encryption, a checksum computation. Each filter operation applied when a dataset is written must be “reversed” when the dataset is read. For instance, if a dataset was compressed when written, it must be uncompressed when read. +The HDF5 library allows applications to specify filters to apply when a dataset is written to an HDF5 file via the H5Pset\_filter call. These filters perform operations such as compression, encryption, a checksum computation. Each filter operation applied when a dataset is written must be “reversed” when the dataset is read. For instance, if a dataset was compressed when written, it must be uncompressed when read. If multiple filters are specified for the write, the application controls the order in which the filter operations are applied to the dataset. The read operation reverses the filter operations in the opposite order to the one used when the dataset was written. That is, the last filter applied when writing is the first filter reversed when reading, and so on. @@ -199,7 +200,7 @@ Using memory in the application’s memory space (heap) that is managed by the H Checksum error detection - Checksum error detection is enabled by default. H5Pset_edc_check can be used to disable checksum error detection + Checksum error detection is enabled by default. H5Pset\_edc\_check can be used to disable checksum error detection 3.2.2 Uncompress data Again using memory in the application’s memory space (heap) that is managed by the HDF5 library, the DEFLATE filter is reversed and the current chunk is uncompressed. @@ -209,7 +210,7 @@ HDF5 chunk cache Every HDF5 dataset with the chunked storage format has an HDF5 chunk cache associated with it. The HDF5 chunk cache for the dataset is allocated from the application’s memory and managed by the HDF5 library. As its name suggests, the cache remains allocated across multiple calls, and is used to provide performance optimizations in accessing data. -The default size of each HDF5 chunk cache is 1 MB in HDF5 Releases 1.6.x and 1.8.x. H5Pset_chunk_cache, introduced in Release 1.8.3, allows control of the chunk cache size on a per‐dataset basis. +The default size of each HDF5 chunk cache is 1 MB in HDF5 Releases 1.6.x and 1.8.x. H5Pset\_chunk\_cache, introduced in Release 1.8.3, allows control of the chunk cache size on a per‐dataset basis. If there is sufficient space in dataset D’s chunk cache, the data for the current chunk is stored there. Otherwise, it is temporarily stored on the heap in memory managed by the HDF5 library. Data in the chunk cache always has the disk datatype representation and is always in the “filters reversed” form. @@ -233,7 +234,7 @@ For the purpose of explanation, assume the temporary buffer is 64 bytes. In the Temporary buffer size -The default size of the temporary buffer used for datatype conversion and/or value transformation is 1 MB in Release 1.8.2. The size can be controlled with H5Pset_buffer. +The default size of the temporary buffer used for datatype conversion and/or value transformation is 1 MB in Release 1.8.2. The size can be controlled with H5Pset\_buffer. The following steps are taken for each chunk. diff --git a/documentation/hdf5-docs/feature_docs/file_image_ops.md b/documentation/hdf5-docs/feature_docs/file_image_ops.md index 366aa129..7afbfa8f 100644 --- a/documentation/hdf5-docs/feature_docs/file_image_ops.md +++ b/documentation/hdf5-docs/feature_docs/file_image_ops.md @@ -3,6 +3,7 @@ title: HDF5 File Image Operations redirect_from: - /display/HDF5/Migrating+from+HDF5+1.10+to+HDF5+1.12.html --- +##\*\*\* UNDER CONSTRUCTION \*\*\* # HDF5 File Image Operations @@ -13,44 +14,57 @@ redirect_from: * [Developer Prerequisites](#developer-prerequisites) * [Resources](#resources) -**[2. C API Call Syntax](c-api-call-syntax)** +**[2. C API Call Syntax](#c-api-call-syntax)** - * [Low-level C API Routines](#low-level-c-api-routines) - - [H5Pset\_file\_image](#h5pset_file_image) - - [H5Pget\_file\_image](#h5pget_file_image) - - [H5Pset\_file\_image\_callbacks](#h5pset_file_image_callbacks) - - [H5Pget\_file\_image\_callbacks](#h5pget_file_image_callbacks) - - [Virtual File Driver Feature Flags](#virtual-file-driver-feature-flags) - - [H5Fget\_file\_image](#h5fget_file_image) - * [High-level C API Routine](#high-level-c-api-routine]) - - [H5LTopen\_file\_image](#h5ltopen_file_image) + [2.1. Low-level C API Routines](#low-level-c-api-routines) + + [2.1.1. H5Pset\_file\_image](#h5pset_file_image)
+ [2.1.2. H5Pget\_file\_image](#h5pget_file_image)
+ [2.1.3. H5Pset\_file\_image\_callbacks](#h5pset_file_image_callbacks)
+ [2.1.4. H5Pget\_file\_image\_callbacks](#h5pget_file_image_callbacks)
+ [2.1.5. Virtual File Driver Feature Flags](#virtual-file-driver-feature-flags)
+ [2.1.6. H5Fget\_file\_image](#h5fget_file_image) + + [2.2. High-level C API Routine](#high-level-c-api-routine])
+ [2.2.1. H5LTopen\_file\_image](#h5ltopen_file_image) **[3. C API Call Semantics](#c-api-call-semantics)** - * [File Image Callback Semantics](#) - * [Buffer Ownership](#) - * [Sharing a File image Buffer with the HDF5 Library](#) - * [File Driver Considerations](#) - * [Initial File Image Semantics](#) - * [Applying Initial File Image Semantics to the Core File Driver](#) -## Examples](#examples)](#) - * [Reading an In-memory HDF5 File Image](#) - * [In-memory HDF5 File Image Construction](#) - * [Using HDF5 to Construct and Read a Data Packet](#) - * [Using a Template File](#) -## [Java Signatures for File Image Operations API Calls](#Java Signatures for File Image Operations API Calls) -## [Fortran Signatures for File Image Operations API Calls](#Fortran Signatures for File Image Operations API Calls) - * [[Low-level Fortran API Routines](#) - * [H5Pset\_file\_image\_f](#) - * [H5Pget\_file\_image\_f](#) - * [H5Pset\_file\_image\_callbacks\_f](#) - * [H5Pget\_file\_image\_callbacks\_f](#) - * [Fortran Virtual File Driver Feature Flags](#) - * [H5Fget\_file\_image\_f](#) - * [High-level Fortran API Routine](#) - * [H5LTopen\_file\_image\_f](#) - -## Introduction to HDF5 File Image Operations + [3.1. File Image Callback Semantics](#file-image-callback-semantics) + + [3.1.1. Buffer Ownership](#buffer-ownership)
+ [3.1.2. Sharing a File image Buffer with the HDF5 Library](#sharing-a-file-image-buffer-with-the-hdf5-library)
+ [3.1.3. File Driver Considerations](#file-driver-considerations) + + [3.2. Initial File Image Semantics](#initial-file-image-semantics)
+ [3.2.1 Applying Initial File Image Semantics to the Core File Driver](#applying-initial-file-image-semantics) + +**[4. Examples](#examples)** + + [4.1. Reading an In-memory HDF5 File Image](#reading-an-in-memory-hdf5-file-image)
+ [4.2. In-memory HDF5 File Image Construction](#in-memory-hdf5-file-image-construction)
+ [4.3. Using HDF5 to Construct and Read a Data Packet](#using-hdf5-to-construct-and-read-a-data-packet)
+ [4.4. Using a Template File](#using-template-file)
+ +**[5. Java Signatures for File Image Operations API Calls](#java-signatures-for-file-image-operations-api-calls)** + +**[6. Fortran Signatures for File Image Operations API Calls](#fortran-signatures-for-file-image-operations-api-calls)** + + [6.1. Low-level Fortran API Routines](#) + + [6.1.1. H5Pset\_file\_image\_f](#)
+ [6.1.2. H5Pget\_file\_image\_f](#)
+ [6.1.3. H5Pset\_file\_image\_callbacks\_f](#)
+ [6.1.4. H5Pget\_file\_image\_callbacks\_f](#)
+ [6.1.5. Fortran Virtual File Driver Feature Flags](#)
+ [6.1.6. H5Fget\_file\_image\_f](#) + + [6.2. High-level Fortran API Routine](#) + + [6.2.1. H5LTopen\_file\_image\_f](#) + + +## 1. Introduction to HDF5 File Image Operations File image operations allow users to work with HDF5 files in memory in the same ways that users currently work with HDF5 files on disk. Disk I/O is not required when file images are opened, created, read from, or written to. An HDF5 file image is an HDF5 file that is held in a buffer in main memory. Setting up a file image in memory involves using either a buffer in the file access property list or a buffer in the Core (aka Memory) file driver. @@ -61,7 +75,7 @@ The challenge of working with files in memory buffers is maximizing performance If invoked with the appropriate flags, the H5LTopen\_file\_image() high level library call should deal with these challenges in most cases. However, some applications may require the programmer to address these issues directly. -### File Image Operations Function Summary +### 1.1. File Image Operations Function Summary Functions used in file image operations are listed below. Function Listing 1. File image operations functions @@ -75,7 +89,7 @@ H5Pget\_file\_image\_callbacks Allows an application to obtain the current file H5Fget\_file\_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. H5LTopen\_file\_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. -### Abbreviations +### 1.2. Abbreviations The following abbreviations are used in this document: @@ -97,10 +111,10 @@ VFL Virtual File Layer -### Developer Prerequisites +### 1.3. Developer Prerequisites Developers who use the file image operations described in this document should be proficient and experienced users of the HDF5 C Library APIs. More specifically, developers should have a working knowledge of property lists, callbacks, and virtual file drivers. -### Resources +### 1.4. Resources See the following for more information. The “RFC: File Image Operations” is the primary source for the information in this document. @@ -111,10 +125,10 @@ The H5P\_SET\_FAPL\_CORE function call can be used to modify the file access pro Links to the Virtual File Layer and List of VFL Functions documents can be found in the HDF5 Technical Notes. -2. C API Call Syntax +## 2. C API Call Syntax The C API function calls described in this chapter fall into two categories: low-level routines that are part of the main HDF5 C Library and one high-level routine that is part of the “lite” API in the high-level wrapper library. The high-level routine uses the low-level routines and presents frequently requested functionality conveniently packaged for application developers’ use. -2.1. Low-level C API Routines +### 2.1. Low-level C API Routines The purpose of this section is to describe the low-level C API routines that support file image operations. These routines allow an in-memory image of an HDF5 file to be opened without requiring file system I/O. The basic approach to opening an in-memory image of an HDF5 file is to pass the image to the Core file driver, and then tell the Core file driver to open the file. We do this by using the H5Pget/set\_file\_image calls. These calls allow the user to specify an initial file image. @@ -125,7 +139,7 @@ The property list facility in HDF5 is employed in file image operations. This fa The sub-sections below describe the low-level C APIs that are used with file image operations. -2.1.1. H5Pset\_file\_image +#### 2.1.1. H5Pset\_file\_image The H5Pset\_file\_image routine allows an application to provide an image for a file driver to use as the initial contents of the file. This call was designed initially for use with the Core VFD, but it can be used with any VFD that supports using an initial file image when opening a file. See the “Virtual File Driver Feature Flags” section for more information. Calling this routine makes a copy of the provided file image buffer. See the “H5Pset\_file\_image\_callbacks” section for more information. The signature of H5Pset\_file\_image is defined as follows: @@ -142,7 +156,7 @@ Given the tight interaction between the file image callbacks and the file image, With properly constructed file image callbacks, it is possible to avoid actually copying the file image. The particulars of this are discussed in greater detail in the “C API Call Semantics” chapter and in the “Examples” chapter. -2.1.2. H5Pget\_file\_image +#### 2.1.2. H5Pget\_file\_image The H5Pget\_file\_image routine allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. This routine uses the file image callbacks (if defined) when allocating and loading the buffer to return to the application, or it uses malloc and memcpy if the callbacks are undefined. When malloc and memcpy are used, it will be the caller’s responsibility to discard the returned buffer via a call to free. The signature of H5Pget\_file\_image is defined as follows: @@ -155,7 +169,7 @@ buf\_ptr\_ptr contains a NULL or a pointer to a void\*. If buf\_ptr\_ptr is not buf\_len\_ptr contains a NULL or a pointer to size\_t. If buf\_len\_ptr is not NULL, on successful return, \*buf\_len\_ptr will contain the value of the buf\_len parameter for the initial image in the supplied fapl\_id. If no initial image is set, the value of \*buf\_len\_ptr will be 0. As with H5Pset\_file\_image, appropriately defined file image callbacks can allow this function to avoid buffer allocation and memory copy operations. -2.1.3. H5Pset\_file\_image\_callbacks +#### 2.1.3. H5Pset\_file\_image\_callbacks The H5Pset\_file\_image\_callbacks API call exists to allow an application to control the management of file image buffers through user defined callbacks. These callbacks will be used in the management of file image buffers in property lists and in select file drivers. These routines are invoked when a new file image buffer is allocated, when an existing file image buffer is copied or resized, or when a file image buffer is released from use. From the perspective of the HDF5 Library, the operations of the image\_malloc, image\_memcpy, image\_realloc, and image\_free callbacks must be identical to those of the corresponding C standard library calls (malloc, memcpy, realloc, and free). While the operations must be identical, the file image callbacks have more parameters. The callbacks and their parameters are described below. The return values of image\_malloc and image\_realloc are identical to the return values of malloc and realloc. However, the return values of image\_memcpy and image\_free are different than the return values of memcpy and free: the return values of image\_memcpy and image\_free can also indicate failure. See the “File Image Callback Semantics” section for more information. The signature of H5Pset\_file\_image\_callbacks is defined as follows: @@ -245,7 +259,7 @@ In closing our discussion of H5Pset\_file\_image\_callbacks(), we note the inter For more information on writing the file image to disk, set the backing\_store parameter. See the H5Pset\_fapl\_core entry in the HDF5 Reference Manual. -2.1.4. H5Pget\_file\_image\_callbacks +#### 2.1.4. H5Pget\_file\_image\_callbacks The H5Pget\_file\_image\_callbacks routine is designed to obtain the current file image callbacks from a file access property list. The signature of H5Pget\_file\_image\_callbacks() is defined as follows: @@ -284,7 +298,7 @@ Finally, it is logically possible that a file driver would set the H5FD\_FEAT\_C -2.1.6. H5Fget\_file\_image +#### 2.1.6. H5Fget\_file\_image The purpose of the H5Fget\_file\_image routine is to provide a simple way to retrieve a copy of the image of an existing, open file. This routine can be used with files opened using the SEC2 (aka POSIX), STDIO, and Core (aka Memory) VFDs. The signature of H5Fget\_file\_image is defined as follows: @@ -311,10 +325,10 @@ Thus we will not support the Family file driver in H5Fget\_file\_image() unless -2.2. High-level C API Routine +### 2.2. High-level C API Routine The H5LTopen\_file\_image high-level routine encapsulates the capabilities of routines in the main HDF5 Library with conveniently accessible abstractions. -2.2.1. H5LTopen\_file\_image +#### 2.2.1. H5LTopen\_file\_image The H5LTopen\_file\_image routine is designed to provide an easier way to open an initial file image with the Core VFD. Flags to H5LTopen\_file\_image allow for various file image buffer ownership policies to be requested. See the HDF5 Reference Manual for more information on high-level APIs. The signature of H5LTopen\_file\_image is defined as follows: @@ -404,10 +418,10 @@ Note that there is no way currently to specify a “backing store” file name i -3. C API Call Semantics +## 3. C API Call Semantics The purpose of this chapter is to describe some issues that developers should consider when using file image buffers, property lists, and callback APIs. -3.1. File Image Callback Semantics +### 3.1. File Image Callback Semantics The H5Fget/set\_file\_image\_callbacks() API calls allow an application to hook the memory management operations used when allocating, duplicating, and discarding file images in the property list, in the Core file driver, and potentially in any in-memory file driver developed in the future. From the perspective of the HDF5 Library, the supplied image\_malloc(), image\_memcpy(), image\_realloc(), and image\_free() callback routines must function identically to the C standard library malloc(), memcpy(), realloc(), and free() calls. What happens on the application side can be much more nuanced, particularly with the ability to pass user data to the callbacks. However, whatever the application does with these calls, it must maintain the illusion that the calls have had the expected effect. Maintaining this illusion requires some understanding of how the property list structure works, and what HDF5 will do with the initial images passed to it. @@ -426,14 +440,14 @@ Thus the property list mechanism must think that it is allocating a new buffer a Similar illusions must be maintained when a file image buffer is copied into the Core file driver (or any future driver that uses the file image callbacks) when the file driver re-sizes the buffer containing the image and finally when the driver discards the buffer. -3.1.1. Buffer Ownership +#### 3.1.1. Buffer Ownership The owner of a file image in a buffer is the party that has the responsibility to discard the file image buffer when it is no longer needed. In this context, the owner is either the HDF5 Library or the application program. We implemented the image\_\* callback facility to allow efficient management of large file images. These facilities can be used to allow sharing of file image buffers between the application and the HDF5 library, and also transfer of ownership in either direction. In such operations, care must be taken to ensure that ownership is clear and that file image buffers are not discarded before all references to them are discarded by the non-owning party. Ownership of a file image buffer will only be passed to the application program if the file image callbacks are designed to do this. In such cases, the application program must refrain from freeing the buffer until the library has deleted all references to it. This in turn will happen after all property lists (if any) that refer to the buffer have been discarded, and the file driver (if any) that used the buffer has closed the file and thinks it has discarded the buffer. -3.1.2. Sharing a File image Buffer with the HDF5 Library +#### 3.1.2. Sharing a File image Buffer with the HDF5 Library As mentioned above, the HDF5 property lists are a mechanism for passing values into HDF5 Library calls. They were created to allow calls to be extended with new parameters without changing the actual API or breaking existing code. They were designed based on the assumption that all new parameters would be “call by value” and not “call by reference.” Having “call by value” parameters means property lists can be copied, reused, and discarded with ease. Suppose an application wished to share a file image buffer with the HDF5 Library. This means the library would be allowed to read the file image, but not free it. The file image callbacks might be constructed as follows to share a buffer: @@ -445,7 +459,7 @@ As the property list code will never resize a buffer, we do not discuss the imag For more information on user defined data, see the “H5Pset\_file\_image\_callbacks” section. -3.1.3. File Driver Considerations +#### 3.1.3. File Driver Considerations When a file image is opened by a driver that sets both the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE and the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flags, the driver will allocate a buffer large enough for the initial file image and then copy the image from the property list into this buffer. As processing progresses, the driver will reallocate the image as necessary to increase its size and will eventually discard the image at file close. If defined, the driver will use the file image callbacks for these operations; otherwise, the driver will use the standard C library calls. See the "H5Pset\_file\_image\_callbacks” section for more information. As described above, the file image callbacks can be constructed so as to avoid the overhead of buffer allocations and copies while allowing the HDF5 Library to maintain its illusions on the subject. There are two possible complications involving the file driver. The complications are the possibility of reallocation calls from the driver and the possibility of the continued existence of property lists containing references to the buffer. @@ -482,7 +496,7 @@ If the H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE flag is set, decrement the ini If the H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE flag is set, check to see if the mod\_ptr, mod\_size, or mod\_ref\_count fields of the user data structure have been modified from their initial values. If they have, verify that mod\_ref\_count contains 1 and then set that field to zero. If they have not been modified, proceed as per the H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE case. In either case, if both the init\_ref\_count and mod\_ref\_count fields have dropped to zero, notify the application that the HDF5 Library is done with the buffer. If the mod\_ptr or mod\_size fields have been modified, pass these values on to the application as well. -3.2. Initial File Image Semantics +### 3.2. Initial File Image Semantics One can argue whether creating a file with an initial file image is closer to creating a file or opening a file. The consensus seems to be that it is closer to a file open, and thus we shall require that the initial image only be used for calls to H5Fopen(). Whatever our convention, from an internal perspective, opening a file with an initial file image is a bit of both creating a file and opening a file. Conceptually, we will create a file on disk, write the supplied image to the file, close the file, open the file as an HDF5 file, and then proceed as usual (of course, the Core VFD will not write to the file system unless it is configured to do so). This process is similar to a file create: we are creating a file that did not exist on disk to begin with and writing data to it. Also, we must verify that no file of the supplied name is open. However, this process is also similar to a file open: we must read the superblock and handle the usual file open tasks. @@ -498,7 +512,7 @@ As we indicated earlier, if an initial file image appears in the property list o While the above section on the semantics of the file image callbacks may seem rather gloomy, we get the payback here. The above says everything that needs to be said about initial file image semantics in general. The sub-section below has a few more observations on the Core file driver. -3.2.1. Applying Initial File Image Semantics to the Core File Driver +#### 3.2.1. Applying Initial File Image Semantics to the Core File Driver At present, the Core file driver uses the open() and read() system calls to load an HDF5 file image from the file system into RAM. Further, if the backing\_store flag is set in the FAPL entry specifying the use of the Core file driver, the Core file driver’s internal image will be used to overwrite the source file on either flush or close. See the H5Pset\_fapl\_core entry in the HDF5 Reference Manual for more information. This results in the following observations. In all cases assume that use of the Core file driver has been specified in the FAPL. @@ -508,10 +522,10 @@ If the file specified in the H5Fopen() call does exist, and an initial image is If the file specified in the H5Fopen() call does not exist, and an initial image is specified in the FAPL, the open will succeed. This assumes that the supplied image is valid. Further, if the backing store flag is set, the file specified in the H5Fopen() call will be created, and the contents of the Core file driver’s internal buffer will be written to the new file on flush or close. Thus a call to H5Fopen() can result in the creation of a new HDF5 file in the file system. -4. Examples +## 4. Examples The purpose of this chapter is to provide examples of how to read or build an in-memory HDF5 file image. -4.1. Reading an In-memory HDF5 File Image +### 4.1. Reading an In-memory HDF5 File Image The H5Pset\_file\_image() function call allows the Core file driver to be initialized from an application provided buffer. The following pseudo code illustrates its use: @@ -551,7 +565,7 @@ Again, file access is read-only. Read/write access can be obtained via the H5LTo -4.2. In-memory HDF5 File Image Construction +### 4.2. In-memory HDF5 File Image Construction Before the implementation of file image operations, HDF5 supported construction of an image of an HDF5 file in memory with the Core file driver. The H5Fget\_file\_image() function call allows an application access to the file image without first writing it to disk. See the following code fragment: @@ -920,7 +934,7 @@ Example 10. Using H5LTopen\_file\_image where only the datasets change and where The above pseudo code shows how a buffer can be passed back and forth between the application and the HDF5 Library. The code also shows the application having control of the actual allocation, reallocation, and freeing of the buffer. -4.3. Using HDF5 to Construct and Read a Data Packet +### 4.3. Using HDF5 to Construct and Read a Data Packet Using the file image operations described in this document, we can bundle up data in an image of an HDF5 file on one process, transmit the image to a second process, and then open and read the image on the second process without any mandatory file system I/O. We have already demonstrated the construction and reading of such buffers above, but it may be useful to offer an example of the full operation. We do so in the example below using as simple a set of calls as possible. The set of calls in the example has extra buffer allocations. To reduce extra buffer allocations, see the sections above. @@ -951,7 +965,7 @@ file\_id = H5LTopen\_file\_image(buf, Example 11. Building and passing a file image from one process to another -4.4. Using a Template File +### 4.4. Using a Template File After the above examples, an example of the use of a template file might seem anti-climactic. A template file might be used to enforce consistency on file structure between files or in parallel HDF5 to avoid long sequences of collective operations to create the desired groups, datatypes, and possibly datasets. The following pseudo code outlines a potential use: @@ -980,7 +994,7 @@ In contrast, the argument is stronger in the parallel case since group, datatype In closing, we would like to consider one last point. In the parallel case, we would expect template files to be quite large. Parallel HDF5 requires eager space allocation for chunked datasets. For similar reasons, we would expect template files in this context to contain long sequences of zeros with a scattering of metadata here and there. Such files would compress well, and the compressed images would be cheap to distribute across the available processes if necessary. Once distributed, each process could uncompress the image and write to file those sections containing actual data that lay within the section of the file assigned to the process. This approach might be significantly faster than a simple copy as it would allow sparse writes, and thus it might provide a compelling use case for template files. However, this approach would require extending our current API to allow compressed images. We would also have to add the H5Pget/set\_image\_decompression\_callback() API calls. We see no problem in doing this. However, it is beyond the scope of the current effort, and thus we will not pursue the matter further unless there is interest in our doing so. -5. Java Signatures for File Image Operations API Calls +## 5. Java Signatures for File Image Operations API Calls Potential Java function call signatures for the file image operation APIs are described in this section. These have not yet been implemented, and there are no immediate plans for implementation. Note that the H5LTopen\_file\_image() call is omitted. Our practice has been to not support high-level library calls in Java. @@ -1073,13 +1087,13 @@ int H5Pget\_file\_image\_callbacks(int fapl\_id, H5Fget\_file\_image long H5Fget\_file\_image(int file\_id, byte[] buf\_ptr); -6. Fortran Signatures for File Image Operations API Calls +## 6. Fortran Signatures for File Image Operations API Calls Potential Fortran function call signatures for the file image operation APIs are described in this section. These have not yet been implemented, and there are no immediate plans for implementation. -6.1. Low-level Fortran API Routines +### 6.1. Low-level Fortran API Routines The Fortran low-level APIs make use of Fortran 2003’s ISO\_C\_BINDING module in order to achieve portable and standard conforming interoperability with the C APIs. The C pointer (C\_PTR) and function pointer (C\_FUN\_PTR) types are returned from the intrinsic procedures C\_LOC(X) and C\_FUNLOC(X), respectively, defined in the ISO\_C\_BINDING module. The argument X is the data or function to which the C pointers point to and must have the TARGET attribute in the calling program. Note that the variable name lengths of the Fortran equivalent of the predefined C constants were shortened to less than 31 characters in order to be Fortran standard compliant. -6.1.1. H5Pset\_file\_image\_f +#### 6.1.1. H5Pset\_file\_image\_f The signature of H5Pset\_file\_image\_f is defined as follows: SUBROUTINE H5Pset\_file\_image\_f(fapl\_id, buf\_ptr, buf\_len, hdferr) @@ -1099,7 +1113,7 @@ Will return the error status: 0 for success and -1 for failure. -6.1.2. H5Pget\_file\_image\_f +#### 6.1.2. H5Pget\_file\_image\_f The signature of H5Pget\_file\_image\_f is defined as follows: SUBROUTINE H5Pget\_file\_image\_f(fapl\_id, buf\_ptr, buf\_len, hdferr) @@ -1119,7 +1133,7 @@ Will return the error status: 0 for success and -1 for failure. -6.1.3. H5Pset\_file\_image\_callbacks\_f +#### 6.1.3. H5Pset\_file\_image\_callbacks\_f The signature of H5Pset\_file\_image\_callbacks\_f is defined as follows: INTEGER :: H5\_IMAGE\_OP\_PROPERTY\_LIST\_SET\_F=0, @@ -1225,7 +1239,7 @@ Will return the error status: 0 for success and -1 for failure. -6.1.4. H5Pget\_file\_image\_callbacks\_f +#### 6.1.4. H5Pget\_file\_image\_callbacks\_f The H5Pget\_file\_image\_callbacks\_f routine is designed to obtain the current file image callbacks from a file access property list. The signature is defined as follows @@ -1244,14 +1258,14 @@ Will return the error status: 0 for success and -1 for failure. -6.1.5. Fortran Virtual File Driver Feature Flags +#### 6.1.5. Fortran Virtual File Driver Feature Flags Implementation of the H5Pget/set\_file\_image\_callbacks\_f() and H5Pget/set\_file\_image\_f() APIs requires a pair of new virtual file driver feature flags: H5FD\_FEAT\_LET\_IMAGE\_F H5FD\_FEAT\_LET\_IMAGE\_CALLBACK\_F See the “Virtual File Driver Feature Flags” section for more information. -6.1.6. H5Fget\_file\_image\_f +#### 6.1.6. H5Fget\_file\_image\_f The signature of H5Fget\_file\_image\_f shall be defined as follows: SUBROUTINE H5Fget\_file\_image\_f(file\_id, buf\_ptr, buf\_len, hdferr, buf\_size) diff --git a/documentation/hdf5-docs/feature_docs/intro_SWMR.md b/documentation/hdf5-docs/feature_docs/intro_SWMR.md index e5cb72be..4a83ce86 100644 --- a/documentation/hdf5-docs/feature_docs/intro_SWMR.md +++ b/documentation/hdf5-docs/feature_docs/intro_SWMR.md @@ -1,10 +1,11 @@ --- -title: Introduction to Single-Writer\_Multiple-Reader (SWMR) -redirect_from: +title: Introduction to Single-Writer\\_Multiple-Reader (SWMR) +redirect\_from: --- +##\*\*\* UNDER CONSTRUCTION \*\*\* -# Introduction to Single-Writer\_Multiple-Reader (SWMR) +# Introduction to Single-Writer\\_Multiple-Reader (SWMR) Introduction to SWMR The Single-Writer / Multiple-Reader (SWMR) feature enables multiple processes to read an HDF5 file while it is being written to (by a single process) without using locks or requiring communication between processes. @@ -33,31 +34,31 @@ SWMR User's Guide HDF5 Library APIs Page: -H5F_START_SWMR_WRITE — Enables SWMR writing mode for a file +H5F\_START\_SWMR\_WRITE — Enables SWMR writing mode for a file Page: -H5DO_APPEND — Appends data to a dataset along a specified dimension +H5DO\_APPEND — Appends data to a dataset along a specified dimension Page: -H5P_SET_OBJECT_FLUSH_CB — Sets a callback function to invoke when an object flush occurs in the file +H5P\_SET\_OBJECT\_FLUSH\_CB — Sets a callback function to invoke when an object flush occurs in the file Page: -H5P_GET_OBJECT_FLUSH_CB — Retrieves the object flush property values from the file access property list +H5P\_GET\_OBJECT\_FLUSH\_CB — Retrieves the object flush property values from the file access property list Page: -H5O_DISABLE_MDC_FLUSHES — Prevents metadata entries for an HDF5 object from being flushed from the metadata cache to storage +H5O\_DISABLE\_MDC\_FLUSHES — Prevents metadata entries for an HDF5 object from being flushed from the metadata cache to storage Page: -H5O_ENABLE_MDC_FLUSHES — Enables flushing of dirty metadata entries from a file’s metadata cache +H5O\_ENABLE\_MDC\_FLUSHES — Enables flushing of dirty metadata entries from a file’s metadata cache Page: -H5O_ARE_MDC_FLUSHES_DISABLED — Determines if an HDF5 object has had flushes of metadata entries disabled +H5O\_ARE\_MDC\_FLUSHES\_DISABLED — Determines if an HDF5 object has had flushes of metadata entries disabled Tools Page: h5watch — Outputs new records appended to a dataset as the dataset grows Page: -h5format_convert — Converts the layout format version and chunked indexing types of datasets created with HDF5-1.10 so that applications built with HDF5-1.8 can access them +h5format\_convert — Converts the layout format version and chunked indexing types of datasets created with HDF5-1.10 so that applications built with HDF5-1.8 can access them Page: -h5clear — Clears superblock status_flags field, removes metadata cache image, prints EOA and EOF, or sets EOA of a file +h5clear — Clears superblock status\_flags field, removes metadata cache image, prints EOA and EOF, or sets EOA of a file Design Documents Error while fetching page properties report data: Programming Model -Please be aware that the SWMR feature requires that an HDF5 file be created with the latest file format. See H5P_SET_LIBVER_BOUNDS for more information. +Please be aware that the SWMR feature requires that an HDF5 file be created with the latest file format. See H5P\_SET\_LIBVER\_BOUNDS for more information. To use SWMR follow the the general programming model for creating and accessing HDF5 files and objects along with the steps described below. @@ -66,52 +67,52 @@ The SWMR writer either opens an existing file and objects or creates them as fol Open an existing file: -Call H5Fopen using the H5F_ACC_SWMR_WRITE flag. +Call H5Fopen using the H5F\_ACC\_SWMR\_WRITE flag. Begin writing datasets. Periodically flush data. Create a new file: Call H5Fcreate using the latest file format. Create groups, datasets and attributes, and then close the attributes. -Call H5F_START_SWMR_WRITE to start SWMR access to the file. +Call H5F\_START\_SWMR\_WRITE to start SWMR access to the file. Periodically flush data. Example Code: Create the file using the latest file format property: - fapl = H5Pcreate (H5P_FILE_ACCESS); - status = H5Pset_libver_bounds (fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST); - fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl); + fapl = H5Pcreate (H5P\_FILE\_ACCESS); + status = H5Pset\_libver\_bounds (fapl, H5F\_LIBVER\_LATEST, H5F\_LIBVER\_LATEST); + fid = H5Fcreate (filename, H5F\_ACC\_TRUNC, H5P\_DEFAULT, fapl); [Create objects (files, datasets, ...). Close any attributes and named datatype objects. Groups and datasets may remain open before starting SWMR access to them.] Start SWMR access to the file: - status = H5Fstart_swmr_write (fid); + status = H5Fstart\_swmr\_write (fid); Reopen the datasets and start writing, periodically flushing data: - status = H5Dwrite (dset_id, ...); - status = H5Dflush (dset_id); + status = H5Dwrite (dset\_id, ...); + status = H5Dflush (dset\_id); SWMR Reader: The SWMR reader must continually poll for new data: -Call H5Fopen using the H5F_ACC_SWMR_READ flag. +Call H5Fopen using the H5F\_ACC\_SWMR\_READ flag. Poll, checking the size of the dataset to see if there is new data available for reading. Read new data, if any. Example Code: Open the file using the SWMR read flag: - fid = H5Fopen (filename, H5F_ACC_RDONLY | H5F_ACC_SWMR_READ, H5P_DEFAULT); + fid = H5Fopen (filename, H5F\_ACC\_RDONLY | H5F\_ACC\_SWMR\_READ, H5P\_DEFAULT); Open the dataset and then repeatedly poll the dataset, by getting the dimensions, reading new data, and refreshing: - dset_id = H5Dopen (...); - space_id = H5Dget_space (...); + dset\_id = H5Dopen (...); + space\_id = H5Dget\_space (...); while (...) { - status = H5Dread (dset_id, ...); - status = H5Drefresh (dset_id); - space_id = H5Dget_space (...); + status = H5Dread (dset\_id, ...); + status = H5Drefresh (dset\_id); + space\_id = H5Dget\_space (...); } Limitations and Scope @@ -142,12 +143,12 @@ Download the HDF5-1.10 source code to a local directory on a filesystem (that co Invoke two command terminal windows. In one window go into the bin/ directory of the built binaries. In the other window go into the test/ directory of the HDF5-1.10 source code that was just built. -In the window in the test/ directory compile and run use_append_chunk.c. The example writes a three dimensional dataset by planes (with chunks of size 1 x 256 x 256). +In the window in the test/ directory compile and run use\_append\_chunk.c. The example writes a three dimensional dataset by planes (with chunks of size 1 x 256 x 256). -In the other window (in the bin/ directory) run h5watch on the file created by use_append_chunk.c (use_append_chunk.h5). It should be run while use_append_chunk is executing and you will see valid data displayed with h5watch. +In the other window (in the bin/ directory) run h5watch on the file created by use\_append\_chunk.c (use\_append\_chunk.h5). It should be run while use\_append\_chunk is executing and you will see valid data displayed with h5watch. -Interrupt use_append_chunk while it is running, and stop h5watch. +Interrupt use\_append\_chunk while it is running, and stop h5watch. -Use h5clear to clear the status flags in the superbock of the HDF5 file (use_append_chunk.h5). +Use h5clear to clear the status flags in the superbock of the HDF5 file (use\_append\_chunk.h5). View the file with h5dump. You will see that it is a valid file even though the application did not close properly. It will contain data up to the point that it was interrupted. diff --git a/documentation/hdf5-docs/feature_docs/intro_VDS.md b/documentation/hdf5-docs/feature_docs/intro_VDS.md index 4517b624..95485d5e 100644 --- a/documentation/hdf5-docs/feature_docs/intro_VDS.md +++ b/documentation/hdf5-docs/feature_docs/intro_VDS.md @@ -1,8 +1,9 @@ --- title: Introduction to the Virtual Dataset - VDS -redirect_from: +redirect\_from: --- +##\*\*\* UNDER CONSTRUCTION \*\*\* # Introduction to the Virtual Dataset - VDS @@ -22,7 +23,7 @@ The mapping between a VDS and the HDF5 source datasets is persistent and transpa See the Virtual (VDS) Documentation for complete details regarding the VDS feature. -The VDS feature was implemented using hyperslab selection (H5S_SELECT_HYPERSLAB). See the tutorial on Reading From or Writing to a Subset of a Dataset for more information on selecting hyperslabs. +The VDS feature was implemented using hyperslab selection (H5S\_SELECT\_HYPERSLAB). See the tutorial on Reading From or Writing to a Subset of a Dataset for more information on selecting hyperslabs. Programming Model To create a Virtual Dataset you simply follow the HDF5 programming model and add a few additional API calls to map the source code datasets to the VDS. @@ -42,15 +43,15 @@ Access the VDS as a regular HDF5 dataset Close the VDS when finished Functions for Working with a VDS -The H5P_SET_VIRTUAL API sets the mapping between virtual and source datasets. This is a dataset creation property list. Using this API will change the layout of the dataset to H5D_VIRTUAL. As with specifying any dataset creation property list, an instance of the property list is created, modified, passed into the dataset creation call and then closed: +The H5P\_SET\_VIRTUAL API sets the mapping between virtual and source datasets. This is a dataset creation property list. Using this API will change the layout of the dataset to H5D\_VIRTUAL. As with specifying any dataset creation property list, an instance of the property list is created, modified, passed into the dataset creation call and then closed: - dcpl = H5Pcreate (H5P_DATASET_CREATE); + dcpl = H5Pcreate (H5P\_DATASET\_CREATE); - src_space = H5screate_simple ... - status = H5Sselect_hyperslab (space, ... - status = H5Pset_virtual (dcpl, space, SRC_FILE[i], SRC_DATASET[i], src_space); + src\_space = H5screate\_simple ... + status = H5Sselect\_hyperslab (space, ... + status = H5Pset\_virtual (dcpl, space, SRC\_FILE[i], SRC\_DATASET[i], src\_space); - dset = H5Dcreate2 (file, DATASET, H5T_NATIVE_INT, space, H5P_DEFAULT, dcpl, H5P_DEFAULT); + dset = H5Dcreate2 (file, DATASET, H5T\_NATIVE\_INT, space, H5P\_DEFAULT, dcpl, H5P\_DEFAULT); status = H5Pclose (dcpl); There are several other APIs introduced with Virtual Datasets, including query functions. For details see the complete list of HDF5 library APIs that support Virtual Datasets @@ -71,12 +72,12 @@ This example creates three HDF5 files, each with a one-dimensional dataset of 6 In this example the three source datasets are mapped to the VDS with this code: - src_space = H5Screate_simple (RANK1, dims, NULL); + src\_space = H5Screate\_simple (RANK1, dims, NULL); for (i = 0; i < 3; i++) { - start[0] = (hsize_t)i; + start[0] = (hsize\_t)i; /* Select i-th row in the virtual dataset; selection in the source datasets is the same. */ - status = H5Sselect_hyperslab (space, H5S_SELECT_SET, start, NULL, count, block); - status = H5Pset_virtual (dcpl, space, SRC_FILE[i], SRC_DATASET[i], src_space); + status = H5Sselect\_hyperslab (space, H5S\_SELECT\_SET, start, NULL, count, block); + status = H5Pset\_virtual (dcpl, space, SRC\_FILE[i], SRC\_DATASET[i], src\_space); } After the VDS is created and closed, it is reopened. The property list is then queried to determine the layout of the dataset and its mappings, and the data in the VDS is read and printed. @@ -87,11 +88,11 @@ C Example For details on compiling an HDF5 application: [ Compiling HDF5 Applications ] Example 2 -This example shows how to use a C-style printf statement for specifying multiple source datasets as one virtual dataset. Only one mapping is required. In other words only one H5P_SET_VIRTUAL call is needed to map multiple datasets. It creates a 2-dimensional unlimited VDS. Then it re-opens the file, makes queries, and reads the virtual dataset. +This example shows how to use a C-style printf statement for specifying multiple source datasets as one virtual dataset. Only one mapping is required. In other words only one H5P\_SET\_VIRTUAL call is needed to map multiple datasets. It creates a 2-dimensional unlimited VDS. Then it re-opens the file, makes queries, and reads the virtual dataset. The source datasets are specified as A-0, A-1, A-2, and A-3. These are mapped to the virtual dataset with one call: - status = H5Pset_virtual (dcpl, vspace, SRCFILE, "/A-%b", src_space); + status = H5Pset\_virtual (dcpl, vspace, SRCFILE, "/A-%b", src\_space); The %b indicates that the block count of the selection in the dimension should be used. From 7f2f9d1a4e23641affd0c43922377f1d12955098 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 23 Mar 2024 00:36:00 -0400 Subject: [PATCH 14/44] Fix format --- .../hdf5-docs/feature_docs/file_image_ops.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/documentation/hdf5-docs/feature_docs/file_image_ops.md b/documentation/hdf5-docs/feature_docs/file_image_ops.md index 7afbfa8f..2c01b117 100644 --- a/documentation/hdf5-docs/feature_docs/file_image_ops.md +++ b/documentation/hdf5-docs/feature_docs/file_image_ops.md @@ -18,26 +18,26 @@ redirect_from: [2.1. Low-level C API Routines](#low-level-c-api-routines) - [2.1.1. H5Pset\_file\_image](#h5pset_file_image)
- [2.1.2. H5Pget\_file\_image](#h5pget_file_image)
- [2.1.3. H5Pset\_file\_image\_callbacks](#h5pset_file_image_callbacks)
- [2.1.4. H5Pget\_file\_image\_callbacks](#h5pget_file_image_callbacks)
- [2.1.5. Virtual File Driver Feature Flags](#virtual-file-driver-feature-flags)
- [2.1.6. H5Fget\_file\_image](#h5fget_file_image) + * [H5Pset\_file\_image](#h5pset_file_image)
+ * [H5Pget\_file\_image](#h5pget_file_image)
+ * [H5Pset\_file\_image\_callbacks](#h5pset_file_image_callbacks)
+ * [H5Pget\_file\_image\_callbacks](#h5pget_file_image_callbacks)
+ * [Virtual File Driver Feature Flags](#virtual-file-driver-feature-flags)
+ * [H5Fget\_file\_image](#h5fget_file_image) [2.2. High-level C API Routine](#high-level-c-api-routine])
- [2.2.1. H5LTopen\_file\_image](#h5ltopen_file_image) + * [H5LTopen\_file\_image](#h5ltopen_file_image) **[3. C API Call Semantics](#c-api-call-semantics)** [3.1. File Image Callback Semantics](#file-image-callback-semantics) - [3.1.1. Buffer Ownership](#buffer-ownership)
- [3.1.2. Sharing a File image Buffer with the HDF5 Library](#sharing-a-file-image-buffer-with-the-hdf5-library)
- [3.1.3. File Driver Considerations](#file-driver-considerations) + * [Buffer Ownership](#buffer-ownership)
+ * [Sharing a File image Buffer with the HDF5 Library](#sharing-a-file-image-buffer-with-the-hdf5-library)
+ * [File Driver Considerations](#file-driver-considerations) [3.2. Initial File Image Semantics](#initial-file-image-semantics)
- [3.2.1 Applying Initial File Image Semantics to the Core File Driver](#applying-initial-file-image-semantics) + * [Applying Initial File Image Semantics to the Core File Driver](#applying-initial-file-image-semantics) **[4. Examples](#examples)** @@ -52,16 +52,16 @@ redirect_from: [6.1. Low-level Fortran API Routines](#) - [6.1.1. H5Pset\_file\_image\_f](#)
- [6.1.2. H5Pget\_file\_image\_f](#)
- [6.1.3. H5Pset\_file\_image\_callbacks\_f](#)
- [6.1.4. H5Pget\_file\_image\_callbacks\_f](#)
- [6.1.5. Fortran Virtual File Driver Feature Flags](#)
- [6.1.6. H5Fget\_file\_image\_f](#) + * [H5Pset\_file\_image\_f](#)
+ * [H5Pget\_file\_image\_f](#)
+ * [H5Pset\_file\_image\_callbacks\_f](#)
+ * [H5Pget\_file\_image\_callbacks\_f](#)
+ * [Fortran Virtual File Driver Feature Flags](#)
+ * [H5Fget\_file\_image\_f](#) [6.2. High-level Fortran API Routine](#) - [6.2.1. H5LTopen\_file\_image\_f](#) + * [H5LTopen\_file\_image\_f](#) ## 1. Introduction to HDF5 File Image Operations From 84992573ecca60fb6985b531268dc2028fdf87a1 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 23 Mar 2024 17:58:19 -0400 Subject: [PATCH 15/44] Rename feature docs to reflect the Advanced Topics page --- .../cp_committed_dt_H5Ocopy.md | 0 .../data_flow_pline_H5Dread.md | 0 .../file_image_ops.md | 4 ++-- .../images/tutr-swmr1.png | Bin .../images/tutr-swmr2.png | Bin .../images/tutr-swmr3.png | Bin .../images/tutrvds-ex.png | Bin .../images/tutrvds-map.png | Bin .../images/tutrvds-multimgs.png | Bin .../images/tutrvds-snglimg.png | Bin .../{feature_docs => advanced_topics}/intro_SWMR.md | 0 .../{feature_docs => advanced_topics}/intro_VDS.md | 0 ...{feature_doc_list.md => advanced_topics_list.md} | 0 13 files changed, 2 insertions(+), 2 deletions(-) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/cp_committed_dt_H5Ocopy.md (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/data_flow_pline_H5Dread.md (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/file_image_ops.md (99%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/images/tutr-swmr1.png (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/images/tutr-swmr2.png (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/images/tutr-swmr3.png (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/images/tutrvds-ex.png (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/images/tutrvds-map.png (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/images/tutrvds-multimgs.png (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/images/tutrvds-snglimg.png (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/intro_SWMR.md (100%) rename documentation/hdf5-docs/{feature_docs => advanced_topics}/intro_VDS.md (100%) rename documentation/hdf5-docs/{feature_doc_list.md => advanced_topics_list.md} (100%) diff --git a/documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md b/documentation/hdf5-docs/advanced_topics/cp_committed_dt_H5Ocopy.md similarity index 100% rename from documentation/hdf5-docs/feature_docs/cp_committed_dt_H5Ocopy.md rename to documentation/hdf5-docs/advanced_topics/cp_committed_dt_H5Ocopy.md diff --git a/documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md b/documentation/hdf5-docs/advanced_topics/data_flow_pline_H5Dread.md similarity index 100% rename from documentation/hdf5-docs/feature_docs/data_flow_pline_H5Dread.md rename to documentation/hdf5-docs/advanced_topics/data_flow_pline_H5Dread.md diff --git a/documentation/hdf5-docs/feature_docs/file_image_ops.md b/documentation/hdf5-docs/advanced_topics/file_image_ops.md similarity index 99% rename from documentation/hdf5-docs/feature_docs/file_image_ops.md rename to documentation/hdf5-docs/advanced_topics/file_image_ops.md index 2c01b117..4b11d558 100644 --- a/documentation/hdf5-docs/feature_docs/file_image_ops.md +++ b/documentation/hdf5-docs/advanced_topics/file_image_ops.md @@ -1,9 +1,9 @@ --- title: HDF5 File Image Operations redirect_from: - - /display/HDF5/Migrating+from+HDF5+1.10+to+HDF5+1.12.html + - /display/HDF5/HDF5+File+Image+Operations --- -##\*\*\* UNDER CONSTRUCTION \*\*\* +## \*\*\* UNDER CONSTRUCTION \*\*\* # HDF5 File Image Operations diff --git a/documentation/hdf5-docs/feature_docs/images/tutr-swmr1.png b/documentation/hdf5-docs/advanced_topics/images/tutr-swmr1.png similarity index 100% rename from documentation/hdf5-docs/feature_docs/images/tutr-swmr1.png rename to documentation/hdf5-docs/advanced_topics/images/tutr-swmr1.png diff --git a/documentation/hdf5-docs/feature_docs/images/tutr-swmr2.png b/documentation/hdf5-docs/advanced_topics/images/tutr-swmr2.png similarity index 100% rename from documentation/hdf5-docs/feature_docs/images/tutr-swmr2.png rename to documentation/hdf5-docs/advanced_topics/images/tutr-swmr2.png diff --git a/documentation/hdf5-docs/feature_docs/images/tutr-swmr3.png b/documentation/hdf5-docs/advanced_topics/images/tutr-swmr3.png similarity index 100% rename from documentation/hdf5-docs/feature_docs/images/tutr-swmr3.png rename to documentation/hdf5-docs/advanced_topics/images/tutr-swmr3.png diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-ex.png b/documentation/hdf5-docs/advanced_topics/images/tutrvds-ex.png similarity index 100% rename from documentation/hdf5-docs/feature_docs/images/tutrvds-ex.png rename to documentation/hdf5-docs/advanced_topics/images/tutrvds-ex.png diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-map.png b/documentation/hdf5-docs/advanced_topics/images/tutrvds-map.png similarity index 100% rename from documentation/hdf5-docs/feature_docs/images/tutrvds-map.png rename to documentation/hdf5-docs/advanced_topics/images/tutrvds-map.png diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-multimgs.png b/documentation/hdf5-docs/advanced_topics/images/tutrvds-multimgs.png similarity index 100% rename from documentation/hdf5-docs/feature_docs/images/tutrvds-multimgs.png rename to documentation/hdf5-docs/advanced_topics/images/tutrvds-multimgs.png diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-snglimg.png b/documentation/hdf5-docs/advanced_topics/images/tutrvds-snglimg.png similarity index 100% rename from documentation/hdf5-docs/feature_docs/images/tutrvds-snglimg.png rename to documentation/hdf5-docs/advanced_topics/images/tutrvds-snglimg.png diff --git a/documentation/hdf5-docs/feature_docs/intro_SWMR.md b/documentation/hdf5-docs/advanced_topics/intro_SWMR.md similarity index 100% rename from documentation/hdf5-docs/feature_docs/intro_SWMR.md rename to documentation/hdf5-docs/advanced_topics/intro_SWMR.md diff --git a/documentation/hdf5-docs/feature_docs/intro_VDS.md b/documentation/hdf5-docs/advanced_topics/intro_VDS.md similarity index 100% rename from documentation/hdf5-docs/feature_docs/intro_VDS.md rename to documentation/hdf5-docs/advanced_topics/intro_VDS.md diff --git a/documentation/hdf5-docs/feature_doc_list.md b/documentation/hdf5-docs/advanced_topics_list.md similarity index 100% rename from documentation/hdf5-docs/feature_doc_list.md rename to documentation/hdf5-docs/advanced_topics_list.md From b36474a6c1ca40173e0034beabd343917b91bab8 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 23 Mar 2024 18:01:03 -0400 Subject: [PATCH 16/44] Fix typo --- documentation/hdf5-docs/advanced_topics_list.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/hdf5-docs/advanced_topics_list.md b/documentation/hdf5-docs/advanced_topics_list.md index 9025fc67..f722e69e 100644 --- a/documentation/hdf5-docs/advanced_topics_list.md +++ b/documentation/hdf5-docs/advanced_topics_list.md @@ -1,6 +1,6 @@ --- title: HDF5 Features -redirect_from: +redirect_from: display/HDF5/Advanced+Topics+in+HDF5 --- From b7621f0639eba1bd99e79ce7e19031efa100b380 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 23 Mar 2024 18:03:37 -0400 Subject: [PATCH 17/44] Rename for advanced topics --- documentation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/index.md b/documentation/index.md index 62c244cf..c1ca95a6 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -19,7 +19,7 @@ Look for more content here soon. * [Registered VOL Connectors](/documentation/hdf5-docs/registered_vol_connectors.html) * [Chunking in HDF5](hdf5-docs/chunking_in_hdf5.md) * [Release Specific Information](hdf5-docs/release_specific_info.md) - \*\*\* UNDER CONSTRUCTION \*\*\* -* [Features](hdf5-docs/feature_doc_list.md) - \*\*\* UNDER CONSTRUCTION \*\*\* +* [Advanced Topics](hdf5-docs/advanced_topics_list.md) - \*\*\* UNDER CONSTRUCTION \*\*\* Can't find what you're looking for? Visit [docs.hdfgroup.org](https://docs.hdfgroup.org/hdf5/v1_14/index.html) for many other documents that previously resided on the portal. From 1d286b96625b27b4c6218a9c4956f0a94e8574d1 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 23 Mar 2024 18:10:48 -0400 Subject: [PATCH 18/44] More rename... --- documentation/hdf5-docs/advanced_topics_list.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/documentation/hdf5-docs/advanced_topics_list.md b/documentation/hdf5-docs/advanced_topics_list.md index f722e69e..fd35bb21 100644 --- a/documentation/hdf5-docs/advanced_topics_list.md +++ b/documentation/hdf5-docs/advanced_topics_list.md @@ -8,11 +8,11 @@ redirect_from: display/HDF5/Advanced+Topics+in+HDF5 # HDF5 Features -### [HDF5 File Image Operations](feature_docs/file_image_ops.md) -### [Copying Committed Datatypes with H5Ocopy](feature_docs/cp_committed_dt_H5Ocopy.md) -### [HDF5 Data Flow Pipeline for H5Dread](feature_docs/data_flow_pline_H5Dread.md) -### [Introduction to Single-Writer_Multiple-Reader (SWMR)](feature_docs/intro_SWMR.md) -### [Introduction to the Virtual Dataset - VDS](feature_docs/intro_VDS.md) -### [New Features](feature_docs/feature.md) -### [New Features](feature_docs/feature.md) -### [New Features](feature_docs/feature.md) +### [HDF5 File Image Operations](advanced_topics/file_image_ops.md) +### [Copying Committed Datatypes with H5Ocopy](advanced_topics/cp_committed_dt_H5Ocopy.md) +### [HDF5 Data Flow Pipeline for H5Dread](advanced_topics/data_flow_pline_H5Dread.md) +### [Introduction to Single-Writer_Multiple-Reader (SWMR)](advanced_topics/intro_SWMR.md) +### [Introduction to the Virtual Dataset - VDS](advanced_topics/intro_VDS.md) +### [New Features](advanced_topics/feature.md) +### [New Features](advanced_topics/feature.md) +### [New Features](advanced_topics/feature.md) From 302375c259b4edb9831eaac2eb4a947a18342573 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sat, 23 Mar 2024 19:09:58 -0400 Subject: [PATCH 19/44] Removed extra page --- .../release_specifics/api_comp_macros.md | 266 ------------------ 1 file changed, 266 deletions(-) delete mode 100644 documentation/hdf5-docs/release_specifics/api_comp_macros.md diff --git a/documentation/hdf5-docs/release_specifics/api_comp_macros.md b/documentation/hdf5-docs/release_specifics/api_comp_macros.md deleted file mode 100644 index de629239..00000000 --- a/documentation/hdf5-docs/release_specifics/api_comp_macros.md +++ /dev/null @@ -1,266 +0,0 @@ ---- -title: API Compatibility Macros -redirect_from: - - display/HDF5/API+Compatibility+Macros ---- - -# API Compatibility Macros - -## Audience -The target audience for this document has existing applications that use the HDF5 library, and is considering moving to the latest HDF5 release to take advantage of the latest library features and enhancements. - -## Compatibility Issues -With each major release of HDF5, such as 1.12 or 1.10, certain compatibility issues must be considered when migrating applications from an earlier major release. - -This document describes the approach taken by The HDF Group to help existing users of HDF5 address compatibility issues in the HDF5 API. - -## Summary and Motivation -In response to new and evolving requirements for the library and data format, several basic functions have changed since HDF5 was first released. To allow existing applications to continue to compile and run properly, all versions of these functions have been retained in the later releases of the HDF5 library. - -Given the scope of changes available with each major release of HDF5, and recognizing the potentially time-consuming task of editing all the affected calls in user applications, The HDF Group has created a set of macros that can be used to flexibly and easily map existing API calls to previous release functions. We refer to these as the API compatibility macros. - -The HDF Group generally encourages users to update applications to work with the latest HDF5 library release so that all new features and enhancements are available to them. At the same time, The HDF Group understands that, under some circumstances, updating applications may not be feasible or necessary. The API compatibility macros, described in this document, provide a bridge from old APIs to new and can be particularly helpful in situations such as these: - -* Source code is not available - only binaries are available; updating the application is not feasible. -* Source code is available, but there are no resources to update it. -* Source code is available, as are resources to update it, but the old version works quite well so updates are not a priority. At the same time, it is desirable to take advantage of certain efficiencies in the newer HDF5 release that do not require code changes. -* Source code is available, as are resources to update it, but the applications are large or complex, and must continue to run while the code updates are carried out. - -## Understanding and Using the Macros -As part of latest HDF5 release, several functions that existed in previous versions of the library were updated with new calling parameters and given new names. The updated versions of the functions have a number (for eg '2') at the end of the original function name. The original versions of these functions were retained and renamed to have an earlier number (for eg '1') at the end of the original function name. - -For example, consider the function H5Lvisit in HDF5 release 1.10 as compared with 1.12: - -| | | -| ------------------------------------- | ------------------------------------------------------------------------------------------------- | -| **Original function name and signature in 1.10.0** | herr\_t H5Lvisit(hid\_t grp\_id, H5\_index\_t idx\_type, H5\_iter\_order\_t order, H5L\_iterate\_t op, void \*op\_data) | -| **Updated function and signature, introduced in release 1.12.0** | herr\_t H5Lvisit2(hid\_t group\_id, H5\_index\_t idx\_type, H5\_iter\_order\_t order, H5L\_iterate2\_t op, void \*op\_data) | -| **Original function and signature, renamed in release 1.12.0** | herr\_t H5Lvisit1(hid\_t group\_id, H5\_index\_t idx\_type, H5\_iter\_order\_t order, H5L\_iterate1\_t op, void \*op\_data) | -| **API compatibility macro, introduced in release 1.12.0** | H5Lvisit
The macro, H5Lvisit, will be mapped to either H5Lvisit1 or H5Lvisit2. The mapping is determined by a combination of the configuration options use to build the HDF5 library and compile-time options used to build the application. The calling parameters used with the H5Lvisit compatibility macro should match the number and type of the function the macros will be mapped to (H5Lvisit1 or H5Lvisit2).
The function names ending in '1' or '2' are referred to as versioned names, and the corresponding functions are referred to as versioned functions. For new code development, The HDF Group recommends use of the compatibility macro mapped to the latest version of the function. The original version of the function should be considered deprecated and, in general, should not be used when developing new code. | - -## Compatibility Macro Mapping Options - -To determine the mapping for a given API compatibility macro in a given application, a combination of user-controlled selections, collectively referred to as the compatibility macro mapping options, is considered in the following sequence: - -What compatibility macro configuration option was used to build the HDF5 library? We refer to this selection as the library mapping. - -Was a compatibility macro global compile-time option specified when the application was built? We refer to this (optional) selection as the application mapping. If an application mapping exists, it overrides the library mapping. (See adjacent notes.) - -Were any compatibility macro function-level compile-time options specified when the application was built? We refer to these (optional) selections as function mappings. If function mappings exist, they override library and application mappings for the relevant API compatibility macros. (See adjacent notes.) - -#### *Notes* -An application mapping can map APIs to the same version or to a version older than the configured library mapping. When the application attempts to map APIs to a newer version of the API than the library was configured with, it will fail to "upgrade" the mapping (and may fail silently). -When it is necessary to "upgrade" the macro mappings from those set in the library mapping, it must be done at the per-function level, using the function-level mappings. As long as one does not try to map a function to a version that was compiled out in the library mapping, individual functions can be upgraded or downgraded freely. - - -### Library Mapping Options - -When the HDF5 library is built, configure flags can be used to control the API compatibility macro mapping behavior exhibited by the library. This behavior can be overridden by application and function mappings. One configure flag excludes deprecated functions from the HDF5 library, making them unavailable to applications linked with the library. - - - -Table 1: Library Mapping Options - -| configure flag | Macros map to release
(versioned function; H5Lvisit shown) | Deprecated functions available?
(H5Lvisit1) | -| -------------- | ------------------------------------------------------------- | ---------------------------------------------- | -| --with-default-api-version=v112
(the default in 1.12) | 1.12.x (H5Lvisit2) | yes | -| --with-default-api-version=v110 | 1.10.x (H5Lvisit1) | yes | -| --with-default-api-version=v18 | 1.8.x (H5Lvisit1) | yes | -| --with-default-api-version=v16 | 1.6.x (H5Lvisit1) | yes | -| --disable-deprecated-symbols | 1.12.x (H5Lvisit2) | no | - - -Refer to the file libhdf5.settings in the directory where the HDF5 library is installed to determine the configure flags used to build the library. In particular, look for the two lines shown here under Features: - - Default API mapping: v112 - - With deprecated public symbols: yes - -### Application Mapping Options - -When an application using HDF5 APIs is built and linked with the HDF5 library, compile-time options to h5cc can be used to control the API compatibility macro mapping behavior exhibited by the application. The application mapping overrides the behavior specified by the library mapping, and can be overridden on a function-by-function basis by the function mappings. - -If the HDF5 library was configured with the --disable-deprecated-symbols flag, then the deprecated functions will not be available, regardless of the application mapping options. - -Table 2: Application Mapping Options - -| h5cc option | Macros map to release
(versioned function; H5Lvisit shown) | Deprecated functions available?
(H5Lvisit1) | -| -------------- | ------------------------------------------------------------- | ---------------------------------------------- | -| -DH5\_USE\_112\_API
(Default behavior if no option specified.) | 1.12.x (H5Lvisit2) | yes
\*if available in library | -| -DH5\_USE\_110\_API | 1.10.x (HLvisit1) | yes\*
\*if available in library | -| -DH5\_USE\_18\_API | 1.8.x (H5Lvisit1) | yes\* -\*if available in library | -| -DH5\_USE\_16\_API | 1.6.x (H5Lvisit1) | yes\* -\*if available in library | -| -DH5\_NO\_DEPRECATED\_SYMBOLS | 1.10.x (H5Lvisit1) | no | - - -### Function Mapping Options - -Function mappings are specified when the application is built. These mappings can be used to control the mapping of the API compatibility macros to underlying functions on a function-by-function basis. The function mappings override the library and application mappings discussed earlier. - -If the HDF5 library was configured with the --disable-deprecated-symbols flag, or -DH5\_NO\_DEPRECATED\_SYMBOLS is used to compile the application, then the deprecated functions will not be available, regardless of the function mapping options. - -For every function with multiple available versions, a compile-time version flag can be defined to selectively map the function macro to the desired versioned function. The function mapping consists of the function name followed by "\_vers" which is mapped by number to a specific function or struct: - -| Macro | Function Mapping | Mapped to function or struct | -| ----- | --------------------- | -------------------------- | -| H5xxx | H5xxx\_vers=1 | H5xxx1 | -| | H5xxx\_vers=2 | H5xxx2 | - -For example, in version 1.10 the H5Rreference macro can be mapped to either H5Rreference1 or H5Rreference2. When used, the value of the H5Rreference\_vers compile-time version flag determines which function will be called: - -* When H5Rreference\_vers is set to 1, the macro H5Rreference will be mapped to H5Rreference1. - h5cc ... -DH5Rreference\_vers=1 ... - - -* When H5Rdereference\_vers is set to 2, the macro H5Rdereference will be mapped to H5Rdereference2. - h5cc ... -DH5Rreference\_vers=2 ... - - -* When H5Rreference\_vers is not set, the macro H5Rreference will be mapped to either H5Rreference1 or H5Rreference2, based on the application mapping, if one was specified, or on the library mapping. - h5cc ... - -#### *Notes* -Please be aware that some function mappings use mapped structures, as well. If compiling an application with a function mapping that uses a mapped structure, you must include each function and mapped structure plus EVERY function that uses the mapped structure, whether or not that function is used in the application. In 1.12, mappings of structures are used by the H5L and H5O function mappings. - -For example, the application h5ex\_g\_iterate.c (found on the Examples by API page under "Groups") only calls H5Lvisit , H5Ovisit , and H5Oget\_info\_by\_name.
To compile this application with 1.10 APIs in 1.12 with the function specific mappings, then not only must H5Lvisit\_vers, H5Ovisit\_vers, and H5Oget\_info\_by\_name\_vers be specified on the command line, but the mapped structures and every function that uses the mapped structures must be included, as well.
The full compile line is shown below: - -h5cc -DH5Lvisit\_vers=1 -DH5Ovisit\_vers=1 -DH5Oget\_info\_by\_name\_vers=1 -DH5Lvisit\_by\_name\_vers=1 -DH5Literate\_vers=1 -DH5Literate\_by\_name\_vers=1 -DH5O\_info\_t\_vers=1 -DH5L\_info\_t\_vers=1 -DH5L\_iterate\_t\_vers=1 -DH5Lget\_info\_by\_idx\_vers=1 -DH5Lget\_info\_vers=1 h5ex\_g\_visit.c - -#### Function Mapping Options in Releases 1.12.x - -| Macro
H5xxx | Default function used if no macro specified)
Function/struct mapping: H5xxx\_vers=N | Function used if specifying 1.10
Function/struct mapping: H5xxx\_vers=1 | -| ------------------- | ------------------------------------------------ | --------------------------- | -| H5L\_GET\_INFO | H5L\_GET\_INFO2
* Function mapping: H5Lget\_info\_vers=2
* Struct mapping: H5L\_info\_vers=2 | H5L\_GET\_INFO1
* Function mapping H5Lget\_info\_vers=1
* Struct mapping: H5L\_info\_t\_vers=1 | -| H5L\_GET\_INFO\_BY\_IDX | H5L\_GET\_INFO\_BY\_IDX2
* Function mapping: H5Lget\_info\_by\_idx\_vers=2
* Struct mapping: H5L\_info\_t\_vers=2 | H5L\_GET\_INFO\_BY\_IDX1
* Function mapping: H5Lget\_info\_by\_idx\_vers=1
* Struct mapping: H5L\_info\_t\_vers=1 | -| H5L\_ITERATE | H5L\_ITERATE2
* Function mapping: H5Literate\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2
| H5L\_ITERATE1
* Function mapping: H5Literate\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1
| -| H5L\_ITERATE\_BY\_NAME | H5L\_ITERATE\_BY\_NAME2
* Function mapping: H5Literate\_by\_name\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2 | H5L\_ITERATE\_BY\_NAME1
* Function mapping: H5Literate\_by\_name\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1 | -| H5L\_VISIT | H5L\_VISIT2
* Function mapping: H5Lvisit\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2 | H5L\_VISIT1
* Function mapping: H5Lvisit\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1
| -| H5L\_VISIT\_BY\_NAME | H5L\_VISIT\_BY\_NAME2
* Function mapping: H5Lvisit\_by\_name\_vers=2
* Struct mapping: H5L\_iterate\_t\_vers=2 | H5L\_VISIT\_BY\_NAME1
* Function mapping: H5Lvisit\_by\_name\_vers=1
* Struct mapping: H5L\_iterate\_t\_vers=1 | -| H5O\_GET\_INFO | H5O\_GET\_INFO3
* Function mapping: H5Oget\_info\_vers=3
* Struct mapping: H5O\_info\_t\_vers=2 | H5O\_GET\_INFO1
* Function mapping: H5Oget\_info\_vers=1
* Struct mapping: H5O\_info\_t\_vers=1 | -| H5O\_GET\_INFO\_BY\_IDX | H5O\_GET\_INFO\_BY\_IDX3
* Function mapping: H5Oget\_info\_by\_idx\_vers=3
* Struct mapping: H5O\_info\_t\_vers=2 | H5O\_GET\_INFO\_BY\_IDX1
* Function mapping: H5Oget\_info\_by\_idx\_vers=1
* Struct mapping: H5O\_info\_t\_vers=1 | -| H5O\_GET\_INFO\_BY\_NAME | H5O\_GET\_INFO\_BY\_NAME3
* Function mapping: H5O\_get\_info\_by\_name\_vers=3
* Struct mapping: H5O\_info\_t\_vers=2 | H5O\_GET\_INFO\_BY\_NAME1
* Function mapping: H5O\_get\_info\_by\_name\_vers=1
* Struct mapping: H5O\_info\_t\_vers=1 | -| H5O\_VISIT | H5O\_VISIT3
* Function mapping: H5Ovisit\_vers=3
* Struct mapping: H5O\_iterate\_t\_vers=2 | H5O\_VISIT1
* Function mapping: H5Ovisit\_vers=1
* Struct mapping: H5O\_iterate\_t\_vers=1 | -| H5O\_VISIT\_BY\_NAME | H5O\_VISIT\_BY\_NAME3
* Function mapping: H5Ovisit\_by\_name\_vers=3
* Struct mapping: H5O\_iterate\_t\_vers=2 | H5O\_VISIT\_BY\_NAME1
* Function mapping: H5Ovisit\_by\_name\_vers=1
* Struct mapping: H5O\_iterate\_t\_vers=1 | -| H5P\_ENCODE | H5P\_ENCODE2
* Function mapping: H5Pencode\_vers=2 | H5P\_ENCODE1
* Function mapping: H5Pencode\_vers=1 | -| H5S\_ENCODE | H5S\_ENCODE2
* Function mapping: H5Sencode\_vers=2 | H5S\_ENCODE1
* Function mapping: H5Sencode\_vers=1 | - - -#### Function Mapping Options in Releases 1.10.x - -The versioned H5Oget\_info functions (H5Oget\_info1 and H5Oget\_info2) were added in 1.10.3, and H5Oget\_info was replaced by a macro to invoke H5Oget\_info1 or H5Oget\_info2. However, this broke compatibility and caused problems for users because there was no longer a function H5Oget\_info. In 1.10.4 and subsequent 1.10.x versions the macro was removed, H5Oget\_info1 was deprecated, and H5Oget\_info was resurrected as a function. H5Oget\_info2 remained as a function, but is not a versioned alternative to the original H5Oget\_info. The same is true for H5Oget\_info\_by name, H5Oget\_info\_by\_idx, H5Ovisit, and H5Ovisit\_by\_name. The version 2 functions were added to improve performance. - -The unversioned originals and version 2 of those functions exist in 1.10 because having released them in 1.10.3, it would break compatibility to remove them, so the original and version 2 functions remained in the source but without any macro to map to one or the other. Therefore, version 2 functions are available, but only when invoked directly. - -In 1.12 there is a version 3 of all 5 functions which uses version 2 H5Oinfo2\_t or H5Oiterate2\_t structures. Both versions 1 and 2 are deprecated and macros replace the unversioned functions, mapping to version 1 for 18 and 110 default apis and to version 3 for 112 default api. Version 2 is available, but will only be invoked if invoked directly. - - -| Macro | Default function used
(if no macro specified) | Introduced in | h5cc version flag and value | Mapped to function or struct | -| ------------------- | ----------------------------- | ------------ | ------------------------------------- | ------------------------------------ | -| H5Rdereference | H5Rdereference2 | 1.10.0 | -DH5Rdereference\_vers=1 | H5Rdereference1 | -| | | | -DH5Rdereference\_vers=2 | H5Rdereference2 | -| H5Fget\_info | H5Fget\_info2 | 1.10.0 | -DH5Fget\_info\_vers=1 | H5Fget\_info1 with struct H5F\_info1\_t | -| | | | -DH5Fget\_info\_vers=2 | H5Fget\_info2 with struct H5F\_info2\_t | -| H5Oget\_info | H5Oget\_info1 | 1.10.3 | -DH5Oget\_info\_vers=1 | H5Oget\_info1 | -| | | | -DH5Oget\_info\_vers=2 | H5Oget\_info2 | -| H5Oget\_info\_by\_idx | H5Oget\_info\_by\_idx1 | 1.10.3 | -DH5Oget\_info\_by\_idx\_vers=1 | H5Oget\_info\_by\_idx1 | -| | | | -DH5Oget\_info\_by\_idx\_vers=2 | H5Oget\_info\_by\_idx2 | -| H5Oget\_info\_by\_name | H5Oget\_info\_by\_name1 | 1.10.3 | -DH5Oget\_info\_by\_name\_vers=1 | H5Oget\_info\_by\_name1 | -| | | | -DH5Oget\_info\_by\_name\_vers=2 | H5Oget\_info\_by\_name2 | -| H5Ovisit | H5Ovisit1 | 1.10.3 | -DH5Ovisit\_vers=1 | H5Ovisit1 | -| | | | -DH5Ovisit\_vers=2 | H5Ovisit2 | -| H5Ovisit\_by\_name | H5Ovisit\_by\_name1 | 1.10.3 | -DH5Ovisit\_by\_name\_vers=1 | H5Ovisit\_by\_name1 | -| | | | -DH5Ovisit\_by\_name\_vers=2 | H5Ovisit\_by\_name2 | - -#### Function Mapping Options in Releases 1.8.x - -At release 1.8.0, the API compatibility macros, function mapping compile-time version flags and values, and corresponding versioned functions listed in the following table were introduced. If the application being compiled to run with any 1.10.x release was written to use any 1.6.x release of HDF5, you must also consider these macros and mapping options. - - -##### Table 5: Function Mapping Options in Releases 1.8.x - -| Macro | h5cc version flag and value | Mapped to function or struct | -| ------ | ----------------------------- | ----------------------------- | -| H5Acreate | -DH5Acreate\_vers=1 | H5Acreate1 | -| | -DH5Acreate\_vers=2 | H5Acreate2 | -| H5Aiterate | -DH5Aiterate\_vers=1 | H5Aiterate1
with struct H5A\_operator1\_t | -| | -DH5Aiterate\_vers=2 | H5Aiterate2
with struct H5A\_operator2\_t | -| H5Dcreate | -DH5Dcreate\_vers=1 | H5Dcreate1 | -| | -DH5Dcreate\_vers=2 | H5Dcreate2 | -| H5Dopen | -DH5Dopen\_vers=1 | H5Dopen1 | -| | -DH5Dopen\_vers=2 | H5Dopen2 | -| H5Eclear | -DH5Eclear\_vers=1 | H5Eclear1 | -| | -DH5Eclear\_vers=2 | H5Eclear2 | -| H5Eprint | -DH5Eprint\_vers=1 | H5Eprint1 | -| | -DH5Eprint\_vers=2 | H5Eprint2 | -| H5Epush |-DH5Epush\_vers=1 | H5Epush1 | -| | -DH5Epush\_vers=2 | H5Epush2 | -| H5Eset\_auto | -DH5Eset\_auto\_vers=1 | H5Eset\_auto1 | -| | -DH5Eset\_auto\_vers=2 | H5Eset\_auto2 | -| H5Eget\_auto | -DH5Eget\_auto\_vers=1 | H5Eget\_auto1 | -| | -DH5Eget\_auto\_vers=2 | H5Eget\_auto2 | -| H5E\_auto\_t
Struct for H5Eset\_auto
and H5Eget\_auto | -DH5E\_auto\_t\_vers=1 | H5E\_auto1\_t | -| | -DH5E\_auto\_t\_vers=2 | H5E\_auto2\_t | -| H5Ewalk | -DH5Ewalk\_vers=1 | H5Ewalk1 with callback H5E\_walk1\_t and struct H5E\_error1\_t | -| | -DH5Ewalk\_vers=2 | H5Ewalk2 with callback H5E\_walk2\_t and struct H5E\_error2\_t | -| H5Gcreate | -DH5Gcreate\_vers=1 | H5Gcreate1 | -| | -DH5Gcreate\_vers=2 H5Gcreate2 | -| H5Gopen | -DH5Gopen\_vers=1 | H5Gopen1 | -| | -DH5Gopen\_vers=2 | H5Gopen2 | -| H5Pget\_filter | -DH5Pget\_filter\_vers=1 | H5Pget\_filter1 | -| | -DH5Pget\_filter\_vers=2 | H5Pget\_filter2 | -| H5Pget\_filter\_by\_id | -DH5Pget\_filter\_by\_id\_vers=1 | H5Pget\_filter\_by\_id1 | -| | -DH5Pget\_filter\_by\_id\_vers=2 | H5Pget\_filter\_by\_id2 | -| H5Pinsert | -DH5Pinsert\_vers=1 | H5Pinsert1 | -| | -DH5Pinsert\_vers=2 | H5Pinsert2 | -| H5Pregister | -DH5Pregister\_vers=1 | H5Pregister1 | -| | -DH5Pregister\_vers=2 | H5Pregister2 | -| H5Rget\_obj\_type | -DH5Rget\_obj\_typever\_vers=1 | H5Rget\_obj\_type1 | -| | -DH5Rget\_obj\_type\_vers=2 | H5Rget\_obj\_type2 | -| H5Tarray\_create | -DH5Tarray\_create\_vers=1 | H5Tarray\_create1 | -| | -DH5Tarray\_create\_vers=2 | H5Tarray\_create2 | -| H5Tcommit | -DH5Tcommit\_vers=1 | H5Tcommit1 | -| | -DH5Tcommit\_vers=2 | H5Tcommit2 | -| H5Tget\_array\_dims | -DH5Tget\_array\_dims\_vers=1 | H5Tget\_array\_dims1 | -| | -DH5Tget\_array\_dims\_vers=2 | H5Tget\_array\_dims2 | -| H5Topen | -DH5Topen\_vers=1 | H5Topen1 | -| | -DH5Topen\_vers=2 | H5Topen2 | -| H5Z\_class\_t Struct for H5Zregister | -DH5Z\_class\_t\_vers=1 | H5Z\_class1\_t | -| | -DH5Z\_class\_t\_vers=2 | H5Z\_class2\_t | - -_Further Information_ - -See the [HDF5 Reference Manual]() for complete descriptions of all API compatibility macros and versioned functions shown. - -It is possible to specify multiple function mappings for a single application build: - -h5cc ... -DH5Rdereference\_vers=1 -DH5Fget\_info\_vers=2 ...As a result of the function and struct mappings in this compile example, all occurrences of the macro H5Rdereference will be mapped to H5Rdereference1 and all occurrences of the macro H5Fget\_info will be mapped to H5Fget\_info2 for the application being built. - -The function and struct mappings can be used to guarantee that a given API compatibility macro will be mapped to the desired underlying function or struct version regardless of the library or application mappings. In cases where an application may benefit greatly from features offered by some of the later APIs, or must continue to use some earlier API versions for compatibility reasons, this fine-grained control may be very important. - -As noted earlier, the function mappings can only reference versioned functions that are included in the HDF5 library, as determined by the configure flag used to build the library. For example, if the HDF5 library being linked with the application was built with the --disable-deprecated-symbols option, version 1 of the underlying functions would not be available, and the example above that defined H5Rdereference\_vers=1 would not be supported. - -The function mappings do not negate any available functions. If H5Rdereference1 is available in the installed version of the HDF5 library, and the application was not compiled with the -DH5\_NO\_DEPRECATED\_SYMBOLS flag, the function H5Rdereference1 will remain available to the application through its versioned name. Similarly, H5Rdereference2 will remain available to the application as H5Rdereference2. The function mapping version flag H5Rdereference\_vers only controls the mapping of the API compatibility macro H5Rdereference to one of the two available functions. - -This can be especially useful in any case where the programmer does not have direct control over global macro definitions, such as when writing code meant to be copied to multiple applications or when writing code in a header file. - -## Compatibility Macros in HDF5 1.6.8 and Later -A series of similar compatibility macros were introduced into the release 1.6 series of the library, starting with release 1.6.8. These macros simply alias the '1' version functions, callbacks, and typedefs listed above to their original non-numbered names. - -These macros were strictly a forward-looking feature at that time; they were not necessary for compatibility in 1.6.x. These macros were created at that time to enable writing code that could be used with any version of the library after 1.6.8 and any library compilation options except H5\_NO\_DEPRECATED\_SYMBOLS, by always using the '1' version of versioned functions and types. For example, H5Dopen1 will always be interpreted in exactly the same manner by any version of the library since 1.6.8. - -## Common Use Case - -A common scenario where the API compatibility macros may be helpful is the migration of an existing application to a new HDF5 release An incremental migration plan is outlined here: - -1. Build the HDF5 library without specifying any library mapping configure flag. In this default mode, the 1.6.x, 1.8.x, and 1.10.x versions of the underlying functions are available, and the API compatibility macros will be mapped to the current HDF5 versioned functions. - -2. Compile the application with the -DH5\_USE\_NN\_API application mapping option if it was written for use with an earlier HDF5 library. Because the application mapping overrides the library mapping, the macros will all be mapped to the earlier versions of the functions. - -3. Remap one API compatibility macro at a time (or sets of macros), to use the current HDF5 versions. At each stage, use the function mappings to map the macros being worked on to the current versions. For example, use the -DH5Rdereference\_vers=2 version flag setting to remap the H5Rdereference macro to H5Rdereference2, the 1.10.x version.
-During this step, the application code will need to be modified to change the calling parameters used with the API compatibility macros to match the number and type of the 1.10.x versioned functions. The macro name, for example H5Rdereference, should continue to be used in the code, to allow for possible re-mappings to later versioned functions in a future release. - -4. After all macros have been migrated to the latest versioned functions in step 3, compile the application without any application or function mappings. This build uses the library mappings set in step 1, and maps API compatibility macros to the latest versions. - -5. Finally, compile the application with the application mapping -DH5\_NO\_DEPRECATED\_SYMBOLS, and address any failures to complete the application migration process. From 5661dfe22d4ff7d2e2ad98755d96e18f2a9c80c1 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sun, 7 Apr 2024 15:49:35 -0400 Subject: [PATCH 20/44] Add hdf5_plugins-docs Use the Registered Filter Plugins md file in github --- documentation/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/documentation/index.md b/documentation/index.md index c1ca95a6..2526e059 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -23,6 +23,9 @@ Look for more content here soon. Can't find what you're looking for? Visit [docs.hdfgroup.org](https://docs.hdfgroup.org/hdf5/v1_14/index.html) for many other documents that previously resided on the portal. +## HDF5 Plugins +* [Registered Filter Plugins](https://github.com/HDFGroup/hdf5_plugins/blob/master/docs/RegisteredFilterPlugins.md) + ## HDF4 * [Reference Manual](/documentation/hdf4-docs/HDF4_Reference_Manual.pdf) * [User Guide](/documentation/hdf4-docs/HDF4_Users_Guide.pdf) From 105add9b48b9ef97b581770524c6c97108522015 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sun, 7 Apr 2024 16:11:44 -0400 Subject: [PATCH 21/44] Link filters to their detail section Copied the content of RegisteredFilterPlugins.md from hdf5_plugins repo until we can figure out how to display: https://github.com/HDFGroup/hdf5_plugins/blob/master/docs/RegisteredFilterPlugins.md proplerly. --- .../hdf5-docs/registered_filter_plugins.md | 754 ++++++++++++++++-- 1 file changed, 687 insertions(+), 67 deletions(-) diff --git a/documentation/hdf5-docs/registered_filter_plugins.md b/documentation/hdf5-docs/registered_filter_plugins.md index b9428123..59c47578 100644 --- a/documentation/hdf5-docs/registered_filter_plugins.md +++ b/documentation/hdf5-docs/registered_filter_plugins.md @@ -1,76 +1,696 @@ ---- -title: Registered Filter Plugins ---- - -# Registered Filter Plugins - +Registered Filter Plugins +------------------------- Please be sure to see HDF5 Filter Plugins, a convenience software that packages together many of the commonly used filters that users have created and registered. -## Information on Registered Filter Plugins -Members of the HDF5 user community can create and register Third-Party (compression or other) filters for use with HDF5. See Example Code to Enable BZIP2 Compression in HDF5 for how to create a filter. +Information on Registered Filter Plugins +---------------------------------------- +Members of the HDF5 user community can create and register Third-Party (compression or other) filters for use with HDF5. + +To register a filter please contact The HDF Helpdesk with the following information: -To register a filter please contact The HDF Helpdesk with the following information: * Contact information for the developer requesting a new identifier * Short description of the new filter -* Links to any relevant information including licensing information +* Links to any relevant information including licensing information Here is the current policy regarding filter identifier assignment: -* The filter identifier is designed to be a unique identifier for the filter. Values from zero through 32,767 are reserved for filters supported by The HDF Group in the HDF5 library and for filters requested and supported by the 3rd party. -* Values from 32768 to 65535 are reserved for non-distributed uses (e.g., internal company usage) or for application usage when testing a feature. The HDF Group does not track or document the usage of filters with identifiers from this range. - +The filter identifier is designed to be a unique identifier for the filter. Values from `zero` through `32,767` are reserved for filters supported by The HDF Group in the HDF5 library and for filters requested and supported by the 3rd party. +Values from `32768` to `65535` are reserved for non-distributed uses (e.g., internal company usage) or for application usage when testing a feature. The HDF Group does not track or document the usage of filters with identifiers from this range. Please contact the maintainer of a filter for help with the filter/compression support in HDF5. -## List of Filters Registered with The HDF Group - -| Filter | Identifier Name | Short Description | -| --- | --- | --- | -| 305 | LZO | LZO lossless compression used by PyTables -| 307 | BZIP2 | BZIP2 lossless compression used by PyTables -| 32000 | LZF | LZF lossless compression used by H5Py project -| 32001 | BLOSC | Blosc lossless compression used by PyTables -| 32002 | MAFISC | Modified LZMA compression filter, MAFISC (Multidimensional Adaptive Filtering Improved Scientific data Compression) -| 32003 | Snappy | Snappy lossless compression -| 32004 | LZ4 | LZ4 fast lossless compression algorithm -| 32005 | APAX | Samplify's APAX Numerical Encoding Technology -| 32006 | CBF | All imgCIF/CBF compressions and decompressions, including Canonical, Packed, Packed Version 2, Byte Offset and Nibble Offset -| 32007 | JPEG-XR | Enables images to be compressed/decompressed with JPEG-XR compression -| 32008 | bitshuffle | Extreme version of shuffle filter that shuffles data at bit level instead of byte level -| 32009 | SPDP | SPDP fast lossless compression algorithm for single- and double-precision floating-point data -| 32010 | LPC-Rice | LPC-Rice multi-threaded lossless compression -| 32011 | CCSDS-123 | ESA CCSDS-123 multi-threaded compression filter -| 32012 | JPEG-LS | CharLS JPEG-LS multi-threaded compression filter -| [32013](https://h5z-zfp.readthedocs.io/en/latest/) | [zfp](https://zfp.readthedocs.io/en/latest/) | Lossy & lossless compression of floating point and integer datasets to meet rate, accuracy, and/or precision targets. -| 32014 | fpzip | Fast and Efficient Lossy or Lossless Compressor for Floating-Point Data -| 32015 | Zstandard | Real-time compression algorithm with wide range of compression / speed trade-off and fast decoder -| 32016 | B³D | GPU based image compression method developed for light-microscopy applications -| 32017 | SZ | An error-bounded lossy compressor for scientific floating-point data -| 32018 | FCIDECOMP | EUMETSAT CharLS compression filter for use with netCDF -| 32019 | JPEG | Jpeg compression filter -| 32020 | VBZ | Compression filter for raw dna signal data used by Oxford Nanopore -| 32021 | FAPEC | Versatile and efficient data compressor supporting many kinds of data and using an outlier-resilient entropy coder -| 32022 | BitGroom| The BitGroom quantization algorithm -| 32023 | Granular BitRound (GBR) | The GBG quantization algorithm is a significant improvement to the BitGroom filter -| 32024 | SZ3 | A modular error-bounded lossy compression framework for scientific datasets -| 32025 | Delta-Rice | Lossless compression algorithm optimized for digitized analog signals based on delta encoding and rice coding -| 32026 | BLOSC | The recent new-generation version of the Blosc compression library -| 32027 | FLAC | FLAC audio compression filter in HDF5 - -## Example Code to enable BZIP2 Compression in HDF5 - -Please be aware that compression filters require that the library not use `H5_MEMORY_ALLOC_SANITY_CHECK`. Building in debug mode automatically enables this feature in earlier releases, which causes memory allocation and free problems in filter applications. Future versions of HDF5 will not enable this feature. - -The [`bz_example.tar.gz`](/documentation/hdf5-docs/bz_example.tar.gz) file contains an example of implementing the BZIP2 filter to enable BZIP2 compression in HDF5. (This example is based on PyTables code that uses BZIP2 compression.). Download and uncompress this file as follows: - - gzip -cd bz_example.tar.gz | tar xvf - - -To compile the example, you will need to install the HDF5 library and use the h5cc compile script found in the bin/ directory of the HDF5 installation. - -For information on h5cc, see [Compiling Your HDF5 Application](https://docs.hdfgroup.org/hdf5/develop/_l_b_compiling.html). - -Please note that tools like h5dump that display information in an HDF5 file will not be able to display data that is compressed with BZIP2 compression, since BZIP2 is not implemented in HDF5. - -However, as of HDF5-1.8.11, a new HDF5 feature will enable the `h5dump` tool to determine that the data is compressed with an external compression filter such as BZIP2, and will automatically load the appropriate library and display the uncompressed data. - -The bz_example example code can be used for modifying the HDF5 source to "include" BZIP2 as one of the "internal" filters. For information on how to do this, see how ZLIB (the deflate filter) is implemented in the HDF5 source code. Specifically look at these files: - - `H5Z.c, H5Zdeflate.c and H5Pocpl.c` +List of Filters Registered with The HDF Group +--------------------------------------------- +|Filter |Identifier Name |Short Description| +|--------|----------------|---------------------| +|305 |
LZO |LZO lossless compression used by PyTables| +|307 |BZIP2 |BZIP2 lossless compression used by PyTables| +|32000 |LZF |LZF lossless compression used by H5Py project| +|32001 |BLOSC |Blosc lossless compression used by PyTables| +|32002 |MAFISC |Modified LZMA compression filter, MAFISC (Multidimensional Adaptive Filtering Improved Scientific data Compression)| +|32003 |Snappy |Snappy lossless compression| +|32004 |LZ4 |LZ4 fast lossless compression algorithm| +|32005 |APAX |Samplify’s APAX Numerical Encoding Technology| +|32006 |CBF |All imgCIF/CBF compressions and decompressions, including Canonical, Packed, Packed Version 2, Byte Offset and Nibble Offset| +|32007 |JPEG-XR |Enables images to be compressed/decompressed with JPEG-XR compression| +|32008 |bitshuffle |Extreme version of shuffle filter that shuffles data at bit level instead of byte level| +|32009 |SPDP |SPDP fast lossless compression algorithm for single- and double-precision floating-point data| +|32010 |LPC-Rice |LPC-Rice multi-threaded lossless compression| +|32011 |CCSDS-123 |ESA CCSDS-123 multi-threaded compression filter| +|32012 |JPEG-LS |CharLS JPEG-LS multi-threaded compression filter| +|32013 |zfp |Lossy & lossless compression of floating point and integer datasets to meet rate, accuracy, and/or precision targets.| +|32014 |fpzip |Fast and Efficient Lossy or Lossless Compressor for Floating-Point Data| +|32015 |Zstandard |Real-time compression algorithm with wide range of compression / speed trade-off and fast decoder| +|32016 |B³D |GPU based image compression method developed for light-microscopy applications| +|32017 |SZ |An error-bounded lossy compressor for scientific floating-point data| +|32018 |FCIDECOMP |EUMETSAT CharLS compression filter for use with netCDF| +|32019 |JPEG |Jpeg compression filter| +|32020 |VBZ |Compression filter for raw dna signal data used by Oxford Nanopore| +|32021 |FAPEC | Versatile and efficient data compressor supporting many kinds of data and using an outlier-resilient entropy coder| +|32022 |BitGroom |The BitGroom quantization algorithm| +|32023 |Granular |BitRound (GBR) The GBG quantization algorithm is a significant improvement to the BitGroom filter| +|32024 |SZ3 |A modular error-bounded lossy compression framework for scientific datasets| +|32025 |Delta-Rice |Lossless compression algorithm optimized for digitized analog signals based on delta encoding and rice coding| +|32026 |BLOSC |The recent new-generation version of the Blosc compression library| +|32027 |FLAC |FLAC audio compression filter in HDF5| +|32028 |H5Z-SPERR |HDF5 compression filter| + + +##

The Filters
+ +

LZO Filter

+ +#### Filter ID: 305 + +#### Filter Description: +LZO is a portable lossless data compression library written in ANSI C. +Reliable and thoroughly tested. High adoption - each second terrabytes of data are compressed by LZO. No bugs since the first release back in 1996. +Offers pretty fast compression and *extremely* fast decompression. +Includes slower compression levels achieving a quite competitive compression ratio while still decompressing at this very high speed. +Distributed under the terms of the GNU General Public License (GPL v2+). Commercial licenses are available on request. +Military-grade stability and robustness. + +#### Filter Information: +http://www.oberhumer.com/opensource/lzo/ +http://www.pytables.org + +#### Contact Information: +Francesc Alted +Email: faltet at pytables dot org + +## + +

BZIP2 Filter

+ +#### Filter ID: 307 + +#### Filter Description: +bzip2 is a freely available, patent free, high-quality data compressor. It typically compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical compressors), whilst being around twice as fast at compression and six times faster at decompression. + +#### Filter Information: +http://www.bzip.org +http://www.pytables.org + +#### Contact Information: +Francesc Alted +Email: faltet at pytables dot org + +## + +

LZF Filter

+ +#### Filter ID: 32000 + +#### Filter Description: +The LZF filter is an alternative DEFLATE-style compressor for HDF5 datasets, using the free LZF library by Marc Alexander Lehmann. Its main benefit over the built-in HDF5 DEFLATE filter is speed; in memory-to-memory operation as part of the filter pipeline, it typically compresses 3x-5x faster than DEFLATE, and decompresses 2x faster, while maintaining 50% to 90% of the DEFLATE compression ratio. + +LZF can be used to compress any data type, and requires no compile-time or run-time configuration. HDF5 versions 1.6.5 through 1.8.3 are supported. The filter is written in C and can be included directly in C or C++ applications; it has no external dependencies. The license is 3-clause BSD (virtually unrestricted, including commercial applications). + +More information, downloads, and benchmarks, are available at the http://h5py.org/lzf/. + +Additional Information: + +The LZF filter was developed as part of the h5py project, which implements a general-purpose interface to HDF5 from Python. + +#### Filter Information: + +The h5py homepage: http://h5py.org + +The LZF library homepage: http://home.schmorp.de/marc/liblzf.html + +#### Contact Information: + +Andrew Collette +Web: http://h5py.org + +## + +

Blosc Filter

+ +#### Filter ID: 32001 + +#### Filter Description: +Blosc is a high performance compressor optimized for binary data. It has been designed to compress data very fast, at the expense of achieving lesser compression ratios than, say, zlib+shuffle. It is mainly meant to not introduce a significant delay when dealing with data that is stored in high-performance I/O systems (like large RAID cabinets, or even the OS filesystem memory cache). + +It uses advanced cache-efficient techniques to reduce activity on the memory bus as much as possible. It also leverages SIMD (SSE2) and multi-threading capabilities present in nowadays multi-core processors so as to accelerate the compression/decompression process to a maximum. + +#### Filter Information: + +http://blosc.org/ +http://www.pytables.org + +#### Contact Information: + +Francesc Alted +Email: faltet at pytables dot org + +## + +

MAFISC Filter

+ +#### Filter ID: 32002 + +#### Filter Description: +This compressing filter exploits the multidimensionality and smoothness characterizing many scientific data sets. It adaptively applies some filters to preprocess the data and uses lzma as the actual compression step. It significantly outperforms pure lzma compression on most datasets. + +The software is currently under a rather unrestrictive two clause BSD style license. + +#### Filter Information: + +http://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc + +#### Contact Information: + +Nathanael Huebbe +Email: nathanael.huebbe at informatik dot uni-hamburg dot de + +## + +

Snappy Filter

+ +#### Filter ID: 32003 + +#### Filter Description: +Snappy-CUDA is a compression/decompression library that leverages GPU processing power to compress/decompress data. The Snappy compression algorithm does not aim for maximum compression or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression. For instance, compared to the fastest mode of zlib, the reference implementation of Snappy on the CPU is an order of magnitude faster for most inputs, but the resulting compressed files are anywhere from 20% to 100% bigger. + +#### Filter Information: + +https://github.com/lucasvr/snappy-cuda +https://github.com/google/snappy + +#### Contact Information: + +Lucas C. Villa Real +Email: lucasvr at gmail dot com + +## + +

LZ4 Filter

+ +#### Filter ID: 32004 + +#### Filter Description: +LZ4 is a very fast lossless compression algorithm, providing compression speed at 300 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speeds up and beyond 1GB/s per core, typically reaching RAM speed limits on multi-core systems. For a format description of the LZ4 compression filter in HDF5, see HDF5_LZ4.pdf. + +#### Filter Information: + +LZ4 Algorithm: https://github.com/nexusformat/HDF5-External-Filter-Plugins/tree/master/LZ4 + +LZ4 Code: + +Although the LZ4 software is not supported by The HDF Group, it is included in The HDF Group SVN repository so that it can be tested regularly with HDF5. For convenience, users can obtain it from SVN with the following command: + svn checkout https://svn.hdfgroup.org/hdf5_plugins/trunk/LZ4 LZ4 + +#### Contact Information: + +Michael Rissi (Dectris Ltd.) +Email: michael dot rissi at dectris dot com + +## + +

APAX

+ +#### Filter ID: 32005 + +Appears to be no longer available + +## + +

CBF

+ +#### Filter ID: 32006 + +#### Filter Description: +All imgCIF/CBF compressions and decompressions, including Canonical, Packed, Packed Vesrsion 2, Byte Offset and Nibble Offset. +License Information: GPL and LGPL + +#### Contact Information: + +Herbert J. Bernstein +Email: yayahjb at gmail dot com + +## + +

JPEG-XR

+ +#### Filter ID: 32007 + +#### Filter Description: +Filter that allows HDF5 image datasets to be compressed or decompressed using the JPEG-XR compression method. + +#### Filter Information: + +JPEG-XR Compression Method +JPEG-XR Filter for HDF5 + +#### Contact Information: + +Marvin Albert +Email: marvin dot albert at gmail dot com + +## + +

bitshuffle

+ +#### Filter ID: 32008 + +#### Filter Description: +This filter shuffles data at the bit level to improve compression. CHIME uses this filter for data acquisition. + +#### Filter Information: + +bitshuffle +CHIME + +#### Contact Information: + +Kiyoshi Masui +Email: kiyo at physics dot ubc dot ca + +## + +

SPDP

+ +#### Filter ID: 32009 + +#### Filter Description: +SPDP is a fast, lossless, unified compression/decompression algorithm designed for both 32-bit single-precision (float) and 64-bit double-precision (double) floating-point data. It also works on other data. + +#### Filter Information: + +http://cs.txstate.edu/~burtscher/research/SPDP/ + +#### Contact Information: + +Martin Burtscher +Email: burtscher at txstate dot edu + +## + +

LPC-Rice

+ +#### Filter ID: 32010 + +#### Filter Description: +LPC-Rice is a fast lossless compression codec that employs Linear Predictive Coding together with Rice coding. It supports multi-threading and SSE2 vector instructions, enabling it to exceed compression and decompression speeds of 1 GB/s. + +#### Filter Information: + +https://sourceforge.net/projects/lpcrice/ + +#### Contact Information: + +Frans van den Bergh +Email: fvdbergh at csir dot co dot za + +Derick Swanepoel +Email: dswanepoel at gmail dot com + +## + +

CCSDS-123

+ +#### Filter ID: 32011 + +#### Filter Description: +CCSDS-123 is a multi-threaded HDF5 compression filter using the ESA CCSDS-123 implementation. + +#### Filter Information: + +https://sourceforge.net/projects/ccsds123-hdf-filter/ + +#### Contact Information: + +Frans van den Bergh +Email: fvdbergh at csir dot co dot za + +Derick Swanepoel +Email: dswanepoel at gmail dot com + +## + +

JPEG-LS

+ +#### Filter ID: 32012 + +#### Filter Description: +JPEG-LS is a multi-threaded HDF5 compression filter using the CharLS JPEG-LS implementation. + +#### Filter Information: + +https://sourceforge.net/projects/jpegls-hdf-filter/ + +#### Contact Information: + +Frans van den Bergh +Email: fvdbergh at csir dot co dot za + +Derick Swanepoel +Email: dswanepoel at gmail dot com + +## + +

zfp

+ +#### Filter ID: 32013 + +#### Filter Description: +zfp is a BSD licensed open source C++ library for compressed floating-point arrays that support very high throughput read and write random access. zfp was designed to achieve high compression ratios and therefore uses lossy but optionally error-bounded compression. Although bit-for-bit lossless compression is not always possible, zfp is usually accurate to within machine epsilon in near-lossless mode, and is often orders of magnitude more accurate and faster than other lossy compressors. + +#### Filter Information: + +https://github.com/LLNL/H5Z-ZFP + +For more information see: http://computation.llnl.gov/projects/floating-point-compression/ + +#### Contact Information: + +Mark Miller +Email: miller86 at llnl dot gov + +Peter Lindstrom +Email: pl at llnl dot gov + +## + +

fpzip

+ +#### Filter ID: 32014 + +#### Filter Description: +fpzip is a library for lossless or lossy compression of 2D or 3D floating-point scalar fields. Although written in C++, fpzip has a C interface. fpzip was developed by Peter Lindstrom at LLNL. + +#### Filter Information: + +For more information see: http://computation.llnl.gov/projects/floating-point-compression/ + +#### Contact Information: + +Peter Lindstrom +Email: pl at llnl dot gov + +## + +

Zstandard

+ +#### Filter ID: 32015 + +#### Filter Description: +Zstandard is a real-time compression algorithm, providing high compression ratios. It offers a very wide range of compression / speed trade-offs, while being backed by a very fast decoder. The Zstandard library is provided as open source software using a BSD license. + +#### Filter Information: + +https://github.com/aparamon/HDF5Plugin-Zstandard + +#### Contact Information: + +Andrey Paramonov +Email: paramon at acdlabs dot ru + +## + +

B³D

+ +#### Filter ID: 32016 + +#### Filter Description: +B³D is a fast (~1 GB/s), GPU based image compression method, developed for light-microscopy applications. Alongside lossless compression, it offers a noise dependent lossy compression mode, where the loss can be tuned as a proportion of the inherent image noise (accounting for photon shot noise and camera read noise). It not only allows for fast compression during image, but can achieve compression ratios up 100. + +[Information](http://www.biorxiv.org/content/early/2017/07/21/164624) + +## + +

SZ

+ +#### Filter ID: 32017 + +#### Filter Description: +SZ is a fast and efficient error-bounded lossy compressor for floating-point data. It was developed for scientific applications producing large-scale HPC data sets. SZ supports C, Fortran, and Java and has been tested on Linux and Mac OS X. + +#### Filter Information: + +[Information](https://collab.cels.anl.gov/display/ESR/SZ) +[github](https://github.com/disheng222/SZ) +[License](https://www.mcs.anl.gov/~shdi/download/sz-download.html) + +#### Contact Information: + +Sheng Di +Email: sdi1 at anl dot gov + +Franck Cappello +Email: cappello at mcs dot anl dot gov + +## + +

FCIDECOMP

+ +#### Filter ID: 32018 + +#### Filter Description: +FCIDECOMP is a third-party compression filter used at EUMETSAT for the compression of netCDF-4 files. It is a codec implementing JPEG-LS using CharLS used for satellite imagery. + +#### Filter Information: + +All software and documentation can be found at this link: + +ftp://ftp.eumetsat.int/pub/OPS/out/test-data/Test-data-for-External-Users/MTG_FCI_L1c_Compressed-Datasets_and_Decompression-Plugin_April2017/Decompression_Plugin/ + +#### Contact Information: + +Dr. Daniel Lee +Email: daniel dot lee at eumetsat dot int + +## + +

JPEG

+ +#### Filter ID: 32019 + +#### Filter Description: +This is a lossy compression filter. It provides a user-specified "quality factor" to control the trade-off of size versus accuracy. + +#### Filter Information: + +Information +Github +License + +libjpeg: This library is available as a package for most Linux distributions, and source code is available from https://www.ijg.org/. + +Restrictions: + +Only 8-bit unsigned data arrays are supported. +Arrays must be either: + 2-D monochromatic [NumColumns, NumRows] + 3-D RGB [3, NumColumns, NumRows] +Chunking must be set to the size of one entire image so the filter is called once for each image. +Using the JPEG filter in your application: + +HDF5 only supports compression for "chunked" datasets; this just means that you need to call H5Pset_chunk to specify a chunk size. The chunking must be set to the size of a single image for the JPEG filter to work properly. + +When calling H5Pset_filter for compression it must be called with cd_nelmts=4 and cd_values as follows: + + cd_values[0] = quality factor (1-100) + + cd_values[1] = numColumns + + cd_values[2] = numRows + + cd_values[3] = 0=Mono, 1=RGB + +Common h5repack parameter: UD=32019,0,4,q,c,r,t + +#### Contact Information: + +Mark Rivers , University of Chicago (rivers at cars.uchicago.edu) + +## + +

VBZ

+ +#### Filter ID: 32020 + +#### Filter Description: +This filter is used by Oxford Nanopore specifically to compress raw dna signal data (signed integer). To achieve this it uses both: + +streamvbyte (https://github.com/lemire/streamvbyte) + +zstd (https://github.com/facebook/zstd) + +#### Contact Information: + +George Pimm + +## + +

FAPEC

+ +#### Filter ID: 32021 + +#### Filter Description: + +FAPEC is a versatile and efficient data compressor, initially designed for satellite payloads but later extended for ground applications. It relies on an outlier-resilient entropy coding core with similar ratios and speeds than CCSDS 121.0 (adaptive Rice). + +FAPEC has a large variety of pre-processing stages and options: images (greyscale, colour, hyperspectral); time series or waveforms (including interleaving, e.g. for multidimensional or interleaved time series or tabular data); floating point (single+double precision); text (including LZW compression and our faster FAPECLZ); tabulated text (CSV); genomics (FastQ); geophysics (Kongsberg's water column datagrams); etc. + +Most stages support samples of 8 to 24 bits (big/little endian, signed/unsigned), and lossless/lossy options. It can be extended with new, tailored pre-processing stages. It includes encryption options (AES-256 based on OpenSSL, and our own XXTEA implementation). + +The FAPEC library and CLI runs on Linux, Windows and Mac. The HDF5 user must request and install the library separately, thus allowing to upgrade it without requiring changes in your HDF5 code. + +#### Filter Information: + +https://www.dapcom.es/fapec/ +https://www.dapcom.es/get-fapec/ +https://www.dapcom.es/resources/FAPEC_EndUserLicenseAgreement.pdf + +#### Contact Information: + +Jordi Portell i de Mora (DAPCOM Data Services S.L.) + +fapec at dapcom dot es + +## + +

BitGroom

+ +#### Filter ID: 32022 + +#### Filter Description: + +The BitGroom quantization algorithm is documented in: + +Zender, C. S. (2016), Bit Grooming: Statistically accurate precision-preserving quantization with compression, evaluated in the netCDF Operators (NCO, v4.4.8+), Geosci. Model Dev., 9, 3199-3211, doi:10.5194/gmd-9-3199-2016. + +#### Filter Information: + +The filter is documented and maintained in the Community Codec Repository (https://github.com/ccr/ccr). + +#### Contact Information: + +Charlie Zender (University of California, Irvine) + +## + +

Granular BitRound (GBR)

+ +#### Filter ID: 32023 + +#### Filter Description: + +The GBG quantization algorithm is a significant improvement the BitGroom filter documented in: + +Zender, C. S. (2016), Bit Grooming: Statistically accurate precision-preserving quantization with compression, evaluated in the netCDF Operators (NCO, v4.4.8+), Geosci. Model Dev., 9, 3199-3211, doi:10.5194/gmd-9-3199-2016. + +#### Filter Information: + +This filter is documented, implemented, and maintained in the Community Codec Repository (https://github.com/ccr/ccr). + +#### Contact Information: + +Charlie Zender (University of California, Irvine) + +## + +

SZ3

+ +#### Filter ID: 32024 + +#### Filter Description: + +SZ3 is a modular error-bounded lossy compression framework for scientific datasets, which allows users to customize their own compression pipeline to adapt to diverse datasets and user-requirements. Compared with SZ2 (filter id: 32017), SZ3 has integrated a more effective prediction such that its compression qualities/ratios are much higher than that of SZ2 in most of cases. + +#### Filter Information: + +This filter is documented, implemented, and maintained in github: https://github.com/szcompressor/SZ3. + +License: https://github.com/szcompressor/SZ/blob/master/copyright-and-BSD-license.txt + +#### Contact Information: + +Sheng Di +Email: sdi1 at anl dot gov + +Franck Cappello +Email: cappello at mcs dot anl dot gov + +## + +

Delta-Rice

+ +#### Filter ID: 32025 + +#### Filter Description: + +Lossless compression algorithm optimized for digitized analog signals based on delta encoding and rice coding. + +#### Filter Information: + +This filter is documented, implemented, and maintained at: https://gitlab.com/dgma224/deltarice. + +#### Contact Information: + +David Mathews +Email: david dot mathews dot 1994 at gmail dot com + +## + +

Blosc2 Filter

+ +#### Filter ID: 32026 + +#### Filter Description: + +Blosc is a high performance compressor optimized for binary data (i.e. floating point numbers, integers and booleans). It has been designed to transmit data to the processor cache faster than the traditional, non-compressed, direct memory fetch approach via a memcpy() OS call. Blosc main goal is not just to reduce the size of large datasets on-disk or in-memory, but also to accelerate memory-bound computations. + +C-Blosc2 is the new major version of C-Blosc, and tries hard to be backward compatible with both the C-Blosc1 API and its in-memory format. + +#### Filter Information: + +Blosc project: https://www.blosc.org + +C-Blosc2 docs: https://www.blosc.org/c-blosc2/c-blosc2.html + +License: https://github.com/Blosc/c-blosc2/blob/main/LICENSE.txt + +#### Contact Information: + +Francesc Alted +Email: faltet at gmail dot org (BDFL for the Blosc project) + +## + +

FLAC Filter

+ +#### Filter ID: 32027 + +#### Filter Description: + +FLAC is an audio compression filter in HDF5. (Our ultimate goal is to use it via h5py in the hdf5plugin library: https://github.com/silx-kit/hdf5plugin). + +#### Filter Information: + +The FLAC filter is open source: https://github.com/xiph/flac + +libFLAC has BSD-like license: https://github.com/xiph/flac/blob/master/CONTRIBUTING.md + +#### Contact Information: + +Laurie Stephey +Email: lastephey at lbl dot gov + +## + +

H5Z-SPERR Filter

+ +#### Filter ID: 32028 + +#### Filter Description: + + + +#### Filter Information: +https://github.com/NCAR/H5Z-SPERR + +#### Contact Information: +Samuel Li +Email: shaomeng at ucar dot edu + From 81de9826d02ba661297e7d3e7c39cec532bcc5ff Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sun, 7 Apr 2024 17:22:50 -0400 Subject: [PATCH 22/44] Fix format --- documentation/hdf5-docs/registered_filter_plugins.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/documentation/hdf5-docs/registered_filter_plugins.md b/documentation/hdf5-docs/registered_filter_plugins.md index 59c47578..18a9d8a3 100644 --- a/documentation/hdf5-docs/registered_filter_plugins.md +++ b/documentation/hdf5-docs/registered_filter_plugins.md @@ -1,9 +1,11 @@ Registered Filter Plugins ------------------------- + Please be sure to see HDF5 Filter Plugins, a convenience software that packages together many of the commonly used filters that users have created and registered. Information on Registered Filter Plugins ---------------------------------------- + Members of the HDF5 user community can create and register Third-Party (compression or other) filters for use with HDF5. To register a filter please contact The HDF Helpdesk with the following information: @@ -19,6 +21,7 @@ Please contact the maintainer of a filter for help with the filter/compression s List of Filters Registered with The HDF Group --------------------------------------------- + |Filter |Identifier Name |Short Description| |--------|----------------|---------------------| |305 |LZO |LZO lossless compression used by PyTables| From 15e4fa467212741c56abe317c678b2a3326587ca Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Sun, 7 Apr 2024 18:09:59 -0400 Subject: [PATCH 23/44] Fix format --- .../hdf5-docs/registered_filter_plugins.md | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/documentation/hdf5-docs/registered_filter_plugins.md b/documentation/hdf5-docs/registered_filter_plugins.md index 18a9d8a3..4b87e80b 100644 --- a/documentation/hdf5-docs/registered_filter_plugins.md +++ b/documentation/hdf5-docs/registered_filter_plugins.md @@ -79,7 +79,7 @@ http://www.pytables.org Francesc Alted Email: faltet at pytables dot org -## +---

BZIP2 Filter

@@ -96,7 +96,7 @@ http://www.pytables.org Francesc Alted Email: faltet at pytables dot org -## +---

LZF Filter

@@ -124,7 +124,7 @@ The LZF library homepage: http://home.schmorp.de/marc/liblzf.html Andrew Collette Web: http://h5py.org -## +---

Blosc Filter

@@ -145,7 +145,7 @@ http://www.pytables.org Francesc Alted Email: faltet at pytables dot org -## +---

MAFISC Filter

@@ -165,7 +165,7 @@ http://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc Nathanael Huebbe Email: nathanael.huebbe at informatik dot uni-hamburg dot de -## +---

Snappy Filter

@@ -184,7 +184,7 @@ https://github.com/google/snappy Lucas C. Villa Real Email: lucasvr at gmail dot com -## +---

LZ4 Filter

@@ -207,7 +207,7 @@ Although the LZ4 software is not supported by The HDF Group, it is included in T Michael Rissi (Dectris Ltd.) Email: michael dot rissi at dectris dot com -## +---

APAX

@@ -215,7 +215,7 @@ Email: michael dot rissi at dectris dot com Appears to be no longer available -## +---

CBF

@@ -230,7 +230,7 @@ License Information: GPL and LGPL Herbert J. Bernstein Email: yayahjb at gmail dot com -## +---

JPEG-XR

@@ -249,7 +249,7 @@ JPEG-XR Filter for HDF5 Marvin Albert Email: marvin dot albert at gmail dot com -## +---

bitshuffle

@@ -268,7 +268,7 @@ CHIME Kiyoshi Masui Email: kiyo at physics dot ubc dot ca -## +---

SPDP

@@ -286,7 +286,7 @@ http://cs.txstate.edu/~burtscher/research/SPDP/ Martin Burtscher Email: burtscher at txstate dot edu -## +---

LPC-Rice

@@ -307,7 +307,7 @@ Email: fvdbergh at csir dot co dot za Derick Swanepoel Email: dswanepoel at gmail dot com -## +---

CCSDS-123

@@ -328,7 +328,7 @@ Email: fvdbergh at csir dot co dot za Derick Swanepoel Email: dswanepoel at gmail dot com -## +---

JPEG-LS

@@ -349,7 +349,7 @@ Email: fvdbergh at csir dot co dot za Derick Swanepoel Email: dswanepoel at gmail dot com -## +---

zfp

@@ -372,7 +372,7 @@ Email: miller86 at llnl dot gov Peter Lindstrom Email: pl at llnl dot gov -## +---

fpzip

@@ -390,7 +390,7 @@ For more information see: http://computation.llnl.gov/projects/floating-point-co Peter Lindstrom Email: pl at llnl dot gov -## +---

Zstandard

@@ -408,7 +408,7 @@ https://github.com/aparamon/HDF5Plugin-Zstandard Andrey Paramonov Email: paramon at acdlabs dot ru -## +---

B³D

@@ -419,7 +419,7 @@ B³D is a fast (~1 GB/s), GPU based image compression method, developed for ligh [Information](http://www.biorxiv.org/content/early/2017/07/21/164624) -## +---

SZ

@@ -442,7 +442,7 @@ Email: sdi1 at anl dot gov Franck Cappello Email: cappello at mcs dot anl dot gov -## +---

FCIDECOMP

@@ -462,7 +462,7 @@ ftp://ftp.eumetsat.int/pub/OPS/out/test-data/Test-data-for-External-Users/MTG_FC Dr. Daniel Lee Email: daniel dot lee at eumetsat dot int -## +---

JPEG

@@ -506,7 +506,7 @@ Common h5repack parameter: UD=32019,0,4,q,c,r,t Mark Rivers , University of Chicago (rivers at cars.uchicago.edu) -## +---

VBZ

@@ -523,7 +523,7 @@ zstd (https://github.com/facebook/zstd) George Pimm -## +---

FAPEC

@@ -551,7 +551,7 @@ Jordi Portell i de Mora (DAPCOM Data Services S.L.) fapec at dapcom dot es -## +---

BitGroom

@@ -571,7 +571,7 @@ The filter is documented and maintained in the Community Codec Repository (https Charlie Zender (University of California, Irvine) -## +---

Granular BitRound (GBR)

@@ -591,7 +591,7 @@ This filter is documented, implemented, and maintained in the Community Codec Re Charlie Zender (University of California, Irvine) -## +---

SZ3

@@ -615,7 +615,7 @@ Email: sdi1 at anl dot gov Franck Cappello Email: cappello at mcs dot anl dot gov -## +---

Delta-Rice

@@ -634,7 +634,7 @@ This filter is documented, implemented, and maintained at: https://gitlab.com/dg David Mathews Email: david dot mathews dot 1994 at gmail dot com -## +---

Blosc2 Filter

@@ -659,7 +659,7 @@ License: https://github.com/Blosc/c-blosc2/blob/main/LICENSE.txt Francesc Alted Email: faltet at gmail dot org (BDFL for the Blosc project) -## +---

FLAC Filter

@@ -680,7 +680,7 @@ libFLAC has BSD-like license: https://github.com/xiph/flac/blob/master/CONTRIBUT Laurie Stephey Email: lastephey at lbl dot gov -## +---

H5Z-SPERR Filter

From 2ec97e385f4706109fbd2a7c1b55eea36acb5483 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Mon, 8 Apr 2024 11:21:54 -0400 Subject: [PATCH 24/44] Add filter detail per user's request Fixes issue HELP-2352 --- documentation/hdf5-docs/registered_filter_plugins.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/documentation/hdf5-docs/registered_filter_plugins.md b/documentation/hdf5-docs/registered_filter_plugins.md index 4b87e80b..bf07d9b3 100644 --- a/documentation/hdf5-docs/registered_filter_plugins.md +++ b/documentation/hdf5-docs/registered_filter_plugins.md @@ -54,7 +54,7 @@ List of Filters Registered with The HDF Group |32025 |Delta-Rice |Lossless compression algorithm optimized for digitized analog signals based on delta encoding and rice coding| |32026 |BLOSC |The recent new-generation version of the Blosc compression library| |32027 |FLAC |FLAC audio compression filter in HDF5| -|32028 |H5Z-SPERR |HDF5 compression filter| +|32028 |H5Z-SPERR |H5Z-SPERR is the HDF5 filter for SPERR| ##
The Filters
@@ -688,10 +688,11 @@ Email: lastephey at lbl dot gov #### Filter Description: - +SPERR is a wavelet-based lossy compressor for floating-point scientific data; it achieves one of the best compression ratios given a user-prescribed error tolerance (i.e., maximum point-wise error). SPERR also supports two distinctive decoding modes, namely "flexible-rate decoding" and "multi-resolution decoding," that facilitate data analysis with various constraints. More details are available on SPERR Github repository: https://github.com/NCAR/SPERR. #### Filter Information: -https://github.com/NCAR/H5Z-SPERR + +H5Z-SPERR is the HDF5 filter for SPERR. It's also available on Github: https://github.com/NCAR/H5Z-SPERR. #### Contact Information: Samuel Li From 2142327ab97ee2b238d2ee78ca874e0f69319978 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Wed, 10 Apr 2024 16:25:36 -0400 Subject: [PATCH 25/44] Update 1.14.4 release page --- downloads/hdf5/hdf5_1_14_4.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 7af8b99e..1eb47df6 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -10,12 +10,12 @@ title: HDF5 Library and Tools 1.14.4 ## Release Information | Version | HDF5 1.14.4 | -| Release Date | 03/31/24 | +| Release Date | 04/11/24 | | Additional Release Information | [Documentation](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | || [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | || Software Changes From Release to Release for HDF5-1.14 | || New Features in HDF5 Release 1.14 | -|| [Newsletter Announcement](https://www.hdfgroup.org/2023/10/release-of-hdf5-1-14-3-library-and-tools-newsletter-199/) | +|| [Newsletter Announcement](https://www.hdfgroup.org/2024/10/release-of-hdf5-1-14-4-library-and-tools-newsletter-199/) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | || [API Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-interface_compatibility_report.html) | || [Java Interface Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-java-interface_compatibility_report.html) | @@ -25,12 +25,12 @@ title: HDF5 Library and Tools 1.14.4 | File | Type | Install Instructions | | ---- | ---- | ---- | -| [hdf5-1.14.4.tar.gz](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.tar.gz)
([sha256](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.tar.gz.sha256)) | Source Release | Unix Gzipped source tar file.
See Methods to obtain (below).
See warning below about autotools builds.
release_docs/ directory in source | -| [hdf5-1.14.4.tar.bz2](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.tar.bz2.sha256)
([sha256](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.tar.bz2.sha256)) | Source Release | Unix Gzipped source tar file.
See warning below about autotools builds.
release_docs/ directory in source | -| [hdf5-1.14.4.zip](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.zip)
([sha256](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.zip.sha256)) | Source Release | Windows zip file
release_docs/ directory in source | -| [CMake-hdf5-1.14.4.tar.gz](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/CMake-hdf5-1.14.3.tar.gz)
([sha256](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/CMake-hdf5-1.14.3.tar.gz.sha256)) | CMake Source Release | [Building HDF5 with CMake](https://raw.githubusercontent.com/HDFGroup/hdf5/hdf5_1_14_3/release_docs/INSTALL_CMake.txt) | -| [CMake-hdf5-1.14.4.zip](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/CMake-hdf5-1.14.3.zip)
([sha256](https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/CMake-hdf5-1.14.3.zip.sha256)) | CMake Source Release | [Building HDF5 with CMake](https://raw.githubusercontent.com/HDFGroup/hdf5/hdf5_1_14_3/release_docs/INSTALL_CMake.txt) | | -| [Ready to use Binaries](https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.14/hdf5-1.14.3/bin/) | Pre-built binary distributions for Unix and Windows || +| [hdf5-1.14.4.tar.gz](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4.tar.gz) | Source release | +| [hdf5-1.14.4.zip](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4.zip) | Source release | +| [Ready to use Binaries](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4) | Pre-built binary distributions for Unix and Windows | +| [sha256](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4/sha256sums.txt) | Checksum file | + +Please refer to [Build Instructions](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4/release_docs/INSTALL) for building with either CMake or Autotools. **Methods to obtain (gz file)** From a37af3d99bb29ec00dbdc896ea690ae24df70c45 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Wed, 10 Apr 2024 22:03:15 -0400 Subject: [PATCH 26/44] Update pages for 1.14.4 release --- .../release_specifics/sw_changes_1.14.md | 462 ++++++------------ downloads/hdf5/hdf5_1_14_4.md | 15 +- 2 files changed, 155 insertions(+), 322 deletions(-) diff --git a/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md b/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md index 1bd049c7..b3796bd8 100644 --- a/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md +++ b/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md @@ -10,9 +10,6 @@ redirect_from: See [API Compatibility Macros](api_comp_macros.html) in HDF5 for details on using HDF5 version 1.14 with previous releases. -* [Compatibility report for Release 1.14.3 versus Release 1.14.2](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.2-vs-hdf5-1.14.3-interface_compatibility_report.html) - -* [Compatibility report for Release 1.14.2 versus Release 1.14.1](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.1-2-vs-hdf5-1.14.2-interface_compatibility_report.html) * [Compatibility report for Release 1.14.1 versus Release 1.14.0](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.0-vs-hdf5-1.14.1-interface_compatibility_report.html) @@ -34,11 +31,47 @@ The following information is included below. * Release 1.14.1 versus Release 1.14.0 * Release 1.14.1 versus Release 1.12.2 -The release notes also list changes made to the library, but these notes tend to be more at a more detail-oriented level. The release notes may include new features, bugs fixed, supported configuration features, platforms on which the library has been tested, and known problems. The release note files are listed below and can be found at the top level of the HDF5 source code tree in the release\_docs directory. +The release notes also list changes made to the library, but these notes tend to be more at a more detail-oriented level. The release notes may include new features, bugs fixed, supported configuration features, platforms on which the library has been tested, and known problems. The release note files are listed in each release section and can be found at the top level of the HDF5 source code tree in the release\_docs directory.

Release 1.14.4 versus Release 1.14.3

+

Release 1.14.3 versus Release 1.14.2

+This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.14.2 to Release 1.14.3. + +### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros +Following are the new APIs introduced in HDF5-1.14.3. + +#### In the C Interface (main library) + +| Function | Description | +| ---------------------------------- | ----------------------------------- | +| H5Pget_actual_selection_io_mode() | Retrieves actual selection I/O mode | + +#### In the Fortran Interface + +| Function | Description | +| ---------------------------------- | ----------------------------------- | +| h5get_free_list_sizes_f | Retrieves actual selection I/O mode | +| h5dwrite_chunk_f | Retrieves actual selection I/O mode | +| h5dread_chunk_f | Retrieves actual selection I/O mode | +| h5fget_info_f | Retrieves actual selection I/O mode | +| h5lvisit_f | Retrieves actual selection I/O mode | +| h5lvisit_by_name_f | Retrieves actual selection I/O mode | +| h5pget_no_selection_io_cause_f | Retrieves actual selection I/O mode | +| h5pget_mpio_no_collective_cause_f | Retrieves actual selection I/O mode | +| h5sselect_shape_same_f | Retrieves actual selection I/O mode | +| h5sselect_intersect_block_f | Retrieves actual selection I/O mode | +| h5pget_file_space_page_size_f | Retrieves actual selection I/O mode | +| h5pset_file_space_page_size_f | Retrieves actual selection I/O mode | +| h5pget_file_space_strategy_f | Retrieves actual selection I/O mode | +| h5pset_file_space_strategy_f | Retrieves actual selection I/O mode | + +In addition, there are other new Fortran functions including the Fortran async APIs +and the Fortran VOL capability definitions. + +* [Compatibility report for Release 1.14.3 versus Release 1.14.2](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.2-vs-hdf5-1.14.3-interface_compatibility_report.html) +

Release 1.14.2 versus Release 1.14.1

This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.14.1 to Release 1.14.2. @@ -50,15 +83,17 @@ Following are the new APIs introduced in HDF5-1.14.2. | Function | Description | | ---------------------------------- | ------------------------------------------------------------ | -| H5FDread\_from\_selection | Performs a series of scalar reads. -| H5FDread\_vector\_from\_selection | Performs a vector read if vector reads are supported, or a series of scalar reads, otherwise. -| H5FDwrite\_from\_selection | Performs a series of scalar writes. -| H5FDwrite\_vector\_from\_selection | Performs a vector write if vector writes are supported, or a series of scalar writes, otherwise. -| H5Pget\_fapl\_ros3\_token | Returns session/security token of the ros3 file access property list -| H5Pset\_fapl\_ros3\_token | Modifies the file access property list to use the H5FD\_ROS3 driver +| H5FDread\_from\_selection | Performs a series of scalar reads. | +| H5FDread\_vector\_from\_selection | Performs a vector read if vector reads are supported, or a series of scalar reads, otherwise. | +| H5FDwrite\_from\_selection | Performs a series of scalar writes. | +| H5FDwrite\_vector\_from\_selection | Performs a vector write if vector writes are supported, or a series of scalar writes, otherwise. | +| H5Pget\_fapl\_ros3\_token | Returns session/security token of the ros3 file access property list | +| H5Pset\_fapl\_ros3\_token | Modifies the file access property list to use the H5FD\_ROS3 driver | +* [Compatibility report for Release 1.14.2 versus Release 1.14.1](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.1-2-vs-hdf5-1.14.2-interface_compatibility_report.html)

Release 1.14.1 versus Release 1.14.0

+ This section lists interface-level changes and other user-visible changes in behavior in the transition from HDF5 Release 1.14.0 to Release 1.14.1. ### New and Changed Functions, Classes, Subroutines, Wrappers, and Macros @@ -66,31 +101,34 @@ Following are the new APIs introduced in HDF5-1.14.1. #### In the C Interface (main library) -H5PGET\_MODIFY\_WRITE\_BUF -Retrieves the "modify write buffer" property -H5PGET\_NO\_SELECTION\_IO\_CAUSE Retrieves the cause for not performing selection or vector I/O on the last parallel I/O call -H5PGET\_SELECTION\_IO Retrieves the selection I/O mode -H5PSET\_MODIFY\_WRITE\_BUF Allows the library to modify the contents of the write buffer -H5PSET\_SELECTION\_IO Sets the selection I/O mode - - -In the Fortran Interface - -h5pget\_modify\_write\_buf\_f -Retrieves the "modify write buffer" property -h5pget\_selection\_io\_f Retrieves the selection I/O mode -h5pset\_modify\_write\_buf\_f Allows the library to modify the contents of the write buffer -h5pset\_selection\_io\_f Sets the selection I/O mode +| Function | Description | +| -------------------------------- | ------------------------------------------------------------ | +| H5PGET\_MODIFY\_WRITE\_BUF | Retrieves the "modify write buffer" property | +| H5PGET\_NO\_SELECTION\_IO\_CAUSE | Retrieves the cause for not performing selection or vector I/O on the last parallel I/O call | +| H5PGET\_SELECTION\_IO | Retrieves the selection I/O mode | +| H5PSET\_MODIFY\_WRITE\_BUF | Allows the library to modify the contents of the write buffer | +| H5PSET\_SELECTION\_IO | Sets the selection I/O mode | + +#### In the Fortran Interface + +| Function | Description | +| -------------------------------- | ------------------------------------------------------------ | +| h5pget\_modify\_write\_buf\_f | Retrieves the "modify write buffer" property | +| h5pget\_selection\_io\_f | Retrieves the selection I/O mode | +| h5pset\_modify\_write\_buf\_f | Allows the library to modify the contents of the write buffer| +| h5pset\_selection\_io\_f | Sets the selection I/O mode |

Release 1.14.0 versus Release 1.12.2

+ HDF5 version 1.14.0 introduces the following new features: -Asynchronous I/O operations -New tools h5dwalk and h5delete -Subfiling VFD -Onion VFD -Multi Dataset I/O +* Asynchronous I/O operations +* New tools h5dwalk and h5delete +* Subfiling VFD +* Onion VFD +* Multi Dataset I/O + Users might find these names familiar already and that is because they were introduced in the experimental series 1.13. In addition, this version provides many new C APIs and other user-visible changes in behavior in the transition from HDF5 Release 1.12.2 to Release 1.14.0. HDF5 1.14.0 adds no new API calls that require use of the API Compatibility Macros for the main library. Some calls have been removed or have had their signature change, however. @@ -101,287 +139,83 @@ In the C Interface (main library) Following are the new APIs introduced in HDF5-1.14.0. - -H5A\_CLOSE\_ASYNC - -N - -Asynchronous version of H5Aclose - -H5A\_CREATE\_ASYNC - -N - -Asynchronous version of H5Acreate - -H5A\_CREATE\_BY\_NAME\_ASYNC - -N - -Asynchronous version of H5Acreate\_by\_name - -H5A\_EXISTS\_ASYNC - -N - -Asynchronous version of H5Aexists - -H5A\_EXISTS\_BY\_NAME\_ASYNC - -N - -Asynchronous version of H5Aexists\_by\_name - -H5A\_OPEN\_ASYNC - -N - -Asynchronous version of H5Aopen - -H5A\_OPEN\_BY\_IDX\_ASYNC - -N - -Asynchronous version of H5Aopen\_by\_idx - -H5A\_OPEN\_BY\_NAME\_ASYNC - -N - -Asynchronous version of H5Aopen\_by\_name - -H5A\_READ\_ASYNC - -N - -Asynchronous version of H5Aread - -H5A\_RENAME\_ASYNC - -N - -Asynchronous version of H5Arename - -H5A\_RENAME\_BY\_NAME\_ASYNC - -N - -Asynchronous version of H5Arename\_by\_name - -H5A\_WRITE\_ASYNC - -N - -Asynchronous version of H5Awrite - - -H5D\_CHUNK\_ITER - -N Iterate over all chunks of a chunked dataset -H5D\_CLOSE\_ASYNC - -N Asynchronous version of H5Dclose -H5D\_CREATE\_ASYNC - -N Asynchronous version of H5Dcreate -H5D\_GET\_SPACE\_ASYNC - -N Asynchronous version of H5Dget\_space -H5D\_OPEN\_ASYNC - -N Asynchronous version of H5Dopen -H5D\_READ\_ASYNC - -N Asynchronous version of H5Dread -H5D\_READ\_MULTI - -N Reads raw data from a set of datasets into the provided buffers -H5D\_READ\_MULTI\_ASYNC - -N Asynchronous version of H5Dread\_multi -H5D\_SET\_EXTENT\_ASYNC - -N Asynchronous version of H5Dset\_extent -H5D\_WRITE\_ASYNC - -N Asynchronous version of H5Dwrite -H5D\_WRITE\_MULTI - -N Writes raw data from a set buffers to a set of datasets -H5D\_WRITE\_MULTI\_ASYNC - -N Asynchronous version of H5Dwrite\_multi - -H5E\_APPEND\_STACK - -N Appends one error stack to another, optionally closing the source stack - -H5ES\_CANCEL - -N Attempt to cancel operations in an event set -H5ES\_CLOSE - -N Terminates access to an event set -H5ES\_CREATE - -N Creates an event set -H5ES\_FREE\_ERR\_INFO - -N Convenience routine to free an array of H5ES\_err\_info\_t structs -H5ES\_GET\_COUNT - -N Retrieves number of events in an event set -H5ES\_GET\_ERR\_COUNT - -N Retrieves the number of failed operations -H5ES\_GET\_ERR\_INFO - -N Retrieves information about failed operations -H5ES\_GET\_ERR\_STATUS - -N Checks for failed operations -H5ES\_GET\_OP\_COUNTER - -N Retrieves the accumulative operation counter for an event set -H5ES\_REGISTER\_COMPLETE\_FUNC - -N Registers a callback to invoke when an operation completes within an event set -H5ES\_REGISTER\_INSERT\_FUNC - -N Registers a callback to invoke when a new operation is inserted into -H5ES\_WAIT - -N Waits for operations in event set to complete - -H5FD\_ONION\_GET\_REVISION\_COUNT - -N Gets the number of revisions -H5P\_GET\_FAPL\_ONION - -N Gets the onion info from the file access property list -H5P\_SET\_FAPL\_ONION - -N Sets the onion info for the file access property list - -H5F\_CLOSE\_ASYNC - -N Asynchronous version of H5Fclose -H5F\_CREATE\_ASYNC - -N Asynchronous version of H5Fcreate -H5F\_FLUSH\_ASYNC - -N Asynchronous version of H5Fflush -H5F\_OPEN\_ASYNC - -N Asynchronous version of H5Fopen -H5F\_REOPEN\_ASYNC - -N Asynchronous version of H5Freopen - -H5G\_CLOSE\_ASYNC - -N Asynchronous version of H5Gclose -H5G\_CREATE\_ASYNC - -N Asynchronous version of H5Gcreate -H5G\_GET\_INFO\_ASYNC - -N Asynchronous version of H5Gget\_info -H5G\_GET\_INFO\_BY\_IDX\_ASYNC - -N Asynchronous version of H5Gget\_info\_by\_idx -H5G\_GET\_INFO\_BY\_NAME\_ASYNC - -N Asynchronous version of H5Gget\_info\_by\_name -H5G\_OPEN\_ASYNC - -N Asynchronous version of H5Gopen - -H5I\_REGISTER\_FUTURE - -N Registers a "future" object under a type and returns an ID for it - -H5L\_CREATE\_HARD\_ASYNC - -N Asynchronous version of H5Lcreate\_hard -H5L\_CREATE\_SOFT\_ASYNC - -N Asynchronous version of H5Lcreate\_soft -H5L\_DELETE\_ASYNC - -N Asynchronous version of H5Ldelete -H5L\_DELETE\_BY\_IDX\_ASYNC - -N Asynchronous version of H5Ldelete\_by\_idx -H5L\_EXISTS\_ASYNC - -N Asynchronous version of H5Lexists -H5L\_ITERATE\_ASYNC - -N Asynchronous version of H5Literate - -H5O\_CLOSE\_ASYNC - -N Asynchronous version of H5Oclose -H5O\_COPY\_ASYNC - -N Asynchronous version of H5Ocopy -H5O\_FLUSH\_ASYNC - -N Asynchronous version of H5Oflush -H5O\_GET\_INFO\_BY\_NAME\_ASYNC - -N Asynchronous version of H5Oget\_info\_by\_name -H5O\_OPEN\_ASYNC - -N Asynchronous version of H5Oopen -H5O\_OPEN\_BY\_IDX\_ASYNC - -N Asynchronous version of H5Oopen\_by\_idx -H5O\_REFRESH\_ASYNC - -N Asynchronous version of H5Orefresh - -H5P\_GET\_DRIVER\_CONFIG\_STR - -N Retrieves a string representation of the configuration for the driver set on the given FAPL -H5P\_GET\_VOL\_CAP\_FLAGS - -N Query the capability flags for the VOL connector that will be used with this file access property list (FAPL) -H5P\_SET\_DATASET\_IO\_HYPERSLAB\_SELECTION - -N Sets a hyperslab file selection for a dataset I/O operation -H5P\_SET\_DRIVER\_BY\_NAME - -N Sets a file driver according to a given driver name -H5P\_SET\_DRIVER\_BY\_VALUE - -N Sets a file driver according to a given driver value (ID) - -H5\_ATCLOSE - -N Registers a callback for the library to invoke when it's closing -H5\_IS\_LIBRARY\_TERMINATING - -N Checks whether the HDF5 library is closing - -H5R\_OPEN\_ATTR\_ASYNC - -N Asynchronous version of H5Ropen\_attr -H5R\_OPEN\_OBJECT\_ASYNC - -N Asynchronous version of H5Ropen\_object -H5R\_OPEN\_REGION\_ASYNC - -N Asynchronous version of H5Ropen\_region - -H5T\_CLOSE\_ASYNC - -N Asynchronous version of H5Tclose -H5T\_COMMIT\_ASYNC - -N Asynchronous version of H5Tcommit2 -H5T\_OPEN\_ASYNC - -N Asynchronous version of H5Topen2 +| Function | Fortran | Description | +| ---------------------------------- | ------- | ---------------------------------------------------| +| H5A\_CLOSE\_ASYNC | N | Asynchronous version of H5Aclose | +| H5A\_CREATE\_ASYNC | N | Asynchronous version of H5Acreate | +| H5A\_CREATE\_BY\_NAME\_ASYNC | N | Asynchronous version of H5Acreate\_by\_name | +| H5A\_EXISTS\_ASYNC | N | Asynchronous version of H5Aexists | +| H5A\_EXISTS\_BY\_NAME\_ASYNC | N | Asynchronous version of H5Aexists\_by\_name | +| H5A\_OPEN\_ASYNC | N | Asynchronous version of H5Aopen | +| H5A\_OPEN\_BY\_IDX\_ASYNC | N | Asynchronous version of H5Aopen\_by\_idx | +| H5A\_OPEN\_BY\_NAME\_ASYNC | N | Asynchronous version of H5Aopen\_by\_name | +| H5A\_READ\_ASYNC | N | Asynchronous version of H5Aread | +| H5A\_RENAME\_ASYNC | N | Asynchronous version of H5Arename | +| H5A\_RENAME\_BY\_NAME\_ASYNC | N | Asynchronous version of H5Arename\_by\_name | +| H5A\_WRITE\_ASYNC | N | Asynchronous version of H5Awrite | +| H5D\_CHUNK\_ITER | N | Iterate over all chunks of a chunked dataset | +| H5D\_CLOSE\_ASYNC | N | Asynchronous version of H5Dclose | +| H5D\_CREATE\_ASYNC | N | Asynchronous version of H5Dcreate | +| H5D\_GET\_SPACE\_ASYNC | N | Asynchronous version of H5Dget\_space | +| H5D\_OPEN\_ASYNC | N | Asynchronous version of H5Dopen | +| H5D\_READ\_ASYNC | N | Asynchronous version of H5Dread | +| H5D\_READ\_MULTI | N | Reads raw data from a set of datasets into the provided buffers | +| H5D\_READ\_MULTI\_ASYNC | N | Asynchronous version of H5Dread\_multi | +| H5D\_SET\_EXTENT\_ASYNC | N | Asynchronous version of H5Dset\_extent | +| H5D\_WRITE\_ASYNC | N | Asynchronous version of H5Dwrite | +| H5D\_WRITE\_MULTI | N | Writes raw data from a set buffers to a set of datasets | +| H5D\_WRITE\_MULTI\_ASYNC | N | Asynchronous version of H5Dwrite\_multi | +| H5E\_APPEND\_STACK | N | Appends one error stack to another, optionally closing the source stack | +| H5ES\_CANCEL | N | Attempt to cancel operations in an event set | +| H5ES\_CLOSE | N | Terminates access to an event set | +| H5ES\_CREATE | N | Creates an event set | +| H5ES\_FREE\_ERR\_INFO | N | Convenience routine to free an array of H5ES\_err\_info\_t structs | +| H5ES\_GET\_COUNT | N | Retrieves number of events in an event set | +| H5ES\_GET\_ERR\_COUNT | N | Retrieves the number of failed operations | +| H5ES\_GET\_ERR\_INFO | N | Retrieves information about failed operations | +| H5ES\_GET\_ERR\_STATUS | N | Checks for failed operations | +| H5ES\_GET\_OP\_COUNTER | N | Retrieves the accumulative operation counter for an event set | +| H5ES\_REGISTER\_COMPLETE\_FUNC | N | Registers a callback to invoke when an operation completes within an event set | +| H5ES\_REGISTER\_INSERT\_FUNC | N | Registers a callback to invoke when a new operation is inserted into | +| H5ES\_WAIT | N | Waits for operations in event set to complete | +| H5FD\_ONION\_GET\_REVISION\_COUNT | N | Gets the number of revisions | +| H5P\_GET\_FAPL\_ONION | N | Gets the onion info from the file access property list | +| H5P\_SET\_FAPL\_ONION | N | Sets the onion info for the file access property list | +| H5F\_CLOSE\_ASYNC | N | Asynchronous version of H5Fclose | +| H5F\_CREATE\_ASYNC | N | Asynchronous version of H5Fcreate | +| H5F\_FLUSH\_ASYNC | N | Asynchronous version of H5Fflush | +| H5F\_OPEN\_ASYNC | N | Asynchronous version of H5Fopen | +| H5F\_REOPEN\_ASYNC | N | Asynchronous version of H5Freopen | +| H5G\_CLOSE\_ASYNC | N | Asynchronous version of H5Gclose | +| H5G\_CREATE\_ASYNC | N | Asynchronous version of H5Gcreate | +| H5G\_GET\_INFO\_ASYNC | N | Asynchronous version of H5Gget\_info | +| H5G\_GET\_INFO\_BY\_IDX\_ASYNC | N | Asynchronous version of H5Gget\_info\_by\_idx | +| H5G\_GET\_INFO\_BY\_NAME\_ASYNC | N | Asynchronous version of H5Gget\_info\_by\_name | +| H5G\_OPEN\_ASYNC | N | Asynchronous version of H5Gopen | +| H5I\_REGISTER\_FUTURE | N | Registers a "future" object under a type and returns an ID for it | +| H5L\_CREATE\_HARD\_ASYNC | N | Asynchronous version of H5Lcreate\_hard | +| H5L\_CREATE\_SOFT\_ASYNC | N | Asynchronous version of H5Lcreate\_soft | +| H5L\_DELETE\_ASYNC | N | Asynchronous version of H5Ldelete | +| H5L\_DELETE\_BY\_IDX\_ASYNC | N | Asynchronous version of H5Ldelete\_by\_idx | +| H5L\_EXISTS\_ASYNC | N | Asynchronous version of H5Lexists | +| H5L\_ITERATE\_ASYNC | N | Asynchronous version of H5Literate | +| H5O\_CLOSE\_ASYNC | N | Asynchronous version of H5Oclose | +| H5O\_COPY\_ASYNC | N | Asynchronous version of H5Ocopy | +| H5O\_FLUSH\_ASYNC | N | Asynchronous version of H5Oflush | +| H5O\_GET\_INFO\_BY\_NAME\_ASYNC | N | Asynchronous version of H5Oget\_info\_by\_name | +| H5O\_OPEN\_ASYNC | N | Asynchronous version of H5Oopen | +| H5O\_OPEN\_BY\_IDX\_ASYNC | N | Asynchronous version of H5Oopen\_by\_idx | +| H5O\_REFRESH\_ASYNC | N | Asynchronous version of H5Orefresh | +| H5P\_GET\_DRIVER\_CONFIG\_STR | N | Retrieves a string representation of the configuration for the driver set on the given FAPL | +| H5P\_GET\_VOL\_CAP\_FLAGS | N | Query the capability flags for the VOL connector that will be used with this file access property list (FAPL) | +| H5P\_SET\_DATASET\_IO\_HYPERSLAB\_SELECTION | N | Sets a hyperslab file selection for a dataset I/O operation | +| H5P\_SET\_DRIVER\_BY\_NAME | N | Sets a file driver according to a given driver name | +| H5P\_SET\_DRIVER\_BY\_VALUE | N | Sets a file driver according to a given driver value (ID) | +| H5\_ATCLOSE | N | Registers a callback for the library to invoke when it's closing | +| H5\_IS\_LIBRARY\_TERMINATING | N | Checks whether the HDF5 library is closing | +| H5R\_OPEN\_ATTR\_ASYNC | N | Asynchronous version of H5Ropen\_attr | +| H5R\_OPEN\_OBJECT\_ASYNC | N | Asynchronous version of H5Ropen\_object | +| H5R\_OPEN\_REGION\_ASYNC | N | Asynchronous version of H5Ropen\_region | +| H5T\_CLOSE\_ASYNC | N | Asynchronous version of H5Tclose | +| H5T\_COMMIT\_ASYNC | N | Asynchronous version of H5Tcommit2 | +| H5T\_OPEN\_ASYNC | N | Asynchronous version of H5Topen2 | diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 1eb47df6..16e7c138 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -11,26 +11,25 @@ title: HDF5 Library and Tools 1.14.4 | Version | HDF5 1.14.4 | | Release Date | 04/11/24 | -| Additional Release Information | [Documentation](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | -|| [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | -|| Software Changes From Release to Release for HDF5-1.14 | -|| New Features in HDF5 Release 1.14 | +| Additional Release Information | [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | +|| [Software Changes From Release to Release for HDF5-1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md) | +|| [New Features in HDF5 Release 1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/new_features_1_14.html) | || [Newsletter Announcement](https://www.hdfgroup.org/2024/10/release-of-hdf5-1-14-4-library-and-tools-newsletter-199/) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | || [API Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-interface_compatibility_report.html) | || [Java Interface Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-java-interface_compatibility_report.html) | -## Files +## Download -| File | Type | Install Instructions | -| ---- | ---- | ---- | +| File | Type | +| ---- | ---- | | [hdf5-1.14.4.tar.gz](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4.tar.gz) | Source release | | [hdf5-1.14.4.zip](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4.zip) | Source release | | [Ready to use Binaries](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4) | Pre-built binary distributions for Unix and Windows | | [sha256](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4/sha256sums.txt) | Checksum file | -Please refer to [Build Instructions](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4/release_docs/INSTALL) for building with either CMake or Autotools. +Please refer to [Build instructions](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4/release_docs/INSTALL) for building with either CMake or Autotools. **Methods to obtain (gz file)** From bb828a89fbb794dfdd5397be651664e13eaa4509 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Wed, 10 Apr 2024 23:13:21 -0400 Subject: [PATCH 27/44] Add Float16 support entry --- .../release_specifics/new_features_1_14.md | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/documentation/hdf5-docs/release_specifics/new_features_1_14.md b/documentation/hdf5-docs/release_specifics/new_features_1_14.md index 25ef387a..4176a992 100644 --- a/documentation/hdf5-docs/release_specifics/new_features_1_14.md +++ b/documentation/hdf5-docs/release_specifics/new_features_1_14.md @@ -6,7 +6,21 @@ redirect_from: # New Features in HDF5 1.14 -HDF5 Release 1.14.0 is the final released version of all the features that were released in 1.13.0-1.13.3. Thus, the new features in the HDF4 1.14 release include: +The new features in the HDF4 1.14 series include: + +* [16 bit floating point and Complex number datatypes](https://docs.hdfgroup.org/hdf5/rfc/RFC__Adding_support_for_16_bit_floating_point_and_Complex_number_datatypes_to_HDF5.pdf) +Better support for 16-bit floating-point data was added to HDF5 for platforms where the +\_Float16 C datatype is available. On platforms where this support is available, this can +enable more efficient storage of floating-point data when an application doesn't require +the precision of larger floating-point datatypes. It can also allow for improved performance +when converting between 16-bit floating-point data and data of another HDF5 datatype. +Additionally, several optimizations were made to HDF5 to increase the performance of +data conversion operations in general. These optimizations resulted in a 3x to 10x increase +in performance of compound-type data conversions on average, as well as a 100x increase +in performance in specific cases when converting floating-point data to integer data. Further, +several fixes were made to HDF5 for software bugs that could cause accesses of invalid +memory and application crashes or could return incorrect data when working with 16-bit +floating-point data. * [Asynchronous I/O operations](asyn_ops_wHDF5_VOL_connectors.md) HDF5 provides asynchronous APIs for the HDF5 VOL connectors that @@ -14,7 +28,7 @@ support asynchronous HDF5 operations using the HDF5 Event Set (H5ES) API. This allows I/O to proceed in the background while the application is performing other tasks. -* [Subfiling VFD](http://docs.hdfgroup.org/hdf5/rfc/RFC_VFD_subfiling_200424.pdf) +* [Subfiling VFD](https://docs.hdfgroup.org/hdf5/rfc/RFC_VFD_subfiling_200424.pdf) The basic idea behind sub-filing is to find the middle ground between single shared file and one file per process - thereby avoiding some of the complexity of one file per process, and minimizing the locking @@ -44,3 +58,5 @@ also including critical logging capabilities to capture outputs from applying the serial tools over large collections of HDF5 files. +Note that the HDF5 Release 1.14.0 is the final released version of all the features +that were released in 1.13.0-1.13.3. From 6b375248cc45983ebe1fef6cc5ae7cebff6e56a7 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 00:30:45 -0400 Subject: [PATCH 28/44] Change md file to html --- ...{file_image_ops.md => file_image_ops.html} | 287 +++++++++--------- .../hdf5-docs/advanced_topics_list.md | 2 +- 2 files changed, 144 insertions(+), 145 deletions(-) rename documentation/hdf5-docs/advanced_topics/{file_image_ops.md => file_image_ops.html} (93%) diff --git a/documentation/hdf5-docs/advanced_topics/file_image_ops.md b/documentation/hdf5-docs/advanced_topics/file_image_ops.html similarity index 93% rename from documentation/hdf5-docs/advanced_topics/file_image_ops.md rename to documentation/hdf5-docs/advanced_topics/file_image_ops.html index 4b11d558..60f21375 100644 --- a/documentation/hdf5-docs/advanced_topics/file_image_ops.md +++ b/documentation/hdf5-docs/advanced_topics/file_image_ops.html @@ -1,8 +1,7 @@ ---- title: HDF5 File Image Operations redirect_from: - /display/HDF5/HDF5+File+Image+Operations ---- + ## \*\*\* UNDER CONSTRUCTION \*\*\* # HDF5 File Image Operations @@ -64,7 +63,7 @@ * [H5LTopen\_file\_image\_f](#) -## 1. Introduction to HDF5 File Image Operations +## 1. Introduction to HDF5 File Image Operations File image operations allow users to work with HDF5 files in memory in the same ways that users currently work with HDF5 files on disk. Disk I/O is not required when file images are opened, created, read from, or written to. An HDF5 file image is an HDF5 file that is held in a buffer in main memory. Setting up a file image in memory involves using either a buffer in the file access property list or a buffer in the Core (aka Memory) file driver. @@ -83,11 +82,11 @@ H5Pset\_file\_image Allows an application to specify an initial file image. For more information, see section 2.1.1. -H5Pget\_file\_image Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. -H5Pset\_file\_image\_callbacks Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. -H5Pget\_file\_image\_callbacks Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. -H5Fget\_file\_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. -H5LTopen\_file\_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. +H5Pget\_file\_image Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. +H5Pset\_file\_image\_callbacks Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. +H5Pget\_file\_image\_callbacks Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. +H5Fget\_file\_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. +H5LTopen\_file\_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. ### 1.2. Abbreviations @@ -202,7 +201,7 @@ herr\_t H5Pset\_file\_image\_callbacks(hid\_t fapl\_id, H5\_file\_image\_callbacks\_t \*callbacks\_ptr) -The parameters of H5Pset\_file\_image\_callbacks are defined as follows: +The parameters of H5Pset\_file\_image\_callbacks are defined as follows: fapl\_id contains the ID of the target file access property list. callbacks\_ptr contains a pointer to an instance of the H5\_file\_image\_callbacks\_t structure. @@ -246,14 +245,14 @@ Table 2. Values for the file\_image\_op parameter -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being set in a FAPL. -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied when a FAPL is copied. -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being retrieved from a FAPL -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a FAPL close operation. -H5\_FILE\_IMAGE\_OP\_FILE\_OPEN This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is copied during a file open operation. While the image being opened will typically be copied from a FAPL, this need not always be the case. An example of an exception is when the Core file driver takes its initial image from a file. -H5\_FILE\_IMAGE\_OP\_FILE\_RESIZE This value is passed to the image\_realloc callback when a file driver needs to resize an image buffer. -H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a file close operation. - +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being set in a FAPL. +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied when a FAPL is copied. +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being retrieved from a FAPL +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a FAPL close operation. +H5\_FILE\_IMAGE\_OP\_FILE\_OPEN This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is copied during a file open operation. While the image being opened will typically be copied from a FAPL, this need not always be the case. An example of an exception is when the Core file driver takes its initial image from a file. +H5\_FILE\_IMAGE\_OP\_FILE\_RESIZE This value is passed to the image\_realloc callback when a file driver needs to resize an image buffer. +H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a file close operation. + In closing our discussion of H5Pset\_file\_image\_callbacks(), we note the interaction between this call and the H5Pget/set\_file\_image() calls above: since the malloc, memcpy, and free callbacks defined in the instance of H5\_file\_image\_callbacks\_t are used by H5Pget/set\_file\_image(), H5Pset\_file\_image\_callbacks() will fail if a file image is already set in the target property list. @@ -275,7 +274,7 @@ Upon successful return, callbacks\_ptr->image\_malloc will contain the pointer passed as the image\_malloc field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->image\_memcpy will contain the pointer passed as the image\_memcpy field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->image\_realloc will contain the pointer passed as the image\_realloc field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. -Upon successful return, callbacks\_ptr->image\_free\_ptr will contain the pointer passed as the image\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr->image\_free\_ptr will contain the pointer passed as the image\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->udata\_copy will contain the pointer passed as the udata\_copy field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr-> udata\_free will contain the pointer passed as the udata\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->udata will contain the pointer passed as the udata field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. @@ -288,7 +287,7 @@ Thus file drivers that set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag but not the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag may read the supplied image from the property list (if present) and use it to initialize the contents of the file. However, they will not discard the image when done, nor will they make any use of any file image callbacks (if defined). -If an initial file image appears in a file allocation property list that is used in an H5Fopen() call, and if the underlying file driver does not set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag, then the open will fail. +If an initial file image appears in a file allocation property list that is used in an H5Fopen() call, and if the underlying file driver does not set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag, then the open will fail. If a driver sets both the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag and the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag, then that driver will allocate a buffer of the required size, copy the contents of the initial image buffer from the file access property list, and then open the copy as if it had just loaded it from file. If the file image allocation callbacks are defined, the driver shall use them for all memory management tasks. Otherwise it will use the standard malloc, memcpy, realloc, and free C library calls for this purpose. @@ -296,7 +295,7 @@ Finally, it is logically possible that a file driver would set the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag, but not the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag. While it is hard to think of a situation in which this would be desirable, setting the flags this way will not cause any problems: the two capabilities are logically distinct. - + #### 2.1.6. H5Fget\_file\_image The purpose of the H5Fget\_file\_image routine is to provide a simple way to retrieve a copy of the image of an existing, open file. This routine can be used with files opened using the SEC2 (aka POSIX), STDIO, and Core (aka Memory) VFDs. @@ -307,7 +306,7 @@ The parameters of H5Fget\_file\_image are defined as follows: file\_id contains the ID of the target file. -buf\_ptr contains a pointer to the buffer into which the image of the HDF5 file is to be copied. If buf\_ptr is NULL, no data will be copied, but the return value will still indicate the buffer size required (or a negative value on error). +buf\_ptr contains a pointer to the buffer into which the image of the HDF5 file is to be copied. If buf\_ptr is NULL, no data will be copied, but the return value will still indicate the buffer size required (or a negative value on error). buf\_len contains the size of the supplied buffer. If the return value of H5Fget\_file\_image is a positive value, then the value will be the length of buffer required to store the file image (in other words, the length of the file). A negative value might be returned if the file is too large to store in the supplied buffer or on failure. @@ -323,7 +322,7 @@ Thus we will not support the Family file driver in H5Fget\_file\_image() unless there is demand for it. Files created with the Multi and Split file drivers are also marked in the superblock. In addition, they typically use a very sparse address space. A sparse address space would require the use of an impractically large buffer for an image, and most of the buffer would be empty. So, we see no point in supporting the Multi and Split file drivers in H5Fget\_file\_image() under any foreseeable circumstances. - + ### 2.2. High-level C API Routine The H5LTopen\_file\_image high-level routine encapsulates the capabilities of routines in the main HDF5 Library with conveniently accessible abstractions. @@ -341,15 +340,15 @@ flags contains a set of flags indicating whether the image is to be opened read/write, whether HDF5 is to take control of the buffer, and how long the application promises to maintain the buffer. Possible flags are described in the table below: Table 3. Flags for H5LTopen\_file\_image -H5LT\_FILE\_IMAGE\_OPEN\_RW Indicates that the HDF5 Library should open the image read/write instead of the default read-only. -H5LT\_FILE\_IMAGE\_DONT\_COPY +H5LT\_FILE\_IMAGE\_OPEN\_RW Indicates that the HDF5 Library should open the image read/write instead of the default read-only. +H5LT\_FILE\_IMAGE\_DONT\_COPY Indicates that the HDF5 Library should not copy the file image buffer provided, but should use it directly. The HDF5 Library will release the file image when finished. The supplied buffer must have been allocated via a call to the standard C library malloc() or calloc() routines. The HDF5 Library will call free() to release the buffer. In the absence of this flag, the HDF5 Library will copy the buffer provided. The H5LT\_FILE\_IMAGE\_DONT\_COPY flag provides an application with the ability to “give ownership” of a file image buffer to the HDF5 Library. The HDF5 Library will modify the buffer on write if the image is opened read/write and the H5LT\_FILE\_IMAGE\_DONT\_COPY flag is set. The H5LT\_FILE\_IMAGE\_DONT\_RELEASE flag, see below, is invalid unless the H5LT\_FILE\_IMAGE\_DONT\_COPY flag is set -H5LT\_FILE\_IMAGE\_DONT\_RELEASE +H5LT\_FILE\_IMAGE\_DONT\_RELEASE Indicates that the HDF5 Library should not attempt to release the buffer when the file is closed. This implies that the application will tend to this detail and that the application will not discard the buffer until after the file image is closed. Since there is no way to return a changed buffer base address to the application, and since realloc can change this value, calls to realloc() must be barred when this flag is set. As a result, any write that requires an increased buffer size will fail. @@ -416,7 +415,7 @@ Note that there is no way currently to specify a “backing store” file name in this definition of H5LTopen\_image. - + ## 3. C API Call Semantics The purpose of this chapter is to describe some issues that developers should consider when using file image buffers, property lists, and callback APIs. @@ -470,7 +469,7 @@ Suppose, however, that the file image will be opened read/write and may grow during the computation. We must now allow for the base address of the buffer to change due to reallocation calls, and we must employ the user data structure to communicate any change in the buffer base address and size to the application. We pass buffer changes to the application so that the application will be able to eventually free the buffer. To this end, we might define a user data structure as shown in the example below: - + typedef struct udata { void \*init\_ptr; @@ -515,7 +514,7 @@ #### 3.2.1. Applying Initial File Image Semantics to the Core File Driver At present, the Core file driver uses the open() and read() system calls to load an HDF5 file image from the file system into RAM. Further, if the backing\_store flag is set in the FAPL entry specifying the use of the Core file driver, the Core file driver’s internal image will be used to overwrite the source file on either flush or close. See the H5Pset\_fapl\_core entry in the HDF5 Reference Manual for more information. -This results in the following observations. In all cases assume that use of the Core file driver has been specified in the FAPL. +This results in the following observations. In all cases assume that use of the Core file driver has been specified in the FAPL. If the file specified in the H5Fopen() call does not exist, and no initial image is specified in the FAPL, the open must fail because there is no source for the initial image needed by the Core file driver. If the file specified in the H5Fopen() call does exist, and an initial image is specified in the FAPL, the open must fail because the source of the needed initial image is ambiguous: the file image could be taken either from file or from the FAPL. @@ -544,11 +543,11 @@ The following pseudo code illustrates opening the image read -only using the H5LTopen\_file\_image() routine. In this example, the application retains ownership of the buffer and avoids extra buffer allocations and memcpy calls. - - + + hid\_t file\_id; -unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; -file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); +unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; +file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); Example 3. Using H5LTopen\_file\_image to open a read-only file image where the application retains ownership of the buffer @@ -557,18 +556,18 @@ hid\_t file\_id; unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY; -file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); +file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); Example 4. Using H5LTopen\_file\_image to open a read-only file image where the application transfers ownership of the buffer Again, file access is read-only. Read/write access can be obtained via the H5LTopen\_file\_image() call, but we will explore that in the section below. - + ### 4.2. In-memory HDF5 File Image Construction Before the implementation of file image operations, HDF5 supported construction of an image of an HDF5 file in memory with the Core file driver. The H5Fget\_file\_image() function call allows an application access to the file image without first writing it to disk. See the following code fragment: - + H5Fflush(fid); size = H5Fget\_file\_image(fid, NULL, 0); buffer\_ptr = malloc(size); @@ -589,7 +588,7 @@ void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { -assert(FALSE); /\* Should never be invoked in this scenario. \*/ +assert(FALSE); /\* Should never be invoked in this scenario. \*/ return(NULL); /\* always fails \*/ } void image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, @@ -600,7 +599,7 @@ } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); + assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); ((struct udata\_t \*)udata)->image\_ptr = ptr; return(0); /\* if we get here, we must have been successful \*/ } @@ -638,28 +637,28 @@ void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); - assert(((struct udata\_t \*)udata)->ref\_count == 0); - ((struct udata\_t \*)udata)->image\_size = size; + assert(((struct udata\_t \*)udata)->ref\_count == 0); + ((struct udata\_t \*)udata)->image\_size = size; (((struct udata\_t \*)udata)->ref\_count)++; return((((struct udata\_t \*)udata)->image\_ptr); } -void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { -assert(FALSE); /\* Should never be invoked in this scenario. \*/ +assert(FALSE); /\* Should never be invoked in this scenario. \*/ return(NULL); /\* always fails \*/ } void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); -assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); assert(((struct udata\_t \*)udata)->ref\_count == 1); - ((struct udata\_t \*)udata)->image\_size = size; -return((((struct udata\_t \*)udata)->image\_ptr); + ((struct udata\_t \*)udata)->image\_size = size; +return((((struct udata\_t \*)udata)->image\_ptr); } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); + assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); assert(((struct udata\_t \*)udata)->ref\_count == 1); (((struct udata\_t \*)udata)->ref\_count)--; @@ -670,13 +669,13 @@ return(udata); } herr\_t udata\_free(void \*udata) -{ +{ return(0); } H5\_file\_image\_callbacks\_t callbacks = {image\_malloc, image\_memcpy, image\_realloc, image\_free, udata\_copy, udata\_free, - (void \*)(&udata)}; + (void \*)(&udata)}; /\* end of initialization \*/ H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); @@ -691,14 +690,14 @@ If we can further arrange matters so that only the contents of the datasets in the HDF5 file image change, but not the structure of the file itself, we can optimize still further by re-using the image and changing only the contents of the datasets after the initial write to the buffer. The following pseudo code shows how this might be done. Note that the code assumes that buf already contains the image of the HDF5 file whose dataset contents are to be overwritten. Again, much error checking is omitted for clarity. Also, observe that the file image callbacks do not support the H5Pget\_file\_image() call. - - - -void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) + + + +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); - assert(size == ((struct udata\_t \*)udata)->image\_size); + assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(size == ((struct udata\_t \*)udata)->image\_size); assert(((struct udata\_t \*)udata)->ref\_count >= 0); ((struct udata\_t \*)udata)->image\_size = size; (((struct udata\_t \*)udata)->ref\_count)++; @@ -706,11 +705,11 @@ } void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { -assert(dest == ((struct udata\_t \*)udata)->image\_ptr); -assert(src == ((struct udata\_t \*)udata)->image\_ptr); -assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); -assert(size == ((struct udata\_t \*)udata)->image\_size); -assert(((struct udata\_t \*)udata)->ref\_count >= 1); +assert(dest == ((struct udata\_t \*)udata)->image\_ptr); +assert(src == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); +assert(size == ((struct udata\_t \*)udata)->image\_size); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); return(dest); /\* if we get here, we must have been successful \*/ } void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) @@ -726,15 +725,15 @@ \* to performing sanity checks, and returning the base address of the \* statically allocated buffer. \*/ - assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); -assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); assert(((struct udata\_t \*)udata)->ref\_count >= 1); - assert(((struct udata\_t \*)udata)->image\_size == size); -return((((struct udata\_t \*)udata)->image\_ptr); + assert(((struct udata\_t \*)udata)->image\_size == size); +return((((struct udata\_t \*)udata)->image\_ptr); } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert((file\_image\_op == H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE) || + assert((file\_image\_op == H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE) || (file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE)); assert(((struct udata\_t \*)udata)->ref\_count >= 1); (((struct udata\_t \*)udata)->ref\_count)--; @@ -767,7 +766,7 @@ Before we go on, we should note that the above pseudo code can be written more compactly, albeit with fewer sanity checks, using the H5LTopen\_file\_image() call. See the example below: - + hid\_t file\_id; unsigned flags = H5LT\_FILE\_IMAGE\_OPEN\_RW | H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; /\* end initialization \*/ @@ -776,7 +775,7 @@ /\* udata now contains the base address and length of the final version of the core file \*/ - + Example 9. Using H5LTopen\_file\_image where only the datasets change The above pseudo code allows updates of a file image about as cheaply as possible. We assume the application has enough RAM for the image and that the HDF5 file structure is constant after the first write. @@ -792,41 +791,41 @@ void \* vfd\_image\_ptr; size\_t vfd\_image\_size; nt vfd\_ref\_count; -} udata = {NULL, 0, 0, NULL, 0, 0}; +} udata = {NULL, 0, 0, NULL, 0, 0}; boolean initial\_file\_open = TRUE; -void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - void \* return\_value = NULL; + void \* return\_value = NULL; switch ( file\_image\_op ) { case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET: case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY: - assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); - assert(((struct udata\_t \*)udata)->fapl\_image\_size == size); + assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); + assert(((struct udata\_t \*)udata)->fapl\_image\_size == size); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 0); - return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; + return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; (((struct udata\_t \*)udata)->fapl\_ref\_count)++; - break; + break; case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: - assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); - assert(((struct udata\_t \*)udata)->vfd\_image\_size == size); + assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); + assert(((struct udata\_t \*)udata)->vfd\_image\_size == size); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); - return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; + return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; /\* don’t increment ref count \*/ - break; - case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: - assert(((struct udata\_t \*)udata)->vfd\_image\_ptr == NULL); - assert(((struct udata\_t \*)udata)->vfd\_image\_size == 0); + break; + case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: + assert(((struct udata\_t \*)udata)->vfd\_image\_ptr == NULL); + assert(((struct udata\_t \*)udata)->vfd\_image\_size == 0); assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 0); if (((struct udata\_t \*)udata)->fapl\_image\_ptr == NULL ) { ((struct udata\_t \*)udata)->vfd\_image\_ptr = malloc(size); - ((struct udata\_t \*)udata)->vfd\_image\_size = size; + ((struct udata\_t \*)udata)->vfd\_image\_size = size; } else { assert(((struct udata\_t \*)udata)->fapl\_image\_size == size); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); - ((struct udata\_t \*)udata)->vfd\_image\_ptr = + ((struct udata\_t \*)udata)->vfd\_image\_ptr = ((struct udata\_t \*)udata)->fapl\_image\_ptr; ((struct udata\_t \*)udata)->vfd\_image\_size = size; } @@ -838,25 +837,25 @@ } return(return\_value); } -void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { switch(file\_image\_op) { case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET: case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY: - case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: -assert(dest == ((struct udata\_t \*)udata)->fapl\_image\_ptr); -assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); -assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); -assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: +assert(dest == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); +assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); break; case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: -assert(dest == ((struct udata\_t \*)udata)->vfd\_image\_ptr); -assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); -assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); -assert(size == ((struct udata\_t \*)udata)->vfd\_image\_size); -assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); -assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); +assert(dest == ((struct udata\_t \*)udata)->vfd\_image\_ptr); +assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); +assert(size == ((struct udata\_t \*)udata)->vfd\_image\_size); +assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); +assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); break; default: assert(FALSE); @@ -870,21 +869,21 @@ assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); | assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); ((struct udata\_t \*)udata)->vfd\_image\_ptr = realloc(ptr, size); - ((struct udata\_t \*)udata)->vfd\_image\_size = size; -return((((struct udata\_t \*)udata)->vfd\_image\_ptr); + ((struct udata\_t \*)udata)->vfd\_image\_size = size; +return((((struct udata\_t \*)udata)->vfd\_image\_ptr); } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { switch(file\_image\_op) { case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE: - assert(ptr == ((struct udata\_t \*)udata)->fapl\_image\_ptr); + assert(ptr == ((struct udata\_t \*)udata)->fapl\_image\_ptr); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); - (((struct udata\_t \*)udata)->fapl\_ref\_count)--; + (((struct udata\_t \*)udata)->fapl\_ref\_count)--; break; case H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE: - assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); + assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); - (((struct udata\_t \*)udata)->vfd\_ref\_count)--; + (((struct udata\_t \*)udata)->vfd\_ref\_count)--; break; default: assert(FALSE); @@ -904,8 +903,8 @@ image\_realloc, image\_free, udata\_copy, udata\_free, (void \*)(&udata)}; -/\* end of initialization \*/ - +/\* end of initialization \*/ + H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); if ( initial\_file\_open ) { initial\_file\_open = FALSE; @@ -914,9 +913,9 @@ assert(udata.vfd\_image\_size > 0); assert(udata.vfd\_ref\_count == 0); assert(udata.fapl\_ref\_count == 0); - udata.fapl\_image\_ptr = udata.vfd\_image\_ptr; - udata.fapl\_image\_size = udata.vfd\_image\_size; - udata.vfd\_image\_ptr = NULL; + udata.fapl\_image\_ptr = udata.vfd\_image\_ptr; + udata.fapl\_image\_size = udata.vfd\_image\_size; + udata.vfd\_image\_ptr = NULL; udata.vfd\_image\_size = 0; H5Pset\_file\_image(fapl\_id, udata.fapl\_image\_ptr, udata.fapl\_image\_size); } @@ -925,10 +924,10 @@ assert(udata.fapl\_ref\_count == 0); assert(udata.vfd\_ref\_count == 0); - -/\* udata.vfd\_image\_ptr and udata.vfd\_image\_size now contain the base address and length of the final version of the core file \*/ - - + +/\* udata.vfd\_image\_ptr and udata.vfd\_image\_size now contain the base address and length of the final version of the core file \*/ + + Example 10. Using H5LTopen\_file\_image where only the datasets change and where the file structure and image size might not be constant @@ -953,11 +952,11 @@ \*\*\* Process B \*\*\* hid\_t file\_id; - - - + + + -buffer\_ptr = malloc(size) +buffer\_ptr = malloc(size) file\_id = H5LTopen\_file\_image(buf, buf\_len, @@ -968,13 +967,13 @@ ### 4.4. Using a Template File After the above examples, an example of the use of a template file might seem anti-climactic. A template file might be used to enforce consistency on file structure between files or in parallel HDF5 to avoid long sequences of collective operations to create the desired groups, datatypes, and possibly datasets. The following pseudo code outlines a potential use: - - - -H5Pset\_file\_image(fapl\_id, buf, buf\_len); - - - + + + +H5Pset\_file\_image(fapl\_id, buf, buf\_len); + + + Example 12. Using a template file @@ -1040,17 +1039,17 @@ } H5\_file\_udata\_copy\_cb -public interface H5\_file\_udata\_copy\_cb extends Callbacks { +public interface H5\_file\_udata\_copy\_cb extends Callbacks { buf[] callback(CBuserdata udata); } H5\_file\_udata\_free\_cb -public interface H5\_file\_udata\_free\_cb extends Callbacks { +public interface H5\_file\_udata\_free\_cb extends Callbacks { void callback(CBuserdata udata); -} +} H5\_file\_image\_callbacks\_t -public abstract class H5\_file\_image\_callbacks\_t +public abstract class H5\_file\_image\_callbacks\_t { H5\_file\_image\_malloc\_cb image\_malloc; H5\_file\_image\_memcpy\_cb image\_memcpy; @@ -1060,7 +1059,7 @@ H5\_file\_udata\_free\_cb udata\_free; CBuserdata udata; public H5\_file\_image\_callbacks\_t( - H5\_file\_image\_malloc\_cb image\_malloc, + H5\_file\_image\_malloc\_cb image\_malloc, H5\_file\_image\_memcpy\_cb image\_memcpy, H5\_file\_image\_realloc\_cb image\_realloc, H5\_file\_image\_free\_cb image\_free, @@ -1079,12 +1078,12 @@ H5Pset\_file\_image\_callbacks int H5Pset\_file\_image\_callbacks(int fapl\_id, - H5\_file\_image\_callbacks\_t callbacks\_ptr); + H5\_file\_image\_callbacks\_t callbacks\_ptr); H5Pget\_file\_image\_callbacks int H5Pget\_file\_image\_callbacks(int fapl\_id, H5\_file\_image\_callbacks\_t[] callbacks\_ptr); -H5Fget\_file\_image +H5Fget\_file\_image long H5Fget\_file\_image(int file\_id, byte[] buf\_ptr); ## 6. Fortran Signatures for File Image Operations API Calls @@ -1111,7 +1110,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.2. H5Pget\_file\_image\_f The signature of H5Pget\_file\_image\_f is defined as follows: @@ -1131,7 +1130,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.3. H5Pset\_file\_image\_callbacks\_f The signature of H5Pset\_file\_image\_callbacks\_f is defined as follows: @@ -1142,10 +1141,10 @@ H5\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE\_F=3, H5\_IMAGE\_OP\_FILE\_OPEN\_F=4, H5\_IMAGE\_OP\_FILE\_RESIZE\_F=5, - H5\_IMAGE\_OP\_FILE\_CLOSE\_F=6 + H5\_IMAGE\_OP\_FILE\_CLOSE\_F=6 TYPE, BIND(C) :: H5\_file\_image\_callbacks\_t TYPE(C\_FUN\_PTR), VALUE :: image\_malloc - TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy + TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy TYPE(C\_FUN\_PTR), VALUE :: image\_realloc TYPE(C\_FUN\_PTR), VALUE :: image\_free TYPE(C\_FUN\_PTR), VALUE :: udata @@ -1168,7 +1167,7 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: image\_malloc Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call. - + FUNCTION op\_func(dest, src, size, & file\_image\_op, udata) RESULT(image\_memcpy) TYPE(C\_PTR), VALUE :: dest @@ -1183,9 +1182,9 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call. - -FUNCTION op\_func(ptr, size, & file\_image\_op, udata) RESULT(image\_realloc) + +FUNCTION op\_func(ptr, size, & file\_image\_op, udata) RESULT(image\_realloc) TYPE(C\_PTR), VALUE :: ptr Will contain the pointer to the buffer being reallocated INTEGER(size\_t) :: size @@ -1196,9 +1195,9 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: image\_realloc Shall contain a pointer to a unction functionality identical to the standard C library realloc() call. - -FUNCTION op\_func(ptr, file\_image\_op, udata) RESULT(image\_free) + +FUNCTION op\_func(ptr, file\_image\_op, udata) RESULT(image\_free) TYPE(C\_PTR), VALUE :: ptr Will contain the pointer to the buffer being released. INTEGER :: file\_image\_op @@ -1207,26 +1206,26 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_PTR), VALUE :: image\_free Shall contain a pointer to a function with functionality identical to the standard C library free() call - -FUNCTION op\_func(udata) RESULT(udata\_copy) + +FUNCTION op\_func(udata) RESULT(udata\_copy) TYPE(C\_PTR), VALUE :: udata Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: udata\_copy Shall contain a pointer to a function that will allocate a buffer of suitable size, copy the contents of the supplied udata into the new buffer, and return the address of the new buffer. The function will return C\_NULL\_PTR on failure. - + FUNCTION op\_func(udata) RESULT(udata\_free) TYPE(C\_PTR), VALUE :: udata Shall contain a pointer value, potentially to user-defined data, that will be passed to the image\_malloc, image\_memcpy, image\_realloc, and image\_free callbacks. - + The signature of H5Pset\_file\_image\_callbacks\_f is defined as follows: SUBROUTINE H5Pset\_file\_image\_callbacks\_f(fapl\_id, &callbacks\_ptr, hdferr) The parameters are defined as follows: - + INTEGER(hid\_t), INTENT(IN) :: fapl\_id Will contain the ID of the target file access property list. @@ -1237,7 +1236,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.4. H5Pget\_file\_image\_callbacks\_f The H5Pget\_file\_image\_callbacks\_f routine is designed to obtain the current file image callbacks from a file access property list. @@ -1256,7 +1255,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.5. Fortran Virtual File Driver Feature Flags Implementation of the H5Pget/set\_file\_image\_callbacks\_f() and H5Pget/set\_file\_image\_f() APIs requires a pair of new virtual file driver feature flags: @@ -1286,7 +1285,7 @@ INTEGER, INTENT(OUT) :: hdferr Returns the error status: 0 for success and -1 for failure. - + See the “H5Fget\_file\_image” section for more information. diff --git a/documentation/hdf5-docs/advanced_topics_list.md b/documentation/hdf5-docs/advanced_topics_list.md index fd35bb21..45d6f394 100644 --- a/documentation/hdf5-docs/advanced_topics_list.md +++ b/documentation/hdf5-docs/advanced_topics_list.md @@ -8,7 +8,7 @@ redirect_from: display/HDF5/Advanced+Topics+in+HDF5 # HDF5 Features -### [HDF5 File Image Operations](advanced_topics/file_image_ops.md) +### [HDF5 File Image Operations](advanced_topics/file_image_ops.html) ### [Copying Committed Datatypes with H5Ocopy](advanced_topics/cp_committed_dt_H5Ocopy.md) ### [HDF5 Data Flow Pipeline for H5Dread](advanced_topics/data_flow_pline_H5Dread.md) ### [Introduction to Single-Writer_Multiple-Reader (SWMR)](advanced_topics/intro_SWMR.md) From 1afeda285c923721766626e671b622171fcac74d Mon Sep 17 00:00:00 2001 From: bmribler <39579120+bmribler@users.noreply.github.com> Date: Thu, 11 Apr 2024 00:35:11 -0400 Subject: [PATCH 29/44] Revert "Change md file to html" --- ...{file_image_ops.html => file_image_ops.md} | 287 +++++++++--------- .../hdf5-docs/advanced_topics_list.md | 2 +- 2 files changed, 145 insertions(+), 144 deletions(-) rename documentation/hdf5-docs/advanced_topics/{file_image_ops.html => file_image_ops.md} (93%) diff --git a/documentation/hdf5-docs/advanced_topics/file_image_ops.html b/documentation/hdf5-docs/advanced_topics/file_image_ops.md similarity index 93% rename from documentation/hdf5-docs/advanced_topics/file_image_ops.html rename to documentation/hdf5-docs/advanced_topics/file_image_ops.md index 60f21375..4b11d558 100644 --- a/documentation/hdf5-docs/advanced_topics/file_image_ops.html +++ b/documentation/hdf5-docs/advanced_topics/file_image_ops.md @@ -1,7 +1,8 @@ +--- title: HDF5 File Image Operations redirect_from: - /display/HDF5/HDF5+File+Image+Operations - +--- ## \*\*\* UNDER CONSTRUCTION \*\*\* # HDF5 File Image Operations @@ -63,7 +64,7 @@ * [H5LTopen\_file\_image\_f](#) -## 1. Introduction to HDF5 File Image Operations +## 1. Introduction to HDF5 File Image Operations File image operations allow users to work with HDF5 files in memory in the same ways that users currently work with HDF5 files on disk. Disk I/O is not required when file images are opened, created, read from, or written to. An HDF5 file image is an HDF5 file that is held in a buffer in main memory. Setting up a file image in memory involves using either a buffer in the file access property list or a buffer in the Core (aka Memory) file driver. @@ -82,11 +83,11 @@ H5Pset\_file\_image Allows an application to specify an initial file image. For more information, see section 2.1.1. -H5Pget\_file\_image Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. -H5Pset\_file\_image\_callbacks Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. -H5Pget\_file\_image\_callbacks Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. -H5Fget\_file\_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. -H5LTopen\_file\_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. +H5Pget\_file\_image Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. +H5Pset\_file\_image\_callbacks Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. +H5Pget\_file\_image\_callbacks Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. +H5Fget\_file\_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. +H5LTopen\_file\_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. ### 1.2. Abbreviations @@ -201,7 +202,7 @@ herr\_t H5Pset\_file\_image\_callbacks(hid\_t fapl\_id, H5\_file\_image\_callbacks\_t \*callbacks\_ptr) -The parameters of H5Pset\_file\_image\_callbacks are defined as follows: +The parameters of H5Pset\_file\_image\_callbacks are defined as follows: fapl\_id contains the ID of the target file access property list. callbacks\_ptr contains a pointer to an instance of the H5\_file\_image\_callbacks\_t structure. @@ -245,14 +246,14 @@ Table 2. Values for the file\_image\_op parameter -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being set in a FAPL. -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied when a FAPL is copied. -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being retrieved from a FAPL -H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a FAPL close operation. -H5\_FILE\_IMAGE\_OP\_FILE\_OPEN This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is copied during a file open operation. While the image being opened will typically be copied from a FAPL, this need not always be the case. An example of an exception is when the Core file driver takes its initial image from a file. -H5\_FILE\_IMAGE\_OP\_FILE\_RESIZE This value is passed to the image\_realloc callback when a file driver needs to resize an image buffer. -H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a file close operation. - +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being set in a FAPL. +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied when a FAPL is copied. +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is being copied while being retrieved from a FAPL +H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a FAPL close operation. +H5\_FILE\_IMAGE\_OP\_FILE\_OPEN This value is passed to the image\_malloc and image\_memcpy callbacks when an image buffer is copied during a file open operation. While the image being opened will typically be copied from a FAPL, this need not always be the case. An example of an exception is when the Core file driver takes its initial image from a file. +H5\_FILE\_IMAGE\_OP\_FILE\_RESIZE This value is passed to the image\_realloc callback when a file driver needs to resize an image buffer. +H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE This value is passed to the image\_free callback when an image buffer is being released during a file close operation. + In closing our discussion of H5Pset\_file\_image\_callbacks(), we note the interaction between this call and the H5Pget/set\_file\_image() calls above: since the malloc, memcpy, and free callbacks defined in the instance of H5\_file\_image\_callbacks\_t are used by H5Pget/set\_file\_image(), H5Pset\_file\_image\_callbacks() will fail if a file image is already set in the target property list. @@ -274,7 +275,7 @@ Upon successful return, callbacks\_ptr->image\_malloc will contain the pointer passed as the image\_malloc field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->image\_memcpy will contain the pointer passed as the image\_memcpy field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->image\_realloc will contain the pointer passed as the image\_realloc field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. -Upon successful return, callbacks\_ptr->image\_free\_ptr will contain the pointer passed as the image\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks\_ptr->image\_free\_ptr will contain the pointer passed as the image\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->udata\_copy will contain the pointer passed as the udata\_copy field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr-> udata\_free will contain the pointer passed as the udata\_free field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. Upon successful return, callbacks\_ptr->udata will contain the pointer passed as the udata field of the instance of H5\_file\_image\_callbacks\_t pointed to by the callbacks\_ptr parameter of the last call to H5Pset\_file\_image\_callbacks() for the specified FAPL, or NULL if there has been no such call. @@ -287,7 +288,7 @@ Thus file drivers that set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag but not the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag may read the supplied image from the property list (if present) and use it to initialize the contents of the file. However, they will not discard the image when done, nor will they make any use of any file image callbacks (if defined). -If an initial file image appears in a file allocation property list that is used in an H5Fopen() call, and if the underlying file driver does not set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag, then the open will fail. +If an initial file image appears in a file allocation property list that is used in an H5Fopen() call, and if the underlying file driver does not set the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag, then the open will fail. If a driver sets both the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag and the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag, then that driver will allocate a buffer of the required size, copy the contents of the initial image buffer from the file access property list, and then open the copy as if it had just loaded it from file. If the file image allocation callbacks are defined, the driver shall use them for all memory management tasks. Otherwise it will use the standard malloc, memcpy, realloc, and free C library calls for this purpose. @@ -295,7 +296,7 @@ Finally, it is logically possible that a file driver would set the H5FD\_FEAT\_CAN\_USE\_FILE\_IMAGE\_CALLBACKS flag, but not the H5FD\_FEAT\_ALLOW\_FILE\_IMAGE flag. While it is hard to think of a situation in which this would be desirable, setting the flags this way will not cause any problems: the two capabilities are logically distinct. - + #### 2.1.6. H5Fget\_file\_image The purpose of the H5Fget\_file\_image routine is to provide a simple way to retrieve a copy of the image of an existing, open file. This routine can be used with files opened using the SEC2 (aka POSIX), STDIO, and Core (aka Memory) VFDs. @@ -306,7 +307,7 @@ The parameters of H5Fget\_file\_image are defined as follows: file\_id contains the ID of the target file. -buf\_ptr contains a pointer to the buffer into which the image of the HDF5 file is to be copied. If buf\_ptr is NULL, no data will be copied, but the return value will still indicate the buffer size required (or a negative value on error). +buf\_ptr contains a pointer to the buffer into which the image of the HDF5 file is to be copied. If buf\_ptr is NULL, no data will be copied, but the return value will still indicate the buffer size required (or a negative value on error). buf\_len contains the size of the supplied buffer. If the return value of H5Fget\_file\_image is a positive value, then the value will be the length of buffer required to store the file image (in other words, the length of the file). A negative value might be returned if the file is too large to store in the supplied buffer or on failure. @@ -322,7 +323,7 @@ Thus we will not support the Family file driver in H5Fget\_file\_image() unless there is demand for it. Files created with the Multi and Split file drivers are also marked in the superblock. In addition, they typically use a very sparse address space. A sparse address space would require the use of an impractically large buffer for an image, and most of the buffer would be empty. So, we see no point in supporting the Multi and Split file drivers in H5Fget\_file\_image() under any foreseeable circumstances. - + ### 2.2. High-level C API Routine The H5LTopen\_file\_image high-level routine encapsulates the capabilities of routines in the main HDF5 Library with conveniently accessible abstractions. @@ -340,15 +341,15 @@ flags contains a set of flags indicating whether the image is to be opened read/write, whether HDF5 is to take control of the buffer, and how long the application promises to maintain the buffer. Possible flags are described in the table below: Table 3. Flags for H5LTopen\_file\_image -H5LT\_FILE\_IMAGE\_OPEN\_RW Indicates that the HDF5 Library should open the image read/write instead of the default read-only. -H5LT\_FILE\_IMAGE\_DONT\_COPY +H5LT\_FILE\_IMAGE\_OPEN\_RW Indicates that the HDF5 Library should open the image read/write instead of the default read-only. +H5LT\_FILE\_IMAGE\_DONT\_COPY Indicates that the HDF5 Library should not copy the file image buffer provided, but should use it directly. The HDF5 Library will release the file image when finished. The supplied buffer must have been allocated via a call to the standard C library malloc() or calloc() routines. The HDF5 Library will call free() to release the buffer. In the absence of this flag, the HDF5 Library will copy the buffer provided. The H5LT\_FILE\_IMAGE\_DONT\_COPY flag provides an application with the ability to “give ownership” of a file image buffer to the HDF5 Library. The HDF5 Library will modify the buffer on write if the image is opened read/write and the H5LT\_FILE\_IMAGE\_DONT\_COPY flag is set. The H5LT\_FILE\_IMAGE\_DONT\_RELEASE flag, see below, is invalid unless the H5LT\_FILE\_IMAGE\_DONT\_COPY flag is set -H5LT\_FILE\_IMAGE\_DONT\_RELEASE +H5LT\_FILE\_IMAGE\_DONT\_RELEASE Indicates that the HDF5 Library should not attempt to release the buffer when the file is closed. This implies that the application will tend to this detail and that the application will not discard the buffer until after the file image is closed. Since there is no way to return a changed buffer base address to the application, and since realloc can change this value, calls to realloc() must be barred when this flag is set. As a result, any write that requires an increased buffer size will fail. @@ -415,7 +416,7 @@ Note that there is no way currently to specify a “backing store” file name in this definition of H5LTopen\_image. - + ## 3. C API Call Semantics The purpose of this chapter is to describe some issues that developers should consider when using file image buffers, property lists, and callback APIs. @@ -469,7 +470,7 @@ Suppose, however, that the file image will be opened read/write and may grow during the computation. We must now allow for the base address of the buffer to change due to reallocation calls, and we must employ the user data structure to communicate any change in the buffer base address and size to the application. We pass buffer changes to the application so that the application will be able to eventually free the buffer. To this end, we might define a user data structure as shown in the example below: - + typedef struct udata { void \*init\_ptr; @@ -514,7 +515,7 @@ #### 3.2.1. Applying Initial File Image Semantics to the Core File Driver At present, the Core file driver uses the open() and read() system calls to load an HDF5 file image from the file system into RAM. Further, if the backing\_store flag is set in the FAPL entry specifying the use of the Core file driver, the Core file driver’s internal image will be used to overwrite the source file on either flush or close. See the H5Pset\_fapl\_core entry in the HDF5 Reference Manual for more information. -This results in the following observations. In all cases assume that use of the Core file driver has been specified in the FAPL. +This results in the following observations. In all cases assume that use of the Core file driver has been specified in the FAPL. If the file specified in the H5Fopen() call does not exist, and no initial image is specified in the FAPL, the open must fail because there is no source for the initial image needed by the Core file driver. If the file specified in the H5Fopen() call does exist, and an initial image is specified in the FAPL, the open must fail because the source of the needed initial image is ambiguous: the file image could be taken either from file or from the FAPL. @@ -543,11 +544,11 @@ The following pseudo code illustrates opening the image read -only using the H5LTopen\_file\_image() routine. In this example, the application retains ownership of the buffer and avoids extra buffer allocations and memcpy calls. - - + + hid\_t file\_id; -unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; -file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); +unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; +file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); Example 3. Using H5LTopen\_file\_image to open a read-only file image where the application retains ownership of the buffer @@ -556,18 +557,18 @@ hid\_t file\_id; unsigned flags = H5LT\_FILE\_IMAGE\_DONT\_COPY; -file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); +file\_id = H5LTopen\_file\_image(buf, buf\_len, flags); Example 4. Using H5LTopen\_file\_image to open a read-only file image where the application transfers ownership of the buffer Again, file access is read-only. Read/write access can be obtained via the H5LTopen\_file\_image() call, but we will explore that in the section below. - + ### 4.2. In-memory HDF5 File Image Construction Before the implementation of file image operations, HDF5 supported construction of an image of an HDF5 file in memory with the Core file driver. The H5Fget\_file\_image() function call allows an application access to the file image without first writing it to disk. See the following code fragment: - + H5Fflush(fid); size = H5Fget\_file\_image(fid, NULL, 0); buffer\_ptr = malloc(size); @@ -588,7 +589,7 @@ void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { -assert(FALSE); /\* Should never be invoked in this scenario. \*/ +assert(FALSE); /\* Should never be invoked in this scenario. \*/ return(NULL); /\* always fails \*/ } void image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, @@ -599,7 +600,7 @@ } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); + assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); ((struct udata\_t \*)udata)->image\_ptr = ptr; return(0); /\* if we get here, we must have been successful \*/ } @@ -637,28 +638,28 @@ void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); - assert(((struct udata\_t \*)udata)->ref\_count == 0); - ((struct udata\_t \*)udata)->image\_size = size; + assert(((struct udata\_t \*)udata)->ref\_count == 0); + ((struct udata\_t \*)udata)->image\_size = size; (((struct udata\_t \*)udata)->ref\_count)++; return((((struct udata\_t \*)udata)->image\_ptr); } -void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { -assert(FALSE); /\* Should never be invoked in this scenario. \*/ +assert(FALSE); /\* Should never be invoked in this scenario. \*/ return(NULL); /\* always fails \*/ } void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); -assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); assert(((struct udata\_t \*)udata)->ref\_count == 1); - ((struct udata\_t \*)udata)->image\_size = size; -return((((struct udata\_t \*)udata)->image\_ptr); + ((struct udata\_t \*)udata)->image\_size = size; +return((((struct udata\_t \*)udata)->image\_ptr); } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); + assert(file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE); assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); assert(((struct udata\_t \*)udata)->ref\_count == 1); (((struct udata\_t \*)udata)->ref\_count)--; @@ -669,13 +670,13 @@ return(udata); } herr\_t udata\_free(void \*udata) -{ +{ return(0); } H5\_file\_image\_callbacks\_t callbacks = {image\_malloc, image\_memcpy, image\_realloc, image\_free, udata\_copy, udata\_free, - (void \*)(&udata)}; + (void \*)(&udata)}; /\* end of initialization \*/ H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); @@ -690,14 +691,14 @@ If we can further arrange matters so that only the contents of the datasets in the HDF5 file image change, but not the structure of the file itself, we can optimize still further by re-using the image and changing only the contents of the datasets after the initial write to the buffer. The following pseudo code shows how this might be done. Note that the code assumes that buf already contains the image of the HDF5 file whose dataset contents are to be overwritten. Again, much error checking is omitted for clarity. Also, observe that the file image callbacks do not support the H5Pget\_file\_image() call. + - - - -void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) + + +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); - assert(size == ((struct udata\_t \*)udata)->image\_size); + assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(size == ((struct udata\_t \*)udata)->image\_size); assert(((struct udata\_t \*)udata)->ref\_count >= 0); ((struct udata\_t \*)udata)->image\_size = size; (((struct udata\_t \*)udata)->ref\_count)++; @@ -705,11 +706,11 @@ } void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { -assert(dest == ((struct udata\_t \*)udata)->image\_ptr); -assert(src == ((struct udata\_t \*)udata)->image\_ptr); -assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); -assert(size == ((struct udata\_t \*)udata)->image\_size); -assert(((struct udata\_t \*)udata)->ref\_count >= 1); +assert(dest == ((struct udata\_t \*)udata)->image\_ptr); +assert(src == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); +assert(size == ((struct udata\_t \*)udata)->image\_size); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); return(dest); /\* if we get here, we must have been successful \*/ } void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) @@ -725,15 +726,15 @@ \* to performing sanity checks, and returning the base address of the \* statically allocated buffer. \*/ - assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); -assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); assert(((struct udata\_t \*)udata)->ref\_count >= 1); - assert(((struct udata\_t \*)udata)->image\_size == size); -return((((struct udata\_t \*)udata)->image\_ptr); + assert(((struct udata\_t \*)udata)->image\_size == size); +return((((struct udata\_t \*)udata)->image\_ptr); } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - assert((file\_image\_op == H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE) || + assert((file\_image\_op == H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE) || (file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE)); assert(((struct udata\_t \*)udata)->ref\_count >= 1); (((struct udata\_t \*)udata)->ref\_count)--; @@ -766,7 +767,7 @@ Before we go on, we should note that the above pseudo code can be written more compactly, albeit with fewer sanity checks, using the H5LTopen\_file\_image() call. See the example below: - + hid\_t file\_id; unsigned flags = H5LT\_FILE\_IMAGE\_OPEN\_RW | H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; /\* end initialization \*/ @@ -775,7 +776,7 @@ /\* udata now contains the base address and length of the final version of the core file \*/ - + Example 9. Using H5LTopen\_file\_image where only the datasets change The above pseudo code allows updates of a file image about as cheaply as possible. We assume the application has enough RAM for the image and that the HDF5 file structure is constant after the first write. @@ -791,41 +792,41 @@ void \* vfd\_image\_ptr; size\_t vfd\_image\_size; nt vfd\_ref\_count; -} udata = {NULL, 0, 0, NULL, 0, 0}; +} udata = {NULL, 0, 0, NULL, 0, 0}; boolean initial\_file\_open = TRUE; -void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { - void \* return\_value = NULL; + void \* return\_value = NULL; switch ( file\_image\_op ) { case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET: case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY: - assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); - assert(((struct udata\_t \*)udata)->fapl\_image\_size == size); + assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); + assert(((struct udata\_t \*)udata)->fapl\_image\_size == size); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 0); - return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; + return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; (((struct udata\_t \*)udata)->fapl\_ref\_count)++; - break; + break; case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: - assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); - assert(((struct udata\_t \*)udata)->vfd\_image\_size == size); + assert(((struct udata\_t \*)udata)->fapl\_image\_ptr != NULL); + assert(((struct udata\_t \*)udata)->vfd\_image\_size == size); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); - return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; + return\_value = ((struct udata\_t \*)udata)->fapl\_image\_ptr; /\* don’t increment ref count \*/ - break; - case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: - assert(((struct udata\_t \*)udata)->vfd\_image\_ptr == NULL); - assert(((struct udata\_t \*)udata)->vfd\_image\_size == 0); + break; + case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: + assert(((struct udata\_t \*)udata)->vfd\_image\_ptr == NULL); + assert(((struct udata\_t \*)udata)->vfd\_image\_size == 0); assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 0); if (((struct udata\_t \*)udata)->fapl\_image\_ptr == NULL ) { ((struct udata\_t \*)udata)->vfd\_image\_ptr = malloc(size); - ((struct udata\_t \*)udata)->vfd\_image\_size = size; + ((struct udata\_t \*)udata)->vfd\_image\_size = size; } else { assert(((struct udata\_t \*)udata)->fapl\_image\_size == size); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); - ((struct udata\_t \*)udata)->vfd\_image\_ptr = + ((struct udata\_t \*)udata)->vfd\_image\_ptr = ((struct udata\_t \*)udata)->fapl\_image\_ptr; ((struct udata\_t \*)udata)->vfd\_image\_size = size; } @@ -837,25 +838,25 @@ } return(return\_value); } -void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { switch(file\_image\_op) { case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_SET: case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_COPY: - case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: -assert(dest == ((struct udata\_t \*)udata)->fapl\_image\_ptr); -assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); -assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); -assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); + case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_GET: +assert(dest == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); +assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); break; case H5\_FILE\_IMAGE\_OP\_FILE\_OPEN: -assert(dest == ((struct udata\_t \*)udata)->vfd\_image\_ptr); -assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); -assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); -assert(size == ((struct udata\_t \*)udata)->vfd\_image\_size); -assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); -assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); +assert(dest == ((struct udata\_t \*)udata)->vfd\_image\_ptr); +assert(src == ((struct udata\_t \*)udata)->fapl\_image\_ptr); +assert(size == ((struct udata\_t \*)udata)->fapl\_image\_size); +assert(size == ((struct udata\_t \*)udata)->vfd\_image\_size); +assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); +assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); break; default: assert(FALSE); @@ -869,21 +870,21 @@ assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); | assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); ((struct udata\_t \*)udata)->vfd\_image\_ptr = realloc(ptr, size); - ((struct udata\_t \*)udata)->vfd\_image\_size = size; -return((((struct udata\_t \*)udata)->vfd\_image\_ptr); + ((struct udata\_t \*)udata)->vfd\_image\_size = size; +return((((struct udata\_t \*)udata)->vfd\_image\_ptr); } herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) { switch(file\_image\_op) { case H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE: - assert(ptr == ((struct udata\_t \*)udata)->fapl\_image\_ptr); + assert(ptr == ((struct udata\_t \*)udata)->fapl\_image\_ptr); assert(((struct udata\_t \*)udata)->fapl\_ref\_count >= 1); - (((struct udata\_t \*)udata)->fapl\_ref\_count)--; + (((struct udata\_t \*)udata)->fapl\_ref\_count)--; break; case H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE: - assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); + assert(ptr == ((struct udata\_t \*)udata)->vfd\_image\_ptr); assert(((struct udata\_t \*)udata)->vfd\_ref\_count == 1); - (((struct udata\_t \*)udata)->vfd\_ref\_count)--; + (((struct udata\_t \*)udata)->vfd\_ref\_count)--; break; default: assert(FALSE); @@ -903,8 +904,8 @@ image\_realloc, image\_free, udata\_copy, udata\_free, (void \*)(&udata)}; -/\* end of initialization \*/ - +/\* end of initialization \*/ + H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); if ( initial\_file\_open ) { initial\_file\_open = FALSE; @@ -913,9 +914,9 @@ assert(udata.vfd\_image\_size > 0); assert(udata.vfd\_ref\_count == 0); assert(udata.fapl\_ref\_count == 0); - udata.fapl\_image\_ptr = udata.vfd\_image\_ptr; - udata.fapl\_image\_size = udata.vfd\_image\_size; - udata.vfd\_image\_ptr = NULL; + udata.fapl\_image\_ptr = udata.vfd\_image\_ptr; + udata.fapl\_image\_size = udata.vfd\_image\_size; + udata.vfd\_image\_ptr = NULL; udata.vfd\_image\_size = 0; H5Pset\_file\_image(fapl\_id, udata.fapl\_image\_ptr, udata.fapl\_image\_size); } @@ -924,10 +925,10 @@ assert(udata.fapl\_ref\_count == 0); assert(udata.vfd\_ref\_count == 0); - -/\* udata.vfd\_image\_ptr and udata.vfd\_image\_size now contain the base address and length of the final version of the core file \*/ - - + +/\* udata.vfd\_image\_ptr and udata.vfd\_image\_size now contain the base address and length of the final version of the core file \*/ + + Example 10. Using H5LTopen\_file\_image where only the datasets change and where the file structure and image size might not be constant @@ -952,11 +953,11 @@ \*\*\* Process B \*\*\* hid\_t file\_id; - - - + + + -buffer\_ptr = malloc(size) +buffer\_ptr = malloc(size) file\_id = H5LTopen\_file\_image(buf, buf\_len, @@ -967,13 +968,13 @@ ### 4.4. Using a Template File After the above examples, an example of the use of a template file might seem anti-climactic. A template file might be used to enforce consistency on file structure between files or in parallel HDF5 to avoid long sequences of collective operations to create the desired groups, datatypes, and possibly datasets. The following pseudo code outlines a potential use: - - - -H5Pset\_file\_image(fapl\_id, buf, buf\_len); - - - + + + +H5Pset\_file\_image(fapl\_id, buf, buf\_len); + + + Example 12. Using a template file @@ -1039,17 +1040,17 @@ } H5\_file\_udata\_copy\_cb -public interface H5\_file\_udata\_copy\_cb extends Callbacks { +public interface H5\_file\_udata\_copy\_cb extends Callbacks { buf[] callback(CBuserdata udata); } H5\_file\_udata\_free\_cb -public interface H5\_file\_udata\_free\_cb extends Callbacks { +public interface H5\_file\_udata\_free\_cb extends Callbacks { void callback(CBuserdata udata); -} +} H5\_file\_image\_callbacks\_t -public abstract class H5\_file\_image\_callbacks\_t +public abstract class H5\_file\_image\_callbacks\_t { H5\_file\_image\_malloc\_cb image\_malloc; H5\_file\_image\_memcpy\_cb image\_memcpy; @@ -1059,7 +1060,7 @@ H5\_file\_udata\_free\_cb udata\_free; CBuserdata udata; public H5\_file\_image\_callbacks\_t( - H5\_file\_image\_malloc\_cb image\_malloc, + H5\_file\_image\_malloc\_cb image\_malloc, H5\_file\_image\_memcpy\_cb image\_memcpy, H5\_file\_image\_realloc\_cb image\_realloc, H5\_file\_image\_free\_cb image\_free, @@ -1078,12 +1079,12 @@ H5Pset\_file\_image\_callbacks int H5Pset\_file\_image\_callbacks(int fapl\_id, - H5\_file\_image\_callbacks\_t callbacks\_ptr); + H5\_file\_image\_callbacks\_t callbacks\_ptr); H5Pget\_file\_image\_callbacks int H5Pget\_file\_image\_callbacks(int fapl\_id, H5\_file\_image\_callbacks\_t[] callbacks\_ptr); -H5Fget\_file\_image +H5Fget\_file\_image long H5Fget\_file\_image(int file\_id, byte[] buf\_ptr); ## 6. Fortran Signatures for File Image Operations API Calls @@ -1110,7 +1111,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.2. H5Pget\_file\_image\_f The signature of H5Pget\_file\_image\_f is defined as follows: @@ -1130,7 +1131,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.3. H5Pset\_file\_image\_callbacks\_f The signature of H5Pset\_file\_image\_callbacks\_f is defined as follows: @@ -1141,10 +1142,10 @@ H5\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE\_F=3, H5\_IMAGE\_OP\_FILE\_OPEN\_F=4, H5\_IMAGE\_OP\_FILE\_RESIZE\_F=5, - H5\_IMAGE\_OP\_FILE\_CLOSE\_F=6 + H5\_IMAGE\_OP\_FILE\_CLOSE\_F=6 TYPE, BIND(C) :: H5\_file\_image\_callbacks\_t TYPE(C\_FUN\_PTR), VALUE :: image\_malloc - TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy + TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy TYPE(C\_FUN\_PTR), VALUE :: image\_realloc TYPE(C\_FUN\_PTR), VALUE :: image\_free TYPE(C\_FUN\_PTR), VALUE :: udata @@ -1167,7 +1168,7 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: image\_malloc Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call. - + FUNCTION op\_func(dest, src, size, & file\_image\_op, udata) RESULT(image\_memcpy) TYPE(C\_PTR), VALUE :: dest @@ -1182,9 +1183,9 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: image\_memcpy Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call. + - -FUNCTION op\_func(ptr, size, & file\_image\_op, udata) RESULT(image\_realloc) +FUNCTION op\_func(ptr, size, & file\_image\_op, udata) RESULT(image\_realloc) TYPE(C\_PTR), VALUE :: ptr Will contain the pointer to the buffer being reallocated INTEGER(size\_t) :: size @@ -1195,9 +1196,9 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: image\_realloc Shall contain a pointer to a unction functionality identical to the standard C library realloc() call. + - -FUNCTION op\_func(ptr, file\_image\_op, udata) RESULT(image\_free) +FUNCTION op\_func(ptr, file\_image\_op, udata) RESULT(image\_free) TYPE(C\_PTR), VALUE :: ptr Will contain the pointer to the buffer being released. INTEGER :: file\_image\_op @@ -1206,26 +1207,26 @@ Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_PTR), VALUE :: image\_free Shall contain a pointer to a function with functionality identical to the standard C library free() call + - -FUNCTION op\_func(udata) RESULT(udata\_copy) +FUNCTION op\_func(udata) RESULT(udata\_copy) TYPE(C\_PTR), VALUE :: udata Will be set to the value passed in for the udata parameter to H5Pset\_file\_image\_callbacks\_f. TYPE(C\_FUN\_PTR), VALUE :: udata\_copy Shall contain a pointer to a function that will allocate a buffer of suitable size, copy the contents of the supplied udata into the new buffer, and return the address of the new buffer. The function will return C\_NULL\_PTR on failure. - + FUNCTION op\_func(udata) RESULT(udata\_free) TYPE(C\_PTR), VALUE :: udata Shall contain a pointer value, potentially to user-defined data, that will be passed to the image\_malloc, image\_memcpy, image\_realloc, and image\_free callbacks. - + The signature of H5Pset\_file\_image\_callbacks\_f is defined as follows: SUBROUTINE H5Pset\_file\_image\_callbacks\_f(fapl\_id, &callbacks\_ptr, hdferr) The parameters are defined as follows: - + INTEGER(hid\_t), INTENT(IN) :: fapl\_id Will contain the ID of the target file access property list. @@ -1236,7 +1237,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.4. H5Pget\_file\_image\_callbacks\_f The H5Pget\_file\_image\_callbacks\_f routine is designed to obtain the current file image callbacks from a file access property list. @@ -1255,7 +1256,7 @@ INTEGER, INTENT(OUT) :: hdferr Will return the error status: 0 for success and -1 for failure. - + #### 6.1.5. Fortran Virtual File Driver Feature Flags Implementation of the H5Pget/set\_file\_image\_callbacks\_f() and H5Pget/set\_file\_image\_f() APIs requires a pair of new virtual file driver feature flags: @@ -1285,7 +1286,7 @@ INTEGER, INTENT(OUT) :: hdferr Returns the error status: 0 for success and -1 for failure. - + See the “H5Fget\_file\_image” section for more information. diff --git a/documentation/hdf5-docs/advanced_topics_list.md b/documentation/hdf5-docs/advanced_topics_list.md index 45d6f394..fd35bb21 100644 --- a/documentation/hdf5-docs/advanced_topics_list.md +++ b/documentation/hdf5-docs/advanced_topics_list.md @@ -8,7 +8,7 @@ redirect_from: display/HDF5/Advanced+Topics+in+HDF5 # HDF5 Features -### [HDF5 File Image Operations](advanced_topics/file_image_ops.html) +### [HDF5 File Image Operations](advanced_topics/file_image_ops.md) ### [Copying Committed Datatypes with H5Ocopy](advanced_topics/cp_committed_dt_H5Ocopy.md) ### [HDF5 Data Flow Pipeline for H5Dread](advanced_topics/data_flow_pline_H5Dread.md) ### [Introduction to Single-Writer_Multiple-Reader (SWMR)](advanced_topics/intro_SWMR.md) From 7989efd97add9dcfff58c545f0102277d2bdd122 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 01:00:12 -0400 Subject: [PATCH 30/44] md to html take 2 --- .../advanced_topics/file_image_ops.html | 1011 +++++++++++++++++ 1 file changed, 1011 insertions(+) create mode 100644 documentation/hdf5-docs/advanced_topics/file_image_ops.html diff --git a/documentation/hdf5-docs/advanced_topics/file_image_ops.html b/documentation/hdf5-docs/advanced_topics/file_image_ops.html new file mode 100644 index 00000000..9169101d --- /dev/null +++ b/documentation/hdf5-docs/advanced_topics/file_image_ops.html @@ -0,0 +1,1011 @@ +

title: HDF5 File Image Operations +redirect_from: + - /display/HDF5/HDF5+File+Image+Operations

+

*** UNDER CONSTRUCTION ***

+

HDF5 File Image Operations

+

1. Introduction to HDF5 File Image Operations

+ +

2. C API Call Syntax

+

2.1. Low-level C API Routines

+ +

2.2. High-level C API Routine

+ +

3. C API Call Semantics

+

3.1. File Image Callback Semantics

+ +

3.2. Initial File Image Semantics

+ +

4. Examples

+

4.1. Reading an In-memory HDF5 File Image
+ 4.2. In-memory HDF5 File Image Construction
+ 4.3. Using HDF5 to Construct and Read a Data Packet
+ 4.4. Using a Template File

+

5. Java Signatures for File Image Operations API Calls

+

6. Fortran Signatures for File Image Operations API Calls

+

6.1. Low-level Fortran API Routines

+ +

6.2. High-level Fortran API Routine

+ +

1. Introduction to HDF5 File Image Operations

+

File image operations allow users to work with HDF5 files in memory in the same ways that users currently work with HDF5 files on disk. Disk I/O is not required when file images are opened, created, read from, or written to.

+

An HDF5 file image is an HDF5 file that is held in a buffer in main memory. Setting up a file image in memory involves using either a buffer in the file access property list or a buffer in the Core (aka Memory) file driver.

+

The advantage of working with a file in memory is faster access to the data.

+

The challenge of working with files in memory buffers is maximizing performance and minimizing memory footprint while working within the constraints of the property list mechanism. This should be a non-issue for small file images, but may be a major issue for large images.

+

If invoked with the appropriate flags, the H5LTopen_file_image() high level library call should deal with these challenges in most cases. However, some applications may require the programmer to address these issues directly.

+

1.1. File Image Operations Function Summary

+

Functions used in file image operations are listed below.

+

Function Listing 1. File image operations functions

+

H5Pset_file_image

+

Allows an application to specify an initial file image. For more information, see section 2.1.1. +H5Pget_file_image Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. +H5Pset_file_image_callbacks Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. +H5Pget_file_image_callbacks Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. +H5Fget_file_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. +H5LTopen_file_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1.

+

1.2. Abbreviations

+

The following abbreviations are used in this document:

+

Table 1. Abbreviations

+

FAPL or fapl

+

File Access Property List. In code samples, fapl is used.

+

VFD

+

Virtual File Driver

+

VFL

+

Virtual File Layer

+

1.3. Developer Prerequisites

+

Developers who use the file image operations described in this document should be proficient and experienced users of the HDF5 C Library APIs. More specifically, developers should have a working knowledge of property lists, callbacks, and virtual file drivers.

+

1.4. Resources

+

See the following for more information.

+

The “RFC: File Image Operations” is the primary source for the information in this document.

+

The “Alternate File Storage Layouts and Low-level File Drivers” section is in “The HDF5 File” chapter of the HDF5 User’s Guide .

+

The H5P_SET_FAPL_CORE function call can be used to modify the file access property list so that the Memory virtual file driver, H5FD_ CORE, is used. The Memory file driver is also known as the Core file driver.

+

Links to the Virtual File Layer and List of VFL Functions documents can be found in the HDF5 Technical Notes.

+

2. C API Call Syntax

+

The C API function calls described in this chapter fall into two categories: low-level routines that are part of the main HDF5 C Library and one high-level routine that is part of the “lite” API in the high-level wrapper library. The high-level routine uses the low-level routines and presents frequently requested functionality conveniently packaged for application developers’ use.

+

2.1. Low-level C API Routines

+

The purpose of this section is to describe the low-level C API routines that support file image operations. These routines allow an in-memory image of an HDF5 file to be opened without requiring file system I/O.

+

The basic approach to opening an in-memory image of an HDF5 file is to pass the image to the Core file driver, and then tell the Core file driver to open the file. We do this by using the H5Pget/set_file_image calls. These calls allow the user to specify an initial file image.

+

A potential problem with the H5Pget/set_file_image calls is the overhead of allocating and copying of large file image buffers. The callback routines enable application programs to avoid this problem. However, the use of these callbacks is complex and potentially hazardous: the particulars are discussed in the semantics and examples chapters below (see section 3.1 and section 4.1 respectively). Fortunately, use of the file image callbacks should seldom be necessary: the H5LTopen_file_image call should address most use cases.

+

The property list facility in HDF5 is employed in file image operations. This facility was designed for passing data, not consumable resources, into API calls. The peculiar ways in which the file image allocation callbacks may be used allows us to avoid extending the property list structure to handle consumable resources cleanly and to avoid constructing a new facility for the purpose.

+

The sub-sections below describe the low-level C APIs that are used with file image operations.

+

2.1.1. H5Pset_file_image

+

The H5Pset_file_image routine allows an application to provide an image for a file driver to use as the initial contents of the file. This call was designed initially for use with the Core VFD, but it can be used with any VFD that supports using an initial file image when opening a file. See the “Virtual File Driver Feature Flags” section for more information. Calling this routine makes a copy of the provided file image buffer. See the “H5Pset_file_image_callbacks” section for more information.

+

The signature of H5Pset_file_image is defined as follows:

+

herr_t H5Pset_file_image(hid_t fapl_id, void *buf_ptr, size_t buf_len) +The parameters of H5Pset_file_image are defined as follows:

+

fapl_id contains the ID of the target file access property list. +buf_ptr supplies a pointer to the initial file image, or NULL if no initial file image is desired. +buf_len contains the size of the supplied buffer, or 0 if no initial image is desired. +If either the buf_len parameter is zero, or the buf_ptr parameter is NULL, no file image will be set in the FAPL, and any existing file image buffer in the FAPL will be released. If a buffer is released, the FAPL’s file image buf_len will be set to 0 and buf_ptr will be set to NULL.

+

Given the tight interaction between the file image callbacks and the file image, the file image callbacks in a property list cannot be changed while a file image is defined.

+

With properly constructed file image callbacks, it is possible to avoid actually copying the file image. The particulars of this are discussed in greater detail in the “C API Call Semantics” chapter and in the “Examples” chapter.

+

2.1.2. H5Pget_file_image

+

The H5Pget_file_image routine allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. This routine uses the file image callbacks (if defined) when allocating and loading the buffer to return to the application, or it uses malloc and memcpy if the callbacks are undefined. When malloc and memcpy are used, it will be the caller’s responsibility to discard the returned buffer via a call to free.

+

The signature of H5Pget_file_image is defined as follows:

+

herr_t H5Pget_file_image(hid_t fapl_id, void **buf_ptr_ptr, size_t *buf_len_ptr) +The parameters of H5Pget_file_image are defined as follows:

+

fapl_id contains the ID of the target file access property list. +buf_ptr_ptr contains a NULL or a pointer to a void*. If buf_ptr_ptr is not NULL, on successful return, *buf_ptr_ptr will contain a pointer to a copy of the initial image provided in the last call to H5Pset_file_image for the supplied fapl_id. If no initial image has been set, *buf_ptr_ptr will be NULL. +buf_len_ptr contains a NULL or a pointer to size_t. If buf_len_ptr is not NULL, on successful return, *buf_len_ptr will contain the value of the buf_len parameter for the initial image in the supplied fapl_id. If no initial image is set, the value of *buf_len_ptr will be 0. +As with H5Pset_file_image, appropriately defined file image callbacks can allow this function to avoid buffer allocation and memory copy operations.

+

2.1.3. H5Pset_file_image_callbacks

+

The H5Pset_file_image_callbacks API call exists to allow an application to control the management of file image buffers through user defined callbacks. These callbacks will be used in the management of file image buffers in property lists and in select file drivers. These routines are invoked when a new file image buffer is allocated, when an existing file image buffer is copied or resized, or when a file image buffer is released from use. From the perspective of the HDF5 Library, the operations of the image_malloc, image_memcpy, image_realloc, and image_free callbacks must be identical to those of the corresponding C standard library calls (malloc, memcpy, realloc, and free). While the operations must be identical, the file image callbacks have more parameters. The callbacks and their parameters are described below. The return values of image_malloc and image_realloc are identical to the return values of malloc and realloc. However, the return values of image_memcpy and image_free are different than the return values of memcpy and free: the return values of image_memcpy and image_free can also indicate failure. See the “File Image Callback Semantics” section for more information.

+

The signature of H5Pset_file_image_callbacks is defined as follows:

+

typedef enum +{ + H5_FILE_IMAGE_OP_PROPERTY_LIST_SET, + H5_FILE_IMAGE_OP_PROPERTY_LIST_COPY, + H5_FILE_IMAGE_OP_PROPERTY_LIST_GET, + H5_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE, + H5_FILE_IMAGE_OP_FILE_OPEN, + H5_FILE_IMAGE_OP_FILE_RESIZE, + H5_FILE_IMAGE_OP_FILE_CLOSE +} H5_file_image_op_t;

+

typedef struct +{ + void *(*image_malloc)(size_t size, H5_file_image_op_t file_image_op, + void *udata); + void *(*image_memcpy)(void *dest, const void *src, size_t size, + H5_file_image_op_t file_image_op, void *udata); + void *(*image_realloc)(void *ptr, size_t size, + H5_file_image_op_t file_image_op, void *udata); + herr_t (*image_free)(void *ptr, H5_file_image_op_t file_image_op, + void *udata); + void *(*udata_copy)(void *udata); + herr_t (*udata_free)(void *udata); + void *udata; +} H5_file_image_callbacks_t;

+

herr_t H5Pset_file_image_callbacks(hid_t fapl_id, + H5_file_image_callbacks_t *callbacks_ptr) +The parameters of H5Pset_file_image_callbacks are defined as follows:

+

fapl_id contains the ID of the target file access property list. +callbacks_ptr contains a pointer to an instance of the H5_file_image_callbacks_t structure. +The fields of the H5_file_image_callbacks_t structure are defined as follows:

+

image_malloc contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library malloc() call. The parameters of the image_malloc callback are defined as follows: +size contains the size in bytes of the image buffer to allocate. +file_image_op contains one of the values of H5_file_image_op_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file_image_op are discussed in Table 2. +udata holds the value passed in for the udata parameter to H5Pset_file_image_callbacks. +Setting image_malloc to NULL indicates that the HDF5 Library should invoke the standard C library malloc() routine when allocating file image buffers.

+

image_memcpy contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library memcpy() call except that it returns NULL on failure. Recall that the memcpy C Library routine is defined to return the dest parameter in all cases. The parameters of the image_memcpy callback are defined as follows: +dest contains the address of the destination buffer. +src contains the address of the source buffer. +size contains the number of bytes to copy. +file_image_op contains one of the values of H5_file_image_op_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file_image_op are discussed in Table 2. +udata holds the value passed in for the udata parameter to H5Pset_file_image_callbacks. +Setting image_memcpy to NULL indicates that the HDF5 Library should invoke the standard C library memcpy() routine when copying buffers.

+

image_realloc contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library realloc() call. The parameters of the image_realloc callback are defined as follows: +ptr contains the pointer to the buffer being reallocated. +size contains the desired size in bytes of the buffer after realloc. +file_image_op contains one of the values of H5_file_image_op_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file_image_op are discussed in Table 2. +udata holds the value passed in for the udata parameter to H5Pset_file_image_callbacks. +Setting image_realloc to NULL indicates that the HDF5 Library should invoke the standard C library realloc() routine when resizing file image buffers.

+

image_free contains a pointer to a function with (from the perspective of HDF5) functionality identical to the standard C library free() call except that it will return 0 (SUCCEED) on success and -1 (FAIL) on failure. The parameters of the image_free callback are defined as follows: +ptr contains the pointer to the buffer being released. +file_image_op contains one of the values of H5_file_image_op_t. These values indicate the operation being performed on the file image when this callback is invoked. Possible values for file_image_op are discussed in Table 2 . +udata holds the value passed in for the udata parameter to H5Pset_file_image_callbacks. +Setting image_free to NULL indicates that the HDF5 Library should invoke the standard C library free() routine when releasing file image buffers.

+

udata_copy contains a pointer to a function that (from the perspective of HDF5) allocates a buffer of suitable size, copies the contents of the supplied udata into the new buffer, and returns the address of the new buffer. The function returns NULL on failure. This function is necessary if a non-NULL udata parameter is supplied, so that property lists containing the image callbacks can be copied. If the udata parameter (below) is NULL, then this parameter should be NULL as well. The parameter of the udata_copy callback is defined as follows: +udata contains the pointer to the user data block being copied. +udata_free contains a pointer to a function that (from the perspective of HDF5) frees a user data block. This function is necessary if a non-NULL udata parameter is supplied so that property lists containing image callbacks can be discarded without a memory leak. If the udata parameter (below) is NULL, this parameter should be NULL as well. The parameter of the udata_free callback is defined as follows: +udata contains the pointer to the user data block to be freed. +udata_free returns 0 (SUCCEED) on success and -1 (FAIL) on failure.

+

udata contains a pointer value, potentially to user-defined data, that will be passed to the image_malloc, image_memcpy, image_realloc, and image_free callbacks. +The semantics of the values that can be set for the file_image_op parameter to the above callbacks are described in the table below:

+

Table 2. Values for the file_image_op parameter

+

H5_FILE_IMAGE_OP_PROPERTY_LIST_SET This value is passed to the image_malloc and image_memcpy callbacks when an image buffer is being copied while being set in a FAPL. +H5_FILE_IMAGE_OP_PROPERTY_LIST_COPY This value is passed to the image_malloc and image_memcpy callbacks when an image buffer is being copied when a FAPL is copied. +H5_FILE_IMAGE_OP_PROPERTY_LIST_GET This value is passed to the image_malloc and image_memcpy callbacks when an image buffer is being copied while being retrieved from a FAPL +H5_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE This value is passed to the image_free callback when an image buffer is being released during a FAPL close operation. +H5_FILE_IMAGE_OP_FILE_OPEN This value is passed to the image_malloc and image_memcpy callbacks when an image buffer is copied during a file open operation. While the image being opened will typically be copied from a FAPL, this need not always be the case. An example of an exception is when the Core file driver takes its initial image from a file. +H5_FILE_IMAGE_OP_FILE_RESIZE This value is passed to the image_realloc callback when a file driver needs to resize an image buffer. +H5_FILE_IMAGE_OP_FILE_CLOSE This value is passed to the image_free callback when an image buffer is being released during a file close operation.

+

In closing our discussion of H5Pset_file_image_callbacks(), we note the interaction between this call and the H5Pget/set_file_image() calls above: since the malloc, memcpy, and free callbacks defined in the instance of H5_file_image_callbacks_t are used by H5Pget/set_file_image(), H5Pset_file_image_callbacks() will fail if a file image is already set in the target property list.

+

For more information on writing the file image to disk, set the backing_store parameter. See the H5Pset_fapl_core entry in the HDF5 Reference Manual.

+

2.1.4. H5Pget_file_image_callbacks

+

The H5Pget_file_image_callbacks routine is designed to obtain the current file image callbacks from a file access property list.

+

The signature of H5Pget_file_image_callbacks() is defined as follows:

+

herr_t H5Pget_file_image_callbacks(hid_t fapl_id, + H5_file_image_callbacks_t *callbacks_ptr) +The parameters of H5Pget_file_image_callbacks are defined as follows:

+

fapl_id contains the ID of the target file access property list. +callbacks_ptr contains a pointer to an instance of the H5_file_image_callbacks_t structure. All fields should be initialized to NULL. See the “H5Pset_file_image_callbacks” section for more information on the H5_file_image_callbacks_t structure. +Upon successful return, the fields of *callbacks_ptr shall contain values as defined below:

+

Upon successful return, callbacks_ptr->image_malloc will contain the pointer passed as the image_malloc field of the instance of H5_file_image_callbacks_t pointed to by the callbacks_ptr parameter of the last call to H5Pset_file_image_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks_ptr->image_memcpy will contain the pointer passed as the image_memcpy field of the instance of H5_file_image_callbacks_t pointed to by the callbacks_ptr parameter of the last call to H5Pset_file_image_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks_ptr->image_realloc will contain the pointer passed as the image_realloc field of the instance of H5_file_image_callbacks_t pointed to by the callbacks_ptr parameter of the last call to H5Pset_file_image_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks_ptr->image_free_ptr will contain the pointer passed as the image_free field of the instance of H5_file_image_callbacks_t pointed to by the callbacks_ptr parameter of the last call to H5Pset_file_image_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks_ptr->udata_copy will contain the pointer passed as the udata_copy field of the instance of H5_file_image_callbacks_t pointed to by the callbacks_ptr parameter of the last call to H5Pset_file_image_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks_ptr-> udata_free will contain the pointer passed as the udata_free field of the instance of H5_file_image_callbacks_t pointed to by the callbacks_ptr parameter of the last call to H5Pset_file_image_callbacks() for the specified FAPL, or NULL if there has been no such call. +Upon successful return, callbacks_ptr->udata will contain the pointer passed as the udata field of the instance of H5_file_image_callbacks_t pointed to by the callbacks_ptr parameter of the last call to H5Pset_file_image_callbacks() for the specified FAPL, or NULL if there has been no such call. +2.1.5. Virtual File Driver Feature Flags +Implementation of the H5Pget/set_file_image_callbacks() and H5Pget/set_file_image() function calls requires a pair of virtual file driver feature flags. The flags are H5FD_FEAT_ALLOW_FILE_IMAGE and H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS. Both of these are defined in H5FDpublic.h.

+

The first flag, H5FD_FEAT_ALLOW_FILE_IMAGE, allows a file driver to indicate whether or not it supports file images. A VFD that sets this flag when its ‘query’ callback is invoked indicates that the file image set in the FAPL will be used as the initial contents of a file. Support for setting an initial file image is designed primarily for use with the Core VFD. However, any VFD can indicate support for this feature by setting the flag and copying the image in an appropriate way for the VFD (possibly by writing the image to a file and then opening the file). However, such a VFD need not employ the file image after file open time. In such cases, the VFD will not make an in-memory copy of the file image and will not employ the file image callbacks.

+

File drivers that maintain a copy of the file in memory (only the Core file driver at present) can be constructed to use the initial image callbacks (if defined). Those that do must set the H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS flag, the second flag, when their ‘query’ callbacks are invoked.

+

Thus file drivers that set the H5FD_FEAT_ALLOW_FILE_IMAGE flag but not the H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS flag may read the supplied image from the property list (if present) and use it to initialize the contents of the file. However, they will not discard the image when done, nor will they make any use of any file image callbacks (if defined).

+

If an initial file image appears in a file allocation property list that is used in an H5Fopen() call, and if the underlying file driver does not set the H5FD_FEAT_ALLOW_FILE_IMAGE flag, then the open will fail.

+

If a driver sets both the H5FD_FEAT_ALLOW_FILE_IMAGE flag and the H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS flag, then that driver will allocate a buffer of the required size, copy the contents of the initial image buffer from the file access property list, and then open the copy as if it had just loaded it from file. If the file image allocation callbacks are defined, the driver shall use them for all memory management tasks. Otherwise it will use the standard malloc, memcpy, realloc, and free C library calls for this purpose.

+

If the VFD sets the H5FD_FEAT_ALLOW_FILE_IMAGE flag, and an initial file image is defined by an application, the VFD should ensure that file creation operations (as opposed to file open operations) bypass use of the file image, and create a new, empty file.

+

Finally, it is logically possible that a file driver would set the H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS flag, but not the H5FD_FEAT_ALLOW_FILE_IMAGE flag. While it is hard to think of a situation in which this would be desirable, setting the flags this way will not cause any problems: the two capabilities are logically distinct.

+

2.1.6. H5Fget_file_image

+

The purpose of the H5Fget_file_image routine is to provide a simple way to retrieve a copy of the image of an existing, open file. This routine can be used with files opened using the SEC2 (aka POSIX), STDIO, and Core (aka Memory) VFDs.

+

The signature of H5Fget_file_image is defined as follows:

+

ssize_t H5Fget_file_image(hid_t file_id, void *buf_ptr, size_t buf_len) +The parameters of H5Fget_file_image are defined as follows:

+

file_id contains the ID of the target file. +buf_ptr contains a pointer to the buffer into which the image of the HDF5 file is to be copied. If buf_ptr is NULL, no data will be copied, but the return value will still indicate the buffer size required (or a negative value on error). +buf_len contains the size of the supplied buffer. +If the return value of H5Fget_file_image is a positive value, then the value will be the length of buffer required to store the file image (in other words, the length of the file). A negative value might be returned if the file is too large to store in the supplied buffer or on failure.

+

The current file size can be obtained via a call to H5Fget_filesize(). Note that this function returns the value of the end of file (EOF) and not the end of address space (EOA). While these values are frequently the same, it is possible for the EOF to be larger than the EOA. Since H5Fget_file_image() will only obtain a copy of the file from the beginning of the superblock to the EOA, it will be best to use H5Fget_file_image() to determine the size of the buffer required to contain the image.

+

Other Design Considerations

+

Here are some other notes regarding the design and implementation of H5Fget_file_image.

+

The H5Fget_file_image call should be part of the high-level library. However, a file driver agnostic implementation of the routine requires access to data structures that are hidden within the HDF5 Library. We chose to implement the call in the library proper rather than expose those data structures.

+

There is no reason why the H5Fget_file_image() API call could not work on files opened with any file driver. However, the Family, Multi, and Split file drivers have issues that make the call problematic. At present, files opened with the Family file driver are marked as being created with that file driver in the superblock, and the HDF5 Library refuses to open files so marked with any other file driver. This negates the purpose of the H5Fget_file_image() call. While this mark can be removed from the image, the necessary code is not trivial.

+

Thus we will not support the Family file driver in H5Fget_file_image() unless there is demand for it. Files created with the Multi and Split file drivers are also marked in the superblock. In addition, they typically use a very sparse address space. A sparse address space would require the use of an impractically large buffer for an image, and most of the buffer would be empty. So, we see no point in supporting the Multi and Split file drivers in H5Fget_file_image() under any foreseeable circumstances.

+

2.2. High-level C API Routine

+

The H5LTopen_file_image high-level routine encapsulates the capabilities of routines in the main HDF5 Library with conveniently accessible abstractions.

+

2.2.1. H5LTopen_file_image

+

The H5LTopen_file_image routine is designed to provide an easier way to open an initial file image with the Core VFD. Flags to H5LTopen_file_image allow for various file image buffer ownership policies to be requested. See the HDF5 Reference Manual for more information on high-level APIs.

+

The signature of H5LTopen_file_image is defined as follows:

+

hid_t H5LTopen_file_image(void *buf_ptr, size_t buf_len, unsigned flags) +The parameters of H5LTopen_file_image are defined as follows:

+

buf_ptr contains a pointer to the supplied initial image. A NULL value is invalid and will cause H5LTopen_file_image to fail. +buf_len contains the size of the supplied buffer. A value of 0 is invalid and will cause H5LTopen_file_image to fail. +flags contains a set of flags indicating whether the image is to be opened read/write, whether HDF5 is to take control of the buffer, and how long the application promises to maintain the buffer. Possible flags are described in the table below: +Table 3. Flags for H5LTopen_file_image

+

H5LT_FILE_IMAGE_OPEN_RW Indicates that the HDF5 Library should open the image read/write instead of the default read-only. +H5LT_FILE_IMAGE_DONT_COPY +Indicates that the HDF5 Library should not copy the file image buffer provided, but should use it directly. The HDF5 Library will release the file image when finished. The supplied buffer must have been allocated via a call to the standard C library malloc() or calloc() routines. The HDF5 Library will call free() to release the buffer. In the absence of this flag, the HDF5 Library will copy the buffer provided. The H5LT_FILE_IMAGE_DONT_COPY flag provides an application with the ability to “give ownership” of a file image buffer to the HDF5 Library.

+

The HDF5 Library will modify the buffer on write if the image is opened read/write and the H5LT_FILE_IMAGE_DONT_COPY flag is set.

+

The H5LT_FILE_IMAGE_DONT_RELEASE flag, see below, is invalid unless the H5LT_FILE_IMAGE_DONT_COPY flag is set

+

H5LT_FILE_IMAGE_DONT_RELEASE +Indicates that the HDF5 Library should not attempt to release the buffer when the file is closed. This implies that the application will tend to this detail and that the application will not discard the buffer until after the file image is closed.

+

Since there is no way to return a changed buffer base address to the application, and since realloc can change this value, calls to realloc() must be barred when this flag is set. As a result, any write that requires an increased buffer size will fail.

+

This flag is invalid unless the H5LT_FILE_IMAGE_DONT_COPY flag, see above, is set.

+

If the H5LT_FILE_IMAGE_DONT_COPY flag is set and this flag is not set, the HDF5 Library will release the file image buffer after the file is closed using the standard C library free() routine.

+

Using this flag and the H5LT_FILE_IMAGE_DONT_COPY flag provides a way for the application to specify a buffer that the HDF5 Library can use for opening and accessing as a file image while letting the application retain ownership of the buffer.

+

The following table is intended to summarize the semantics of the H5LT_FILE_IMAGE_DONT_COPY and H5LT_FILE_IMAGE_DONT_RELEASE flags (shown as “Don’t Copy Flag” and “Don’t Release Flag” respectively in the table):

+

Table 4. Summary of Don’t Copy and Don’t Release Flag Actions

+

Don’t Copy Flag

+

Don’t Release Flag

+

Make Copy of User Supplied Buffer

+

Pass User Supplied Buffer to File Driver

+

Release User Supplied Buffer When Done

+

Permit realloc of Buffer Used by File Driver

+

False

+

Don’t care

+

True

+

False

+

False

+

True

+

True

+

False

+

False

+

True

+

True

+

True

+

True

+

True

+

False

+

True

+

False

+

False

+

The return value of H5LTopen_file_image will be a file ID on success or a negative value on failure. The file ID returned should be closed with H5Fclose.

+

Note that there is no way currently to specify a “backing store” file name in this definition of H5LTopen_image.

+

3. C API Call Semantics

+

The purpose of this chapter is to describe some issues that developers should consider when using file image buffers, property lists, and callback APIs.

+

3.1. File Image Callback Semantics

+

The H5Fget/set_file_image_callbacks() API calls allow an application to hook the memory management operations used when allocating, duplicating, and discarding file images in the property list, in the Core file driver, and potentially in any in-memory file driver developed in the future.

+

From the perspective of the HDF5 Library, the supplied image_malloc(), image_memcpy(), image_realloc(), and image_free() callback routines must function identically to the C standard library malloc(), memcpy(), realloc(), and free() calls. What happens on the application side can be much more nuanced, particularly with the ability to pass user data to the callbacks. However, whatever the application does with these calls, it must maintain the illusion that the calls have had the expected effect. Maintaining this illusion requires some understanding of how the property list structure works, and what HDF5 will do with the initial images passed to it.

+

At the beginning of this document, we talked about the need to work within the constraints of the property list mechanism. When we said “from the perspective of the HDF5 Library…” in the paragraph above, we are making reference to this point.

+

The property list mechanism was developed as a way to add parameters to functions without changing the parameter list and breaking existing code. However, it was designed to use only “call by value” semantics, not “call by reference”. The decision to use “call by value” semantics requires that the values of supplied variables be copied into the property list. This has the advantage of simplifying the copying and deletion of property lists. However, if the value to be copied is large (say a 2 GB file image), the overhead can be unacceptable.

+

The usual solution to this problem is to use “call by reference” where only a pointer to an object is placed in a parameter list rather than a copy of the object itself. However, use of “call by reference” semantics would greatly complicate the property list mechanism: at a minimum, it would be necessary to maintain reference counts to dynamically allocated objects so that the owner of the object would know when it was safe to free the object.

+

After much discussion, we decided that the file image operations calls were sufficiently specialized that it made no sense to rework the property list mechanism to support “call by reference.” Instead we provided the file image callback mechanism to allow the user to implement some version of “call by reference” when needed. It should be noted that we expect this mechanism to be used rarely if at all. For small file images, the copying overhead should be negligible, and for large images, most use cases should be addressed by the H5LTopen_file_image call.

+

In the (hopefully) rare event that use of the file image callbacks is necessary, the fundamental point to remember is that the callbacks must be constructed and used in such a way as to maintain the library’s illusion that it is using “call by value” semantics.

+

Thus the property list mechanism must think that it is allocating a new buffer and copying the supplied buffer into it when the file image property is set. Similarly, it must think that it is allocating a new buffer and copying the contents of the existing buffer into it when it copies a property list that contains a file image. Likewise, it must think it is de-allocating a buffer when it discards a property list that contains a file image.

+

Similar illusions must be maintained when a file image buffer is copied into the Core file driver (or any future driver that uses the file image callbacks) when the file driver re-sizes the buffer containing the image and finally when the driver discards the buffer.

+

3.1.1. Buffer Ownership

+

The owner of a file image in a buffer is the party that has the responsibility to discard the file image buffer when it is no longer needed. In this context, the owner is either the HDF5 Library or the application program.

+

We implemented the image_* callback facility to allow efficient management of large file images. These facilities can be used to allow sharing of file image buffers between the application and the HDF5 library, and also transfer of ownership in either direction. In such operations, care must be taken to ensure that ownership is clear and that file image buffers are not discarded before all references to them are discarded by the non-owning party.

+

Ownership of a file image buffer will only be passed to the application program if the file image callbacks are designed to do this. In such cases, the application program must refrain from freeing the buffer until the library has deleted all references to it. This in turn will happen after all property lists (if any) that refer to the buffer have been discarded, and the file driver (if any) that used the buffer has closed the file and thinks it has discarded the buffer.

+

3.1.2. Sharing a File image Buffer with the HDF5 Library

+

As mentioned above, the HDF5 property lists are a mechanism for passing values into HDF5 Library calls. They were created to allow calls to be extended with new parameters without changing the actual API or breaking existing code. They were designed based on the assumption that all new parameters would be “call by value” and not “call by reference.” Having “call by value” parameters means property lists can be copied, reused, and discarded with ease.

+

Suppose an application wished to share a file image buffer with the HDF5 Library. This means the library would be allowed to read the file image, but not free it. The file image callbacks might be constructed as follows to share a buffer:

+

Construct the image_malloc() call so that it returns the address of the buffer instead of allocating new space. This will keep the library thinking that the buffers are distinct even when they are not. Support this by including the address of the buffer in the user data. As a sanity check, include the buffer’s size in the user data as well, and require image_malloc() to fail if the requested buffer size is unexpected. Finally, include a reference counter in the user data, and increment the reference counter on each call to image_malloc(). +Construct the image_memcpy() call so that it does nothing. As a sanity check, make it fail if the source and destination pointers do not match the buffer address in the user data or if the size is unexpected. +Construct the image_free() routine so that it does nothing. As a sanity check, make it compare the supplied pointer with the expected pointer in the user data. Also, make it decrement the reference counter and notify the application that the HDF5 Library is done with the buffer when the reference count drops to 0. +As the property list code will never resize a buffer, we do not discuss the image_realloc() call here. The behavior of image_realloc() in this scenario depends on what the application wants to do with the file image after it has been opened. We discuss this issue in the next section. Note also that the operation passed into the file image callbacks allow the callbacks to behave differently depending on the context in which they are used.

+

For more information on user defined data, see the “H5Pset_file_image_callbacks” section.

+

3.1.3. File Driver Considerations

+

When a file image is opened by a driver that sets both the H5FD_FEAT_ALLOW_FILE_IMAGE and the H5FD_FEAT_CAN_USE_FILE_IMAGE_CALLBACKS flags, the driver will allocate a buffer large enough for the initial file image and then copy the image from the property list into this buffer. As processing progresses, the driver will reallocate the image as necessary to increase its size and will eventually discard the image at file close. If defined, the driver will use the file image callbacks for these operations; otherwise, the driver will use the standard C library calls. See the "H5Pset_file_image_callbacks” section for more information.

+

As described above, the file image callbacks can be constructed so as to avoid the overhead of buffer allocations and copies while allowing the HDF5 Library to maintain its illusions on the subject. There are two possible complications involving the file driver. The complications are the possibility of reallocation calls from the driver and the possibility of the continued existence of property lists containing references to the buffer.

+

Suppose an application wishes to share a file image buffer with the HDF5 Library. The application allows the library to read (and possibly write) the image, but not free it. We must first decide whether the image is to be opened read-only or read/write.

+

If the image will be opened read-only (or if we know that any writes will not change the size of the image), the image_realloc() call should never be invoked. Thus the image_realloc() routine can be constructed so as to always fail, and the image_malloc(), image_memcpy(), and image_free() routines can be constructed as described in the section above.

+

Suppose, however, that the file image will be opened read/write and may grow during the computation. We must now allow for the base address of the buffer to change due to reallocation calls, and we must employ the user data structure to communicate any change in the buffer base address and size to the application. We pass buffer changes to the application so that the application will be able to eventually free the buffer. To this end, we might define a user data structure as shown in the example below:

+
 typedef struct udata {
+      void \*init\_ptr;
+      size\_t init\_size;
+      int init\_ref\_count;
+      void \*mod\_ptr;
+      size\_t mod\_size;
+      int mod\_ref\_count;
+ }
+
+

Example 1. Using a user data structure to communicate with an application

+

We initialize an instance of the structure so that init_ptr points to the buffer to be shared, init_size contains the initial size of the buffer, and all other fields are initialized to either NULL or 0 as indicated by their type. We then pass a pointer to the instance of the user data structure to the HDF5 Library along with allocation callback functions constructed as follows:

+

Construct the image_malloc() call so that it returns the value in the init_ptr field of the user data structure and increments the init_ref_count. As a sanity check, the function should fail if the requested size does not match the init_size field in the user data structure or if any of the modified fields have values other than their initial values. +Construct the image_memcpy() call so that it does nothing. As a sanity check, it should be made to fail if the source, destination, and size parameters do not match the init_ptr and init_size fields as appropriate. +Construct the image_realloc() call so that it performs a standard realloc. Sanity checking, assuming that the realloc is successful, should be as follows: +If the mod_ptr, mod_size, or mod_ref_count fields of the user data structure still have their initial values, verify that the supplied pointer matches the init_ptr field and that the supplied size does not match the init_size field. Decrement init_ref_count, set mod_ptr equal to the address returned by realloc, set mod_size equal to the supplied size, and set mod_ref_count to 1. +If the mod_ptr, mod_size, or mod_ref_count fields of the user data structure are defined, verify that the supplied pointer matches the value of mod_ptr and that the supplied size does not match mod_size. Set mod_ptr equal to the value returned by realloc, and set mod_size equal to the supplied size. +In both cases, if all sanity checks pass, return the value returned by the realloc call. Otherwise, return NULL.

+

Construct the image_free() routine so that it does nothing. Perform sanity checks as follows: +If the H5_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE flag is set, decrement the init_ref_count field of the user data structure. Flag an error if init_ref_count drops below zero. +If the H5_FILE_IMAGE_OP_FILE_CLOSE flag is set, check to see if the mod_ptr, mod_size, or mod_ref_count fields of the user data structure have been modified from their initial values. If they have, verify that mod_ref_count contains 1 and then set that field to zero. If they have not been modified, proceed as per the H5_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE case. +In either case, if both the init_ref_count and mod_ref_count fields have dropped to zero, notify the application that the HDF5 Library is done with the buffer. If the mod_ptr or mod_size fields have been modified, pass these values on to the application as well.

+

3.2. Initial File Image Semantics

+

One can argue whether creating a file with an initial file image is closer to creating a file or opening a file. The consensus seems to be that it is closer to a file open, and thus we shall require that the initial image only be used for calls to H5Fopen().

+

Whatever our convention, from an internal perspective, opening a file with an initial file image is a bit of both creating a file and opening a file. Conceptually, we will create a file on disk, write the supplied image to the file, close the file, open the file as an HDF5 file, and then proceed as usual (of course, the Core VFD will not write to the file system unless it is configured to do so). This process is similar to a file create: we are creating a file that did not exist on disk to begin with and writing data to it. Also, we must verify that no file of the supplied name is open. However, this process is also similar to a file open: we must read the superblock and handle the usual file open tasks.

+

Implementing the above sequence of actions has a number of implications on the behavior of the H5Fopen() call when an initial file image is supplied:

+

H5Fopen() must fail if the target file driver does not set the H5FD_FEAT_ALLOW_FILE_IMAGE flag and a file image is specified in the FAPL. +If the target file driver supports the H5FD_FEAT_ALLOW_FILE_IMAGE flag, then H5Fopen() must fail if the file is already open or if a file of the specified name exists. +Even if the above constraints are satisfied, H5Fopen() must still fail if the image does not contain a valid (or perhaps just plausibly valid) image of an HDF5 file. In particular, the superblock must be processed, and the file structure be set up accordingly. +See the “Virtual File Driver Feature Flags” section for more information.

+

As we indicated earlier, if an initial file image appears in the property list of an H5Fcreate() call, it is ignored.

+

While the above section on the semantics of the file image callbacks may seem rather gloomy, we get the payback here. The above says everything that needs to be said about initial file image semantics in general. The sub-section below has a few more observations on the Core file driver.

+

3.2.1. Applying Initial File Image Semantics to the Core File Driver

+

At present, the Core file driver uses the open() and read() system calls to load an HDF5 file image from the file system into RAM. Further, if the backing_store flag is set in the FAPL entry specifying the use of the Core file driver, the Core file driver’s internal image will be used to overwrite the source file on either flush or close. See the H5Pset_fapl_core entry in the HDF5 Reference Manual for more information.

+

This results in the following observations. In all cases assume that use of the Core file driver has been specified in the FAPL.

+

If the file specified in the H5Fopen() call does not exist, and no initial image is specified in the FAPL, the open must fail because there is no source for the initial image needed by the Core file driver. +If the file specified in the H5Fopen() call does exist, and an initial image is specified in the FAPL, the open must fail because the source of the needed initial image is ambiguous: the file image could be taken either from file or from the FAPL. +If the file specified in the H5Fopen() call does not exist, and an initial image is specified in the FAPL, the open will succeed. This assumes that the supplied image is valid. Further, if the backing store flag is set, the file specified in the H5Fopen() call will be created, and the contents of the Core file driver’s internal buffer will be written to the new file on flush or close. +Thus a call to H5Fopen() can result in the creation of a new HDF5 file in the file system.

+

4. Examples

+

The purpose of this chapter is to provide examples of how to read or build an in-memory HDF5 file image.

+

4.1. Reading an In-memory HDF5 File Image

+

The H5Pset_file_image() function call allows the Core file driver to be initialized from an application provided buffer. The following pseudo code illustrates its use:

+

<allocate and initialize buf_len and buf> +<allocate fapl_id> + +H5Pset_file_image(fapl_id, buf, buf_len); + + + +<read and/or write file as desired, close> +Example 2. Using H5Pset_file_image to initialize the Core file driver

+

This solution is easy to code, but the supplied buffer is duplicated twice. The first time is in the call to H5Pset_file_image() when the image is duplicated and the duplicate inserted into the property list. The second time is when the file is opened: the image is copied from the property list into the initial buffer allocated by the Core file driver. This is a non-issue for small images, but this could become a significant performance hit for large images.

+

If we want to avoid the extra malloc and memcpycalls, we must decide whether the application should retain ownership of the buffer or pass ownership to the HDF5 Library.

+

The following pseudo code illustrates opening the image read -only using the H5LTopen_file_image() routine. In this example, the application retains ownership of the buffer and avoids extra buffer allocations and memcpy calls.

+

<allocate and initialize buf_len and buf> +hid_t file_id; +unsigned flags = H5LT_FILE_IMAGE_DONT_COPY | H5LT_FILE_IMAGE_DONT_RELEASE; +file_id = H5LTopen_file_image(buf, buf_len, flags); +<read file as desired, and then close> + +Example 3. Using H5LTopen_file_image to open a read-only file image where the application retains ownership of the buffer +If the application wants to transfer ownership of the buffer to the HDF5 Library, and the standard C library routine free is an acceptable way of discarding it, the above example can be modified as follows:

+

<allocate and initialize buf_len and buf> +hid_t file_id; +unsigned flags = H5LT_FILE_IMAGE_DONT_COPY; +file_id = H5LTopen_file_image(buf, buf_len, flags); +<read file as desired, and then close>

+

Example 4. Using H5LTopen_file_image to open a read-only file image where the application transfers ownership of the buffer +Again, file access is read-only. Read/write access can be obtained via the H5LTopen_file_image() call, but we will explore that in the section below.

+

4.2. In-memory HDF5 File Image Construction

+

Before the implementation of file image operations, HDF5 supported construction of an image of an HDF5 file in memory with the Core file driver. The H5Fget_file_image() function call allows an application access to the file image without first writing it to disk. See the following code fragment:

+ +H5Fflush(fid); +size = H5Fget\_file\_image(fid, NULL, 0); +buffer\_ptr = malloc(size); +H5Fget\_file\_image(fid, buffer\_ptr, size); +Example 5. Accessing the image of a file in memory + +

The use of H5Fget_file_image() may be acceptable for small images. For large images, the cost of the malloc() and memcpy() operations may be excessive. To address this issue, the H5Pset_file_image_callbacks() call allows an application to manage dynamic memory allocation for file images and memory-based file drivers (only the Core file driver at present). The following code fragment illustrates its use. Note that most error checking is omitted for simplicity and that H5Pset_file_image is not used to set the initial file image.

+

struct udata_t { +void * image_ptr; +size_t image_size; + } udata = {NULL, 0}; +void *image_malloc(size_t size, H5_file_image_op_t file_image_op, void *udata) +{ + ((struct udata_t *)udata)->image_size = size; + return(malloc(size)); +} +void *image_memcpy)(void *dest, const void *src, size_t size, + H5_file_image_op_t file_image_op, void *udata) +{ +assert(FALSE); /* Should never be invoked in this scenario. */ + return(NULL); /* always fails */ + } +void image_realloc(void *ptr, size_t size, H5_file_image_op_t file_image_op, +void *udata) +{ + ((struct udata_t *)udata)->image_size = size; + return(realloc(ptr, size)); +} +herr_t image_free(void *ptr, H5_file_image_op_t file_image_op, void *udata) +{ + assert(file_image_op == H5_FILE_IMAGE_OP_FILE_CLOSE); + ((struct udata_t *)udata)->image_ptr = ptr; + return(0); /* if we get here, we must have been successful */ +} +void *udata_copy(void *udata) +{ + return(udata); +} +herr_t udata_free(void *udata) +{ + return(0); +} +H5_file_image_callbacks_t callbacks = {image_malloc, image_memcpy, + image_realloc, image_free, + udata_copy, udata_free, + (void *)(&udata)}; +<allocate fapl_id> +H5Pset_file_image_callbacks(fapl_id, &callbacks); +<open core file using fapl_id, write file, close it> +assert(udata.image_ptr!= NULL); +/* udata now contains the base address and length of the final version of the core file */ +<use image of file, and then discard it via free()> +Example 6. Using H5Pset_file_image_callbacks to improve memory allocation

+

The above code fragment gives the application full ownership of the buffer used by the Core file driver after the file is closed, and it notifies the application that the HDF5 Library is done with the buffer by setting udata.image_ptr to something other than NULL. If read access to the buffer is sufficient, the H5Fget_vfd_handle() call can be used as an alternate solution to get access to the base address of the Core file driver’s buffer.

+

The above solution avoids some unnecessary mallocand memcpycalls and should be quite adequate if an image of an HDF5 file is constructed only occasionally. However, if an HDF5 file image must be constructed regularly, and if we can put a strong and tight upper bound on the size of the necessary buffer, then the following pseudo code demonstrates a method of avoiding memory allocation completely. The downside, however, is that buffer is allocated statically. Again, much error checking is omitted for clarity.

+

char buf[BIG_ENOUGH]; +struct udata_t { +void * image_ptr; +size_t image_size; +size_t max_image_size; +int ref_count; +} udata = {(void *)(&(buf[0]), 0, BIG_ENOUGH, 0}; +void *image_malloc(size_t size, H5_file_image_op_t file_image_op, void *udata) +{ + assert(size <= ((struct udata_t *)udata)->max_image_size); + assert(((struct udata_t *)udata)->ref_count == 0); + ((struct udata_t *)udata)->image_size = size; + (((struct udata_t *)udata)->ref_count)++; + return((((struct udata_t *)udata)->image_ptr); +} +void *image_memcpy)(void *dest, const void *src, size_t size, + H5_file_image_op_t file_image_op, void *udata) +{ +assert(FALSE); /* Should never be invoked in this scenario. */ + return(NULL); /* always fails */ + } +void *image_realloc(void *ptr, size_t size, H5_file_image_op_t file_image_op, void *udata) +{ + assert(ptr == ((struct udata_t *)udata)->image_ptr); +assert(size <= ((struct udata_t *)udata)->max_image_size); +assert(((struct udata_t *)udata)->ref_count == 1); + ((struct udata_t *)udata)->image_size = size; +return((((struct udata_t *)udata)->image_ptr); +} +herr_t image_free(void *ptr, H5_file_image_op_t file_image_op, void *udata) +{ + assert(file_image_op == H5_FILE_IMAGE_OP_FILE_CLOSE); + assert(ptr == ((struct udata_t *)udata)->image_ptr); +assert(((struct udata_t *)udata)->ref_count == 1); + (((struct udata_t *)udata)->ref_count)--; + return(0); /* if we get here, we must have been successful */ +} +void *udata_copy(void *udata) +{ + return(udata); +} +herr_t udata_free(void *udata) +{ + return(0); +} +H5_file_image_callbacks_t callbacks = {image_malloc, image_memcpy, + image_realloc, image_free, + udata_copy, udata_free, + (void *)(&udata)}; +/* end of initialization */ +<allocate fapl_id> +H5Pset_file_image_callbacks(fapl_id, &callbacks); +<open core file using fapl_id> + +<write the file, flush it, and then close it> +assert(udata.ref_count == 0); +/* udata now contains the base address and length of the final version of the core file */ + +<reinitialize udata, and repeat the above from the end of initialization onwards to write a new file image> +Example 7. Using H5Pset_file_image_callbacks with a static buffer

+

If we can further arrange matters so that only the contents of the datasets in the HDF5 file image change, but not the structure of the file itself, we can optimize still further by re-using the image and changing only the contents of the datasets after the initial write to the buffer. The following pseudo code shows how this might be done. Note that the code assumes that buf already contains the image of the HDF5 file whose dataset contents are to be overwritten. Again, much error checking is omitted for clarity. Also, observe that the file image callbacks do not support the H5Pget_file_image() call.

+ + +void \*image\_malloc(size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); + assert(size == ((struct udata\_t \*)udata)->image\_size); + assert(((struct udata\_t \*)udata)->ref\_count >= 0); + ((struct udata\_t \*)udata)->image\_size = size; + (((struct udata\_t \*)udata)->ref\_count)++; + return((((struct udata\_t \*)udata)->image\_ptr); +} +void \*image\_memcpy)(void \*dest, const void \*src, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ +assert(dest == ((struct udata\_t \*)udata)->image\_ptr); +assert(src == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); +assert(size == ((struct udata\_t \*)udata)->image\_size); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); + return(dest); /\* if we get here, we must have been successful \*/ +} +void \*image\_realloc(void \*ptr, size\_t size, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + /\* One would think that this function is not needed in this scenario, as + \* only the contents of the HDF5 file is being changed, not its size or + \* structure. However, the Core file driver calls realloc() just before + \* close to clip the buffer to the size indicated by the end of the + \* address space. + \* + \* While this call must be supported in this case, the size of + \* the image should never change. Hence the function can limit itself + \* to performing sanity checks, and returning the base address of the + \* statically allocated buffer. + \*/ + assert(ptr == ((struct udata\_t \*)udata)->image\_ptr); +assert(size <= ((struct udata\_t \*)udata)->max\_image\_size); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); + assert(((struct udata\_t \*)udata)->image\_size == size); +return((((struct udata\_t \*)udata)->image\_ptr); +} +herr\_t image\_free(void \*ptr, H5\_file\_image\_op\_t file\_image\_op, void \*udata) +{ + assert((file\_image\_op == H5\_FILE\_IMAGE\_OP\_PROPERTY\_LIST\_CLOSE) || + (file\_image\_op == H5\_FILE\_IMAGE\_OP\_FILE\_CLOSE)); +assert(((struct udata\_t \*)udata)->ref\_count >= 1); + (((struct udata\_t \*)udata)->ref\_count)--; + return(0); /\* if we get here, we must have been successful \*/ +} +void \*udata\_copy(void \*udata) +{ + return(udata); +} +herr\_t udata\_free(void \*udata) +{ + return(0); +} +H5\_file\_image\_callbacks\_t callbacks = {image\_malloc, image\_memcpy, + image\_realloc, image\_free, + udata\_copy, udata\_free, + (void \*)(&udata)}; +/\* end of initialization \*/ + +H5Pset\_file\_image\_callbacks(fapl\_id, &callbacks); +H5Pset\_file\_image(fapl\_id, udata.image\_ptr, udata.image\_len); + + + +assert(udata.ref\_count == 0); +/\* udata now contains the base address and length of the final version of the core file \*/ + + +Example 8. Using H5Pset\_file\_image\_callbacks where only the datasets change + +

Before we go on, we should note that the above pseudo code can be written more compactly, albeit with fewer sanity checks, using the H5LTopen_file_image() call. See the example below:

+ +hid\_t file\_id; +unsigned flags = H5LT\_FILE\_IMAGE\_OPEN\_RW | H5LT\_FILE\_IMAGE\_DONT\_COPY | H5LT\_FILE\_IMAGE\_DONT\_RELEASE; +/\* end initialization \*/ +file\_id = H5LTopen\_file\_image(udata.image\_ptr, udata.image\_len, flags); + +/\* udata now contains the base address and length of the final version of the core file \*/ + + + + +

Example 9. Using H5LTopen_file_image where only the datasets change +The above pseudo code allows updates of a file image about as cheaply as possible. We assume the application has enough RAM for the image and that the HDF5 file structure is constant after the first write.

+

While the scenario above is plausible, we will finish this section with a more general scenario. In the pseudo code below, we assume sufficient RAM to retain the HDF5 file image between uses, but we do not assume that the HDF5 file structure remains constant or that we can place a hard pper bound on the image size.

+

Since we must use malloc, realloc, and free in this example, and since realloc can change the base address of a buffer, we must maintain two of ptr, size, and ref_count triples in the udata structure. The first triple is for the property list (which will never change the buffer), and the second triple is for the file driver. As shall be seen, this complicates the file image callbacks considerably. Note also that while we do not use H5Pget_file_image() in this example, we do include support for it in the file image callbacks. As usual, much error checking is omitted in favor of clarity.

+

struct udata_t { +void * fapl_image_ptr; +size_t fapl_image_size; +int fapl_ref_count; +void * vfd_image_ptr; +size_t vfd_image_size; +nt vfd_ref_count; +} udata = {NULL, 0, 0, NULL, 0, 0}; +boolean initial_file_open = TRUE; +void *image_malloc(size_t size, H5_file_image_op_t file_image_op, void *udata) +{ + void * return_value = NULL; + switch ( file_image_op ) { + case H5_FILE_IMAGE_OP_PROPERTY_LIST_SET: + case H5_FILE_IMAGE_OP_PROPERTY_LIST_COPY: + assert(((struct udata_t *)udata)->fapl_image_ptr != NULL); + assert(((struct udata_t *)udata)->fapl_image_size == size); + assert(((struct udata_t *)udata)->fapl_ref_count >= 0); + return_value = ((struct udata_t *)udata)->fapl_image_ptr; + (((struct udata_t *)udata)->fapl_ref_count)++; + break; + case H5_FILE_IMAGE_OP_PROPERTY_LIST_GET: + assert(((struct udata_t *)udata)->fapl_image_ptr != NULL); + assert(((struct udata_t *)udata)->vfd_image_size == size); + assert(((struct udata_t *)udata)->fapl_ref_count >= 1); + return_value = ((struct udata_t *)udata)->fapl_image_ptr; + /* don’t increment ref count */ + break; + case H5_FILE_IMAGE_OP_FILE_OPEN: + assert(((struct udata_t *)udata)->vfd_image_ptr == NULL); + assert(((struct udata_t *)udata)->vfd_image_size == 0); + assert(((struct udata_t *)udata)->vfd_ref_count == 0); +if (((struct udata_t *)udata)->fapl_image_ptr == NULL ) { + ((struct udata_t *)udata)->vfd_image_ptr = +malloc(size); + ((struct udata_t *)udata)->vfd_image_size = size; + } else { + assert(((struct udata_t *)udata)->fapl_image_size == +size); + assert(((struct udata_t *)udata)->fapl_ref_count >= +1); + ((struct udata_t *)udata)->vfd_image_ptr = +((struct udata_t *)udata)->fapl_image_ptr; + ((struct udata_t *)udata)->vfd_image_size = size; + } + return_value = ((struct udata_t *)udata)->vfd_image_ptr; + (((struct udata_t *)udata)->vfd_ref_count)++; + break; + default: + assert(FALSE); + } + return(return_value); +} +void *image_memcpy)(void *dest, const void *src, size_t size, + H5_file_image_op_t file_image_op, void *udata) +{ + switch(file_image_op) { + case H5_FILE_IMAGE_OP_PROPERTY_LIST_SET: + case H5_FILE_IMAGE_OP_PROPERTY_LIST_COPY: + case H5_FILE_IMAGE_OP_PROPERTY_LIST_GET: +assert(dest == ((struct udata_t *)udata)->fapl_image_ptr); +assert(src == ((struct udata_t *)udata)->fapl_image_ptr); +assert(size == ((struct udata_t *)udata)->fapl_image_size); +assert(((struct udata_t *)udata)->fapl_ref_count >= 1); +break; +case H5_FILE_IMAGE_OP_FILE_OPEN: +assert(dest == ((struct udata_t *)udata)->vfd_image_ptr); +assert(src == ((struct udata_t *)udata)->fapl_image_ptr); +assert(size == ((struct udata_t *)udata)->fapl_image_size); +assert(size == ((struct udata_t *)udata)->vfd_image_size); +assert(((struct udata_t *)udata)->fapl_ref_count >= 1); +assert(((struct udata_t *)udata)->vfd_ref_count == 1); +break; + default: + assert(FALSE); + break; + } + return(dest); /* if we get here, we must have been successful */ + } +void *image_realloc(void *ptr, size_t size, H5_file_image_op_t file_image_op, + void *udata) +{ + assert(ptr == ((struct udata_t *)udata)->vfd_image_ptr); | +assert(((struct udata_t *)udata)->vfd_ref_count == 1); +((struct udata_t *)udata)->vfd_image_ptr = realloc(ptr, size); + ((struct udata_t *)udata)->vfd_image_size = size; +return((((struct udata_t *)udata)->vfd_image_ptr); +} +herr_t image_free(void *ptr, H5_file_image_op_t file_image_op, void *udata) +{ + switch(file_image_op) { + case H5_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE: + assert(ptr == ((struct udata_t *)udata)->fapl_image_ptr); + assert(((struct udata_t *)udata)->fapl_ref_count >= 1); + (((struct udata_t *)udata)->fapl_ref_count)--; + break; + case H5_FILE_IMAGE_OP_FILE_CLOSE: + assert(ptr == ((struct udata_t *)udata)->vfd_image_ptr); + assert(((struct udata_t *)udata)->vfd_ref_count == 1); + (((struct udata_t *)udata)->vfd_ref_count)--; + break; + default: + assert(FALSE); + break; + } + return(0); /* if we get here, we must have been successful */ +} +void *udata_copy(void *udata) +{ + return(udata); +} +herr_t udata_free(void *udata) +{ + return(0); +} +H5_file_image_callbacks_t callbacks = {image_malloc, image_memcpy, + image_realloc, image_free, + udata_copy, udata_free, + (void *)(&udata)}; +/* end of initialization */ +<allocate fapl_id> +H5Pset_file_image_callbacks(fapl_id, &callbacks); +if ( initial_file_open ) { + initial_file_open = FALSE; +} else { + assert(udata.vfd_image_ptr != NULL); + assert(udata.vfd_image_size > 0); + assert(udata.vfd_ref_count == 0); + assert(udata.fapl_ref_count == 0); + udata.fapl_image_ptr = udata.vfd_image_ptr; + udata.fapl_image_size = udata.vfd_image_size; + udata.vfd_image_ptr = NULL; + udata.vfd_image_size = 0; + H5Pset_file_image(fapl_id, udata.fapl_image_ptr, udata.fapl_image_size); +} +<open core file using fapl_id> + +<write/update the file, and then close it> +assert(udata.fapl_ref_count == 0); +assert(udata.vfd_ref_count == 0);

+

/* udata.vfd_image_ptr and udata.vfd_image_size now contain the base address and length of the final version of the core file */ + + + +Example 10. Using H5LTopen_file_image where only the datasets change and where the file structure and image size might not be constant

+

The above pseudo code shows how a buffer can be passed back and forth between the application and the HDF5 Library. The code also shows the application having control of the actual allocation, reallocation, and freeing of the buffer.

+

4.3. Using HDF5 to Construct and Read a Data Packet

+

Using the file image operations described in this document, we can bundle up data in an image of an HDF5 file on one process, transmit the image to a second process, and then open and read the image on the second process without any mandatory file system I/O.

+

We have already demonstrated the construction and reading of such buffers above, but it may be useful to offer an example of the full operation. We do so in the example below using as simple a set of calls as possible. The set of calls in the example has extra buffer allocations. To reduce extra buffer allocations, see the sections above.

+

In the following example, we construct an HDF5 file image on process A and then transmit the image to process B where we then open the image and extract the desired data. Note that no file system I/O is performed: all the processing is done in memory with the Core file driver.

+

*** Process A *** + +H5Fflush(fid); +size = H5Fget_file_image(fid, NULL, 0); +buffer_ptr = malloc(size); +H5Fget_file_image(fid, buffer_ptr, size); + +<transmit *buffer_ptr> +free(buffer_ptr); + +*** Process B *** +hid_t file_id;

+ +buffer\_ptr = malloc(size) + +file\_id = H5LTopen\_file\_image(buf, + buf\_len, + H5LT\_FILE\_IMAGE\_DONT\_COPY); + +Example 11. Building and passing a file image from one process to another + +

4.4. Using a Template File

+

After the above examples, an example of the use of a template file might seem anti-climactic. A template file might be used to enforce consistency on file structure between files or in parallel HDF5 to avoid long sequences of collective operations to create the desired groups, datatypes, and possibly datasets. The following pseudo code outlines a potential use:

+

<allocate and initialize buf and buflen, with buf containing the desired initial image (which in turn contains the desired group, datatype, and dataset definitions), and buf_len containing the size of buf> +<allocate fapl_id> + +H5Pset_file_image(fapl_id, buf, buf_len); + + + +<read and/or write file as desired, close> +Example 12. Using a template file

+

Observe that the above pseudo code includes an unnecessary buffer allocation and copy in the call to H5Pset_file_image(). As we have already discussed ways of avoiding this, we will not address that issue here.

+

What is interesting in this case is to consider why the application would find this use case attractive.

+

In the serial case, at first glance there seems little reason to use the initial image facility at all. It is easy enough to use standard C calls to duplicate a template file, rename it as desired, and then open it as an HDF5 file.

+

However, this assumes that the template file will always be available and in the expected place. This is a questionable assumption for an application that will be widely distributed. Thus, we can at least make an argument for either keeping an image of the template file in the executable or for including code for writing the desired standard definitions to new HDF5 files.

+

Assuming the image is relatively small, we can further make an argument for the image in place of the code, as, quite simply, the image should be easier to maintain and modify with an HDF5 file editor.

+

However, there remains the question of why one should pass the image to the HDF5 Library instead of writing it directly with standard C calls and then using HDF5 to open it. Other than convenience and a slight reduction in code size, we are hard pressed to offer a reason.

+

In contrast, the argument is stronger in the parallel case since group, datatype, and dataset creations are all expensive collective operations. The argument is also weaker: simply copying an existing template file and opening it should lose many of its disadvantages in the HPC context although we would imagine that it is always useful to reduce the number of files in a deployment.

+

In closing, we would like to consider one last point. In the parallel case, we would expect template files to be quite large. Parallel HDF5 requires eager space allocation for chunked datasets. For similar reasons, we would expect template files in this context to contain long sequences of zeros with a scattering of metadata here and there. Such files would compress well, and the compressed images would be cheap to distribute across the available processes if necessary. Once distributed, each process could uncompress the image and write to file those sections containing actual data that lay within the section of the file assigned to the process. This approach might be significantly faster than a simple copy as it would allow sparse writes, and thus it might provide a compelling use case for template files. However, this approach would require extending our current API to allow compressed images. We would also have to add the H5Pget/set_image_decompression_callback() API calls. We see no problem in doing this. However, it is beyond the scope of the current effort, and thus we will not pursue the matter further unless there is interest in our doing so.

+

5. Java Signatures for File Image Operations API Calls

+

Potential Java function call signatures for the file image operation APIs are described in this section. These have not yet been implemented, and there are no immediate plans for implementation.

+

Note that the H5LTopen_file_image() call is omitted. Our practice has been to not support high-level library calls in Java.

+

H5Pset_file_image

+

int H5Pset_file_image(int fapl_id, const byte[] buf_ptr); +H5Pget_file_image

+

herr_t H5Pget_file_image(hid_t fapl_id, byte[] buf_ptr_ptr); +H5_file_image_op_t

+

public static H5_file_image_op_t +{ + H5_FILE_IMAGE_OP_PROPERTY_LIST_SET, + H5_FILE_IMAGE_OP_PROPERTY_LIST_COPY, + H5_FILE_IMAGE_OP_PROPERTY_LIST_GET, + H5_FILE_IMAGE_OP_PROPERTY_LIST_CLOSE, + H5_FILE_IMAGE_OP_FILE_OPEN, + H5_FILE_IMAGE_OP_FILE_RESIZE, + H5_FILE_IMAGE_OP_FILE_CLOSE +} +H5_file_image_malloc_cb

+

public interface H5_file_image_malloc_cb extends Callbacks { + buf[] callback(H5_file_image_op_t file_image_op, CBuserdata udata); +} +H5_file_image_memcpy_cb

+

public interface H5_file_image_memcpy_cb extends Callbacks { +buf[] callback(buf[] dest, const buf[] src, H5_file_image_op_t file_image_op, CBuserdata +udata); +} +H5_file_image_realloc_cb

+

public interface H5_file_image_realloc_cb extends Callbacks { + buf[] callback(buf[] ptr, H5_file_image_op_t file_image_op, CBuserdata udata); +} +H5_file_image_free_cb

+

public interface H5_file_image_free_cb extends Callbacks { + void callback(buf[] ptr, H5_file_image_op_t file_image_op, CBuserdata udata); +} +H5_file_udata_copy_cb

+

public interface H5_file_udata_copy_cb extends Callbacks { + buf[] callback(CBuserdata udata); +} +H5_file_udata_free_cb

+

public interface H5_file_udata_free_cb extends Callbacks { + void callback(CBuserdata udata); +} +H5_file_image_callbacks_t

+

public abstract class H5_file_image_callbacks_t +{ + H5_file_image_malloc_cb image_malloc; + H5_file_image_memcpy_cb image_memcpy; + H5_file_image_realloc_cb image_realloc; + H5_file_image_free_cb image_free; + H5_file_udata_copy_cb udata_copy; + H5_file_udata_free_cb udata_free; + CBuserdata udata; + public H5_file_image_callbacks_t( + H5_file_image_malloc_cb image_malloc, + H5_file_image_memcpy_cb image_memcpy, + H5_file_image_realloc_cb image_realloc, + H5_file_image_free_cb image_free, + H5_file_udata_copy_cb udata_copy, + H5_file_udata_free_cb udata_free, + CBuserdata udata) { + this.image_malloc = image_malloc; + this.image_memcpy = image_memcpy; + this.image_realloc = image_realloc; + this.image_free = image_free; + this.udata_copy = udata_copy; + this.udata_free = udata_free; + this.udata = udata; + } +} +H5Pset_file_image_callbacks

+

int H5Pset_file_image_callbacks(int fapl_id, + H5_file_image_callbacks_t callbacks_ptr); +H5Pget_file_image_callbacks

+

int H5Pget_file_image_callbacks(int fapl_id, + H5_file_image_callbacks_t[] callbacks_ptr); +H5Fget_file_image

+

long H5Fget_file_image(int file_id, byte[] buf_ptr);

+

6. Fortran Signatures for File Image Operations API Calls

+

Potential Fortran function call signatures for the file image operation APIs are described in this section. These have not yet been implemented, and there are no immediate plans for implementation.

+

6.1. Low-level Fortran API Routines

+

The Fortran low-level APIs make use of Fortran 2003’s ISO_C_BINDING module in order to achieve portable and standard conforming interoperability with the C APIs. The C pointer (C_PTR) and function pointer (C_FUN_PTR) types are returned from the intrinsic procedures C_LOC(X) and C_FUNLOC(X), respectively, defined in the ISO_C_BINDING module. The argument X is the data or function to which the C pointers point to and must have the TARGET attribute in the calling program. Note that the variable name lengths of the Fortran equivalent of the predefined C constants were shortened to less than 31 characters in order to be Fortran standard compliant.

+

6.1.1. H5Pset_file_image_f

+

The signature of H5Pset_file_image_f is defined as follows:

+

SUBROUTINE H5Pset_file_image_f(fapl_id, buf_ptr, buf_len, hdferr) +The parameters of H5Pset_file_image are defined as follows:

+

INTEGER(hid_t), INTENT(IN):: fapl_id +Will contain the ID of the target file access property list.

+

TYPE(C_PTR), INTENT(IN):: buf_ptr +Will supply the C pointer to the initial file image or C_NULL_PTR if no initial file image is desired.

+

INTEGER(size_t), INTENT(IN):: buf_len +Will contain the size of the supplied buffer or 0 if no initial image is desired.

+

INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure.

+

6.1.2. H5Pget_file_image_f

+

The signature of H5Pget_file_image_f is defined as follows:

+

SUBROUTINE H5Pget_file_image_f(fapl_id, buf_ptr, buf_len, hdferr) +The parameters of H5Pget_file_image_f are defined as follows:

+

INTEGER(hid_t), INTENT(IN) :: fapl_id +Will contain the ID of the target file access property list

+

TYPE(C_PTR), INTENT(INOUT), VALUE :: buf_ptr +Will hold either a C_NULL_PTR or a scalar of type c_ptr. If buf_ptr is not C_NULL_PTR, on successful return, buf_ptr shall contain a C pointer to a copy of the initial image provided in the last call to H5Pset_file_image_f for the supplied fapl_id, or buf_ptr shall contain a C_NULL_PTR if there is no initial image set. The Fortran pointer can be obtained using the intrinsic C_F_POINTER.

+

INTEGER(size_t), INTENT(OUT) :: buf_len +Will contain the value of the buffer parameter for the initial image in the supplied fapl_id. The value will be 0 if no initial image is set.

+

INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure.

+

6.1.3. H5Pset_file_image_callbacks_f

+

The signature of H5Pset_file_image_callbacks_f is defined as follows:

+

INTEGER :: H5_IMAGE_OP_PROPERTY_LIST_SET_F=0, + H5_IMAGE_OP_PROPERTY_LIST_COPY_F=1, + H5_IMAGE_OP_PROPERTY_LIST_GET_F=2, + H5_IMAGE_OP_PROPERTY_LIST_CLOSE_F=3, + H5_IMAGE_OP_FILE_OPEN_F=4, + H5_IMAGE_OP_FILE_RESIZE_F=5, + H5_IMAGE_OP_FILE_CLOSE_F=6 +TYPE, BIND(C) :: H5_file_image_callbacks_t + TYPE(C_FUN_PTR), VALUE :: image_malloc + TYPE(C_FUN_PTR), VALUE :: image_memcpy + TYPE(C_FUN_PTR), VALUE :: image_realloc + TYPE(C_FUN_PTR), VALUE :: image_free + TYPE(C_FUN_PTR), VALUE :: udata + TYPE(C_FUN_PTR), VALUE :: udata_copy + TYPE(C_FUN_PTR), VALUE :: udata_free + TYPE(C_PTR), VALUE :: udata +END TYPE H5_file_image_callbacks_t +The semantics of the above values will be the same as those defined in the C enum. See Section 2.1.3 for more information.

+

Fortran Callback APIs

+

The Fortran callback APIs are shown below.

+

FUNCTION op_func(size, file_image_op, udata,) RESULT(image_malloc) +INTEGER(size_t) :: size +Will contain the size of the image buffer to allocate in bytes. +INTEGER :: file_image_op +Will be set to one of the values of H5_IMAGE_OP_* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset_file_image_callbacks_f. +TYPE(C_FUN_PTR), VALUE :: image_malloc +Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call.

+

FUNCTION op_func(dest, src, size, & file_image_op, udata) RESULT(image_memcpy) +TYPE(C_PTR), VALUE :: dest +Will contain the address of the buffer into which to copy. +TYPE(C_PTR), VALUE :: src +Will contain the address of the buffer from which to copy +INTEGER(size_t) :: size +Will contain the number of bytes to copy. +INTEGER :: file_image_op +Will be set to one of the values of H5_IMAGE_OP_* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset_file_image_callbacks_f. +TYPE(C_FUN_PTR), VALUE :: image_memcpy +Shall contain a pointer to a function with functionality identical to the standard C library memcpy() call.

+

FUNCTION op_func(ptr, size, & file_image_op, udata) RESULT(image_realloc) +TYPE(C_PTR), VALUE :: ptr +Will contain the pointer to the buffer being reallocated +INTEGER(size_t) :: size +Will contain the desired size of the buffer after realloc in bytes. +INTEGER :: file_image_op +Will be set to one of the values of H5_IMAGE_OP_* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset_file_image_callbacks_f. +TYPE(C_FUN_PTR), VALUE :: image_realloc +Shall contain a pointer to a unction functionality identical to the standard C library realloc() call.

+

FUNCTION op_func(ptr, file_image_op, udata) RESULT(image_free) +TYPE(C_PTR), VALUE :: ptr +Will contain the pointer to the buffer being released. +INTEGER :: file_image_op +Will be set to one of the values of H5_IMAGE_OP_* indicating the operation being performed on the file image when this callback is invoked. +TYPE(C_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset_file_image_callbacks_f. +TYPE(C_PTR), VALUE :: image_free +Shall contain a pointer to a function with functionality identical to the standard C library free() call

+

FUNCTION op_func(udata) RESULT(udata_copy) +TYPE(C_PTR), VALUE :: udata +Will be set to the value passed in for the udata parameter to H5Pset_file_image_callbacks_f. +TYPE(C_FUN_PTR), VALUE :: udata_copy +Shall contain a pointer to a function that will allocate a buffer of suitable size, copy the contents of the supplied udata into the new buffer, and return the address of the new buffer. The function will return C_NULL_PTR on failure.

+

FUNCTION op_func(udata) RESULT(udata_free) +TYPE(C_PTR), VALUE :: udata +Shall contain a pointer value, potentially to user-defined data, that will be passed to the image_malloc, image_memcpy, image_realloc, and image_free callbacks.

+

The signature of H5Pset_file_image_callbacks_f is defined as follows:

+

SUBROUTINE H5Pset_file_image_callbacks_f(fapl_id, &callbacks_ptr, hdferr) +The parameters are defined as follows:

+

INTEGER(hid_t), INTENT(IN) :: fapl_id +Will contain the ID of the target file access property list.

+

TYPE(H5_file_image_callbacks_t), INTENT(IN) :: callbacks_ptr +Will contain the callback derived type. callbacks_ptr shall contain a pointer to the Fortran function via the intrinsic functions C_LOC(X) and C_FUNLOC(X).

+

INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure.

+

6.1.4. H5Pget_file_image_callbacks_f

+

The H5Pget_file_image_callbacks_f routine is designed to obtain the current file image callbacks from a file access property list.

+

The signature is defined as follows

+

SUBROUTINE H5Pget_file_image_callbacks_f(fapl_id, callbacks_ptr, hdferr) +The parameters are defined as follows:

+

INTEGER(hid_t), INTENT(IN) :: fapl_id +Will contain the ID of the target file access property list.

+

TYPE(H5_file_image_callbacks_t), INTENT(OUT) :: callbacks_ptr +Will contain the callback derived type. Each member of the derived type shall have the same meaning as its C counterpart. See section 2.1.4 for more information.

+

INTEGER, INTENT(OUT) :: hdferr +Will return the error status: 0 for success and -1 for failure.

+

6.1.5. Fortran Virtual File Driver Feature Flags

+

Implementation of the H5Pget/set_file_image_callbacks_f() and H5Pget/set_file_image_f() APIs requires a pair of new virtual file driver feature flags:

+

H5FD_FEAT_LET_IMAGE_F +H5FD_FEAT_LET_IMAGE_CALLBACK_F +See the “Virtual File Driver Feature Flags” section for more information.

+

6.1.6. H5Fget_file_image_f

+

The signature of H5Fget_file_image_f shall be defined as follows:

+

SUBROUTINE H5Fget_file_image_f(file_id, buf_ptr, buf_len, hdferr, buf_size) +The parameters of H5Fget_file_image_f are defined as follows:

+

INTEGER(hid_t), INTENT(IN) :: file_id +Will contain the ID of the target file.

+

TYPE(C_PTR), INTENT(IN) :: buf_ptr +Will contain a C pointer to the buffer into which the image of the HDF5 file is to be copied. If buf_ptr is C_NULL_PTR, no data will be copied.

+

INTEGER(size_t), INTENT(IN) :: buf_len +Will contain the size in bytes of the supplied buffer.

+

INTEGER(ssizet_t), INTENT(OUT), OPTIONAL :: buf_size +Will indicate the buffer size required to store the file image (in other words, the length of the file). If only the buf_size is needed, then buf_ptr should be also be set to C_NULL_PTR

+

INTEGER, INTENT(OUT) :: hdferr +Returns the error status: 0 for success and -1 for failure.

+

See the “H5Fget_file_image” section for more information.

+

6.2. High-level Fortran API Routine +The new Fortran high-level routine H5LTopen_file_image_f will provide a wrapper for the high-level H5LTopen_file_image function. Consequently, the high-level Fortran API will not be implemented using low-level HDF5 Fortran APIs. +6.2.1. H5LTopen_file_image_f +The signature of H5LTopen_file_image_f is defined as follows:

+

SUBROUTINE H5LTopen_file_image_f(buf_ptr, buf_len, flags, file_id, hdferr) +The parameters of H5LTopen_file_image_f are defined as follows:

+

TYPE(C_PTR), INTENT(IN), VALUE :: buf_ptr +Will contain a pointer to the supplied initial image. A C_NULL_PTR value is invalid and will cause H5LTopen_file_image_f to fail.

+

INTEGER(size_t), INTENT(IN) :: buf_len +Will contain the size of the supplied buffer. A value of 0 is invalid and will cause H5LTopen_file_image_f to fail.

+

INTEGER, INTENT(IN) :: flags +Will contain a set of flags indicating whether the image is to be opened read/write, whether HDF5 is to take control of the buffer, and how long the application promises to maintain the buffer. Possible flags are as follows: H5LT_IMAGE_OPEN_RW_F, H5LT_IMAGE_DONT_COPY_F, and H5LT_IMAGE_DONT_RELEASE_F. The C equivalent flags are defined in the “H5LTopen_file_image” section.

+

INTEGER(hid_t), INTENT(IN) :: file_id +Will be a file ID on success.

+

INTEGER, INTENT(OUT) :: hdferr +Returns the error status: 0 for success and -1 for failure.

From e7cdcade0afe032404873893f99626595514c5ea Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 02:17:05 -0400 Subject: [PATCH 31/44] Update advanced topics page --- .../advanced_topics/file_image_ops.md | 44 +++++++------------ .../hdf5-docs/advanced_topics_list.md | 11 ++--- 2 files changed, 20 insertions(+), 35 deletions(-) diff --git a/documentation/hdf5-docs/advanced_topics/file_image_ops.md b/documentation/hdf5-docs/advanced_topics/file_image_ops.md index 4b11d558..8b61252b 100644 --- a/documentation/hdf5-docs/advanced_topics/file_image_ops.md +++ b/documentation/hdf5-docs/advanced_topics/file_image_ops.md @@ -80,36 +80,26 @@ Functions used in file image operations are listed below. Function Listing 1. File image operations functions -H5Pset\_file\_image - -Allows an application to specify an initial file image. For more information, see section 2.1.1. -H5Pget\_file\_image Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. -H5Pset\_file\_image\_callbacks Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. -H5Pget\_file\_image\_callbacks Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. -H5Fget\_file\_image Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. -H5LTopen\_file\_image Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. +| C Function | Purpose | +| ---------- | --------- | +| H5Pset\_file\_image | Allows an application to specify an initial file image. For more information, see section 2.1.1. | +| H5Pget\_file\_image | Allows an application to retrieve a copy of the file image designated for a VFD to use as the initial contents of a file. For more information, see section 2.1.2. | +| H5Pset\_file\_image\_callbacks | Allows an application to manage file image buffer allocation, copying, reallocation, and release. For more information, see section 2.1.3. | +| H5Pget\_file\_image\_callbacks | Allows an application to obtain the current file image callbacks from a file access property list. For more information, see section 2.1.4. | +| H5Fget\_file\_image | Provides a simple way to retrieve a copy of the image of an existing, open file. For more information, see section 2.1.6. | +| H5LTopen\_file\_image | Provides a convenient way to open an initial file image with the Core VFD. For more information, see section 2.2.1. | ### 1.2. Abbreviations -The following abbreviations are used in this document: - - +The abbreviations in Table 1 are used in this document. Table 1. Abbreviations - - -FAPL or fapl - -File Access Property List. In code samples, fapl is used. - -VFD - -Virtual File Driver - -VFL - -Virtual File Layer +| Abbreviation | This abbreviation is short for | +| ------------ | ------------------------------ | +| FAPL or fapl | File Access Property List. In code samples, fapl is used. | +| VFD | Virtual File Driver | +| VFL | Virtual File Layer | ### 1.3. Developer Prerequisites Developers who use the file image operations described in this document should be proficient and experienced users of the HDF5 C Library APIs. More specifically, developers should have a working knowledge of property lists, callbacks, and virtual file drivers. @@ -117,13 +107,13 @@ Developers who use the file image operations described in this document should b ### 1.4. Resources See the following for more information. -The “RFC: File Image Operations” is the primary source for the information in this document. +The [RFC: File Image Operations](https://docs.hdfgroup.org/hdf5/rfc/HDF5FileImageOperations.pdf) is the primary source for the information in this document. -The “Alternate File Storage Layouts and Low-level File Drivers” section is in “The HDF5 File” chapter of the HDF5 User’s Guide . +The [Alternate File Storage Layouts and Low-level File Drivers](https://docs.hdfgroup.org/hdf5/develop/_h5_f__u_g.html#subsec_file_alternate_drivers) section is in “The HDF5 File” chapter of the [HDF5 User’s Guide](https://docs.hdfgroup.org/hdf5/develop/_u_g.html). The H5P\_SET\_FAPL\_CORE function call can be used to modify the file access property list so that the Memory virtual file driver, H5FD\_ CORE, is used. The Memory file driver is also known as the Core file driver. -Links to the Virtual File Layer and List of VFL Functions documents can be found in the HDF5 Technical Notes. +Links to the [Virtual File Layer](https://docs.hdfgroup.org/hdf5/develop/_v_f_l.html) and List of VFL Functions documents can be found in the HDF5 Technical Notes. ## 2. C API Call Syntax The C API function calls described in this chapter fall into two categories: low-level routines that are part of the main HDF5 C Library and one high-level routine that is part of the “lite” API in the high-level wrapper library. The high-level routine uses the low-level routines and presents frequently requested functionality conveniently packaged for application developers’ use. diff --git a/documentation/hdf5-docs/advanced_topics_list.md b/documentation/hdf5-docs/advanced_topics_list.md index fd35bb21..a9326fa8 100644 --- a/documentation/hdf5-docs/advanced_topics_list.md +++ b/documentation/hdf5-docs/advanced_topics_list.md @@ -4,15 +4,10 @@ redirect_from: display/HDF5/Advanced+Topics+in+HDF5 --- -##\*\*\* UNDER CONSTRUCTION \*\*\* +# Advanced Topics in HDF5 -# HDF5 Features - -### [HDF5 File Image Operations](advanced_topics/file_image_ops.md) -### [Copying Committed Datatypes with H5Ocopy](advanced_topics/cp_committed_dt_H5Ocopy.md) +### [HDF5 File Image Operations](https://docs.hdfgroup.org/hdf5/rfc/HDF5FileImageOperations.pdf) +### [Copying Committed Datatypes with H5Ocopy](https://docs.hdfgroup.org/hdf5/develop/group___o_c_p_p_l.html) ### [HDF5 Data Flow Pipeline for H5Dread](advanced_topics/data_flow_pline_H5Dread.md) ### [Introduction to Single-Writer_Multiple-Reader (SWMR)](advanced_topics/intro_SWMR.md) ### [Introduction to the Virtual Dataset - VDS](advanced_topics/intro_VDS.md) -### [New Features](advanced_topics/feature.md) -### [New Features](advanced_topics/feature.md) -### [New Features](advanced_topics/feature.md) From a9217fde5da2ece512aeaa371d3154dceaf2fa1a Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 15:27:11 -0400 Subject: [PATCH 32/44] Make urls clickable --- .../hdf5-docs/registered_filter_plugins.md | 146 +++++++++--------- 1 file changed, 71 insertions(+), 75 deletions(-) diff --git a/documentation/hdf5-docs/registered_filter_plugins.md b/documentation/hdf5-docs/registered_filter_plugins.md index bf07d9b3..4ab33a8b 100644 --- a/documentation/hdf5-docs/registered_filter_plugins.md +++ b/documentation/hdf5-docs/registered_filter_plugins.md @@ -1,11 +1,9 @@ Registered Filter Plugins ------------------------- - Please be sure to see HDF5 Filter Plugins, a convenience software that packages together many of the commonly used filters that users have created and registered. Information on Registered Filter Plugins ---------------------------------------- - Members of the HDF5 user community can create and register Third-Party (compression or other) filters for use with HDF5. To register a filter please contact The HDF Helpdesk with the following information: @@ -21,7 +19,6 @@ Please contact the maintainer of a filter for help with the filter/compression s List of Filters Registered with The HDF Group --------------------------------------------- - |Filter |Identifier Name |Short Description| |--------|----------------|---------------------| |305 |LZO |LZO lossless compression used by PyTables| @@ -72,14 +69,14 @@ Distributed under the terms of the GNU General Public License (GPL v2+). Commerc Military-grade stability and robustness. #### Filter Information: -http://www.oberhumer.com/opensource/lzo/ -http://www.pytables.org +[http://www.oberhumer.com/opensource/lzo/](http://www.oberhumer.com/opensource/lzo/) +[http://www.pytables.org](http://www.pytables.org) #### Contact Information: Francesc Alted Email: faltet at pytables dot org ---- +##

BZIP2 Filter

@@ -89,14 +86,14 @@ Email: faltet at pytables dot org bzip2 is a freely available, patent free, high-quality data compressor. It typically compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical compressors), whilst being around twice as fast at compression and six times faster at decompression. #### Filter Information: -http://www.bzip.org -http://www.pytables.org +[http://www.bzip.org](http://www.bzip.org) +[http://www.pytables.org](http://www.pytables.org) #### Contact Information: Francesc Alted Email: faltet at pytables dot org ---- +##

LZF Filter

@@ -107,7 +104,7 @@ The LZF filter is an alternative DEFLATE-style compressor for HDF5 datasets, usi LZF can be used to compress any data type, and requires no compile-time or run-time configuration. HDF5 versions 1.6.5 through 1.8.3 are supported. The filter is written in C and can be included directly in C or C++ applications; it has no external dependencies. The license is 3-clause BSD (virtually unrestricted, including commercial applications). -More information, downloads, and benchmarks, are available at the http://h5py.org/lzf/. +More information, downloads, and benchmarks, are available at the [http://h5py.org/lzf/](http://h5py.org/lzf). Additional Information: @@ -115,16 +112,16 @@ The LZF filter was developed as part of the h5py project, which implements a gen #### Filter Information: -The h5py homepage: http://h5py.org +The [h5py homepage](http://h5py.org) -The LZF library homepage: http://home.schmorp.de/marc/liblzf.html +The [LZF library homepage](http://home.schmorp.de/marc/liblzf.html) #### Contact Information: Andrew Collette -Web: http://h5py.org +Web: [http://h5py.org](http://h5py.org) ---- +##

Blosc Filter

@@ -137,15 +134,15 @@ It uses advanced cache-efficient techniques to reduce activity on the memory bus #### Filter Information: -http://blosc.org/ -http://www.pytables.org +[http://blosc.org/](http://blosc.org/) +[http://www.pytables.org](http://www.pytables.org) #### Contact Information: Francesc Alted Email: faltet at pytables dot org ---- +##

MAFISC Filter

@@ -158,14 +155,14 @@ The software is currently under a rather unrestrictive two clause BSD style lice #### Filter Information: -http://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc +[http://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc](http://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc) #### Contact Information: Nathanael Huebbe Email: nathanael.huebbe at informatik dot uni-hamburg dot de ---- +##

Snappy Filter

@@ -176,15 +173,15 @@ Snappy-CUDA is a compression/decompression library that leverages GPU processing #### Filter Information: -https://github.com/lucasvr/snappy-cuda -https://github.com/google/snappy +[https://github.com/lucasvr/snappy-cuda](https://github.com/lucasvr/snappy-cuda) +[https://github.com/google/snappy](https://github.com/google/snappy) #### Contact Information: Lucas C. Villa Real Email: lucasvr at gmail dot com ---- +##

LZ4 Filter

@@ -195,7 +192,7 @@ LZ4 is a very fast lossless compression algorithm, providing compression speed a #### Filter Information: -LZ4 Algorithm: https://github.com/nexusformat/HDF5-External-Filter-Plugins/tree/master/LZ4 +[LZ4 Algorithm](https://github.com/nexusformat/HDF5-External-Filter-Plugins/tree/master/LZ4) LZ4 Code: @@ -207,7 +204,7 @@ Although the LZ4 software is not supported by The HDF Group, it is included in T Michael Rissi (Dectris Ltd.) Email: michael dot rissi at dectris dot com ---- +##

APAX

@@ -215,7 +212,7 @@ Email: michael dot rissi at dectris dot com Appears to be no longer available ---- +##

CBF

@@ -230,7 +227,7 @@ License Information: GPL and LGPL Herbert J. Bernstein Email: yayahjb at gmail dot com ---- +##

JPEG-XR

@@ -249,7 +246,7 @@ JPEG-XR Filter for HDF5 Marvin Albert Email: marvin dot albert at gmail dot com ---- +##

bitshuffle

@@ -268,7 +265,7 @@ CHIME Kiyoshi Masui Email: kiyo at physics dot ubc dot ca ---- +##

SPDP

@@ -279,14 +276,14 @@ SPDP is a fast, lossless, unified compression/decompression algorithm designed f #### Filter Information: -http://cs.txstate.edu/~burtscher/research/SPDP/ +[http://cs.txstate.edu/~burtscher/research/SPDP/](http://cs.txstate.edu/~burtscher/research/SPDP/) #### Contact Information: Martin Burtscher Email: burtscher at txstate dot edu ---- +##

LPC-Rice

@@ -297,7 +294,7 @@ LPC-Rice is a fast lossless compression codec that employs Linear Predictive Cod #### Filter Information: -https://sourceforge.net/projects/lpcrice/ +[https://sourceforge.net/projects/lpcrice/](https://sourceforge.net/projects/lpcrice/) #### Contact Information: @@ -307,7 +304,7 @@ Email: fvdbergh at csir dot co dot za Derick Swanepoel Email: dswanepoel at gmail dot com ---- +##

CCSDS-123

@@ -318,7 +315,7 @@ CCSDS-123 is a multi-threaded HDF5 compression filter using the ESA CCSDS-123 im #### Filter Information: -https://sourceforge.net/projects/ccsds123-hdf-filter/ +[https://sourceforge.net/projects/ccsds123-hdf-filter/](https://sourceforge.net/projects/ccsds123-hdf-filter/) #### Contact Information: @@ -328,7 +325,7 @@ Email: fvdbergh at csir dot co dot za Derick Swanepoel Email: dswanepoel at gmail dot com ---- +##

JPEG-LS

@@ -339,7 +336,7 @@ JPEG-LS is a multi-threaded HDF5 compression filter using the CharLS JPEG-LS imp #### Filter Information: -https://sourceforge.net/projects/jpegls-hdf-filter/ +[https://sourceforge.net/projects/jpegls-hdf-filter/](https://sourceforge.net/projects/jpegls-hdf-filter/) #### Contact Information: @@ -349,7 +346,7 @@ Email: fvdbergh at csir dot co dot za Derick Swanepoel Email: dswanepoel at gmail dot com ---- +##

zfp

@@ -360,9 +357,9 @@ zfp is a BSD licensed open source C++ library for compressed floating-point arra #### Filter Information: -https://github.com/LLNL/H5Z-ZFP +[https://github.com/LLNL/H5Z-ZFP](https://github.com/LLNL/H5Z-ZFP) -For more information see: http://computation.llnl.gov/projects/floating-point-compression/ +For more information see: [http://computation.llnl.gov/projects/floating-point-compression/](For more information see: http://computation.llnl.gov/projects/floating-point-compression/) #### Contact Information: @@ -372,7 +369,7 @@ Email: miller86 at llnl dot gov Peter Lindstrom Email: pl at llnl dot gov ---- +##

fpzip

@@ -383,14 +380,14 @@ fpzip is a library for lossless or lossy compression of 2D or 3D floating-point #### Filter Information: -For more information see: http://computation.llnl.gov/projects/floating-point-compression/ +For more information see: [http://computation.llnl.gov/projects/floating-point-compression/](For more information see: http://computation.llnl.gov/projects/floating-point-compression/) #### Contact Information: Peter Lindstrom Email: pl at llnl dot gov ---- +##

Zstandard

@@ -401,14 +398,14 @@ Zstandard is a real-time compression algorithm, providing high compression ratio #### Filter Information: -https://github.com/aparamon/HDF5Plugin-Zstandard +[https://github.com/aparamon/HDF5Plugin-Zstandard](https://github.com/aparamon/HDF5Plugin-Zstandard) #### Contact Information: Andrey Paramonov Email: paramon at acdlabs dot ru ---- +##

B³D

@@ -419,7 +416,7 @@ B³D is a fast (~1 GB/s), GPU based image compression method, developed for ligh [Information](http://www.biorxiv.org/content/early/2017/07/21/164624) ---- +##

SZ

@@ -442,7 +439,7 @@ Email: sdi1 at anl dot gov Franck Cappello Email: cappello at mcs dot anl dot gov ---- +##

FCIDECOMP

@@ -462,7 +459,7 @@ ftp://ftp.eumetsat.int/pub/OPS/out/test-data/Test-data-for-External-Users/MTG_FC Dr. Daniel Lee Email: daniel dot lee at eumetsat dot int ---- +##

JPEG

@@ -477,7 +474,7 @@ Information Github License -libjpeg: This library is available as a package for most Linux distributions, and source code is available from https://www.ijg.org/. +libjpeg: This library is available as a package for most Linux distributions, and source code is available from [https://www.ijg.org/](https://www.ijg.org). Restrictions: @@ -506,7 +503,7 @@ Common h5repack parameter: UD=32019,0,4,q,c,r,t Mark Rivers , University of Chicago (rivers at cars.uchicago.edu) ---- +##

VBZ

@@ -515,15 +512,14 @@ Mark Rivers , University of Chicago (rivers at cars.uchicago.edu) #### Filter Description: This filter is used by Oxford Nanopore specifically to compress raw dna signal data (signed integer). To achieve this it uses both: -streamvbyte (https://github.com/lemire/streamvbyte) - -zstd (https://github.com/facebook/zstd) +[streamvbyte](https://github.com/lemire/streamvbyte) +[zstd](https://github.com/facebook/zstd) #### Contact Information: George Pimm ---- +##

FAPEC

@@ -541,9 +537,9 @@ The FAPEC library and CLI runs on Linux, Windows and Mac. The HDF5 user must req #### Filter Information: -https://www.dapcom.es/fapec/ -https://www.dapcom.es/get-fapec/ -https://www.dapcom.es/resources/FAPEC_EndUserLicenseAgreement.pdf +[https://www.dapcom.es/fapec/](https://www.dapcom.es/fapec/) +[https://www.dapcom.es/get-fapec/](https://www.dapcom.es/get-fapec/) +[https://www.dapcom.es/resources/FAPEC_EndUserLicenseAgreement.pdf](https://www.dapcom.es/resources/FAPEC_EndUserLicenseAgreement.pdf) #### Contact Information: @@ -551,7 +547,7 @@ Jordi Portell i de Mora (DAPCOM Data Services S.L.) fapec at dapcom dot es ---- +##

BitGroom

@@ -565,13 +561,13 @@ Zender, C. S. (2016), Bit Grooming: Statistically accurate precision-preserving #### Filter Information: -The filter is documented and maintained in the Community Codec Repository (https://github.com/ccr/ccr). +The filter is documented and maintained in the [Community Codec Repository](https://github.com/ccr/ccr). #### Contact Information: Charlie Zender (University of California, Irvine) ---- +##

Granular BitRound (GBR)

@@ -585,13 +581,13 @@ Zender, C. S. (2016), Bit Grooming: Statistically accurate precision-preserving #### Filter Information: -This filter is documented, implemented, and maintained in the Community Codec Repository (https://github.com/ccr/ccr). +This filter is documented, implemented, and maintained in the [Community Codec Repository](https://github.com/ccr/ccr). #### Contact Information: Charlie Zender (University of California, Irvine) ---- +##

SZ3

@@ -603,9 +599,9 @@ SZ3 is a modular error-bounded lossy compression framework for scientific datase #### Filter Information: -This filter is documented, implemented, and maintained in github: https://github.com/szcompressor/SZ3. +This filter is documented, implemented, and maintained in github: [https://github.com/szcompressor/SZ3](https://github.com/szcompressor/SZ3). -License: https://github.com/szcompressor/SZ/blob/master/copyright-and-BSD-license.txt +[License](https://github.com/szcompressor/SZ/blob/master/copyright-and-BSD-license.txt ) #### Contact Information: @@ -615,7 +611,7 @@ Email: sdi1 at anl dot gov Franck Cappello Email: cappello at mcs dot anl dot gov ---- +##

Delta-Rice

@@ -627,14 +623,14 @@ Lossless compression algorithm optimized for digitized analog signals based on d #### Filter Information: -This filter is documented, implemented, and maintained at: https://gitlab.com/dgma224/deltarice. +This filter is documented, implemented, and maintained at: [https://gitlab.com/dgma224/deltarice](https://gitlab.com/dgma224/deltarice). #### Contact Information: David Mathews Email: david dot mathews dot 1994 at gmail dot com ---- +##

Blosc2 Filter

@@ -648,18 +644,18 @@ C-Blosc2 is the new major version of C-Blosc, and tries hard to be backward comp #### Filter Information: -Blosc project: https://www.blosc.org +[Blosc project](https://www.blosc.org) -C-Blosc2 docs: https://www.blosc.org/c-blosc2/c-blosc2.html +[C-Blosc2 docs](https://www.blosc.org/c-blosc2/c-blosc2.html) -License: https://github.com/Blosc/c-blosc2/blob/main/LICENSE.txt +[License](https://github.com/Blosc/c-blosc2/blob/main/LICENSE.txt) #### Contact Information: Francesc Alted Email: faltet at gmail dot org (BDFL for the Blosc project) ---- +##

FLAC Filter

@@ -667,20 +663,20 @@ Email: faltet at gmail dot org (BDFL for the Blosc project) #### Filter Description: -FLAC is an audio compression filter in HDF5. (Our ultimate goal is to use it via h5py in the hdf5plugin library: https://github.com/silx-kit/hdf5plugin). +FLAC is an audio compression filter in HDF5. (Our ultimate goal is to use it via h5py in the [hdf5plugin library](https://github.com/silx-kit/hdf5plugin). #### Filter Information: -The FLAC filter is open source: https://github.com/xiph/flac +The FLAC filter is open source: [https://github.com/xiph/flac](https://github.com/xiph/flac) -libFLAC has BSD-like license: https://github.com/xiph/flac/blob/master/CONTRIBUTING.md +libFLAC has BSD-like [license](https://github.com/xiph/flac/blob/master/CONTRIBUTING.md) #### Contact Information: Laurie Stephey Email: lastephey at lbl dot gov ---- +##

H5Z-SPERR Filter

@@ -688,11 +684,11 @@ Email: lastephey at lbl dot gov #### Filter Description: -SPERR is a wavelet-based lossy compressor for floating-point scientific data; it achieves one of the best compression ratios given a user-prescribed error tolerance (i.e., maximum point-wise error). SPERR also supports two distinctive decoding modes, namely "flexible-rate decoding" and "multi-resolution decoding," that facilitate data analysis with various constraints. More details are available on SPERR Github repository: https://github.com/NCAR/SPERR. +SPERR is a wavelet-based lossy compressor for floating-point scientific data; it achieves one of the best compression ratios given a user-prescribed error tolerance (i.e., maximum point-wise error). SPERR also supports two distinctive decoding modes, namely "flexible-rate decoding" and "multi-resolution decoding," that facilitate data analysis with various constraints. More details are available on SPERR Github repository: [https://github.com/NCAR/SPERR](https://github.com/NCAR/SPERR). #### Filter Information: -H5Z-SPERR is the HDF5 filter for SPERR. It's also available on Github: https://github.com/NCAR/H5Z-SPERR. +H5Z-SPERR is the HDF5 filter for SPERR. It's also available on Github: [https://github.com/NCAR/H5Z-SPERR](https://github.com/NCAR/H5Z-SPERR) #### Contact Information: Samuel Li From 7e1723306632b11cd0e538d39383048727d18915 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 15:36:20 -0400 Subject: [PATCH 33/44] Link the Registered Filter Plugins to github version --- documentation/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/index.md b/documentation/index.md index 2526e059..171af9da 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -14,7 +14,7 @@ Look for more content here soon. * [Documentation - 1.12.x](https://docs.hdfgroup.org/hdf5/v1_12/index.html) * [Documentation - 1.10.x](https://docs.hdfgroup.org/hdf5/v1_10/index.html) * [Documentation - 1.8.x](https://docs.hdfgroup.org/hdf5/v1_8/index.html) -* [Registered Filter Plugins](/documentation/hdf5-docs/registered_filter_plugins.html) +* [Registered Filter Plugins](https://github.com/HDFGroup/hdf5_plugins/blob/master/docs/RegisteredFilterPlugins.md) * [Registered Virtual File Drivers (VFDs)](/documentation/hdf5-docs/registered_virtual_file_drivers_vfds.html) * [Registered VOL Connectors](/documentation/hdf5-docs/registered_vol_connectors.html) * [Chunking in HDF5](hdf5-docs/chunking_in_hdf5.md) From 12aba2b392fe675a9a4fabb4847301b84108d938 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 15:53:47 -0400 Subject: [PATCH 34/44] Remove unused file We now use the github version: https://github.com/HDFGroup/hdf5_plugins/blob/master/docs/RegisteredFilterPlugins.md --- .../hdf5-docs/registered_filter_plugins.md | 696 ------------------ 1 file changed, 696 deletions(-) delete mode 100644 documentation/hdf5-docs/registered_filter_plugins.md diff --git a/documentation/hdf5-docs/registered_filter_plugins.md b/documentation/hdf5-docs/registered_filter_plugins.md deleted file mode 100644 index 4ab33a8b..00000000 --- a/documentation/hdf5-docs/registered_filter_plugins.md +++ /dev/null @@ -1,696 +0,0 @@ -Registered Filter Plugins -------------------------- -Please be sure to see HDF5 Filter Plugins, a convenience software that packages together many of the commonly used filters that users have created and registered. - -Information on Registered Filter Plugins ----------------------------------------- -Members of the HDF5 user community can create and register Third-Party (compression or other) filters for use with HDF5. - -To register a filter please contact The HDF Helpdesk with the following information: - -* Contact information for the developer requesting a new identifier -* Short description of the new filter -* Links to any relevant information including licensing information - -Here is the current policy regarding filter identifier assignment: -The filter identifier is designed to be a unique identifier for the filter. Values from `zero` through `32,767` are reserved for filters supported by The HDF Group in the HDF5 library and for filters requested and supported by the 3rd party. -Values from `32768` to `65535` are reserved for non-distributed uses (e.g., internal company usage) or for application usage when testing a feature. The HDF Group does not track or document the usage of filters with identifiers from this range. -Please contact the maintainer of a filter for help with the filter/compression support in HDF5. - -List of Filters Registered with The HDF Group ---------------------------------------------- -|Filter |Identifier Name |Short Description| -|--------|----------------|---------------------| -|305 |LZO |LZO lossless compression used by PyTables| -|307 |BZIP2 |BZIP2 lossless compression used by PyTables| -|32000 |LZF |LZF lossless compression used by H5Py project| -|32001 |BLOSC |Blosc lossless compression used by PyTables| -|32002 |MAFISC |Modified LZMA compression filter, MAFISC (Multidimensional Adaptive Filtering Improved Scientific data Compression)| -|32003 |Snappy |Snappy lossless compression| -|32004 |LZ4 |LZ4 fast lossless compression algorithm| -|32005 |APAX |Samplify’s APAX Numerical Encoding Technology| -|32006 |CBF |All imgCIF/CBF compressions and decompressions, including Canonical, Packed, Packed Version 2, Byte Offset and Nibble Offset| -|32007 |JPEG-XR |Enables images to be compressed/decompressed with JPEG-XR compression| -|32008 |bitshuffle |Extreme version of shuffle filter that shuffles data at bit level instead of byte level| -|32009 |SPDP |SPDP fast lossless compression algorithm for single- and double-precision floating-point data| -|32010 |LPC-Rice |LPC-Rice multi-threaded lossless compression| -|32011 |CCSDS-123 |ESA CCSDS-123 multi-threaded compression filter| -|32012 |JPEG-LS |CharLS JPEG-LS multi-threaded compression filter| -|32013 |zfp |Lossy & lossless compression of floating point and integer datasets to meet rate, accuracy, and/or precision targets.| -|32014 |fpzip |Fast and Efficient Lossy or Lossless Compressor for Floating-Point Data| -|32015 |Zstandard |Real-time compression algorithm with wide range of compression / speed trade-off and fast decoder| -|32016 |B³D |GPU based image compression method developed for light-microscopy applications| -|32017 |SZ |An error-bounded lossy compressor for scientific floating-point data| -|32018 |FCIDECOMP |EUMETSAT CharLS compression filter for use with netCDF| -|32019 |JPEG |Jpeg compression filter| -|32020 |VBZ |Compression filter for raw dna signal data used by Oxford Nanopore| -|32021 |FAPEC | Versatile and efficient data compressor supporting many kinds of data and using an outlier-resilient entropy coder| -|32022 |BitGroom |The BitGroom quantization algorithm| -|32023 |Granular |BitRound (GBR) The GBG quantization algorithm is a significant improvement to the BitGroom filter| -|32024 |SZ3 |A modular error-bounded lossy compression framework for scientific datasets| -|32025 |Delta-Rice |Lossless compression algorithm optimized for digitized analog signals based on delta encoding and rice coding| -|32026 |BLOSC |The recent new-generation version of the Blosc compression library| -|32027 |FLAC |FLAC audio compression filter in HDF5| -|32028 |H5Z-SPERR |H5Z-SPERR is the HDF5 filter for SPERR| - - -##
The Filters
- -

LZO Filter

- -#### Filter ID: 305 - -#### Filter Description: -LZO is a portable lossless data compression library written in ANSI C. -Reliable and thoroughly tested. High adoption - each second terrabytes of data are compressed by LZO. No bugs since the first release back in 1996. -Offers pretty fast compression and *extremely* fast decompression. -Includes slower compression levels achieving a quite competitive compression ratio while still decompressing at this very high speed. -Distributed under the terms of the GNU General Public License (GPL v2+). Commercial licenses are available on request. -Military-grade stability and robustness. - -#### Filter Information: -[http://www.oberhumer.com/opensource/lzo/](http://www.oberhumer.com/opensource/lzo/) -[http://www.pytables.org](http://www.pytables.org) - -#### Contact Information: -Francesc Alted -Email: faltet at pytables dot org - -## - -

BZIP2 Filter

- -#### Filter ID: 307 - -#### Filter Description: -bzip2 is a freely available, patent free, high-quality data compressor. It typically compresses files to within 10% to 15% of the best available techniques (the PPM family of statistical compressors), whilst being around twice as fast at compression and six times faster at decompression. - -#### Filter Information: -[http://www.bzip.org](http://www.bzip.org) -[http://www.pytables.org](http://www.pytables.org) - -#### Contact Information: -Francesc Alted -Email: faltet at pytables dot org - -## - -

LZF Filter

- -#### Filter ID: 32000 - -#### Filter Description: -The LZF filter is an alternative DEFLATE-style compressor for HDF5 datasets, using the free LZF library by Marc Alexander Lehmann. Its main benefit over the built-in HDF5 DEFLATE filter is speed; in memory-to-memory operation as part of the filter pipeline, it typically compresses 3x-5x faster than DEFLATE, and decompresses 2x faster, while maintaining 50% to 90% of the DEFLATE compression ratio. - -LZF can be used to compress any data type, and requires no compile-time or run-time configuration. HDF5 versions 1.6.5 through 1.8.3 are supported. The filter is written in C and can be included directly in C or C++ applications; it has no external dependencies. The license is 3-clause BSD (virtually unrestricted, including commercial applications). - -More information, downloads, and benchmarks, are available at the [http://h5py.org/lzf/](http://h5py.org/lzf). - -Additional Information: - -The LZF filter was developed as part of the h5py project, which implements a general-purpose interface to HDF5 from Python. - -#### Filter Information: - -The [h5py homepage](http://h5py.org) - -The [LZF library homepage](http://home.schmorp.de/marc/liblzf.html) - -#### Contact Information: - -Andrew Collette -Web: [http://h5py.org](http://h5py.org) - -## - -

Blosc Filter

- -#### Filter ID: 32001 - -#### Filter Description: -Blosc is a high performance compressor optimized for binary data. It has been designed to compress data very fast, at the expense of achieving lesser compression ratios than, say, zlib+shuffle. It is mainly meant to not introduce a significant delay when dealing with data that is stored in high-performance I/O systems (like large RAID cabinets, or even the OS filesystem memory cache). - -It uses advanced cache-efficient techniques to reduce activity on the memory bus as much as possible. It also leverages SIMD (SSE2) and multi-threading capabilities present in nowadays multi-core processors so as to accelerate the compression/decompression process to a maximum. - -#### Filter Information: - -[http://blosc.org/](http://blosc.org/) -[http://www.pytables.org](http://www.pytables.org) - -#### Contact Information: - -Francesc Alted -Email: faltet at pytables dot org - -## - -

MAFISC Filter

- -#### Filter ID: 32002 - -#### Filter Description: -This compressing filter exploits the multidimensionality and smoothness characterizing many scientific data sets. It adaptively applies some filters to preprocess the data and uses lzma as the actual compression step. It significantly outperforms pure lzma compression on most datasets. - -The software is currently under a rather unrestrictive two clause BSD style license. - -#### Filter Information: - -[http://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc](http://wr.informatik.uni-hamburg.de/research/projects/icomex/mafisc) - -#### Contact Information: - -Nathanael Huebbe -Email: nathanael.huebbe at informatik dot uni-hamburg dot de - -## - -

Snappy Filter

- -#### Filter ID: 32003 - -#### Filter Description: -Snappy-CUDA is a compression/decompression library that leverages GPU processing power to compress/decompress data. The Snappy compression algorithm does not aim for maximum compression or compatibility with any other compression library; instead, it aims for very high speeds and reasonable compression. For instance, compared to the fastest mode of zlib, the reference implementation of Snappy on the CPU is an order of magnitude faster for most inputs, but the resulting compressed files are anywhere from 20% to 100% bigger. - -#### Filter Information: - -[https://github.com/lucasvr/snappy-cuda](https://github.com/lucasvr/snappy-cuda) -[https://github.com/google/snappy](https://github.com/google/snappy) - -#### Contact Information: - -Lucas C. Villa Real -Email: lucasvr at gmail dot com - -## - -

LZ4 Filter

- -#### Filter ID: 32004 - -#### Filter Description: -LZ4 is a very fast lossless compression algorithm, providing compression speed at 300 MB/s per core, scalable with multi-cores CPU. It also features an extremely fast decoder, with speeds up and beyond 1GB/s per core, typically reaching RAM speed limits on multi-core systems. For a format description of the LZ4 compression filter in HDF5, see HDF5_LZ4.pdf. - -#### Filter Information: - -[LZ4 Algorithm](https://github.com/nexusformat/HDF5-External-Filter-Plugins/tree/master/LZ4) - -LZ4 Code: - -Although the LZ4 software is not supported by The HDF Group, it is included in The HDF Group SVN repository so that it can be tested regularly with HDF5. For convenience, users can obtain it from SVN with the following command: - svn checkout https://svn.hdfgroup.org/hdf5_plugins/trunk/LZ4 LZ4 - -#### Contact Information: - -Michael Rissi (Dectris Ltd.) -Email: michael dot rissi at dectris dot com - -## - -

APAX

- -#### Filter ID: 32005 - -Appears to be no longer available - -## - -

CBF

- -#### Filter ID: 32006 - -#### Filter Description: -All imgCIF/CBF compressions and decompressions, including Canonical, Packed, Packed Vesrsion 2, Byte Offset and Nibble Offset. -License Information: GPL and LGPL - -#### Contact Information: - -Herbert J. Bernstein -Email: yayahjb at gmail dot com - -## - -

JPEG-XR

- -#### Filter ID: 32007 - -#### Filter Description: -Filter that allows HDF5 image datasets to be compressed or decompressed using the JPEG-XR compression method. - -#### Filter Information: - -JPEG-XR Compression Method -JPEG-XR Filter for HDF5 - -#### Contact Information: - -Marvin Albert -Email: marvin dot albert at gmail dot com - -## - -

bitshuffle

- -#### Filter ID: 32008 - -#### Filter Description: -This filter shuffles data at the bit level to improve compression. CHIME uses this filter for data acquisition. - -#### Filter Information: - -bitshuffle -CHIME - -#### Contact Information: - -Kiyoshi Masui -Email: kiyo at physics dot ubc dot ca - -## - -

SPDP

- -#### Filter ID: 32009 - -#### Filter Description: -SPDP is a fast, lossless, unified compression/decompression algorithm designed for both 32-bit single-precision (float) and 64-bit double-precision (double) floating-point data. It also works on other data. - -#### Filter Information: - -[http://cs.txstate.edu/~burtscher/research/SPDP/](http://cs.txstate.edu/~burtscher/research/SPDP/) - -#### Contact Information: - -Martin Burtscher -Email: burtscher at txstate dot edu - -## - -

LPC-Rice

- -#### Filter ID: 32010 - -#### Filter Description: -LPC-Rice is a fast lossless compression codec that employs Linear Predictive Coding together with Rice coding. It supports multi-threading and SSE2 vector instructions, enabling it to exceed compression and decompression speeds of 1 GB/s. - -#### Filter Information: - -[https://sourceforge.net/projects/lpcrice/](https://sourceforge.net/projects/lpcrice/) - -#### Contact Information: - -Frans van den Bergh -Email: fvdbergh at csir dot co dot za - -Derick Swanepoel -Email: dswanepoel at gmail dot com - -## - -

CCSDS-123

- -#### Filter ID: 32011 - -#### Filter Description: -CCSDS-123 is a multi-threaded HDF5 compression filter using the ESA CCSDS-123 implementation. - -#### Filter Information: - -[https://sourceforge.net/projects/ccsds123-hdf-filter/](https://sourceforge.net/projects/ccsds123-hdf-filter/) - -#### Contact Information: - -Frans van den Bergh -Email: fvdbergh at csir dot co dot za - -Derick Swanepoel -Email: dswanepoel at gmail dot com - -## - -

JPEG-LS

- -#### Filter ID: 32012 - -#### Filter Description: -JPEG-LS is a multi-threaded HDF5 compression filter using the CharLS JPEG-LS implementation. - -#### Filter Information: - -[https://sourceforge.net/projects/jpegls-hdf-filter/](https://sourceforge.net/projects/jpegls-hdf-filter/) - -#### Contact Information: - -Frans van den Bergh -Email: fvdbergh at csir dot co dot za - -Derick Swanepoel -Email: dswanepoel at gmail dot com - -## - -

zfp

- -#### Filter ID: 32013 - -#### Filter Description: -zfp is a BSD licensed open source C++ library for compressed floating-point arrays that support very high throughput read and write random access. zfp was designed to achieve high compression ratios and therefore uses lossy but optionally error-bounded compression. Although bit-for-bit lossless compression is not always possible, zfp is usually accurate to within machine epsilon in near-lossless mode, and is often orders of magnitude more accurate and faster than other lossy compressors. - -#### Filter Information: - -[https://github.com/LLNL/H5Z-ZFP](https://github.com/LLNL/H5Z-ZFP) - -For more information see: [http://computation.llnl.gov/projects/floating-point-compression/](For more information see: http://computation.llnl.gov/projects/floating-point-compression/) - -#### Contact Information: - -Mark Miller -Email: miller86 at llnl dot gov - -Peter Lindstrom -Email: pl at llnl dot gov - -## - -

fpzip

- -#### Filter ID: 32014 - -#### Filter Description: -fpzip is a library for lossless or lossy compression of 2D or 3D floating-point scalar fields. Although written in C++, fpzip has a C interface. fpzip was developed by Peter Lindstrom at LLNL. - -#### Filter Information: - -For more information see: [http://computation.llnl.gov/projects/floating-point-compression/](For more information see: http://computation.llnl.gov/projects/floating-point-compression/) - -#### Contact Information: - -Peter Lindstrom -Email: pl at llnl dot gov - -## - -

Zstandard

- -#### Filter ID: 32015 - -#### Filter Description: -Zstandard is a real-time compression algorithm, providing high compression ratios. It offers a very wide range of compression / speed trade-offs, while being backed by a very fast decoder. The Zstandard library is provided as open source software using a BSD license. - -#### Filter Information: - -[https://github.com/aparamon/HDF5Plugin-Zstandard](https://github.com/aparamon/HDF5Plugin-Zstandard) - -#### Contact Information: - -Andrey Paramonov -Email: paramon at acdlabs dot ru - -## - -

B³D

- -#### Filter ID: 32016 - -#### Filter Description: -B³D is a fast (~1 GB/s), GPU based image compression method, developed for light-microscopy applications. Alongside lossless compression, it offers a noise dependent lossy compression mode, where the loss can be tuned as a proportion of the inherent image noise (accounting for photon shot noise and camera read noise). It not only allows for fast compression during image, but can achieve compression ratios up 100. - -[Information](http://www.biorxiv.org/content/early/2017/07/21/164624) - -## - -

SZ

- -#### Filter ID: 32017 - -#### Filter Description: -SZ is a fast and efficient error-bounded lossy compressor for floating-point data. It was developed for scientific applications producing large-scale HPC data sets. SZ supports C, Fortran, and Java and has been tested on Linux and Mac OS X. - -#### Filter Information: - -[Information](https://collab.cels.anl.gov/display/ESR/SZ) -[github](https://github.com/disheng222/SZ) -[License](https://www.mcs.anl.gov/~shdi/download/sz-download.html) - -#### Contact Information: - -Sheng Di -Email: sdi1 at anl dot gov - -Franck Cappello -Email: cappello at mcs dot anl dot gov - -## - -

FCIDECOMP

- -#### Filter ID: 32018 - -#### Filter Description: -FCIDECOMP is a third-party compression filter used at EUMETSAT for the compression of netCDF-4 files. It is a codec implementing JPEG-LS using CharLS used for satellite imagery. - -#### Filter Information: - -All software and documentation can be found at this link: - -ftp://ftp.eumetsat.int/pub/OPS/out/test-data/Test-data-for-External-Users/MTG_FCI_L1c_Compressed-Datasets_and_Decompression-Plugin_April2017/Decompression_Plugin/ - -#### Contact Information: - -Dr. Daniel Lee -Email: daniel dot lee at eumetsat dot int - -## - -

JPEG

- -#### Filter ID: 32019 - -#### Filter Description: -This is a lossy compression filter. It provides a user-specified "quality factor" to control the trade-off of size versus accuracy. - -#### Filter Information: - -Information -Github -License - -libjpeg: This library is available as a package for most Linux distributions, and source code is available from [https://www.ijg.org/](https://www.ijg.org). - -Restrictions: - -Only 8-bit unsigned data arrays are supported. -Arrays must be either: - 2-D monochromatic [NumColumns, NumRows] - 3-D RGB [3, NumColumns, NumRows] -Chunking must be set to the size of one entire image so the filter is called once for each image. -Using the JPEG filter in your application: - -HDF5 only supports compression for "chunked" datasets; this just means that you need to call H5Pset_chunk to specify a chunk size. The chunking must be set to the size of a single image for the JPEG filter to work properly. - -When calling H5Pset_filter for compression it must be called with cd_nelmts=4 and cd_values as follows: - - cd_values[0] = quality factor (1-100) - - cd_values[1] = numColumns - - cd_values[2] = numRows - - cd_values[3] = 0=Mono, 1=RGB - -Common h5repack parameter: UD=32019,0,4,q,c,r,t - -#### Contact Information: - -Mark Rivers , University of Chicago (rivers at cars.uchicago.edu) - -## - -

VBZ

- -#### Filter ID: 32020 - -#### Filter Description: -This filter is used by Oxford Nanopore specifically to compress raw dna signal data (signed integer). To achieve this it uses both: - -[streamvbyte](https://github.com/lemire/streamvbyte) -[zstd](https://github.com/facebook/zstd) - -#### Contact Information: - -George Pimm - -## - -

FAPEC

- -#### Filter ID: 32021 - -#### Filter Description: - -FAPEC is a versatile and efficient data compressor, initially designed for satellite payloads but later extended for ground applications. It relies on an outlier-resilient entropy coding core with similar ratios and speeds than CCSDS 121.0 (adaptive Rice). - -FAPEC has a large variety of pre-processing stages and options: images (greyscale, colour, hyperspectral); time series or waveforms (including interleaving, e.g. for multidimensional or interleaved time series or tabular data); floating point (single+double precision); text (including LZW compression and our faster FAPECLZ); tabulated text (CSV); genomics (FastQ); geophysics (Kongsberg's water column datagrams); etc. - -Most stages support samples of 8 to 24 bits (big/little endian, signed/unsigned), and lossless/lossy options. It can be extended with new, tailored pre-processing stages. It includes encryption options (AES-256 based on OpenSSL, and our own XXTEA implementation). - -The FAPEC library and CLI runs on Linux, Windows and Mac. The HDF5 user must request and install the library separately, thus allowing to upgrade it without requiring changes in your HDF5 code. - -#### Filter Information: - -[https://www.dapcom.es/fapec/](https://www.dapcom.es/fapec/) -[https://www.dapcom.es/get-fapec/](https://www.dapcom.es/get-fapec/) -[https://www.dapcom.es/resources/FAPEC_EndUserLicenseAgreement.pdf](https://www.dapcom.es/resources/FAPEC_EndUserLicenseAgreement.pdf) - -#### Contact Information: - -Jordi Portell i de Mora (DAPCOM Data Services S.L.) - -fapec at dapcom dot es - -## - -

BitGroom

- -#### Filter ID: 32022 - -#### Filter Description: - -The BitGroom quantization algorithm is documented in: - -Zender, C. S. (2016), Bit Grooming: Statistically accurate precision-preserving quantization with compression, evaluated in the netCDF Operators (NCO, v4.4.8+), Geosci. Model Dev., 9, 3199-3211, doi:10.5194/gmd-9-3199-2016. - -#### Filter Information: - -The filter is documented and maintained in the [Community Codec Repository](https://github.com/ccr/ccr). - -#### Contact Information: - -Charlie Zender (University of California, Irvine) - -## - -

Granular BitRound (GBR)

- -#### Filter ID: 32023 - -#### Filter Description: - -The GBG quantization algorithm is a significant improvement the BitGroom filter documented in: - -Zender, C. S. (2016), Bit Grooming: Statistically accurate precision-preserving quantization with compression, evaluated in the netCDF Operators (NCO, v4.4.8+), Geosci. Model Dev., 9, 3199-3211, doi:10.5194/gmd-9-3199-2016. - -#### Filter Information: - -This filter is documented, implemented, and maintained in the [Community Codec Repository](https://github.com/ccr/ccr). - -#### Contact Information: - -Charlie Zender (University of California, Irvine) - -## - -

SZ3

- -#### Filter ID: 32024 - -#### Filter Description: - -SZ3 is a modular error-bounded lossy compression framework for scientific datasets, which allows users to customize their own compression pipeline to adapt to diverse datasets and user-requirements. Compared with SZ2 (filter id: 32017), SZ3 has integrated a more effective prediction such that its compression qualities/ratios are much higher than that of SZ2 in most of cases. - -#### Filter Information: - -This filter is documented, implemented, and maintained in github: [https://github.com/szcompressor/SZ3](https://github.com/szcompressor/SZ3). - -[License](https://github.com/szcompressor/SZ/blob/master/copyright-and-BSD-license.txt ) - -#### Contact Information: - -Sheng Di -Email: sdi1 at anl dot gov - -Franck Cappello -Email: cappello at mcs dot anl dot gov - -## - -

Delta-Rice

- -#### Filter ID: 32025 - -#### Filter Description: - -Lossless compression algorithm optimized for digitized analog signals based on delta encoding and rice coding. - -#### Filter Information: - -This filter is documented, implemented, and maintained at: [https://gitlab.com/dgma224/deltarice](https://gitlab.com/dgma224/deltarice). - -#### Contact Information: - -David Mathews -Email: david dot mathews dot 1994 at gmail dot com - -## - -

Blosc2 Filter

- -#### Filter ID: 32026 - -#### Filter Description: - -Blosc is a high performance compressor optimized for binary data (i.e. floating point numbers, integers and booleans). It has been designed to transmit data to the processor cache faster than the traditional, non-compressed, direct memory fetch approach via a memcpy() OS call. Blosc main goal is not just to reduce the size of large datasets on-disk or in-memory, but also to accelerate memory-bound computations. - -C-Blosc2 is the new major version of C-Blosc, and tries hard to be backward compatible with both the C-Blosc1 API and its in-memory format. - -#### Filter Information: - -[Blosc project](https://www.blosc.org) - -[C-Blosc2 docs](https://www.blosc.org/c-blosc2/c-blosc2.html) - -[License](https://github.com/Blosc/c-blosc2/blob/main/LICENSE.txt) - -#### Contact Information: - -Francesc Alted -Email: faltet at gmail dot org (BDFL for the Blosc project) - -## - -

FLAC Filter

- -#### Filter ID: 32027 - -#### Filter Description: - -FLAC is an audio compression filter in HDF5. (Our ultimate goal is to use it via h5py in the [hdf5plugin library](https://github.com/silx-kit/hdf5plugin). - -#### Filter Information: - -The FLAC filter is open source: [https://github.com/xiph/flac](https://github.com/xiph/flac) - -libFLAC has BSD-like [license](https://github.com/xiph/flac/blob/master/CONTRIBUTING.md) - -#### Contact Information: - -Laurie Stephey -Email: lastephey at lbl dot gov - -## - -

H5Z-SPERR Filter

- -#### Filter ID: 32028 - -#### Filter Description: - -SPERR is a wavelet-based lossy compressor for floating-point scientific data; it achieves one of the best compression ratios given a user-prescribed error tolerance (i.e., maximum point-wise error). SPERR also supports two distinctive decoding modes, namely "flexible-rate decoding" and "multi-resolution decoding," that facilitate data analysis with various constraints. More details are available on SPERR Github repository: [https://github.com/NCAR/SPERR](https://github.com/NCAR/SPERR). - -#### Filter Information: - -H5Z-SPERR is the HDF5 filter for SPERR. It's also available on Github: [https://github.com/NCAR/H5Z-SPERR](https://github.com/NCAR/H5Z-SPERR) - -#### Contact Information: -Samuel Li -Email: shaomeng at ucar dot edu - From d5a9f77122b6dd3ca989ae2074b231e59387588f Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 17:20:36 -0400 Subject: [PATCH 35/44] Update for 1.14.4 release --- .../release_specifics/new_features_1_14.md | 20 +++++++------------ downloads/hdf5/hdf5_1_14_4.md | 12 +++-------- downloads/index.md | 2 +- 3 files changed, 11 insertions(+), 23 deletions(-) diff --git a/documentation/hdf5-docs/release_specifics/new_features_1_14.md b/documentation/hdf5-docs/release_specifics/new_features_1_14.md index 4176a992..52910444 100644 --- a/documentation/hdf5-docs/release_specifics/new_features_1_14.md +++ b/documentation/hdf5-docs/release_specifics/new_features_1_14.md @@ -8,19 +8,13 @@ redirect_from: The new features in the HDF4 1.14 series include: -* [16 bit floating point and Complex number datatypes](https://docs.hdfgroup.org/hdf5/rfc/RFC__Adding_support_for_16_bit_floating_point_and_Complex_number_datatypes_to_HDF5.pdf) -Better support for 16-bit floating-point data was added to HDF5 for platforms where the -\_Float16 C datatype is available. On platforms where this support is available, this can -enable more efficient storage of floating-point data when an application doesn't require -the precision of larger floating-point datatypes. It can also allow for improved performance -when converting between 16-bit floating-point data and data of another HDF5 datatype. -Additionally, several optimizations were made to HDF5 to increase the performance of -data conversion operations in general. These optimizations resulted in a 3x to 10x increase -in performance of compound-type data conversions on average, as well as a 100x increase -in performance in specific cases when converting floating-point data to integer data. Further, -several fixes were made to HDF5 for software bugs that could cause accesses of invalid -memory and application crashes or could return incorrect data when working with 16-bit -floating-point data. +* [16 bit floating point and Complex number datatypes](https://github.com/HDFGroup/hdf5doc/blob/master/RFCs/HDF5_Library/Float16/RFC__Adding_support_for_16_bit_floating_point_and_Complex_number_datatypes_to_HDF5.pdf) +Support for the 16-bit floating-point \_Float16 C type has been added to +HDF5. On platforms where this type is available, this can enable more +efficient storage of floating-point data when an application doesn't +need the precision of larger floating-point datatypes. It can also allow +for improved performance when converting between 16-bit floating-point +data and data of another HDF5 datatype. * [Asynchronous I/O operations](asyn_ops_wHDF5_VOL_connectors.md) HDF5 provides asynchronous APIs for the HDF5 VOL connectors that diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 16e7c138..45b3179d 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -5,7 +5,6 @@ title: HDF5 Library and Tools 1.14.4 HDF5 Logo # HDF5 Library and Tools 1.14.4 -### *** UNDER CONSTRUCTION *** ## Release Information @@ -22,14 +21,9 @@ title: HDF5 Library and Tools 1.14.4 ## Download -| File | Type | -| ---- | ---- | -| [hdf5-1.14.4.tar.gz](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4.tar.gz) | Source release | -| [hdf5-1.14.4.zip](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4.zip) | Source release | -| [Ready to use Binaries](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4) | Pre-built binary distributions for Unix and Windows | -| [sha256](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4/sha256sums.txt) | Checksum file | - -Please refer to [Build instructions](https://github.com/HDFGroup/hdf5/releases/tag/hdf5-1.14.4/release_docs/INSTALL) for building with either CMake or Autotools. +Source and binary downloads are available at: https://github.com/HDFGroup/hdf5/releases/tag/hdf5_1.14.4. + +Please refer to [Build instructions](https://github.com/HDFGroup/hdf5/blob/hdf5_1.14.4/release_docs/INSTALL) for building with either CMake or Autotools. **Methods to obtain (gz file)** diff --git a/downloads/index.md b/downloads/index.md index 990ea02c..95b7de1b 100644 --- a/downloads/index.md +++ b/downloads/index.md @@ -13,7 +13,7 @@ This page is a temporary replacement for our download archive. We will be workin | Version | Usage | | ---- | ----| -| [HDF5 1.14.3](/hdf5/hdf5_1_14_3.md) | This should be the default choice for new users. | +| [HDF5 1.14.4](/hdf5/hdf5_1_14_4.md) | This should be the default choice for new users. | | [HDF5 1.12.3](/hdf5/hdf5_1_12_3.md) | This is the last release for HDF5 1.12. Users should move to HDF5 1.14. | ## HDFView From 508b32bce2b0bf53dca469b5af0ea33a7b8f1692 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Thu, 11 Apr 2024 18:11:46 -0400 Subject: [PATCH 36/44] Add announcement link --- downloads/hdf5/hdf5_1_14_4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 45b3179d..819526e5 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -13,7 +13,7 @@ title: HDF5 Library and Tools 1.14.4 | Additional Release Information | [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | || [Software Changes From Release to Release for HDF5-1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md) | || [New Features in HDF5 Release 1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/new_features_1_14.html) | -|| [Newsletter Announcement](https://www.hdfgroup.org/2024/10/release-of-hdf5-1-14-4-library-and-tools-newsletter-199/) | +|| [Newsletter Announcement](https://www.hdfgroup.org/2024/04/release-of-hdf5-1-14-4-newsletter-202) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | || [API Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-interface_compatibility_report.html) | || [Java Interface Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-java-interface_compatibility_report.html) | From 6a9270abcfd630cbe5aa5a57875b501fc81fff28 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Fri, 12 Apr 2024 11:08:23 -0400 Subject: [PATCH 37/44] Make source code available temporarily The "Source code" (zip)/(tar.gz) files are auto-generated by Github and are NOT the correct source files. Thus, for this release, we still provide specific links for source downloads. --- downloads/hdf5/hdf5_1_14_4.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 819526e5..406c7080 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -21,7 +21,11 @@ title: HDF5 Library and Tools 1.14.4 ## Download -Source and binary downloads are available at: https://github.com/HDFGroup/hdf5/releases/tag/hdf5_1.14.4. +| File | Type | +| ---- | ---- | +| [hdf5-1.14.4.tar.gz](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4/hdf5-1.14.4.tar.gz)
| Source Release for Unix | +| [hdf5-1.14.4.zip](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4/hdf5-1.14.4.zip)
| Source Release for Windows | +| [Ready to use Binaries](https://github.com/HDFGroup/hdf5/releases/tag/hdf5_1.14.4) | Pre-built binary distributions for Unix and Windows || Please refer to [Build instructions](https://github.com/HDFGroup/hdf5/blob/hdf5_1.14.4/release_docs/INSTALL) for building with either CMake or Autotools. From 9d5a36c03ba3f8e5612f5a8829fcc3d01b1f5b15 Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Mon, 15 Apr 2024 23:51:08 -0400 Subject: [PATCH 38/44] Updated for 1.14.4-2 --- downloads/hdf5/hdf5_1_14_4.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 406c7080..525cc94a 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -8,26 +8,25 @@ title: HDF5 Library and Tools 1.14.4 ## Release Information -| Version | HDF5 1.14.4 | -| Release Date | 04/11/24 | +| Version | HDF5 1.14.4.2 | +| Release Date | 04/15/24 | | Additional Release Information | [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | || [Software Changes From Release to Release for HDF5-1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md) | || [New Features in HDF5 Release 1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/new_features_1_14.html) | || [Newsletter Announcement](https://www.hdfgroup.org/2024/04/release-of-hdf5-1-14-4-newsletter-202) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | -|| [API Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-interface_compatibility_report.html) | -|| [Java Interface Compatibility Report between 1.14.3 and 1.14.4](https://htmlpreview.github.io/?https://raw.githubusercontent.com/HDFGroup/hdf5doc/master/html/ADGuide/Compatibility_Report/hdf5-1.14.3-vs-hdf5-1.14.4-java-interface_compatibility_report.html) | +|| [API Compatibility Report between 1.14.3 and 1.14.4](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4.2/hdf5-1.14.4-2.html.abi.reports.tar.gz) | ## Download | File | Type | | ---- | ---- | -| [hdf5-1.14.4.tar.gz](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4/hdf5-1.14.4.tar.gz)
| Source Release for Unix | -| [hdf5-1.14.4.zip](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4/hdf5-1.14.4.zip)
| Source Release for Windows | -| [Ready to use Binaries](https://github.com/HDFGroup/hdf5/releases/tag/hdf5_1.14.4) | Pre-built binary distributions for Unix and Windows || +| [hdf5-1.14.4-2.tar.gz](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4.2/hdf5-1.14.4-2.tar.gz)
| Source Release for Unix | +| [hdf5-1.14.4-2.zip](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4.2/hdf5-1.14.4-2.zip)
| Source Release for Windows | +| [Ready to use Binaries](https://github.com/HDFGroup/hdf5/releases/tag/hdf5_1.14.4.2) | Pre-built binary distributions for Unix and Windows || -Please refer to [Build instructions](https://github.com/HDFGroup/hdf5/blob/hdf5_1.14.4/release_docs/INSTALL) for building with either CMake or Autotools. +Please refer to [Build instructions](https://github.com/HDFGroup/hdf5/blob/hdf5_1.14.4.2/release_docs/INSTALL) for building with either CMake or Autotools. **Methods to obtain (gz file)** From 6ace2e8bbad5bf0e3183b3919eabe3212e8802cc Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Tue, 16 Apr 2024 12:03:17 -0400 Subject: [PATCH 39/44] Add link for the announcement --- downloads/hdf5/hdf5_1_14_4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 525cc94a..907f12cd 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -13,7 +13,7 @@ title: HDF5 Library and Tools 1.14.4 | Additional Release Information | [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | || [Software Changes From Release to Release for HDF5-1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md) | || [New Features in HDF5 Release 1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/new_features_1_14.html) | -|| [Newsletter Announcement](https://www.hdfgroup.org/2024/04/release-of-hdf5-1-14-4-newsletter-202) | +|| [Newsletter Announcement](https://docs.google.com/document/d/11pJKU0PL5q5VgN9HSJSE4OQgtwLMg2WVLYAmCNBqJ9k/edit) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | || [API Compatibility Report between 1.14.3 and 1.14.4](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4.2/hdf5-1.14.4-2.html.abi.reports.tar.gz) | From 60170bc773ed67915f16da6b2001be62efb50d7e Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Tue, 16 Apr 2024 14:05:52 -0400 Subject: [PATCH 40/44] Fix link --- downloads/hdf5/hdf5_1_14_4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 907f12cd..4ab3692f 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -13,7 +13,7 @@ title: HDF5 Library and Tools 1.14.4 | Additional Release Information | [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | || [Software Changes From Release to Release for HDF5-1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md) | || [New Features in HDF5 Release 1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/new_features_1_14.html) | -|| [Newsletter Announcement](https://docs.google.com/document/d/11pJKU0PL5q5VgN9HSJSE4OQgtwLMg2WVLYAmCNBqJ9k/edit) | +|| [Newsletter Announcement](https://www.hdfgroup.org/2024/04/release-of-hdf5-1-14-4-newsletter-202/) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | || [API Compatibility Report between 1.14.3 and 1.14.4](https://github.com/HDFGroup/hdf5/releases/download/hdf5_1.14.4.2/hdf5-1.14.4-2.html.abi.reports.tar.gz) | From d1426997d93ce72d0150e3ea624ac6a46c03eb7f Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Tue, 16 Apr 2024 14:18:23 -0400 Subject: [PATCH 41/44] Use relative link --- downloads/hdf5/hdf5_1_14_4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 4ab3692f..31089f3c 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -11,7 +11,7 @@ title: HDF5 Library and Tools 1.14.4 | Version | HDF5 1.14.4.2 | | Release Date | 04/15/24 | | Additional Release Information | [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | -|| [Software Changes From Release to Release for HDF5-1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/sw_changes_1.14.md) | +|| [Software Changes from Release to Release](../../release_specifics/sw_changes_1.14.md)) | || [New Features in HDF5 Release 1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/new_features_1_14.html) | || [Newsletter Announcement](https://www.hdfgroup.org/2024/04/release-of-hdf5-1-14-4-newsletter-202/) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | From 2526784643e7750cd9a4319c75decf37053587ed Mon Sep 17 00:00:00 2001 From: Binh-Minh Date: Tue, 16 Apr 2024 14:23:07 -0400 Subject: [PATCH 42/44] Fix typo!! --- downloads/hdf5/hdf5_1_14_4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downloads/hdf5/hdf5_1_14_4.md b/downloads/hdf5/hdf5_1_14_4.md index 31089f3c..3dff022e 100644 --- a/downloads/hdf5/hdf5_1_14_4.md +++ b/downloads/hdf5/hdf5_1_14_4.md @@ -11,7 +11,7 @@ title: HDF5 Library and Tools 1.14.4 | Version | HDF5 1.14.4.2 | | Release Date | 04/15/24 | | Additional Release Information | [Release Notes](https://github.com/HDFGroup/hdf5/blob/hdf5_1_14_4/release_docs/RELEASE.txt) | -|| [Software Changes from Release to Release](../../release_specifics/sw_changes_1.14.md)) | +|| [Software Changes from Release to Release](../../documentation/hdf5-docs/release_specifics/sw_changes_1.14.md)) | || [New Features in HDF5 Release 1.14](https://portal.hdfgroup.org/documentation/hdf5-docs/release_specifics/new_features_1_14.html) | || [Newsletter Announcement](https://www.hdfgroup.org/2024/04/release-of-hdf5-1-14-4-newsletter-202/) | || [Doxygen generated Reference Manual](https://docs.hdfgroup.org/hdf5/v1_14/index.html) | From 67db75c78c643d069df00977850529c9d3a7cbc3 Mon Sep 17 00:00:00 2001 From: Lori Cooper Date: Tue, 16 Apr 2024 14:53:24 -0500 Subject: [PATCH 43/44] Create index.md --- ftp/hdf5/index.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 ftp/hdf5/index.md diff --git a/ftp/hdf5/index.md b/ftp/hdf5/index.md new file mode 100644 index 00000000..81052bd9 --- /dev/null +++ b/ftp/hdf5/index.md @@ -0,0 +1 @@ +Destination of FTP contents? From ba37a8ee9f24dd807c0389b766caa5faa7a47680 Mon Sep 17 00:00:00 2001 From: Lori Cooper Date: Tue, 16 Apr 2024 14:57:00 -0500 Subject: [PATCH 44/44] Update default.html --- _layouts/default.html | 1 + 1 file changed, 1 insertion(+) diff --git a/_layouts/default.html b/_layouts/default.html index 25f3e83a..4d253cbf 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -36,6 +36,7 @@

{{ site.title | default: site.github.repo
  • Documentation
  • Community Forum
  • Help Desk
  • +
  • FTP
  • Licenses

  • 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 T-2QV6_~_p;x}A6HX~_QpRhbP! literal 0 HcmV?d00001 diff --git a/documentation/hdf5-docs/feature_docs/images/tutrvds-snglimg.png b/documentation/hdf5-docs/feature_docs/images/tutrvds-snglimg.png new file mode 100644 index 0000000000000000000000000000000000000000..249e56c84835fb58da850cdbd195d70a3279e691 GIT binary patch literal 243661 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