/** @page release_notes Release Notes

    @tableofcontents

    @section qore_1_19_2 Qore 1.19.2

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_19_2_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - added the \c encode_chars HTTP / REST connection option
        (<a href="https://github.com/qorelanguage/qore/issues/4869">issue 4869</a>)
      - fixed a deadlock issue with connection updates in code using this module
        (<a href="https://github.com/qorelanguage/qore/issues/4860">issue 4860</a>)
      - do not change the connection status based on whether or not a connection can be made
        (<a href="https://github.com/qorelanguage/qore/issues/4852">issue 4852</a>)
      - allow connections to be added, updated, and removed while already holding the connection lock
        (<a href="https://github.com/qorelanguage/qore/issues/4849">issue 4849</a>)
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module
      - fixed the CSV writer to automatically detect headers
        (<a href="https://github.com/qorelanguage/qore/issues/4838">issue 4838</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - fixed conversion of soft binary, bool, float, int, and number "or nothing" types from an empty string to
        @ref NOTHING
        (<a href="https://github.com/qorelanguage/qore/issues/4836">issue 4836</a>)
    - <a href="../../modules/Logger/html/index.html">Logger</a>
      - Fixed a bug where file rotate could result in logging exceptions; removed explicit atomic lock operations and
        implemented low-level atomic file handling instead
        (<a href="https://github.com/qorelanguage/qore/issues/4842">issue 4842</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a>
      - fixed a bug handling default values for output fields with required (not-null) types
        (<a href="https://github.com/qorelanguage/qore/issues/4847">issue 4847</a>)
      - fixed a bug handling the \c trunc option in mappers when bulk processing
        (<a href="https://github.com/qorelanguage/qore/issues/4845">issue 4845</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a>
      - fixed a bug where the OAUth2 refresh token was sometimes dropped when an access token was acquired
        (<a href="https://github.com/qorelanguage/qore/issues/4821">issue 4821</a>)
      - fixed a bug returning the token URL
        (<a href="https://github.com/qorelanguage/qore/issues/4809">issue 4809</a>)
    - <a href="../../modules/SalesforceRestClient/html/index.html">SalesforceRestClient</a>
      - fixed a bug where the REST headers were not set up to accept JSON responses when the REST client was used with
        a token, this also caused breakage in the
        <a href="../../modules/SalesforceRestDataProvider/html/index.html">SalesforceRestDataProvider</a> module
        (<a href="https://github.com/qorelanguage/qore/issues/4813">issue 4813</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module
      - set the column size in the type when creating types for \c VARCHAR columns
        (<a href="https://github.com/qorelanguage/qore/issues/4832">issue 4832</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - fixed support of nullable object properties
        (<a href="https://github.com/qorelanguage/qore/issues/4854">issue 4854</a>)
    - fixed bugs handling base64-URL-encoded strings
      (<a href="https://github.com/qorelanguage/qore/issues/4871">issue 4871</a>)
    - fixed a bug where %Qore would crash if an @ref on_error "on_error statement" referred to the active exception
      when erroneously called after a @ref thread_exit "thread_exit statement"
      (<a href="https://github.com/qorelanguage/qore/issues/4864">issue 4864</a>)
    - fixed a bug setting the local time zone on macOS Sonoma
      (<a href="https://github.com/qorelanguage/qore/issues/4818">issue 4818</a>)
    - fixed a bug where %Qore could characters with the incorrect character encoding to strings while processing HTTP
      headers in HTTP calls
      (<a href="https://github.com/qorelanguage/qore/issues/4810">issue 4810</a>)

    @section qore_1_19_1 Qore 1.19.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_19_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a>
      - allow context info to be cleared after handling each request to ensure that context info (like thread-local
        data) does not leak into other connections on the same thread
        (<a href="https://github.com/qorelanguage/qore/issues/4802">issue 4802</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a>
      - do not try to get another OAuth2 token if the token was just retrieved
        (<a href="https://github.com/qorelanguage/qore/issues/4796">issue 4796</a>)
    - fixed a bug where user variants would not always set the varargs flags from ellipses
      (<a href="https://github.com/qorelanguage/qore/issues/4804">issue 4804</a>)
    - fixed an extraneous \c SOCKET-NOT-OPEN exception when running socket callbacks after a socket was closed
      (<a href="https://github.com/qorelanguage/qore/issues/4795">issue 4795</a>)

    @section qore_1_19_0 Qore 1.19.0

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_19_0_new_features New Features in Qore
    - New user modules:
      - <a href="../../modules/GoogleDataProvider/html/index.html">GoogleDataProvider</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4773">issue 4773</a>)
      - <a href="../../modules/GoogleRestClient/html/index.html">GoogleRestClient</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4773">issue 4773</a>)
      - <a href="../../modules/HueRestClient/html/index.html">HueRestClient</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4781">issue 4781</a>)
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - added a logger interface to the abstract base connection class
        (<a href="https://github.com/qorelanguage/qore/issues/4776">issue 4776</a>)
      - added a connection-defined feature list to connection info
        (<a href="https://github.com/qorelanguage/qore/issues/4771">issue 4771</a>)
    - <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module
      - implemented support for non-blocking I/O from file handlers
        (<a href="https://github.com/qorelanguage/qore/issues/4764">issue 4764</a>)
    - <a href="../../modules/Logger/html/index.html">Logger</a> module
      - added \c LoggerInterface and \c LoggerWrapper classes
        (<a href="https://github.com/qorelanguage/qore/issues/4776">issue 4776</a>)
    - added the following function and methods to support base64-url encoding of data:
      - @ref Qore::make_base64_url_string() "make_base64_url_string()"
      - @ref <string>::toBase64Url()
      - @ref <binary>::toBase64Url()
      (<a href="https://github.com/qorelanguage/qore/issues/4783">issue 4783</a>)
    - added the following class and new methods to support OAuth2 and non-blocking polling functionality:
      - @ref Qore::FilePollOperation "FilePollOperation" class
      - @ref Qore::ReadOnlyFile::startPollRead() "ReadOnlyFile::startPollRead()"
      - @ref Qore::HTTPClient::getUsername() "HTTPClient::getUsername()"
      - @ref Qore::HTTPClient::getPassword() "HTTPClient::getPassword()"
      (<a href="https://github.com/qorelanguage/qore/issues/4766">issue 4766</a>)
    - added the \c encode_chars option to the @ref Qore::HTTPClient "HTTPClient" class
      (<a href="https://github.com/qorelanguage/qore/issues/4773">issue 4773</a>)

    @subsection qore_1_19_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - assume connections are up until they are proven to be down
        (<a href="https://github.com/qorelanguage/qore/issues/4789">issue 4789</a>)
      - fixed a bug where the @ref ConnectionProvider::InvalidConnection "InvalidConnection" class would report an
        invalid \c url hash
        (<a href="https://github.com/qorelanguage/qore/issues/4785">issue 4785</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - implemented consistent support for OAuth2 authorization flows including for OAuth2 with non-blocking I/O and
        non-blocking retrieval of Swagger schemas for REST clients
        (<a href="https://github.com/qorelanguage/qore/issues/4766">issue 4766</a>)
      - fixed a bug where polling pings did not respect connection options or the validator
        (<a href="https://github.com/qorelanguage/qore/issues/4764">issue 4764</a>)
    - fixed a bugs handling the signal mask that could cause hard-to-debug problems such as deadlocks in JIT in the
      JVM on macOS aarch64
      (<a href="https://github.com/qorelanguage/qore/issues/4793">issue 4793</a>)
    - fixed a bug handling non-blocking I/O for socket connections on Darwin / macOS
      (<a href="https://github.com/qorelanguage/qore/issues/4791">issue 4791</a>)
    - fixed a bug where function and method variants did not report varargs in the signature
      (<a href="https://github.com/qorelanguage/qore/issues/4787">issue 4787</a>)
    - fixed a bug where an access exception could be raised when a reference to a private member was used in a static
      class method
      (<a href="https://github.com/qorelanguage/qore/issues/4778">issue 4778</a>)
    - fixed a bug where the stack guard was not properly enforced when the JVM assumed enforcement responsibility; in
      addition, due to the fact that thread stacks are allocated from overcommitted memory, reducing the thread stack
      size to 512KB had no effect on the memory size of %Qore programs but did affect %Qore, Java, and Python
      programs, therefore the stack limit for all threads was reset to 8MB as of this release
      (<a href="https://github.com/qorelanguage/qore/issues/4768">issue 4768</a>)

    @section qore_1_18_1 Qore 1.18.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_18_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added \c allowed_values to field data info
        (<a href="https://github.com/qorelanguage/qore/issues/4762">issue 4762</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - fixed URI path reporting in REST error messages
        (<a href="https://github.com/qorelanguage/qore/issues/4760">issue 4760</a>)
    - <a href="../../modules/ServiceNowRestClient/html/index.html">ServiceNowRestClient</a> module
      - create URI request paths properly; restored functionality with recent versions of ServiceNow
        (<a href="https://github.com/qorelanguage/qore/issues/4758">issue 4758</a>)
    - <a href="../../modules/ServiceNowRestDataProvider/html/index.html">ServiceNowRestDataProvider</a> module
      - fixed operator handling in searches
        (<a href="https://github.com/qorelanguage/qore/issues/4759">issue 4759</a>)
    - allow user modules included with external binary modules to install jar files
      (<a href="https://github.com/qorelanguage/qore/issues/4756">issue 4756</a>)

    @section qore_1_18_0 Qore 1.18.0

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_18_0_new_features New Features in Qore
    - <a href="../../modules/EmpathicBuildingDataProvider/html/index.html">EmpathicBuildingDataProvider</a> module
      - implemented this module to provide data provider support for Haltian Empathic Building services
        (<a href="https://github.com/qorelanguage/qore/issues/4745">issue 4745</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - implemented the \c swagger_lax_parsing option to try to parse invalid Swagger schemas
        (<a href="https://github.com/qorelanguage/qore/issues/4741">issue 4741</a>)
    - <a href="../../modules/RestClientDataProvider/html/index.html">RestClientDataProvider</a> module
      - implemented the \c swagger_lax_parsing option to try to parse invalid Swagger schemas
        (<a href="https://github.com/qorelanguage/qore/issues/4741">issue 4741</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - implemented lax mode parsing for Swagger schemas with common errors to work
        (<a href="https://github.com/qorelanguage/qore/issues/4741">issue 4741</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - implemented the \c lax_parsing option to try to parse invalid Swagger schemas
        (<a href="https://github.com/qorelanguage/qore/issues/4741">issue 4741</a>)

    @subsection qore_1_18_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - fixed a bug where the \c HttpConnection scheme could not be used
        (<a href="https://github.com/qorelanguage/qore/issues/4753">issue 4753</a>)
      - fixed a bug where invalid connection options were silently accepted
        (<a href="https://github.com/qorelanguage/qore/issues/4751">issue 4751</a>)
    - fixed date subtraction when the RHS is <tt>1970-01-01Z</tt>
      (<a href="https://github.com/qorelanguage/qore/issues/4747">issue 4747</a>)
    - set the default connect timeout for HTTP connections to 60 seconds
      (<a href="https://github.com/qorelanguage/qore/issues/4743">issue 4743</a>)

    @section qore_1_17_0 Qore 1.17.0

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_17_0_new_features New Features in Qore
    - implemented support for explicitly declaring variable argument support with
      @ref function_param_varargs "ellipses"; this resolves a serious issue importing %Qore abstract functions and
      methods in Java where @ref abstract "abstract methods" could not explicitly declare their support for variable
      arguments. In case of compatibility issues; use the @ref broken-varargs "%broken-varargs" parse option or the
      @ref Qore::PO_BROKEN_VARARGS "PO_BROKEN_VARARGS" constant when setting up a @ref Qore::Program "Program" object
      (<a href="https://github.com/qorelanguage/qore/issues/4738">issue 4738</a>)
      - implemented the following parse options:
        - @ref broken-varargs "%broken-varargs"
        - @ref correct-varargs "%correct-varargs"
      - implemented the following new constant:
        - @ref Qore::PO_BROKEN_VARARGS "PO_BROKEN_VARARGS"
    - <a href="../../modules/ElasticSearchDataProvider/html/index.html">ElasticSearchDataProvider</a> module
      - Added a DataProvider API for ElasticSearch servers
        (<a href="https://github.com/qorelanguage/qore/issues/4729">issue 4729</a>)

    @subsection qore_1_17_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added missing \c base64binary and \c hexbinary type support
        (<a href="https://github.com/qorelanguage/qore/issues/4732">issue 4732</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - ensure that URI paths are created without duplicated slashes by handling the base path consistently
        (<a href="https://github.com/qorelanguage/qore/issues/4728">issue 4728</a>)
    - fixed a bug where TIDs would be reassigned immediately to other threads once all TIDs in the thread list had
      been assigned; now TIDs are assigned in a cyclic order based on which TIDs are free in all cases
      (<a href="https://github.com/qorelanguage/qore/issues/4735">issue 4735</a>)
    - fixed a bug where it was not possible to declare methods as accepting varargs with ellipses; this caused
      problems with importing abstract Qore methods into Java, for example
      (<a href="https://github.com/qorelanguage/qore/issues/4738">issue 4738</a>)

    @section qore_1_16_1 Qore 1.16.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_16_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - allow connection options designating files to be selected as files
        (<a href="https://github.com/qorelanguage/qore/issues/4725">issue 4725</a>)
    - <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module
      - allow handler information to be returned
        (<a href="https://github.com/qorelanguage/qore/issues/4726">issue 4726</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - allow connection options designating files to be selected as files
        (<a href="https://github.com/qorelanguage/qore/issues/4725">issue 4725</a>)

    @section qore_1_16_0 Qore 1.16.0

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_16_0_new_features New Features in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - added a transaction capability flag for data providers to the connection info hash
        (<a href="https://github.com/qorelanguage/qore/issues/4722">issue 4722</a>)
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module
      - new API data provider child to allow WebSocket messages to be received from a WebSocketClient data provider
        (<a href="https://github.com/qorelanguage/qore/issues/4716">issue 4716</a>)

    @subsection qore_1_16_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DbDataProvider/html/index.html">DbDataProvider</a> module
      - \c DbDataProvider was missing search options
        (<a href="https://github.com/qorelanguage/qore/issues/4713">issue 4713</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - fixed bugs handling null hash assignments with fields with default values in \c HashDataType
        (<a href="https://github.com/qorelanguage/qore/issues/4715">issue 4715</a>)
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
      - fixed a bug reloading X.509 certificates on running listeners
        (<a href="https://github.com/qorelanguage/qore/issues/4720">issue 4720</a>)
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module
      - fixed creating example WebSocket client data providers from factories with templated option values
        (<a href="https://github.com/qorelanguage/qore/issues/4716">issue 4716</a>)

    @section qore_1_15 Qore 1.15

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_15_new_features New Features in Qore
    - New user modules:
      - <a href="../../modules/JdbcMicrosoftSqlUtil/html/index.html">JdbcMicrosoftSqlUtil</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4705">issue 4705</a>)
      - <a href="../../modules/JdbcOracleSqlUtil/html/index.html">MssqlSqlUtilBase</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4705">issue 4705</a>)

    @subsection qore_1_15_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - ensure that exception attributes from ping errors are serializable
        (<a href="https://github.com/qorelanguage/qore/issues/4708">issue 4708</a>)
    - <a href="../../modules/Util/html/index.html">Util</a>
      - added the \c check_exception_serializable() method
        (<a href="https://github.com/qorelanguage/qore/issues/4708">issue 4708</a>)

    - fixed a bug where @ref Qore::SQL::Datasource "Datasource" objects would fail to deserialize if the connection
      string was missing the dbname
      (<a href="https://github.com/qorelanguage/qore/issues/4706">issue 4706</a>)

    @section qore_1_14_2 Qore 1.14.2

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_14_2_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module
      - the data provider factory uses the delayed observable class instead
        (<a href="https://github.com/qorelanguage/qore/issues/4701">issue 4701</a>)
    - <a href="../../modules/FileDataProvider/html/index.html">FileDataProvider</a> module
      - the data provider factory uses the delayed observable class instead
        (<a href="https://github.com/qorelanguage/qore/issues/4701">issue 4701</a>)
    - <a href="../../modules/Schema/html/index.html">Schema</a> module
      - fixed reporting changes with negative verbose options
        (<a href="https://github.com/qorelanguage/qore/issues/4702">issue 4702</a>)

    @section qore_1_14_1 Qore 1.14.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_14_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - added the \c headers option to HTTP connections (@ref ConnectionProvider::HttpConnection "HttpConnection")
        (<a href="https://github.com/qorelanguage/qore/issues/4695">issue 4695</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - enabled browsing the data provider hierarchy according to transactional support
        (<a href="https://github.com/qorelanguage/qore/issues/4699">issue 4699</a>)
    - <a href="../../modules/DbDataProvider/html/index.html">DbDataProvider</a> module
      - enabled browsing the data provider hierarchy according to transactional support
        (<a href="https://github.com/qorelanguage/qore/issues/4699">issue 4699</a>)
    - <a href="../../modules/HttpClientDataProvider/html/index.html">HttpClientDataProvider</a> module
      - added the \c headers option to allow auth headers to be set in the data provider
        (<a href="https://github.com/qorelanguage/qore/issues/4695">issue 4695</a>)
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module
      - fixed a deadlock deleting the client object when it goes out of scope in the event thread
        (<a href="https://github.com/qorelanguage/qore/issues/4697">issue 4697</a>)
      - added the \c headers option to allow auth headers to be set in WebSocket client connections and data providers
        (<a href="https://github.com/qorelanguage/qore/issues/4694">issue 4694</a>)

    @section qore_1_14 Qore 1.14

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_14_new_features New Features in Qore
    - New user modules:
      - <a href="../../modules/JdbcFirebirdSqlUtil/html/index.html">JdbcFirebirdSqlUtil</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4684">issue 4684</a>)
      - <a href="../../modules/JdbcOracleSqlUtil/html/index.html">JdbcOracleSqlUtil</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4684">issue 4684</a>)
      - <a href="../../modules/JdbcPostgresqlSqlUtil/html/index.html">JdbcPostgresqlSqlUtil</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4684">issue 4684</a>)
      - <a href="../../modules/OdbcFirebirdSqlUtil/html/index.html">OdbcFirebirdSqlUtil</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4684">issue 4684</a>)
      - <a href="../../modules/OracleSqlUtilBase/html/index.html">OracleSqlUtilBase</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4684">issue 4684</a>)
      - <a href="../../modules/PgsqlSqlUtilBase/html/index.html">PgsqlSqlUtilBase</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4684">issue 4684</a>)
      - <a href="../../modules/XdbcFirebirdSqlUtilBase/html/index.html">XdbcFirebirdSqlUtilBase</a>
        (<a href="https://github.com/qorelanguage/qore/issues/4684">issue 4684</a>)
    - Added a DBI method to determine the actual DB driver name for wrapper drivers like ODBC and JDBC
      (<a href="https://github.com/qorelanguage/qore/issues/4690">issue 4690</a>)
    - Added new methods to allow the actual DB driver name to be determined when using the \c odbc and \c jdbc DBI
      drivers:
      - @ref Qore::SQL::AbstractDatasource::getDriverRealName() "AbstractDatasource::getDriverRealName()"
      - @ref Qore::SQL::Datasource::getDriverRealName() "Datasource::getDriverRealName()"
      - @ref Qore::SQL::DatasourcePool::getDriverRealName() "DatasourcePool::getDriverRealName()"

    @subsection qore_1_14_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - set connection status to \c OK after a successful manual ping operation
        (<a href="https://github.com/qorelanguage/qore/issues/4685">issue 4685</a>)
    - fixed a bug in @ref Qore::parse_datasource() "parse_datasource()" parsing option values with special characters
      (<a href="https://github.com/qorelanguage/qore/issues/4688">issue 4688</a>)
    - fixed a bug where @ref Qore::parse_url() "parse_url()" failed with colons (\c ':') in the path
      (<a href="https://github.com/qorelanguage/qore/issues/4673">issue 4673</a>)

    @section qore_1_13 Qore 1.13

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_13_new_features New Features in Qore
    - <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module
      - added support for \c rest:// and \c rests:// locations
        (<a href="https://github.com/qorelanguage/qore/issues/4669">issue 4669</a>)
      - added support for runtime extensibility from an environment variable (\c QORE_FILE_LOCATION_HANDLERS)
        (<a href="https://github.com/qorelanguage/qore/issues/4667">issue 4667</a>)
    - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module
      - parse and report path arguments when processing REST requests on the server side
        (<a href="https://github.com/qorelanguage/qore/issues/4661">issue 4661</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - parse and report path arguments when processing REST requests on the server side
        (<a href="https://github.com/qorelanguage/qore/issues/4661">issue 4661</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module
      - added a \c path_params element to the \c UriQueryInfo typed hash to allow for reporting path arguments in
        calls supported by REST schemas
        (<a href="https://github.com/qorelanguage/qore/issues/4661">issue 4661</a>)
    - added the @ref Qore::get_safe_url() "get_safe_url()" function to avoid exposing passwords in URLs
      (<a href="https://github.com/qorelanguage/qore/issues/4671">issue 4671</a>)

    @subsection qore_1_13_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - support full ping operations, also with polling, using an authenticated request
        (<a href="https://github.com/qorelanguage/qore/issues/4677">issue 4677</a>)
      - fixed bugs handling child capability attributes in connections
        (<a href="https://github.com/qorelanguage/qore/issues/4675">issue 4675</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - support full ping operations, also with polling, using an authenticated request
        (<a href="https://github.com/qorelanguage/qore/issues/4677">issue 4677</a>)
      - apply the \c swagger_base_path argument to all REST validators
        (<a href="https://github.com/qorelanguage/qore/issues/4663">issue 4663</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - always set the \c socketobject request context property
        (<a href="https://github.com/qorelanguage/qore/issues/4666">issue 4666</a>)
    - <a href="../../modules/ServiceNowRestClient/html/index.html">ServiceNowRestClient</a> module
      - support full ping operations, also with polling, using an authenticated request
        (<a href="https://github.com/qorelanguage/qore/issues/4677">issue 4677</a>)
    - fixed a bug where @ref Qore::parse_url() "parse_url()" failed with passwords with / characters
      (<a href="https://github.com/qorelanguage/qore/issues/4673">issue 4673</a>)
    - fixed errors in HTTP communications in 32-bit builds of %Qore
      (<a href="https://github.com/qorelanguage/qore/issues/4660">issue 4660</a>)

    @section qore_1_12_4 Qore 1.12.4

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_12_4_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - added support for the \c pre_encoded_urls option in the \c HttpConnection class
        (<a href="https://github.com/qorelanguage/qore/issues/4656">issue 4656</a>)
    - <a href="../../modules/HttpClientDataProvider/html/index.html">HttpClientDataProvider</a> module
      - added support for the \c pre_encoded_urls option in the \c HttpConnection class
        (<a href="https://github.com/qorelanguage/qore/issues/4656">issue 4656</a>)
    - <a href="../../modules/RestClientDataProvider/html/index.html">RestClientDataProvider</a> module
      - added support for the \c pre_encoded_urls option in the \c HttpConnection class
        (<a href="https://github.com/qorelanguage/qore/issues/4656">issue 4656</a>)
    - fixed a race condition in deadlock detection where a deadlock could occur due to the lack of atomic reads of a
      critical attribute
      (<a href="https://github.com/qorelanguage/qore/issues/4658">issue 4658</a>)
    - added the \c pre_encoded_urls option to the @ref Qore::HTTPClient "HTTPClient" class as well as the following
      methods:
      - @ref Qore::HTTPClient::setPreEncodedUrls() "HTTPClient::setPreEncodedUrls()"
      - @ref Qore::HTTPClient::getPreEncodedUrls() "HTTPClient::getPreEncodedUrls()"
      \n
      (<a href="https://github.com/qorelanguage/qore/issues/4656">issue 4656</a>)
    - fixed building and stack guard on s390x and ppc64 architectures
      (<a href="https://github.com/qorelanguage/qore/issues/4655">issue 4655</a>)

    @section qore_1_12_3 Qore 1.12.3

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_12_3_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DebugUtil/html/index.html">DebugUtil</a> module
      - fixed bugs in log handling
        (<a href="https://github.com/qorelanguage/qore/issues/4635">issue 4635</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - implemented \c "RestHandler::errorResponseHeaders()" to allow subclasses to return custom
        headers in error responses, such as when a request cannot be deserialized
        (<a href="https://github.com/qorelanguage/qore/issues/4646">issue 4646</a>)
    - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module
      - REST handlers must throw a \c DESERIALIZATION-ERROR when deserialization errors occur, so that a
        <tt>400 Bad Request</tt> response is returned
        (<a href="https://github.com/qorelanguage/qore/issues/4647">issue 4647</a>)
      - allow for the client's time zone locale to be set for data serialization / deserialization
        (<a href="https://github.com/qorelanguage/qore/issues/4639">issue 4639</a>)
    - <a href="../../modules/Schema/html/index.html">Schema</a> module
      - allow the user to determine if a schema alignment operation was a first-time creation or an update
        (<a href="https://github.com/qorelanguage/qore/issues/4637">issue 4637</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - REST handlers must throw a \c DESERIALIZATION-ERROR when deserialization errors occur, so that a
        <tt>400 Bad Request</tt> response is returned
        (<a href="https://github.com/qorelanguage/qore/issues/4647">issue 4647</a>)
      - do not reserialize already deserialized data when processing responses
        (<a href="https://github.com/qorelanguage/qore/issues/4640">issue 4640</a>)
      - allow for the client's time zone locale to be set for data serialization / deserialization
        (<a href="https://github.com/qorelanguage/qore/issues/4639">issue 4639</a>)
    - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a> module
      - fixed a bug in \c WebSocketHandler::sendOne()
        (<a href="https://github.com/qorelanguage/qore/issues/4634">issue 4634</a>)
    - fixed crashes in @ref Qore::set_signal_handler() "set_signal_handler()" and
      @ref Qore::remove_signal_handler() "remove_signal_handler()" with negative signal values
      (<a href="https://github.com/qorelanguage/qore/issues/4643">issue 4643</a>)

    @section qore_1_12_2 Qore 1.12.2

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_12_2_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added \c DataProvider::getFactoryObjectWithTemplate() and \c AbstractDataProviderFactory::createWithTemplate()
        to allow data providers to be created from factories with template arguments
        (<a href="https://github.com/qorelanguage/qore/issues/4624">issue 4624</a>)
      - \c AbstractDataProvider::search*() fails with record-based data providers that do not provide a record
        definition
        (<a href="https://github.com/qorelanguage/qore/issues/4624">issue 4624</a>)
      - \c AbstractDataProvider::search*() methods fail with an empty \c where hash argument
        (<a href="https://github.com/qorelanguage/qore/issues/4622">issue 4622</a>)
    - <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module
      - added support for immediate <tt>data://</tt> locations
          (<a href="https://github.com/qorelanguage/qore/issues/4626">issue 4626</a>)
    - <a href="../../modules/DbDataProvider/html/index.html">DbDataProvider</a> module
      - fixed \c sequence and \c sequence_currval mapper options in \c DbTableDataProvider
        (<a href="https://github.com/qorelanguage/qore/issues/4628">issue 4628</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - fixed \c Mapper::mapAuto() to accept an iterator argument
        (<a href="https://github.com/qorelanguage/qore/issues/4629">issue 4629</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module
      - fixed a bug serializing and deserializing \c Table objects using the \c odbc driver
        (<a href="https://github.com/qorelanguage/qore/issues/4620">issue 4620</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module
      - fixed a bug in \c substitute_env_vars() where an exception would be thrown if
        any referenced environment variable was not set
        (<a href="https://github.com/qorelanguage/qore/issues/4632">issue 4632</a>)

    @par Release Summary

    @section qore_1_12_1 Qore 1.12.1

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_12_1_new_features New Features in Qore
    - <a href="../../modules/OdbcFirebirdSqlUtil/html/index.html">OdbcFirebirdSqlUtil</a> module
      - added the \c OdbcFirebirdSqlUtil module to enable Firebird databases to be used with SqlUtil

    @subsection qore_1_12_1_bug_fixes Bug Fixes in Qore
    - fixed a bug in the @ref cast "cast<> operator" where class casts would not enforce the specified class at
      runtime
      (<a href="https://github.com/qorelanguage/qore/issues/4610">issue 4610</a>)
    - fixed a bug in the @ref cast "cast<> operator" where it could not be used on lvalues
      (<a href="https://github.com/qorelanguage/qore/issues/4609">issue 4609</a>)
    - fixed a bug where the @ref unreferenced-variable warning was raised in situations where it was not warranted,
      such as when a local variable is assigned a new object and the destructor performs resource cleanup when the
      local variable goes out of scope
      (<a href="https://github.com/qorelanguage/qore/issues/4607">issue 4607</a>)
    - fixed a bug where @ref methodGate_methods "methodGate()" and @ref memberGate_methods "memberGate()" methods were
      not respected in some cases when referring to undeclared members or methods of a class with the method in
      question defined as an @ref abstract "abstract method"
      (<a href="https://github.com/qorelanguage/qore/issues/4605">issue 4605</a>)

    @section qore_1_12_0 Qore 1.12.0

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_12_0_new_features New Features in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - allow multiple connections to be polled from a single thread
        (<a href="https://github.com/qorelanguage/qore/issues/4595">issue 4595</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added child capability support to data provider summary info
        (<a href="https://github.com/qorelanguage/qore/issues/4576">issue 4576</a>)
    - <a href="../../modules/QUnit/html/index.html">QUnit</a> module
      - added a variant to \c Test::assertThrows() to allow exception \c arg values to be verified
        (<a href="https://github.com/qorelanguage/qore/issues/4590">issue 4590</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - enable the deserialized body to be returned in REST exception info when possible
        (<a href="https://github.com/qorelanguage/qore/issues/4591">issue 4591</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - added request arguments to the \c RestHandler::unknownSubClassError() and
        \c RestHandler::doGetPossibleSubClasses() methods
        (<a href="https://github.com/qorelanguage/qore/issues/4578">issue 4578</a>)
    - new classes:
      - @ref Qore::AbstractPollableIoObject "AbstractPollableIoObject"
      - @ref Qore::AbstractPollableIoObjectBase "AbstractPollableIoObjectBase"
      - @ref Qore::AbstractPollOperation "AbstractPollOperation"
      - @ref Qore::SocketPollOperationBase "SocketPollOperationBase"
      - @ref Qore::SocketPollOperation "SocketPollOperation"
    - new I/O methods:
      - @ref Qore::File::getPipe() "File::getPipe()"
      - @ref Qore::HTTPClient::startPollConnect() "HTTPClient::startPollConnect()"
      - @ref Qore::HTTPClient::startPollSendRecv() "HTTPClient::startPollSendRecv()"
      - @ref Qore::Socket::startPollConnect() "Socket::startPollConnect()"
      - @ref Qore::Socket::startPollConnectSsl() "Socket::startPollConnectSsl()"
      - @ref Qore::Socket::startPollRecvBinary() "Socket::startPollRecvBinary()"
      - @ref Qore::Socket::startPollRecvString() "Socket::startPollRecvString()"
      - @ref Qore::Socket::startPollRecvUntilBytesBinary() "Socket::startPollRecvUntilBytesBinary()"
      - @ref Qore::Socket::startPollRecvUntilBytesString() "Socket::startPollRecvUntilBytesString()"
      - @ref Qore::Socket::startPollSend() "Socket::startPollSend()"
      - @ref Qore::Socket::startPollUpgradeClientToSSL() "Socket::startPollUpgradeClientToSSL()"

    @subsection qore_1_12_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - fixed a bug acquiring a data provider object from connection objects
        (<a href="https://github.com/qorelanguage/qore/issues/4584">issue 4584</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - fixed a bug accepting the element type in \c SoftListDataType
        (<a href="https://github.com/qorelanguage/qore/issues/4603">issue 4603</a>)
    - <a href="../../modules/Logger/html/index.html">Logger</a> module
      - fixed a race condition handling log file rotation with active logs
        (<a href="https://github.com/qorelanguage/qore/issues/4583">issue 4583</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
      - fixed bugs handling table objects in schemas other than \c public
        (<a href="https://github.com/qorelanguage/qore/issues/4602">issue 4602</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - fixed a bug where HTTP method names were not accepted as wildcard values in URI paths
        (<a href="https://github.com/qorelanguage/qore/issues/4598">issue 4598</a>)
      - fixed a bug setting the data provider name in Swagger schemas provided by files
        (<a href="https://github.com/qorelanguage/qore/issues/4587">issue 4587</a>)
    - fixed bugs handling \c CONNECT messages to HTTP proxies for HTTPS connections to the target server
      (<a href="https://github.com/qorelanguage/qore/issues/4601">issue 4601</a>)
    - fixed a bug handling redirect messages with message bodies
      (<a href="https://github.com/qorelanguage/qore/issues/4600">issue 4600</a>)

    @section qore_1_11_0 Qore 1.11.0

    @par Release Summary
    Bugfix release with minor new features in user modules; see below for more information

    @subsection qore_1_11_0_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added child capability support to data provider info
        (<a href="https://github.com/qorelanguage/qore/issues/4572">issue 4572</a>)
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
      - implemented support for reloading X.509 certificate information without manually restarting listeners
        (<a href="https://github.com/qorelanguage/qore/issues/4574">issue 4574</a>)
    - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> module
      - implemented support for reloading X.509 certificate information without manually restarting listeners
        (<a href="https://github.com/qorelanguage/qore/issues/4574">issue 4574</a>)
    - added the following method:
      - @ref Qore::Socket::setCertificateAndPrivateKey() "Socket::setCertificateAndPrivateKey()"

    @section qore_1_10_0 Qore 1.10.0

    @par Release Summary
    Bugfix release with minor new features in user modules; see below for more information

    @subsection qore_1_10_0_new_features New Features in Qore
    - <a href="../../modules/AwsRestClientDataProvider/html/index.html">AwsRestClientDataProvider</a> module
      - new module
        (<a href="https://github.com/qorelanguage/qore/issues/4564">issue 4564</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - implemented support for the observer pattern / event API
        (<a href="https://github.com/qorelanguage/qore/issues/4557">issue 4557</a>)
    - <a href="../../modules/FileDataProvider/html/index.html">FileDataProvider</a> module
      - new module
        (<a href="https://github.com/qorelanguage/qore/issues/4564">issue 4564</a>)
    - <a href="../../modules/FilePoller/html/index.html">FilePoller</a> module
      - added support for the event-based DataProvider API
        (<a href="https://github.com/qorelanguage/qore/issues/4557">issue 4557</a>)
    - <a href="../../modules/FtpClientDataProvider/html/index.html">FtpClientDataProvider</a> module
      - new module
        (<a href="https://github.com/qorelanguage/qore/issues/4564">issue 4564</a>)
    - <a href="../../modules/FtpPoller/html/index.html">FtpPoller</a> module
      - added support for the event-based DataProvider API
        (<a href="https://github.com/qorelanguage/qore/issues/4557">issue 4557</a>)
    - <a href="../../modules/HttpClientDataProvider/html/index.html">HttpClientDataProvider</a> module
      - new module
        (<a href="https://github.com/qorelanguage/qore/issues/4564">issue 4564</a>)
    - <a href="../../modules/RestClientDataProvider/html/index.html">RestClientDataProvider</a> module
      - new module
        (<a href="https://github.com/qorelanguage/qore/issues/4564">issue 4564</a>)
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module
      - added support for the DataProvider API
        (<a href="https://github.com/qorelanguage/qore/issues/4564">issue 4564</a>)
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module
      - added support for the event-based DataProvider API
        (<a href="https://github.com/qorelanguage/qore/issues/4557">issue 4557</a>)

    @subsection qore_1_10_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/FsUtil/html/index.html">FsUtil</a> module
      - fixed inconsistencies handling target directories in copy operations
        (<a href="https://github.com/qorelanguage/qore/issues/4559">issue 4559</a>)
    - fixed a bug in @ref Qore::parse_url() "parse_url()" parsing URLs with special symbols in the password
      (<a href="https://github.com/qorelanguage/qore/issues/4568">issue 4568</a>)
    - fixed a bug in the @ref Qore::HTTPClient "HTTPClient" class where it was not possible to use an X.509
      certificate or private key from data
      (<a href="https://github.com/qorelanguage/qore/issues/4567">issue 4567</a>)
    - fixed bugs where \\a and \\e escape codes were not supported in %Qore strings
      (<a href="https://github.com/qorelanguage/qore/issues/4562">issue 4562</a>)
    - fixed a bug handling escape codes in regular expression replacement strings (see
      @ref qore_regex_escape_replacement_string for more information)
      (<a href="https://github.com/qorelanguage/qore/issues/4561">issue 4561</a>)

    @section qore_1_9_1 Qore 1.9.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_9_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module updates:
      - fixed a bug where data providers could return local names as paths with \c "/" characters in them, breaking
        some clients traversing the data provider hierarchy
        (<a href="https://github.com/qorelanguage/qore/issues/4555">issue 4555</a>)
    - <a href="../../modules/WebUtil/html/index.html">WebUtil</a> module updates:
      - fixed a bug where files outside the root directory could be served with specially-formatted requests
        (<a href="https://github.com/qorelanguage/qore/issues/4550">issue 4550</a>)
    - fixed a bug building with openssl 3+ that could cause a runtime crash when encryption is used
      (<a href="https://github.com/qorelanguage/qore/issues/4553">issue 4553</a>)
    - fixed a bug where it was not possible to set the minimum TLS level to v1.3 for encrypted connections
      (<a href="https://github.com/qorelanguage/qore/issues/4551">issue 4551</a>)

    @section qore_1_9_0 Qore 1.9.0

    @par Release Summary
    Bugfix release with minor new features in user modules; see below for more information

    @subsection qore_1_9_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a> module
      - fixed the prepend and append column operators
        (<a href="https://github.com/qorelanguage/qore/issues/4548">issue 4548</a>)
      - implemented support for generating queries based on generic expressions using the DataProvider module's
        generic expression support
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module
      - fixed the prepend and append column operators
        (<a href="https://github.com/qorelanguage/qore/issues/4548">issue 4548</a>)
      - implemented support for generating queries based on generic expressions using the DataProvider module's
        generic expression support
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
      - implemented support for generating queries based on generic expressions using the DataProvider module's
        generic expression support
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/OraclelSqlUtil/html/index.html">OraclelSqlUtil</a> module
      - implemented support for generating queries based on generic expressions using the DataProvider module's
        generic expression support
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/Sqlite3SqlUtil/html/index.html">Sqlite3SqlUtil</a> module
      - implemented support for generating queries based on generic expressions using the DataProvider module's
        generic expression support
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module
      - implemented support for generating queries based on generic expressions using the DataProvider module's
        generic expression support
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - allow data providers to be introspected with additional information about children
        (<a href="https://github.com/qorelanguage/qore/issues/4543">issue 4543</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - fixed a bug where empty definitions could be ignored
        (<a href="https://github.com/qorelanguage/qore/issues/4545">issue 4545</a>)

    @section qore_1_8_1 Qore 1.8.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_8_1_bug_fixes Bug Fixes in Qore
    - fixed a bug building documentation with autotools
      (<a href="https://github.com/qorelanguage/qore/issues/4542">issue 4542</a>)
    - fixed bugs in C++ <tt>QoreSocket::send*()</tt> methods not used in the %Qore language but exposed in the public
      C++ API that could cause a crash in case of errors
      (<a href="https://github.com/qorelanguage/qore/issues/4541">issue 4541</a>)
    - fixed a bug building documentation with release files created from the autotools makefile target, as well as
      bugs in the cmake configuration generating documentation for builtin modules
      (<a href="https://github.com/qorelanguage/qore/issues/4540">issue 4540</a>)

    @section qore_1_8_0 Qore 1.8.0

    @par Release Summary
    Bugfix release with minor new features in user modules; see below for more information

    @subsection qore_1_8_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module
      - updated with initial support for generic expressions for searches
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - updated with initial support for generic expressions for searches
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
      - addded support for data provider options to support default values
        (<a href="https://github.com/qorelanguage/qore/issues/4532">issue 4532</a>)
      - addded \c search_operators to the data provider response to report supported search operators
        (<a href="https://github.com/qorelanguage/qore/issues/4528">issue 4528</a>)
      - fixed a type error in \c DataProvider::search*() calls with an empty \c where hash argument
        (<a href="https://github.com/qorelanguage/qore/issues/4511">issue 4511</a>)
    - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a> module
      - updated with initial support for generic expressions for searches
        (<a href="https://github.com/qorelanguage/qore/issues/4538">issue 4538</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - fixed a bug where REST schema validation was not applied in all contexts with specialized REST clients; this
        was enabled by refactoring the internal code that allowed the validation to be applied
        (<a href="https://github.com/qorelanguage/qore/issues/4518">issue 4518</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - do not raise a validation error when a response with an unknown code has a message body; this hides the true
        error message from the caller in case of error messages
        (<a href="https://github.com/qorelanguage/qore/issues/4534">issue 4534</a>)
      - allow a logger to be set in validators
        (<a href="https://github.com/qorelanguage/qore/issues/4509">issue 4509</a>)
    - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module
      - allow a logger to be set in validators
        (<a href="https://github.com/qorelanguage/qore/issues/4509">issue 4509</a>)
    - <a href="../../modules/ServiceNowRestDataProvider/html/index.html">ServiceNowRestDataProvider</a> module
      - fixed bugs handling the \c orderby, \c orderbydesc, and \c groupby search options
        (<a href="https://github.com/qorelanguage/qore/issues/4536">issue 4536</a>)
    - <a href="../../modules/Sqlite3SqlUtil/html/index.html">Sqlite3SqlUtil</a> module
      - SQLite3 support for SqlUtil
        (<a href="https://github.com/qorelanguage/qore/issues/4517">issue 4517</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - allow a logger to be set in validators
        (<a href="https://github.com/qorelanguage/qore/issues/4509">issue 4509</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - fixed a bug where array types failed due to missing item definitions
        (<a href="https://github.com/qorelanguage/qore/issues/4526">issue 4526</a>)
      - fixed a bug where \c object types in Swagger schemas could be converted directly to \c object types in %Qore
        instead of \c hash
        (<a href="https://github.com/qorelanguage/qore/issues/4520">issue 4520</a>)
    - fixed a bug where the @ref cast "cast<>() operator" threw parse-time exceptions with hashdecls that could
      succeed at runtime
      (<a href="https://github.com/qorelanguage/qore/issues/4531">issue 4531</a>)
    - fixed a bug handling types at parse time with the @ref minus_operator "minus operator" and complex hash operands
      (<a href="https://github.com/qorelanguage/qore/issues/4529">issue 4529</a>)
    - fixed a static memory leak in libqore shutting down the library when built with openssl 3+
      (<a href="https://github.com/qorelanguage/qore/issues/4522">issue 4522</a>)
    - fixed a bug where HTTP redirect messages were encoded twice causing redirect failures in cases where the
      redirect URI path had encoded elements
      (<a href="https://github.com/qorelanguage/qore/issues/4515">issue 4515</a>)
    - fixed a crash related to stack exhaustion resolving deeply-nested references
      (<a href="https://github.com/qorelanguage/qore/issues/4513">issue 4513</a>)

    @section qore_1_7_2 Qore 1.7.2

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_7_2_bug_fixes Bug Fixes in Qore
    - Fixed @ref Qore::SQL::parse_datasource() "parse_datasource()" to parse datasource strings with a DB name as a path or
      with \c ':' chars in the DB or host name
      (<a href="https://github.com/qorelanguage/qore/issues/4505">issue 4505</a>)

    @section qore_1_7_1 Qore 1.7.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_7_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - made it possible to determine the default field type in \c HashDataType
        (<a href="https://github.com/qorelanguage/qore/issues/4491">issue 4491</a>)
    - <a href="../../modules/FsUtil/html/index.html">FsUtil</a> module
      - fixed join_paths() to handle an arbitrary number of paths as arguments (the most common use case)
        (<a href="https://github.com/qorelanguage/qore/issues/4495">issue 4495</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - improved error handling and sending error messages when exceptions contain non-serializable objects
        (<a href="https://github.com/qorelanguage/qore/issues/4501">issue 4501</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
       - fixed a bug where global \c consumes and \c produces declarations were not respected
        (<a href="https://github.com/qorelanguage/qore/issues/4494">issue 4494</a>)
    - Fixed a bug handling reference assignments and calculating matches with overloaded functions and methods
      (<a href="https://github.com/qorelanguage/qore/issues/4503">issue 4503</a>)
    - Fixed a bug with compilers that do not guarantee left to right argument execution order such as g++ 12+; note
      that the C++ standard does not guarantee this in any case
      (<a href="https://github.com/qorelanguage/qore/issues/4493">issue 4493</a>)
    - Fixed @ref cast "cast<> operator" handling of "or nothing" types at parse and runtime
      (<a href="https://github.com/qorelanguage/qore/issues/4497">issue 4497</a>)
    - Load the \c default provider with OpenSSL3+ to make it work on platforms where this provider is not
      automatically loaded (ex: Fedora 36)
      (<a href="https://github.com/qorelanguage/qore/issues/4394">issue 4394</a>)

    @section qore_1_7_0 Qore 1.7.0

    @par Release Summary
    Bugfix release with minor new features; see below for more information

    @subsection qore_1_7_0_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added an attribute to factories to indicate if any children can support the request-response pattern
        (<a href="https://github.com/qorelanguage/qore/issues/4486">issue 4486</a>)
      - added the \c DTT_ClientOnly type tag constant
        (<a href="https://github.com/qorelanguage/qore/issues/4477">issue 4477</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - implemented support for allowing alternate REST method dispatch approaches to be implemented
        (<a href="https://github.com/qorelanguage/qore/issues/4478">issue 4478</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - applied the \c DTT_ClientOnly type tag to client-only constructor options
        (<a href="https://github.com/qorelanguage/qore/issues/4477">issue 4477</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module
      - added \c get_relative_path()
        (<a href="https://github.com/qorelanguage/qore/issues/4488">issue 4488</a>)

    - implemented the following new types:
      - @ref base64binary_type
      - @ref hexbinary_type

    @subsection qore_1_7_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - fixed a bug where \c SwaggerDataProvider did not report binary and date types correctly
        (<a href="https://github.com/qorelanguage/qore/issues/4484">issue 4484</a>)
      - fixed a bug where \c SwaggerDataProvider::getDesc() throws an exception when created without a \c RestClient
        option
        (<a href="https://github.com/qorelanguage/qore/issues/4475">issue 4475</a>)
      - fixed a bug where the "from file" tag was not respected in constructor options
        (<a href="https://github.com/qorelanguage/qore/issues/4473">issue 4473</a>)

    @section qore_1_6_0 Qore 1.6.0

    @par Release Summary
    Release with minor new features; see below for more information

    @subsection qore_1_6_0_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added the \c desc key supporting a markdown description to data provider info
        (<a href="https://github.com/qorelanguage/qore/issues/4465">issue 4465</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - implemented options supporting suppressing data provider calls on input and output
        (<a href="https://github.com/qorelanguage/qore/issues/4462">issue 4462</a>)
    - Added @ref Qore::HTTPClient::getSafeURL() "HTTPClient::getSafeURL()" and
      @ref Qore::HTTPClient::getSafeProxyURL() "HTTPClient::getSafeProxyURL()"
      (<a href="https://github.com/qorelanguage/qore/issues/4466">issue 4466</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - implemented support for enum types
        (<a href="https://github.com/qorelanguage/qore/issues/4368">issue 4368</a>)

    @subsection qore_1_6_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - fixed a bug where %DataProvider types based on string that accept multiple input types with conversions but
        are not soft types threw spurious errors at runtime with non-string types
        (<a href="https://github.com/qorelanguage/qore/issues/4471">issue 4471</a>)
      - fixed a bug where hash types incorrectly claimed compatibility with incompatible hashes
        (<a href="https://github.com/qorelanguage/qore/issues/4463">issue 4463</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - fixed an error mapping bulk data with custom output field handlers (regression)
        (<a href="https://github.com/qorelanguage/qore/issues/4460">issue 4460</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - fixed a bug where request messages were not validated and processed correctly
        (<a href="https://github.com/qorelanguage/qore/issues/4469">issue 4469</a>)

    @section qore_1_5_1 Qore 1.5.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_5_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - fixed an error mapping bulk data with custom output field handlers
        (<a href="https://github.com/qorelanguage/qore/issues/4460">issue 4460</a>)

    @section qore_1_5_0 Qore 1.5.0

    @par Release Summary
    Release with minor new features; see below for more information

    @subsection qore_1_5_0_new_features New Features in Qore
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a>
      - added support for resolving locations with the
        <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module
        (<a href="https://github.com/qorelanguage/qore/issues/4456">issue 4456</a>)
    - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a>
      - added support for resolving locations with the
        <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module
        (<a href="https://github.com/qorelanguage/qore/issues/4456">issue 4456</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
      - added supoport for the \c XML, \c JSON, and \c JSONB types
        (<a href="https://github.com/qorelanguage/qore/issues/4448">issue 4448</a>)

    @subsection qore_1_5_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - fixed a type error iterating data in \c DefaultBulkRecordIterface
        (<a href="https://github.com/qorelanguage/qore/issues/4457">issue 4457</a>)

    @section qore_1_4_0 Qore 1.4.0

    @par Release Summary
    Release with minor new features; see below for more information

    @subsection qore_1_4_0_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added support for tags on data provider types (i.e. \c DataProvider::AbstractDataProviderType)
        (<a href="https://github.com/qorelanguage/qore/issues/4442">issue 4442</a>)
      - fixed data provider factory info to provide info about the actual data provider factory instead of only
        provider info; note that the data provider factory abstract API has changed with this fix
        (<a href="https://github.com/qorelanguage/qore/issues/4438">issue 4438</a>)
      - Added "from example" APIs to data provider factories:
        - \c AbstractDataProviderFactory::getExampleProviderRecordOutput()
        - \c AbstractDataProviderFactory::getProviderFromExample()
        (<a href="https://github.com/qorelanguage/qore/issues/4433">issue 4433</a>)
      - Added generic search capabilities to data providers with no native search functionality
        (<a href="https://github.com/qorelanguage/qore/issues/4430">issue 4430</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module
      - Implemented the \c serialize_to_string() API
        (<a href="https://github.com/qorelanguage/qore/issues/4428">issue 4428</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - Added missing \c make*() methods with REST responses to the \c RestHandler class
    - added the @ref Qore::CipherMap "CipherMap" constant providing a hash of known ciphers
    - new functions:
      - @ref Qore::get_cipher_info() "get_cipher_info()"
      - @ref Qore::has_digest() "has_digest()"

    @subsection qore_1_4_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/Util/html/index.html">Util</a> module
      - \c parse_uri_query() fails if the string has newlines in it
        (<a href="https://github.com/qorelanguage/qore/issues/4429">issue 4429</a>)
    - Fixed building on the latest versions of Alpine (v3.15)
      (<a href="https://github.com/qorelanguage/qore/issues/4444">issue 4444</a>)
    - Support for OpenSSL 3+ added; when %Qore is compiled with OpenSS 3 or greater, all cipher and digest algorithms
      known to the encryption library are supported with dynamic APIs
      (<a href="https://github.com/qorelanguage/qore/issues/4394">issue 4394</a>)
    - Removed code that generated unnecessary \c ILLEGAL-CALL exceptions at parse time
      (<a href="https://github.com/qorelanguage/qore/issues/4404">issue 4404</a>)

    @section qore_1_3_0 Qore 1.3.0

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_3_0_new_features New Features in Qore
    - <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module
      - updated for read/write operations and added streaming APIs
        (<a href="https://github.com/qorelanguage/qore/issues/4424">issue 4424</a>)
    - added an optional \a encoding parameter to the @ref Qore::FtpClient::getAsString() "FtpClient::getAsString()"
      API

    @subsection qore_1_3_0_bug_fixes Bug Fixes in Qore
    - fixed a bug handling committing parse operations where final checks were not always made before committing
      (<a href="https://github.com/qorelanguage/qore/issues/4426">issue 4426</a>)
    - fixed return type for <tt>Type::isAssignableFrom(Type)</tt> in the
      <a href="../../modules/reflection/html/index.html">reflection</a> module
      (<a href="https://github.com/qorelanguage/qore/issues/4423">issue 4423</a>)
    - fixed bugs in variant matching that could lead to unexpected results at runtime as well as errors with inherited
      Java code
      (<a href="https://github.com/qorelanguage/qore/issues/4421">issue 4421</a>)
    - fixed a bug dispatching method and function calls at runtime in certain cases
      (<a href="https://github.com/qorelanguage/qore/issues/4419">issue 4419</a>)

    @section qore_1_2_0 Qore 1.2.0

    @par Release Summary
    Minor new features added to %Qore

    @subsection qore_1_2_0_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added a logger to the \c AbstractDataProvider class to enable logging
        (<a href="https://github.com/qorelanguage/qore/issues/4409">issue 4409</a>)
      - added support for creating, updating, and deleting data providers
        (<a href="https://github.com/qorelanguage/qore/issues/4395">issue 4395</a>)
    - <a href="../../modules/DbDataProvider/html/index.html">DbDataProvider</a> module
      - added support for creating, updating, and deleting data providers
        (<a href="https://github.com/qorelanguage/qore/issues/4395">issue 4395</a>)

    @subsection qore_1_2_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a> module
      - fixed a bug where \c offset and \c limit were not properly supported with MS SQL Server DBs
        (<a href="https://github.com/qorelanguage/qore/issues/4408">issue 4408</a>)
      - fixed a bug where date/time values in other time zones were not bound correctly
        (<a href="https://github.com/qorelanguage/qore/issues/4403">issue 4403</a>)
      - fixed a bug handling transaction savepoints
        (<a href="https://github.com/qorelanguage/qore/issues/4402">issue 4402</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module
      - allow a \c VARCHAR column to be created without a size, assume a default size
        (<a href="https://github.com/qorelanguage/qore/issues/4399">issue 4399</a>)
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module
      - allow a \c VARCHAR column to be created without a size, assume a default size
        (<a href="https://github.com/qorelanguage/qore/issues/4399">issue 4399</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
      - fixed a bug where objects created did not always contain the actual name used to create it
        (<a href="https://github.com/qorelanguage/qore/issues/4396">issue 4396</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module
      - respect "or nothing" %Qore types when mapping to column types
        (<a href="https://github.com/qorelanguage/qore/issues/4400">issue 4400</a>)
    - fixed a bug in certain type errors involving complex types where the specific complex type was omitted from the
      error message
      (<a href="https://github.com/qorelanguage/qore/issues/4412">issue 4412</a>)
    - fixed a bug initializing constant values at parse time; now all constant expressions requiring evaluation are
      evaluated after all other parsing is done
      (<a href="https://github.com/qorelanguage/qore/issues/4404">issue 4404</a>)

    @section qore_1_1_0 Qore 1.1.0

    @par Release Summary
    Minor new features added to %Qore

    @subsection qore_1_1_0_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - added <tt>DataProviderTypeCache::listParentTypes()</tt> to allow a list of parent types to be returned
        (<a href="https://github.com/qorelanguage/qore/issues/4385">issue 4385</a>)
    - added a the following new method:
      - @ref Qore::StringOutputStream::hasData() "StringOutputStream::hasData()"
    - @ref rethrow "rethrow" now accepts optional exception arguments to allow exceptions to be enriched in a \c catch
      block while maintaining the original call stack, and the @ref on_error "on_error statement" now includes an
      implicit argument <tt>$1</tt> giving the currently-active exception, additionally,
      @ref rethrow "rethrow statements" are now allowed in @ref on_error "on_error statement" blocks to allow for
      exception enrichment without requiring a @ref try "try/catch block".
      (<a href="https://github.com/qorelanguage/qore/issues/2104">issue 2104</a>)

    @subsection qore_1_1_0_bug_fixes Bug Fixes in Qore
    - fixed a bug in the stack guard implementation where additional guard area was needed in the primary thread on
      some platforms
      (<a href="https://github.com/qorelanguage/qore/issues/4392">issue 4392</a>)
    - fixed bugs tagging functions and constants provided by builtin modules with their module name; required to
      consistently provide unique binary names when imported into Java, for example
      (<a href="https://github.com/qorelanguage/qore/issues/4383">issue 4383</a>)
    - fixed a bug initializing constant values that could result in spurious errors
      (<a href="https://github.com/qorelanguage/qore/issues/4382">issue 4382</a>)
    - added regex APIs to the C++ string class
      (<a href="https://github.com/qorelanguage/qore/issues/4379">issue 4379</a>)
    - added a warning for constant operands with the square bracket operator that are not integers
      (<a href="https://github.com/qorelanguage/qore/issues/3409">issue 3409</a>)
    - fixed a bug handling EOF conditions while parsing the final part of regular expressions
      (<a href="https://github.com/qorelanguage/qore/issues/2096">issue 2096</a>)

    @section qore_1_0_13 Qore 1.0.13

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_13_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - fixed a bug where it was not possible to use a Mapper with an output provider only for the output data type
        (<a href="https://github.com/qorelanguage/qore/issues/4369">issue 4369</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - fixed a regression caused by the bug fix for recursive data structions in the previous version of %Qore
        (<a href="https://github.com/qorelanguage/qore/issues/4351">issue 4351</a>)
    - fixed bugs tagging namespaces provided by builtin modules with their module name; required to consistently
      provide unique binary names when imported into Java, for example
      (<a href="https://github.com/qorelanguage/qore/issues/4378">issue 4378</a>)
    - updated <a href="../../modules/QUnit/html/index.html">QUnit</a> constructors to work better with Python and Java
      subclasses
      (<a href="https://github.com/qorelanguage/qore/issues/4377">issue 4377</a>)
    - added internal C++ APIs to allow namespaces to store language-specific information to facilitate bridging %Python
      and Java through the \c python and \c jni modules
      (<a href="https://github.com/qorelanguage/qore/issues/4373">issue 4373</a>)
    - fixed a bug in \c qpp (the %Qore C++-pre-processor used for building %Qore from sources) that failed to
      recognize methods with multi-line signatures
      (<a href="https://github.com/qorelanguage/qore/issues/4366">issue 4366</a>)
    - removed invalid <tt>assert()</tt>s that caused an unnecessary crash with debug builds when destructors caused
      program local data to be created in destructors while destroying a @ref Qore::Program "Program" object
      (<a href="https://github.com/qorelanguage/qore/issues/4299">issue 4299</a>)

    @section qore_1_0_12 Qore 1.0.12

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_12_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - implemented \c AbstractDataProvider::beginTransaction() to support starting a transaction in data providers
        that support transaction management
        (<a href="https://github.com/qorelanguage/qore/issues/4346">issue 4346</a>)
    - <a href="../../modules/DbDataProvider/html/index.html">DbDataProvider</a> module
      - implemented \c DbDataProvider::beginTransaction() and \c DbTableDataProvider::beginTransaction() to support
        starting a transaction when using the \c AbstractDataProvider API with databases and tables
        (<a href="https://github.com/qorelanguage/qore/issues/4346">issue 4346</a>)
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
      - fixed a bug where incorrect URI decoding was applied to URLs in received HTTP messages instead of URL decoding
        (<a href="https://github.com/qorelanguage/qore/issues/4363">issue 4363</a>)
    - <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module
      - various fixes from downstream to mail message data handling
        (<a href="https://github.com/qorelanguage/qore/issues/4352">issue 4352</a>)
    - <a href="../../modules/Mime/html/index.html">Mime</a> module
      - various fixes from downstream to Mime data handling
        (<a href="https://github.com/qorelanguage/qore/issues/4352">issue 4352</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
      - fixed handling column names that use reserved words
        (<a href="https://github.com/qorelanguage/qore/issues/4348">issue 4348</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      - removed erroneous / extraneous URI encoding on REST paths before sending
        (<a href="https://github.com/qorelanguage/qore/issues/4360">issue 4360</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module
      - fixed upsert usage with unique constraints and indices when there is a non-matching PK
        (<a href="https://github.com/qorelanguage/qore/issues/4347">issue 4347</a>)
      - implemented \c AbstracTable::beginTransaction() to support starting a transaction when using the \c SqlUtil
        API with databases and tables
        (<a href="https://github.com/qorelanguage/qore/issues/4346">issue 4346</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module
      - fixed a bug where schemas with recursive references could not be loaded
        (<a href="https://github.com/qorelanguage/qore/issues/4350">issue 4350</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module
      - fixed a bug where recursive definitions in a Swagger schema resulted in runtime errors using the schema
        (<a href="https://github.com/qorelanguage/qore/issues/4351">issue 4351</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module
      - fixed a bug in \c parse_to_qore_value() with floats and numbers with trailing zeros
        (<a href="https://github.com/qorelanguage/qore/issues/4349">issue 4349</a>)
    - fixed issues encoding URLs in the @ref Qore::HTTPClient "HTTPClient" class according to
      <a href="https://datatracker.ietf.org/doc/html/rfc1738#section-2.2">RFC 1738 section 2.2</a>
      (<a href="https://github.com/qorelanguage/qore/issues/4361">issue 4361</a>)
    - fixed a bug parsing URLs with a query after the port (ex: \c "http://host:1234?query=true")
      (<a href="https://github.com/qorelanguage/qore/issues/4358">issue 4358</a>)
    - fixed a crashing bug when sorting large lists in background threads caused by excessive recursion and stack
      exhaustion
      (<a href="https://github.com/qorelanguage/qore/issues/4355">issue 4355</a>)
    - fixed a bug that caused a core dump with implicit object method calls in arguments in the
      @ref background "background operator" expression
      (<a href="https://github.com/qorelanguage/qore/issues/4344">issue 4344</a>)

    @section qore_1_0_11 Qore 1.0.11

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_11_bug_fixes Bug Fixes in Qore
    - cmake builds broken without a build directory
      (<a href="https://github.com/qorelanguage/qore/issues/4341">issue 4341</a>)

    @section qore_1_0_10 Qore 1.0.10

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_10_bug_fixes Bug Fixes in Qore
    - fixed a bug in calculating abstract overrides in child classes that could cause spurious errors
      (<a href="https://github.com/qorelanguage/qore/issues/4338">issue 4338</a>)
    - implemented the @ref Qore::parse_url(string, __7_ int) variant to allow for percent decoding in URL strings
      (<a href="https://github.com/qorelanguage/qore/issues/4332">issue 4332</a>)
    - fixed C++ foreign thread registration APIs to support TID reuse to provide thread affinity for language
      modules such as Python and Java with successive rapid transitions into %Qore in callbacks
      (<a href="https://github.com/qorelanguage/qore/issues/4331">issue 4331</a>)

    @section qore_1_0_9 Qore 1.0.9

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_9_bug_fixes Bug Fixes in Qore
    - fixed stack size reporting for the initial thread on Linux; Linux autoextends the initial thread in any case,
      so a large stack size is reported (8MB) regardless of the actual stack size reported by pthreads APIs; this
      allows code that requires a larger stack to run normally on Linux platforms that allocate a small initial stack
      (such as Alpine, for example, current versions allocate a 128KiB stack which caused stack exceptions in %Qore or
      recursion exceptions in Python to be thrown in the main thread with code that would otherwise work on Linux)
      (<a href="https://github.com/qorelanguage/qore/issues/4325">issue 4325</a>)

    @section qore_1_0_8 Qore 1.0.8

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_8_bug_fixes Bug Fixes in Qore
    - fixed stack size reporting for the initial thread to reflect the actual stack size used instead of the default
      stack size for new threads; this allows the python module to correctly calculate the recusion depth for Python
      modules, allowing more Python modules to be loaded without changing the default stack size in single-threaded
      programs
      (<a href="https://github.com/qorelanguage/qore/issues/4323">issue 4323</a>)

    @section qore_1_0_7 Qore 1.0.7

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_7_new_feature New Features
    - new pseudo-methods:
      - <string>::splitRegex()

    @subsection qore_1_0_7_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
      - \c HttpServer::addListeners() has no mechanism for returning errors to the caller
        (<a href="https://github.com/qorelanguage/qore/issues/4312">issue 4312</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - fixed bugs handling escaped \c "." characters in field names
        (<a href="https://github.com/qorelanguage/qore/issues/4315">issue 4315</a>)
    - fixed a bug where the return type of @ref map "map" expressions would be reported incorrectly at parse time
      when the iterator expression was a constant value
      (<a href="https://github.com/qorelanguage/qore/issues/4319">issue 4319</a>)
    - fixed a bug where the return type of @ref map "map" expressions would be stripped of complex type information at
      runtime when the iterator experssion was an @ref Qore::AbstractIterator "AbstractIterator" object
      (<a href="https://github.com/qorelanguage/qore/issues/4318">issue 4318</a>)

    @section qore_1_0_6 Qore 1.0.6

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_6_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - return the \c base_type key in input type info in
        \ AbstractDataProviderType::getInputInfo()
        (<a href="https://github.com/qorelanguage/qore/issues/4311">issue 4311</a>)

    @section qore_1_0_5 Qore 1.0.5

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_5_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DbDataProvider/html/index.html">DbDataProvider</a> module
      - detect duplicate insert errors and throw a DUPLICATE-RECORD exception with record creation errors
        (<a href="https://github.com/qorelanguage/qore/issues/4308">issue 4308</a>)
    - <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a> module
      - added APIs to enable duplicate record creation errors to be detected
        (<a href="https://github.com/qorelanguage/qore/issues/4308">issue 4308</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - fixed handling automatically-acquired input and output data structions with dots in field names; un-deprecated
        the \c allow_dot and \c allow_output_dot options
        (<a href="https://github.com/qorelanguage/qore/issues/4309">issue 4309</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module
      - added APIs to enable duplicate record creation errors to be detected
        (<a href="https://github.com/qorelanguage/qore/issues/4308">issue 4308</a>)
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module
      - added APIs to enable duplicate record creation errors to be detected
        (<a href="https://github.com/qorelanguage/qore/issues/4308">issue 4308</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
      - added APIs to enable duplicate record creation errors to be detected
        (<a href="https://github.com/qorelanguage/qore/issues/4308">issue 4308</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module
      - added APIs to enable duplicate record creation errors to be detected
        (<a href="https://github.com/qorelanguage/qore/issues/4308">issue 4308</a>)

    @section qore_1_0_4 Qore 1.0.4

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_4_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module
      - greatly improved dataprovider and type acquisition speed from clients requiring initialization from the environment
        (<a href="https://github.com/qorelanguage/qore/issues/4305">issue 4305</a>)

    @section qore_1_0_3 Qore 1.0.3

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_3_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module
      - fixed a bug where keywords were not properly quoted in merge / upsert statements
        (<a href="https://github.com/qorelanguage/qore/issues/4297">issue 4297</a>)
    - <a href="../../modules/ServiceNowRestClient/html/index.html">ServiceNowRestClient</a> module
      - updated to no longer require OAuth2 login params
        (<a href="https://github.com/qorelanguage/qore/issues/4295">issue 4295</a>)
    - <a href="../../modules/ServiceNowRestDataProvider/html/index.html">ServiceNowRestDataProvider</a> module
      - updated to no longer require OAuth2 login params
        (<a href="https://github.com/qorelanguage/qore/issues/4295">issue 4295</a>)
    - added internal library APIs to allow modules to determine the injection target class for objects that
      implement classes that have been injected
      (<a href="https://github.com/qorelanguage/qore/issues/4301">issue 4301</a>)

    @section qore_1_0_2 Qore 1.0.2

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_2_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module
      - fixed a bug handling errors registering stream errors with a stream handler
        (<a href="https://github.com/qorelanguage/qore/issues/4291">issue 4291</a>)

    @section qore_1_0_1 Qore 1.0.1

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_1_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
      - allow dynamic handlers to be removed without waiting for all connections to terminate
        (<a href="https://github.com/qorelanguage/qore/issues/4273">issue 4273</a>)
      - allow for full logging of authentication errors if HTTP server debugging is enabled
        (<a href="https://github.com/qorelanguage/qore/issues/4217">issue 4217</a>)
    - fixed a bug matching types at parse time that could cause unexpected and confusing results
      (<a href="https://github.com/qorelanguage/qore/issues/4284">issue 4284</a>)
    - fixed abstract method matching in inherited Java classes overriding abstract methods
      (<a href="https://github.com/qorelanguage/qore/issues/4282">issue 4282</a>)
    - fixed a bug where trying to export or import code in other languages in a @ref Qore::Program "Program"
      object with pending parse structures could cause a crash
      (<a href="https://github.com/qorelanguage/qore/issues/4279">issue 4279</a>)
    - fixed a bug in @ref Qore::sleep() and @ref Qore::usleep() where calls could return early on platforms with
      \c nanosleep() if a signal arrived when sleeping
      (<a href="https://github.com/qorelanguage/qore/issues/4275">issue 4275</a>)

    @section qore_1_0 Qore 1.0

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_1_0_compatibility Fixes That Can Affect Backwards-Compatibility
    - Some server-side APIs have changed due to the integration of the
      <a href="../../modules/Logger/html/index.html">Logger</a> module in the
      <a href="../../modules/HttpServer/html/index.html">HttpServer</a> and the
      <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> modules, in particular the
      \a errorlogger listener option has been removed, and the type of the \a logger listener option has been
      updated to require a \c Logger object.  Additionally, deprecated APIs have been removed from these modules.
    - Implemented the @ref invalid-catch "invalid-catch" warning when types are required by parse options, byt the
      exception variable declaration has no type; this was also added to the default warning mask for modules

    @subsection qore_1_0_new_features New Features in Qore
    - added support for <a href="https://alpinelinux.org/">Alpine Linux</a>
    - added support for @ref thread_local_variables "thread-local global variables"; see the
      @ref thread_local "thread_local" keyword
    - new constants:
      - @ref Qore::PO_NO_INHERIT_PROGRAM_DATA "PO_NO_INHERIT_PROGRAM_DATA"
      - @ref Qore::WARN_INVALID_CATCH "WARN_INVALID_CATCH"
    - updated methods:
      - @ref <value>::fullType()
    - type errors with function and method resolution will report the full namespace paths of class and hashdecl
      types
    - %Qore builds now support outputting javadoc for %Qore sources to support code completion in Java IDEs for
      dynamic imports of %Qore APIs
    - fixed bugs reporting parse errors where a single error could cause many more unrelated errors to be output
    - module updates:
      - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module:
        - updated the \c AbstractConnection::getInfo() method
        - added the \c AbstractConnection::getExtendedInfo() method
      - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module:
        - added the \c limit search option to the \c DefaultRecordIterator class
          (<a href="https://github.com/qorelanguage/qore/issues/4225">issue 4225</a>)
      - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module:
        - allow dynamic handlers to be disabled before being removed
          (<a href="https://github.com/qorelanguage/qore/issues/4173">issue 4173</a>)
        - integrated the <a href="../../modules/Logger/html/index.html">Logger</a> module
        - removed deprecated APIs
      - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> module:
        - integrated the <a href="../../modules/Logger/html/index.html">Logger</a> module
      - <a href="../../modules/Logger/html/index.html">Logger</a> module:
        - added support for the \c %%h and \c %%P patterns for hostname and PID, respectively
          (<a href="https://github.com/qorelanguage/qore/issues/4179">issue 4179</a>)
        - allow file appenders to be reopened
          (<a href="https://github.com/qorelanguage/qore/issues/4171">issue 4171</a>)
        - enable serialization for \c LoggerEvent objects as well as for them to be submitted
          directly to \c Logger objects
          (<a href="https://github.com/qorelanguage/qore/issues/4164">issue 4164</a>)

    @subsection qore_1_0_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - connection path options are subjected to environment variable substitution
        (<a href="https://github.com/qorelanguage/qore/issues/4236">issue 4236</a>)
    - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> module
      - fixed a bug handling wildcard address binds in \c http_get_url_from_bind()
        (<a href="https://github.com/qorelanguage/qore/issues/4266">issue 4266</a>)
    - <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module
      - fixed message serialization for SMTP handling; default to base64 encoding for attachments and if the message
        body has a single \c "." character on a line; convert any single \c "." characters on a line to two \c ".."
        characters if using only quoted printable encoding
        (issue <a href="https://github.com/qorelanguage/qore/issues/3275">issue 3275</a>)
    - <a href="../../modules/Mime/html/index.html">Mime</a> module
      - fixed bugs parsing binary data in multipart messages
        (<a href="https://github.com/qorelanguage/qore/issues/4223">issue 4223</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
      - fixed bugs dropping foreign constraints and indices when aligning tables
        (<a href="https://github.com/qorelanguage/qore/issues/4246">issue 4246</a>)
    - <a href="../../modules/Qdx/html/index.html">Qdx</a> module
      - fixed stripping the final <tt>\\</tt> character in multi-line entries in tables
        (<a href="https://github.com/qorelanguage/qore/issues/4195">issue 4195</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module
      - fixed a bug handling foreign constraints backed by indices on DBs that link indices and constraints
        automatically
        (<a href="https://github.com/qorelanguage/qore/issues/4269">issue 4269</a>)
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module
      - fixed message serialization for SMTP handling in case of single \c "." characters on a line in serialized data
        (issue <a href="https://github.com/qorelanguage/qore/issues/3275">issue 3275</a>)
    - fixed a bug where negative timeouts with lock methods and internal condition variable wait calls would return
      immediately instead of waiting indefinitely with some objects
      (<a href="https://github.com/qorelanguage/qore/issues/4263">issue 4263</a>)
    - fixed bugs reporting parse errors where a single error could cause many more unrelated errors to be output
      (<a href="https://github.com/qorelanguage/qore/issues/4260">issue 4260</a>)
    - fixed a bug in method resolution in class hierarchies that could lead to spurious parse errors
      (<a href="https://github.com/qorelanguage/qore/issues/4250">issue 4250</a>)
    - fixed a bug handling @ref softlist_complex_type "complex softlist<...>" values where illegal matches were
      allowed under some circumstances leading to runtime errors
      (<a href="https://github.com/qorelanguage/qore/issues/4184">issue 4184</a>)
    - fixed a bug handling \c private:internal members in base classes with multiple inheritance
      (<a href="https://github.com/qorelanguage/qore/issues/4175">issue 4175</a>)
    - fixed a bug in @ref Qore::Socket "Socket" where multiple \c Content-Length headers could be sent in HTTP
      responses
      (<a href="https://github.com/qorelanguage/qore/issues/4168">issue 4168</a>)
    - fixed a crash when adding the same module from a path multiple times with debug builds
      (<a href="https://github.com/qorelanguage/qore/issues/4159">issue 4159</a>)
    - fixed bugs handling namespaces in imported binary classes
      (<a href="https://github.com/qorelanguage/qore/issues/4142">issue 4142</a>)
    - fixed line number reporting for statements and expressions where the first element is optional
      (<a href="https://github.com/qorelanguage/qore/issues/2946">issue 2946</a>)
    - added a warning when strings and non scalar types are mixed with the @ref plus_operator "+" and
      @ref plus_equals_operator "+=" operators; these operations are errors when @ref strict-types "%strict-types"
      is in effect
      (<a href="https://github.com/qorelanguage/qore/issues/2943">issue 2943</a>)
    - fixed a bug where the \c ";charset=xxx" string was not added to the \c Content-Type header when sending HTTP
      messages with strings with non-ISO-8859-1 character encodings
      (<a href="https://github.com/qorelanguage/qore/issues/1824">issue 1824</a>)

    @section qore_0915 Qore 0.9.15

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_0915_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a>
      - fixed a bug where the @ref data_type "data" type was not supported correctly as a data provider type
        (<a href="https://github.com/qorelanguage/qore/issues/4232">issue 4232</a>)
    - fixed a potential crash when raising a large number of exceptions or parse warnings that can cause an unprotected
      stack exhaustion error; max 20 exceptions can be raised at any one time; the rest are ignored
      (<a href="https://github.com/qorelanguage/qore/issues/4257">issue 4257</a>)
    - fixed a potential deadlock loading user modules with complex initialization code
      (<a href="https://github.com/qorelanguage/qore/issues/4254">issue 4254</a>)
    - fixed a bug where SSL errors were not properly cleared before I/O operations in all cases, leading to incorrect
      spurious errors being raised in rare cases
      (<a href="https://github.com/qorelanguage/qore/issues/4242">issue 4242</a>)
    - fixed a bug where empty binary values could not be deserialized
      (<a href="https://github.com/qorelanguage/qore/issues/4238">issue 4238</a>)
    - fixed handling %Qore program destruction in a foreign thread in a binary module that could cause a crash
      (<a href="https://github.com/qorelanguage/qore/issues/4228">issue 4228</a>)

    @section qore_0914 Qore 0.9.14

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_0914_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module updates:
      - fixed a bug where pseudocolumn references were used ambiguously in joins
        (<a href="https://github.com/qorelanguage/qore/issues/4214">issue 4214</a>)
      - fixed a bug where pseudocolumn names were quoted in queries leading to errors
        (<a href="https://github.com/qorelanguage/qore/issues/4210">issue 4210</a>)
      - fixed a bug generating queries with \c limit and \c forupdate
        (<a href="https://github.com/qorelanguage/qore/issues/4206">issue 4206</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module updates:
      - fixed a bug where pseudocolumn references were used ambiguously in joins
        (<a href="https://github.com/qorelanguage/qore/issues/4214">issue 4214</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module updates:
      - fixed a bug where unknown string format types were not ignored but instead caused an exception to be thrown
        (<a href="https://github.com/qorelanguage/qore/issues/4203">issue 4203</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module updates:
      - fixed a bug in \c parse_memory_size() with numbers larger than \c 9
        (<a href="https://github.com/qorelanguage/qore/issues/4198">issue 4198</a>)
    - fixed module path handling on Windows to respect the \c ';' separator as well as the \c ':' character
      (<a href="https://github.com/qorelanguage/qore/issues/4154">issue 4154</a>)

    @section qore_0913 Qore 0.9.13

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_0913_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module updates:
      - fixed a bug handling the \c struct key in mappers
        (<a href="https://github.com/qorelanguage/qore/issues/4189">issue 4189</a>)

    @section qore_0912 Qore 0.9.12

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_0912_bug_fixes Bug Fixes in Qore
    - fixed path handling on Windows to respect the \c ';' separator
      (<a href="https://github.com/qorelanguage/qore/issues/4154">issue 4154</a>)

    @section qore_0911 Qore 0.9.11

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_0911_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a>
      - updated read and write data providers to provide verbose option support
        (<a href="https://github.com/qorelanguage/qore/issues/4139">issue 4139</a>)
      - implemented support for the missing \c bool and <tt>*bool</tt> types
        (<a href="https://github.com/qorelanguage/qore/issues/4118">issue 4118</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a>
      - fixed an issue where it was not possible for pipeline to flush any pending data or to perform reset or purge
        operations when pipeline processing is complete; for this the \c AbstractDataProcessor::flush() and
        \c AbstractDataProcessor::flushImpl() methods were implemented
        (<a href="https://github.com/qorelanguage/qore/issues/4107">issue 4107</a>)
    - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a>
      - updated read and write data providers to provide verbose option support
        (<a href="https://github.com/qorelanguage/qore/issues/4139">issue 4139</a>)
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a>
      - fixed a bug shutting down dedicated socket I/O handlers
        (<a href="https://github.com/qorelanguage/qore/issues/4130">issue 4130</a>)
      - fixed a bug where invalid HTTP responses were sent with error messages and chunked transfer encoding
        (<a href="https://github.com/qorelanguage/qore/issues/4124">issue 4124</a>)
      - fixed a bug where HTTP stream handlers could not also implement protocol switching
        (<a href="https://github.com/qorelanguage/qore/issues/4111">issue 4111</a>)
    - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a>
      - fixed a bug where it was not possible to include CORS headers or any context-sensitive information in a 401
        response
        (<a href="https://github.com/qorelanguage/qore/issues/4136">issue 4136</a>)
      - fixed a bug where HTTP stream handlers could not also implement protocol switching
        (<a href="https://github.com/qorelanguage/qore/issues/4111">issue 4111</a>)
      - fixed a bug handling responses to streaming requests with \c HEAD requests with a
        <tt>Transfer-Encoding: chunked</tt> response
        (<a href="https://github.com/qorelanguage/qore/issues/4109">issue 4109</a>)
    - <a href="../../modules/ServiceNowRestDataProvider/html/index.html">ServiceNowRestDataProvider</a>
      - fixed a type error in DataProvider API support
        (<a href="https://github.com/qorelanguage/qore/issues/4104">issue 4104</a>)
    - fixed support for 64-bit ARM CPUs; added stack guard support
      (<a href="https://github.com/qorelanguage/qore/issues/3965">issue 3965</a>)
    - fixed a bug handling types in assignments with complex hashes
      (<a href="https://github.com/qorelanguage/qore/issues/4133">issue 4133</a>)
    - fixed a bug in the @ref remove "remove" operator when used with a slice of a hash or an object; hash keys for
      nonexistent values were returned in a manner inconsistnent with the hash slice operator when not used with the
      @ref remove "remove" operator
      (<a href="https://github.com/qorelanguage/qore/issues/4122">issue 4122</a>)
    - fixed a bug in the @ref cast "cast<>" operator; invalid exceptions were raised during parsing for
      values that could still inherit the target class; the check must only be made at runtime
      (<a href="https://github.com/qorelanguage/qore/issues/4113">issue 4113</a>)
    - fixed a bug in the @ref instanceof "instanceof" operator; invalid exceptions were raised during parsing for
      values that could still inherit the target class; the check must only be made at runtime
      (<a href="https://github.com/qorelanguage/qore/issues/4112">issue 4112</a>)
    - fixed a bug where it was not possible to poll for I/O on more than one @ref Qore::Socket "Socket" at a time; for
      this the @ref Qore::Socket::poll() "Socket::poll()" static method was implemented
      (<a href="https://github.com/qorelanguage/qore/issues/4069">issue 4069</a>)

    @section qore_0910 Qore 0.9.10

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_0910_new_modules New Modules in Qore
    - <a href="../../modules/ServiceNowRestClient/html/index.html">ServiceNowRestClient</a>: provides APIs for
      communicating with the ServiceNow REST API
    - <a href="../../modules/ServiceNowRestDataProvider/html/index.html">ServiceNowRestDataProvider</a>: Provides a
        <a href="../../modules/DataProvider/html/index.html">data provider</a> API for the ServiceNow REST API

    @subsection qore_0910_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/WebUtil/html/index.html">WebUtil</a> module updates:
      - fixed a bug serving files did not work in server contexts with multiple threads
        (<a href="https://github.com/qorelanguage/qore/issues/4096">issue 4096</a>)
    - fixed an invalid assert in class handling in complex hierarchies
      (<a href="https://github.com/qorelanguage/qore/issues/4094">issue 4094</a>)

    @section qore_099 Qore 0.9.9

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_099_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
      - additional fixes to REST path handling with schema validators with a base path
        (<a href="https://github.com/qorelanguage/qore/issues/4059">issue 4059</a>)

    @section qore_098 Qore 0.9.8

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_098_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module updates:
      - fixed a bug where CSV iteration would fail if a quoted field had a line break in it
        (<a href="https://github.com/qorelanguage/qore/issues/4079">issue 4079</a>)
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module updates:
      - fixed handling WebSocket message fragmentation
        (<a href="https://github.com/qorelanguage/qore/issues/4073">issue 4073</a>)
    - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a> module updates:
      - fixed a bug handling closing server-side web sockets on demand
        (<a href="https://github.com/qorelanguage/qore/issues/4075">issue 4075</a>)
      - fixed a bug where I/O could not be flushed before closing the socket
        (<a href="https://github.com/qorelanguage/qore/issues/4074">issue 4074</a>)
      - fixed handling WebSocket message fragmentation
        (<a href="https://github.com/qorelanguage/qore/issues/4073">issue 4073</a>)
    - <a href="../../modules/WebSocketUtil/html/index.html">WebSocketUtil</a> module updates:
      - fixed handling WebSocket message fragmentation
        (<a href="https://github.com/qorelanguage/qore/issues/4073">issue 4073</a>)
    - fixed type errors with the @ref map when used as a functional operator
      (<a href="https://github.com/qorelanguage/qore/issues/4085">issue 4085</a>)
    - added @ref Qore::AbstractLineIterator::getSplitLine() "AbstractLineIterator::getSplitLine()" to allow quoted
      fields with line breaks to be iterated in <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a>
      (<a href="https://github.com/qorelanguage/qore/issues/4079">issue 4079</a>)
    - fixed a crash in @ref Qore::Thread::Queue "Queue" methods with negative timeout values in debug builds
      (<a href="https://github.com/qorelanguage/qore/issues/4077">issue 4077</a>)

    @section qore_097 Qore 0.9.7

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_097_notes Release Notes
    Note that when a REST validator is present in a REST connection, any URI path in the connection URL is ignored; to
    change the base path specified by a REST validator, use the \a swagger_base_path connection option.

    @subsection qore_097_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - fixed type-handling bugs handling data provider options
        (<a href="https://github.com/qorelanguage/qore/issues/4062">issue 4062</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
      - fixed a bug where the base path in the Swagger schema was ignored; note that when a REST validator is present,
        any URI path in the connection URL is ignored; to change the base path specified by a REST validator, use the
        \a swagger_base_path connection option
        (<a href="https://github.com/qorelanguage/qore/issues/4059">issue 4059</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module updates:
      - fixed a type error in \c Swagger::getBasePath() for the case when the base path is not set
        (<a href="https://github.com/qorelanguage/qore/issues/4064">issue 4064</a>)
    - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a> module updates:
      - fixed a bug handling the case when a connection object is deleted in a callback method
        (<a href="https://github.com/qorelanguage/qore/issues/4063">issue 4063</a>)

    @section qore_096 Qore 0.9.6

    @note From %Qore 0.9.6 onwards, %Qore releases will use <a href="https://semver.org/">semantic versioning</a>.

    @par Release Summary
    Bugfix release; see below for more information

    @subsection qore_096_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - fixed invalid default return values for \c AbstractDataProcessor methods
        (<a href="https://github.com/qorelanguage/qore/issues/4043">issue 4043</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
      - added the \a swagger_base_path option to REST clients and connections to allow for Swagger schemas to have their
        base path overridden
        (<a href="https://github.com/qorelanguage/qore/issues/4059">issue 4059</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module updates:
      - fixed a bug where the base path in the Swagger schema was ignored
        (<a href="https://github.com/qorelanguage/qore/issues/4059">issue 4059</a>)
    - fixed a problem with lazy resolution of static class variables that could lead to incorrect runtime execution
      (<a href="https://github.com/qorelanguage/qore/issues/4045">issue 4045</a>)
    - fixed a symbol conflict with the \c gettid() C++ function; use \c q_gettid() instead to avoid potential symbol
      conflicts that can result in a crash
      (<a href="https://github.com/qorelanguage/qore/issues/4046">issue 4046</a>)
    - fixed a bug handling the class context in closures created with the @ref background "background operator" when
      created in the context of a subclass of the method called
      (<a href="https://github.com/qorelanguage/qore/issues/4051">issue 4051</a>)
    - fixed a bug that could cause a crash destroying thread-local vars when threads terminate
      (<a href="https://github.com/qorelanguage/qore/issues/4053">issue 4053</a>)
    - fixed a race condition that could cause a crash when deleting closure-local variable data while holding a lock
      (<a href="https://github.com/qorelanguage/qore/issues/4055">issue 4055</a>)

    @section qore_095 Qore 0.9.5

    @par Release Summary
    Bugfix release with minor new features; including full ARM CPU support; see below for more information

    @subsection qore_095_compatibility Fixes That Can Affect Backwards-Compatibility
    - The <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module was updated with
      support for verbose option reporting and a connection cache; support for the deprecated constructor was removed
      from \c HttpConnection, HttpBasedConnection, as well as from other connection classes
    - The @ref Qore::mkdir() "mkdir()" function was modified to provide consistent behavior and a consistent return
      value with and without the \a parents argument; this function never throws an exception now, and always returns
      either \c 0 (meaning no error occurred) or \c 1 (meaning an error occurred) and no longer returns the number of
      directories created when \a parents = @ref True.  Use @ref Qore::Dir::create() "Dir::create()" to get the number
      of directories created as in previous versions of %Qore; @see Qore::mkdir_ex()
    - Fixed broken @ref Qore::range() "range()" and @ref Qore::xrange() "xrange()" where the upper limit of the range
      was included in the result for maximum compatibility with other languages.  To get the old behavior, use the
      @ref broken-range "%broken-range" parse directive.
    - Floating-point values are always converted to strings with a decimal point; in previous releases of %Qore,
      round floating-point values were converted to strings without any decimal point; i.e. <tt>1.0</tt> will now be
      converted to \c "1.0" (in previous releases of %Qore, it would be converted to simply \c "1")

    @subsection qore_095_new_features New Features in Qore
    - <a href="../../modules/CdsRestClient/html/index.html">CdsRestClient</a>
      - new module providing APIs for communicating with the Microsoft Common Data Service REST API
    - <a href="../../modules/CdsRestDataProvider/html/index.html">CdsRestDataProvider</a>
      - new module providing a <a href="../../modules/DataProvider/html/index.html">data provider</a> API for the
        Microsoft Common Data Service REST API
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a>
      - added support for verbose connection option reporting
      - added a connection cache
      - all connection classes updated to support verbose option reporting
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - added new %Qore base types to the data type hierarchy
      - implemented the following classes:
        - \c AbstractDataProcessor
        - \c DataProviderBulkRecordIterator
        - \c DataProviderPipeline
        \n
        (<a href="https://github.com/qorelanguage/qore/issues/3876">issue 3876</a>)
      - added the \c DUPLICATE-RECORD exception documentation for \c AbstractDataProvider::createRecord()
      - updated to allow data provider type attributes to appear as children in the type hierarchy
        (<a href="https://github.com/qorelanguage/qore/issues/4015">issue 4015</a>)
    - <a href="../../modules/FsUtil/html/index.html">FsUtil</a> module updates:
      - added @ref Qore::Dir "Dir" as a parent class of \c TmpDir
        (<a href="https://github.com/qorelanguage/qore/issues/3945">issue 3945</a>)
    - <a href="../../modules/reflection/html/index.html">reflection</a> module updates:
      - added \c AbstractConstant::getModuleName()
      - added \c AbstractReflectionFunction::getCodeFlags()
      - added \c AbstractReflectionFunction::getCodeFlagList()
      - added \c AbstractReflectionFunction::getDomain()
      - added \c AbstractReflectionFunction::getDomainStringList()
      - added \c AbstractReflectionFunction::getModuleName()
      - added \c Namespace::getModuleName()
      - added \c TypedHash::doCast()
    - <a href="../../modules/RestClient/html/index.html">RestClient</a>
      - added the \c no_charset option to options
        (<a href="https://github.com/qorelanguage/qore/issues/3328">issue 3328</a>)
    - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a>
      - added the \c no_charset option to options
        (<a href="https://github.com/qorelanguage/qore/issues/3328">issue 3328</a>)
    - <a href="../../modules/Schema/html/index.html">Schema</a> module updates:
      - allow schema operations to be executed with no output (verbose < 0)
        (<a href="https://github.com/qorelanguage/qore/issues/3996">issue 3996</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module updates:
      - new \c AbstractTable methods returning a hash with info about the operation as well as the SQL and any bind
        arguments used
    - <a href="../../modules/Util/html/index.html">Util</a> module updates:
      - added the \c parse_memory_size() function
        (<a href="https://github.com/qorelanguage/qore/issues/4004">issue 4004</a>)
    - New data type:
      - @ref softbinary_type "softbinary"
    - New methods:
      - @ref Qore::HTTPClient::addDefaultHeaders() "HTTPClient::addDefaultHeaders()"
      - @ref Qore::HTTPClient::getDefaultHeaders() "HTTPClient::getDefaultHeaders()"
      - @ref Qore::Program::callStaticMethod() "Program::callStaticMethod()"
      - @ref Qore::Program::callStaticMethodArgs() "Program::callStaticMethodArgs()"
    - New functions:
      - @ref Qore::compare() "compare()" compares floating-point and arbitrary-precision numeric values with a given
        epsilon
      - @ref Qore::get_stack_size() "get_stack_size()" now works on Darwin / macOS
      - @ref Qore::mkdir_ex() "mkdir_ex()"
    - Added stack guard support for ARM processors
      (<a href="https://github.com/qorelanguage/qore/issues/3965">issue 3965</a>)

    @subsection qore_095_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - fixed a bug where \c HashDataType would not enforce fields or field types when checking for type and value
        compatibility
        (<a href="https://github.com/qorelanguage/qore/issues/4037">issue 4037</a>)
    - <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a> module updates:
      - fixed a bug generating literal date/time values for SQL queries
        (<a href="https://github.com/qorelanguage/qore/issues/3948">issue 3948</a>)
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module updates:
      - fixed a bug where the HTTP server would not always stop the @ref Qore::Thread::ThreadPool "ThreadPool" which
        caused process shutdowns to hang
        (<a href="https://github.com/qorelanguage/qore/issues/3999">issue 3999</a>)
      - fixed a bug where the \c Expect header was not supported and where binary message bodies were read as strings
        (<a href="https://github.com/qorelanguage/qore/issues/4035">issue 4035</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module updates:
      - fixed a bug generating literal date/time values for SQL queries
        (<a href="https://github.com/qorelanguage/qore/issues/3948">issue 3948</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module updates:
      - implemented atomic merge / upsert support
        (<a href="https://github.com/qorelanguage/qore/issues/3963">issue 3963</a>)
      - fixed a bug generating literal date/time values for SQL queries
        (<a href="https://github.com/qorelanguage/qore/issues/3948">issue 3948</a>)
    - <a href="../../modules/Qdx/html/index.html">Qdx</a> module updates:
      - fixed a bug where %Qore-language post processing fixes were applied to non-%Qore docs
        (<a href="https://github.com/qorelanguage/qore/issues/3985">issue 3985</a>)
    - <a href="../../modules/QUnit/html/index.html">QUnit</a> module updates:
      - updated to allow tests to be run with argument handling from languages that do not support lvalue references
        (<a href="https://github.com/qorelanguage/qore/issues/3934">issue 3934</a>)
    - fixed a bug in @ref Qore::range() "range()" and @ref Qore::xrange() "xrange()" where the upper limit of the
      range was included in the result
      (<a href="https://github.com/qorelanguage/qore/issues/4031">issue 4031</a>)
    - fixed a bug in exception handling with external language modules where stack trace elements were added in
      reverse order
      (<a href="https://github.com/qorelanguage/qore/issues/4030">issue 4030</a>)
    - fixed a bug in @ref Qore::mkdir() with \c parents = @ref True
      (<a href="https://github.com/qorelanguage/qore/issues/3992">issue 3992</a>)
    - fixed a bug where complex formatting output with @ref Qore::sprintf() "sprintf()" and related dunctions would
      have \c "." separators instead of \c "," separators when floating-point values were included in the output
      (<a href="https://github.com/qorelanguage/qore/issues/3947">issue 3947</a>)
    - fixed a bug handling embedded nulls in UTF-8 strings
      (<a href="https://github.com/qorelanguage/qore/issues/2942">issue 2942</a>)

    @section qore_0947 Qore 0.9.4.7

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0947_bug_fixesd Bug Fixes in Qore
    - fixed a bug in the return type of @ref Qore::Dir::statvfs() "Dir::statvfs()"
      (<a href="https://github.com/qorelanguage/qore/issues/3989">issue 3989</a>)

    @section qore_0946 Qore 0.9.4.6

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0946_bug_fixesd Bug Fixes in Qore
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module updates:
      - fixed a bug supporting number formats
        (<a href="https://github.com/qorelanguage/qore/issues/3979">issue 3979</a>)
    - fixed a bug maintaining the socket encoding for outgoing messages in @ref Qore::HTTPClient "HTTPClient" objects
      (<a href="https://github.com/qorelanguage/qore/issues/3978">issue 3978</a>)

    @section qore_0945 Qore 0.9.4.5

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0945_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - added a thread callback for background queue threads
        (<a href="https://github.com/qorelanguage/qore/issues/3927">issue 3927</a>)

    @subsection qore_0945_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module updates:
      - fixed a bug handling external runtime keys with bulk input for keys that do not require the current input
        value
        (<a href="https://github.com/qorelanguage/qore/issues/3931">issue 3931</a>)
    - fixed a race condition in closure-bound variable reference handling that could result in a runtime crash
      (<a href="https://github.com/qorelanguage/qore/issues/3939">issue 3939</a>)

    @section qore_0944 Qore 0.9.4.4

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0944_new_features New Features in Qore
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module updates:
      - added support for mapper context in mapper field key handlers
        (<a href="https://github.com/qorelanguage/qore/issues/3893">issue 3893</a>)
      - added support for nested mappers and the \c submappers option
        (<a href="https://github.com/qorelanguage/qore/issues/3414">issue 3414</a>)
      - implemented the \c output_create_ignore_duplicates option
    - added support for freestanding expression evaluation:
      - @ref Qore::Expression "Expression" class
      - @ref Qore::Program::getExpression() "Program::getExpression()" method

    @subsection qore_0944_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module updates:
      - fixed \c FixedLengthWriteDataProvider to return the record created with the \c createRecord() call
        (<a href="https://github.com/qorelanguage/qore/issues/3914">issue 3914</a>)
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - added the \c DUPLICATE-RECORD exception documentation for \c AbstractDataProvider::createRecord()
    - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a> module updates:
      - fixed \c CsvWriteDataProvider to return the record created with the \c createRecord() call
        (<a href="https://github.com/qorelanguage/qore/issues/3914">issue 3914</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module updates:
      - fixed a bug where mapper output data was not logged in case of an error in an output provider
        (<a href="https://github.com/qorelanguage/qore/issues/3909">issue 3909</a>)
      - updated mapper key handler calling convertion + docs
        (<a href="https://github.com/qorelanguage/qore/issues/3894">issue 3894</a>)
      - fixed \c Mapper::mapAuto() to return @ref NOTHING with no input
        (<a href="https://github.com/qorelanguage/qore/issues/3872">issue 3872</a>)
    - <a href="../../modules/SalesforceRestDataProvider/html/index.html">SalesforceRestDataProvider</a> module updates:
      - fixed a bug deleting records with no matches
        (<a href="https://github.com/qorelanguage/qore/issues/3921">issue 3921</a>)
      - fixed serializing \c DATE fields
        (<a href="https://github.com/qorelanguage/qore/issues/3908">issue 3908</a>)
    - fixed a bug in class copy methods with \c private:internal members
      (<a href="https://github.com/qorelanguage/qore/issues/3901">issue 3901</a>)
    - fixed bugs running \c qdbg
      (<a href="https://github.com/qorelanguage/qore/issues/3900">issue 3900</a>)

    @section qore_0943 Qore 0.9.4.3

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0943_new_features New Features in Qore
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - added new classes:
        - \c AbstractDataProcessor
        - \c DataProviderBulkRecordIterator
        - \c DataProviderPipeline
        .
        (<a href="https://github.com/qorelanguage/qore/issues/3876">issue 3876</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module updates:
      - added the \c Mapper::mapAuto() method and the \c disable_bulk option
        (<a href="https://github.com/qorelanguage/qore/issues/3872">issue 3872</a>)
      - \c Mapper now inherits \c DataProvider::AbstractDataProviderRecordProcessor
        (<a href="https://github.com/qorelanguage/qore/issues/3876">issue 3876</a>)

    @subsection qore_0943_bug_fixes Bug Fixes in Qore
    - fixed a bug in the @ref Qore::Thread::ThreadPool "ThreadPool" class where queued tasks were discarded without
      being executed when @ref Qore::Thread::ThreadPool::stopWait() "ThreadPool::stopWait()" was called
      (<a href="https://github.com/qorelanguage/qore/issues/3897">issue 3897</a>)
    - fixed a bug determining method signature compatibility with variants of the @ref softlist_type "softlist" type
      (<a href="https://github.com/qorelanguage/qore/issues/3887">issue 3887</a>)
    - fixed a parse-time type error taking a slice of a hashdecl value
      (<a href="https://github.com/qorelanguage/qore/issues/3882">issue 3882</a>)
    - fixed HTTP responses with no message body and no \c Transfer-Encoding header to include a
      <tt>Content-Length: 0</tt> header to correctly support
      <a href="http://tools.ietf.org/html/rfc2616#section-4.4">RFC-2616</a>
      (<a href="https://github.com/qorelanguage/qore/issues/3879">issue 3879</a>)
    - fixed a crash in handling reference arguments in call references in mixed class contexts
      (<a href="https://github.com/qorelanguage/qore/issues/3869">issue 3869</a>)
    - fixed a memory leak in the code that manages remote client certificates in the @ref Qore::Socket "Socket" class
      (<a href="https://github.com/qorelanguage/qore/issues/3865">issue 3865</a>)

    @section qore_0942 Qore 0.9.4.2

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0942_new_features New Features in Qore
    - new user modules:
      - <a href="../../modules/BillwerkRestClient/html/index.html">BillwerkRestClient</a>
        - added this new module providing APIs for communicating with
          <a href="http://www.billwerk.com">billwerk.com</a>'s REST API
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module updates:
      - implemented callbacks to allow for dynamic elements of request-response data providers (such as URI paths) to
        be resolved at runtime
        (<a href="https://github.com/qorelanguage/qore/issues/3838">issue 3838</a>)
      - \c AbstractDataProviderType and \c AbstractDataField classes made serializable
        (<a href="https://github.com/qorelanguage/qore/issues/3809">issue 3809</a>)
      - implemented the \c DataProviderTypeCache class to encapsulate reusable type caching logic
        (<a href="https://github.com/qorelanguage/qore/issues/3810">issue 3810</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module updates:
      - added the \c ignore_missing_input mapper option
        (<a href="https://github.com/qorelanguage/qore/issues/3837">issue 3837</a>)
      - added support for the \c use_input_record output field mapping key
        (<a href="https://github.com/qorelanguage/qore/issues/3823">issue 3823</a>)
    - <a href="../../modules/MapperUtil/html/index.html">MapperUtil</a> module updates:
      - added support for the \c use_input_record output field mapping key
        (<a href="https://github.com/qorelanguage/qore/issues/3823">issue 3823</a>)
    - <a href="../../modules/reflection/html/index.html">reflection</a> module updates:
      - \c Type class made serializable
        (<a href="https://github.com/qorelanguage/qore/issues/3810">issue 3810</a>)
    - new methods:
      - @ref Qore::HTTPClient::getAssumedEncoding() "HTTPClient::getAssumedEncoding()"
      - @ref Qore::HTTPClient::setAssumedEncoding() "HTTPClient::setAssumedEncoding()"

    @subsection qore_0942_bug_fixes Bug Fixes in Qore

    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module:
      - fixed \c AbstractDataProviderType::get() to return the correct type with all string arguments
        (<a href="https://github.com/qorelanguage/qore/issues/3829">issue 3829</a>)
    - <a href="../../modules/DataProvider/html/index.html">QUnit</a> module:
      - allow %QUnit to be used from other languages like Java
        (<a href="https://github.com/qorelanguage/qore/issues/3857">issue 3857</a>)
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module:
      - fixed type errors sending mails
        (<a href="https://github.com/qorelanguage/qore/issues/3813">issue 3813</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module:
      - fixed support empty responses
        (<a href="https://github.com/qorelanguage/qore/issues/3801">issue 3801</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module:
      - fixed \c date-time value handling
        (<a href="https://github.com/qorelanguage/qore/issues/3847">issue 3847</a>)
      - fixed a bug where sibling elements to a \c "$ref" were not ignored (see
        <a href="https://swagger.io/docs/specification/using-ref">https://swagger.io/docs/specification/using-ref</a>)
        (<a href="https://github.com/qorelanguage/qore/issues/3843">issue 3843</a>)
      - fixed support for query parameters of type object
        (<a href="https://github.com/qorelanguage/qore/issues/3799">issue 3799</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module:
      - fixed bugs in \c %EVAL= expressions in \c parse_to_qore_value() where
        expressions that evaluated to integer 0 or floating-point values were returned as @ref NOTHING
        (<a href="https://github.com/qorelanguage/qore/issues/3851">issue 3851</a>)
    - fixed a bug where spurious \c DUPLICATE-SIGNATURE parse errors were raised with signatures that referred to
      classes that differed only in their namespace paths
      (<a href="https://github.com/qorelanguage/qore/issues/3861">issue 3861</a>)
    - fixed the \c Type object for \c "*hash<auto>" to return the correct name
        (<a href="https://github.com/qorelanguage/qore/issues/3826">issue 3826</a>)
    - added additional accept and returns keys for base type that accept and return integers; now they return both
      \c int and \c integer to ensure that they match for logic that does standard comparisons with \c "integer"
      (<a href="https://github.com/qorelanguage/qore/issues/3854">issue 3854</a>)
    - fixed certificate verification; openssl will now use default CA certs when
      @ref Qore::Socket::acceptAllCertificates() "Socket::acceptAllCertificates(False)" is set when
      @ref Qore::SSL_VERIFY_PEER "SSL_VERIFY_PEER" or similar is used with
      @ref Qore::Socket::setSslVerifyMode() "Socket::setSslVerifyMode()"
      (<a href="https://github.com/qorelanguage/qore/issues/3818">issue 3818</a>)
    - fixed hostname verification in X.508 certificate verification
      (<a href="https://github.com/qorelanguage/qore/issues/3808">issue 3808</a>)
    - fixed patch version to appear in the %Qore version
      (<a href="https://github.com/qorelanguage/qore/issues/3797">issue 3797</a>)

    @section qore_0941 Qore 0.9.4.1

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0941_new_features New Features in Qore
    - New <a href="../../modules/FileLocationHandler/html/index.html">FileLocationHandler</a> module: provides an API
      for retrieving file data based on a URL-like location string

    @subsection qore_0941_bug_fixes Bug Fixes in Qore

    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module:
      - allow type paths to resolved to internal fields in \c DataProvider::getType() and \c DataProvider::getTypeEx()
        (<a href="https://github.com/qorelanguage/qore/issues/3791">issue 3791</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module:
      - added the \c Mapper::setNullableOutput() method and the \c output_nullable option
        (<a href="https://github.com/qorelanguage/qore/issues/3788">issue 3788</a>)
    - <a href="../../modules/Swagger/html/index.html">Swagger</a> module:
      - added support for the <tt>x-nullable</tt> attribute to allow for nullable values
        (<a href="https://github.com/qorelanguage/qore/issues/3785">issue 3785</a>)
      - fixed support for types with no type declaration
        (<a href="https://github.com/qorelanguage/qore/issues/3775">issue 3775</a>)
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module:
      - fixed support for requests that do not require a request hash
        (<a href="https://github.com/qorelanguage/qore/issues/3784">issue 3784</a>)

    @section qore_094 Qore 0.9.4

    @par Release Summary
    The main new feature in this release is the <a href="../../modules/DataProvider/html/index.html">DataProvider</a>
    API, which provides a generic API for introspecting and manipulating data in any format and over any protocol.
    %Qore 0.9.4 also contains many usability and consistency fixes as well.

    @subsection qore_094_compatibility Fixes That Can Affect Backwards-Compatibility
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module: renamed
      \c RestHandler::getPossibleSubClasses() to \c RestHandler::doGetPossibleSubClasses() in order to avoid a
      collision with a REST method name
      (<a href="https://github.com/qorelanguage/qore/issues/3614">issue 3614</a>)
    - fixed broken @ref cast "cast<>" operator handling; in previous releases, @ref cast "cast<>" would accept and
      return @ref nothing without raising an error with type specifications that did not accept or return
      @ref nothing.  To get the old behavior, use the @ref broken-cast "%broken-cast" parse directive.
    - disallowed the use of the deprecated \c returns keyword by default.  To get the old behavior, use the
      @ref allow-returns "%allow-returns" parse directive.
    - classes inheriting \c AbstractConnection must be serializable; the \c AbstractConnection::getConstructorInfo()
      and \c AbstractConnection::getConstructorInfoImpl() methods have been removed and are ignored in child classes
    - the following are now reserved words in Qore to prohibit them from being redefined:
      - @ref NULL
      - @ref NOTHING
      - @ref True
      - @ref False

    @subsection qore_094_new_features New Features in Qore
    - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module:
      - implemented support for serializing connections
        (<a href="https://github.com/qorelanguage/qore/issues/3696">issue 3696</a>)
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module:
      - adds <a href="../../modules/DataProvider/html/index.html">data provider</a> API support
    - <a href="../../modules/DataProvider/html/index.html">DataProvider</a> module:
      - supports arbitrary data inputs and outputs with introspection and strong type support
    - <a href="../../modules/DbDataProvider/html/index.html">DbDataProvider</a> module:
      - adds a data provider API for databases
    - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a> module:
      - adds  <a href="../../modules/DataProvider/html/index.html">data provider</a> API support
    - <a href="../../modules/FtpPoller/html/index.html">FtpPoller</a> module:
      - added this new module to support polling files from a remote directory with the FTP protocol
    - <a href="../../modules/FtpPollerUtil/html/index.html">FtpPollerUtil</a> module:
      - added this new module to provide definitions for the
        <a href="../../modules/FtpPoller/html/index.html">FtpPoller</a> module
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module:
      - added support for sending chunked replies from an @ref Qore::InputStream "InputStream"
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module:
      - adds <a href="../../modules/DataProvider/html/index.html">data provider</a> API support
    - <a href="../../modules/SalesforceRestDataProvider/html/index.html">SalesforceRestDataProvider</a> module:
      - adds a data provider API for Salesforce REST connections
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>:
      - adds infrastructure support for the <a href="../../modules/DataProvider/html/index.html">data provider</a>
        module
      - implemented the \c op_in_select() function for where clause hashes
    - <a href="../../modules/SwaggerDataProvider/html/index.html">SwaggerDataProvider</a> module:
      - adds a data provider API for Swagger / OpenAPI schemas
    - support for Unicode character matching in regular expressions:
      - the \c <tt>/u</tt> option in @ref qore_regex_options
      - the @ref Qore::RE_Unicode "RE_Unicode" constant
      - the \c "%w" string format code that uses character widths with field widths (ex: \c "%5w" specifies a field 5
        characters wide; see @ref format_specification for more information)
    - new constants:
      - @ref Qore::EVENT_HTTP_CHUNKED_DATA_READ "EVENT_HTTP_CHUNKED_DATA_READ"
      - @ref Qore::EVENT_HTTP_CHUNKED_DATA_SENT "EVENT_HTTP_CHUNKED_DATA_SENT"
      - @ref Qore::EVENT_HTTP_CHUNKED_FOOTERS_SENT "EVENT_HTTP_CHUNKED_FOOTERS_SENT"
      - @ref Qore::EVENT_HTTP_HEADERS_READ "EVENT_HTTP_HEADERS_READ"
      - @ref Qore::EVENT_SOCKET_DATA_READ "EVENT_SOCKET_DATA_READ"
      - @ref Qore::EVENT_SOCKET_DATA_SENT "EVENT_SOCKET_DATA_SENT"
      - @ref Qore::NT_ALL "NT_ALL"
      - @ref Qore::RE_Unicode "RE_Unicode"
      - @ref Qore::PO_ALLOW_RETURNS "PO_ALLOW_RETURNS"
      - @ref Qore::PO_BROKEN_CAST "PO_BROKEN_CAST"
      - @ref Qore::PO_STRICT_TYPES "PO_STRICT_TYPES"
    - new pseudo-methods:
      - <object>::getCallReference()
      - <string>::width()
    - pseudo-methods now run in the same class context as the caller
    - new functions
      - @ref Qore::char_width()
      - @ref Qore::get_call_reference()
    - new methods:
      - @ref Qore::FtpClient::sendControlMessage() "FtpClient::sendControlMessage()"
      - @ref Qore::Program::getCallReference() "Program::getCallReference()"
    - updated methods:
      - @ref Qore::BinaryInputStream::constructor() "BinaryInputStream::constructor()" accepts strings as well as binary values
      - @ref Qore::FtpClient::setControlEventQueue() "FtpClient::setControlEventQueue()": added the \a arg and \a with_data options
      - @ref Qore::FtpClient::setDataEventQueue() "FtpClient::setDataEventQueue()": added the \a arg and \a with_data options
      - @ref Qore::FtpClient::setEventQueue() "FtpClient::setEventQueue()": added the \a arg and \a with_data options
      - @ref Qore::HTTPClient::setEventQueue() "HTTPClient::setEventQueue()": added the \a arg and \a with_data options
      - @ref Qore::Program::loadApplyToUserModule() "Program::loadApplyToUserModule()": added the \a reexport argument
      - @ref Qore::Program::loadApplyToUserModuleWarn() "Program::loadApplyToUserModuleWarn()": added the \a reexport argument
      - @ref Qore::ReadOnlyFile::setEventQueue() "ReadOnlyFile::setEventQueue()": added the \a arg and \a with_data options
      - @ref Qore::Socket::setEventQueue() "Socket::setEventQueue()": added the \a arg and \a with_data options
    - new parse options:
      - @ref allow-returns "%allow-returns"
      - @ref broken-cast "%broken-cast"
      - @ref loose-types "%loose-types"
      - @ref strict-types "%strict-types"
    - <a href="../../modules/reflection/html/index.html">reflection</a> module updates:
      - added \c Type::isAssignableFrom() methods
      - added a working \c Type::constructor() method
      - added \c Type::getAcceptTypeHash()
      - added \c Type::getBaseType()
      - added \c Type::getBaseTypeCode()
      - added \c Type::getElementType()
      - added \c Type::getReturnTypeHash()
      - added \c Type::getTypedHash()
      - added \c Type::hasType()
      - added \c Type::isCompatible()
      - added \c Type::isOrNothingType()
      - added \c Type::isTypedHash()

    @subsection qore_094_bug_fixes Bug Fixes in Qore
    - fixes in modules:
      - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> and
        <a href="../../modules/HttpServer/html/index.html">HttpServer</a>:
        - fixed the version number reported by the server
      - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a>:
        - fixed a bug where the table collation could not be specified
          (<a href="https://github.com/qorelanguage/qore/issues/3752">issue 3752</a>)
        - fixed quoting reserved words with backticks
          (<a href="https://github.com/qorelanguage/qore/issues/3750">issue 3750</a>)
      - <a href="../../modules/Swagger/html/index.html">Swagger</a>:
        - fixed support for additional YAML MIME types
          (<a href="https://github.com/qorelanguage/qore/issues/3699">issue 3699</a>)
        - fixed a bug resolving out of order definitions
          (<a href="https://github.com/qorelanguage/qore/issues/3694">issue 3694</a>)
        - fixed a bug handling \c formData elements
          (<a href="https://github.com/qorelanguage/qore/issues/3692">issue 3692</a>)
    - the default exception handler now shows the exception \c "arg" key exceptions in builtin code if present
      (<a href="https://github.com/qorelanguage/qore/issues/3768">issue 3768</a>)
    - fixed reporting the exception location when exceptions occur in builtin code
      (<a href="https://github.com/qorelanguage/qore/issues/3742">issue 3742</a>)
    - fixed type handling in list and hash evaluation with complex types that can only be determined at runtime
      (<a href="https://github.com/qorelanguage/qore/issues/3740">issue 3740</a>)
    - fixed setting the time zone region in date/time values to not include the system-specific zoneinfo path prefix
      in order to allow for deserialization of date/time values on different systems
      (<a href="https://github.com/qorelanguage/qore/issues/3736">issue 3736</a>)
    - fixed a crash in parse error handling for recursive constant parse hash resolution cases
      (<a href="https://github.com/qorelanguage/qore/issues/3708">issue 3708</a>)
    - fixed a bug retrieving HTTP message bodies with servers that do not send a \c Content-Length header but close the
      connection
      (<a href="https://github.com/qorelanguage/qore/issues/3691">issue 3691</a>)
    - fixed inconsistent handling of the @ref plus_equals_operator "+= operator" with
      @ref list_or_nothing_type "*list<...>" types with element types
      (<a href="https://github.com/qorelanguage/qore/issues/3586">issue 3586</a>)
    - <string>::split(string, string, bool) and Qore::split(string, string, string, bool) now properly handle double
      quote characters as an alternative way to include quotes in fields
      (<a href="https://github.com/qorelanguage/qore/issues/3550">issue 3550</a>)
    - the @ref cast "cast<>" operator can now cast directly to "or nothing" types: ex:
      @code{.py} *list<int> l = cast<*list<int>>(getList()); @endcode
      (<a href="https://github.com/qorelanguage/qore/issues/3331">issue 3331</a>)
    - fixed detecting invalid input in @ref Qore::date(string, string) "date(string, string)
      (<a href="https://github.com/qorelanguage/qore/issues/3239">issue 3239</a>)

    @section qore_0933 Qore 0.9.3.3

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0933_bug_fixes Bug Fixes in Qore

    - fixed a bug where a crash would result when calling
      @ref Qore::SQL::Datasource::getOption() "Datasource::getOption()" when the connection was closed
      (<a href="https://github.com/qorelanguage/qore/issues/3754">issue 3754</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module fix: updated to work also with
      newer versions of MySQL / MariaDB that support sequences
      (<a href="https://github.com/qorelanguage/qore/issues/3747">issue 3747</a>)
    - fixed a bug where the @ref Qore::SQL::Datasource "Datasource" class would not always remove the transaction
      thread resource when rolling back transactions
      (<a href="https://github.com/qorelanguage/qore/issues/3745">issue 3745</a>)

    @section qore_0932 Qore 0.9.3.2

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0932_new_features New Features in Qore
    - the <a href="../../modules/Sap4HanaRestClient/html/index.html">Sap4HanaRestClient</a> module was added
      (<a href="https://github.com/qorelanguage/qore/issues/3600">issue 3600</a>)

    @subsection qore_0932_bug_fixes Bug Fixes in Qore

    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a>: fixed a bug handling exceptions in REST
      methods with unserializable exception data
      (<a href="https://github.com/qorelanguage/qore/issues/3667">issue 3667</a>)
    - fixed a bug in hashdecl member initialization in constants
      (<a href="https://github.com/qorelanguage/qore/issues/3654">issue 3654</a>)
    - fixed a bug in type handling that could cause a runtime crash
      (<a href="https://github.com/qorelanguage/qore/issues/3644">issue 3644</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a>: fixed a bug where the sequence table name
      was not respected in \c MysqlDatabase::getNextSequenceValueImpl()
      (<a href="https://github.com/qorelanguage/qore/issues/3641">issue 3641</a>)
    - <a href="../../modules/Schema/html/index.html">Schema</a>: fixed a bug where too little information was passed
      to post schema alignment code
      (<a href="https://github.com/qorelanguage/qore/issues/3640">issue 3640</a>)
    - fixed a bug where in-object calls to implicit \c copy() methods would result in a core dump
      (<a href="https://github.com/qorelanguage/qore/issues/3637">issue 3637</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module: fixed a bug where list values could not be
      passed as a value in non-bulk mode
      (<a href="https://github.com/qorelanguage/qore/issues/3611">issue 3611</a>)
    - fixed an error with runtime method call resolution with <b><tt>private:internal</tt></b> methods
      (<a href="https://github.com/qorelanguage/qore/issues/3596">issue 3596</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module: fixed compatibility with
      PostgreSQL 12
      (<a href="https://github.com/qorelanguage/qore/issues/3589">issue 3589</a>)

    @section qore_0931 Qore 0.9.3.1

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_0931_bug_fixes Bug Fixes in Qore
    - fixed a critical error handling thread resources where if an exception was thrown handling thread resources,
      user thread resource handlers queued afterwards were not executed
      (<a href="https://github.com/qorelanguage/qore/issues/3571">issue 3571</a>)
    - fixed a crash handling recursive user module dependencies with directory-based (split) user modules
      (<a href="https://github.com/qorelanguage/qore/issues/3570">issue 3570</a>)
    - fixed an error handling aborted chunked HTTP transfers that can result in a long timeout stalling the I/O thread
      (<a href="https://github.com/qorelanguage/qore/issues/3564">issue 3564</a>)
    - added library option constants and functions to allow the TLS v1.3 protocol to be disabled when the library is
      initialized or at runtime
      (<a href="https://github.com/qorelanguage/qore/issues/3561">issue 3561</a>)
    - fixed a bug where different connections on the same @ref Qore::Socket "Socket" object could not be identified;
      code that relied on @ref Qore::Socket::getSocket() "Socket::getSocket()" is unreliable as the same descriptor
      can be reassigned
      (<a href="https://github.com/qorelanguage/qore/issues/3558">issue 3558</a>)
    - fixed a core dump in @ref Qore::FileLineIterator::getFileName() "FileLineIterator::getFileName()"
      (<a href="https://github.com/qorelanguage/qore/issues/3555">issue 3555</a>)
    - fixed a race condition in thread resource cleanups where a spurious exception could be raised
      (<a href="https://github.com/qorelanguage/qore/issues/3551">issue 3551</a>)
    - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a>: fixed a bug where REST
      serialization errors in server responses were ignored and a <tt>200 OK</tt> response was sent instead
      (<a href="https://github.com/qorelanguage/qore/issues/3547">issue 3547</a>)
    - fixed a bug where false positive parse-time matches with a complex list or hash type could be made with
      incompatible types
      (<a href="https://github.com/qorelanguage/qore/issues/3546">issue 3546</a>)
    - <a href="../../modules/astparser/html/index.html">astparser</a> module:
      - fixed memory leaks in astparser module
        (<a href="https://github.com/qorelanguage/qore/issues/3344">issue 3344</a>)

    @section qore_093 Qore 0.9.3

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_093_compatibility Fixes That Can Affect Backwards-Compatibility
    Complex type fixes in this release have the effect that complex type declarations are not exactly equal to
    the base types without a complex type restrictions, and also abstract argument type matching with concrete
    implementations has been loosened to accept nearly identical matches, so that for example an abstract method may
    declare a parameter with a \c hash<auto> type which may be implemented by a concrete method with type \c hash.

    @subsection qore_093_new_features New Features in Qore
    - the <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module was updated to
      support connection tags
      (<a href="https://github.com/qorelanguage/qore/issues/3486">issue 3486</a>)
    - updated the @ref Qore::HTTPClient "HTTPClient" class to support the following new constructor options:
      - \c encoding_passthru
      - \c error_passthru
      - \c redirect_passthru
      as well as the \c "response-headers-raw" output info key, plus the following methods:
      - @ref Qore::HTTPClient::getHostHeaderValue() "HTTPClient::getHostHeaderValue()"
      - @ref Qore::HTTPClient::getEncodingPassthru() "HTTPClient::getEncodingPassthru()"
      - @ref Qore::HTTPClient::setEncodingPassthru() "HTTPClient::setEncodingPassthru()"
      - @ref Qore::HTTPClient::getErrorPassthru() "HTTPClient::getErrorPassthru()"
      - @ref Qore::HTTPClient::setErrorPassthru() "HTTPClient::setErrorPassthru()"
      - @ref Qore::HTTPClient::getRedirectPassthru() "HTTPClient::getRedirectPassthru()"
      - @ref Qore::HTTPClient::setRedirectPassthru() "HTTPClient::setRedirectPassthru()"
      .
      (<a href="https://github.com/qorelanguage/qore/issues/3472">issue 3472</a>)
    - added the following methods:
      - @ref Qore::GetOpt::parse() "GetOpt::parse(hash<auto>, reference<list<string>>)"
      - @ref Qore::GetOpt::parseEx() "GetOpt::parseEx(hash<auto>, reference<list<string>>)"
      - @ref Qore::GetOpt::parseExit() "GetOpt::parseExit(hash<auto>, reference<list<string>>)"
      - @ref Qore::Socket::getRemoteCertificate() "Socket::getRemoteCertificate()"
    - added the following new functions:
      - @ref Qore::auto_cast() "auto_cast()"
      - @ref Qore::digest() "digest()"
      - @ref Qore::get_digests() "get_digests()
      - @ref Qore::hmac() "hmac()"
    - added the following new constants:
      - @ref Qore::DigestMap "DigestMap"
      - @ref Qore::CRYPTO_DIGEST_MD2 "CRYPTO_DIGEST_MD2"
      - @ref Qore::CRYPTO_DIGEST_MD4 "CRYPTO_DIGEST_MD4"
      - @ref Qore::CRYPTO_DIGEST_MD5 "CRYPTO_DIGEST_MD5"
      - @ref Qore::CRYPTO_DIGEST_SHA "CRYPTO_DIGEST_SHA"
      - @ref Qore::CRYPTO_DIGEST_SHA1 "CRYPTO_DIGEST_SHA1"
      - @ref Qore::CRYPTO_DIGEST_SHA224 "CRYPTO_DIGEST_SHA224"
      - @ref Qore::CRYPTO_DIGEST_SHA256 "CRYPTO_DIGEST_SHA256"
      - @ref Qore::CRYPTO_DIGEST_SHA384 "CRYPTO_DIGEST_SHA384"
      - @ref Qore::CRYPTO_DIGEST_SHA512 "CRYPTO_DIGEST_SHA512"
      - @ref Qore::CRYPTO_DIGEST_DSS "CRYPTO_DIGEST_DSS"
      - @ref Qore::CRYPTO_DIGEST_DSS1 "CRYPTO_DIGEST_DSS1"
      - @ref Qore::CRYPTO_DIGEST_MDC2 "CRYPTO_DIGEST_MDC2"
      - @ref Qore::CRYPTO_DIGEST_RIPEMD160 "CRYPTO_DIGEST_RIPEMD160"
    - added the @ref Qore::UrlInfo hash as the return type to:
      - @ref Qore::parse_url() "parse_url()"
      - @ref Qore::parseURL() "parseURL()"
    - added the \a module_visibility parameter to @ref Qore::Program::importClass() "Program::importClass()" and the
      @ref import_visibility_constants as possible argument values
    - added the \a max_file_len param to @ref Qore::ReadOnlyFile::readTextFile() "ReadOnlyFile::readTextFile()"
      and @ref Qore::ReadOnlyFile::readBinaryFile() "ReadOnlyFile::readBinaryFile()"
      (<a href="https://github.com/qorelanguage/qore/issues/3525">issue 3525</a>)
    - added <string>::toBinary()
    - added the <a href="../../modules/AwsRestClient/html/index.html">AwsRestClient</a> module
    - the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module was updated to
      enable remote certificates to be retrieved in listeners and handlers by default; added new API entry points for
      listeners and handlers with more flexible and saner parameters, deprecated old complex methods
      (<a href="https://github.com/qorelanguage/qore/issues/3512">issue 3512</a>)
    - the <a href="../../modules/Mapper/html/index.html">Mapper</a> module now supports the \c "runtime_keys" option
      for adding support for new field keys to existing classes
      (<a href="https://github.com/qorelanguage/qore/issues/3535">issue 3535</a>)
    - the <a href="../../modules/Mapper/html/index.html">Mapper</a> module now supports \c "hash" and \c "any" types
      for output fields
      (<a href="https://github.com/qorelanguage/qore/issues/3453">issue 3453</a>)
    - the <a href="../../modules/Mapper/html/index.html">Mapper</a> module now supports dot notation in output fields
      for the "hash" output type
      (<a href="https://github.com/qorelanguage/qore/issues/3413">issue 3413</a>)
    - the <a href="../../modules/RestClient/html/index.html">RestClient</a> module was updated so that
      \c RestConnection objects now support the \c "headers" option
      (<a href="https://github.com/qorelanguage/qore/issues/3455">issue 3455</a>)
    - \c qdbg-vsc-adapter supports the VSCode Debug Protocol
      (<a href="https://github.com/qorelanguage/qore/issues/3392">issue 3392</a>)

    @subsection qore_093_bug_fixes Bug Fixes in Qore
    - fixed bugs in handling object members assigned to references
      (<a href="https://github.com/qorelanguage/qore/issues/3523">issue 3523</a>)
    - fixed bugs in thread-local variable handling and Program destruction
      (<a href="https://github.com/qorelanguage/qore/issues/3521">issue 3521</a>)
    - fixed a bug where a crash would result when serializing imported typed hashes
      (<a href="https://github.com/qorelanguage/qore/issues/3518">issue 3518</a>)
    - fixed a bug where attempting to serialize a weak references to a serializable object would result in an
      exception
      (<a href="https://github.com/qorelanguage/qore/issues/3515">issue 3515</a>)
    - fixed a bug where new @ref Qore::SQL::DatasourcePool "DatasourcePool" connections were left in place when calls to
      @ref Qore::SQL::DatasourcePool::beginTransaction() "DatasourcePool::beginTransaction()" would fail with an exception
      (<a href="https://github.com/qorelanguage/qore/issues/3509">issue 3509</a>)
    - fixed bugs importing user modules with an injected API in an existing @ref Qore::Program "Program" container
      (<a href="https://github.com/qorelanguage/qore/issues/3504">issue 3504</a>)
    - fixed a memory leak in @ref Qore::Serializable::deserialize(string) "Serializable::deserialize(string)"
    - fixed a memory leak (crash in debug mode) related to @ref garbage_collection "deterministic garbage collection"
      (<a href="https://github.com/qorelanguage/qore/issues/3481">issue 3481</a>)
    - fixed a bug where HTTP redirect messages with a simple path and not a full URL were not processed correctly
      (<a href="https://github.com/qorelanguage/qore/issues/3475">issue 3475</a>)
    - fixed a bug where HTTP connections with UNIX domain sockets were sending an incorrect \c Host: header without
      URL encoding
      (<a href="https://github.com/qorelanguage/qore/issues/3474">issue 3474</a>)
    - fixed bugs affecting injection and @ref Qore::Program "Program" API management
      (<a href="https://github.com/qorelanguage/qore/issues/3461">issue 3461</a>)
    - fixed a bug where a \c '/' character in an HTTP username would cause a URL to be parsed incorrectly
      (<a href="https://github.com/qorelanguage/qore/issues/3457">issue 3457</a>)
    - added optional flags to the following methods to allow them to open file streams in nonblocking mode to handle
      opening named pipes independently of the writer without blocking:
      - @ref Qore::FileInputStream::constructor() "FileInputStream::constructor()"
      - @ref Qore::FileLineIterator::constructor() "FileLineIterator::constructor()"
      .
      (<a href="https://github.com/qorelanguage/qore/issues/3451">issue 3451</a>)
    - fixed a bug compiling with openssl with the MDC2 algorithm disabled
      (<a href="https://github.com/qorelanguage/qore/issues/3443">issue 3443</a>)
    - fixed a confusing error message with runtime overload type errors where complex type information was missing
      (<a href="https://github.com/qorelanguage/qore/issues/3441">issue 3441</a>)
    - fixed parse-time error handling complex types in hashes
      (<a href="https://github.com/qorelanguage/qore/issues/3438">issue 3438</a>)
    - fixed many type errors with complex types
      (<a href="https://github.com/qorelanguage/qore/issues/3429">issue 3429</a>)
    - fixed inconsistent behavior of references with pseudo-methods
      (<a href="https://github.com/qorelanguage/qore/issues/3417">issue 3417</a>)
    - fixed bugs in the return types of @ref Qore::regex_extract() and <string>::regexExtract()
      (<a href="https://github.com/qorelanguage/qore/issues/3416">issue 3416</a>)
    - fixed documentation links between dependent modules
      (<a href="https://github.com/qorelanguage/qore/issues/3406">issue 3406</a>)
    - fixed a bug where an lvalue with a complex type accepted incompatible assignments from values without complex
      types if the base type was the same; this fix also ensures that complex type declarations with \c auto are not
      treated as identical to the base type without any complex type restrictions, in addition abstract type matching
      was loosened to accept near matches with parameter types so that ab stract method with a parameter type of
      \c hash<auto> can be implemented with a concrete method with a \c hash parameter type, for example.
      (<a href="https://github.com/qorelanguage/qore/issues/3404">issue 3404</a>)
    - fixed a bug where a crash could result when deserializing invalid integer data
      (<a href="https://github.com/qorelanguage/qore/issues/3395">issue 3395</a>)
    - fixed a parse type error in initialization using return value of abstract method
      (<a href="https://github.com/qorelanguage/qore/issues/3387">issue 3387</a>)
    - fixed a bug where sort functions were incorrectly sorting strings with different lengths
      (<a href="https://github.com/qorelanguage/qore/issues/3378">issue 3378</a>)
    - fixed a member initialization bug with imported classes
      (<a href="https://github.com/qorelanguage/qore/issues/3368">issue 3368</a>)
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module:
      - shut down dedicated socket conenctions last in order to allow for effective keep-alive implementations with
        WebSocket for example
        (<a href="https://github.com/qorelanguage/qore/issues/3488">issue 3488</a>)
      - fixed a bug where disconnected connections could cause unhandled exceptions to be output in the connection
        thread
        (<a href="https://github.com/qorelanguage/qore/issues/3415">issue 3415</a>)
      - fixed certificate and key errors for HTTPS listeners to generate user-friendly exceptions
        (<a href="https://github.com/qorelanguage/qore/issues/3397">issue 3397</a>)
    - <a href="../../modules/Logger/html/index.html">Logger</a> module:
      - added \c Logger::logArgs()
        (<a href="https://github.com/qorelanguage/qore/issues/3492">issue 3492</a>)
    - <a href="../../modules/Mime/html/index.html">Mime</a> module:
      - fixed bugs parsing binary data in multipart messages
        (<a href="https://github.com/qorelanguage/qore/issues/2936">issue 2936</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module:
      - fixed comparison of triggers with column restrictions with table alignment
        (<a href="https://github.com/qorelanguage/qore/issues/3466">issue 3466</a>)
    - <a href="../../modules/Pop3Client/html/index.html">Pop3Client</a> module:
      - fixed the timeout value for upgrading the SSL connection in \c Pop3Client
        (<a href="https://github.com/qorelanguage/qore/issues/3388">issue 3388</a>)
    - <a href="../../modules/QUnit/html/index.html">QUnit</a> module:
      - allow binary modules to be subjected to dependency injections
        (<a href="https://github.com/qorelanguage/qore/issues/3382">issue 3382</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module:
      - fixed RestHandler losing internal exception info when response was considered invalid by schema validator
        (<a href="https://github.com/qorelanguage/qore/issues/3435">issue 3435</a>)
      - fixed RestHandler incorrectly handling Accept header of incoming requests
        (<a href="https://github.com/qorelanguage/qore/issues/3426">issue 3426</a>)
      - added debug logging for REST schema validation errors
        (<a href="https://github.com/qorelanguage/qore/issues/3410">issue 3410</a>)
    - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module:
      - fixed \c NullRestSchemaValidator not respecting set Content-Type header from RestClass
        (<a href="https://github.com/qorelanguage/qore/issues/3427">issue 3427</a>)
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module:
      - fixed the timeout value for upgrading to SSL connection in \c SmtpClient
        (<a href="https://github.com/qorelanguage/qore/issues/3381">issue 3381</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module:
      - fixed quoting of reserved words in column names in table alignment
        (<a href="https://github.com/qorelanguage/qore/issues/3400">issue 3400</a>)
      - implemented the \c AbstractDatabase::getPhysicalSize() method
        (<a href="https://github.com/qorelanguage/qore/issues/3385">issue 3385</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module:
      - fixed a bug parsing nested lists in \c parse_to_qore_value()
        (<a href="https://github.com/qorelanguage/qore/issues/3483">issue 3483</a>)

    @section qore_092 Qore 0.9.2

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_092_new_features New Features in Qore
    - \c qdbg-remote supports an option to provide HTTP headers for WebSocket connections
      (<a href="https://github.com/qorelanguage/qore/issues/3350">issue 3350</a>)

    @subsection qore_092_bug_fixes Bug Fixes in Qore
    - implemented support for deserializing data from a binary string
      (<a href="https://github.com/qorelanguage/qore/issues/3357">issue 3357</a>)
    - fixed a bug with class initialization that could sometimes result in members of parent classes not being
      initialized when objects were constructed
      (<a href="https://github.com/qorelanguage/qore/issues/3355">issue 3355</a>)
    - fixed a bug in the <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module that could lead to a
      deadlock when DML methods are used with a datasource pool with connection contention
      (<a href="https://github.com/qorelanguage/qore/issues/3352">issue 3352</a>)

    @section qore_091 Qore 0.9.1

    @par Release Summary

    Bugfix release; see details below

    @subsection qore_091_new_features New Features in Qore
    - the serialization protocol has been updated to version 1.1; it still reads both binary- and data-serialized data
      from v1.0
    - added the @ref Qore::ListSerializationInfo "ListSerializationInfo" hashdecl to support serializing and
      deserializing lists with complex type information
    - new user modules:
      - <a href="../../modules/ZeyosRestClient/html/index.html">ZeyosRestClient</a>
        - added this new module providing APIs for communicating with <a href="http://www.zeyos.com">Zeyos.com</a>'s REST API

    @subsection qore_091_bug_fixes Bug Fixes in Qore
    - fixed a bug where the Salesforce rest connection returns 'rest' type instead of 'sfrests'
      (<a href="https://github.com/qorelanguage/qore/issues/3346">issue 3346</a>)
    - fixed a bug where an invalid parse exception would be raised with an assignment of a global variable to another
      global variable with the same name in a different namespace
      (<a href="https://github.com/qorelanguage/qore/issues/3337">issue 3337</a>)
    - implemented support for serializing and deserializing complex type information in lists and hashes
      (<a href="https://github.com/qorelanguage/qore/issues/3318">issue 3318</a>)
    - fixed bugs handling unassigned lvalues with complex type declarations with the @ref push "push" and
      @ref unshift "unshift" operators
      (<a href="https://github.com/qorelanguage/qore/issues/3317">issue 3317</a>)
    - fixed a memory leak in copy constructor execution in complex class hierarchies
      (<a href="https://github.com/qorelanguage/qore/issues/3312">issue 3312</a>)
    - implemented support for automatically initializing the \c %Qore library from Java when dynamically loaded from
      the JVM; additionally in this case the <a href="https://github.com/qorelanguage/module-jni">jni</a> module is
      loaded automatically immediately after the \c %Qore library is initialized
      (<a href="https://github.com/qorelanguage/qore/issues/3310">issue 3310</a>)
    - implemented support for performing binary searches in binary data by adding the following new pseudo-methods:
      - <binary>::find(data, softint)
      - <binary>::rfind(data, softint)
      .
      (<a href="https://github.com/qorelanguage/qore/issues/3300">issue 3300</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module fixes:
      - fixed a bug in \c get_exception_string() with Java exceptions
        (<a href="https://github.com/qorelanguage/qore/issues/3304">issue 3304</a>)
    - <a href="../../modules/QUnit/html/index.html">QUnit</a> module fixes:
      - fixed a bug where tests could not be nested
        (<a href="https://github.com/qorelanguage/qore/issues/3306">issue 3306</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a>:
      - fixed a bug with charset in the RestClient module
        (<a href="https://github.com/qorelanguage/qore/issues/3328">issue 3328</a>)
      - fixed default option handling in REST connections including timeout handling
        (<a href="https://github.com/qorelanguage/qore/issues/3321">issue 3321</a>)
    - <a href="../../modules/SalesforceRestClient/html/index.html">SalesforceRestClient</a>:
      - fixed default option handling in REST connections including timeout handling
        (<a href="https://github.com/qorelanguage/qore/issues/3321">issue 3321</a>)
    - <a href="../../modules/SewioRestClient/html/index.html">SewioRestClient</a>:
      - fixed default option handling in REST connections including timeout handling
        (<a href="https://github.com/qorelanguage/qore/issues/3321">issue 3321</a>)
    - <a href="../../modules/WebUtil/html/index.html">WebUtil</a>:
      - fixed a bug when StaticTemplateManager does not respect constructor's parse options in templates
        (<a href="https://github.com/qorelanguage/qore/issues/3334">issue 3334</a>

    @section qore_09 Qore 0.9

    @par Release Summary
    This is a major release of %Qore with large portions of code subject to extensive optimizations leading
    to large memory and performance improvements along with more control of @ref Qore::Program "Program"
    logic containers, multithreading, and a <a href="../../modules/reflection/html/index.html">reflection API</a>.
    This release breaks binary compatibility with older versions of %Qore as well, requiring binary modules
    to support the new API and ABI.

    @subsection qore_09_compatibility Changes That Can Affect Backwards-Compatibility
    - Qore classes and functions are now immutable once created; any attempt to add a new user
      variant to an existing function or method or to add new declarations to an existing class will result in a
      parse error.
    - @ref Qore::Program "Program" objects now only support a single complete parse action
      (@ref Qore::Program::parse() "Program::parse()" or @ref Qore::Program::parseCommit() "Program::parseCommit()");
      subsequent attempts to parse code into the same %Program object will fail with an exception.  If parsing fails
      due to a parse exception, the @ref Qore::Program "Program" object is generally no longer usable and must be
      recreated to be used.
    - @ref Qore::Program::parseRollback() "Program::parseRollback()" is now deprecated; this action removes all user
      code and most builtin code from the @ref Qore::Program "Program" object; delete the object instead of using
      this method
    - the @ref transient "transient" keyword has been introduced to support control over
      @ref Qore::Serializable "object serialization"; see also @ref no-transient "%no-transient"

    @subsection qore_09_new_features New Features in Qore
    - Up to 70% reduced memory usage in %Qore programs through:
      - Extensive memory optimizations
      - Changing the default thread stack size from 8 MB to 512 KB
        (<a href="https://github.com/qorelanguage/qore/issues/2701">issue 2701</a>)
      - Eliminating heap-allocated, atomic-reference-counted integer and floating-point values resulted in
        reduced memory usage as well as faster runtime execution
    - <a href="../../modules/reflection/html/index.html">Reflection API</a>
    - @ref Qore::Serializable "Data and object serialization" support:
      - All data types except @ref closure "closures", @ref call_reference "call references",
        @ref lvalue_references "references", and non-serializable objects can be serializeed
      - All objects from classes inheriting @ref Qore::Serializable "Serializable" can be serialized
      - Class members declared with the @ref transient "transient" keyword (new in this release) will not be serialized
        but instead will get their default values when deserialized
      - Classes can define their own local serialization and deserialization logic by defining the
        @ref Qore::Serializable::serializeMembers() "serializeMembers()" and
        @ref Qore::Serializable::deserializeMembers() "deserializeMembers()" methods, respectively
      - The following builtin classes support serialization:
        - @ref Qore::SQL::Datasource "Datasource"
        - @ref Qore::SQL::DatasourcePool "DatasourcePool"
        - @ref Qore::SSLCertificate "SSLCertificate"
        - @ref Qore::SSLPrivateKey "SSLPrivateKey"
        - @ref Qore::TimeZone "TimeZone"
    - New classes:
      - @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement": has been added as the parent class
        defining an abstract API for @ref Qore::SQL::SQLStatement "SQLStatement"
      - @ref Qore::Serializable "Serializable": a new class supporting data and object serialization
      - @ref Qore::StreamBase "StreamBase": a base class for stream classes allowing for a controlled
        handoff of a stream to another thread
    - Added support for importing a split user module represented as directory (<a href="https://github.com/qorelanguage/qore/issues/2562">issue 2562</a>)
    - New and updated methods in existing classes:
      - @ref Qore::SQL::AbstractDatasource::getSQLStatement() "AbstractDatasource::getSQLStatement()"
      - @ref Qore::SQL::Datasource::getSQLStatement() "Datasource::getSQLStatement()"
      - @ref Qore::SQL::DatasourcePool::getSQLStatement() "DatasourcePool::getSQLStatement()"
      - @ref Qore::File::redirect() "File::redirect()"
      - @ref Qore::FtpClient::getNetworkFamily() "FtpClient::getNetworkFamily()"
      - @ref Qore::FtpClient::setNetworkFamily() "FtpClient::setNetworkFamily()"
      - @ref Qore::FtpClient::getControlPeerInfo() "FtpClient::getControlPeerInfo()"
      - @ref Qore::FtpClient::getControlSocketInfo() "FtpClient::getControlSocketInfo()"
      - @ref Qore::FtpClient::getDataPeerInfo() "FtpClient::getDataPeerInfo()"
      - @ref Qore::FtpClient::getDataSocketInfo() "FtpClient::getDataSocketInfo()"
      - @ref Qore::Program::getParseOptionStringList() "Program::getParseOptionStringList()"
      - @ref Qore::Program::issueModuleCmd() "Program::issueModuleCmd()"
      - @ref Qore::Program::loadApplyToPrivateUserModule() "Program::loadApplyToPrivateUserModule()"
      - @ref Qore::Program::loadApplyToPrivateUserModuleWarn() "Program::loadApplyToPrivateUserModuleWarn()"
      - @ref Qore::Program::loadApplyToUserModule() "Program::loadApplyToUserModule()"
      - @ref Qore::Program::loadApplyToUserModuleWarn() "Program::loadApplyToUserModuleWarn()"
      - @ref Qore::Program::loadModule() "Program::loadModule()"
      - @ref Qore::Program::loadModuleWarn() "Program::loadModuleWarn()"
      - @ref Qore::Program::loadUserModuleWithProgram() "Program::loadUserModuleWithProgram()"
      - @ref Qore::Program::loadUserModuleWithProgramWarn() "Program::loadUserModuleWithProgramWarn()"
      - @ref Qore::Program::parse() "Program::parse()"
      - @ref Qore::Program::parsePending() "Program::parsePending()"
      - @ref Qore::SSLCertificate::copy() "SSLCertificate::copy()"
      - @ref Qore::SSLCertificate::getDER() "SSLCertificate::getDER()"
      - @ref Qore::SSLPrivateKey::copy() "SSLPrivateKey::copy()"
      - @ref Qore::SSLPrivateKey::getDER() "SSLPrivateKey::getDER()"
      - @ref Qore::StreamReader::getInputStream() "StreamReader::getInputStream()"
      - @ref Qore::StreamWriter::getOutputStream() "StreamWriter::getOutputStream()"
      - @ref Qore::Thread::Counter::inc() "Counter::inc()"
    - New functions:
      - @ref Qore::call_static_method() "call_static_method()"
      - @ref Qore::call_static_method_args() "call_static_method_args()"
      - @ref Qore::get_default_thread_stack_size() "get_default_thread_stack_size()"
      - @ref Qore::get_module_option() "get_module_option()"
      - @ref Qore::get_netif_list() "get_netif_list()"
      - @ref Qore::get_stack_size() "get_stack_size()"
      - @ref Qore::get_thread_name() "get_thread_name()"
      - @ref Qore::load_module_warn() "load_module_warn()
      - @ref Qore::set_default_thread_stack_size() "set_default_thread_stack_size()"
      - @ref Qore::set_module_option() "set_module_option()"
      - @ref Qore::set_thread_name() "set_thread_name()"
    - Updated functions:
      - @ref Qore::get_ex_pos() "get_ex_pos()": \c lang info was added to the result string if available
      - @ref Qore::load_module() "load_module(): added an optional \c warning_mask parameter
    - New modules:
      - <a href="../../modules/FsUtil/html/index.html">FsUtil</a>
      - <a href="../../modules/Logger/html/index.html">Logger</a>
      - <a href="../../modules/reflection/html/index.html">reflection</a>
    - New and updated hashdecls:
      - @ref Qore::NetIfInfo "NetIfInfo": new @ref hashdecl "hashdecl" for the @ref Qore::get_netif_list() "get_netif_list()" function
      - @ref Qore::CallStackInfo "CallStackInfo": updated with new members:
        - \c lang
        - \c programid
        - \c statementid
      - @ref Qore::ExceptionInfo "ExceptionInfo": updated with a new member:
        - \c lang
    - New constants:
      - @ref Qore::DomainCodeMap "DomainCodeMap"
      - @ref Qore::DomainStringMap "DomainStringMap"
      - @ref Qore::Option::HAVE_GET_NETIF_LIST "HAVE_GET_NETIF_LIST"
      - @ref Qore::Option::HAVE_GET_STACK_SIZE "HAVE_GET_STACK_SIZE"
      - @ref Qore::Option::HAVE_MANAGE_STACK "HAVE_MANAGE_STACK"
      - @ref Qore::Option::HAVE_THREAD_NAME "HAVE_THREAD_NAME"
      - @ref Qore::PO_BROKEN_SPRINTF "PO_BROKEN_SPRINTF"
      - @ref Qore::PO_NO_REFLECTION "PO_NO_REFLECTION"
      - @ref Qore::PO_NO_TRANSIENT "PO_NO_TRANSIENT"
      - @ref functional_domain_constants
    - New @ref date_formatting "date formatting" codes for <date>::format() and @ref Qore::format_date() "format_date()":
      - \c "Dn" and \c "DN": the ordinal day number in the year
      - \c "I": ISO-8601 week string
      - \c "Id" and \c "ID": <a href="http://en.wikipedia.org/wiki/ISO_week_date">ISO-8601 week</a> day number
      - \c "IF": the value in <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO-8601</a> format for both
        @ref relative_dates "relative" (ex: \c "P2Y1M3DT5H7M9.002S") and @ref absolute_dates "absolute"
        dates (ex: \c "2018-03-23T10:43:12.067628+01:00")
      - \c "Iw" and \c "IW": <a href="http://en.wikipedia.org/wiki/ISO_week_date">ISO-8601 week</a> number
      - \c "Iy" and \c "IY": <a href="http://en.wikipedia.org/wiki/ISO_week_date">ISO-8601 week</a> year
    - New parse directives:
      - @ref broken-sprintf "%broken-sprintf"
      - @ref correct-sprintf "%correct-sprintf"
      - @ref no-reflection "%no-reflection"
      - @ref no-transient "%no-transient"
    - @ref Qore::Program::parse() "Program::parse()" and @ref Qore::Program::parsePending() "Program::parsePending()" updates:
      the \a format_label parameter is obsolete/ignored
      (<a href="https://github.com/qorelanguage/qore/issues/2903">issue 2903</a>)
    - Module updates
      - <a href="../../modules/reflection/html/index.html">reflection</a>: a new binary module providing a
        reflection API to %Qore
      - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a> module changes:
        - The \c AbstractConnection::getConstructorInfo() method (and supporting declarations) was added to allow
          connections to be created dynamically, potentially in another process from a network call (<a href="https://github.com/qorelanguage/qore/issues/2628">issue 2628</a>)
        - The \c AbstractConnection has new public flag \c enabled. Also constructors are updated. (<a href="https://github.com/qorelanguage/qore/issues/3001">issue 3001</a>)
        - The \c AbstractConnection has new constructors, old ones are obsolete. Custom URL/URI parsing is possible (<a href="https://github.com/qorelanguage/qore/issues/3162">issue 3162</a>)
      - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module updates:
        - Added public methods \c AbstractCsvIterator::getRawLine() and \c AbstractCsvIterator::getRawLineValues() (<a href="https://github.com/qorelanguage/qore/issues/2739">issue 2739</a>)
      - <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a> module changes:
        - Added support for serializing and deserializing \c AbstractTable objects (<a href="https://github.com/qorelanguage/qore/issues/2663">issue 2663</a>)
      - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module changes:
        - added the \c "header-info" hash to the context argument when calling handlers
          (<a href="https://github.com/qorelanguage/qore/issues/3260">issue 3260</a>)
        - Added support for adding new HTTP methods to the server with the \c HttpServer::addHttpMethod() method
          (<a href="https://github.com/qorelanguage/qore/issues/2805">issue 2805</a>)
      - <a href="../../modules/Mime/html/index.html">Mime</a> module changes:
        - allow the default type for unknown extensions to be overridden in
          \c get_mime_type_from_ext()
          (<a href="https://github.com/qorelanguage/qore/issues/3260">issue 3260</a>)
      - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module changes:
        - Added support for serializing and deserializing \c AbstractTable objects (<a href="https://github.com/qorelanguage/qore/issues/2663">issue 2663</a>)
      - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module changes:
        - Implemented a check for allowed types when is the AUTO_INCREMENT flag used
          (<a href="https://github.com/qorelanguage/qore/issues/2978">issue 2978</a>)
        - Added support for serializing and deserializing \c AbstractTable objects (<a href="https://github.com/qorelanguage/qore/issues/2663">issue 2663</a>)
      - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module changes:
        - Added support for serializing and deserializing \c AbstractTable objects
          (<a href="https://github.com/qorelanguage/qore/issues/2663">issue 2663</a>)
      - <a href="../../modules/QUnit/html/index.html">QUnit</a> module changes:
        - updated \c Test::testSkip() to use the reason argument a format string with
          @ref Qore::vsprintf() "vsprintf()"
          (<a href="https://github.com/qorelanguage/qore/issues/3172">issue 3172</a>)
      - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module changes:
        - added the \c RestHandler::returnRestException() method that allows subclasses to determine how exceptions
          are handled
          (<a href="https://github.com/qorelanguage/qore/issues/3235">issue 3235</a>)
        - Updated to support alternative URI paths for actions so that an "action=xxx" argument is not needed; instead
          the action can be added to the end of the URI path so that \c "PUT path/xxx" can be used instead of
          \c "PUT path?action=xxx"
          (<a href="https://github.com/qorelanguage/qore/issues/2994">issue 2994</a>)
      - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module changes:
        - Updated the default validator to try all serialization methods if multiple methods are available and one fails
          (<a href="https://github.com/qorelanguage/qore/issues/2831">issue 2831</a>)
      - <a href="../../modules/Schema/html/index.html">Schema</a> module changes:
        - improved logging output when aligning schemas
          (<a href="https://github.com/qorelanguage/qore/issues/3114">issue 3114</a>)
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module changes:
        - Deprecated \c AbstractTable::getRowIterator() for \c AbstractTable::getStatement()
          (<a href="https://github.com/qorelanguage/qore/issues/2326">issue 2326</a>)
        - Updated the module to use the @ref Qore::SQL::AbstractSQLStatement "AbstractSQLStatement" class instead of the
          @ref Qore::SQL::SQLStatement "SQLStatement"
          (<a href="https://github.com/qorelanguage/qore/issues/2326">issue 2326</a>)
        - Added support for serializing and deserializing \c AbstractTable objects (<a href="https://github.com/qorelanguage/qore/issues/2663">issue 2663</a>)
      - <a href="../../modules/Swagger/html/index.html">Swagger</a>:
        - Swagger module does not accept multipart/form-data content-type and also does not work with list and hash parameters
          (<a href="https://github.com/qorelanguage/qore/issues/2932">issue 2932</a>)
      - <a href="../../modules/Util/html/index.html">Util</a> module updates:
        - Added public function \c parse_ranges() (<a href="https://github.com/qorelanguage/qore/issues/2438">issue 2438</a>)
        - Added public function \c check_ip_address() (<a href="https://github.com/qorelanguage/qore/issues/2483">issue 2483</a>)
        - Updated \c parse_to_qore_value() to support single-element lists and hashes with curly brackets including
          empty hashes
          (<a href="https://github.com/qorelanguage/qore/issues/3138">issue 3138</a>)
        - updated \c get_exception_string() to show the \c lang value
          (<a href="https://github.com/qorelanguage/qore/issues/3182">issue 3182</a>)
      - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a>:
        - added stopping connection from server side via \c WebSocketConnection::stop(), \c WebSocketHandler::stopOne()
          and \c WebSocketClient handling of the \c WSCC_GoingAway event
      - <a href="../../modules/WebUtil/html/index.html">WebUtil</a> module changes:
        - updated to allow more control over file serving
          (<a href="https://github.com/qorelanguage/qore/issues/3260">issue 3260</a>)
    - @ref relative_dates "Relative date" changes
      - Fractional seconds are accepted in the @ref single_reldates
      - Fractional date components are accepted in the @ref short_reldates based on <a href="https://en.wikipedia.org/wiki/ISO_8601#Durations">ISO-8601 durations</a>
    - Improved debugging support:
      - @ref Qore::ProgramControl::getStatementIdInfo() "ProgramControl::getStatementIdInfo()" provides breakpoint info
      - Command to resolve statement
      - Interrupt notification provides call stack info
      - \c "Run to statement" implementation
      - <a href="../../modules/DebugHandler/html/index.html">DebugHandler</a> reimplemented to support multiple websocket handlers
      - Programs are not interrupted in bootstrap code
      - Command line utils display source line code when interrupted
    - Runtime thread stack traces are available in all builds and the
      @ref Qore::Option::HAVE_RUNTIME_THREAD_STACK_TRACE "HAVE_RUNTIME_THREAD_STACK_TRACE" constant is always
      \c True.  Furthermore, the %Qore library has been extended to support stack tracing when embedding
      or integrating code in other programming languages at runtime

    @subsection qore_09_bug_fixes Bug Fixes in Qore
    - fixed a bug in @ref Qore::parse_url() "parse_url()" with single-character hostnames with a port number
      (<a href="https://github.com/qorelanguage/qore/issues/3287">issue 3287</a>)
    - fixed a minor bug handling error info in exception handling in the
      <a href="../../modules/RestClient/html/index.html">RestClient</a> module
      (<a href="https://github.com/qorelanguage/qore/issues/3280">issue 3280</a>)
    - fixed a crash in acquiring a new connection with datasource options
      (<a href="https://github.com/qorelanguage/qore/issues/3262">issue 3262</a>)
    - fixed a bug reporting the source location for runtime type errors related to missing return statements
      (<a href="https://github.com/qorelanguage/qore/issues/3255">issue 3255</a>)
    - fixed bugs where @ref Qore::SQL::Datasource::getConfigString() "Datasource::getConfigString()" and
      @ref Qore::SQL::Datasource::getConfigHash() "Datasource::getConfigHash()" would require a connection to the
      server, making it impossible to check option before connecting
      (<a href="https://github.com/qorelanguage/qore/issues/3247">issue 3247</a>)
    - fixed a bug with @ref weak_assignment_operator "weak references" in some assignment expressions
      (<a href="https://github.com/qorelanguage/qore/issues/3202">issue 3202</a>)
    - fixed bugs in @ref Qore::sprintf() "sprintf()", @ref Qore::vsprintf() "vsprintf()", and all variants where
      @ref nothing was not treated the same as no value
      (<a href="https://github.com/qorelanguage/qore/issues/3184">issue 3184</a>)
    - worked around a potential COW bug in \c std::string in GNU libdstdc++ 6+
      (<a href="https://github.com/qorelanguage/qore/issues/3179">issue 3179</a>)
    - fixed a bug with simple additional and subtraction with mixed @ref timeout_type "timeout" and
      @ref date_type "date" values; updated docs that arithmetic operations with timeout values are not recommended
      and can return unexpected values in some situations
      (<a href="https://github.com/qorelanguage/qore/issues/3157">issue 3157</a>)
    - fixed a bug in deterministic garbage collection where @ref Qore::Thread::Queue "Queue" objects were not scanned
      and therefore cycles due to @ref Qore::Thread::Queue "Queue" elements would cause a memory and reference leak
      (<a href="https://github.com/qorelanguage/qore/issues/3101">issue 3101</a>)
    - fixed a bug where call references did not set the execution context with builtin functions
      and therefore calls to builtin functions in modules (such as \c jni) with
      per-program private data would fail
      (<a href="https://github.com/qorelanguage/qore/issues/3024">issue 3024</a>)
    - fixed a bug where rvalue references with complex subtypes could get modified during an assignment
      (<a href="https://github.com/qorelanguage/qore/issues/2891">issue 2891</a>)
    - Fixed a bug where class members could be initialized multiple times in a class with multiple
      inheritance where the same class is inherited multiple times in the hierarchy
      (<a href="https://github.com/qorelanguage/qore/issues/2741">issue 2741</a>)
    - Fixed bugs handling @ref abstract "abstract" methods in complex hierarchies with multiple inheritance
      (<a href="https://github.com/qorelanguage/qore/issues/2741">issue 2741</a>)
    - Fixed bugs handling object scope in @ref background "background" expressions
      (<a href="https://github.com/qorelanguage/qore/issues/2653">issue 2653</a>)
    - Fixed a bug: @ref Qore::hash(list<auto>) "hash(list<auto>)" where l has an odd number of elements never returns
      (<a href="https://github.com/qorelanguage/qore/issues/2860">issue 2860</a>)
    - Fixed a bug where no error is issued when an expression does not have meaning as a top-level statement
      (<a href="https://github.com/qorelanguage/qore/issues/2826">issue 2826</a>),
      and also where such expression is an argument to the @ref background "background" operator (<a href="https://github.com/qorelanguage/qore/issues/2747">issue 2747</a>)
    - Fixed a bug where the parser does not recognize that a return value of a function call is not ignored if it
      is an object and its method is immediately called
      (<a href="https://github.com/qorelanguage/qore/issues/2863">issue 2863</a>),
    - Fixed a bug where \c public and \c private members of classes inherited with \c private:internal inheritance
      were not initialized when objects were created
      (<a href="https://github.com/qorelanguage/qore/issues/2970">issue 2970</a>),
    - Module fixes:
      - <a href="../../modules/QUnit/html/index.html">QUnit</a>:
        - fixed error reporting with type errors with number values
          (<a href="https://github.com/qorelanguage/qore/issues/2984">issue 2984</a>)

    @section qore_08139 Qore 0.8.13.9

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08139_bug_fixes Bug Fixes in Qore
    - fixed a bug handling start and end arguments in @ref Qore::replace() "replace()" that would cause a crash
      (<a href="https://github.com/qorelanguage/qore/issues/3345">issue 3345</a>)
    - fixed a bug handling invalid DB driver options in datasource creation that could lead to a crash with some
      drivers
      (<a href="https://github.com/qorelanguage/qore/issues/3243">issue 3243</a>)
    - fixed a memory error in internal list handling that could lead to memory corruption and crashes
      (<a href="https://github.com/qorelanguage/qore/issues/3206">issue 3206</a>)
    - fixed calls to Dir::list*() methods which failed whenever there was a symlink with a non-existent target in a directory
      (<a href="https://github.com/qorelanguage/qore/issues/3192">issue 3192</a>)
    - fixed a bug handling illegal abstract method definitions of special class methods
      (<a href="https://github.com/qorelanguage/qore/issues/3126">issue 3126</a>)
    - fixed handling <tt>304 Not Modified</tt> responses in the @ref Qore::HTTPClient "HTTPClient" class
      (<a href="https://github.com/qorelanguage/qore/issues/3116">issue 3116</a>)
    - fixed a crashing bug in the @ref Qore::Transform "Transform" class when used with encryption algorithms
      (<a href="https://github.com/qorelanguage/qore/issues/3111">issue 3111</a>)
    - fixed a crash with multiple hash keys when parsing the @ref hmap "hash map operator"
      (<a href="https://github.com/qorelanguage/qore/issues/3108">issue 3108</a>)
    - module fixes:
      - <a href="../../modules/HttpServer/html/index.html">HttpServer</a>:
        - fixed responses that cannot have a message body (ex: \c HEAD requests and others)
          (<a href="https://github.com/qorelanguage/qore/issues/3116">issue 3116</a>)
      - <a href="../../modules/RestClient/html/index.html">RestClient</a>:
        - fixed default option handling in REST connections including timeout handling
          (<a href="https://github.com/qorelanguage/qore/issues/3321">issue 3321</a>)
      - <a href="../../modules/SalesforceRestClient/html/index.html">SalesforceRestClient</a>:
        - fixed default option handling in REST connections including timeout handling
          (<a href="https://github.com/qorelanguage/qore/issues/3321">issue 3321</a>)
      - <a href="../../modules/SewioRestClient/html/index.html">SewioRestClient</a>:
        - fixed default option handling in REST connections including timeout handling
          (<a href="https://github.com/qorelanguage/qore/issues/3321">issue 3321</a>)
      - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a>:
        - added missing exception handling in the connection close callback
          (<a href="https://github.com/qorelanguage/qore/issues/3225">issue 3225</a>)
      - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a>:
        - added missing exception handling to connection registration code
          (<a href="https://github.com/qorelanguage/qore/issues/3215">issue 3215</a>)

    @section qore_08138 Qore 0.8.13.8

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08138_bug_fixes Bug Fixes in Qore
    - fixed a bug where @ref Qore::stdout, @ref Qore::stdin, @ref Qore::stderr,
      @ref Qore::stdout_stream, @ref Qore::stdin_stream, and @ref Qore::stderr_stream, would
      perform automatic CRLF -> LF translations on Windows
      (<a href="https://github.com/qorelanguage/qore/issues/3061">issue 3061</a>)
    - fixed a bug in secure socket TLS communication making it impossible to talk to servers
      that require <a href="https://en.wikipedia.org/wiki/Server_Name_Indication">SNI</a>
      (<a href="https://github.com/qorelanguage/qore/issues/3053">issue 3053</a>)
    - fixed a deadlock in @ref Qore::FtpClient::put() "FtpClient::put()" with zero-length files
      (<a href="https://github.com/qorelanguage/qore/issues/3038">issue 3038</a>)
    - fixed an error respecting the I/O timeout in @ref Qore::FtpClient::put() "FtpClient::put()"
      with @ref Qore::InputStream "InputStream" argugments
      (<a href="https://github.com/qorelanguage/qore/issues/3032">issue 3032</a>)
    - fixed an error where @ref Qore::FtpClient "FtpClient" \c PORT operations would not time out
      (<a href="https://github.com/qorelanguage/qore/issues/3031">issue 3031</a>)

    @section qore_08137 Qore 0.8.13.7

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08137_bug_fixes Bug Fixes in Qore
    - module fixes:
      - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a>:
        - removed unnecessary serialization from AbstractConnection::get()
          (<a href="https://github.com/qorelanguage/qore/issues/2880">issue 2880</a>)
      - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a>
        - fixed schema alignment when there are functions to be dropped
          (<a href="https://github.com/qorelanguage/qore/issues/2963">issue 2963</a>)
    - fixed a race condition in @ref Qore::Thread::ThreadPool "ThreadPool" destruction that could
      cause a crash
      (<a href="https://github.com/qorelanguage/qore/issues/2906">issue 2906</a>)
    - fixed a hard to reproduce bug with internal runtime type matching that sometimes caused
      invalid runtime exceptions to be raised with base class constructors
      (<a href="https://github.com/qorelanguage/qore/issues/2928">issue 2928</a>)
    - fixed an error handling attach errors to @ref Qore::Program "Program" objects from foreign threads
      after the program has been deleted
      (<a href="https://github.com/qorelanguage/qore/issues/2950">issue 2950</a>)
    - fixed a bug that would cause a crash if an unknown \c "Content-Encoding" value were received by the
      @ref Qore::HTTPClient "HTTPClient" class
      (<a href="https://github.com/qorelanguage/qore/issues/2953">issue 2953</a>)
    - fixed a memory leak with binary objects in certain operations such as when reading a file into a
      binary object
      (<a href="https://github.com/qorelanguage/qore/issues/2982">issue 2982</a>)

    @section qore_08136 Qore 0.8.13.6

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08136_bug_fixes Bug Fixes in Qore
    - fixed a deadlock in lvalue handling with complex object operations in multithreaded contexts
      (<a href="https://github.com/qorelanguage/qore/issues/2889">issue 2889</a>)
    - fixed type errors with complex hashes in <hash>::values() and @ref Qore::hash_values() "hash_values()"
      (<a href="https://github.com/qorelanguage/qore/issues/2877">issue 2877</a>)
    - fixed an error handling complex types with the @ref plus_equals_operator "+=" operator
      (<a href="https://github.com/qorelanguage/qore/issues/2869">issue 2869</a>)
    - fixed a memory leak in @ref Qore::TreeMap::put() "TreeMap::put()"
      (<a href="https://github.com/qorelanguage/qore/issues/2840">issue 2840</a>)
    - fixed a crashing bug in \c qpp (used in building Qore from source)
      (<a href="https://github.com/qorelanguage/qore/issues/2838">issue 2838</a>)
    - fixed a crashing bug in @ref Qore::Socket::accept() "Socket::accept()" handling
      (<a href="https://github.com/qorelanguage/qore/issues/2835">issue 2835</a>)
    - fixed a cosmetic bug in module load error messages to provide the context of the module where the error
      is found in cases where it was missing
      (<a href="https://github.com/qorelanguage/qore/issues/2834">issue 2834</a>)
    - module fixes:
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>:
        - schema alignment fails when user accidentally creates table
          schema with strings instead of hashes
          (<a href="https://github.com/qorelanguage/qore/issues/2761">issue 2358</a>)
      - <a href="../../modules/Swagger/html/index.html">Swagger</a>:
        - Swagger module does not use text/plain Content-Type for simple string responses
          (<a href="https://github.com/qorelanguage/qore/issues/2893">issue 2893</a>)
        - Swagger module does not check response body if response schema is missing in Swaggerfile
          (<a href="https://github.com/qorelanguage/qore/issues/2894">issue 2894</a>)
      - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a>:
        - allowed the handling of \c PING messages to be customized
          (<a href="https://github.com/qorelanguage/qore/issues/2887">issue 2887</a>)
      - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a>:
        - added support for heartbeat messages
          (<a href="https://github.com/qorelanguage/qore/issues/2887">issue 2887</a>)


    @section qore_08135 Qore 0.8.13.5

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08135_bug_fixes Bug Fixes in Qore
    - fixed a bug where user modules with global variables could not be loaded into @ref Qore::Program "Program"
      containers where @ref Qore::PO_NO_GLOBAL_VARS "PO_NO_GLOBAL_VARS" was set
      (<a href="https://github.com/qorelanguage/qore/issues/2807">issue 2807</a>)
    - fixed a deadlock with @ref Qore::Thread::RWLock "RWLock" and @ref Qore::Thread::Condition "Condition" objects when the
      read lock is held recursively (<a href="https://github.com/qorelanguage/qore/issues/2817">issue 2817</a>)
    - module fixes:
      - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a>:
        - implemented the \c number_format option to allow numbers with alternative decimal separators
          to be parsed and generated (<a href="https://github.com/qorelanguage/qore/issues/2806">issue 2806</a>)
      - <a href="../../modules/RestClient/html/index.html">RestClient</a>:
        - added support for REST requests with binary message bodies; added the \c "bin" serialization method
        (<a href="https://github.com/qorelanguage/qore/issues/2816">issue 2816</a>)
      - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a>:
        - fixed the null validator to handle binary message bodies; fixed issues with \c "text"
          serialization with binary message bodies
          (<a href="https://github.com/qorelanguage/qore/issues/2816">issue 2816</a>)

      - <a href="../../modules/Mime/html/index.html">Mime</a>:
        - fixed a bug in \c mime_parse_form_urlencoded_string() where
          repeated elements would be overwriteen by subsequent keys with the same name
          (<a href="https://github.com/qorelanguage/qore/issues/2761">issue 2761</a>)

    @section qore_08134 Qore 0.8.13.4

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08134_bug_fixes Bug Fixes in Qore
    - fixed a bug where hashes and lists with subtype @ref auto_type "auto" were not created correctly with
      implicit initialization causing excess type stripping which could lead to performance issues with large
      data structures (<a href="https://github.com/qorelanguage/qore/issues/2767">issue 2767</a>)
    - implemented a new optional DBI statement method to allow for statement execution only for describing the
      result set to solve performance issues when describing statements with large data sets
      (<a href="https://github.com/qorelanguage/qore/issues/2773">issue 2773</a>)
    - fixed a performance bug by eliminating overzealous and unnecessary internal type stripping
      (<a href="https://github.com/qorelanguage/qore/issues/2791">issue 2791</a>)
    - module fixes:
      - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a>:
        - implemented the \c csvutil_set_global_compat_force_empty_string() function and
          the \c compat_force_empty_string CSV parsing option to force \c "*string" fields with no
          value to return an empty string when parsing rather than @ref nothing for backwards compatibility
          with very early versions of CsvUtil
          (<a href="https://github.com/qorelanguage/qore/issues/2476">issue 2476</a>)
      - <a href="../../modules/Mime/html/index.html">Mime</a>:
        - mime_parse_form_urlencoded_string raies a parse exception when there is no value for a key
          (<a href="https://github.com/qorelanguage/qore/issues/2760">issue 2760</a>)
      - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module changes
        - synonym resolving can fail with duplicated object name
          (<a href="https://github.com/qorelanguage/qore/issues/2758">issue 758</a>)
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>:
        - implemented the \c AbstractTable::getRowIteratorNoExec() method (<a href="https://github.com/qorelanguage/qore/issues/2773">issue 2773</a>)
      - <a href="../../modules/TableMapper/html/index.html">TableMapper</a>:
        - updated to use the new SQL statement DBI method for efficient execution of queries only for describing
          result sets with outbound mappers to solve performance problems related to mappers that
          have statements with large data sets (<a href="https://github.com/qorelanguage/qore/issues/2773">issue 2773</a>)
        - fixed \c RawSqlStatementOutboundMapper to be usable without subclassing
          (<a href="https://github.com/qorelanguage/qore/issues/2775">issue 2775</a>)

    @section qore_08133 Qore 0.8.13.3

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08133_new_features New Features in Qore
    - improved debugging support:
      - added support for a <a href="https://code.visualstudio.com/">Visual Studio Code</a> debug adapter for %Qore
      - the debugger can now retrieve sources when running from a remote debug server
      - debugger options can now be set from command line (verbosity etc.)
      - the \c onAttach() event is now executed synchronously when the program thread context starts
      - the \c onDetach() event is executed properly when program thread contexts terminate
      - the \c onStep() now provides the \c breakpointId value if available
      - the \c onExit() event was added for greater control over code execution in the debugger
      - the \c onException() event was improved
      - server commands now support \c frameid as a parameter
      - added the following methods to support retrieving source code in the debugger:
        - @ref Qore::ProgramControl::getSourceFileNames() "ProgramControl::getSourceFileNames()"
        - @ref Qore::ProgramControl::getSourceLabels() "ProgramControl::getSourceLabels()"
    - new module:
      - <a href="../../modules/DebugLinenoiseCmdLine/html/index.html">DebuLinenoiseCmdLine</a>

    @subsection qore_08133_bug_fixes Bug Fixes in Qore
    - module fixes:
      - <a href="../../modules/QUnit/html/index.html">QUnit</a>:
        - improved output in assertion failures for strings with special whitespace and for multi-line data structures (<a href="https://github.com/qorelanguage/qore/issues/2680">issue 2680</a>)
      - <a href="../../modules/WebUtil/html/index.html">WebUtil</a>:
        - made it possible for FileHandler subclasses to add headers to response (<a href="https://github.com/qorelanguage/qore/issues/2686">issue 2686</a>)
    - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a>:
        - improved HTTP log masking to mask fewer false positives when attempting to mask sensitive data (<a href="https://github.com/qorelanguage/qore/issues/2621">issue 2621</a>)
    - fixed a crashing bug initializing constants with recursive references to code
      (<a href="https://github.com/qorelanguage/qore/issues/3027">issue 3027</a>)
    - fixed a crashing bug in the @ref plus_equals_operator "+= operator" with objects and hashes when @ref require-types "%require-types" is not in force (<a href="https://github.com/qorelanguage/qore/issues/2634">issue 2634</a>)
    - fixed a crashing bug in the @ref background "background operator" with non-constant hash expressions with local variable references (<a href="https://github.com/qorelanguage/qore/issues/2637">issue 2637</a>)
    - worked around an Oracle bug in materialized view creation in the <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module where when the schema user is missing the <tt>CREATE MATERIALIZED VIEW</tt> grant the table backing the view is created but the materialized view itself is not created causing future creation actions to fail (<a href="https://github.com/qorelanguage/qore/issues/2643">issue 2643</a>)
    - implemented support for an optional error-handling method in SQL callbacks in the <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module to allow SqlUtil to recover from error scenarios in schema creation/alignment (<a href="https://github.com/qorelanguage/qore/issues/2643">issue 2643</a>)
    - fixed a design bug where an empty list <tt>()</tt> and an empty hash <tt>{}</tt> could not be assigned to complex types, leading to excess typing and casting for simple operations (<a href="https://github.com/qorelanguage/qore/issues/2647">issue 2647</a>)
    - fixed a bug in the @ref map "map operator" with complex types and empty list expressions (<a href="https://github.com/qorelanguage/qore/issues/2651">issue 2651</a>)
    - fixed a bug where implicitly-declared values of complex "or nothing" types would not be declared with the correct runtime type information (<a href="https://github.com/qorelanguage/qore/issues/2652">issue 2652</a>)
    - fixed a bug affecting class initialization with out of order initialization (<a href="https://github.com/qorelanguage/qore/issues/2657">issue 2657</a>)
    - implemented support for the more concise declaration of immediate typed hash values (<a href="https://github.com/qorelanguage/qore/issues/2675">issue 2675</a>)
    - fixed a bug where a crash would result when evaluating certain expressions in the @ref background "brackground operator" due to a memory error (<a href="https://github.com/qorelanguage/qore/issues/2679">issue 2679</a>)
    - fixed @ref date_formatting "date formatting" output with the \c Z placeholder to always output the UTC offset as documented (<a href="https://github.com/qorelanguage/qore/issues/2684">issue 2684</a>)
    - fixed program thread context to return frames properly (<a href="https://github.com/qorelanguage/qore/issues/2674">issue 2674</a>)
    - fixed an internal memory bug that could cause unallocated memory to be read when creating objects (<a href="https://github.com/qorelanguage/qore/issues/2712">issue 2712</a>)
    - fixed a memory issue with typed hashes that could lead to a runtime creash (<a href="https://github.com/qorelanguage/qore/issues/2725">issue 2725</a>)

    @section qore_08132 Qore 0.8.13.2

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08132_new_features New Features in Qore
    - \c "thread list", \c "backtrace all" commands implemented for the debugger (<a href="https://github.com/qorelanguage/qore/issues/2608">issue 2608</a>)
    - <a href="../../modules/QUnit/html/index.html">QUnit</a>: overloaded the \c testAssertionValue() method to support auto/number/float and more verbose output when a difference in number/float values is found (<a href="https://github.com/qorelanguage/qore/issues/2556">issue 2556</a>)
    - qdbg-remote supports ConnectionProvider connections (<a href="https://github.com/qorelanguage/qore/issues/2613">issue 2613</a>)
    - new method: @ref Qore::Breakpoint::getProgram() "Breakpoint::getProgram()"

    @subsection qore_08132_bug_fixes Bug Fixes in Qore
    - module fixes:
      - <a href="../../modules/DebugCmdLine/html/index.html">DebugCmdLine</a>:
        - improved breakpoint usability (<a href="https://github.com/qorelanguage/qore/issues/2604">issue 2604</a>)
        - fixed a bug parsing call signatures when setting breakpoints (<a href="https://github.com/qorelanguage/qore/issues/2601">issue 2601</a>)
      - <a href="../../modules/DebugProgramControl/html/index.html">DebugProgramControl</a>:
        - improved breakpoint usability (<a href="https://github.com/qorelanguage/qore/issues/2604">issue 2604</a>)
        - fixed a bug providing the programId context (<a href="https://github.com/qorelanguage/qore/issues/2603">issue 2603</a>)
      - <a href="../../modules/QUnit/html/index.html">QUnit</a>:
        - improved error location reporting by providing all stack location information up until the QUnit call to cover the case when multiple code layers are used such as one or more test modules (<a href="https://github.com/qorelanguage/qore/issues/1720">issue 1720</a>)
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>:
        - implemented support for literal values in column operators taking column arguments with \c cop_value() (<a href="https://github.com/qorelanguage/qore/issues/2555">issue 2555</a>)
      - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a>:
        - added \c WebSocketClient::pong() to allow unsolicited \c PONG messages to be sent (<a href="https://github.com/qorelanguage/qore/issues/2566">issue 2566</a>)
      - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a>:
        - fixed a bug where unsolicited \c PONG messages caused the connection to be prematurely closed (<a href="https://github.com/qorelanguage/qore/issues/2566">issue 2566</a>)
    - fixed a bug with implicit initialization of typed hashes; this is now illegal and a \c HASHDECL-IMPLICIT-CONSTRUCTION-ERROR exception is raised in such cases (<a href="https://github.com/qorelanguage/qore/issues/2491">issue 2491</a>)
    - fixed a bug with @ref Qore::Thread::Condition "Condition" variable handling on macOS High Sierra due to an internal undocumented API change (<a href="https://github.com/qorelanguage/qore/issues/2576">issue 2576</a>)
    - fixed a memory error with the @ref plus_equals_operator "+= operator" and uninitialized date/time values (<a href="https://github.com/qorelanguage/qore/issues/2591">issue 2591</a>)
    - fixed a bug in the remote debugger \c qdbg-remote where \c wss:// schemes were not accepted (<a href="https://github.com/qorelanguage/qore/issues/2596">issue 2596</a>)
    - fixed a bug in an error message in @ref Qore::ProgramControl::findFunctionStatementId() "ProgramControl::findFunctionStatementId()" (<a href="https://github.com/qorelanguage/qore/issues/2600">issue 2600</a>)
    - fixed a crash when @ref Qore::HTTPClient::setDefaultPath() "HTTPClient::setDefaultPath()" was called with no argument (<a href="https://github.com/qorelanguage/qore/issues/2610">issue 2610</a>)
    - fixed a bug in debugger when program is not set (<a href="https://github.com/qorelanguage/qore/issues/2603">issue 2603</a>)

    @section qore_08131 Qore 0.8.13.1

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08131_new_features New Features in Qore
    - the \c sqlutil script has been updated with the \c --select option to allow dumped table rows to be filtered (<a href="https://github.com/qorelanguage/qore/issues/2509">issue 2509</a>)

    @subsection qore_08131_bug_fixes Bug Fixes in Qore
    - fixes in modules:
      - \c astparser module fixes:
        - fixed memory leaks in \c AstParser::parseFile() and \c AstParser::parseString() methods (<a href="https://github.com/qorelanguage/qore/issues/2261">issue 2261</a>)
        - fixed incorrect flex code regarding parse options leading to segfaults (<a href="https://github.com/qorelanguage/qore/issues/2262">issue 2262</a>)
      - <a href="../../modules/DebugCmdLine/html/index.html">DebugCmdLine</a> module fixes:
        - fixed value setting to process all remaining arguments on the command line (<a href="https://github.com/qorelanguage/qore/issues/2294">issue 2294</a>)
      - <a href="../../modules/DebugCmdLine/html/index.html">DebugCmdLine</a> module fixes:
        - the debugger should report ambiguous partial matches as an error (<a href="https://github.com/qorelanguage/qore/issues/2292">issue 2292</a>)
      - <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module fixes:
        - fixed \c Message::addBody() with no body present (issue <a href="https://github.com/qorelanguage/qore/issues/2360">issue 2360</a>)
      - <a href="../../modules/Mapper/html/index.html">Mapper</a> module fixes:
        - fixed a bug in the \c STRING-TOO-LONG exception (<a href="https://github.com/qorelanguage/qore/issues/2495">issue 2405</a>)
      - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module fixes:
        - fixed a bug where default column values were compared incorrectly leading to false positives when comparing and aligning DB schemas (<a href="https://github.com/qorelanguage/qore/issues/2527">issue 2527</a>)
      - <a href="../../modules/Qdx/html/index.html">Qdx</a> module fixes:
        - fixed a bug in documentation post-processing for @ref hashdecl "hashdecl" declarations
        (<a href="https://github.com/qorelanguage/qore/issues/2298">issue 2298</a>)
      - <a href="../../modules/QUnit/html/index.html">QUnit</a> fixes:
        - added missing comparison methods (<a href="https://github.com/qorelanguage/qore/issues/1588">issue 1588</a>):
          - \c Test::assertRegex()
          - \c Test::assertNRegex()
          - \c Test::assertNeq()
          - \c Test::assertNeqSoft()
          - \c Test::assertGt()
          - \c Test::assertGtSoft()
          - \c Test::assertGe()
          - \c Test::assertGeSoft()
          - \c Test::assertLt()
          - \c Test::assertLtSoft()
          - \c Test::assertLe()
          - \c Test::assertLeSoft()
          - \c Test::assertNothing()
      - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module fixes:
        - updated to return a 400 Bad Request error when REST schema validation fails on messages received <a href="https://github.com/qorelanguage/qore/issues/2344">issue 2344</a>)
        - updated to return a 400 Bad Request error when there are string encoding errors with messages received (<a href="https://github.com/qorelanguage/qore/issues/2398">issue 2398</a>)
        - updated to return a 404 Not Found error when REST subclass does not exist (<a href="https://github.com/qorelanguage/qore/issues/2405">issue 2405</a>)
        - updated to return a 400 Bad Request error when ENCODING-CONVERSION-ERROR occurs during request parsing (<a href="https://github.com/qorelanguage/qore/issues/2543">issue 2543</a>)
      - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module fixes:
        - updated docs for \c AbstractRestSchemaValidator::parseRequest() to reflect how validation exceptions should be raised for proper error reporting (<a href="https://github.com/qorelanguage/qore/issues/2344">issue 2344</a>)
        - fixed handling of messages with non-object (i.e. non-hash) bodies (<a href="https://github.com/qorelanguage/qore/issues/2366">issue 2366</a>)
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module changes
        - implemented support for custom column operators (<a href="https://github.com/qorelanguage/qore/issues/2314">issue 2314</a>)
      - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module changes
        - implemented support for chained synonyms (<a href="https://github.com/qorelanguage/qore/issues/2408">issue 2408</a>)
        - allow to use DBA_* views instead of ALL_* if possible (<a href="https://github.com/qorelanguage/qore/issues/2418">issue 2418</a>)
      - <a href="../../modules/Swagger/html/index.html">Swagger</a> module fixes:
        - fixed handling of string type date and date-time formats (<a href="https://github.com/qorelanguage/qore/issues/2341">issue 2341</a>)
        - fixed example value for binary type (<a href="https://github.com/qorelanguage/qore/issues/2342">issue 2342</a>)
        - fixed serialization of date/time values (<a href="https://github.com/qorelanguage/qore/issues/2349">issue 2349</a>)
        - updated to return a 400 Bad Request error when REST schema validation fails on messages received <a href="https://github.com/qorelanguage/qore/issues/2344">issue 2344</a>)
        - fixed handling of non-string enum types (<a href="https://github.com/qorelanguage/qore/issues/2364">issue 2364</a>)
        - fixed confusing error messages with invalid parameter types (<a href="https://github.com/qorelanguage/qore/issues/2365">issue 2365</a>)
        - fixed handling of messages with non-object (i.e. non-hash) bodies (<a href="https://github.com/qorelanguage/qore/issues/2366">issue 2366</a>)
        - fixed handling of optional parameters (<a href="https://github.com/qorelanguage/qore/issues/2369">issue 2369</a>)
        - fixed handling of non-string query parameters (<a href="https://github.com/qorelanguage/qore/issues/2388">issue 2388</a>)
        - fixed a bug where string value constraints were only enforced in requests but not responses (<a href="https://github.com/qorelanguage/qore/issues/2396">issue 2396</a>)
        - fixed a bug where invalid date, binary, and byte values would cause a <tt>500 Internal Server Error</tt> response to be returned instead of a <tt>400 Bad Request</tt> error (<a href="https://github.com/qorelanguage/qore/issues/2397">issue 2397</a>)
        - fixed a bug where date values were formatted incorrectly in Swagger responses (<a href="https://github.com/qorelanguage/qore/issues/2409">issue 2409</a>)
        - fixed a bug which made it impossible to send data with other content/mime types than json, yamlrpc, FormUrlEncoded or MultipartFormData (<a href="https://github.com/qorelanguage/qore/issues/2497">issue 2497</a>)
        - fixed handling of string/binary values (<a href="https://github.com/qorelanguage/qore/issues/2505">issue 2505</a>)
        - fixed a bug where consumes property of operations was sometimes ignored (<a href="https://github.com/qorelanguage/qore/issues/2507">issue 2507</a>)
        - fixed parsing of responses without Content-Type header (<a href="https://github.com/qorelanguage/qore/issues/2517">issue 2517</a>)
        - fixed path matching for paths not beginning with a slash (<a href="https://github.com/qorelanguage/qore/issues/2516">issue 2516</a>)
      - <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module fixes:
        - fixed issues where where description fields of input and output records for automatically-generated options did not reflect column comments and could not be overridden with user input (<a href="https://github.com/qorelanguage/qore/issues/2520">issue 2520</a>)
    - fixed bugs affecting debugging matching function/method variants and finding statements with special methods and with complex types (<a href="https://github.com/qorelanguage/qore/issues/1865">issue 1865</a>)
    - fixed a bug in \c qpp generating hashdecl code in a specific namespace (<a href="https://github.com/qorelanguage/qore/issues/2255">issue 2255</a>)
    - fixed an error in a @ref hashdecl "hashdecl" documentation example (<a href="https://github.com/qorelanguage/qore/issues/2299">issue 2299</a>)
    - made C++ APIs for complex types for modules public (<a href="https://github.com/qorelanguage/qore/issues/2271">issue 2271</a>)
    - fixed inconsistencies in the behavior of the @ref range_operator "range operator (..)" and the @ref list_element_operator "square brackets operator []" with lists and ranges between immediate evaluation and lazy functional evaluation and aligned the behavior of the operators among supported data types with the @ref remove "remove" and @ref delete "delete" operators (<a href="https://github.com/qorelanguage/qore/issues/2260">issue 2260</a>)
    - fixed a bug handling statement indices with parse errors (<a href="https://github.com/qorelanguage/qore/issues/2312">issue 2312</a>)
    - fixed too-agressive class hierachy checks that disallowed legal hierarchies where the same base class appears more than once in the hierarchy (<a href="https://github.com/qorelanguage/qore/issues/2317">issue 2317</a>)
    - fixed a crashing bug in the background operator when the object in context goes out of scope with the thread and an exception is thrown (<a href="https://github.com/qorelanguage/qore/issues/2319">issue 2319</a>)
    - fixed sending duplicate headers when header hash keys differ only in case; headers that differ only in case will be overwritten by the last header in the hash with a matching name with a case-insensitive search (<a href="https://github.com/qorelanguage/qore/issues/2340">issue 2340</a>)
    - fixed \c q_absolute_path_windows to correctly recognize relative Windows paths beginning with a drive letter (<a href="https://github.com/qorelanguage/qore/issues/2377">issue 2377</a>)
    - fixed a bug in <tt><b>private:internal</b></tt> in method execution within a class hierarchy in some cases (<a href="https://github.com/qorelanguage/qore/issues/2380">issue 2380</a>)
    - fixed an obscure bug handling runtime errors in code calls with a variant matched at parse time where a runtime exception could occur (<a href="https://github.com/qorelanguage/qore/issues/2392">issue 2392</a>)
    - improved breakpoints (enabled by default), extended help texts, load/save debug history and session (<a href="https://github.com/qorelanguage/qore/issues/2401">issue 2401</a>)
    - fixed a bug in an error message regarding binary module signal assignments (<a href="https://github.com/qorelanguage/qore/issues/2439">issue 2439</a>)
    - added C++ functions to allow binary modules to allocate and deallocate multiple signals atomically (<a href="https://github.com/qorelanguage/qore/issues/2440">issue 2440</a>)
    - eliminated a warning in a header file when building with g++ 7+ (<a href="https://github.com/qorelanguage/qore/issues/2449">issue 2449</a>)
    - implemented a fix in \c qdbg to resume any blocked threads before exiting to ensure a clean and correct shutdown of the debugger; fixes a problem when the process ould freeze on \c quit (<a href="https://github.com/qorelanguage/qore/issues/2472">issue 2472</a>)
    - fixed bugs in Windows builds (<a href="https://github.com/qorelanguage/qore/issues/2529">issue 2529</a>)

    @section qore_0813 Qore 0.8.13

    @par Release Summary
    Major new features and bug fixes including input and output stream support and sigificant new functionality including several new modules.

    @subsection qore_0813_compatibility Changes That Can Affect Backwards-Compatibility
    - fixed broken @ref continue "continue" and @ref break "break" statements that were accepted anywhere in the source and behaved like a @ref return "return" statement; now such statements outside a loop context will result in a parse exception; to get the old behavior, use @ref broken-loop-statement "%broken-loop-statement" in your source code
    - fixed broken @ref reference_type "reference" and @ref reference_or_nothing_type "*reference" type restrictions which had no effect prior to this release; to get the old behavior, use @ref broken-references "%broken-references" in your source code
    - the random number generator is always seeded with a random number when the Qore library is initialized; to get a predictable sequence from @ref Qore::rand() "rand()", you must explicitly seed the random number generator by calling @ref Qore::srand() "srand()" with a predefined seed number
    - the @ref synchronized "synchronized" keyword now operates differently depending on the context; <tt><b>synchronized</b></tt> functions have a global reentrant lock associated with the function (as in previous versions of %Qore), whereas now <tt><b>synchronized</b></tt> normal class methods share a reentrant lock associated with the object, while <tt><b>synchronized</b></tt> static class methods share a reentrant lock associated with the class itself.  This aligns %Qore's @ref synchronized "synchronized" behavior with that of Java and <tt>[MethodImpl(MethodImplOptions.Synchronized)]</tt> .NET/CLR (<a href="https://github.com/qorelanguage/qore/issues/894">issue 894</a>).
    - classes may not have the name \c "auto" due to the introduction of this identifier as a special type name
    - a new keyword @ref hashdecl "hashdecl" has been introduced to support type-safe hash declarations

    @subsection qore_0813_new_features New Features in Qore
    - complex type support
      - @ref hashdecl "type safe hashes" (@ref hash_hashdecl_type); ex: @code{.py} hash<MyInfo> = get_info(); @endcode
      - new system types:
        - @ref Qore::CallStackInfo "CallStackInfo"
        - @ref Qore::DateTimeInfo "DateTimeInfo"
        - @ref Qore::DirStatInfo "DirStatInfo"
        - @ref Qore::ExceptionInfo "ExceptionInfo"
        - @ref Qore::FilesystemInfo "FilesystemInfo"
        - @ref Qore::IsoWeekInfo "IsoWeekInfo"
        - @ref Qore::StatInfo "StatInfo"
      - @ref hash_complex_type "hash with type-safe values"; ex: @code{.py} hash<string, int> h = ("str": 1); @endcode
      - @ref list_complex_type "list with type-safe values"; ex: @code{.py} list<int> l = (1); @endcode
      - @ref reference_complex_type "reference with type-safe lvalues"; ex: @code{.py} int i = 1; reference<int> r = \i; @endcode
      - @ref auto_type "auto" (allows any value including complex types to be assigned without losing complex type information); ex: @code{.py} auto l = (1, 2); @endcode
      - improved @ref new "new", @ref cast "cast<>", and @ref instanceof "instanceof" operators
      - the @ref instanceof "instanceof" operator now works with any type; ex: @code{.py} bool b = v instanceof hash<string, int>; @endcode
      - note that complex type information is lost when assigning to an lvalue with a compatible but more generic type or by assigning to an untyped lvalue; this was necessary to allow complex types to be introduced in %Qore without breaking backwards compatibility.
    - support for input and output streams for the efficient piecewise processing of small or large amounts of data with a low memory overhead
      - includes the following classes:
        - @ref Qore::BinaryInputStream "BinaryInputStream"
        - @ref Qore::BinaryOutputStream "BinaryOutputStream"
        - @ref Qore::BufferedStreamReader "BufferedStreamReader"
        - @ref Qore::EncodingConversionInputStream "EncodingConversionInputStream"
        - @ref Qore::EncodingConversionOutputStream "EncodingConversionOutputStream"
        - @ref Qore::FileInputStream "FileInputStream"
        - @ref Qore::FileOutputStream "FileOutputStream"
        - @ref Qore::InputStream "InputStream"
        - @ref Qore::InputStreamLineIterator "InputStreamLineIterator"
        - @ref Qore::OutputStream "OutputStream"
        - @ref Qore::PipeInputStream "PipeInputStream"
        - @ref Qore::PipeOutputStream "PipeOutputStream"
        - @ref Qore::StreamPipe "StreamPipe"
        - @ref Qore::StreamReader "StreamReader"
        - @ref Qore::StreamWriter "StreamWriter"
        - @ref Qore::StringInputStream "StringInputStream"
        - @ref Qore::StringOutputStream "StringOutputStream"
        - @ref Qore::Transform "Transform"
        - @ref Qore::TransformInputStream "TransformInputStream"
        - @ref Qore::TransformOutputStream "TransformOutputStream"
        - @ref Qore::StdoutOutputStream "StdoutOutputStream"
        - @ref Qore::StderrOutputStream "StderrOutputStream"
      - Three constants were introduced for accessing standard input/output using streams API:
        - @ref Qore::stdin_stream "stdin_stream"
        - @ref Qore::stdout_stream "stdout_stream"
        - @ref Qore::stderr_stream "stderr_stream"
      - Additionally, stream support has been added to the following functions and methods:
        - @ref Qore::FtpClient::put()
        - @ref Qore::FtpClient::get()
        - @ref Qore::HTTPClient::send()
        - @ref Qore::HTTPClient::sendChunked()
        - @ref Qore::Socket::sendHTTPChunkedBodyFromInputStream()
        - @ref Qore::Socket::readHTTPChunkedBodyToOutputStream()
      - Stream support was also added to the following user modules:
        - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a>
        - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a>
    - support for @ref op_functional "lazy functional evaluation" of functional operators (including nested lazy evaluation) for much more efficient processing of iterated expressions; affects:
      - @ref map "map": supports lazy evaluation of itself and also of the iterator expression
      - @ref select "select": supports lazy evaluation of itself and also of the iterator expression
      - @ref keys "keys": supports lazy evaluation of itself
      - @ref foldl "foldl": supports lazy evaluation of the iterator expression
      - @ref foldr "foldlr": supports lazy evaluation of the iterator expression
      - @ref foreach "foreach": supports lazy evaluation of the iterator expression
      - @ref range_operator ".. (range operator)": supports lazy evaluation of itself
      - @ref list_element_operator "[n,m,...] (list, string, or binary dereference with multiple indices))": supports lazy evaluation of itself
    - support for list, string, and binary slices with offsets and ranges:
      - @ref list_slicing "list slices"
      - @ref string_slicing "string slices"
      - @ref binary_slicing "binary slices"
      - new @ref range_operator ".. range operator"
      - updated @ref list_element_operator "[] operator"
    - enhanced cryptographic support including support for
      <a href="https://en.wikipedia.org/wiki/Advanced_Encryption_Standard">AES</a> with Additional Authenticated Data
      and <a href="https://en.wikipedia.org/wiki/Message_authentication_code">Message Authentication Code (MAC)</a>
      support
      - The following new API functions were added:
        - @ref Qore::decrypt_to_binary()
        - @ref Qore::decrypt_to_string()
        - @ref Qore::encrypt()
        - @ref Qore::get_crypto_info()
        - @ref Qore::get_decryptor()
        - @ref Qore::get_encryptor()
      - The following constants were added to support the new generic cryptographic APIs:
        - @ref Qore::CRYPTO_ALG_AES_128
        - @ref Qore::CRYPTO_ALG_AES_192
        - @ref Qore::CRYPTO_ALG_AES_256
        - @ref Qore::CRYPTO_ALG_BLOWFISH
        - @ref Qore::CRYPTO_ALG_BLOWFISH_CFB
        - @ref Qore::CRYPTO_ALG_BLOWFISH_OFB
        - @ref Qore::CRYPTO_ALG_CAST5
        - @ref Qore::CRYPTO_ALG_CAST5_CFB
        - @ref Qore::CRYPTO_ALG_CAST5_OFB
        - @ref Qore::CRYPTO_ALG_DES
        - @ref Qore::CRYPTO_ALG_DES_CFB
        - @ref Qore::CRYPTO_ALG_DES_OFB
        - @ref Qore::CRYPTO_ALG_DES_EDE
        - @ref Qore::CRYPTO_ALG_DES_EDE_CFB
        - @ref Qore::CRYPTO_ALG_DES_EDE_OFB
        - @ref Qore::CRYPTO_ALG_DES_EDE3
        - @ref Qore::CRYPTO_ALG_DES_EDE3_CFB
        - @ref Qore::CRYPTO_ALG_DES_EDE3_OFB
        - @ref Qore::CRYPTO_ALG_DESX
        - @ref Qore::CRYPTO_ALG_RC2
        - @ref Qore::CRYPTO_ALG_RC2_CFB
        - @ref Qore::CRYPTO_ALG_RC2_OFB
        - @ref Qore::CRYPTO_ALG_RC4
        - @ref Qore::CRYPTO_ALG_RC5
        - @ref Qore::CRYPTO_ALG_RC5_CFB
        - @ref Qore::CRYPTO_ALG_RC5_OFB
    - support for binding output placeholder buffers for @ref resultset_output_binding "result sets" that return an @ref Qore::SQL::SQLStatement "SQLStatement" object:
      - new DBI capability constant @ref Qore::SQL::DBI_CAP_HAS_RESULTSET_OUTPUT "DBI_CAP_HAS_RESULTSET_OUTPUT"
      - new placeholder buffer specification constant @ref Qore::SQL::RESULTSET "RESULTSET"
    - new debugging support (note that APIs are subject to change until the next major release):
      - new classes:
        - @ref Qore::Breakpoint "Breakpoint"
        - @ref Qore::DebugProgram "DebugProgram"
        - @ref Qore::ProgramControl "ProgramControl"
      - new modules:
        - <a href="../../modules/DebugCmdLine/html/index.html">DebugCmdLine</a>
        - <a href="../../modules/DebugHandler/html/index.html">DebugHandler</a>
        - <a href="../../modules/DebugProgramControl/html/index.html">DebugProgramControl</a>
        - <a href="../../modules/DebugUtil/html/index.html">DebugUtil</a>
      - new parse directives:
        - @ref allow-debugger "%allow-debugger": allows running debug commands
        - @ref no-debugging "%no-debugging": forbids debugging of the current @ref Qore::Program "Program" object
    - new user modules:
      - <a href="../../modules/DebugCmdLine/html/index.html">DebugCmdLine</a>
      - <a href="../../modules/DebugHandler/html/index.html">DebugHandler</a>
      - <a href="../../modules/DebugProgramControl/html/index.html">DebugProgramControl</a>
      - <a href="../../modules/DebugUtil/html/index.html">DebugUtil</a>
      - <a href="../../modules/ConnectionProvider/html/index.html">ConnectionProvider</a>
      - <a href="../../modules/DatasourceProvider/html/index.html">DatasourceProvider</a>
      - <a href="../../modules/Qdx/html/index.html">Qdx</a>
      - <a href="../../modules/SewioRestClient/html/index.html">SewioRestClient</a>
      - <a href="../../modules/SewioWebSocketClient/html/index.html">SewioWebSocketClient</a>
      - <a href="../../modules/Swagger/html/index.html">Swagger</a>
      - <a href="../../modules/TextWrap/html/index.html">TextWrap</a>
    - new access modifiers: <tt><b>private:internal</b></tt> (providing strong encapsulation of the following declaration(s)) and <tt><b>private:hierarchy</b></tt> (which is equivalent to <tt><b>private</b></tt>; <a href="https://github.com/qorelanguage/qore/issues/1197">issue 1197</a>)
    - new parse options and directives:
      - @ref allow-debugger "%allow-debugger": allows running debug commands
      - @ref no-debugging "%no-debugging": forbids debugging of the current @ref Qore::Program "Program" object
      - @ref allow-weak-references "%allow-weak-references": allows the use of the @ref weak_assignment_operator "weak assignment operator (:=)"
      - @ref broken-loop-statement "%broken-loop-statement": allows @ref continue "continue" and @ref break "break" statements to be accepted anywhere in the source and behave like a @ref return "return" statement
      - @ref broken-references "%broken-references": allows @ref reference_type "reference" and @ref reference_or_nothing_type "*reference" type restrictions to accept any type contrary to the documented design and intention of these type restrictions
      - @ref correct-loop-statement "%correct-loop-statement": to revert the effect of @ref broken-loop-statement "%broken-loop-statement"
      - @ref correct-references "%correct-references": to revert the effect of @ref broken-references "%broken-references"
      - @ref no-uncontrolled-apis "%no-uncontrolled-apis": disallow access to uncontrolled APIs such as external language bindings or direct generic system call APIs that could bypass %Qore's sandboxing controls
      - @ref strong-encapsulation "%strong-encapsulation": disallows out of line class and namespace declarations
      - @ref try-reexport-module "%try-reexport-module": conditionally loads a module in a @ref user_modules "user module" and allows for that module to be reexported as well
    - new constants:
      - @ref Qore::SQL::DBI_CAP_HAS_RESULTSET_OUTPUT "DBI_CAP_HAS_RESULTSET_OUTPUT": DBI capability for drivers that support returning an @ref Qore::SQL::SQLStatement "SQLStatement" object for a @ref resultset_output_binding "result set" when bound with the @ref Qore::SQL::RESULTSET "RESULTSET" placeholder specification
      - @ref Qore::PathSep "PathSep": defines the platform-specific path separator character
      - @ref Qore::PO_ALLOW_DEBUGGER "PO_ALLOW_DEBUGGER": allows running debugger commands
      - @ref Qore::PO_NO_DEBUGGING "PO_NO_DEBUGGING": disallows debugging of the @ref Qore::Program "Program"
      - @ref Qore::PO_ALLOW_WEAK_REFERENCES "PO_ALLOW_WEAK_REFERENCES": allows the use of the @ref weak_assignment_operator "weak assignment operator (:=)"
      - @ref Qore::PO_BROKEN_LOOP_STATEMENT "PO_BROKEN_LOOP_STATEMENT": allows @ref continue "continue" and @ref break "break" statements to be accepted anywhere in the source and behave like a @ref return "return" statement
      - @ref Qore::PO_BROKEN_REFERENCES "PO_BROKEN_REFERENCES": reverts @ref reference_type "reference" and @ref reference_or_nothing_type "*reference" type restrictions to pre-%Qore-0.8.13 behavior where they would have no effect
      - @ref Qore::PO_NO_UNCONTROLLED_APIS "PO_NO_UNCONTROLLED_APIS": disallow access to uncontrolled APIs such as external language bindings or direct generic system call APIs that could bypass %Qore's sandboxing controls; note that this parse option was also added to @ref Qore::PO_NO_IO "PO_NO_IO" and @ref Qore::PO_NO_EXTERNAL_ACCESS "PO_NO_EXTERNAL_ACCESS"
      - @ref Qore::PO_STRONG_ENCAPSULATION "PO_STRONG_ENCAPSULATION": disallows out of line class and namespace declarations
      - @ref Qore::SQL::RESULTSET "RESULTSET": specifies that an @ref Qore::SQL::SQLStatement "SQLStatement" object should be returned from a @ref resultset_output_binding "result set" output variable in an SQL query
      - @ref Qore::SSL_VERIFY_NONE "SSL_VERIFY_NONE": @ref Qore::Socket::setSslVerifyMode() "Socket::setSslVerifyMode()" option: do not verify peer certificates
      - @ref Qore::SSL_VERIFY_PEER "SSL_VERIFY_PEER": @ref Qore::Socket::setSslVerifyMode() "Socket::setSslVerifyMode()" option: verify peer certificates
      - @ref Qore::SSL_VERIFY_FAIL_IF_NO_PEER_CERT "SSL_VERIFY_FAIL_IF_NO_PEER_CERT": @ref Qore::Socket::setSslVerifyMode() "Socket::setSslVerifyMode()" option: fail if the client does not provide a certificate (server mode only)
      - @ref Qore::SSL_VERIFY_CLIENT_ONCE "SSL_VERIFY_CLIENT_ONCE": @ref Qore::Socket::setSslVerifyMode() "Socket::setSslVerifyMode()" option: only require the client to send a certificate once (server mode only)
      - @ref Qore::ParseOptionCmdCodeMap
      - @ref Qore::ParseOptionCmdStringMap
      - see new cryptographic constants listed above
    - implemented additional parse-time checks for many @ref operators "operators" to provide feedback for invalid operations detected at parse time
    - implemented the @ref weak_assignment_operator "weak assignment operator (:=)" (only available with @ref allow-weak-references "%allow-weak-references")
    - implemented the @ref range_operator "range operator (..)"
    - implemented support for list expressions inside the @ref list_element_operator "dereference operator ([])"
    - new methods:
      - @ref Qore::Program::getAllDefines()
      - @ref Qore::Program::getGlobalVars()
      - @ref Qore::Program::importHashDecl()
      - @ref Qore::Program::importSystemHashDecls()
      - @ref Qore::Program::setGlobalVarValue()
      - @ref Qore::Program::setThreadInit()
      - @ref Qore::Program::getThreadList()
      - @ref Qore::Socket::acceptAllCertificates()
      - @ref Qore::Socket::getAcceptAllCertificates()
      - @ref Qore::Socket::getSslVerifyMode()
      - @ref Qore::Socket::setSslVerifyMode()
    - updated methods:
      - @ref Qore::Thread::Counter::dec() "Counter::dec()": now returns the current value of the counter
      - @ref Qore::HTTPClient::constructor() updates
        - Added support for the following options:
          - \c ssl_cert_path: allows an X.509 client certificate to be set in the constructor
          - \c ssl_key_path: allows a private key for an X.509 client certificate to be set in the constructor
          - \c ssl_key_password: allows a password-protected private key to be used wih an X.509 client certificate
          - \c ssl_verify_cert: enforces server certificate validation with HTTPS connections
        - Additionally, the HTTPClient class now understands the \c PATCH method (<a href="https://tools.ietf.org/html/rfc5789">RFC 5789</a>)
      - @ref Qore::RangeIterator::constructor(int) was updated; the second argument was removed to avoid ambiguity with the other overloaded constructor
      - @ref Qore::TreeMap::get() "TreeMap::get()": added a new optional argument to return the unmatched part of the search string
      - the following read-only static methods were moved from the @ref Qore::File "File" class to the @ref Qore::ReadOnlyFile "ReadOnlyFile" class:
        - @ref Qore::ReadOnlyFile::hstat() "ReadOnlyFile::hstat()"
        - @ref Qore::ReadOnlyFile::hlstat() "ReadOnlyFile::hlstat()"
        - @ref Qore::ReadOnlyFile::lstat() "ReadOnlyFile::lstat()"
        - @ref Qore::ReadOnlyFile::stat() "ReadOnlyFile::stat()"
        - @ref Qore::ReadOnlyFile::statvfs() "ReadOnlyFile::statvfs()"
    - new pseudo-methods:
      - <int>::format(int, string, string)
      - <float>::format(int, string, string)
      - <number>::format(int, string, string)
      - <string>::toInt(int)
      - <int>::toBase(int)
      - <number>::toBase(int)
      - <float>::toBase(int)
      - <value>::complexType()
      - <value>::fullType()
    - new functions:
      - @ref Qore::decrypt_to_binary()
      - @ref Qore::decrypt_to_string()
      - @ref Qore::encrypt()
      - @ref Qore::get_compressor()
      - @ref Qore::get_crypto_info()
      - @ref Qore::get_decompressor()
      - @ref Qore::get_decryptor()
      - @ref Qore::get_encryptor()
      - @ref Qore::get_global_vars()
      - @ref Qore::get_local_vars()
      - @ref Qore::get_random_bytes()
      - @ref Qore::get_thread_call_stack()
      - @ref Qore::parse_int()
      - @ref Qore::set_global_var_value()
      - @ref Qore::set_local_var_value()
    - updated functions/methods:
      - @ref Qore::Thread::Counter::dec() "Counter::dec()": now returns the current value of the counter
      - @ref Qore::thread_yield()
    - updated functions:
      - @ref Qore::ceil() "ceil()": now allows the precision to be specified
      - @ref Qore::floor() "floor()": now allows the precision to be specified
      - @ref Qore::hash() "hash()": now returns an untyped hash stripped of any key type information
      - @ref Qore::mkdir() "mkdir()": now allows parent directories to be created in the same call
      - @ref Qore::round() "round()": now allows the precision to be specified
      - @ref Qore::set_thread_init() "set_thread_init()": now allows for thread init code to be removed
      - @ref Qore::xrange(int) was updated; the second argument was removed to avoid ambiguity with the other overloaded variant
    - module updates:
      - <a href="../../modules/BulkSqlUtil/html/index.html">BulkSqlUtil</a> module updates:
        - added complex type support
        - added the \c AbstractBulkOperation::size() method
        - implemented analytic/window functions: new functions [<a href="https://github.com/qorelanguage/qore/issues/2203">issue 2202</a>]
        - implemented analytic/window functions: cop_over full support including ORDER BY [<a href="https://github.com/qorelanguage/qore/issues/2203">issue 2203</a>]
      - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module updates:
        - added support for streams
      - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a> module updates:
        - added support for streams
        - added \c FixedLengthFileIterator::getFileName() (<a href="https://github.com/qorelanguage/qore/issues/1164">issue 1164</a>)
        - added field as well as global option "truncate" (<a href="https://github.com/qorelanguage/qore/issues/1841">issue 1841</a>)
        - added field as well as global option "tab2space" (<a href="https://github.com/qorelanguage/qore/issues/1866">issue 1866</a>)
      - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module updates:
        - added a minimal substring of string bodies received to the log message when logging HTTP requests
      - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> module updates:
        - the \c parse_uri_query() function was moved to the <a href="../../modules/Util/html/index.html">Util</a> module
      - <a href="../../modules/Mime/html/index.html">Mime</a> module updates:
        - added complex type support
        - added the following constants:
          - \c MimeTypeMultipartFormData
          - \c MimeTypeMultipartRelated
          - \c MimeTypeMultipartMixed
        - added the following methods:
          - \c MultipartMessage::getBoundary()
          - \c MultipartMessage::serializeBody()
          - \c MultipartMessage::size()
        - fixed a bug parsing multipart messages where unnecessary characters were searched (<a href="https://github.com/qorelanguage/qore/issues/2099">issue 2099</a>)
      - <a href="../../modules/Pop3Client/html/index.html">Pop3Client</a> module updates:
        - added the \c Pop3Connection class to support the <a href="../../ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - <a href="../../modules/Qorize/html/index.html">Qorize</a> module updates:
        - \c qorize_named() added support for objects
      - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
        - added the \c RestConnection class to support the <a href="../../ConnectionProvider/html/index.html">ConnectionProvider</a> module
        - support for the \c text/plain \c Content-Type
      - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
        - added support for runtime REST API validation against a REST schema using the <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module
        - added support for Swagger 2.0 REST API validation and \c "swagger" options using the <a href="../../modules/Swagger/html/index.html">Swagger</a> module in the \c RestClient and \c RestConnection classes
      - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module updates:
        - added an API to allow REST calls to be made internally (<a href="https://github.com/qorelanguage/qore/issues/1899">issue 1899</a>)
        - added support for runtime REST API validation against a REST schema using the <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module
      - <a href="../../modules/RestSchemaValidator/html/index.html">RestSchemaValidator</a> module:
        - added this new module providing a <a href="https://en.wikipedia.org/wiki/Representational_state_transfer">REST</a> schema validation API
      - <a href="../../modules/SalesforceRestClient/html/index.html">SalesforceRestClient</a> module updates:
        - added the \c SalesforcRestConnection class to support the <a href="../../ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - <a href="../../modules/Schema/html/index.html">Schema</a> module updates:
        - added the \c c_blob() and \c c_clob() functions (<a href="https://github.com/qorelanguage/qore/issues/1851">issue 1851</a>)
      - <a href="../../modules/SewioRestClient/html/index.html">SewioRestClient</a> module:
        - added this new module providing APIs for communicating with <a href="http://www.sewio.net">Sewio.net</a>'s RTLS Studio REST API
      - <a href="../../modules/SewioWebSocketClient/html/index.html">SewioWebSocketClient</a> module:
        - added this new module providing APIs for communicating with <a href="http://www.sewio.net">Sewio.net</a>'s RTLS Studio WebSocket API
      - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module updates:
        - added the \c SmtpConnection class to support the <a href="../../ConnectionProvider/html/index.html">ConnectionProvider</a> module
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module updates:
        - implemented the \c cop_trunc_date() function (<a href="https://github.com/qorelanguage/qore/issues/2032">issue 2032</a>)
      - <a href="../../modules/Swagger/html/index.html">Swagger</a> module added:
        - added this new module providing a <a href="https://swagger.io/">Swagger 2.0 REST API validation API</a> to %Qore
      - <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module updates:
        - added support for upserts in \c InboundTableMapper (<a href="https://github.com/qorelanguage/qore/issues/1067">issue 1067</a>)
        - added \c InboundTableMapper::queueData(list)
      - <a href="../../modules/TelnetClient/html/index.html">TelnetClient</a> module updates:
        - added the \c TelnetConnection class to support the <a href="../../ConnectionProvider/html/index.html">ConnectionProvider</a> module
        - added support for URLs in the constructor()
        - added the \c TelnetClient::getTarget() method
      - <a href="../../modules/Util/html/index.html">Util</a> module updates:
        - the \c parse_uri_query() function was moved here from the <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> module
        - \c parse_uri_query() now handles repeated query arguments as a list
        - added public function \c flatten()
        - added public function \c uniq()
      - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module updates:
        - added the \c WebSocketConnectionObject class to support the <a href="../../ConnectionProvider/html/index.html">ConnectionProvider</a> module
        - updated for complex types
        - fixed a bug where the event loop thread would immediately terminate after a reconnection (<a href="https://github.com/qorelanguage/qore/issues/2061">issue 2061</a>)
        - improved client logging
        - fixed a bug where the \c WebSocketClient class did not validate the \c Sec-WebSocket-Accept response header according to RFC6455 (<a href="https://github.com/qorelanguage/qore/issues/2062">issue 2062</a>)
      - <a href="../../modules/WebSocketUtil/html/index.html">WebSocketUtil</a> module updates:
        - added the \c ws_get_response_key() function
    - the following classes can be used from binary modules:
      - @ref Qore::File "File"
      - @ref Qore::ReadOnlyFile "ReadOnlyFile"
    - updated the build to require a <a href="https://en.wikipedia.org/wiki/C%2B%2B11">C++11</a> compiler or better to build %Qore (<a href="https://github.com/qorelanguage/qore/issues/994">issue 994</a>)
    - a relative time stamp is now logged in trace and debug output

    @subsection qore_0813_bug_fixes Bug Fixes in Qore
    - fixed a bug causing @ref Qore::AbstractQuantifiedBidirectionalIterator "AbstractQuantifiedBidirectionalIterator" not being available (<a href="https://github.com/qorelanguage/qore/issues/968">issue 968</a>)
    - <a href="../../modules/BulkSqlUtil/html/index.html">BulkSqlUtil</a> module fixes:
      - fixed the module to work properly even with DB drivers that do not support parameter array binding (<a href="https://github.com/qorelanguage/qore/issues/1154">issue 1154</a>)
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module fixes:
      - fixed a bug in an error message validating input data (<a href="https://github.com/qorelanguage/qore/issues/1062">issue 1062</a>)
      - added an exception when detected headers do not match the \a fields option (<a href="https://github.com/qorelanguage/qore/issues/2179">issue 2179</a>)
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module fixes:
      - added logic to attempt to mask passwords in log messages (<a href="https://github.com/qorelanguage/qore/issues/1086">issue 1086</a>)
    - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> module fixes:
      - fixed a bug where the \a msg arg to \c AbstractAuthenticator::do401() was ignored (<a href="https://github.com/qorelanguage/qore/issues/1047">issue 1047</a>)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module fixes:
      - added logic to allow sensitive data to be masked in log messages (<a href="https://github.com/qorelanguage/qore/issues/1086">issue 1086</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module fixes:
      - fixed a bug in update and upsert statement generation when the given data does not have enough columns to use the unique index found, an error message is generated that contains all the columns names instead of just the column names required by the index (<a href="https://github.com/qorelanguage/qore/issues/1013">issue 1013</a>)
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module fixes:
      - fixed a thread lock starvation race condition (<a href="https://github.com/qorelanguage/qore/issues/2130">issue 2130</a>)
    - \c UTF-16 fixes:
      - fixed a bug comparing strings in \c UTF-16 encodings (<a href="https://github.com/qorelanguage/qore/issues/1579">issue 1579</a>)
      - fixed @ref Qore::substr() and <string>::substr() with strings in \c UTF-16 encodings (<a href="https://github.com/qorelanguage/qore/issues/1586">issue 1586</a>)
      - fixed @ref Qore::trim(), @ref Qore::ltrim(), @ref Qore::rtrim() and the @ref trim "trim" operator with strings with \c UTF-16 encodings (<a href="https://github.com/qorelanguage/qore/issues/1775">issue 1775</a>)
    - fixed a bug where @ref break "break" and @ref continue "continue" statements were accepted outside of loops (<a href="https://github.com/qorelanguage/qore/issues/976">issue 976</a>)
    - fixed a bug compiling on Solaris SPARC with g++ where \c MPFR_DECL_INIT() is compiled incorrectly with -O1 or greater (<a href="https://github.com/qorelanguage/qore/issues/958">issue 958</a>)
    - fixed a bug causing an infinite loop in decompression functions (<a href="https://github.com/qorelanguage/qore/issues/966">issue 966</a>)
    - fixed an issue where an internal C++ API (QoreProgram::parseCmdLineDefines()) performed a needless copy of a data structure (<a href="https://github.com/qorelanguage/qore/issues/1099">issue 1099</a>)
    - fixed a stack corruption bug with asynchronous I/O on UNIX systems with @ref Qore::ReadOnlyFile "ReadOnlyFile" methods (<a href="https://github.com/qorelanguage/qore/issues/1106">issue 1106</a>)
    - fixed bugs with inconsistent conversions of @ref int_type "int", @ref float_type "float", and @ref bool_type "boolean" values to date/time values, now they are all converted uniformly to @ref relative_dates "relative date/time values" (<a href="https://github.com/qorelanguage/qore/issues/1156">issue 1156</a>)
    - fixed a bug where Qore allowed code to be declared both public and private without a warning (<a href="https://github.com/qorelanguage/qore/issues/1187">issue 1187</a>)
    - fixed a bug where the @ref instanceof "instanceof" operator would return @ref True "True" with objects that did not publically inherit the given class or where the given class is not accessible (<a href="https://github.com/qorelanguage/qore/issues/1191">issue 1191</a>)
    - fixed a bug in qpp support of the 'final' class flag (<a href="https://github.com/qorelanguage/qore/issues/1222">issue 1222</a>)
    - fixed a bug where the @ref plus_operator "+ operator" provided access to private members from outside the class (<a href="https://github.com/qorelanguage/qore/issues/1209">issue 1209</a>)
    - fixed a bug where different @ref overloading "overloaded" method variant resolution rules were used at parse time (best match in hierarchy) and runtime (best match in first matching class) in a class hierarchy (<a href="https://github.com/qorelanguage/qore/issues/1229">issue 1229</a>)
    - fixed a bug where exceptions in base class constructor calls did not reflect the actual source location (<a href="https://github.com/qorelanguage/qore/issues/1230">issue 1230</a>)
    - fixed a bug where runtime function/method variant matching was incorrectly biased towards default matches for missing arguments (<a href="https://github.com/qorelanguage/qore/issues/1231">issue 1231</a>)
    - fixed bugs where calls to @ref Qore::Socket::upgradeClientToSSL() "Socket::upgradeClientToSSL()" and @ref Qore::Socket::upgradeServerToSSL() "Socket::upgradeServerToSSL()" were ignored with no exception thrown if the socket was not connected (<a href="https://github.com/qorelanguage/qore/issues/1258">issue 1258</a>)
    - fixed a bug where a closure created in an object scope could not be called if the object had been deleted, even if the closure did not refer to the object (<a href="https://github.com/qorelanguage/qore/issues/1303">issue 1303</a>)
    - fixed a bug where @ref Qore::ord() "ord()" would return negative numbers for bytes with the high bit set with compilers where <tt>char</tt> is the same as <tt>signed char</tt> (<a href="https://github.com/qorelanguage/qore/issues/1385">issue 1385</a>)
    - fixed a bug where @ref Qore::int(softint) "int(number)" returned rounded value instead of the integer part (while @ref Qore::int(softint) "int(float)" behaved correctly; also cf. initializing a softint value from a number vs. from a float) (<a href="https://github.com/qorelanguage/qore/issues/1463">issue 1463</a>)
    - @ref Qore::File::read() "File::read()" now uses character semantics for the length argument (<a href="https://github.com/qorelanguage/qore/issues/1548">issue 1548</a>)
    - fixed a bug with strongly-typed lvalue assignments with classes created in different @ref Qore::Program "Program" objects (<a href="https://github.com/qorelanguage/qore/issues/1551">issue 1551</a>)
    - fixed a bug where an ASCII string and the same string in a different encoding and with diacritics could incorrectly be marked as equal (<a href="https://github.com/qorelanguage/qore/issues/1579">issue 1579</a>)
    - fixed bugs in @ref Qore::HTTPClient "HTTPClient" methods where string message bodies were not converted to the object's @ref character_encoding "character encoding" before transmission (<a href="https://github.com/qorelanguage/qore/issues/1813">issue 1813</a>)
    - fixed a bug in the @ref reference_type "reference" and @ref reference_or_nothing_type "*reference" assignment restrictions; previously any value was accepted, now only references are accepted as the initial assignment values (<a href="https://github.com/qorelanguage/qore/issues/1819">issue 1819</a>)
    - fixed a bug in handling the \c SqlUtil::BLOB type in the <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a> module (<a href="https://github.com/qorelanguage/qore/issues/1852">issue 1852</a>)
    - fixed a bug in overloaded call variant matching where missing arguments were counted towards the match (<a href="https://github.com/qorelanguage/qore/issues/1897">issue 1897</a>)
    - fixed many bugs where parse-time errors could be reported at an incorrect source location; parse-time error location reporting has been completely overhauled and reimplemented for correctness (<a href="https://github.com/qorelanguage/qore/issues/1930">issue 1930</a>)
    - fixed a bug where code signatures would accept parameter variables without \c "$" signs even when @ref allow-bare-refs "%allow-bare-refs" was not in effect (<a href="https://github.com/qorelanguage/qore/issues/1941">issue 1941</a>)
    - fixed memory leaks in the scanner related to EOF conditions (<a href="https://github.com/qorelanguage/qore/issues/1976">issue 1976</a>)
    - rewrote %Qore functions @ref Qore::gethostbyname(), @ref Qore::gethostbyname_long() and @ref Qore::gethostbyaddr() to use standard C functions \c getaddrinfo(3) and \c getnameinfo(3) internally instead of the deprecated \c gethostbyname(3) and \c gethostbyaddr(3) (<a href="https://github.com/qorelanguage/qore/issues/1952">issue 1952</a>)
    - fixed cmake builds on Darwin (<a href="https://github.com/qorelanguage/qore/issues/1980">issue 1980</a>)
    - fixed a bug where immediate date-time values were not marked with their type at parse time (<a href="https://github.com/qorelanguage/qore/issues/2001">issue 2001</a>)
    - fixed a bug where the @ref data_or_nothing_type "*data" type restriction would allow all types to be assigned at runtime (<a href="https://github.com/qorelanguage/qore/issues/2002">issue 2002</a>)
    - @ref Qore::RangeIterator::constructor(int) and @ref Qore::xrange(int) were updated; the second arguments were removed to avoid ambiguity with the other overloaded variants (<a href="https://github.com/qorelanguage/qore/issues/2016">issue 2016</a>)
    - fixed a bug where @ref Qore::replace() could get in an infinite loop with arguments with embededed nulls (<a href="https://github.com/qorelanguage/qore/issues/2098">issue 2098</a>)
    - fixed a bug in regular expression extraction where an infinite loop could occur (<a href="https://github.com/qorelanguage/qore/issues/2083">issue 2083</a>)
    - fixed a bug where a call reference to an object method that crosses @ref Qore::Program "Program" boundaries could result in a core dump when called due to an error managing thread-local data (<a href="https://github.com/qorelanguage/qore/issues/2145">issue 2145</a>)
    - fixed crashes in scanner due to EOF in comments (<a href="https://github.com/qorelanguage/qore/issues/2175">issue 2175</a>)

    @section qore_081212 Qore 0.8.12.12

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_081212_new_features New Features in Qore

    - added the @ref Qore::Option::HAVE_DSS "HAVE_DSS" constant to indicate if the outdated DSS(), DSS1(), DSS_bin(), DSS1_bin(), DSS_HMAC(), and DSS1_HMAC() functions are available in the opnessl library used to compile %Qore

    @subsection qore_081212_bug_fixes Bug Fixes in Qore

    - fixed a bug handling \c argv in base class constructor execution (<a href="https://github.com/qorelanguage/qore/issues/2030">issue 2030</a>)
    - fixed a bug handling the connection status in the @ref Qore::HTTPClient "HTTPClient" class (<a href="https://github.com/qorelanguage/qore/issues/2058">issue 2058</a>)
    - fixed building with openssl 1.1+ (<a href="https://github.com/qorelanguage/qore/issues/2135">issue 2135</a>)
    - fixed binding more than one wilcard port on a specific address in the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module (<a href="https://github.com/qorelanguage/qore/issues/2155">issue 2155</a>)
    - fixed a bug in <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> with column aliases that are reserved words (<a href="https://github.com/qorelanguage/qore/issues/2163">issue 2163</a>)
    - fixed a memory bug in the @ref splice "splice" operator with a binary operand (<a href="https://github.com/qorelanguage/qore/issues/2303">issue 2303</a>)
    - fixed a bug where calling any @ref Qore::SQL::SQLStatement "SQLStatement" method in another thread with an active connection from a @ref Qore::SQL::DatasourcePool "DatasourcePool" causes a crash (<a href="https://github.com/qorelanguage/qore/issues/2334">issue 2334</a>)
    - fixed a bug in <a href="../../modules/RestHandler/html/index.html">RestHandler</a> regarding inconsistent handling of URI parameter arguments; the \c "action" key was only removed from the \c ah hash when there were no other arguments, introducing an inconsistency in argument handling in REST services (<a href="https://github.com/qorelanguage/qore/issues/2479">issue 2479</a>)
    - fixed a bug where \c ENCODING-CONVERSION-ERROR exceptions were not thrown with newer GNU iconv libraries with an API change (<a href="https://github.com/qorelanguage/qore/issues/2500">issue 2500</a>)

    @section qore_081211 Qore 0.8.12.11

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_081211_new_features New Features in Qore
    - <a href="https://github.com/qorelanguage/qore/issues/1947">issue 1947</a> added @ref warning-broken-logic-precedence "broken-logic-precedence" warning.

    @subsection qore_081211_bug_fixes Bug Fixes in Qore
    - fixed documentation regarding escaping of characters in strings and added a parse exception in case of trying to escape octal values in range 400-777 (<a href="https://github.com/qorelanguage/qore/issues/50">issue 50</a>)
    - fixed a crashing bug where @ref Qore::SQL::Datasource::getConfigString() "Datasource::getConfigString()" was called without a connection, also could crash in an implicit internal call to this method with the @ref Qore::SQL::DatasourcePool "DatasourcePool" class when connections were lost and the warning callback should be called (<a href="https://github.com/qorelanguage/qore/issues/1992">issue 1992</a>)
    - fixed a bug where @ref Qore::SQL::Datasource::getConfigHash() "Datasource::getConfigHash()" returned different values depending on if the object was connected or not (<a href="https://github.com/qorelanguage/qore/issues/1994">issue 1994</a>)

    @section qore_081210 Qore 0.8.12.10

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_081210_bug_fixes Bug Fixes in Qore

    - module fixes:
      - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a>:
        - fixes and improvements to errors and exceptions (<a href="https://github.com/qorelanguage/qore/issues/1828">issue 1828</a>)
      - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a>:
        - eliminated excess logging of all HTTP chunks sent and received (<a href="https://github.com/qorelanguage/qore/issues/1832">issue 1832</a>)
      - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a>:
        - fixed a bug in setting a \c comment for a table column (<a href="https://github.com/qorelanguage/qore/issues/1886">issue 1886</a>)
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>:
        - fixed a bug in the \c offset query hash argument in SQL operation methods (<a href="https://github.com/qorelanguage/qore/issues/1880">issue 1880</a>)
        - fixed a bug that prohibited only columns from the main query to be selected when joins are used (<a href="https://github.com/qorelanguage/qore/issues/1909">issue 1909</a>)
      - <a href="../../modules/TableMapper/html/index.html">TableMapper</a>:
        - fixed a bug in flush messages in the \c InboundTableMapper class (<a href="https://github.com/qorelanguage/qore/issues/1849">issue 1849</a>)
    - fixed a bug that could cause spurious parse-time exceptions to be thrown when matching call variants with multiple return types for the same callable object (<a href="https://github.com/qorelanguage/qore/issues/1928">issue 1928</a>)
    - fixed the process return code in the output reference in @ref Qore::backquote() "backquote()" on Unix/Linux platforms (<a href="https://github.com/qorelanguage/qore/issues/1884">issue 1884</a>)
    - fixed a bug where connections were not immediately released back to the @ref Qore::SQL::DatasourcePool "DatasourcePool" in case of an \c SQLSTATEMENT-ERROR exception (<a href="https://github.com/qorelanguage/qore/issues/1836">issue 1836</a>)
    - eliminated a spurious exception in the @ref Qore::SQL::SQLStatement "SQLStatement" class in case of a @ref Qore::SQL::DatasourcePool "DatasourcePool" timeout (<a href="https://github.com/qorelanguage/qore/issues/1832">issue 1832</a>)
    - fixed a crash when the incorrect type was passed to a parameter declared @ref reference_or_nothing_type "*reference" (<a href="https://github.com/qorelanguage/qore/issues/1815">issue 1815</a>)
    - fixed a crash when the %Qore library exits caused by an error in handling module dependencies with injected modules (<a href="https://github.com/qorelanguage/qore/issues/1805">issue 1805</a>)
    - fixed segfault crashes caused by calling object methods with null pointers (<a href="https://github.com/qorelanguage/qore/issues/1791">issue 1791</a>)
    - added internal API support to make it easier for DBI drivers to handle lost connections and to allow DBI drivers that must close all open handles before a connection is closed (such as the oracle driver); due to this change, @ref Qore::SQL::SQLStatement "SQLStatement" objects based on a @ref Qore::SQL::DatasourcePool "DatasourcePool" are closed automatically whenever the datasource is returned to the pool (<a href="https://github.com/qorelanguage/qore/issues/1250">issue 1250</a>)
    - implemented new parse options to revert the effect of parse options that affect code safety (<a href="https://github.com/qorelanguage/qore/issues/1895">issue 1895</a>):
      - @ref correct-list-parsing "%correct-list-parsing"
      - @ref correct-logic-precedence "%correct-logic-precedence"
      - @ref correct-int-assignments "%correct-int-assignments"
      - @ref correct-operators "%correct-operators"
      - @ref loose-args "%loose-args"
    - fixed parse locations of strings and regexes (<a href="https://github.com/qorelanguage/qore/issues/1905">issue 1905</a>)

    @section qore_08129 Qore 0.8.12.9

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08129_bug_fixes Bug Fixes in Qore

    - fixed a memory leak where references participate in recursive references (<a href="https://github.com/qorelanguage/qore/issues/1774">issue 1774</a>)
    - fixed a build issue with clang++ (<a href="https://github.com/qorelanguage/qore/issues/1768">issue 1768</a>)
    - fixed a memory leak in the @ref Qore::Thread::Queue "Queue" copy constructor when the @ref Qore::Thread::Queue "Queue" was used in other objects (such as an event queue, etc; <a href="https://github.com/qorelanguage/qore/issues/1749">issue 1749</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module fixes:
      - fixed bugs handling the \c allow_dot and \c allow_output_dot options (<a href="https://github.com/qorelanguage/qore/issues/1690">issue 1690</a>)
      - fixed \c TableMapper bugs introduced in Qore 0.8.12.7 (<a href="https://github.com/qorelanguage/qore/issues/1754">issue 1754</a>)

    @section qore_08128 Qore 0.8.12.8

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08128_bug_fixes Bug Fixes in Qore

    - fixed a memory leak in @ref try-module "%try-module" error handling (<a href="https://github.com/qorelanguage/qore/issues/1690">issue 1690</a>)
    - fixed a bug in @ref Qore::trunc_str() "trunc_str()" when the string has an invalid multi-byte character at the end of the string and the string is exactly the byte width requested (<a href="https://github.com/qorelanguage/qore/issues/1693">issue 1693</a>)
    - fixed a bug where @ref Qore::ReadOnlyFile::getchar() "ReadOnlyFile::getchar()" did not respect character semantics as documented (<a href="https://github.com/qorelanguage/qore/issues/1547">issue 1547</a>)
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module fixes:
      - fixed a bug in \c character_semantics for standalone column (<a href="https://github.com/qorelanguage/qore/issues/1688">issue 1688</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module fixes:
      - fixed a bug in handling "list mode" data such as submitted by \c InboundTableMapper::queueData() (<a href="https://github.com/qorelanguage/qore/issues/1736">issue 1736</a>, bug introduced in Qore 0.8.12.7 with the fix for <a href="https://github.com/qorelanguage/qore/issues/1626">issue 1626</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module fixes:
      - fixed schema alignment skipping column with name "driver" (<a href="https://github.com/qorelanguage/qore/issues/1684">issue 1684</a>)
      - fixed sqlutil schema management: functional indexes are rejected without () in name (<a href="https://github.com/qorelanguage/qore/issues/1610">issue 1610</a>)
    - <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module fixes:
      - fixed a bug in handling "list mode" data with optimized inserts (<a href="https://github.com/qorelanguage/qore/issues/1736">issue 1736</a>, bug introduced in Qore 0.8.12.7 with the fix for <a href="https://github.com/qorelanguage/qore/issues/1626">issue 1626</a>)
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module fixes:
      - added timeout values to @ref Qore::Socket "Socket" and @ref Qore::HTTPClient "HTTPClient" calls (<a href="https://github.com/qorelanguage/qore/issues/1725">issue 1725</a>)
    - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a> module fixes:
      - added timeout values to @ref Qore::Socket "Socket" calls (<a href="https://github.com/qorelanguage/qore/issues/1725">issue 1725</a>)
    - <a href="../../modules/WebSocketUtil/html/index.html">WebSocketUtil</a> module fixes:
      - added timeout values to @ref Qore::Socket "Socket" calls (<a href="https://github.com/qorelanguage/qore/issues/1725">issue 1725</a>)
    - fixed a bug where a type conversion error in an lvalue assignment could generate a confusing unrelated runtime exception (<a href="https://github.com/qorelanguage/qore/issues/1697">issue 1697</a>)
    - fixed a bug where invalid characters in the port specification in a URL were ignored (<a href="https://github.com/qorelanguage/qore/issues/1728">issue 1728</a>)
    - fixed a bug with SSL socket communication the remote closing the connection during a send operation could cause the current thread to go into an infinite loop consuming 100% CPU (<a href="https://github.com/qorelanguage/qore/issues/1729">issue 1729</a>)
    - fixed a bug in the @ref Qore::HashListIterator "HashListIterator" class iterating hashes with a mix of lists and single values such as used by bulk DML binds; now the single values will appear as the current value for all list elements as per the original design instead of throwing a runtime exception (<a href="https://github.com/qorelanguage/qore/issues/1738">issue 1738</a>)

    @section qore_08127 Qore 0.8.12.7

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08127_bug_fixes Bug Fixes in Qore

    - fixed bug in internal string generation with \c size_t arguments that could cause invalid data to be output or crashes on 32-bit platforms (<a href="https://github.com/qorelanguage/qore/issues/1640">issue 1640</a>)
    - fixed a runtime memory leak and invalid runtime behavior with undetected recursive lvalue references (<a href="https://github.com/qorelanguage/qore/issues/1617">issue 1617</a>)
    - improved @ref garbage_collection "prompt collection" performance with large graphs of objects by eliminating additional unnecessary graph scans, resulting in further large performance improvements in the garbage collector (<a href="https://github.com/qorelanguage/qore/issues/1363">issue 1363</a>)
    - improved \c InboundTableMapper::queueData() performance (in the <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module) when used with data in hash of lists format to use bulk DML in input and output without internal data conversions (<a href="https://github.com/qorelanguage/qore/issues/1626">issue 1626</a>)
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module fixes:
      - worked around \c ORA-22165 from \c op_in() caused by Oracle's limit on number of collection elements (<a href="https://github.com/qorelanguage/qore/issues/1660">issue 1660</a>)
      - fixed a bug in the \a force option (i.e. cascade) for dropping types (<a href="https://github.com/qorelanguage/qore/issues/1683">issue 1683</a>)
    - improved @ref try-module "%try-module" error reporting and documentation (<a href="https://github.com/qorelanguage/qore/issues/1648">issue 1648</a>)

    @section qore_08126 Qore 0.8.12.6

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08126_bug_fixes Bug Fixes in Qore

    - fixed a bug in @ref Qore::parse_url() parsing single-character hostnames (<a href="https://github.com/qorelanguage/qore/issues/1524">issue 1524</a>)
    - fixed a bug where @ref Qore::PO_LOCKDOWN "PO_LOCKDOWN" was not set when parsing \c init and \c del attributes in @ref user_modules "user module" headers (<a href="https://github.com/qorelanguage/qore/issues/1535">issue 1535</a>)
    - fixed a bug parsing exception catch block parameter errors (in debug builds only; <a href="https://github.com/qorelanguage/qore/issues/1558">issue 1558</a>)
    - fixed a bug dereferencing @ref binary "binary values" with the @ref list_element_operator "[] operator"; the behavior now corresponds to the documentation (<a href="https://github.com/qorelanguage/qore/issues/1566">issue 1566</a>)
    - fixed a bug that would result in a crash if a method were declared both \c static and \c abstract (<a href="https://github.com/qorelanguage/qore/issues/1590">issue 1590</a>)
    - fixed performance issues with the <a href="../../modules/Mapper/html/index.html">Mapper</a> module (and by extension the <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module) for mappers with many identity (i.e. 1:1) and constant mappings (<a href="https://github.com/qorelanguage/qore/issues/1620">issue 1620</a>)
    - fixed a bug in the \c BulkInsertOperation class in the <a href="../../modules/BulkSqlUtil/html/index.html">BulkSqlUtil</a> module where inserts would fail or silently insert invalid data in the second or later blocks when constant hashes were used (<a href="https://github.com/qorelanguage/qore/issues/1625">issue 1625</a>)

    @section qore_08125 Qore 0.8.12.5

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08125_new_features New Features in Qore

    - added the <a href="../../modules/SalesforceRestClient/html/index.html">SalesforceRestClient</a> module for communicating with Salesforce.com using the REST APIs
    - module <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>
      - has support for native default values in tables (<a href="https://github.com/qorelanguage/qore/issues/1428">issue 1428</a>)
      - has support for Oracle named types (eg. spatial types) for Schema.qm and SchemaReverse.qm. (<a href="https://github.com/qorelanguage/qore/issues/1465">issue 1465</a>)

    @subsection qore_08125_bug_fixes Bug Fixes in Qore

    - <a href="../../modules/Mime/html/index.html">Mime</a> module:
      - added support for URL form-encoded messages (<a href="https://github.com/qorelanguage/qore/issues/1436">issue 1436</a>
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module:
      - added support for URL form-encoded messages (<a href="https://github.com/qorelanguage/qore/issues/1436">issue 1436</a>
      - added support for the \c "rawxml" message body encoding (<a href="https://github.com/qorelanguage/qore/issues/1437">issue 1437</a>
    - fixed handling of invalid compressed data in the following functions (<a href="https://github.com/qorelanguage/qore/issues/1432">issue 1432</a>):
      - @ref Qore::gunzip_to_binary()
      - @ref Qore::gunzip_to_string()
      - @ref Qore::uncompress_to_binary()
      - @ref Qore::uncompress_to_string()
    - fixed \c \@inf\@ on Windows (<a href="https://github.com/qorelanguage/qore/issues/1442">issue 1442</a>)
    - fixed @ref Qore::parse_url() with single-character usernames (<a href="https://github.com/qorelanguage/qore/issues/1455">issue 1455</a>)
    - corrected the error message with SSL reads when the server closes the connection prematurely (<a href="https://github.com/qorelanguage/qore/issues/1488">issue 1488</a>)
    - fixed the \c Host header in HTTP requests to not include the port if the port is the default port for the scheme because it causes some servers to reject the request (<a href="https://github.com/qorelanguage/qore/issues/1489">issue 1489</a>)

    @section qore_08124 Qore 0.8.12.4

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08124_bug_fixes Bug Fixes in Qore

    - fixed a reference bug in the @ref Qore::Thread::Queue "Queue" class introduced in the last release (<a href="https://github.com/qorelanguage/qore/issues/1309">issue 1309</a>)
    - fixed a bug where database types could not be correctly aligned if they had dependencies (<a href="https://github.com/qorelanguage/qore/issues/1314">issue 1314</a>); entailed updates in the following modules:
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>
      - <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a>
      - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a>
      - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a>
      - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a>
      - <a href="../../modules/Schema/html/index.html">Schema</a>
    - fixed a bug in @ref Qore::trunc_str() "trunc_str()" where an infinite loop could be triggered with certain arguments and multi-byte character encodings (<a href="https://github.com/qorelanguage/qore/issues/1327">issue 1327</a>)
    - improved @ref garbage_collection "prompt collection" performance with larger graphs of objects by eliminating unnecessary graph scans made during object method calls (<a href="https://github.com/qorelanguage/qore/issues/1363">issue 1363</a>)
    - fixed bugs in @ref Qore::date(string) "date(string)" and @ref Qore::date(string, string) "date(string, string)" where invalid input data was ignored and invalid dates were returned (<a href="https://github.com/qorelanguage/qore/issues/1369">issue 1369</a>)
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module:
      - fixed a bug in \c AbstractCsvIterator::identifyTypeImpl() generating an error message (<a href="https://github.com/qorelanguage/qore/issues/1355">issue 1355</a>)
    - <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module:
      - fixed a bug using the default encoding in \c Message::attach() (issue <a href="https://github.com/qorelanguage/qore/issues/1352">issue 1352</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module:
      - fixed the ignored character_semantics column option in schema alignmed (<a href="https://github.com/qorelanguage/qore/issues/1379">issue 1379</a>)
      - implemented the \c cop_length() column function (<a href="https://github.com/qorelanguage/qore/issues/1395">issue 1395</a>)
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module:
      - OraclePackage attribute body_src is now public to access package bodies
    - <a href="../../modules/Qorize/html/index.html">Qorize</a> module:
      -  Qorize module: new qorize_val() set of functions; qorize_named() introduced; qorize tests
    - <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module:
      - fixed runtime option propagation to \c TableMapper::SqlStatementMapperIterator from \c TableMapper::AbstractSqlStatementOutboundMapper::iterator() (<a href="https://github.com/qorelanguage/qore/issues/1418">issue 1418</a>)
      - fixed SqlStatementMapperIterator::getCount() (<a href="https://github.com/qorelanguage/qore/issues/1417">issue 1417</a>)
      - added the following methods:
        - \c TableMapper::AbstractSqlStatementOutboundMapper::getRowIterator()
        - \c TableMapper::InboundTableMapper::iterator()
        - \c TableMapper::InboundTableMapperIterator::getRuntime()
        - \c TableMapper::InboundTableMapperIterator::replaceRuntime()
        - \c TableMapper::InboundTableMapperIterator::setRuntime()
        - \c TableMapper::SqlStatementMapperIterator::getRuntime()
        - \c TableMapper::SqlStatementMapperIterator::replaceRuntime()
        - \c TableMapper::SqlStatementMapperIterator::setRuntime()
    - <a href="../../modules/QUnit/html/index.html">QUnit</a> module:
      - fixed showing the assertion location when there are test modules on top of QUnit (<a href="https://github.com/qorelanguage/qore/issues/1046">issue 1046</a>)
    - fixed inconsistency between list splice operator and splice function (<a href="https://github.com/qorelanguage/qore/issues/1380">issue 1380</a>)

    @section qore_08123 Qore 0.8.12.3

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08123_bug_fixes Bug Fixes in Qore

    - fixed the documentation (and DB modules) where @ref Qore::SQL::SQLStatement::fetchColumns() "SQLStatement::fetchColumns()" was inconsistent; now it will return a empty hash when no more rows are available to fetch (<a href="https://github.com/qorelanguage/qore/issues/1241">issue 1241</a>)
    - added I/O timeout support to the @ref Qore::FtpClient "FtpClient" class (<a href="https://github.com/qorelanguage/qore/issues/1252">issue 1252</a>)
    - fixed bugs in @ref Qore::Socket::recv() "Socket::recv()" and @ref Qore::Socket::recvBinary() "Socket::recvBinary()" with <tt>size = 0</tt> where @ref nothing could be returned which is invalid according to the methods' declared return types (<a href="https://github.com/qorelanguage/qore/issues/1260">issue 1260</a>)
    - fixed a bug where @ref Qore::FtpClient::get() "FtpClient:get()" would fail with an exception when retrieving an empty file (<a href="https://github.com/qorelanguage/qore/issues/1255">issue 1255</a>)
    - fixed a bug where executing a call reference to a deleted object method would cause a crash (<a href="https://github.com/qorelanguage/qore/issues/1268">issue 1268</a>)
    - fixed a bug where Qore would allow methods to be called on already deleted objects under certain conditions (<a href="https://github.com/qorelanguage/qore/issues/1270">issue 1270</a>)
    - fixed a bug where calling @ref Qore::exit() "exit()" in a multithreaded program could result in a segmentation fault (<a href="https://github.com/qorelanguage/qore/issues/1215">issue 1215</a>)
    - fixed a bug where <a href="../../modules/HttpServer/html/index.html">HttpServer::addListener()</a> could not accept a bind on port 0 to mean any random port (<a href="https://github.com/qorelanguage/qore/issues/1284">issue 1284</a>)
    - fixed a race condition in @ref garbage_collection "prompt collection" that could lead to a crash (<a href="https://github.com/qorelanguage/qore/issues/1084">issue 1084</a>)
    - fixed a bug clearing @ref Qore::Socket "Socket" event queues when the @ref Qore::Socket "Socket" goes out of scope that could lead to a crash (<a href="https://github.com/qorelanguage/qore/issues/1292">issue 1292</a>)
    - fixed a bug with @ref Qore::FtpClient::setWarningQueue() "FtpClient::setWarningQueue()" that could cause a crash (<a href="https://github.com/qorelanguage/qore/issues/1293">issue 1293</a>)
    - fixed a bug where @ref Qore::FtpClient::pwd() returned invalid directory names (<a href="https://github.com/qorelanguage/qore/issues/1295">issue 1295</a>)

    @section qore_08122 Qore 0.8.12.2

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08122_bug_fixes Bug Fixes in Qore
    - fixed bugs in handling websocket close status codes in the <a href="../../modules/WebSocketUtil/html/index.html">WebSocketUtil</a>, <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a>, and <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a> modules (<a href="https://github.com/qorelanguage/qore/issues/1216">issue 1216</a>)
    - fixed a crashing bug with recursive class initialization (<a href="https://github.com/qorelanguage/qore/issues/2023">issue 2023</a>)

    @section qore_08121 Qore 0.8.12.1

    @par Release Summary
    Bugfix release; see details below

    @subsection qore_08121_bug_fixes Bug Fixes in Qore
    - <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module fixes:
      - fixed a bug with the \c SqlStatementOutboundMapper::iterator() method; corrected the iterator object return value which was causing \c AbstractMapperIterator::mapBulk() to fail (<a href="https://github.com/qorelanguage/qore/issues/979">issue 979</a>)
      - fixed a bug with \c SqlStatementOutboundMapper; it would throw an error if the required \c "table" or \c "sh" options were used and only worked with subclasses that declared these options (<a href="https://github.com/qorelanguage/qore/issues/981">issue 981</a>)
      - fixed a bug where \c AbstractSqlStatementOutboundMapper::iterator() failed to use options when creating the new \c Mapper object (<a href="https://github.com/qorelanguage/qore/issues/1088">issue 1088</a>)
    - fixed a bug where optional arguments were not handled correctly in some rare cases (<a href="https://github.com/qorelanguage/qore/issues/974">issue 974</a>)
    - fixed a bug causing a crash when @ref Qore::parse_base64_string_to_string() "parse_base64_string_to_string()" was called with an empty string (<a href="https://github.com/qorelanguage/qore/issues/996">issue 996</a>)
    - fixed a bug resolving base class method calls during parse initialization (<a href="https://github.com/qorelanguage/qore/issues/1075">issue 1075</a>)
    - fixed thread memory handling bug with some operator expressions and the @ref background "background operator" (<a href="https://github.com/qorelanguage/qore/issues/1096">issue 1096</a>)
    - fixed a race condition in the prompt collection of closure-bound local variables in the @ref garbage_collection "garbage collector" (<a href="https://github.com/qorelanguage/qore/issues/1103">issue 1103</a>)
    - fixed a bug where @ref Qore::HTTPClient "HTTPClient" class method variants such as @ref Qore::HTTPClient::get() "HTTPClient::get()" without a callback would fail to return the message body when the server sent a reply with chunked transfer encoding (<a href="https://github.com/qorelanguage/qore/issues/1117">issue 1117</a>)
    - fixed a bug in CsvUtil where backward compatibility was broken for single-row-type format (<a href="https://github.com/qorelanguage/qore/issues/1124">issue 1124</a>)
    - fixed bugs where declared public functions were missing from the library ABI (<a href="https://github.com/qorelanguage/qore/issues/1126">issue 1126</a>)
    - fixed bugs where @ref Qore::format_number() and <float>::format() gave incorrect results when rounding to the significant decimals given in the format string (<a href="https://github.com/qorelanguage/qore/issues/1149">issue 1149</a>)
    - fixed a bug referencing \c self in base class constructor arguments (<a href="https://github.com/qorelanguage/qore/issues/1169">issue 1169</a>)
    - fixed a bug where the incorrect class destructor was called in the openldap module (<a href="https://github.com/qorelanguage/qore/issues/1174">issue 1174</a>)
    - fixed a bug where declaring a \c copy() method as @ref synchronized would result in a crash when the method was called (<a href="https://github.com/qorelanguage/qore/issues/1188">issue 1188</a>)
    - fixed bugs in <string>::getEncoded() and <string>::getDecoded() regarding @ref Qore::CE_XML "CE_XML" and @ref Qore::CE_NONASCII "CE_NONASCII" (<a href="https://github.com/qorelanguage/qore/issues/1193">issue 1193</a>)
    - fixed bugs where @ref Qore::call_object_method() and @ref Qore::call_object_method_args() allowed private methods to be called from outside the class (<a href="https://github.com/qorelanguage/qore/issues/1194">issue 1194</a>)
    - fixed a bug where @ref deprecated methods were being internally registered as @ref RUNTIME_NOOP (<a href="https://github.com/qorelanguage/qore/issues/1197">issue 1197</a>)
    - fixed bugs where the @ref Qore::SQL::Datasource "Datasource" class would open a connection to the server in the constructor before options were set and where a server connection was required to call @ref Qore::SQL::Datasource::getOption() "Datasource::getOption()" or @ref Qore::SQL::Datasource::setOption() "Datasource::setOption()" (<a href="https://github.com/qorelanguage/qore/issues/1201">issue 1201</a>)
    - fixed memory errors in the @ref Qore::Thread::Queue "Queue" class where spurious exceptions could be raised (<a href="https://github.com/qorelanguage/qore/issues/1202">issue 1202</a>)
    - fixed a memory leak with static class member initializers (<a href="https://github.com/qorelanguage/qore/issues/1206">issue 1206</a>)

    @section qore_0812 Qore 0.8.12

    @par Release Summary
    Major new release with major new features and bug fixes as well as packaging fixes:
    - added support for @ref garbage_collection "deterministic garbage collection"
    - standardized function naming convention
    - new functions, methods, constants, operators, and user modules
    - greatly improved support on Windows

    @subsection qore_0812_compatibility Changes That Can Affect Backwards-Compatibility
    - fixed broken list parsing; in previous releases, %Qore's parser re-wrote lists without parentheses used as top-level statements with certain assignment operators (@ref assignment_operator "=", @ref plus_equals_operator "+=", @ref minus_equals_operator "-=", @ref multiply_equals_operator "*=", and @ref divide_equals_operator "/=", but not with others) so that statements like <tt>list l = 1, 2, 3;</tt> were valid assignments.   Due to operator precedence, such statements should normally be interpreted as <tt>(list l = 1), 2, 3;</tt>, which is not a valid expression.  Not only were the rules applied with only some assignment operators, but such lists were only rewritten if used as top-level statements, therefore the rules were applied inconsistenctly depending on where the expression was located in the parse tree.  As of %Qore 0.8.12, these inconsistencies have been eliminated by default from %Qore; all lists are processed according to the precedence rules defined in @ref operators.  This could break old code that relied on the old, broken behavior.  To get the old behavior, use the @ref broken-list-parsing "%broken-list-parsing" parse directive.
    - fixed broken @ref int_type "int" and @ref softint_type "softint" assignments; previously runtime type errors with these type restrictions were ignored and all values were silently converted to integers for the assignment, now runtime type errors are thrown according to the original design.  Parse errors are detected as before.  This could break old code that relied on the old, broken behavior.  To get the old behavior, use the @ref broken-int-assignments "%broken-int-assignments" parse directive.
    - fixed broken multi-character operator parsing; the %Qore parser has been updated to no longer accept multi-character operators with whitespace between the chacters making up the operator; it is believed that this was never used and simply caused the parser to be needlessly complicated and caused %Qore to be less compatible with other languages.  To get the old behavior, use the @ref broken-operators "%broken-operators" parse directive.
    - the @ref push "push", @ref unshift "unshift", @ref pop "pop" and @ref shift "shift" operators now throw an exception when their first operand is not a list and @ref strict-args "%strict-args" is in effect

    @subsection qore_0812_new_features New Features in Qore
    - Added the @ref value_coalescing_operator which checks first argument if it evaluates to @ref False "False" with @ref <value>::val() and if so assigns the second argument. The operator can be further chained; for example: @code{.py} expr1 ?* expr2 ?* expr3 @endcode
    - Added the @ref null_coalescing_operator which checks the first operand for @ref nothing or @ref null; if true returns the second argument. The operator can be further chained, in which case the first operand with a value is returned; ex: @code{.py} expr1 ?? expr2 ?? expr3 @endcode
    - %Qore identifiers can now begin with an underscore character \c "_"; the following is now a valid (with @ref new-style "%new-style"): @code{.py}int _var = 1;@endcode
    - hash enhancements:
      - new syntax for an expression giving an empty hash: <tt>{}</tt>; for example: @code{.py} hash h = {};@endcode
      - new literal hash support: hashes can now be given as literal values as follows: @code{.py} (<key_expr>: <val_expr>, [...]) @endcode For example: @code{.py} return (get_key(): get_value()); @endcode in the past the keys in literal hashes had to be either a string or a constant; now any valid %Qore expression can be used to generate the hash keys at runtime
      - new hash syntax; hash elements can now be enclosed by curly brackets as well as regular parentheses; the version with curly brackets when used with the @ref hmap "map" operator results in the hash version of the map operator being used
      - Added new @ref hmap "hash version of the map" operator to build a hash from a list or iterator expression; ex: @code{.py} hash h = map {$1, h2.$1}, i; @endcode
    - implemented support for loading user modules in a pre-defined @ref Qore::Program "Program" object (that can have a custom API) in the following new functions and methods:
      - @ref Qore::load_user_module_with_program() "load_user_module_with_program()"
      - @ref Qore::Program::loadApplyToPrivateUserModule() "Program::loadApplyToPrivateUserModule()"
      - @ref Qore::Program::loadApplyToUserModule() "Program::loadApplyToUserModule()"
      - @ref Qore::Program::loadUserModuleWithProgram() "Program::loadUserModuleWithProgram()"
    - implemented support for code / dependency injections in @ref Qore::Program "Program" containers with the following changes:
      - @ref Qore::Program::importClass() now accepts optional arguments that allow the imported version of the class to live in another namespace and have another name and an argument that allows the imported version of the class to remain even if it overlaps with an imported system or user class from a module
      - @ref Qore::Program::importFunction() now accepts an optional argument that allows the imported version of the function to remain even if it overlaps with an imported system or user function from a module
      - the new parse option @ref Qore::PO_ALLOW_INJECTION must be set on the @ref Qore::Program "Program" object in order to use code / dependency injection parameters in the above methods
      - @ref Qore::Program "Program" changes:
        - Once the object has an injected API set up, the system API can be imported
          (possibly already overridden with injected code) with the following new methods:
          - @ref Qore::Program::importSystemApi()
          - @ref Qore::Program::importSystemClasses()
          - @ref Qore::Program::importSystemConstants()
          - @ref Qore::Program::importSystemFunctions()
        - Additionally user modules can be loaded with overridden injected code with the following new functions / methods:
          - @ref Qore::load_user_module_with_program() "load_user_module_with_program()"
          - @ref Qore::Program::loadApplyToPrivateUserModule() "Program::loadApplyToPrivateUserModule()"
          - @ref Qore::Program::loadApplyToUserModule() "Program::loadApplyToUserModule()"
          - @ref Qore::Program::loadUserModuleWithProgram() "Program::loadUserModuleWithProgram()"
        - Furthermore the following function can be used to reload injected modules with the non-injected version:
          - @ref Qore::reload_module() "reload_module()"
    - implemented support for user-defined thread-resource management, allowing %Qore code to safely manage resources associated to a particular thread:
      - @ref Qore::Thread::AbstractThreadResource
      - @ref Qore::remove_thread_resource()
      - @ref Qore::set_thread_resource()
    - new constants:
      - @ref Qore::DirSep
      - @ref Qore::Platform
      - @ref Qore::ParseOptionCodeMap
      - @ref Qore::ParseOptionStringMap
      - @ref Qore::PO_BROKEN_LIST_PARSING
      - @ref Qore::PO_BROKEN_LOGIC_PRECEDENCE
      - @ref Qore::PO_BROKEN_OPERATORS
      - @ref Qore::PO_NO_INHERIT_SYSTEM_CONSTANTS
      - @ref Qore::PO_NO_INHERIT_USER_CONSTANTS
      - @ref Qore::PO_NO_API
      - @ref Qore::PO_NO_SYSTEM_API
      - @ref Qore::PO_NO_USER_API
      - @ref Qore::SQL::DBI_CAP_HAS_ARRAY_BIND "Qore::SQL::DBI_CAP_HAS_ARRAY_BIND"
      - @ref StringConcatEncoding
      - @ref StringConcatDecoding
    - new classes:
      - @ref Qore::DataLineIterator
      - @ref Qore::Thread::AbstractThreadResource
    - other new methods:
      - @ref Qore::SQL::DatasourcePool::getCapabilities()
      - @ref Qore::SQL::DatasourcePool::getCapabilityList()
      - @ref Qore::SQL::SQLStatement::currentThreadInTransaction()
      - @ref Qore::Thread::Queue::setError()
      - @ref Qore::Thread::Queue::clearError()
    - updated methods:
      - @ref Qore::TimeZone::constructor() "TimeZone::constructor()": now accepts a path to the zoneinfo file if the @ref Qore::PO_NO_FILESYSTEM sandboxing restrictions is not set
    - the \c SOCKET-THROUGHPUT-WARNING event is no longer raised on the warning queue if the transfer size is less than 1024 bytes; this affects:
      - @ref Qore::FtpClient::setWarningQueue()
      - @ref Qore::HTTPClient::setWarningQueue()
      - @ref Qore::Socket::setWarningQueue()
    - new functions:
      - @ref Qore::create_object()
      - @ref Qore::create_object_args()
      - @ref Qore::decode_uri_request()
      - @ref Qore::encode_uri_request()
      - @ref Qore::get_duration_seconds_f()
      - @ref Qore::getgroups()
      - @ref Qore::getusername()
      - @ref Qore::ltrim()
      - @ref Qore::parse_float()
      - @ref Qore::parse_number()
      - @ref Qore::realpath()
      - @ref Qore::rtrim()
      - @ref Qore::set_return_value()
      - @ref Qore::setgroups()
      - @ref Qore::remove_thread_resource()
      - @ref Qore::set_thread_resource()
    - updated functions:
      - @ref Qore::parse_boolean()
      - @ref Qore::string()
      - @ref Qore::strmul()
    - new pseudo-methods:
      - @ref <date>::dayNumber()
      - @ref <date>::dayOfWeek()
      - @ref <date>::durationSecondsFloat()
      - @ref <date>::isoDayOfWeek()
      - @ref <date>::isoWeekHash()
      - @ref <date>::isoWeekString()
      - @ref <object>::uniqueHash()
      - @ref <string>::getDecoded()
      - @ref <string>::getEncoded()
    - the following functions were moved from the <a href="../../modules/Util/html/index.html">Util</a> module to %Qore:
      - @ref Qore::absolute_path()
      - @ref Qore::absolute_path_windows()
      - @ref Qore::absolute_path_unix()
    - camel-case functions were deprecated in this release
      - the following functions were deprecated:
        - @ref Qore::callObjectMethod(): deprecated for @ref Qore::call_object_method()
        - @ref Qore::callObjectMethodArgs(): deprecated for @ref Qore::call_object_method_args()
        - @ref Qore::existsFunction(): deprecated for @ref Qore::exists_function()
        - @ref Qore::functionType(): deprecated for @ref Qore::function_type()
        - @ref Qore::getAllThreadCallStacks(): deprecated for @ref Qore::get_all_thread_call_stacks()
        - @ref Qore::getClassName(): deprecated for @ref Qore::get_class_name()
        - @ref Qore::getDateFromISOWeek(): deprecated for @ref Qore::get_date_from_iso_week()
        - @ref Qore::getDayNumber(): deprecated for @ref Qore::get_day_number()
        - @ref Qore::getDayOfWeek(): deprecated for @ref Qore::get_day_of_week()
        - @ref Qore::SQL::getDBIDriverCapabilities(): deprecated for @ref Qore::SQL::dbi_get_driver_capabilities()
        - @ref Qore::SQL::getDBIDriverCapabilityList(): deprecated for @ref Qore::SQL::dbi_get_driver_capability_list()
        - @ref Qore::SQL::getDBIDriverList(): deprecated for @ref Qore::SQL::dbi_get_driver_list()
        - @ref Qore::getFeatureList(): deprecated for @ref Qore::get_feature_list()
        - @ref Qore::getISODayOfWeek(): deprecated for @ref Qore::get_iso_day_of_week()
        - @ref Qore::getISOWeekHash(): deprecated for @ref Qore::get_iso_week_hash()
        - @ref Qore::getISOWeekString(): deprecated for @ref Qore::get_iso_week_string()
        - @ref Qore::getMethodList(): deprecated for @ref Qore::get_method_list()
        - @ref Qore::getModuleHash(): deprecated for @ref Qore::get_module_hash()
        - @ref Qore::getModuleList(): deprecated for @ref Qore::get_module_list()
        - @ref Qore::makeBase64String(): deprecated for @ref Qore::make_base64_string()
        - @ref Qore::makeHexString(): deprecated for @ref Qore::make_hex_string()
        - @ref Qore::parseBase64String(): deprecated for @ref Qore::parse_base64_string()
        - @ref Qore::parseBase64StringToString(): deprecated for @ref Qore::parse_base64_string_to_string()
        - @ref Qore::SQL::parseDatasource(): deprecated for @ref Qore::SQL::parse_datasource()
        - @ref Qore::parseHexString(): deprecated for @ref Qore::parse_hex_string()
        - @ref Qore::sortDescending(): deprecated for @ref Qore::sort_descending()
        - @ref Qore::sortDescendingStable(): deprecated for @ref Qore::sort_descending_stable()
        - @ref Qore::sortStable(): deprecated for @ref Qore::sort_stable()
        - @ref Qore::throwThreadResourceExceptions(): deprecated for @ref Qore::throw_thread_resource_exceptions()
      - Functions deprecated in this release will remain for the forseeable future for backwards-compatibility
    - Added support for reexporting imported definitions in user module with the new <tt>%%requires(reexport)</tt> form of the @ref requires "%requires" parse directive.
    - @ref Qore::xrange() and @ref Qore::RangeIterator updates:
      - @ref Qore::xrange() and @ref Qore::RangeIterator::constructor() and <list>::rangeIterator() updated to take an optional value to return in the @ref Qore::RangeIterator::getValue() method
    - @ref Qore::FtpClient updates:
      - added @ref Qore::FtpClient::getMode()
    - Performance improvements:
      - @ref Qore::HashPairIterator and @ref Qore::ObjectPairIterator objects (returned by @ref <hash>::pairIterator() and @ref <object>::pairIterator(), respectively and the associated reverse iterators) have had their performance improved by approximately 70% by reusing the hash iterator object when possible
    - module directory handling changed
      - user modules are now stored in prefix/share/qore-modules/version
      - prefix/share/qore-modules is also added to the module path
      - version-specific module directories are added first, then the "generic" directories
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module updates:
      - new \c "tolwr" option in structured text parsing classes
      - \c AbstractCsvWriter will set \c "headers" from the \c "fields" option if \c "headers" are not explicitly set
      - added write() methods returning the generated strings to the \c CsvStringWriter class for API compatibility with the corresponding FixedLengthDataWriter methods
      - implemented support for @ref Qore::SQL::SQLStatement "SQLStatement" as an iterator source for \c AbstractCsvWriter::write()
      - \c quote_escape option implemented in \c AbstractCsvWriter
      - implemented the \c "datamap" and \c "info_log" options for CSV generation
      - implemented alternative options with underscores instead of dashes for all constructors
      - extended multi-type support, record type rules and default value in field specification
      - implemented multi-type record support in \c AbstractCsvWriter and \c AbstractCsvIterator using \c resolve_type and \c headers options
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module updates:
      - implemented the \c "constant" field tag, allowing a constant value for an output field to be specified directly in the mapper hash
      - implemented the \c "default" field tag, giving a default value if no input value is specified
      - implemented the global \c "date_format" mapper option
      - implemented support for structured output fields with dot notation in the output field name
      - implemented per-field and global \c "number_format" mapper options
      - changed the behavior of the \c "number" field type: now leaves numeric values in their original type, converts all other types to a number
      - removed the deprecated \c "crec" option
      - implemented the \c "input" option with input record validation
      - implemented the \c "output" option with output record validation
      - implemented the \c "info_log" option and removed the \c "trunc" option
      - implemented the \c "runtime" field tag
      - implemented the \c "index" field tag
      - improved the Mapper::mapAll() method by adding support for hashes of lists to better support input from bulk DML (@ref Qore::SQL::SQLStatement::fetchColumns() "SQLStatement::fetchColumns()")
    - <a href="../../modules/TableMapper/html/index.html">TableMapper</a> module updates:
      - added table name and datasource description to error messages
      - implemented more efficient support for inserts from a sequence for databases supporting the \c "returning" clause in insert statements; now such inserts are made in a single round trip instead of n + 1 where n is the number of sequences in the insert
      - implemented an optimized insert approach assuming stable input data
      - implemented the following new options:
        - \c unstable_input: to accommodate unstable input data and disable the insert optimization (default: False)
        - \c insert_block: for DB drivers supporting bulk DML, the number of rows inserted at once (default: 500, only used when \c unstable_input is False) and bulk inserts are supported in the table object
      - added methods for bulk / batch inserts for db drivers supporting bulk DML (ex: Oracle)
      - updated to <a href="../../modules/Mapper/html/index.html">Mapper</a> changes: use table description to define output record for the <a href="../../modules/Mapper/html/index.html">Mapper</a> module
      - added the AbstractSqlStatementOutboundMapper class
      - added the InboundIdentityTableMapper class
      - added the SqlStatementMapperIterator class
      - added the SqlStatementOutboundMapper class
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
      - implemented RestClient::addDefaultHeaders()
      - implemented RestClient::getDefaultHeaders()
      - implemented RestClient::getSendEncoding()
      - implemented RestClient::setContentEncoding()
      - when possible, REST bodies are decoded and stored in the \a info output argument when the HTTP server returns a status code < 100 or >= 300 to allow for error-handling in the client
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module updates:
      - implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
      - the AbstractRestStreamRequestHandler class is now the base abstract class for REST stream request handlers
    - <a href="../../modules/WebUtil/html/index.html">WebUtil</a> module updates:
      - updated FileHandler::handleRequest() to allow for chunked sends
    - <a href="../../modules/BulkSqlUtil/html/index.html">BulkSqlUtil</a> module:
      - added this new module providing APIs supporting bulk DML with <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> with supported drivers
    - <a href="../../modules/FilePoller/html/index.html">FilePoller</a> module:
      - added this new module to support polling files in directories on the filesystem
    - <a href="../../modules/FixedLengthUtil/html/index.html">FixedLengthUtil</a> module:
      - added this new module for handling fixed length line data
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module updates:
      - <a href="../../modules/HttpServerUtil/html/index.html">HttpServerUtil</a> module split from the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module containing supporting definitions for handler classes and other code interfacing with the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
      - added the PermissiveAuthenticator class
      - translate \c "+" (plus) to \c " " (space) in the query portion of URIs in parse_uri_query()
      - implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
      - new methods implemented in HttpServer:
        - HttpServer::getListenerLogOptions()
        - HttpServer::getListenerLogOptionsID()
        - HttpServer::setListenerLogOptions()
        - HttpServer::setListenerLogOptionsID()
        - HttpServer::addListeners() (new variant taking a hash of SSL info)
        - HttpServer::listenerStarted() (to allow for reporting when listeners are actually running since they are started asynchronously)
      - improved performance matching request URIs to handlers
      - added the \c "ssl" key to the listener socket info hash
      - implemented support for notifying persistent connections when the connection is terminated while a persistent connection is in place
      - removed the unused AbstractStreamRequestHandler class
      - fixed parse_uri_query() to always return \a params as a hash (<a href="https://github.com/qorelanguage/qore/issues/569">issue 569</a>)
      - added \c root_path to the context hash if the path was matched by a URL path prefix (<a href="https://github.com/qorelanguage/qore/issues/570">issue 570</a>)
      - implemented support for configurable stream handler timeout values (<a href="https://github.com/qorelanguage/qore/issues/719">issue 719</a>)
    - <a href="../../modules/Schema/html/index.html">Schema</a> module updates:
      - added the following public functions to make column definitions easier:
        - c_char()
        - c_date()
        - c_int()
        - c_number()
        - c_timestamp()
        - c_varchar()
    - added option @ref Qore::Option::HAVE_DETERMINISTIC_GC "HAVE_DETERMINISTIC_GC" for %Qore builds where deterministic garbage collection is enabled
    - @ref Qore::Program "Program" class enhancements:
      - the @ref Qore::Program "Program" class now creates @ref conditional_parsing "parse defines" for parse options so that conditional code can be implemented depending on the sandboxing configuration of the program container
      - the @ref Qore::Program::importClass() method now accepts an optional \a new_name argument to allow for importing classes with a different name and namespace path
    - added a timeout parameter to the following @ref Qore::Socket "Socket" methods:
      - @ref Qore::Socket::upgradeClientToSSL()
      - @ref Qore::Socket::upgradeServerToSSL()
    - added zoneinfo -> Windows time zone translation code on Windows to support standard UNIX (zoneinfo) time zone names on Windows; time zone information is still taken from the Windows registry but region names are reported using the standard zoneinfo names
    - @ref Qore::FileLineIterator updates:
      - added @ref Qore::FileLineIterator::hstat() and @ref Qore::FileLineIterator::stat()
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module updates:
      - implemented insert option support and support for the \c "returning" clause in supported drivers to avoid server round trips
      - implemented the AbstractTable::getDesc() method and improved exception description messages
      - implemented support for late table resoluton in join arguments to enable joins from serialized parameters
      - improved error messages for common errors such as join errors
      - implemented support for DBA management actions
      - implemented support for driver-dependent pseudocolumns
      - implemented per-column support for the \c "desc" keyword in orderby expressions
      - implemented the \c "wop_or()" function to allow complex SQL expressions to be generated with \c "or" as well as \c "and"
      - implemented the \c "cop_cast()" operator for converting [column] value into another datatype
      - implemented the \c "cop_sum()" aggregate operator for returning sum of column values
      - implemented update operators \c "uop_plus()", \c "uop_minus()", \c "uop_multiply()", \c "uop_divide()"
      - implemented AbstractTable::getBulkUpsertClosure() to better support bulk SQL merge operations
      - removed all APIs that handle implicit transactions; APIs must commit transactions explicitly
      - \a orderby and \a groupby select options now take positive integers as column identifiers
      - column aliases (defined with cop_as()) can now be used in the where hash argument and in join criteria
      - column operator functions can be used in the where clause and in join conditions (<a href="https://github.com/qorelanguage/qore/issues/529">issue 529</a>)
      - implemented the \c "cop_coalesce()" column operation function to support the \c "COALESCE" operator in queries (<a href="https://github.com/qorelanguage/qore/issues/671">issue 671</a>)
      - implemented \c cop_substr() and \c uop_substr() operators (<a href="https://github.com/qorelanguage/qore/issues/801">issue 801</a>)
      - implemented \c op_substr() where operator (<a href="https://github.com/qorelanguage/qore/issues/883">issue 883</a>)
      - implemented the \c "omit_update" upsert option for asymmetrical upserts (updates only update a subset of the columns inserted) (<a href="https://github.com/qorelanguage/qore/issues/791">issue 791</a>)
      - implemented the \c "UpsertUpdateOnly" upsert option (<a href="https://github.com/qorelanguage/qore/issues/793">issue 793</a>)
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module updates:
      - implemented support for views for DML in the OracleTable class
      - implemented support for Oracle pseudocolumns in queries
      - return lists from Oracle's data dictionary ordered
      - implemented AbstractTable::emptyStringsAsNull()
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module updates:
      - added support for the following datatypes and aliases: \c bool, \c float, \c int, \c timetz, \c timestamptz, \c varbit
      - added support for listing PostgreSQL types and materialized views (<a href="https://github.com/qorelanguage/qore/issues/699">issue 699</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module updates:
      - added support for the following datatypes: \c binary, \c varbinary
    - <a href="../../modules/Util/html/index.html">Util</a> module updates:
      - added public function \c glob_to_regex()
      - added public functions \c lpad() and \c rpad()
      - added public function \c ordinal()
      - added public function \c plural()
      - added public function \c regex_escape()
      - added public function \c zip()
      - \c parse_to_qore_value() now respects parentheses when parsing lists and hashes (<a href="https://github.com/qorelanguage/qore/issues/846">issue 846</a>)
    - added initial support for UTF-16 character encoding; note that UTF-16 is not backwards-compatible with ASCII and therefore not supported universally in %Qore; it's recommended to convert these strings to UTF-8 in %Qore; do not use UTF-16 as the default character encoding in %Qore; currently UTF-16 data can be parsed using the following classes that convert the data to UTF-8:
      - @ref Qore::DataLineIterator
      - @ref Qore::FileLineIterator
    - removed support for the C++ \c QDBI_METHOD_ABORT_TRANSACTION_START DBI method; transactions are always assumed to be in progress even if an exec call throws an exception in the first statement in a new transaction; this is necessary to handle bulk DML where a single statement can partially succeed and partially fail; the ABI remains unchanged; drivers that set this DBI method will no longer have it called because it's not necessary; in the upcoming API/ABI change this C++ DBI method will be removed entirely
    - added support for @ref unary_plus_operator "unary plus"
    - added support for empty private blocks in classes
    - added support for @ref Qore::statvfs() on Windows (simulated from \c GetDiskFreeSpaceEx() <a href="https://github.com/qorelanguage/qore/issues/618">issue 618</a>)
    - assignment of a variable to itself is now illegal (<a href="https://github.com/qorelanguage/qore/issues/526">issue 526</a>)
    - extended qpp to support the 'final' class flag (<a href="https://github.com/qorelanguage/qore/issues/876">issue 876</a>)
    - extended qpp to support private members (<a href="https://github.com/qorelanguage/qore/issues/924">issue 924</a>)
    - added @ref <float>::infp() and @ref <float>::nanp() predicates to @ref float_type (<a href="https://github.com/qorelanguage/qore/issues/909">issue 909</a>)

    @subsection qore_0812_bug_fixes Bug Fixes in Qore
    - fixed format of octal constant - there was an error if a string contained octal constant that is shorter than 3 digit
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module fixes:
      - fixed a bug setting the response encoding in HttpServer::setReplyHeaders() where the Socket encoding was not set properly and therefore the encoding in the Content-Type in the response header did not necessarily match the encoding of the response
      - fixed a socket / connection performance problem with HTTPS listeners where the SSL connection was being negotiated inline with the accept instead of in the connection thread, thereby blocking new connections from being accepted
      - fixed bugs where URI strings were improperly encoded and decoded (also fixed in the <a href="../../modules/RestClient/html/index.html">RestClient</a> module)
      - fixed a bug in the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module where chunked sends were not received and decoded properly in all cases for handlers that did not explicitly handle chunked messages
      - fixed a bug in HttpServer::addListener() with an integer argument; a UNIX socket was opened instead of a wildcard listener on the given port
      - fixed typos causing bugs in HTTP error logging (<a href="https://github.com/qorelanguage/qore/issues/308">issue 308</a>)
      - fixed a bug formatting IPv6 host addresses in the return value to \c HttpServer::http_get_url_from_bind() (<a href="https://github.com/qorelanguage/qore/issues/821">issue 821</a>)
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module fixes:
      - fixed bugs where URI strings were improperly encoded and decoded (also fixed in the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module)
      - fixed a bug where URI paths were sent as relative paths instead of absolute paths
      - fixed issues where multiple leading \c "/" chars were sometimes present in the request URI path
      - fixed an issue where a trailing \c "/" char was sometimes added to the request URI path (<a href="https://github.com/qorelanguage/qore/issues/899">issue 899</a>)
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module fixes:
      - fixed a bug where the \c "format" field option was not usable with fields assigned type \c "*date"
      - fixed the default field type as "*string" (from "string") to avoid parsing and outputting empty strings for missing input data
    - <a href="../../modules/Schema/html/index.html">Schema</a> module fixes:
      - AbstractSchema::combineOptions() fails when an option variable contains @ref nothing instead of a valid hash
      - fixed a bug with <i>"insert-only reference data"</i> with the verbose option; the upsert strategy was changed to \c UpsertSelectFirst which means that insert-only reference data could also be updated
      - fixed a bug where it was not possible to provide Database options when creating schemas (<a href="https://github.com/qorelanguage/qore/issues/501">issue 501</a>)
    - <a href="../../modules/Mapper/html/index.html">Mapper</a> module fixes:
      - moved field length checks after all transformations have been applied
      - fixed bugs in the \c "timezone" and \c "input_timezone" options, documented those options
      - fixed a bug where \c "constant" field tags assigned to a value that evaluated to boolean @ref False "False" were not recognized (<a href="https://github.com/qorelanguage/qore/issues/610">issue 610</a>)
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module fixes:
      - fixed a bug with queries using a \a desc argument with the \a orderby query option with multiple sort columns; the \c "desc" string was added only to the last column but should have been added to all columns
      - fixed a bug where foreign key constraints with supporting indexes were not tracked and therefore schema alignment on DBs that automatically create indexes for foreign key constraints would fail
      - fixed a bug where driver-specific objects were not included when dropping a schema
      - fixed a bug in subquery handling where bind-by-value arguments from the subquery were lost
      - fixed a bug in the partition by/over operator where column names as given in the query argument hash were not properly recognized
      - fixed a bug in schema alignment; when aligning a schema and an index supporting a PK constraint is introduced in the new schema, the alignment would fail when a constraint is attempted to be disabled that doesn't exist
      - fixed a bug generating select statements for tables accessed through a synonym when used with join clauses; previously inconsistent schema prefixes could be used which could cause errors parsing the SQL statements generated
      - fixed a bug where the AbstractTable lock was held while executing SQL to determine the upsert strategy to use with UpsertAuto
      - fixed a bug where complex bind values as hashes (such as used by the pgsql and oracle drivers) were rejected by SqlUtil (<a href="https://github.com/qorelanguage/qore/issues/494">issue 494</a>) when updating
      - fixed a bug where wildcard columns in join tables were not working (<a href="https://github.com/qorelanguage/qore/issues/499">issue 499</a>)
      - fixed a bug in \c "op_in()" where invalid SQL was generated with an argument of 0 (<a href="https://github.com/qorelanguage/qore/issues/500">issue 500</a>)
      - fixed bugs in \c cop_seq() and \c cop_seq_currval() (<a href="https://github.com/qorelanguage/qore/issues/624">issue 624</a>)
      - fixed a bug in \c join_inner() where the \a cond argument was ignored (<a href="https://github.com/qorelanguage/qore/issues/645">issue 645</a>)
      - fixed \c "uop_lower()" and \c "uop_upper()" operators to allow nesting (<a href="https://github.com/qorelanguage/qore/issues/657">issue 657</a>)
      - fixed a bug where SqlUtil was generating invalid SQL for some DBs where a wilcard was used with explicit column names (<a href="https://github.com/qorelanguage/qore/issues/708">issue 708</a>)
      - fixed a bug where updating an index without any source constraints caused an invalid exception to be raised (<a href="https://github.com/qorelanguage/qore/issues/768">issue 768</a>)
      - fixed a bug in \c AbstractTable::update() with sequence operators (<a href="https://github.com/qorelanguage/qore/issues/942">issue 942</a>)
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> module fixes:
      - fixed a bug where column names that are reserved words were not quoted in generated SQL
      - fixed bugs in \c cop_seq() and \c cop_seq_currval() (<a href="https://github.com/qorelanguage/qore/issues/624">issue 624</a>)
    - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module fixes:
      - fixed a bug in PgsqlTable::tryInsertImpl(); added an explicit \c "begin" call to make the savepoint work with PostgreSQL 9.3+ servers
      - fixed a bug retrieving foreign constraints; columns were not guaranteed to be returned in declaration order
      - fixed a bug handling tablespaces in unique constraints
      - fixed a bug handling \c "time" columns; they were being issued as \c "time6" instead of "time(6)" (<a href="https://github.com/qorelanguage/qore/issues/385">issue 385</a>)
      - fixed support for the following datatypes and aliases: \c "bit", \c "bit varying", \c "char", \c "character", \c "character varying", \c "char varying", \c "oid", \c "varchar"
      - fixed bugs in \c cop_seq() and \c cop_seq_currval() (<a href="https://github.com/qorelanguage/qore/issues/624">issue 624</a>)
    - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a> module fixes:
      - corrected support for the \c varbinary type (<a href="https://github.com/qorelanguage/qore/issues/403">issue 403</a>)
      - corrected support for the \c binary type (<a href="https://github.com/qorelanguage/qore/issues/524">issue 524</a>)
      - \c schema member incorrectly set by @ref Qore::SQL::AbstractDatasource::getUserName() "AbstractDatasource::getUserName()" instead of @ref Qore::SQL::AbstractDatasource::getDBName() "AbstractDatasource::getDBName()" (<a href="https://github.com/qorelanguage/qore/pull/519">issue 519</a>)
    -  <a href="../../modules/WebUtil/html/index.html">WebUtil</a> module fixes:
      - fixed a bug where template programs with @ref Qore::PO_ALLOW_BARE_REFS set did not work
      - fixed a bug serving index files in \c FileHandler::tryServeRequest() where index files could be incorrectly served with a \c "204 No Content" response (<a href="https://github.com/qorelanguage/qore/issues/616">issue 616</a>)
    - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a> module fixes:
      - fixed a bug where the connection object was deleted when the connection closes which could cause excess exceptions in multithreaded server code
      - added the WebSocketConnection::connectionClosed() method to be called when the connection is closed
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module updates:
      - updated module to version 1.3
      - ignore \c SOCKET-NOT-OPEN errors when closing (server already closed the connection)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module fixes:
      - fold all possible arguments in the REST request body into the argument hash so that complex REST requests can be made with clear URI strings
      - fixed a bug where an error calling an internal nonexistent method would be reported with an incorrect error message
      - send errors are now reported in the \c AbstractRestStreamRequestHandler object so they can be properly logged (<a href="https://github.com/qorelanguage/qore/issues/734">issue 734</a>)
      - unknown REST class errors with the base class are now reported consistently like all other such errors (<a href="https://github.com/qorelanguage/qore/issues/859">issue 859</a>)
      - fixed an issue where request URI paths with multiple consecutive \c "/" chars were handled incorrectly (<a href="https://github.com/qorelanguage/qore/issues/900">issue 900</a>)
    - <a href="../../modules/Util/html/index.html">Util</a> module fixes:
      - fixed \c normalize_dir_windows() handling of UNC paths (<a href="https://github.com/qorelanguage/qore/issues/813">issue 813</a>)
    - fixed a memory error in error-handling with type errors when parsing user module headers that could cause a crash
    - fixed a memory leak in @ref Qore::Socket::setWarningQueue() "Socket::setWarningQueue()": when a callback argument is used, the argument can be leaked when the @ref Qore::Socket "Socket" is destroyed
    - fixed a bug where the @ref Qore::HTTPClient "HTTPClient" class did not send the X.509 certificate and private key when making a client SSL connection
    - fixed a bug in the @ref Qore::Thread::ThreadPool "ThreadPool" class where an error in shutdown handling could cause a crash in rare conditions when @ref Qore::Thread::ThreadPool "ThreadPool" methods are called while the pool is shutting down
    - fixed a crashing bug initializing some lvalues with type restrictions; affected static class variables at least
    - fixed a bug where a class calling an overridden method in a base class constructor that referred to a member that should have been initialized in the subclass would be executed before the subclass's members were initialized causing the method call to fail
    - fixed a memory leak in classes with multiple inheritance and base classes that are inherited multiple times with member initialization
    - fixed a bug in the @ref include "%include" and @ref append-module-path "%append-module-path" parse directives where relative paths were not calculated from the script's directory but instead were calculated from the current working directory, causing such paths to fail
    - fixed a bug in @ref Qore::get_qore_library_info() that could cause a crash due to treating the \a Build attribute as a string when it was an integer
    - fixed a bug in the @ref divide_equals_operator "divide-equals (/=) operator" where an exception was not thrown when an operand of zero with arbitrary-precision numeric arguments is used
    - fixed a bug where the connection mode would be reset for every connection in the @ref Qore::FtpClient class
    - fixed a bug in the @ref Qore::FtpClient class where connection problems in the data channel when executing certain FTP commands could cause a crash due to missing error checking
    - fixed a bug in Qore's internal strcasestr() function on platforms that do not support this function (ex: Solaris) that could result in a crash
    - fixed a bug in Qore where string data formatted with \c %%n, \c %%N, or \c %%y could be added to another string with a different character encoding without any automatic conversions, therefore resulting in an improperly-encoded string
    - fixed a crash when parsing when parsing function, method, or closure arguments when either of the @ref duplicate-local-vars or @ref duplicate-block-vars warnings are set due to an error handling thread-local variable info in parse initialization
    - fixed a bug where code with mixed coding styles (old and new) could result in invalid parse errors when parsing base class constructor calls to a base class defined in another coding style
    - fixed a bug where an HTTP response with an unknown \c Content-Encoding header would cause a crash
    - fixed a memory error with receiving HTTP chunked data with receive callbacks where the buffer object was reset with reference counts > 1
    - fixed a bug in the @ref Qore::FtpClient "FtpClient" class where socket errors would not cause the connection to be closed automatically and therefore further use of the object required a manual disconnect even though the object supports transparent auto-reconnection
    - fixed a bug where conversions from float to number would introduce inaccuracy in the arbitrary-precision number; ex: <code>737.38.toNumber() -> 737.3799999999999954525264911353588104248</code>
    - fixed a bug where @ref requires "%requires" would fail loading a user module inside a @ref try-module "%try-module" block
    - fixed a bug in @ref Qore::Program::importClass() where the import would fail if a namespace-justified class name was given and any element of the namespace path didn't already exist in the target whereas the same import would succeed if the namespace were omitted in the call
    - fixed bugs in @ref Qore::Program::importClass(), @ref Qore::Program::importFunction(), and @ref Qore::Program::importGlobalVariable() when namespace-justified arguments were given, in this case when namespaces were created in the target, the internal root namespace index was not updated so the imported objects could not be found with namespace-justified references until the root indexes were updated
    - fixed a bug in the @ref requires "%requires" directive where relative paths were not calculated from the script's directory but rather from the current working directory
    - fixed various bugs in path handling on Windows in the following areas:
      - @ref Qore::basename()
      - @ref Qore::get_script_dir()
      - @ref Qore::get_script_path()
      - @ref Qore::get_script_name()
      - @ref Qore::Dir
      - module importing and include file handling
    - fixed a bug in parsing constant value assignment expressions where such expressions could use or instantiate classes with uncommitted changes and therefore a crash could result
    - fixed a bug in user module initialization and destruction where call references were not accepted, contrary to the documentation and design goals
    - fixed a bug in @ref Qore::Socket::acceptSSL() and @ref Qore::Socket::connectSSL() where the timeout argument was not respected for SSL protocol negotation by implementing non-blocking I/O support for the internal SSL calls for upgrading the socket connection
    - fixed a memory leak in exception handling in the @ref Qore::FtpClient::put() method (thanks to nros)
    - fixed a memory error in string handling in the @ref Qore::FtpClient class's FTP response handling code
    - fixed a bug in aligning table data in the sqlutil example program
    - fixed a bug when loading modules by a path argument; if the module is already loaded, then do not throw an exception
    - adjusted the stack guard buffer for x86_64 from 20K -> 32K which solved some rare crashes related to stack exhaustion (ex: make check works consistently now on x86_64 Linux)
    - fixed a bug handling HTTP send callbacks that returned zero-length strings and binary objects which would cause invalid chunked data to be sent violating the HTTP protocol
    - fixed a bug in the @ref Qore::SQL::DatasourcePool::getServerVersion() "DatasourcePool::getServerVersion()" method where the connection to the server was not guaranteed to be in place before the call, in case of connection errors in the pool a crash could result
    - fixed a crash in @ref Qore::FileLineIterator::copy() when no \a eol attribute is set
    - fixed a bug importing invalid user modules with no module declaration
    - fixed bugs in @ref Qore::Socket::accept() and @ref Qore::Socket::acceptSSL() where the SSL configuration was not copied to the new @ref Qore::Socket
    - fixed some object encapsulation violation bugs where access to methods of a privately-inherited class was allowed from a subclass in certain situations
    - fixed inconsistent object encapsulation enforcement with method references; if a reference to a method is created inside the class, then when executed the call inherits the access rights at the time of creation
    - fixed inconsistent thread gating for code data structures in @ref Qore::Program "Program" containers that could have theoretically lead to crashes in @ref Qore::Program "Program" containers that parse code while threads are running
    - fixed a bug in @ref Qore::Program::importFunction() with function names with a namespace path
    - fixed a bug in closure calls when a closure is called from within a closure and referes to closure-bound locally variables in the internal closure call which would previously result in a crash
    - fixed a parse-time memory leak in call reference calls when the callable object is resolved from a class constant
    - fixed a bug in maintaining the conditional compilation status when parsing @ref include "%include" directives and @ref requires "%requires" directives with user modules
    - fixed an obscure bug when a thread terminates in a  @ref Qore::Program "Program" object after the Program container itself has already been deleted where the termination would hang while waiting for the Program's thread count to reach zero while the last thread doing the waiting also held the last thread reference
    - fixed a bug where incompatible class definitions were not verified at parse time which could cause a crash in debug builds and unpredictable behavior in non-debug builds
    - fixed a race condition in finalizing thread-local data in  @ref Qore::Program "Program" objects during Program destruction that could lead to a runtime crash
    - fixed a crash when user modules have recursive dependencies
    - fixed a bug with @ref push-parse-options "%push-parse-options" when used multiple times in the same file; now multiple appearances of this parse directive are ignored
    - fixed a bug initializing static class variables in the parse commit phase where a crash could result due to an error in managing parse commit dependencies
    - fixed @ref Qore::is_writable():
      - on Windows when used with a directory
      - on UNIX to return a value for the current permissions the program is running under
    - fixed a bug in @ref Qore::regex_extract() and in the @ref regex_extract_operator where the result buffer was not resized when it was too small, limiting regular expressions to nine subpatterns; the maximum has been raised to between 90 and 100 before an exception is raised (since the subpattern buffer is allocated on the stack, we need to enforce a limit)
    - fixed a bug with the @ref cast "cast<>() operator where compatible classes were not recognized at runtime that would otherwise be recognized correctly without the cast
    - fixed the return type in @ref Qore::getcwd() to @ref string_or_nothing_type "*string"
    - fixed a bug in the @ref return "return statement" where the runtime return type was used at parse time which did not work when parsing embedded code
    - fixed a bug validating return values in method evaluation that could lead to a qore crash
    - fixed a bug in the @ref requires "%requires" directive when applied to builtin features where code to manage user module dependencies was inappropriately applied
    - fixed a bug nesting 3 levels or more of parse conditionals (@ref ifdef "%ifdef" and @ref ifndef "%ifndef") where the conditional parse state could be lost (and an assertion was made in debug mode)
    - fixed a bug where ==, >, and < operators applied type precedence incorrectly when applying optimizations at parse time in relation to arbitrary-precision numeric values
    - fixed a static memory leak in the parser handling out of line method declarations
    - fixed a bug in handling socket disconnection errors in SSL operations where the SSL helper object was deleted and then used causing a crash
    - fixed a bug where @ref deprecated and @ref return-value-ignored warnings were reported at the incorrect source location
    - fixed a bug in @ref Qore::set_thread_init() where thread initialization did not occur when foreign threads attached to a @ref Qore::Program object with thread initialization set
    - fixed a bug in call references and objects by replacing string references to the containing Program object with weak references which solved a recursive reference / memory leak issue
    - fixed a memory leak when a thread init call reference was used with @ref Qore::Program objects
    - fixed bugs in Qore SSL socket handling when the remote connection is disconnected while performing an SSL upgrade (client or server) that could cause a crash
    - fixed a bug where the sending an invalid HTTP header to the @ref Qore::Socket::sendHTTPResponse() method could cause a crash
    - fixed bugs in @ref Qore::system() "system()":
      - the shell was not being used to execute commands with commands where shell meta-characters were not found with a manual search which caused such commands to fail; additionally \c & (ampersand) characters were not recognized as shell meta-characters
      - fixed problems with signal handling in child processes on UNIXes: @ref Qore::system() "system()" now always performs a \c fork(2), enables all signals, and calls <tt>execl("/bin/sh", "sh", "-c", </tt><i>command</i><tt>, 0)</tt> in the child process (on UNIX systems; on Windows, system(3) is used directly as before)
    - fixed a race condition in the @ref Qore::SQL::DatasourcePool "DatasourcePool" class when opening new datasources after a connection error in the first datasource which could cause a crash.  Now the first datasource is no longer a "special" datasource used for configuration information; configuration information is contained in a separate object which serves as an internal Datasource factory
    - fixed a problem where \c SIGCHLD was blocked by default which caused deadlocks when spawning child processes that in turn waited on grandchild processes - now %Qore no longer blocks \c SIGCHLD on UNIX platforms
    - fixed a bug in BinaryNode::clear() where the internal pointer was freed but not set to 0 leading to a subsequent crash when the object is destroyed; affected HTTPClient chunked reads of binary data when used with a callback
    - fixed a bug where the runtime exception location could be reported in the wrong location
    - fixed a bug where the bzip2 library can request a buffer size that could not be handled by the bzip2 library which is not handled by qore and causes a crash while decompressing certain input
    - fixed a bug handling closure-bound local variables when closures are created in the background operator expression that caused a core dump
    - fixed the precedence of the @ref assignment_operator "assignment operator (=)"; now the precedence of this operator is the same as the other assignment operators (@ref plus_equals_operator "+=", @ref minus_equals_operator "-=", @ref multiply_equals_operator "*=", and @ref divide_equals_operator "/=", etc); this does not break any code, but does align %Qore with other programming languages (such as C, among others) and allows for expressions such as @code{.py} a = b += 2@endcode to be correctly parsed
    - fixed a parse-time bug in the @ref trim "trim operator" where the operator's return type was incorrectly returned as @ref int_type "int" instead of the type of the lvalue
    - fixed a bug initializing object members with a closure that refers to \a self
    - fixed bugs in the documentation and return types of:
      - @ref Qore::ReadOnlyFile::readBinaryFile()
      - @ref Qore::ReadOnlyFile::readTextFile()
    - fixed a bug in @ref Qore::GetOpt::parse(softlist<auto>), @ref Qore::GetOpt::parse2(softlist<auto>), and @ref Qore::GetOpt::parse3(softlist<auto>) where call-by-value and copy-on-write semantics were not enforced and a shared list argument could be modified
    - fixed a bug in zoneinfo file parsing where invalid bands with no UTC offset changes against the previous band could cause invalid date/time values to be displayed by Qore for dates on the invalid transition
    - fixed a bug where imported global variables (@ref Qore::Program::importGlobalVariable()) were added to the pending global variable list and therefore were removed if a parse exception occurred, hwoever the namespace indexes remained, which could lead to unexpected problems at runtime including a crash.  Additionally the pending global variable list was not checked which could lead to a memory leak if the a single global variable name is pending, imported, and then committed to the @ref Qore::Program "Program" object.
    - fixed memory errors managing program feature lists in the CharPtrList class by copying string memory instead of using sometimes temporary values in the list
    - fixed minor bugs with directive parsing, mostly related to error reporting
    - fixed bugs in relative date arithmetic where operands were swapped with the @ref minus_operator "- operator" if the first operand was a @ref relative_dates "relative date/time value", additionally an operation with the @ref minus_operator "- operator" where the first operand is a @ref relative_dates "relative date" and the second operand is a @ref absolute_dates "absolute date" is now calculated using the @ref absolute_dates "absolute date"'s epoch offset (offset in seconds and microseconds from \c 1970-01-01Z), and a @ref relative_dates "relative date/time value" is produced
    - fixed a bug normalizing the result of date arithmetic between hour and minute components of @ref relative_dates "relative date/time value"
    - fixed a bug where time components of absolute date/time values before the UNIX epoch were returned with invalid values
    - fixed a bug where the @ref exec-class "%exec-class" directive did not check for classes with unimplemented abstract variants
    - fixed a bug where the @ref push "push" and @ref unshift "unshift" operators applied to a variable declared as softlist did not use the default value
    - fixed a bug where calls to @ref Qore::HTTPClient::setConnectTimeout() had no effect (<a href="https://github.com/qorelanguage/qore/issues/323">issue 323</a>)
    - fixed several bugs with logical comparison operators and arbitrary-precision numeric values (<a href="https://github.com/qorelanguage/qore/issues/330">issue 330</a>)
    - fixed a bug where @ref Qore::HashListIterator (and therefore @ref <hash>::contextIterator()) would not iterate a simple hash with non-list values once but would instead silently ignore the hash (<a href="https://github.com/qorelanguage/qore/issues/336">issue 336</a>)
    - fixed a bug where a warning was not always issued when square brackets were used on unsuitable types (<a href="https://github.com/qorelanguage/qore/issues/184">issue 184</a>), internally ported the square bracket operator to the C++ QoreOperatorNode hierarchy
    - fixed a bug handling return type information for method and pseudo-method calls; uninitialized memory could be used which could cause a runtime crash (<a href="https://github.com/qorelanguage/qore/issues/364">issue 364</a>)
    - corrected the name of the @ref modulo_operator "modulo operator" (was incorrectly referred to as the "modula" operator earlier: <a href="">issue 389</a>)
    - fixed a bug handling identifiers in parentheses used to dereference hashes or objects; the identifer is not resolved properly whereas previoulsy it was incorrectly interpreted as a string literal (<a href="https://github.com/qorelanguage/qore/issues/416">issue 416</a>)
    - fixed a bug with handling local variables in const initializers (<a href="https://github.com/qorelanguage/qore/issues/421">issue 421</a>)
    - fixed a bug where \c select(2) was called after \c EINTR without reinitializing the descriptor array argument (<a href="https://github.com/qorelanguage/qore/issues/435">issue 435</a>)
    - fixed a crashing bug on all platforms where select(2) was being called with socket descriptor values > \c FD_SETSIZE (<a href="https://github.com/qorelanguage/qore/issues/436">issue 436</a>)
    - fixed inconsistencies @ref reldate_comparisons "comparing relative date/time values" (<a href="https://github.com/qorelanguage/qore/issues/437">issue 437</a>)
    - fixed a bug where @ref on_exit and @ref on_error statements were not being executed if an exception was raised in an earlier-executed @ref on_exit, @ref on_error, or @ref on_success statement (<a href="https://github.com/qorelanguage/qore/issues/380">issue 380</a>)
    - fixed a bug where @ref Qore::HTTPClient::get() and @ref Qore::HTTPClient::post() would try to retrieve a message body even if <tt>Content-Length: 0</tt> was returned (or if no \c Content-Length header was returned at all) which would result in a deadlock until the server would close the connection (<a href="https://github.com/qorelanguage/qore/issues/434">issue 434</a>)
    - fixed a bug where regular expression substitution would go into an infinite loop when used with an empty pattern and the global flag (@ref Qore::RE_Global, <a href="https://github.com/qorelanguage/qore/issues/329">issue 329</a>)
    - fixed a bug with connection handling in the @ref Qore::SQL::SQLStatement "SQLStatement" class; an exception is now thrown if a @ref Qore::SQL::SQLStatement "SQLStatement" object tries to execute its prepared SQL on a connection other than the original connection used to prepare the statement (<a href="https://github.com/qorelanguage/qore/issues/465">issue 465</a>)
    - fixed a bug where @ref Qore::is_executable() would return NOTHING instead of False (as per documentation) when called with non-existent path as it's parameter (<a href="https://github.com/qorelanguage/qore/issues/470">issue 470</a>)
    - fixed precedence of logical and bitwise \ref operators (<a href="https://github.com/qorelanguage/qore/issues/481">issue 481</a>)
    - fixed a bug where nested lists were not parsed correctly in some cases (<a href="https://github.com/qorelanguage/qore/issues/320">issue 320</a>)
    - fixed a bug where the type of catch parameter was ignored (<a href="https://github.com/qorelanguage/qore/issues/28">issue 28</a>)
    - fixed a bug where namespace hierarchies were not indexed during parse time when added to already-committed namespaces which lead to symbol resolution errors for valid code (<a href="https://github.com/qorelanguage/qore/issues/538">issue 538</a>)
    - fixed a bug where a @ref Qore::Socket "Socket" operation attempted in another thread while a callback operation on the same socket was in progress would result in a confusing error message (<a href="https://github.com/qorelanguage/qore/issues/530">issue 530</a>)
    - fixed a bug where local variable declarations in class member initialization expressions caused a crash (<a href="https://github.com/qorelanguage/qore/issues/574">issue 574</a>)
    - fixed a bug where HTTP data in HTTP socket events was modified even though it was shared which caused data consistency problems and crashes in the worst case (<a href="https://github.com/qorelanguage/qore/issues/576">issue 576</a>)
    - fixed a bug where the `+=` operator handled NOTHING values incorrectly (<a href="https://github.com/qorelanguage/qore/issues/582">issue 582</a>)
    - fixed a bug where a non-numeric define specified on the command line could cause a crash (<a href="https://github.com/qorelanguage/qore/issues/583">issue 583</a>)
    - fixed a bug where the @ref Qore::SQL::SQLStatement::describe() method would not grab the transation lock even when statements were implicitly executed (<a href="https://github.com/qorelanguage/qore/issues/591">issue 591</a>)
    - fixed the order of initialization of class members (<a href="https://github.com/qorelanguage/qore/issues/42">issue 42</a>)
    - fixed a bug in @ref Qore::TimeZone::date(string) where the date returned was in the current contextual time zone and not that of the object (<a href="https://github.com/qorelanguage/qore/issues/584">issue 584</a>)
    - fixed a bug parsing windows paths in URLs with @ref Qore::parse_url() (<a href="https://github.com/qorelanguage/qore/issues/618">issue 618</a>)
    - fixed a bug in @ref Qore::TimeZone::constructor(string) on Windows when used with an absolute path (<a href="https://github.com/qorelanguage/qore/issues/626">issue 626</a>)
    - fixed an I/O-handling bug in the @ref Qore::ReadOnlyFile and @ref Qore::File classes where I/O errors in read operations were silently ignored (<a href="https://github.com/qorelanguage/qore/issues/627">issue 627</a>)
    - fixed bugs in @ref Qore::ReadOnlyFile::readTextFile() and @ref Qore::ReadOnlyFile::readBinaryFile() would return @ref nothing instead of an empty object when reading empty files; now empty objects are returned in these cases (<a href="https://github.com/qorelanguage/qore/issues/508">issue 508</a>)
    - fixed a bug in *printf() outputs on Windows with scientific notation with floating-point values (<a href="https://github.com/qorelanguage/qore/issues/631">issue 621</a>)
    - fixed a bug where the precision of numbers during arithmetic operations was not adjusted correctly (<a href="https://github.com/qorelanguage/qore/issues/630">issue 630</a>, <a href="https://github.com/qorelanguage/qore/issues/908">issue 908</a>)
    - fixed a bug where the type of subtraction of two numbers was inferred as NOTHING during parsing (<a href="https://github.com/qorelanguage/qore/issues/636">issue 636</a>)
    - fixed a bug on Windows with @ref Qore::Dir::create() (<a href="https://github.com/qorelanguage/qore/issues/643">issue 643</a>)
    - fixed a bug where CRLF line endings were not handled correctly by the %exec-class parse directive (<a href="https://github.com/qorelanguage/qore/issues/653">issue 653</a>)
    - fixed a bug on Windows where @ref Qore::glob() would return paths beginning with \c "." by default (<a href="https://github.com/qorelanguage/qore/issues/660">issue 660</a>)
    - fixed a bug on Windows where @ref Qore::glob() would fail on \c "\*" or \c xxx "/<i></i>*" (<a href="https://github.com/qorelanguage/qore/issues/664">issue 664</a>)
    - fixed a bug on Windows where @ref Qore::glob() would not return paths in sorted order by default (<a href="https://github.com/qorelanguage/qore/issues/665">issue 665</a>)
    - fixed a bug on Windows where the @ref Qore::Dir class would incorrectly normalize UNC paths by stripping the leading backslash (<a href="https://github.com/qorelanguage/qore/issues/666">issue 666</a>)
    - fixed a bug where the @ref int_type "int" type restriction would accept any data type at runtime instead of throwing a \c RUNTIME-TYPE-ERROR exception (<a href="https://github.com/qorelanguage/qore/issues/683">issue 683</a>)
    - fixed bugs reporting the current method context with certain @ref Qore::HTTPClient "HTTPClient" methods that would report the @ref Qore::Socket "Socket" class instead (<a href="https://github.com/qorelanguage/qore/issues/689">issue 689</a>)
    - fixed a bug handling aborted HTTP chunked transfers; now any data available for reading on a socket when a chunked transfer is aborted is read instead of having a \c SOCKET-SEND-ERROR thrown when the remote end closes the socket during the transfer (<a href="https://github.com/qorelanguage/qore/issues/691">issue 691</a>)
    - fixed a bug with socket handling where SSL send failures did not cause an exception to be thrown in all cases (<a href="https://github.com/qorelanguage/qore/issues/732">issue 732</a>)
    - fixed a bug on Windows where @ref Qore::glob() returned files matched without the leading path component (<a href="https://github.com/qorelanguage/qore/issues/761">issue 761</a>)
    - fixed a bug with socket connection refused handling on Windows where connections were waiting until the timeout instead of returning an error immediately (<a href="https://github.com/qorelanguage/qore/issues/763">issue 763</a>)
    - fixed a bug where it was not possible to escape an escape character before a \c '$' character in a regular expression substitution target string (<a href="https://github.com/qorelanguage/qore/issues/777">issue 777</a>)
    - fixed a bug where object member references were treated as expressions returning a constant value which could cause a crash when used in an expression used to initialize a constant value at parse time (<a href="https://github.com/qorelanguage/qore/issues/817">issue 817</a>)
    - fixed a bug parsing IPv6 localhost (\c "::") with @ref Qore::parse_url() (<a href="https://github.com/qorelanguage/qore/issues/822">issue 822</a>)
    - fixed a bug in Windows timezone handling caused by erroneous region names (<a href="https://github.com/qorelanguage/qore/issues/824">issue 824</a>)
    - fixed an internal memory-handling bug that caused a crash when cleaning up the qore library on FreeBSD with clang++ and possibly other platforms (<a href="https://github.com/qorelanguage/qore/issues/839">issue 839</a>)
    - fixed a bug where \c CALL-WITH-TYPE-ERROR exceptions were thrown based on the parse options in the caller instead of in the target when calling across a @ref Qore::Program "Program" barrier (<a href="https://github.com/qorelanguage/qore/issues/841">issue 841</a>)
    - fixed a bug where @ref Qore::is_writable() and @ref Qore::is_readable() could return an incorrect value in some cases (<a href="https://github.com/qorelanguage/qore/issues/852">issue 852</a>)
    - fixed a bug where @ref Qore::format_number() would return an invalid string when the number of decimals to be returned was 0 (<a href="https://github.com/qorelanguage/qore/issues/851">issue 851</a>)
    - fixed a bug where the @ref delete "delete" and @ref remove "remove" operators would incorrectly create hash keys when attempting to delete inside complex hash structures with non-existent keys (<a href="https://github.com/qorelanguage/qore/issues/855">issue 855</a>)
    - fixed a bug where duplicate global variable declarations caused a crash (<a href="https://github.com/qorelanguage/qore/issues/891">issue 891</a>)
    - fixed a memory leak in @ref Qore::SQL::DatasourcePool "DatasourcePool" initialization when the minimum connections cannot be established (<a href="https://github.com/qorelanguage/qore/issues/994">issue 994</a>)
    - fixed handling of NaN values in logical operators (<a href="https://github.com/qorelanguage/qore/issues/915">issue 915</a>)
    - fixed sort_descending_stable so that it keeps (instead of reversing) the original order of items that compare equal (<a href="https://github.com/qorelanguage/qore/issues/940">issue 940</a>)
    - fixed a bug in \c copy() method argument parsing; compatible type declarations were not accepted (<a href="https://github.com/qorelanguage/qore/issues/946">issue 946</a>)

    @section qore_0811 Qore 0.8.11

    @par Release Summary
    Minor bugfix release for UNIX, major bugfixes for Windows

    @subsection qore_0811_new_features New Features in Qore
    - added the @ref Qore::AFMap and @ref Qore::AFStrMap constants
    - <a href="../../modules/WebUtil/html/index.html">WebUtil</a> updates:
      - added logic to the default file serving code to determine if the file is a binary or text file from the MIME type
    - @ref Qore::HTTPClient::sendWithSendCallback() "HTTPClient::sendWithSendCallback()" and @ref Qore::HTTPClient::sendWithSendCallback() "HTTPClient::sendWithSendCallback()" updated such that if a response is received while the chunked send operation is still in progress, an error is assumed, the send operation is aborted, and the response header is read immediately

    @subsection qore_0811_bug_fixes Bug Fixes in Qore
    - Windows fixes:
      - fixed TimeZone copying to use the standard name instead of the display name so that the info can be found in the registry
      - <a href="../../modules/Util/html/index.html">Util</a> module fixes:
        - fixed get_random_string() on Windows
        - fixed absolute_path_windows()
      - <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module fixes:
        - when binding a wildcard address with @ref Qore::AF_UNSPEC "AF_UNSPEC" on Windows with HttpServer::addListeners()
          and both IPv6 and IPv4 addresses are returned, bind both addresses since Windows doesn't direct the IPv4 requests to the wildcard-bound IPv6 listener
      - fixed file reading by always opening in binary mode
      - added support for the WSAECONNABORTED socket error
      - replaced Mime::MultiPartMessage::getRandomString() with Util::get_random_string() to make it work on Windows
    - fixed a bug in the DBI layer where calling @ref Qore::SQL::SQLStatement::describe() "SQLStatement::describe()" would crash when called with an older module that did not implement this method
    - other fixes in the <a href="../../modules/Util/html/index.html">Util</a> module (in addition to the Windows-specific fixes above):
      - fixed \c parse_to_qore_value() with hashes with a comma in the first key name
      - read from /dev/urandom instead of /dev/random since reads from the latter can block for long periods to fill the entropy pool
    - do not start signal thread after a fork() if signal handling is enabled, pthread_create() is not async-signal safe (on FreeBSD at least this reliably causes segfaults)

    @section qore_0810 Qore 0.8.10

    @par Release Summary
    Major release with many many bugfixes and new features such as much improved HTTP and REST support (ex: chunked transfer support + new
    client and server classes for REST support for chunked transfers and data streaming), improved DB support
    (ex: new <a href="../../modules/Schema/html/index.html">Schema</a> module, <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> improvements),
    and much more.

    @subsection qore_0810_new_features New Features in Qore
    - better HTTP support; support for chunked sends and receives for streaming data over HTTP and other improvements:
      - @ref Qore::HTTPClient::sendWithSendCallback() "HTTPClient::sendWithSendCallback()"
      - @ref Qore::HTTPClient::sendWithRecvCallback() "HTTPClient::sendWithRecvCallback()"
      - @ref Qore::HTTPClient::sendWithCallbacks() "HTTPClient::sendWithCallbacks()"
      - @ref Qore::HTTPClient::setPersistent() "HTTPClient::setPersistent()"
      - @ref Qore::Socket::readHTTPChunkedBodyBinaryWithCallback() "Socket::readHTTPChunkedBodyBinaryWithCallback()"
      - @ref Qore::Socket::readHTTPChunkedBodyWithCallback() "Socket::readHTTPChunkedBodyWithCallback()"
      - @ref Qore::Socket::sendHTTPMessageWithCallback() "Socket::sendHTTPMessageWithCallback()"
      - @ref Qore::Socket::sendHTTPResponseWithCallback() "Socket::sendHTTPResponseWithCallback()"
      - @ref Qore::Socket::pendingHttpChunkedBody() "Socket::pendingHttpChunkedBody()"
    - added a minimum body size threshold for compression to <a href="../../modules/HttpServer/html/index.html">HttpServer</a>
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
      - configurable content encoding for send request message bodies is now supported (ie optional compression)
    - new user modules:
      - <a href="../../modules/Schema/html/index.html">Schema</a>: for DB-independent schema management
    - new public C++ socket performance instrumentation API
    - new functions:
      - @ref Qore::close_all_fd()
    - new constants:
      - @ref Qore::Err::ESRCH "ESRCH": search error
    - getModuleHash() and getModuleList() no longer return the \c "filename" key when run in a @ref Qore::Program "Program" context with @ref Qore::PO_NO_EXTERNAL_INFO set
    - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> updates:
      - added insert operator support; for example, for inserting with values from sequences
      - added new upsert constant maps
      - added static SqlUtil::AbstractSqlUtilBase::getDatasourceDesc() method
      - added new Table::insertFromSelect*() variants taking Table arguments
      - added SqlUtil::Table::checkExistence() method
      - added support for the \c "forupdate" select option
    - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a> updates:
      - fixed selects with "limit" but no "offset"
      - convert date/time values to timestamps with microseconds resolution instead of dates with second resolution when dynamically inserting values as strings in SQL (binding by value not affected)
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module updates:
      - added the \c "write-headers" option to \c AbstractCsvWriter and subclasses to enable headers to be suppressed
      - added the \c "optimal-quotes" option to \c AbstractCsvWriter and subclasses to enable more efficient csv output (now the default)
    - added @ref Qore::SQL::AbstractDatasource::currentThreadInTransaction() "AbstractDatasource::currentThreadInTransaction()" which is reimplemented as @ref Qore::SQL::Datasource::currentThreadInTransaction() "Datasource::currentThreadInTransaction()" and @ref Qore::SQL::DatasourcePool::currentThreadInTransaction() "DatasourcePool::currentThreadInTransaction()"; the base class method throws an exception when called; it was not added as an abstract method in order to not break existing subclasses of AbstractDatasource
    - enhanced module license support
      - module license strings may now be specified in binary and user modules
      - @ref Qore::getModuleHash() and @ref Qore::getModuleList() now report license information for each module

    @subsection qore_0810_bug_fixes Bug Fixes in Qore
    - fixed an issue with class constant parse initialization where invalid recursive class constant definition parse exceptions could be raised and in some cases also crashes could result
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module: fixed missing username and missing password errors
    - fixed a bug where a qore switch statement with no case conditions and only a default label would erroneously never have it's default code executed
    - fixed a reference leak related to exception handling with invalid arguments with @ref Qore::Socket::setWarningQueue() and @ref Qore::HTTPClient::setWarningQueue()
    - fixed several bugs where the parse location could be reported incorrectly for type errors regarding in-object variable references
    - fixed a bug where an error could result with @ref Qore::Thread::Condition::wait() "Condition::wait()" with timeouts > 2147483648ms
    - fixed bugs handling "bigint" and "double precision" column types with schema alignments with the <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> module
    - fixed a bug handling parse initialization of constant values requiring run-time evaluation after other parse exceptions have been raised that could cause a parse-time crash
    - fixed a bug where qore could crash on exit with certain openssl versions by calling ERR_remove_state(0) in the main thread's cleanup function
    - fixed a bug where qore could crash on exit due to user module destruction not taking into consideration user module dependencies
    - fixed a bug in schema management in <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> where excessively verbose column aliases were used that caused errors when automatically updating columns with existing rows and new default values and non-null contraints with PostgreSQL databases
    - fixed a bug where a call reference to an abstract object method returned from an abstract class could be executed even though it must have been instantiated by a concrete subclass
    - fixed a bug where a valid call reference to a private object method was created within the class, then in some cases an object protection exception was raised when the call reference was called outside the class
    - fixed a bug in the <a href="../../modules/RestClient/html/index.html">RestClient</a> module when the yaml binary module is not available
    - fixed programmatic select queries with "limit" but no "offset" in <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a>
    - fixed a bug in @ref Qore::Program::importFunction() where only the committed function list was checked when importing functions with a specific target namespace path
    - fixed a bug in @ref Qore::Program::importClass() where only the committed class list was checked when importing functions with a specific target namespace path
    - fixed a bug when parsing subnamespaces into a parent namespace where the subnamespace already exists (either in the committed list or in the pending list)
    - fixed a memory and reference leak caused by recursive references when closures encapsulating an object's scope are assigned to or accessible from members of the object by making references to the object from within a closure encapsulating the object's state weak references instead of strong references
    - fixed schema information classes when the "string-numbers" driver option is enabled
    - fixed crashing bugs in @ref Qore::get_thread_data() in certain use cases
    - fixed a bug in <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> where select and row iterator operations could fail with certain select hash arguments without a \c "columns" entry but where column names were otherwise required
    - fixed a bug in HTTP response parsing where case-signficant comparisons where being made with certain critical header values
    - fixed a bug handling thread cancellation with the @ref Qore::Thread::ThreadPool "ThreadPool" class
    - fixed several race conditions and potential deadlocks in @ref Qore::Thread::ThreadPool "ThreadPool" destruction with active threads in the pool

    @section qore_089 Qore 0.8.9

    @par Release Summary
    Major release with many new features and also many bugfixes.

    @subsection qore_089_new_features New Features in Qore
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module updates:
      - new classes:
        - \c CsvAbstractIterator: base abstract iterator class for iterating line-based CSV data
        - \c CsvDataIterator: iterator class allowing for CSV string data to be processed line by line on a record basis
        - \c AbstractCsvWriter: a base class for new CSV writer implementations
        - \c CsvFileWriter: CSV file writer class
        - \c CsvStringWriter: CSV in memory writer class
      - implemented support for allowing subclasses of CsvFileIterator to implement support for other custom types
      - no need to set \c "headers" in the constructor if \c "fields" are set; headers are assumed to be the field labels in the same order
    - added the @ref Qore::encode_url() function with <a href="http://tools.ietf.org/html/rfc3986#section-2.1">RFC 3986 section 2.1</a> compliance
    - @ref Qore::decode_url() function updated to decode UTF-8 encoded characters according to <a href="http://tools.ietf.org/html/rfc3986#section-2.1">RFC 3986 section 2.1</a>
    - added get_byte_size() and get_marketing_byte_size() to the <a href="../../modules/Util/html/index.html">Util</a> module
    - the error message now includes the module path used for the search when a module cannot be found in the module path
    - @ref Qore::SQL::DatasourcePool "DatasourcePool" enhancements:
      - new method: @ref Qore::SQL::DatasourcePool::clearWarningCallback() "DatasourcePool::clearWarningCallback()"
      - new method: @ref Qore::SQL::DatasourcePool::setWarningCallback() "DatasourcePool::setWarningCallback()"
      - new method: @ref Qore::SQL::DatasourcePool::getUsageInfo() "DatasourcePool::getUsageInfo()"
      - new method: @ref Qore::SQL::DatasourcePool::setErrorTimeout() "DatasourcePool::setErrorTimeout()"
      - new method: @ref Qore::SQL::DatasourcePool::getErrorTimeout() "DatasourcePool::getErrorTimeout()"
      - new method: @ref Qore::SQL::DatasourcePool::setEventQueue() "DatasourcePool::setEventQueue()"
      - new method: @ref Qore::SQL::DatasourcePool::clearEventQueue() "DatasourcePool::clearEventQueue()"
      - the new methods allow for monitoring @ref Qore::SQL::DatasourcePool "DatasourcePool" objects for pool contention issues (in case the pool needs to be resized), for throwing an exception if a connection is not acquired within the error timeout period (new default: 2 minutes), and for DBI drivers to raise warnings on an event queue that can be monitored in a separate thread
      - additionally connection acquisition statistics are tracked and returned in @ref Qore::SQL::DatasourcePool::getUsageInfo() "DatasourcePool::getUsageInfo()" (total requests, hits, maximum wait time)
    - @ref Qore::SQL::Datasource "Datasource" enhancements:
      - new method: @ref Qore::SQL::Datasource::setEventQueue() "Datasource::setEventQueue()"
      - new method: @ref Qore::SQL::Datasource::clearEventQueue() "Datasource::clearEventQueue()"
      - the new methods allow for DBI drivers to raise warnings on an event queue that can be monitored in a separate thread
    - @ref Qore::Socket "Socket" enhancements:
      - new method: @ref Qore::Socket::setWarningQueue() "Socket::setWarningQueue()"
      - new method: @ref Qore::Socket::clearWarningQueue() "Socket::clearWarningQueue()"
      - new method: @ref Qore::Socket::getUsageInfo() "Socket::getUsageInfo()"
      - new method: @ref Qore::Socket::clearStats() "Socket::clearStats()"
    - @ref Qore::FtpClient "FtpClient" enhancements:
      - new method: @ref Qore::FtpClient::setWarningQueue() "FtpClient::setWarningQueue()"
      - new method: @ref Qore::FtpClient::clearWarningQueue() "FtpClient::clearWarningQueue()"
      - new method: @ref Qore::FtpClient::getUsageInfo() "FtpClient::getUsageInfo()"
      - new method: @ref Qore::FtpClient::clearStats() "FtpClient::clearStats()"
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module updates:
      - optimized connection and login code; HELO/EHLO and authorization are performed when connecting only, not before each email
      - added support for socket performance instrumentation and warning events
    - <a href="../../modules/Pop3Client/html/index.html">Pop3Client</a> module updates:
      - added support for socket performance instrumentation and warning events
    - <a href="../../modules/TelnetClient/html/index.html">TelnetClient</a> module updates:
      - added support for socket performance instrumentation and warning events
    - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a> module updates:
      - added support for socket performance instrumentation and warning events
    - <a href="../../modules/RestClient/html/index.html">RestClient</a> module updates:
      - use the new @ref Qore::encode_url() function to encode URL paths to ensure that valid requests are sent when spaces, percent characters, and non-ascii characters are used in the URL path
      - set the character encoding in the \c Content-Type request header when sending strings
      - set the \c Accept header correctly in requests (previously only indicated yaml (\c "text/x-yaml") as an acceptible response encoding)
    - <a href="../../modules/RestHandler/html/index.html">RestHandler</a> module updates:
      - added support for the \c OPTIONS method
      - return a 400 \c "Bad Request" error if an unsupported HTTP method is used in a REST Call
    - added new \c UpsertInsertOnly upsert strategy to <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>
    - new pseudo-methods:
      - @ref <value>::sizep(): returns @ref True "True" if the type can return a non-zero size (@ref True "True" for containers including @ref binary "binary objects" and @ref string "strings", @ref False "False" for everything else)
      - @ref <string>::getLine(): finds lines in a string buffer
    - <a href="../../modules/Mime/html/index.html">Mime</a> module updates:
      - added mime type for WSDL files (\c "application/wsdl+xml")
      - added mappings for \c "xls" and \c "xlst" extensions to MimeTypeXml
    - added new modules:
      - <a href="../../modules/Mapper/html/index.html">Mapper</a>: data mapping module
      - <a href="../../modules/TableMapper/html/index.html">TableMapper</a>: data mapping module using <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> and <a href="../../modules/Mapper/html/index.html">Mapper</a> to map to an SQL table target
      - <a href="../../modules/FreetdsSqlUtil/html/index.html">FreetdsSqlUtil</a>: provides back-end support for MS SQL Server and Sybase databases with <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> using the <a href="https://github.com/qorelanguage/module-sybase">freetds module</a>
    - the @ref include "%include" parse directive now supports environment variable substitution at the beginning of the file path

    @subsection qore_089_bug_fixes Bug Fixes in Qore
    - fixed a crashing bug handling access to members as default values of normal method arguments
      (<a href="https://github.com/qorelanguage/qore/issues/3240">issue 3240</a>)
    - fixed a bug in the <a href="../../modules/RestClient/html/index.html">RestClient</a> module where the
      \c "response-code" key of the info output hash could be missing in some cases
      (<a href="https://github.com/qorelanguage/qore/issues/3237">issue 3237</a>)
    - fixed bugs handling object-local access in member initialization
      (<a href="https://github.com/qorelanguage/qore/issues/3193">issue 3193</a>)
    - fixed a crashing bug when HTTP messages with duplicate \c Connection, \c Content-Encoding, \c Transfer-Encoding,
      \c Location, or \c Content-Type headers are received
    - fixed a bug parsing octal character constants in the lexer when octal digits followed the octal constant (ex:
      \c "\0441" where the \c "1" would cause an error)
    - allow escaping "$" character in regular expression substitution target strings, previously it was impossible to
      output a literal "$" + a digit, since this would be interpreted as a numbered input pattern expression
    - fixed a bug in the @ref Qore::HTTPClient::getURL() "HTTPClient::getURL()" and
      @ref Qore::HTTPClient::getProxyURL() "HTTPClient::getProxyURL()" methods where the URL's path was not given with
      a leading "/" character
    - <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module fixes:
      - fixed \c "date" field handling with empty input (now maps to 1970-01-01)
      - fixed CsvDataIterator::next() when header_lines > 0 and working with empty input data
    - added support for compiling on OSX Mavericks
    - fixed an infinitely recursive call in Table::del() in <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>
    - fixed a bug in v*printf() where \c '%%' was not handled correctly in all cases
    - fixed bugs in @ref Qore::microseconds() "microseconds" and @ref Qore::milliseconds() "milliseconds()" with large
      arguments
    - fixed a bug where a call to a call reference to a static method across a program boundary with local variables
      as arguments would cause a crash due to improper setting of the program context before the arguments are
      evaluated
    - fixed a bug in @ref Qore::SQL::Datasource::copy() "Datasource::copy()" method where implicitly-set options were
      not carried over into the new object
    - fixed a bug in the @ref Qore::SQL::DatasourcePool "DatasourcePool" class where implicitly-opened connections
      would not be guaranteed to have the same server time zone setting as the initial connections (for example, could
      cause problems with server timezone settings if running in a program context with a different local time zone
      attribute)
    - fixed bugs in <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> generating "create table" and
      "align table" SQL with DBs where unique indexes automatically create unique constraints (ex: MySQL)
    - fixed a bug in lchown() where chown() was used interally instead of lchown()
    - fixed a bug in <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a> retrieving sequence values
      with Database::getNextSequenceValue()
    - fixed an off-by-one memory bug in @ref Qore::date(string, string) parsing a 4-digit date mask
    - fixed memory leaks in class member and class static variable management
    - fixed memory leaks when an entire class has to be rolled back due to parse errors and the class has pending
      static variables
    - fixed memory leaks in constant handling with values containing call references
    - fixed a memory leak in constant destruction with parse rollbacks when the constant value was NULL
    - fixed an error in the rounding heuristic for arbitrary-precision numeric values that could produce invalid
      results (ex: 34.9n * 100 = 34902n)
    - enforce @ref Qore::PO_NO_FILESYSTEM "PO_NO_FILESYSTEM" with the @ref include "%include" directive
    - fixed a bug managing object private data in complex inheritance cases where the same class may be inherited with
      virtual private data and also real private data
    - fixed a bug in socket timeout handling with select() errors
    - fixed a memory leak in handling abstract methods when multiple abstract methods with the same name but different
      signatures were declared in a class

    @section qore_088 Qore 0.8.8

    @par Release Summary
    Major new features and bug fixes with a particular focus on enhanced HTTP capabilities and enhanced database processing

    @subsection qore_088_compatibility Changes That Can Affect Backwards-Compatibility
    - Fixed method resolution order; it's now possible to call pseudo-methods directly on classes that implement @ref methodGate_methods "methodGate() methods"
    - Added the following abstract methods to @ref Qore::SQL::AbstractDatasource "AbstractDatasource":
      - @ref Qore::SQL::AbstractDatasource::getConfigHash() "AbstractDatasource::getConfigHash()"
      - @ref Qore::SQL::AbstractDatasource::getConfigString() "AbstractDatasource::getConfigString()"
    - "hard" string comparisons now perform encoding conversions if necessary (however as usual different data types cause the comparison to fail)

    @subsection qore_088_new_features New Features in Qore
    - new @ref user_modules "user modules" delivered with %Qore:
      - <a href="../../modules/RestClient/html/index.html">RestClient</a>: Provides a simple API for communicating with HTTP servers implementing <a href="http://en.wikipedia.org/wiki/Representational_state_transfer">REST</a> services
      - <a href="../../modules/RestHandler/html/index.html">RestHandler</a>: Provides an easy to use interface to the Qore <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module for implementing server-side <a href="http://en.wikipedia.org/wiki/Representational_state_transfer">REST</a> services
      - <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a>: Provides a high-level DB-independent API for working with database objects
        - <a href="../../modules/MysqlSqlUtil/html/index.html">MysqlSqlUtil</a>: Provides a high-level DB-independent API for working with MySQL database objects; loaded automatically by the <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module when working with MySQL databases
        - <a href="../../modules/OracleSqlUtil/html/index.html">OracleSqlUtil</a>: Provides a high-level DB-independent API for working with Oracle database objects; loaded automatically by the <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module when working with Oracle databases
        - <a href="../../modules/PgsqlSqlUtil/html/index.html">PgsqlSqlUtil</a>: Provides a high-level DB-independent API for working with PostgreSQL database objects; loaded automatically by the <a href="../../modules/SqlUtil/html/index.html">SqlUtil</a> module when working with PostgreSQL databases
      - <a href="../../modules/Util/html/index.html">Util</a>: Provides a some miscellaneous generally useful routines
      - <a href="../../modules/WebSocketClient/html/index.html">WebSocketClient</a>: Provides a client API for connecting to WebSocket servers
      - <a href="../../modules/WebSocketHandler/html/index.html">WebSocketHandler</a>: Provides an interface to the Qore <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module for implementing server-side WebSocket services
      - <a href="../../modules/WebSocketUtil/html/index.html">WebSocketUtil</a>: Provides common client and server code for implementing WebSocket protocol services in %Qore
      - <a href="../../modules/WebUtil/html/index.html">WebUtil</a>: Provides server support for implementing complex web services including serving resources with mixed text and %Qore code that are automatically rendered on demand
    - improvements in existing @ref user_modules "user modules":
      - much improved <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module, better performance, much better RFC compliance, more flexibility
      - new CSV generation class in <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a>
      - much better message serialization and email attachment handling in the <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> and <a href="../../modules/MailMessage/html/index.html">MailMessage</a> modules
    - there is a new @ref Qore::Thread::ThreadPool "ThreadPool" class for implementing thread pools that automatically upscale and downscale within user-defined limits depending on the load placed on them
    - it's possible to inherit concrete versions of abstract method variants from a parent class that does not define the abstract method, meaning that concrete variants of an abstract method do not have to be implemented in a direct subclass of the class declaring the abstract method\n
      this makes using abstract base classes much easier in complex hierarchies using multiple inheritance; now common code can be separated into a single class and inherited by child classes sharing the common implementation
    - major @ref Qore::Socket "Socket" read performance increase by implementing internal read buffering (up to 10x faster socket read performance for certain operations, particularly with HTTP methods)
    - improved Unicode / UTF-8 support
      - <string>::lwr(), <string>::upr(), @ref Qore::tolower(string), and @ref Qore::toupper(string) now operate on a very wide range of non-ASCII characters, including Latin, Cyrillic, Greek, Armenian, Georgian, etc characters whereas they were previously limited to working on ASCII characters
      - <string>::unaccent() was added which removes accents from strings using a Unicode lookup map from a very wide range of accented Unicode characters to unaccented characters
    - new @ref Qore::SQL::Datasource "Datasource" and @ref Qore::SQL::DatasourcePool "DatasourcePool" methods:
      - Qore::SQL::Datasource::getConfigHash()
      - Qore::SQL::Datasource::getConfigString()
      - Qore::SQL::DatasourcePool::getConfigHash()
      - Qore::SQL::DatasourcePool::getConfigString()
      - Qore::SQL::DatasourcePool::copy()
    - @ref Qore::HTTPClient "HTTPClient" changes:
      - the @ref Qore::HTTPClient "HTTPClient" class is now a subclass of @ref Qore::Socket "Socket", so all @ref Qore::Socket "Socket" methods can be called on  @ref Qore::HTTPClient "HTTPClient" objects, making it easier to implement protocols based on HTTP
      - Qore::HTTPClient::getDefaultPath(): added
      - Qore::HTTPClient::setDefaultPath(): added
      - Qore::HTTPClient::getURL(): changed: now returns @ref nothing if no URL is set instead of an invalid URL
    - new functions:
      - call_pseudo_args()
      - @ref Qore::substr(binary, softint) "substr(binary, softint)"
      - @ref Qore::substr(binary, softint, softint) "substr(binary, softint, softint)"
    - new pseudo methods:
      - <binary>::substr(softint)
      - <binary>::substr(softint, softint)
      - <binary>::toBase64()
      - <binary>::toHex()
      - <binary>::toString()
      - <date>::getEpochSeconds()
      - <date>::getEpochSecondsLocalTime()
      - <date>::info()
      - <float>::abs()
      - <hash>::compareKeys(hash)
      - <int>::abs()
      - <int>::encodeLsb(int)
      - <int>::encodeMsb(int)
      - <int>::toUnicode()
      - <number>::abs()
      - <object>::hasCallableMethod()
      - <object>::hasCallableNormalMethod()
      - <object>::hasCallableStaticMethod()
      - <list>::rangeIterator()
      - <nothing>::rangeIterator()
      - <string>::comparePartial()
      - <string>::getUnicode()
      - <string>::equalPartial()
      - <string>::equalPartialPath()
      - <string>::toBase64()
      - <string>::toHex()
      - <string>::unaccent()
      - <value>::toNumber()
    - other new methods and method changes:
      - added new static methods in the @ref Qore::ReadOnlyFile "ReadOnlyFile" class making it easier to read entire files in one call:
        - @ref Qore::ReadOnlyFile::readTextFile()
        - @ref Qore::ReadOnlyFile::readBinaryFile()
      - changes to catch usage errors with the @ref Qore::Thread::Counter "Counter" class:
        - Qore::Thread::Counter::constructor() will throw an exception if called with an argument < 0
        - Qore::Thread::Counter::dec() will now throw an exception if called when the Counter is already at 0
      - Qore::Thread::Queue::empty(): new method
      - Qore::Socket::listen(): now has a new \a backlog parameter; the default backlog queue size was changed from 5 to 20
      - Qore::Socket::getPeerInfo() and Qore::Socket::getSocketInfo(): now takes an optional argument to avoid name lookups
      - Qore::Socket::readHTTPHeaderString(): new method
      - Qore::Dir: all list*() methods now take an optional parameter to return a list of file status value hashes plus \c "name" and optionally \c "link" keys for symbolic links; additionally symbolic links are now followed and files and directories are differentiated based on their targets when processing symbolic links
    - function changes
      - added optional \a start and \a end parameters to the @ref Qore::replace "replace()" function
    - all @ref data_type_declarations "data type declarations" that optionally accept @ref nothing also now accept @ref null and map @ref null to @ref nothing; this makes direct assignments from values derived from SQL queries much easier
    - added an optional reference to an integer to the @ref Qore::backquote() function to return the return code of the program executed
    - @ref implicit_index "implicit index" references now work in the @ref map "map" and @ref select "select" operators with lists and iterators
    - the @ref regex_extract_operator now accepts an optional \c g specifier to extract all occurrences of the pattern(s) in a string; also @ref Qore::regex_extract "regex_extract()" and <string>::regexExtract(string, int) now accept @ref Qore::RE_Global to extract all occurrences of the pattern(s) in a string
    - the @ref splice "splice" and @ref extract "extract" operators were extended to work on @ref binary "binary objects" as well as lists and strings
    - printing out binary values with the \c "%y" @ref string_formatting "format specifier" now produces YAML-like output for the binary value
    - added path name to error messages in @ref Qore::Dir "Dir" class exception strings

    @subsection qore_088_bug_fixes Bug Fixes in Qore
    - fixed a bug where the ?: operator could thrown spurious exceptions when parsing because it would return the type of the initial boolean expression as the return type of the operator
    - fixed a bug where classes with unimplemented inherited abstract variants would sometimes cause runtime exceptions to be thrown when instantiated but should have instead been caught at parse time
    - fixed a parser bug where out-of-line class method definitions could not be defined in a namespace block
    - fixed a bug parsing arguments in parse_uri_query() in the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
    - fixed several bugs where parse exceptions could show the wrong source location:
      - with type errors in function calls
      - when resolving global variables
      - in base class constructor arguments
      - for empty blocks with a missing return statement
      - when validating types used with the return statement (also associated warnings)
      - in methods calls
      - in hash value expressions
      - with redeclaring local variable return types
      - in local variable object instantiations
    - really fixed the bug thought to be fixed in 0.8.7 "where SSL errors would cause the affected thread to go into a infinite loop using 100% CPU" - this turned out to be easily reproducible on all platforms; when the SSL connection was shut down cleanly by the remote end before a response message was returned, an infinite loop would result
    - fixed a bug where it was impossible to output a single '\' character in regex substitution expressions; '\' was taken as an escape character, and '\\\' was output literally, now '\\\' is output as '\'
    - fixed a bug where a parse-time crash would occur when calling the copy() method for a class that does not implement an explicit copy() method
    - fixed a bug where arguments passed to a copy method were ignored; now an exception is thrown
    - fixed a bug where public members and static variables of privately-inherited classes were incorrectly treated as public attributes of the child class
    - fixed a bug where slices could be made of objects from outside the class including private members
    - fixed a bug where @ref Qore::SQL::SQLStatement::memberGate() "memberGate() methods" were not being respected when taking a slice of an object
    - fixed bugs in the integer Socket::recv*() methods where a \c SOCKET-CLOSED exception was not thrown when the remote end closed the connection
    - fixed a bug related to out-of-order parse initialization for functions and methods which resulted in the wrong return type being returned for a method with more than 1 variant where the variant could not be matched at parse time
    - fixed a bug where a non-variable-reference member of an "our" variable declaration list would cause a crash due to passing the incorrect argument in sprintf()
    - fixed sandboxing / protection errors with inherited code; subclasses inheriting code from a parent class with different parse options would cause the child parse options to be used when running the parent class code which caused errors; now parse options are enforced properly on the block level
    - fixed the @ref Qore::RangeIterator "RangeIterator" class; it was still abstract due to a missing @ref Qore::RangeIterator::valid() method
    - fixed a bug where the wrong error was being returned after a connection reset (remote connection close) in sockets with integer recv*() methods which could in some cases lead to an infinite loop
    - fixed a bug where private members of a common base class were not accessible by objects of subclasses sharing the common base class
    - fixed many bugs in <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> and updated the module version to 1.1
    - initialize static openssl crypto locks for multi-threaded openssl library access; without this crashes can result (for example in error queue management)
    - fixed a bug where Qore::HTTPClient::getURL() returned an invalid URL when no URL was set; now it returns @ref nothing in this case
    - fixed a bug managing feature/module lists in inherited @ref Qore::Program "Program" objects; user modules were listed in the child @ref Qore::Program "Program" object even though user module code is not imported in child @ref Qore::Program "Program" objects
    - fixed a bug where an invalid guard condition in critical lvalue storage code can cause unreferenced data to be returned while in a lock which can cause a crash in a multithreaded program
    - fixed a bug where references were not being written to the output variable if an exception was active when the code block exited
    - fixed a bug setting the precision for arbitrary-precision numbers with large exponents (like "1e100n")
    - implemented more strict adherence to <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a> (HTTP 1.1) regarding message-body handling in requests and response message generation and parsing
    - fixed a bug with @ref Qore::Thread::Condition::wait() "Condition::wait()" on Darwin with negative timeout values where a short timeout was used instead of an indefinite wait
    - fixed bugs in the <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> and <a href="../../modules/MailMessage/html/index.html">MailMessage</a> modules where mail messages were being serialized incorrectly if there were no attachments (there was no possibility to set the content transfer encoding) and also where it was not possible to set the content-type for the message body when it was sent as a part of a multipart message
    - fixed bugs handling arguments declared as type @ref reference_or_nothing_type "*reference" (reference or nothing)
    - fixed bugs in executing code accross @ref Qore::Program "Program" object barriers with reference arguments
    - fixed a bug with the switch statement where character encoding differences would cause strings to mismatch even if they were otherwise identical; now hard comparisons with strings allow for implicit automatic temporary character encoding conversions for the comparison
    - fixed a bug where qore failed to set the time zone region correctly when set from /etc/localtime and this file is a relative symlink rather than absolute
    - fixed a bug where substr() and <string>::substr() were returning @ref nothing if the arguments could not be satisifed contrary to the documentation and the declared return type, now an empty string is returned in those cases
    - fixed bugs rounding number values between 10 and -10 (non-inclusive) for display, fixed bugs rounding number value regarding digits after the decimal point for display with @ref Qore::NF_Scientific
    - fixed a bug in the @ref Qore::Dir class where it was not possible to chdir to the root directory \c "/"
    - fixed a bug where recursive references were allowed and memory leaks would occur due to recursive references; these are now caught at runtime and a \c REFERENCE-ERROR exception is thrown
    - fixed a configure bug with bison >= 3
    - fixed a bug in the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module when automatically uncompressing supported content-encodings to set the resulting string's character encoding correctly
    - fixed a bug in the @ref instanceof "instanceof" operator when working with objects and classes created from different source @ref Qore::Program "Program" objects
    - fixed a bug in *printf() formatting with floating-point and number values where no digits were displayed right of the decimal point unless a specific number of digits was specified in the format string
    - fixed the return type of <bool>::typeCode(); was returning a boolean instead of @ref Qore::NT_BOOLEAN
    - fixed a bug there @ref null was evaluated as @ref True "True" in a boolean context rather than @ref False "False"
    - fixed a bug where @ref Qore::Socket::recvBinary() would ignore the first data read
    - fixed starting listeners on UNIX domain sockets on Soalris in the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
    - fixed a bug where number("") was being converted to \@NaN\@n
    - fixed return type of @ref Qore::HTTPClient::getConnectionPath() "HTTPClient::getConnectionPath()"
    - fixed several bugs with logical comparison operators and arbitrary-precision numeric values where arbitrary-precision numeric values were not being prioritized as numeric values and also in some cases were being first converted to doubles and then operated on
    - fixed a bug in the socket code where the socket close condition was not flagged with SSL connections when writes failed due to the remote end closing the connection; an error would only be raised on the following socket operation
    - fixed a mismatched delete/malloc error with time zone initialization and the localtime file

    @section qore_087 Qore 0.8.7

    @par Release Summary
    Code embedding improvements

    @subsection qore_087_compatibility Changes That Can Affect Backwards-Compatibility
    @par Fixes for Code Inheritance in Program Objects
    The following changes are meant to sanitize code inheritance in child @ref Qore::Program "Program" objects to fix long-standing design bugs in code encapsulation by addressing the lack of fine-grained control over symbol visibility in inherited code.
    - @ref mod_public "public": The @ref mod_public "public" keyword's usage in modules has now been expanded
      to provide the same functionality generically in @ref Qore::Program "Program" objects; if @ref qore_classes "classes",
      @ref constants "constants", @ref qore_namespaces "namespaces", @ref qore_functions "functions", or
      @ref global_variables "global variables" are defined with the @ref mod_public "public" keyword, then these symbols will
      be inherited into child @ref Qore::Program "Program" objects as long as no @ref parse_options "parse options" prohibit
      it.\n\n
      This change was made to give programmers complete control over which symbols are inherited in child
      @ref Qore::Program "Program" objects, whereas because prior to this change, the control was very course.\n\n
    - the default behavior of %Qore regarding inherting global variables and functions with user variants was changed to be
      consistent with namespaces, classes, and constants; that is; public symbols are inherited by default.\n\n
      The following constants were renamed:
      - <tt>PO_INHERIT_USER_FUNC_VARIANTS</tt> is now: @ref Qore::PO_NO_INHERIT_USER_FUNC_VARIANTS "PO_NO_INHERIT_USER_FUNC_VARIANTS"
      - <tt>PO_INHERIT_GLOBAL_VARS</tt> is now: @ref Qore::PO_NO_INHERIT_GLOBAL_VARS "PO_NO_INHERIT_GLOBAL_VARS"\n\n
      This change was made to fix a long-standing design problem with symbol inheritance and make the implementation consistent.\n\n
    - builtin symbols are no longer inherited from user modules; only independent user symbols; the main change is that if a user
      module adds new user methods to a builtin class or new user variants to a builtin function, these changes are no longer imported
      into target @ref Qore::Program "Program" objects.

    @par File Method Changes
    The following methods were updated to throw exceptions on all errors rather than a return code for I/O errors in order to avoid hard to debug conditions due to ignoring I/O errors by forgetting to check the return value on the following methods:
    - Qore::File::f_printf()
    - Qore::File::f_vprintf()
    - Qore::File::print()
    - Qore::File::printf()
    - Qore::File::vprintf()
    - Qore::File::write()
    - Qore::File::writei1()
    - Qore::File::writei2()
    - Qore::File::writei4()
    - Qore::File::writei8()
    - Qore::File::writei2LSB()
    - Qore::File::writei4LSB()
    - Qore::File::writei8LSB()
    .
    Note that the above changes will hopefully only minimally impact backwards-compatibilty since the change is in error handling, and additionally each of the above methods could also throw an exception if called when the object was not open.

    @subsection qore_087_new_features New Features in Qore
    - new methods offering code encapsulation enhancements
      - @ref Qore::Program::loadModule() "Program::loadModule()": allows modules to be loaded in a @ref Qore::Program "Program" object directly
      - @ref Qore::Program::importClass() "Program::importClass()": allows classes to be individually imported in @ref Qore::Program "Program" objects
    - new pseudo-methods in @ref Qore::zzz8nothingzzz9 to allow for @ref Qore::zzz8hashzzz9 pseudo-methods to be safely used with @ref nothing
      - <nothing>::firstKey()
      - <nothing>::firstValue()
      - <nothing>::hasKey()
      - <nothing>::hasKeyValue()
      - <nothing>::keys()
      - <nothing>::lastKey()
      - <nothing>::lastValue()
      - <nothing>::values()
    - other new pseudo-methods:
     - <date>::durationSeconds()
     - <date>::durationMilliseconds()
     - <date>::durationMicroseconds()
    - removed most restrictions on embedded logic in user modules; user module @ref Qore::Program "Program" objects are subject to the
      same restrictions as the parent @ref Qore::Program "Program" object (if any)
    - added the get_parse_options() function so that parse options in the current @ref Qore::Program "Program" can be determined at
      runtime
    - added the get_ex_pos() function to help with formatting exception locations where the \c source and \c offset information is present
    - new methods and method variants:
      - @ref Qore::HTTPClient::getPeerInfo()
      - @ref Qore::HTTPClient::getSocketInfo()
      - @ref Qore::File::getTerminalAttributes()
      - @ref Qore::SQL::Datasource::transactionTid()
      - @ref Qore::SQL::Datasource::currentThreadInTransaction()
      - @ref Qore::SQL::DatasourcePool::currentThreadInTransaction()
    - new location tags \c "source" and \c "offset" added for parse and runtime exceptions to allow for error-reporting to display information about files where sections of a source file are parsed; this allows both the label and line offset in the label and the file name and absolute file line position to be reported in exception information
      - new parameters added to the following methods and function to accommodate the new location information:
        - @ref Qore::Program::parse() "Program::parse()"
        - @ref Qore::Program::parsePending() "Program::parsePending()"
        - @ref Qore::parse() "parse()"
      - see @ref Qore::ExceptionInfo "Exception Hash" and @ref Qore::CallStackInfo "Call Stacks" for new keys in exception and call stack information hashes
    - <date>::format() now accepts \c "us" for microseconds (see @ref date_formatting)
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module improvements:
      - added automatic recognition and support of the \c "STARTTLS" command when connecting to an ESMTP server; this way
        the class will automatically upgrade the connection to a secure TLS/SSL connection if the server supports it
      - added support for SMTP server schemes in the URL in the constructor (ex: \c "esmtptls://user@password:smtp.example.com")
      - added support for the deprecated (but still in use) \c "smtps" scheme with a default port of 465
      - when throwing an exception when a Message cannot be sent because it is incomplete, the reason for the error is also included
        in the exception (previously the exception message was generic making problems with the Message object harder to debug)
    - C++ API Enhancements
      - added C++ APIs to allow for %Qore @ref Qore::File "File" and @ref Qore::Thread::Queue "Queue" object arguments to be used by modules
      - added C++ APIs for controlling openssl initialization and cleanup by the qore library
      - extended qpp to allow for parsing relative dates in qpp code for assignments/default argument values
      - made it possible to call the C++ function QoreFunction::findVariant() from threads where there is no current QoreProgram object
        (such as from a thread created by foreign code)
      - added APIs to allow foreign threads to be registered/deregistered as %Qore threads (for example, to allow %Qore code to be called
        in a callback in a foreign thread created by a library linked with a %Qore binary module)
      - added APIs to allow for TID reservations to allow (for example) for a callback that is executed in the same foreign thread to always have the same TID
      - the old Datasource::execRaw() function with the \a args parameter was deprecated since args was ignored anyway, a new Datasource::execRaw() function was added that has no args parammeter

    @subsection qore_087_bug_fixes Bug Fixes in Qore
    - fixed a runtime class matching bug when identical user classes were created in different @ref Qore::Program "Program" objects,
      the match could fail at runtime because the wrong APIs were being used
    - fixed a crashing bug in the @ref map "map" operator with a select expression when used with an
      @ref Qore::AbstractIterator "AbstractIterator" object for the list operand
    - fixed a bug where the generation of internal strings for abstract method signatures tries to resolve class names that
      are declared out of order, which incorrectly resulted in a parse exception; the fix is to use the class name in the
      signature before class resolution; the class is resolved in the second stage of parsing (symbol resolution) anyway, if it
      can't be resolved then the changes to the @ref Qore::Program "Program" are rolled back anyway
    - a potential deadlock was fixed when calling @ref Qore::exit() "exit()" while background threads were running; it was
      possible for a thread to be canceled while holding a @ref Qore::Thread::Mutex "Mutex" (for example) and then for another
      thread to deadlock trying to acquire the @ref Qore::Thread::Mutex "Mutex" and therefore for the process to deadlock because
      pthread_mutex_lock() is not a cancellation point. The solution was to cancel all threads first, then wait half a second, then call exit()
    - fixed a bug where global variables were being evaluated with strict mathematical boolean evaluation even when @ref perl-bool-eval
      "%perl-bool-eval" was enabled (which is the default)
    - fixed bug in @ref Qore::parseBase64String() and @ref Qore::parseBase64StringToString() when called with an empty string argument; in this case uninitialized memory was returned
    - fixed runtime dynamic memory leaks in the @ref select and @ref map operators when used with iterators
    - do thread-specific cleanup in the main thread when cleaning up/shutting down the qore library
    - added additional openssl cleanup code for thread-local data and when cleaning up the qore library
    - fixed a bug matching function/method variants at runtime
    - fixed a race condition deleting global dynamic handlers in the <a href="../../modules/HttpServer/html/index.html">HttpServer</a> module
    - fixed a bug where declaring an abstract method with parameters and then declaring a concrete reimplementation of the method in a child class with no parameters caused a parse-time crash
    - fixed a bug where trying to dynamically call a function that does not exist results in a deadlock due to an error where a mutex is not unlocked
    - fixed a bug in the @ref Qore::Socket::sendHTTPMessage() and @ref Qore::Socket::sendHTTPResponse() methods regarding the timeout parameter
    - fixed a bug in an socket SSL error message where the method name was printed from non-string memory (used wrong ptr for the <tt>%%s</tt> format argument)
    - fixed some major crashing bugs related to reference handling; a global variable assigned a reference to a reference to a local variable would cause a crash
    - @ref reference_type and @ref reference_or_nothing_type type fixes: an error in @ref reference_type type handling allowed non-reference values to be passed to builtin code expecing references which caused a crash; the @ref reference_type and @ref reference_or_nothing_type types would accept any value type
    - attempted to fix a non-reproducible bug seen on rhel5 in the @ref Qore::Socket "Socket class" where SSL errors would cause the affected thread to go into a infinite loop using 100% CPU

    @section qore_0862 Qore 0.8.6.2

    @par Release Summary
    Iterator improvements and design fixes

    @subsection qore_0862_compatibility Changes That Can Affect Backwards-Compatibility
    @par Fixes for Iterator Class Design Bugs
    Iterators, particular regarding the @ref map "map" and @ref select "select" operators, were implemented in a confusing and inconsistent way; even the %qore documentation was incorrect, and examples were given incorrectly.  The following changes will break functionality using the badly-implemented behavior of iterators before, but since the fix comes fairly soon after the introduction, hopefully this change will not cause too many problems with existing code.   All users polled about the iterator changes in this release saw them as positive and desired changes to the language.
    - the @ref map "map" and @ref select "select" operators' behavior was changed when used with an @ref Qore::AbstractIterator "AbstractIterator" object for the list operand; now the implied argument is the result of @ref Qore::AbstractIterator::getValue() "AbstractIterator::getValue()" instead of the iterator object itself.  This addresses a confusing design choice in the original iterator integration with the @ref map "map" and @ref select "select" operators
    - the second boolean argument was removed from the @ref Qore::HashIterator::constructor(hash&lt;auto&gt;) "HashIterator::constructor(hash&lt;auto&gt;)" and @ref Qore::HashReverseIterator::constructor(hash&lt;auto&gt;) "HashReverseIterator::constructor(hash)" methods; use the new  @ref Qore::HashPairIterator "HashPairIterator" and @ref Qore::ObjectPairIterator "ObjectPairIterator" classes instead (<hash>::pairIterator() and <object>::pairIterator())
    - the single boolean argument was removed from <hash>::iterator() and <object>::iterator(); use <hash>::pairIterator() and <object>::pairIterator() instead to get the old behavior

    @subsection qore_0862_changes Changes in Qore
    - new iterator classes:
      - @ref Qore::HashKeyIterator "HashKeyIterator"
      - @ref Qore::HashKeyReverseIterator "HashKeyReverseIterator"
      - @ref Qore::HashPairIterator "HashPairIterator"
      - @ref Qore::HashPairReverseIterator "HashPairReverseIterator"
      - @ref Qore::ObjectKeyIterator "ObjectKeyIterator"
      - @ref Qore::ObjectKeyReverseIterator "ObjectKeyReverseIterator"
      - @ref Qore::ObjectPairIterator "ObjectPairIterator"
      - @ref Qore::ObjectPairReverseIterator "ObjectPairReverseIterator"
    - new pseudo-methods:
      - <hash>::keyIterator()
      - <hash>::pairIterator()
      - <hash>::contextIterator()
      - <object>::keyIterator()
      - <object>::pairIterator()
      - <nothing>::keyIterator()
      - <nothing>::pairIterator()
      - <nothing>::contextIterator()
    - the internal C++ QoreProgramHelper object has been updated to wait until all background threads in the %Qore library have executed before taking the @ref Qore::Program "Program" object out of scope; this allows for callbacks and other code that might be needed by background threads started in user modules (for example) to stay valid until the threads in the user modules also have terminated.  Note that this does not affect the case when using @ref exec-class "%exec-class" and an application program object goes out of scope with background threads in user modules having non-static method call references as callbacks to the application program; see @ref user_module_program_scope for more information on this topic.

    @section qore_0861 Qore 0.8.6.1

    @par Release Summary
    Major bug fixes and minor new features

    @subsection qore_0861_changes Changes in Qore
    - updated the @ref try-module "%try-module" parse directive to support a variant without an exception variable for usage in @ref Qore::Program "Program" objects where @ref Qore::PO_NO_TOP_LEVEL_STATEMENTS is set
    - added code to raise an @ref invalid-operation warning with the @ref elements "elements operator" when called with a type that can never return a value with this operator
    - updated the @ref Qore::File "File" class's internal buffer size from 4KB to 16KB which greatly improves read performance
    - added new public APIs for the QoreNumberNode class to allow for proper de/serialization in external modules
    - <a href="../../modules/Pop3Client/html/index.html">Pop3Client</a> module:
      - added the Pop3Client::logPassword() methods and masked password by default in the debug log
      - updated module to v1.1
    - <a href="../../modules/Mime/html/index.html">Mime</a> module:
      - declared the MultiPartMessage::getMsgAndHeaders() method abstract as originally intended
      - added MultiPartMessage::parseBody() static method
      - updated module to v1.3

    @subsection qore_0861_bug_fixes Bug Fixes in Qore
    - fixed crashing bugs due to the lack of proper lvalue checks with the expression for the background operator with operators using lvalues with local variables
    - fixed rounding of arbitrary-precision numeric values for display purposes when the last significant digit is just to the right of the decimal point (ex: was displaying 10.2 as "11." for example)
    - fixed a race condition in static destruction of the library when a background thread calls exit() that could cause a segfault on exit
    - fixed a static memory leak in Program objects when constants contain code references to functions or static methods
    - fixed a bug parsing user modules; the Program context was not set properly which could lead to a crash when parsing user modules loaded from the command-line or to incorrect parse options when loaded from user Program code
    - fixed a bug where the @ref invalid-operation warning with the @ref keys "keys operator" was not being triggered in common cases that should have triggered the warning
    - <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module:
      - fixed recognizing mime messages with additional text after the version number (ex: \c "Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))")
      - fixed a bug setting the content-type of message parts (this fix is now in the <a href="../../modules/Mime/html/index.html">Mime</a> in the MultiPartMessage::getMsgAndHeaders() method
      - fixed multipart message parsing by using MultiPartMessage::parseBody() in the <a href="../../modules/Mime/html/index.html">Mime</a> module; now also parts with subparts are parsed correctly as well
      - fixed a bug where the sender and from values were not being set properly when parsing email messages
      - updated module to v1.0.3

    @section qore_086 Qore 0.8.6

    @par Release Summary
    Major new features and a few bug fixes

    @subsection qore_086_compatibility Changes That Can Affect Backwards-Compatibility

    @par Perl-Style Boolean Evaluation
    %Qore's default boolean evaluation mode was changed from strict mathematical to a more intuitive perl- (and Python-) like style.
    This change was implemented to address one of the oldest design bugs in %Qore: strict mathematical boolean evaluation.  See @ref perl-bool-eval "%perl-bool-eval" for a description of the new default boolean evaluation mode.\n\n
    To get the old strict mathematical boolean evaluation, use the @ref strict-bool-eval "%strict-bool-eval" parse option.\n\n
    An example of the change; now the following @ref if "if statement" block will be executed as the <tt><b>if</b></tt> expression is now evaluated as @ref True "True":
    @code{.py}
    string str = "hello";
    if (str)
        printf("Qore says hello\n");
    @endcode
    Previously (i.e. with @ref strict-bool-eval "%strict-bool-eval") the <tt><b>if</b></tt> expression above would be evaluated as @ref False "False" because the string value was converted to an integer 0, however as of %Qore 0.8.6 (with the default @ref perl-bool-eval "perl-bool-eval") it is @ref True "True" since the string is not empty; empty strings and string value \c "0" are evaluated as @ref False "False".\n\n
    Perhaps counterintuitively (and the reason this was changed to be the default in qore), the chance for regression errors in
    qore code is very small, because for all cases where the old logic could be applied (meaning excluding cases where the result
    was always @ref False "False" due to the data types or values being evaluated), the results are the same with the new logic,
    except for one case; the case where a string has more than one character and begins with a zero (ex: \c "00").
    In this case, the old logic would always return @ref False "False", because the value was first converted to an integer \c 0,
    whereas the new logic will return @ref True "True".  Note that in the case of a string with a single \c "0", both the old and
    new boolean logic returns @ref False "False".\n\n
    Basically with this option set, qore's boolean evaluation becomes like perl's and Python's, whereas any expression that has the following values is @ref False "False": @ref nothing, @ref string "string" \c "0" and @ref string "empty strings", @ref integer "integer", @ref float "float", and @ref number "number" \c 0 (zero), @ref absolute_dates "absolute date" \c 1970-01-01Z (ie the start of the epoch with an offset of 0), @ref relative_dates "relative date" \c 0s (or any  @ref relative_dates "relative date" with a 0 duration), @ref null, @ref binary "empty binary objects", @ref hash "empty hashes", and @ref list "empty lists".  All other values are @ref True "True".
    @note also affects the @ref Qore::boolean(any) "boolean(any)" function

    @par Changes in the Socket Class
    The @ref Qore::Socket "Socket" class was enhanced to support timeouts with non-blocking I/O on all send operations;
    many Socket methods that send data were originally implemented to return an error code on error, however they would
    also throw exceptions if the socket were not open, so the error handling was inconsistent (exceptions versus return codes).\n\n
    Additionally it was not possible to get error information at all for SSL errors if the socket was connected with SSL, which,
    according to %Qore's socket design, should be transparent for the programmer.\n\n
    For these reasons the implementation was deemed inconsistent and unintuitive; the change was to add optional timeout parameters
    to all send methods and to allow the methods to throw exceptions (instead of simply returning -1 and not being able to determine the cause of the error in many cases).\n\n
    The following methods were updated to accept optional timeout parameters and throw exceptions on all errors rather than a return code for I/O errors:
    - Qore::Socket::send()
    - Qore::Socket::sendBinary()
    - Qore::Socket::sendi1()
    - Qore::Socket::sendi2()
    - Qore::Socket::sendi4()
    - Qore::Socket::sendi8()
    - Qore::Socket::sendi2LSB()
    - Qore::Socket::sendi4LSB()
    - Qore::Socket::sendi8LSB()

    @par New Abstract Method in AbstractIterator
    The following abstract method was added:
    - Qore::AbstractIterator::valid() was added (with concrete implementations in all iterator classes derived from this base class delivered with %Qore); this method tells if the object is currently pointing to a valid iterator.\n\n For any user classes inherting @ref Qore::AbstractIterator "AbstractIterator" directly (as opposed to another concrete iterator class in %Qore, where the method has already been added), a concrete implementation of this method will have to be added as well or that class will become @ref abstract with this release of %Qore.

    @subsection qore_086_new_features New Features in Qore
    @par Arbitrary-Precision Numeric Support
    %Qore now uses the <a href="http://www.mpfr.org/">MPFR</a> and <a href="http://gmplib.org">GMP</a> libraries to provide arbitrary-precision numeric support.  This type can be used for high-precision mathematics or for storing \c NUMERIC (ie \c DECIMAL or \c NUMBER) column values when retrieved from databases by %Qore DBI drivers that support the new capability @ref Qore::SQL::DBI_CAP_HAS_NUMBER_SUPPORT "DBI_CAP_HAS_NUMBER_SUPPORT" (previously these values would be retrieved as %Qore strings in order to avoid information loss).\n\n
    For more information, see the new @ref number "number" type, @ref number_type, and @ref Qore::zzz8numberzzz9

    @par New CsvUtil Module
    The <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module implements the CsvFileIterator class that allows for easy parsing of csv-like text files

    @par %%try-module Parse Directive to Handle Module Load Errors at Parse Time
    The new @ref try-module "%try-module" parse directive allows for module load errors to be handled at parse time; ex:
    @code{.py}
%try-module($ex) some-module > 1.0
    printf("error loading module %y: %s: %s\n", ex.arg, ex.err, ex.desc);
    exit(1);
%endtry
    @endcode

    @par Abstract Class Hierarchy Improvement
    As of this version of qore, concrete implementations of @ref abstract "abstract methods" no longer have to have exactly the same return type as the abstract method; it is now sufficient that the return type in the concrete method meets a compatibility test with the return type of the abstract method in the parent class.\n\n
    For example the following is now valid (and <tt>MyConcreteClass</tt> is not abstract, whereas previously because the return types in the child class were not exact, <tt>MyConcreteClass</tt> would be considered abstract by qore):
    @code{.py}
class MyAbstractClass {
    abstract any doSomething();
    abstract *string getString();
}

class MyConcreteClass inherits MyAbstractClass {
    int doSomething() {
        return 1;
    }
    string getString() {
        return "hello";
    }
}
    @endcode

    @par DBI Improvements
    Three new DBI capabilities were implemented, including a new option API as follows:
    - @ref Qore::SQL::DBI_CAP_HAS_NUMBER_SUPPORT "DBI_CAP_HAS_NUMBER_SUPPORT": DBI drivers declaring this capability can accept @ref number "number" values and can also return @ref number "number" values, if a DBI driver does not declare this capability, then @ref number "number" values sent for binding by value are automatically converted to @ref float "float" values before being sent to the driver
    - @ref Qore::SQL::DBI_CAP_HAS_OPTION_SUPPORT "DBI_CAP_HAS_OPTION_SUPPORT": this indicates that the driver supports the new option API, allowing options to be set on each connection.  See the following for more information:
      - @ref Qore::SQL::Datasource::constructor() "Datasource::constructor(hash)": now passes options to the DBI driver if the driver supports the option API
      - @ref Qore::SQL::Datasource::constructor() "Datasource::constructor(string)": (new in 0.8.6) passes options to the DBI driver if the driver supports the option API
      - @ref Qore::SQL::Datasource::getOption(string) "Datasource::getOption(string)": (new in 0.8.6) returns the value of the given option if the driver supports the option API
      - @ref Qore::SQL::Datasource::getOptionHash() "Datasource::getOptionHash()": (new in 0.8.6) returns a hash of the current option values for the current connection if the driver supports the option API
      - @ref Qore::SQL::Datasource::setOption() "Datasource::setOption()": (new in 0.8.6) allows options to be changed after the object is created
      - @ref Qore::SQL::DatasourcePool::constructor() "DatasourcePool::constructor(hash)": now passes options to the DBI driver if the driver supports the option API
      - @ref Qore::SQL::DatasourcePool::constructor() "DatasourcePool::constructor(string)": (new in 0.8.6) passes options to the DBI driver if the driver supports the option API
      - @ref Qore::SQL::DatasourcePool::getOption(string) "DatasourcePool::getOption(string)": (new in 0.8.6) returns the value of the given option if the driver supports the option API
      - @ref Qore::SQL::DatasourcePool::getOptionHash() "DatasourcePool::getOptionHash()": (new in 0.8.6) returns a hash of the current option values for the current connection if the driver supports the option API
      - @ref Qore::SQL::dbi_get_driver_options(string) "dbi_get_driver_options(string)": (new in 0.8.6) returns a hash of driver option information without values
    - @ref Qore::SQL::DBI_CAP_SERVER_TIME_ZONE "DBI_CAP_SERVER_TIME_ZONE": indicates that the DBI driver will convert any bound date/time values to the server's time zone before binding and also will tag date/time values retrieved from the server with the server's time zone.  This capability also implies that the driver supports the new \c "timezone" option.

    @par Socket Improvements
    The @ref Qore::Socket "Socket" class was updated to support non-blocking I/O on all send methods; the following methods were updated to accept optional timeout parameters:
    - Qore::Socket::send2()
    - Qore::Socket::sendBinary2()
    - Qore::Socket::sendHTTPMessage()
    - Qore::Socket::sendHTTPResponse()
    .
    The following methods were enhanced to provide better error information when throwing exceptions:
    - Qore::Socket::recvi1()
    - Qore::Socket::recvi2()
    - Qore::Socket::recvi4()
    - Qore::Socket::recvi8()
    - Qore::Socket::recvi2LSB()
    - Qore::Socket::recvi4LSB()
    - Qore::Socket::recvi8LSB()
    - Qore::Socket::recvu1()
    - Qore::Socket::recvu2()
    - Qore::Socket::recvu4()
    - Qore::Socket::recvu2LSB()
    - Qore::Socket::recvu4LSB()

    @par Iterator Improvements
    The following improvements were made in qore to support more flexible and ubiquitous iterators:
    - new iterator classes:
      - @ref Qore::SingleValueIterator "SingleValueIterator": allows single values (or any value without an iterator class) to be iterated; this provides the basis for the return type for the new base <value>::iterator() method for non-container types
      - @ref Qore::FileLineIterator "FileLineIterator": allows files to be iterated line by line
      - @ref Qore::ObjectIterator "ObjectIterator": a generic iterator for objects
      - @ref Qore::ObjectReverseIterator "ObjectReverseIterator": a generic reverse iterator for objects
      - @ref Qore::RangeIterator "RangeIterator": a numerical sequence generator (the basis for the return type for the new @ref Qore::xrange() "xrange()" function
    - new pseudo-methods were added to return iterator objects based on the value type:
      - <value>::iterator()
      - <hash>::iterator()
      - <list>::iterator()
      - <object>::iterator()
      .
      The base pseudo-method (<value>::iterator()) ensures that any value can be iterated, and the type-specific methods ensure that the most suitable iterator for container types is returned for container values; values without an iterator class are iterated with the @ref Qore::SingleValueIterator "SingleValueIterator"
    - the @ref Qore::HashIterator "HashIterator" and @ref Qore::HashReverseIterator "HashReverseIterator" classes had an additional optional boolean argument added to their constructors; if @ref True "True", then the @ref Qore::HashIterator::getValue() "HashIterator::getValue()" and @ref Qore::HashReverseIterator::getValue() "HashReverseIterator::getValue()" methods return a hash with the following keys: \c "key" and \c "value", allowing for more convenient iteration with constructions that only use \c getValue() methods (such as the @ref foreach "foreach statement"); to accommodate this, two new methods were added to the @ref Qore::HashIterator "HashIterator" base class:
      - @ref Qore::HashIterator::getKeyValue()
      - @ref Qore::HashIterator::getValuePair()
    - all iterator classes had copy methods added to them (ex: @ref Qore::HashIterator::copy())
    - new Python-inspired @ref Qore::range() "range()" and @ref Qore::xrange() "xrange()" functions (the latter returning a @ref Qore::RangeIterator "RangeIterator" object to efficiently iterate large integral sequences or ranges

    @par Text File Parsing Enhancements
    The following improvements were made in qore to support more flexible file parsing:
    - the @ref Qore::ReadOnlyFile class was added as a parent class of @ref Qore::File to allow for a more convenient API for reading files (the @ref Qore::File class's API remains the same as it publically inherits  @ref Qore::ReadOnlyFile)
    - the @ref Qore::ReadOnlyFile::readLine() "ReadOnlyFile::readLine()" method (formerlly a method of the @ref Qore::File class) was enhanced to accept 2 optional arguments, allowing the end of line character(s) to be stripped from the line returned, and also to allow the end of line characters to be specified.  If no end of line characters are specified, then the method automatically determines the end of line characters (can be \c "\n", \c "\r", or \c "\r\n"; the last one only if the underlying file is not a TTY in order to avoid stalling I/O on an interactive TTY)
    - the @ref file_stat_constants were moved from the @ref Qore::File class to the @ref Qore::ReadOnlyFile class
    - added a new @ref Qore::FileLineIterator "FileLineIterator" iterator class
    - added a new optional parameter to <string>::split(string, string, bool) and Qore::split(string, string, string, bool) to allow for automatic stripping unquoted fields of leading and trailing whitespace (the default is the old behavior; i.e. leave the whitespace as it is read)
    - added a new @ref Qore::TimeZone "TimeZone" method for parsing string dates in a specific @ref Qore::TimeZone "TimeZone": @ref Qore::TimeZone::date(string, string)
    - added a new function for parsing text as a boolean value: @ref Qore::parse_boolean() "parse_boolean()"
    - as mentioned above, the new <a href="../../modules/CsvUtil/html/index.html">CsvUtil</a> module was added, implementing the CsvFileIterator class that allows for easy parsing of csv-like text files

    @par Other Improvements and Changes
    - the @ref foreach "foreach statement" now iterates objects derived from @ref Qore::AbstractIterator "AbstractIterator" automatically
    - added a @ref Qore::Option::HAVE_SYMLINK "HAVE_SYMLINK" constant for the symlink() function added in qore 0.8.5
    - added the @ref Qore::SQL::SQLStatement::memberGate() "SQLStatement::memberGate()" method so @ref Qore::SQL::SQLStatement "SQLStatement" objects can be dereferenced directly to a column value when iterated with @ref Qore::SQL::SQLStatement::next() "SQLStatement::next()"; also this method will throw exceptions when an unknown column name is used so that typos in column names can be caught (instead of being silently ignored producing hard to find bugs)
    - implemented @ref Qore::SQL::Datasource::constructor() "Datasource::constructor(string)" and @ref Qore::SQL::DatasourcePool::constructor() "DatasourcePool::constructor(string)" variants to allow for creating datasources from a string that can be parsed by Qore::SQL::parse_datasource(string) "parse_datasource(string)"
    - added the following new DBI-related functions:
      - @ref Qore::SQL::dbi_get_driver_list() "dbi_get_driver_list()"
      - @ref Qore::SQL::dbi_get_driver_capability_list(string) "dbi_get_driver_capability_list(string)"
      - @ref Qore::SQL::dbi_get_driver_capabilities(string) "dbi_get_driver_capabilities(string)"
      - @ref Qore::SQL::dbi_get_driver_options(string) "dbi_get_driver_options(string)"
      - @ref Qore::SQL::parse_datasource(string) "parse_datasource(string)"
    - implemented support for \c "A" and \c "a", (hexadecimal floating-point output) \c "G", \c "g", (compact floating-point output) \c "F", (non-scientific floating-point output) and \c "E" and \c "e" (scientific/exponential floating-point output) format arguments for @ref float "floats" and @ref number "numbers" (new arbitrary-precision @ref number "number type values"); see @ref string_formatting
    - new pseudo-methods:
      - <value>::toString()
      - <value>::toInt()
      - <value>::toFloat()
      - <value>::toBool()
      - <float>::format(string fmt)
      - <int>::format(string fmt)
      - <string>::isDataAscii()
      - <string>::isDataPrintableAscii()
      - <value>::callp()
      - <callref>::callp()
      - <int>::sign()
      - <float>::sign()
    - the value of the @ref Qore::SQL::NUMBER "NUMBER", @ref Qore::SQL::NUMERIC "NUMERIC", and @ref Qore::SQL::DECIMAL "DECIMAL" @ref sql_constants is now \c "number" instead of \c "string" (see also @ref sql_binding)
    - new constants:
      - @ref Qore::M_PIn "M_PIn"
      - @ref Qore::MAXINT "MAXINT"
      - @ref Qore::MININT "MININT"
    - new functions:
      - @ref Qore::range() "range()"
      - @ref Qore::xrange() "xrange()"
    - new methods:
      - @ref Qore::ReadOnlyFile::isTty() and @ref Qore::ReadOnlyFile::getFileName() (the @ref Qore::ReadOnlyFile class was added in qore 0.8.6 otherwise made up of methods formerly belonging to the @ref Qore::File class)
    - added the @ref append-module-path "%append-module-path" parse directive
    - @ref user_modules "user modules" may now use @ref Qore::Program "Program" objects for embedded logic; any @ref Qore::Program "Program" objects created in a @ref user_modules "user module" will have its parse options masked to be not less restrictive than the parse options in the current @ref Qore::Program "Program", and additionally parse options will be locked so that user module are not able to circumvent function restrictions imposed by parse options.
    - updated docs to show functional restrictions tagged at the class level

    @subsection qore_086_bug_fixes Bug Fixes in Qore
    - fixed a bug in the @ref map "map operator" with a select expression when the list operand is @ref nothing; it was returning a list with one @ref nothing element instead of @ref nothing
    - applied a patch by Reini Urban to allow for multi-arch builds on Debian
    - fixed bugs calculating the byte offset for string searches in the c++ %QoreString::index() and %QoreString::rindex() functions when the offset is negative and the strings have a multi-byte character encoding (such as UTF-8)
    - fixed a bug where calling an abstract method from a class where the abstract method is implemented was causing a parse error to be thrown
    - fixed a bug where the wrong source code location was displayed when raising a parse exception in operator expression parse initialization for some operators
    - fixed bugs in regexes in the HttpServer::addListeners() and HttpServer::addListenersWithHandler() methods (<a href="../../modules/HttpServer/html/index.html">HttpServer</a> module version updated to 0.3.5)
    - fixed bugs handling non-blocking reads in the @ref Qore::Socket "Socket" class; the timeout setting was only enforced for the first read; subsequent reads were made as blocking reads
    - fixed a bug in the @ref Qore::Socket "Socket" class when the SSL session requires renegotiation during non-blocking I/O
    - @ref Qore::File::constructor() "File::constructor()" now throws an exception if called with a tty target and @ref no-terminal-io "%no-terminal-io" is set
    - fixed a bug in split with quote (<string>::split(string, string, bool) and Qore::split(string, string, string, bool)) if the separator pattern was not found and the single field was not quoted either
    - fixed a bug handling nested @ref ifdef "%ifdef" and @ref ifndef "%ifndef" blocks with @ref else "%else" in the inside block
    - fixed a crashing due to the failure to clear the "PF_TOP_LEVEL" flag when initializing statements, this could cause temporary variables in a statement to be marked as the start of the global thread-local variable list, and then after such variables are deleted, then a crash happens when trying to access the global thread-local variable list
    - fixed a crashing bug at parse time merging function lists in namespaces declared multiple times
    - fixed a bug in executing user module init() closures
    - fixed a bug where the qore library could crash when destroying a Program object due to a race condition in removing signal handlers managed by the Program object; the Program calls the signal handler manager to remove the signals, but the signals can be removed concurrently to the request while the Program object is iterating the signal set (ie it is modified while being iterated), which causes a crash
    - added code to detect when the same namespace is declared both with and without the @ref mod_public "public keyword" when defining user modules which can result in entire namespaces being silently not exported (and can be difficult to debug); now a parse exception is thrown if this happens while parsing a user module
    - added code tags to @ref Qore::File "File" methods without side effects
    - made many minor documentation fixes

    @section qore_0851 Qore 0.8.5.1

    @par Release Summary
    Bugfix release

    @subsection qore_0851_bug_fixes Bug Fixes in Qore
    - fixed a race condition accessing global and closure-bound thread-local variables in multithreaded contexts
    - fixed a bug in transaction management with the @ref Qore::SQL::DatasourcePool "DatasourcePool" class when used with the @ref Qore::SQL::SQLStatement "SQLStatement" class
    - fixed an error in the <a href="../../modules/MailMessage/html/index.html">MailMessage</a> user module where mail headers requiring encoding were not encoded and those not requiring encoding were encoded with Q encoding
    - fixed an error in the <a href="../../modules/Mime/html/index.html">Mime</a> user module where \c "_" characters in q-encoded headers were not encoded correctly

    <hr>
    @section qore_085 Qore 0.8.5

    @par Release Summary
    Major new features and a few bug fixes

    @subsection qore_085_new_features New Features in Qore
    @par Abstract Methods and Interfaces
    %Qore now supports the <b>abstract</b> keyword when declaring methods; an <b>abstract</b> method has no implementation and must be
    implemented in child classes with the same signature for the child class to be instantiated.\n\n
    Classes with <b>abstract</b> methods define interfaces; a concrete implementation of the interface is a class that inherits the class with <b>abstract</b> methods and implements all the <b>abstract</b> methods.\n\n
    Abstract methods are defined with the following syntax:
    @code{.py}
class MyAbstractInterface {
    abstract string doSomething(int param);
    abstract bool checkSomething(string arg);
}
    @endcode
    The following abstract classes now exist in %Qore:
    - @ref Qore::SQL::AbstractDatasource "AbstractDatasource"
    - @ref Qore::AbstractIterator "AbstractIterator"
      - @ref Qore::AbstractQuantifiedIterator "AbstractQuantifiedIterator"
      - @ref Qore::AbstractBidirectionalIterator "AbstractBidirectionalIterator"
      - @ref Qore::AbstractQuantifiedBidirectionalIterator "AbstractQuantifiedBidirectionalIterator"
    - @ref Qore::Thread::AbstractSmartLock "AbstractSmartLock" (which was already present in %Qore but now implements abstract methods)
    .
    The following new iterator classes have been added to %Qore:
    - @ref Qore::HashIterator "HashIterator"
      - @ref Qore::HashReverseIterator "HashReverseIterator"
    - @ref Qore::HashListIterator "HashListIterator"
      - @ref Qore::HashListReverseIterator "HashListReverseIterator"
    - @ref Qore::ListHashIterator "ListHashIterator"
      - @ref Qore::ListHashReverseIterator "ListHashReverseIterator"
    - @ref Qore::ListIterator "ListIterator"
      - @ref Qore::ListReverseIterator "ListReverseIterator"
    - @ref Qore::SQL::SQLStatement "SQLStatement" (which was already present in %Qore but now implements the @ref Qore::AbstractIterator "AbstractIterator" interface to allow query results to be iterated)
    .
    Classes inheriting @ref Qore::AbstractIterator "AbstractIterator" have special support so that objects can be easily iterated in the following list operators:
    - @ref map
    - @ref foldr and @ref foldl
    - @ref select
    .
    @par Universal References
    All restrictions on references have been removed from %Qore; references to local variables may now be passed to the @ref background "background operator" and passed as arguments to @ref closure "closures".\n\n
    Basically when a reference is taken of a local variable that could result in the local variable being accessed in a multi-threaded context, the variable is treated as a closure-bound local variable in the sense that it's lifetime is reference-counted, and all accesses are wrapped in a dedicated mutual-exclusion lock to ensure thread safety.

    @par Pop3Client Module
    A <a href="../../modules/Pop3Client/html/index.html">Pop3Client</a> module has been added providing an API for communicating with <a href="http://en.wikipedia.org/wiki/Post_Office_Protocol">POP3</a> servers and retrieving email messages.\n\n
    The module uses functionality provided by the new <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module to represent email messages (and attachment data) downloaded from the server.

    @par MailMessage Module
    The <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module provides common functionality to the <a href="../../modules/Pop3Client/html/index.html">Pop3Client</a> and <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> modules to represent email messages for receiving and sending, respectively.  This module was created mostly from functionality removed from the <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> and enhanced to provide support for reading email messages in the new <a href="../../modules/Pop3Client/html/index.html">Pop3Client</a> module.

    @par SmtpClient Module Changes
    The Message and Attachment classes were removed from the <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module to the <a href="../../modules/MailMessage/html/index.html">MailMessage</a> module.  Backwards-compatible definitions for the Message and Attachment classes are provided in the <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a> module to rexport the removed functionality for backwards compatibility.

    @par Other Minor Improvements and Changes
    - qpp updated to support abstract methods and multiple inheritance (+ other minor qpp enhancements)
    - improved the \c QOREADDRINFO-GETINFO-ERROR exception description by adding information about the arguments passed
    - added a string argument to @ref Qore::chr(softint, __7_ string) "char(softint, *string)" to accept an output encoding
    - added a @ref Qore::int(string, int) "int(string, int)" variant to parse a string as a number and give the base
    - added a new parameter to parse_url() and parseURL() to allow for any [] in the hostname to be included in the \c "host" output key for indicating that the <a href="http://wikipedia.org/wiki/IPv6">ipv6</a> protocol be used
    - added the following pseudo-methods:
      - Qore::zzz8valuezzz9::lsize()
      - Qore::zzz8binaryzzz9::split()
      - Qore::zzz8binaryzzz9::toMD5()
      - Qore::zzz8binaryzzz9::toSHA1()
      - Qore::zzz8binaryzzz9::toSHA224()
      - Qore::zzz8binaryzzz9::toSHA256()
      - Qore::zzz8binaryzzz9::toSHA384()
      - Qore::zzz8binaryzzz9::toSHA512()
      - Qore::zzz8datezzz9::midnight()
      - Qore::zzz8listzzz9::first()
      - Qore::zzz8listzzz9::join()
      - Qore::zzz8listzzz9::last()
      - Qore::zzz8listzzz9::lsize()
      - Qore::zzz8nothingzzz9::lsize()
      - Qore::zzz8stringzzz9::regex()
      - Qore::zzz8stringzzz9::regexExtract()
      - Qore::zzz8stringzzz9::split()
      - Qore::zzz8stringzzz9::substr()
      - Qore::zzz8stringzzz9::toMD5()
      - Qore::zzz8stringzzz9::toSHA1()
      - Qore::zzz8stringzzz9::toSHA224()
      - Qore::zzz8stringzzz9::toSHA256()
      - Qore::zzz8stringzzz9::toSHA384()
      - Qore::zzz8stringzzz9::toSHA512()
    - added the <a href="http://code.google.com/p/xxhash/">xxhash FAST algorithm</a> with unordered_map to %Qore on supported platforms resuling in nearly 2x haster hash lookups
    - added the Qore::File::isOpen() method
    - added the Qore::call_pseudo() function to explicitly call a pseudo method on a value
    - added the Qore::symlink() function to create symbolic links
    - added Qore::TypeCodeMap and Qore::TypeNameMap to lookup type codes from type names and vice versa
    - added the following functions to allow the time zone to be set per thread:
      - Qore::set_thread_tz()
      - Qore::get_thread_tz()

    @subsection qore_085_bug_fixes Bug Fixes in Qore
    - fixed format_date() output for \c "MON" and \c "DAY", etc
    - fixed a memory leak in the parser related to parse exception handling with namespace members
    - fixed an invalid assert() in module handling when an error occurs loading the module (only affected debug builds)
    - tagged digest and crypto functions internally as @ref RET_VALUE_ONLY
    - do not kill TID 1 (the initial / main thread) when calling exit() in background threads as a crash can result with some 3rd party libraries that spawn their own threads on some platforms (observed on Darwin & Solaris 10 at least)
    - fixed a memory bug in the new builtin function API used by modules built with qpp
    - fixed memory bugs in the type system where uninitialized type pointers could be used causing a crash
    - fixed a memory bug in handling "or nothing" types where a non-null pointer would be assumed to be a pointer to the type, however it could actually be a pointer to the NOTHING object, the fix was to ensure that any NOTHING objects in argument lists would be substituted with a null pointer
    - fixed a bug in parse-time variant matching where an argument with parse-time type "object" would be matched as a perfect match to any parameter with any class restriction; this would cause run-time type errors if another valid class was passed that matched another variant of the method or function
    - fixed a build bug that caused qore to be built twice

    <hr>
    @section qore_084 Qore 0.8.4

    @par Release Summary
    Major new features and changes that can affect backwards-compatibility, plus 40 bug fixes

    @subsection qore_084_compatibility Changes That Can Affect Backwards-Compatibility

    @par Namespace Changes
    %Qore's internal namespace handling was nearly completely rewritten for %Qore 0.8.4.  This is because the old code was inefficient and applied namespaces inconsistently to @ref Qore::Program "Program" objects.\n\n
    The main change that can cause backwards-compatibility issues is that now functions are full namespace members.  If no namespace is explicitly given in a function definition, the function is a member of the unnamed root namespace.\n\n
    Also the distinction between builtin and user functions was removed.  Internally, there is only one kind of function object, which can contain both builtin and user function variants (overloaded variants of the same function with the same name but different arguments).\n\n
    All %Qore builtin functions were moved to the Qore namespace.\n\n
    Other namespace changes:
    - loading namespaces provided by builtin modules into a @ref Qore::Program "Program" object is now an atomic operation that may fail, if, for example, objects have already been defined in the target @ref Qore::Program "Program" with the same name as objects provided by the builtin module.  Previously this could cause undefined behavior.
    - namespace lookups are now truly breadth-first as documented; previously the algorithm was depth-first (contrary to the documentation)
    - namespace lookups are now done (both at parse time and runtime) with the help of symbol lookup tables for fast lookups; tables are maintained for both committed and temporary uncomitted parse symbols; this leads to up to 3x faster parsing for %Qore code
    - global variables are also now full namespace members, however this does not cause problems with backwards-compatibility

    @subsection qore_084_new_features New Features in Qore

    @par User Modules
    It is now possible to develop user modules in %Qore; several user modules are now included in the %Qore distribution, forming %Qore-language components of %Qore's runtime library.\n\n
    User modules delivered with %Qore 0.8.4:
    - <a href="../../modules/HttpServer/html/index.html">HttpServer</a>: a multi-threaded HTTP server implementation
    - <a href="../../modules/SmtpClient/html/index.html">SmtpClient</a>: an SMTP client library
    - <a href="../../modules/TelnetClient/html/index.html">TelnetClient</a>: a TELNET client implementation
    - <a href="../../modules/Mime/html/index.html">Mime</a>: a set of MIME definitions and functions for manipulating MIME data
    .
    There are also new example programs for the above modules in the examples/ directory.\n\n
    User modules are subject to %Qore's functional restriction framework.

    @par Namespace Changes
    As listed above:\n
    - global variables and functions are now full namespace members
    - all builtin functions are now in the Qore namespace
    - real depth-first searches are used for namespace symbols
    - symbols are resolved first in the current namespace when parsing declarations/code in a namespace

    @par The <b><tt>final</tt></b> Keyword
    Classes and methods can now be declared "final" to prevent subclassing or overriding in a subclass

    @par Pseudo Methods
    Pseudo-methods are class methods that can be implemented on any value; they are also part of class hierarchy.  The methods that can be executed on the value depend on the value's type, and all "pseudo-classes" inherit methods from a common base class.\n\n
    For example:
    @code{.py}
"string".strlen()
<abf05da3>.size()
500.typeCode()
    @endcode
    Are examples of pseudo-methods on literal values.\n\n
    Some expensive operations such as getting the first or last key (or value) of a hash are now cheap using pseudo-methods, for example:
    @code{.py}
hash.firstKey()
hash.lastValue()
    @endcode

    @par New Doxygen-Based Documentation
    The %Qore reference documentation is now generated by Doxygen, and is generated directly from the %Qore sources.  In fact, a new preprocessor known as "qpp" was developed for %Qore 0.8.4 to facilitate and enforce doxygen documentation on %Qore's runtime library (as well as abstract the relatively complex APIs used to bind C++ code to the %Qore runtime library from the C++ programmer).\n\n
    The documentation is more comprehensive, and corresponds much closer to the actual internal implementation since the documentation is now also contained in and directly generated from the internal C++ implementation of %Qore.\n\n
    For example, there is the <value>::val() method.  This method is implemented in the base pseudo class and is reimplemented in other pseudo-classes for other runtime data types as necessary.  This method returns @ref True "True" if the value has a value in the same sense as Perl's boolean context evaluation.  For example, if the value is a hash with no keys, it returns @ref False "False"; if it is a hash with keys, it returns @ref True "True"; if it is an empty string, it returns @ref False "False";
if it is a non-empty string, it returns @ref True "True", etc.

   @par LValue Handling Changes
   lvalue handling was rewritten as the old implementation was ugly and subject to deadlocks (in rare corner cases).\n\n
   Furthermore, medium-term, an architectural goal of %Qore is to store all ints, floats, and bools internally as the basic C++ type instead of using a class wrapper for each value, which needs dynamic allocation and destruction, which takes up more memory and negatively affects execution speed.\n\n
   With %Qore 0.8.4, all local and global variables are stored using optimized C++ types when declared with the appropriate type restrictions; for example:
   @code{.py}
int i0;
our int i1;
   @endcode
   These declares local and global variables that can only be assigned integer values; in %Qore 0.8.4 the value internally will be stored as an "int64" value (and not a dynamically-allocated QoreBigIntNode object).\n\n
   The same holds for:
   - @ref int_type "int"
   - @ref softint_type "softint"
   - @ref float_type "float"
   - @ref softfloat_type "softfloat"
   - @ref bool_type "bool"
   - @ref softbool_type "softbool"
   .
   Note that the optimized lvalue handling has not yet been applied to all lvalues, in particular non-static object members with declared types are not yet implemented with optimized storage; to do this requires a rewrite of %Qore's API and ABI (will happen in the next major release of %Qore).\n\n
   This change leads to improved integer and floating-point performance and a smaller runtime memory footprint.

   @par Runtime Optimizations
   In addition to the up to 3x faster parsing (as decribed in the namespace changes above), %Qore 0.8.4 contains many runtime optimizations designed to reduce the number of dynamic memory allocations performed at runtime.\n\n
   The optimizations included in this version of %Qore are only a half-measure compared to future changes that will necessitate a new binary %Qore API.

   @par Per-Thread Initialization
   the new set_thread_init() function allows a call reference or closure to be set which will be automatically executed when new threads are started (or a new thread accesses a @ref Qore::Program "Program" object) which can be used to transparently initialize thread-local data.

   @par More Control Over Thread Resource Exceptions
   new functions:
   - throw_thread_resource_exceptions_to_mark()
   - mark_thread_resources()
   .
   Allow for only thread resouces created after a certain point to be processed (for example only thread resources left after some embedded code was called)

   @par New Socket Methods
   new methods:
   - Qore::Socket::upgradeClientToSSL()
   - Qore::Socket::upgradeServerToSSL()
   .
   Allow upgrading an already-existing socket connection to SSL

   @par Better Socket Error Messages
   More information has been added to socket exceptions to provide better feedback when errors occur.

   @par New Socket Event Fields
   - added \c "type" and \c "typename" keys to the @ref EVENT_HOSTNAME_RESOLVED event
   - added \c "type", \c "typename", and \c "address" keys to the @ref EVENT_CONNECTING event

   @par Support For Blocking Writes in the Queue Class
   @ref Qore::Thread::Queue "Queue" objects can now be used as a blocking message channel (similar to a Go channel); if a maximum size is given to the @ref Qore::Thread::Queue "Queue" constructor, then trying to write data to the @ref Qore::Thread::Queue "Queue" when it is full will block until the @ref Qore::Thread::Queue "Queue"'s size goes below the maximum size; optional timeout parameters have been added to @ref Qore::Thread::Queue "Queue" methods that write to the @ref Qore::Thread::Queue "Queue".

   @par New Queue::clear() Method
   Does just what you think it does :)

   @par date(string, string) Improvement
   added the possibility to specify microseconds when parsing dates against a mask with the date() function

   @par New Support For ++ And -- Operators With Floating-Point Lvalues
   previously this would either convert the lvalue to an int or throw an exception if the lvalue could not be converted to an int due to type restrictions

   @par Class Recognition/Compatibility Between Program Objects
   The problem is that a user class created from the same source code in two different @ref Qore::Program "Program" objects would be recognized as a different class with parameter and variable type restrictions - ie you could not declare a variable or parameter with a class type restrictions and assign it an object created from the same class source code but created in another @ref Qore::Program "Program" object.\n\n
   This problem is analogous to a similar problem with java in that classes built from the same source but from different classloaders are also recognized as different classes.\n\n
   In %Qore 0.8.4 a class signature is created of all public and private objects, and an SHA1 hash is maintained of the class signature, and if the class names and signatures match, then the classes are assumed to be identical, even if they have different internal class IDs (because they were created in different @ref Qore::Program "Program" objects, for example).

   @par New TimeZone::date(string) Method
   to support creating arbitrary dates in a given @ref Qore::TimeZone "TimeZone"

   @par New GetOpt::parse3() method
   This method will display any errors on @ref Qore::stderr "stderr" and exit the program (which is the most typical way of handling command line errors anyway)

   @par += Operator Optimization For object += hash
   this operation is faster in this release

   @par New Parse Option PO_NO_MODULES
   Using this option disables module loading

   @par New Parse Option PO_NO_EMBEDDED_LOGIC
   Using this option disables all dynamic parsing

   @par New Parse Directives
   - @ref assume-global "%assume-global": the opposite of @ref assume-local "%assume-local"
   - @ref old-style "%old-style": the opposite of @ref new-style "%new-style"
   - @ref require-dollar "%require-dollar": the opposite of @ref allow-bare-refs "%allow-bare-refs"
   - @ref push-parse-options "%push-parse-options": allows parse options to be saved and restored when the current file is done parsing; very useful for %include files

   @par New Context Functions
   - cx_value(): returns the value of the given key
   - cx_first(): returns @ref True "True" if iterating the first row
   - cx_last(): returns @ref True "True" if iterating the last row
   - cx_pos(): returns the current row number (starting from 0)
   - cx_total(): returns the total number of rows in the set

   @par SOCKET-HTTP-ERROR Exception Enhancement
   The invalid header info received is reported in the exception's \c "arg" key

   @par Improved Parse Error Messages
   Improved some parse error messages dealing with namespace and class declaration errors

   @par Added NT_CLOSURE Constant
   type code for runtime closure values

    @subsection qore_084_bug_fixes Bug Fixes in Qore
    - fixed a race condition with @ref Qore::Program "Program" objects when a signal handler is left active and the @ref Qore::Program "Program" terminates
    - fixed a bug in the @ref Qore::File "File" class where the encoding given in the constructor was ignored; if no encoding was given in the File::open*() method then the @ref Qore::File "File"'s encoding would always be set to the default encoding, now it's set to the encoding given in the constructor (as documented)
    - runtime checks have been implemented so that references to local variables cannot be passed to a closure; this would cause a runtime crash
    - a fix has been made to the @ref delete "delete" and @ref remove "remove" operators; lists will not be extended when trying to remove/delete list elements that do not exist
    - fixed some bugs showing the error location with bugs in the second stage of parsing (symbol resolution)
    - apply type filters to blocks with a designated return type but no @ref return "return statement"
    - fixed crashing bugs on some 32bit platforms where size_t was assumed to be 64 bits
    - fixed a crashing bug parsing invalid @ref requires "%requires" directives in the scanner
    - fixed a bug in usleep() with relative date/time values (added a new usleep() variant to support this)
    - fixed a typo in the command-line help for the qore binary with unknown parse options
    - fixed @ref Qore::Option::HAVE_SIGNAL_HANDLING "HAVE_SIGNAL_HANDLING" to be @ref False "False" if signal handling is disabled on platforms where signal handling is otherwise available
    - fixed a scanner bug parsing out of line class definitions with a root-justified namespace path (ex: \c "class ::X::ClassName ...")
    - merging code from binary modules at parse time and at runtime is now transaction-safe (before it would cause memory errors and/or a crash), now if errors are detected then an exception is raised and changes are not applied.
    - fixed a crashing bug in the C++ API function QoreHashNode::setKeyValue() when the value is 0 and an exception occurs or is already active before the call is made
    - fixed a bug in date parsing with a format string - off by one with integer months - added a regression test for this case
    - fixed a memory error with the @ref rethrow "rethrow statement" in enclosing but nested try-catch blocks
    - fixed a crashing bug where qore would try to instantiate a class for a type that did not represent a class (ex: \c "int i();")
    - fixed a memory leak in the @ref softlist_type "softlist" and @ref softlist_or_nothing_type "*softlist" type implementation
    - make sure and raise a \c SOCKET-CLOSED error when reading a HTTP header if no data is received
    - make sure and convert encodings with @ref Qore::index() "index()" and @ref Qore::rindex() "rindex()" functions if the encodings don't match
    - build fix: only use a lib64 directory if the directory exists already
    - raise a parse exception in the scanner if a numeric overflow occurs in literal integer values
    - fixed a bug in @ref Qore::Thread::AbstractSmartLock::lockTID() "AbstractSmartLock::lockTID()"
    - fixed a major crashing error in the C++ API function QoreStringNode::createAndConvertEncoding(); this function is used by the xml module when parsing XML-RPC sent in a non-UTF-8 character encoding
    - fixed Qore::File::getchar() to always retrieve 1 character (even for multi-byte character encodings)
    - fixed string evaluation in a boolean context to return @ref True "True" with floating-point numbers between -1.0 and 1.0 exclusive
    - printf formatting fix: output YAML-style \c "null" for @ref nothing with %%y
    - scanner fix: accept \c "\r" as whitespace to allow better parsing of sources with Windows EOL markers
    - fixed parse-time type processing/checks for the keys, + and * operators
    - foreach statement fix: unconditionally evaluate the hash when iterating as otherwise it could change during iteration which could cause a crash
    - fixed another parse-time variant matching bug where the variant-matching algorithm was too aggressive and excluded possible matches at parse time which could result in a false parse-time definitive match even though a better match could be available at runtime
    - fixed a static memory leak when signal handlers are left registered when the qore library terminates
    - fixed static memory leaks and 1 dynamic memory leak in strmul()
    - fixed a crashing bug in handling recursive constant references
    - fixed a bug in the C++ API function HashIterator::deleteKey() when the node's value is NULL
    - fixed time zone/DST calculations for time zone regions with DST with dates before the epoch but after the last DST transition before the epoch
    - fixed a memory error where invalid source expressions referenced in a regular expression substitution expression would cause a crash (ex: @verbatim str =~ s/public (name)/$2/g @endverbatim
    - fixed a memory error in regular expression substitution where the unconverted string (if not given in UTF-8 encoding) was used when copying source expressions to the target string
    - fixed a bug where a recursive class inheritance tree would cause a crash
    - fixed a bug where a static class method could not access private members of the class
*/
