////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// All rights reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: Parameter Parser V7.4.1 (8cca6579792b9fcef3bc725ff070c5ec453c7c85)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  hidrx_1_0_1.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "hidrx_1_0_1.h"
#include "parametersetmanager.h"

HIDRX_1_0_1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// SetValue/GetValue Functions
/// Gets or sets the requested value
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool Flare_Correction_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "FC_blc_factor") == 0)
    {
        ParameterUtils::DoubleToString((double)FC_blc_factor, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "FC_blc_up_limit") == 0)
    {
        ParameterUtils::DoubleToString((double)FC_blc_up_limit, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "FC_blc_reflection_lut_tab") == 0)
    {
        __result = FC_blc_reflection_lut_tab.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool Flare_Correction_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "FC_blc_factor") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            FC_blc_factor = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "FC_blc_up_limit") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            FC_blc_up_limit = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "FC_blc_reflection_lut_tab") == 0)
    {
        __result = FC_blc_reflection_lut_tab.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool Flare_Correction_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // FC_blc_factor
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FC_blc_factor", ParameterParserDataType::Float, (double)FC_blc_factor));
    }
    else if (PARAMETER_STRCMP(__name, "FC_blc_factor") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)FC_blc_factor));
    }

    // FC_blc_up_limit
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FC_blc_up_limit", ParameterParserDataType::Float, (double)FC_blc_up_limit));
    }
    else if (PARAMETER_STRCMP(__name, "FC_blc_up_limit") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)FC_blc_up_limit));
    }

    // FC_blc_reflection_lut_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FC_blc_reflection_lut_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "FC_blc_reflection_lut_tab") == 0)
    {
        __result = FC_blc_reflection_lut_tab.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool Flare_Correction_data_type::FC_blc_reflection_lut_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "FC_blc_reflection_lut") == 0)
    {
        if (__index < FC_blc_reflection_lutFixedCount)
        {
            ParameterUtils::DoubleToString((double)FC_blc_reflection_lut[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < FC_blc_reflection_lutFixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)FC_blc_reflection_lut[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool Flare_Correction_data_type::FC_blc_reflection_lut_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "FC_blc_reflection_lut") == 0)
    {
        if (__index < FC_blc_reflection_lutFixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                FC_blc_reflection_lut[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < FC_blc_reflection_lutFixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    FC_blc_reflection_lut[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool Flare_Correction_data_type::FC_blc_reflection_lut_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // FC_blc_reflection_lut
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("FC_blc_reflection_lut", ParameterParserDataType::Float, true, false, FC_blc_reflection_lutFixedCount));
    }

    return __result;
}

bool shdrv38_LTM_trigger_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_desat_th") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_desat_th, __value, __size);
        __result = true;
    }

    return __result;
}

bool shdrv38_LTM_trigger_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_desat_th") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_desat_th = (float)dblValue; 
        }
    }

    return __result;
}

bool shdrv38_LTM_trigger_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // TM_desat_th
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_desat_th", ParameterParserDataType::Float, (double)TM_desat_th));
    }
    else if (PARAMETER_STRCMP(__name, "TM_desat_th") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_desat_th));
    }

    return __result;
}

bool trigger_pt_type_exp_ratio::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_start") == 0)
    {
        ParameterUtils::DoubleToString((double)exp_ratio_start, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_end") == 0)
    {
        ParameterUtils::DoubleToString((double)exp_ratio_end, __value, __size);
        __result = true;
    }

    return __result;
}

bool trigger_pt_type_exp_ratio::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_start") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            exp_ratio_start = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_end") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            exp_ratio_end = (float)dblValue; 
        }
    }

    return __result;
}

bool trigger_pt_type_exp_ratio::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // exp_ratio_start
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_start", ParameterParserDataType::Float, (double)exp_ratio_start));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_start") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)exp_ratio_start));
    }

    // exp_ratio_end
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_end", ParameterParserDataType::Float, (double)exp_ratio_end));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_end") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)exp_ratio_end));
    }

    return __result;
}

bool shdrv38_LTM_trigger_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool shdrv38_LTM_trigger_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool shdrv38_LTM_trigger_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // zone_trigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone_trigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetInfo(&__path[__pos], __info);
    }

    // zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool LTM_trigger_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_strength") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_strength, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TM_bright_compression") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_bright_compression, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TM_dark_boost") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_dark_boost, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TM_contrast_pos_strength_tab") == 0)
    {
        __result = TM_contrast_pos_strength_tab.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "TM_contrast_neg_strength_tab") == 0)
    {
        __result = TM_contrast_neg_strength_tab.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool LTM_trigger_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_strength") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_strength = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TM_bright_compression") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_bright_compression = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TM_dark_boost") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_dark_boost = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TM_contrast_pos_strength_tab") == 0)
    {
        __result = TM_contrast_pos_strength_tab.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "TM_contrast_neg_strength_tab") == 0)
    {
        __result = TM_contrast_neg_strength_tab.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool LTM_trigger_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // TM_strength
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_strength", ParameterParserDataType::Float, (double)TM_strength));
    }
    else if (PARAMETER_STRCMP(__name, "TM_strength") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_strength));
    }

    // TM_bright_compression
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_bright_compression", ParameterParserDataType::Float, (double)TM_bright_compression));
    }
    else if (PARAMETER_STRCMP(__name, "TM_bright_compression") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_bright_compression));
    }

    // TM_dark_boost
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_dark_boost", ParameterParserDataType::Float, (double)TM_dark_boost));
    }
    else if (PARAMETER_STRCMP(__name, "TM_dark_boost") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_dark_boost));
    }

    // TM_contrast_pos_strength_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_contrast_pos_strength_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "TM_contrast_pos_strength_tab") == 0)
    {
        __result = TM_contrast_pos_strength_tab.GetInfo(&__path[__pos], __info);
    }

    // TM_contrast_neg_strength_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_contrast_neg_strength_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "TM_contrast_neg_strength_tab") == 0)
    {
        __result = TM_contrast_neg_strength_tab.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool LTM_trigger_data_type::TM_contrast_pos_strength_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_contrast_pos_strength") == 0)
    {
        if (__index < TM_contrast_pos_strengthFixedCount)
        {
            ParameterUtils::DoubleToString((double)TM_contrast_pos_strength[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < TM_contrast_pos_strengthFixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)TM_contrast_pos_strength[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool LTM_trigger_data_type::TM_contrast_pos_strength_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_contrast_pos_strength") == 0)
    {
        if (__index < TM_contrast_pos_strengthFixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                TM_contrast_pos_strength[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < TM_contrast_pos_strengthFixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    TM_contrast_pos_strength[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool LTM_trigger_data_type::TM_contrast_pos_strength_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // TM_contrast_pos_strength
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_contrast_pos_strength", ParameterParserDataType::Float, true, false, TM_contrast_pos_strengthFixedCount));
    }

    return __result;
}

bool LTM_trigger_data_type::TM_contrast_neg_strength_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_contrast_neg_strength") == 0)
    {
        if (__index < TM_contrast_neg_strengthFixedCount)
        {
            ParameterUtils::DoubleToString((double)TM_contrast_neg_strength[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < TM_contrast_neg_strengthFixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)TM_contrast_neg_strength[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool LTM_trigger_data_type::TM_contrast_neg_strength_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_contrast_neg_strength") == 0)
    {
        if (__index < TM_contrast_neg_strengthFixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                TM_contrast_neg_strength[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < TM_contrast_neg_strengthFixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    TM_contrast_neg_strength[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool LTM_trigger_data_type::TM_contrast_neg_strength_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // TM_contrast_neg_strength
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_contrast_neg_strength", ParameterParserDataType::Float, true, false, TM_contrast_neg_strengthFixedCount));
    }

    return __result;
}

bool LTM_trigger_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool LTM_trigger_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool LTM_trigger_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // zone_trigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone_trigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetInfo(&__path[__pos], __info);
    }

    // zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool GTM_trigger_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_gamma") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_gamma, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TM_sat_adjustment") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_sat_adjustment, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TM_cs_blending") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_cs_blending, __value, __size);
        __result = true;
    }

    return __result;
}

bool GTM_trigger_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_gamma") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_gamma = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TM_sat_adjustment") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_sat_adjustment = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TM_cs_blending") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_cs_blending = (float)dblValue; 
        }
    }

    return __result;
}

bool GTM_trigger_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // TM_gamma
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_gamma", ParameterParserDataType::Float, (double)TM_gamma));
    }
    else if (PARAMETER_STRCMP(__name, "TM_gamma") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_gamma));
    }

    // TM_sat_adjustment
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_sat_adjustment", ParameterParserDataType::Float, (double)TM_sat_adjustment));
    }
    else if (PARAMETER_STRCMP(__name, "TM_sat_adjustment") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_sat_adjustment));
    }

    // TM_cs_blending
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_cs_blending", ParameterParserDataType::Float, (double)TM_cs_blending));
    }
    else if (PARAMETER_STRCMP(__name, "TM_cs_blending") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_cs_blending));
    }

    return __result;
}

bool GTM_trigger_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool GTM_trigger_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool GTM_trigger_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // zone_trigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone_trigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetInfo(&__path[__pos], __info);
    }

    // zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool Tone_Mapping_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "GTM") == 0)
    {
        __result = GTM.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "LTM") == 0)
    {
        __result = LTM.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "SHDRv38_LTM") == 0)
    {
        __result = SHDRv38_LTM.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool Tone_Mapping_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "GTM") == 0)
    {
        __result = GTM.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "LTM") == 0)
    {
        __result = LTM.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "SHDRv38_LTM") == 0)
    {
        __result = SHDRv38_LTM.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool Tone_Mapping_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // GTM
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("GTM", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "GTM") == 0)
    {
        __result = GTM.GetInfo(&__path[__pos], __info);
    }

    // LTM
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LTM", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "LTM") == 0)
    {
        __result = LTM.GetInfo(&__path[__pos], __info);
    }

    // SHDRv38_LTM
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("SHDRv38_LTM", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "SHDRv38_LTM") == 0)
    {
        __result = SHDRv38_LTM.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool Tone_Mapping_data_type::GTMStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::GTMStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::GTMStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // exp_ratio_zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_zone", ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::LTMStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::LTMStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::LTMStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // exp_ratio_zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_zone", ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::SHDRv38_LTMStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_perf_indicator") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_perf_indicator, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TM_detail_smoothing_weight_full") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_detail_smoothing_weight_full, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "TM_detail_smoothing_weight_dc4") == 0)
    {
        ParameterUtils::DoubleToString((double)TM_detail_smoothing_weight_dc4, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::SHDRv38_LTMStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "TM_perf_indicator") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_perf_indicator = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TM_detail_smoothing_weight_full") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_detail_smoothing_weight_full = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "TM_detail_smoothing_weight_dc4") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            TM_detail_smoothing_weight_dc4 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool Tone_Mapping_data_type::SHDRv38_LTMStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // TM_perf_indicator
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_perf_indicator", ParameterParserDataType::UInt32, (double)TM_perf_indicator, 0));
    }
    else if (PARAMETER_STRCMP(__name, "TM_perf_indicator") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)TM_perf_indicator, 0));
    }

    // TM_detail_smoothing_weight_full
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_detail_smoothing_weight_full", ParameterParserDataType::Float, (double)TM_detail_smoothing_weight_full));
    }
    else if (PARAMETER_STRCMP(__name, "TM_detail_smoothing_weight_full") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_detail_smoothing_weight_full));
    }

    // TM_detail_smoothing_weight_dc4
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("TM_detail_smoothing_weight_dc4", ParameterParserDataType::Float, (double)TM_detail_smoothing_weight_dc4));
    }
    else if (PARAMETER_STRCMP(__name, "TM_detail_smoothing_weight_dc4") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)TM_detail_smoothing_weight_dc4));
    }

    // exp_ratio_zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_zone", ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
        }
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_region_tab") == 0)
    {
        __result = MA_region_tab.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_tab") == 0)
    {
        __result = MA_diff_th1_tab.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_tab") == 0)
    {
        __result = MA_diff_th2_tab.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_region_tab") == 0)
    {
        __result = MA_region_tab.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_tab") == 0)
    {
        __result = MA_diff_th1_tab.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_tab") == 0)
    {
        __result = MA_diff_th2_tab.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_region_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_region_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "MA_region_tab") == 0)
    {
        __result = MA_region_tab.GetInfo(&__path[__pos], __info);
    }

    // MA_diff_th1_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th1_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_tab") == 0)
    {
        __result = MA_diff_th1_tab.GetInfo(&__path[__pos], __info);
    }

    // MA_diff_th2_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th2_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_tab") == 0)
    {
        __result = MA_diff_th2_tab.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_region_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_region_exp0") == 0)
    {
        if (__index < MA_region_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_region_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_region_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_region_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_region_exp1") == 0)
    {
        if (__index < MA_region_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_region_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_region_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_region_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_region_exp2") == 0)
    {
        if (__index < MA_region_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_region_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_region_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_region_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_region_exp3") == 0)
    {
        if (__index < MA_region_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_region_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_region_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_region_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_region_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_region_exp0") == 0)
    {
        if (__index < MA_region_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_region_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_region_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_region_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_region_exp1") == 0)
    {
        if (__index < MA_region_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_region_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_region_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_region_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_region_exp2") == 0)
    {
        if (__index < MA_region_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_region_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_region_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_region_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_region_exp3") == 0)
    {
        if (__index < MA_region_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_region_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_region_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_region_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_region_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_region_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_region_exp0", ParameterParserDataType::Float, true, false, MA_region_exp0FixedCount));
    }

    // MA_region_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_region_exp1", ParameterParserDataType::Float, true, false, MA_region_exp1FixedCount));
    }

    // MA_region_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_region_exp2", ParameterParserDataType::Float, true, false, MA_region_exp2FixedCount));
    }

    // MA_region_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_region_exp3", ParameterParserDataType::Float, true, false, MA_region_exp3FixedCount));
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_diff_th1_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp0") == 0)
    {
        if (__index < MA_diff_th1_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th1_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th1_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th1_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp1") == 0)
    {
        if (__index < MA_diff_th1_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th1_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th1_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th1_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp2") == 0)
    {
        if (__index < MA_diff_th1_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th1_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th1_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th1_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp3") == 0)
    {
        if (__index < MA_diff_th1_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th1_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th1_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th1_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_diff_th1_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp0") == 0)
    {
        if (__index < MA_diff_th1_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th1_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th1_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th1_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp1") == 0)
    {
        if (__index < MA_diff_th1_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th1_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th1_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th1_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp2") == 0)
    {
        if (__index < MA_diff_th1_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th1_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th1_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th1_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th1_exp3") == 0)
    {
        if (__index < MA_diff_th1_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th1_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th1_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th1_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_diff_th1_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_diff_th1_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th1_exp0", ParameterParserDataType::Float, true, false, MA_diff_th1_exp0FixedCount));
    }

    // MA_diff_th1_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th1_exp1", ParameterParserDataType::Float, true, false, MA_diff_th1_exp1FixedCount));
    }

    // MA_diff_th1_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th1_exp2", ParameterParserDataType::Float, true, false, MA_diff_th1_exp2FixedCount));
    }

    // MA_diff_th1_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th1_exp3", ParameterParserDataType::Float, true, false, MA_diff_th1_exp3FixedCount));
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_diff_th2_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp0") == 0)
    {
        if (__index < MA_diff_th2_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th2_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th2_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th2_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp1") == 0)
    {
        if (__index < MA_diff_th2_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th2_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th2_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th2_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp2") == 0)
    {
        if (__index < MA_diff_th2_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th2_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th2_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th2_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp3") == 0)
    {
        if (__index < MA_diff_th2_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_diff_th2_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_diff_th2_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_diff_th2_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_diff_th2_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp0") == 0)
    {
        if (__index < MA_diff_th2_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th2_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th2_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th2_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp1") == 0)
    {
        if (__index < MA_diff_th2_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th2_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th2_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th2_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp2") == 0)
    {
        if (__index < MA_diff_th2_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th2_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th2_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th2_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_diff_th2_exp3") == 0)
    {
        if (__index < MA_diff_th2_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_diff_th2_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_diff_th2_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_diff_th2_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool shdrv38_motion_adaption_table_data_type::MA_diff_th2_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_diff_th2_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th2_exp0", ParameterParserDataType::Float, true, false, MA_diff_th2_exp0FixedCount));
    }

    // MA_diff_th2_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th2_exp1", ParameterParserDataType::Float, true, false, MA_diff_th2_exp1FixedCount));
    }

    // MA_diff_th2_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th2_exp2", ParameterParserDataType::Float, true, false, MA_diff_th2_exp2FixedCount));
    }

    // MA_diff_th2_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_diff_th2_exp3", ParameterParserDataType::Float, true, false, MA_diff_th2_exp3FixedCount));
    }

    return __result;
}

bool shdrv38_motion_adaption_trigger_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool shdrv38_motion_adaption_trigger_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool shdrv38_motion_adaption_trigger_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // zone_trigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone_trigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetInfo(&__path[__pos], __info);
    }

    // zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool motion_adaption_table_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_percentage_tab") == 0)
    {
        __result = MA_motion_percentage_tab.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_tab") == 0)
    {
        __result = MA_motion_tolerance_range_tab.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool motion_adaption_table_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_percentage_tab") == 0)
    {
        __result = MA_motion_percentage_tab.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_tab") == 0)
    {
        __result = MA_motion_tolerance_range_tab.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool motion_adaption_table_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_motion_percentage_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_tab") == 0)
    {
        __result = MA_motion_percentage_tab.GetInfo(&__path[__pos], __info);
    }

    // MA_motion_tolerance_range_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_tab") == 0)
    {
        __result = MA_motion_tolerance_range_tab.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool motion_adaption_table_data_type::MA_motion_percentage_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp0") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_luma_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp1") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_luma_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp2") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_luma_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp3") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_luma_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_luma_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp0") == 0)
    {
        if (__index < MA_motion_percentage_r_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_r_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp1") == 0)
    {
        if (__index < MA_motion_percentage_r_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_r_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp2") == 0)
    {
        if (__index < MA_motion_percentage_r_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_r_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp3") == 0)
    {
        if (__index < MA_motion_percentage_r_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_r_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_r_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp0") == 0)
    {
        if (__index < MA_motion_percentage_b_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_b_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp1") == 0)
    {
        if (__index < MA_motion_percentage_b_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_b_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp2") == 0)
    {
        if (__index < MA_motion_percentage_b_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_b_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp3") == 0)
    {
        if (__index < MA_motion_percentage_b_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_percentage_b_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_percentage_b_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool motion_adaption_table_data_type::MA_motion_percentage_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp0") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_luma_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_luma_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_luma_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp1") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_luma_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_luma_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_luma_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp2") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_luma_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_luma_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_luma_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_luma_exp3") == 0)
    {
        if (__index < MA_motion_percentage_luma_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_luma_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_luma_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_luma_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp0") == 0)
    {
        if (__index < MA_motion_percentage_r_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_r_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_r_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_r_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp1") == 0)
    {
        if (__index < MA_motion_percentage_r_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_r_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_r_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_r_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp2") == 0)
    {
        if (__index < MA_motion_percentage_r_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_r_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_r_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_r_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_r_exp3") == 0)
    {
        if (__index < MA_motion_percentage_r_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_r_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_r_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_r_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp0") == 0)
    {
        if (__index < MA_motion_percentage_b_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_b_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_b_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_b_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp1") == 0)
    {
        if (__index < MA_motion_percentage_b_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_b_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_b_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_b_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp2") == 0)
    {
        if (__index < MA_motion_percentage_b_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_b_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_b_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_b_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_percentage_b_exp3") == 0)
    {
        if (__index < MA_motion_percentage_b_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_percentage_b_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_percentage_b_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_percentage_b_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool motion_adaption_table_data_type::MA_motion_percentage_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_motion_percentage_luma_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_luma_exp0", ParameterParserDataType::Float, true, false, MA_motion_percentage_luma_exp0FixedCount));
    }

    // MA_motion_percentage_luma_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_luma_exp1", ParameterParserDataType::Float, true, false, MA_motion_percentage_luma_exp1FixedCount));
    }

    // MA_motion_percentage_luma_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_luma_exp2", ParameterParserDataType::Float, true, false, MA_motion_percentage_luma_exp2FixedCount));
    }

    // MA_motion_percentage_luma_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_luma_exp3", ParameterParserDataType::Float, true, false, MA_motion_percentage_luma_exp3FixedCount));
    }

    // MA_motion_percentage_r_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_r_exp0", ParameterParserDataType::Float, true, false, MA_motion_percentage_r_exp0FixedCount));
    }

    // MA_motion_percentage_r_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_r_exp1", ParameterParserDataType::Float, true, false, MA_motion_percentage_r_exp1FixedCount));
    }

    // MA_motion_percentage_r_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_r_exp2", ParameterParserDataType::Float, true, false, MA_motion_percentage_r_exp2FixedCount));
    }

    // MA_motion_percentage_r_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_r_exp3", ParameterParserDataType::Float, true, false, MA_motion_percentage_r_exp3FixedCount));
    }

    // MA_motion_percentage_b_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_b_exp0", ParameterParserDataType::Float, true, false, MA_motion_percentage_b_exp0FixedCount));
    }

    // MA_motion_percentage_b_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_b_exp1", ParameterParserDataType::Float, true, false, MA_motion_percentage_b_exp1FixedCount));
    }

    // MA_motion_percentage_b_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_b_exp2", ParameterParserDataType::Float, true, false, MA_motion_percentage_b_exp2FixedCount));
    }

    // MA_motion_percentage_b_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_percentage_b_exp3", ParameterParserDataType::Float, true, false, MA_motion_percentage_b_exp3FixedCount));
    }

    return __result;
}

bool motion_adaption_table_data_type::MA_motion_tolerance_range_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp0") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_luma_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp1") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_luma_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp2") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_luma_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp3") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_luma_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_luma_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp0") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_r_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp1") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_r_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp2") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_r_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp3") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_r_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_r_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp0") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp0FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_b_exp0FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp1") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp1FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_b_exp1FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp2") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp2FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_b_exp2FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp3") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp3FixedCount)
        {
            ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_tolerance_range_b_exp3FixedCount; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_tolerance_range_b_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool motion_adaption_table_data_type::MA_motion_tolerance_range_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp0") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_luma_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_luma_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_luma_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp1") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_luma_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_luma_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_luma_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp2") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_luma_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_luma_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_luma_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_luma_exp3") == 0)
    {
        if (__index < MA_motion_tolerance_range_luma_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_luma_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_luma_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_luma_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp0") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_r_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_r_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_r_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp1") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_r_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_r_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_r_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp2") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_r_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_r_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_r_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_r_exp3") == 0)
    {
        if (__index < MA_motion_tolerance_range_r_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_r_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_r_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_r_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp0") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp0FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_b_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_b_exp0FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_b_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp1") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp1FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_b_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_b_exp1FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_b_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp2") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp2FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_b_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_b_exp2FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_b_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_tolerance_range_b_exp3") == 0)
    {
        if (__index < MA_motion_tolerance_range_b_exp3FixedCount)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_tolerance_range_b_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_tolerance_range_b_exp3FixedCount)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_tolerance_range_b_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool motion_adaption_table_data_type::MA_motion_tolerance_range_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_motion_tolerance_range_luma_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_luma_exp0", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_luma_exp0FixedCount));
    }

    // MA_motion_tolerance_range_luma_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_luma_exp1", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_luma_exp1FixedCount));
    }

    // MA_motion_tolerance_range_luma_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_luma_exp2", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_luma_exp2FixedCount));
    }

    // MA_motion_tolerance_range_luma_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_luma_exp3", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_luma_exp3FixedCount));
    }

    // MA_motion_tolerance_range_r_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_r_exp0", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_r_exp0FixedCount));
    }

    // MA_motion_tolerance_range_r_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_r_exp1", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_r_exp1FixedCount));
    }

    // MA_motion_tolerance_range_r_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_r_exp2", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_r_exp2FixedCount));
    }

    // MA_motion_tolerance_range_r_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_r_exp3", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_r_exp3FixedCount));
    }

    // MA_motion_tolerance_range_b_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_b_exp0", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_b_exp0FixedCount));
    }

    // MA_motion_tolerance_range_b_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_b_exp1", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_b_exp1FixedCount));
    }

    // MA_motion_tolerance_range_b_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_b_exp2", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_b_exp2FixedCount));
    }

    // MA_motion_tolerance_range_b_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_tolerance_range_b_exp3", ParameterParserDataType::Float, true, false, MA_motion_tolerance_range_b_exp3FixedCount));
    }

    return __result;
}

bool motion_adaption_trigger_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool motion_adaption_trigger_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool motion_adaption_trigger_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // zone_trigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone_trigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetInfo(&__path[__pos], __info);
    }

    // zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool Motion_Adaptation_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "common_MA_LUT") == 0)
    {
        __result = common_MA_LUT.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "SHDRv38_MA_LUT") == 0)
    {
        __result = SHDRv38_MA_LUT.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool Motion_Adaptation_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "common_MA_LUT") == 0)
    {
        __result = common_MA_LUT.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "SHDRv38_MA_LUT") == 0)
    {
        __result = SHDRv38_MA_LUT.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool Motion_Adaptation_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // common_MA_LUT
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("common_MA_LUT", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "common_MA_LUT") == 0)
    {
        __result = common_MA_LUT.GetInfo(&__path[__pos], __info);
    }

    // SHDRv38_MA_LUT
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("SHDRv38_MA_LUT", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "SHDRv38_MA_LUT") == 0)
    {
        __result = SHDRv38_MA_LUT.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool Motion_Adaptation_data_type::common_MA_LUTStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_morphology") == 0)
    {
        ParameterUtils::DoubleToString((double)MA_morphology, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_tab") == 0)
    {
        __result = MA_motion_factor_tab.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool Motion_Adaptation_data_type::common_MA_LUTStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_morphology") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            MA_morphology = (UINT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_tab") == 0)
    {
        __result = MA_motion_factor_tab.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool Motion_Adaptation_data_type::common_MA_LUTStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_morphology
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_morphology", ParameterParserDataType::UInt32, (double)MA_morphology, 0));
    }
    else if (PARAMETER_STRCMP(__name, "MA_morphology") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::UInt32, (double)MA_morphology, 0));
    }

    // MA_motion_factor_tab
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_factor_tab", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_tab") == 0)
    {
        __result = MA_motion_factor_tab.GetInfo(&__path[__pos], __info);
    }

    // exp_ratio_zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_zone", ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
        }
    }

    return __result;
}

bool Motion_Adaptation_data_type::common_MA_LUTStruct::MA_motion_factor_tabStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp0") == 0)
    {
        if (__index < MA_motion_factor_exp0Count)
        {
            ParameterUtils::DoubleToString((double)MA_motion_factor_exp0[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_factor_exp0Count; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_factor_exp0[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp1") == 0)
    {
        if (__index < MA_motion_factor_exp1Count)
        {
            ParameterUtils::DoubleToString((double)MA_motion_factor_exp1[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_factor_exp1Count; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_factor_exp1[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp2") == 0)
    {
        if (__index < MA_motion_factor_exp2Count)
        {
            ParameterUtils::DoubleToString((double)MA_motion_factor_exp2[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_factor_exp2Count; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_factor_exp2[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp3") == 0)
    {
        if (__index < MA_motion_factor_exp3Count)
        {
            ParameterUtils::DoubleToString((double)MA_motion_factor_exp3[__index], __value, __size);
            __result = true;
        }
        else
        {
            SIZE_T __valuePos = 0;
            for (UINT32 i = 0; i < MA_motion_factor_exp3Count; i++)
            {
                if (i > 0)
                {
                    PARAMETER_STRCAT(__value, __size, ",");
                    __valuePos = PARAMETER_STRLEN(__value);
                }
                ParameterUtils::DoubleToString((double)MA_motion_factor_exp3[i], &__value[__valuePos], (INT32)(__size - __valuePos));
            }
            __result = true;
        }
    }

    return __result;
}

bool Motion_Adaptation_data_type::common_MA_LUTStruct::MA_motion_factor_tabStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp0") == 0)
    {
        if (__index < MA_motion_factor_exp0Count)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_factor_exp0[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_factor_exp0Count)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_factor_exp0[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp1") == 0)
    {
        if (__index < MA_motion_factor_exp1Count)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_factor_exp1[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_factor_exp1Count)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_factor_exp1[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp2") == 0)
    {
        if (__index < MA_motion_factor_exp2Count)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_factor_exp2[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_factor_exp2Count)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_factor_exp2[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }
    else if (PARAMETER_STRCMP(__name, "MA_motion_factor_exp3") == 0)
    {
        if (__index < MA_motion_factor_exp3Count)
        {
            const double dblValue = ParameterUtils::StringToDouble(__value, __result);
            if (__result)
            {
                MA_motion_factor_exp3[__index] = (float)dblValue; 
            }
        }
        else
        {
            const SIZE_T __valueLen = PARAMETER_STRLEN(__value);
            UINT32 __valuePos = 0;

            __index = 0;
            while (__valuePos < __valueLen && __index < MA_motion_factor_exp3Count)
            {
                CHAR __valueStr[MAX_SIZE];

                __valuePos += ParameterUtils::GetSubString(&__value[__valuePos], ',', __valueStr, MAX_SIZE);
                __valuePos++;

                const double dblValue = ParameterUtils::StringToDouble(__valueStr, __result);
                if (__result)
                {
                    MA_motion_factor_exp3[__index] = (float)dblValue; 
                }
                __index++;
            }
            __result = true;
        }
    }

    return __result;
}

bool Motion_Adaptation_data_type::common_MA_LUTStruct::MA_motion_factor_tabStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // MA_motion_factor_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_factor_exp0", ParameterParserDataType::Float, true, false, MA_motion_factor_exp0Count));
    }

    // MA_motion_factor_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_factor_exp1", ParameterParserDataType::Float, true, false, MA_motion_factor_exp1Count));
    }

    // MA_motion_factor_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_factor_exp2", ParameterParserDataType::Float, true, false, MA_motion_factor_exp2Count));
    }

    // MA_motion_factor_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("MA_motion_factor_exp3", ParameterParserDataType::Float, true, false, MA_motion_factor_exp3Count));
    }

    return __result;
}

bool Motion_Adaptation_data_type::SHDRv38_MA_LUTStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool Motion_Adaptation_data_type::SHDRv38_MA_LUTStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool Motion_Adaptation_data_type::SHDRv38_MA_LUTStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // exp_ratio_zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_zone", ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
        }
    }

    return __result;
}

bool fusion_table_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "LUMA_th1_exp0") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th1_exp0, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp1") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th1_exp1, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp2") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th1_exp2, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp3") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th1_exp3, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp0") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th2_exp0, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp1") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th2_exp1, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp2") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th2_exp2, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp3") == 0)
    {
        ParameterUtils::DoubleToString((double)LUMA_th2_exp3, __value, __size);
        __result = true;
    }

    return __result;
}

bool fusion_table_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "LUMA_th1_exp0") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th1_exp0 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp1") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th1_exp1 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp2") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th1_exp2 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp3") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th1_exp3 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp0") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th2_exp0 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp1") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th2_exp1 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp2") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th2_exp2 = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp3") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            LUMA_th2_exp3 = (float)dblValue; 
        }
    }

    return __result;
}

bool fusion_table_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // LUMA_th1_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th1_exp0", ParameterParserDataType::Float, (double)LUMA_th1_exp0));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp0") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th1_exp0));
    }

    // LUMA_th1_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th1_exp1", ParameterParserDataType::Float, (double)LUMA_th1_exp1));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp1") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th1_exp1));
    }

    // LUMA_th1_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th1_exp2", ParameterParserDataType::Float, (double)LUMA_th1_exp2));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp2") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th1_exp2));
    }

    // LUMA_th1_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th1_exp3", ParameterParserDataType::Float, (double)LUMA_th1_exp3));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th1_exp3") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th1_exp3));
    }

    // LUMA_th2_exp0
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th2_exp0", ParameterParserDataType::Float, (double)LUMA_th2_exp0));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp0") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th2_exp0));
    }

    // LUMA_th2_exp1
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th2_exp1", ParameterParserDataType::Float, (double)LUMA_th2_exp1));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp1") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th2_exp1));
    }

    // LUMA_th2_exp2
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th2_exp2", ParameterParserDataType::Float, (double)LUMA_th2_exp2));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp2") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th2_exp2));
    }

    // LUMA_th2_exp3
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("LUMA_th2_exp3", ParameterParserDataType::Float, (double)LUMA_th2_exp3));
    }
    else if (PARAMETER_STRCMP(__name, "LUMA_th2_exp3") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)LUMA_th2_exp3));
    }

    return __result;
}

bool fusion_trigger_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool fusion_trigger_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool fusion_trigger_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // zone_trigger
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone_trigger", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone_trigger") == 0)
    {
        __result = zone_trigger.GetInfo(&__path[__pos], __info);
    }

    // zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("zone", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "zone") == 0)
    {
        __result = zone.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool Fusion_data_type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "luma_threshold_LUT") == 0)
    {
        __result = luma_threshold_LUT.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool Fusion_data_type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "luma_threshold_LUT") == 0)
    {
        __result = luma_threshold_LUT.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool Fusion_data_type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // luma_threshold_LUT
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("luma_threshold_LUT", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "luma_threshold_LUT") == 0)
    {
        __result = luma_threshold_LUT.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool Fusion_data_type::luma_threshold_LUTStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetValue(&__path[__pos], __value, __size);
        }
    }

    return __result;
}

bool Fusion_data_type::luma_threshold_LUTStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].SetValue(&__path[__pos], __value);
        }
    }

    return __result;
}

bool Fusion_data_type::luma_threshold_LUTStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // exp_ratio_zone
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("exp_ratio_zone", ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
    }
    else if (PARAMETER_STRCMP(__name, "exp_ratio_zone") == 0)
    {
        if (__index < exp_ratio_zoneCount)
        {
            __result = exp_ratio_zone[__index].GetInfo(&__path[__pos], __info);
        }
        else
        {
            __result = true;
            __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Structure, true, false, exp_ratio_zoneCount));
        }
    }

    return __result;
}

bool hidrx100Type::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable_section") == 0)
    {
        __result = enable_section.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "tuning_version") == 0)
    {
        __result = tuning_version.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "Fusion") == 0)
    {
        __result = Fusion.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "Motion_Adaptation") == 0)
    {
        __result = Motion_Adaptation.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "Tone_Mapping") == 0)
    {
        __result = Tone_Mapping.GetValue(&__path[__pos], __value, __size);
    }
    else if (PARAMETER_STRCMP(__name, "Flare_Correction") == 0)
    {
        __result = Flare_Correction.GetValue(&__path[__pos], __value, __size);
    }

    return __result;
}

bool hidrx100Type::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "enable_section") == 0)
    {
        __result = enable_section.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "tuning_version") == 0)
    {
        __result = tuning_version.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "Fusion") == 0)
    {
        __result = Fusion.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "Motion_Adaptation") == 0)
    {
        __result = Motion_Adaptation.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "Tone_Mapping") == 0)
    {
        __result = Tone_Mapping.SetValue(&__path[__pos], __value);
    }
    else if (PARAMETER_STRCMP(__name, "Flare_Correction") == 0)
    {
        __result = Flare_Correction.SetValue(&__path[__pos], __value);
    }

    return __result;
}

bool hidrx100Type::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    const UINT32 __pos = ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // enable_section
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("enable_section", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "enable_section") == 0)
    {
        __result = enable_section.GetInfo(&__path[__pos], __info);
    }

    // module_version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("module_version", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "module_version") == 0)
    {
        __result = module_version.GetInfo(&__path[__pos], __info);
    }

    // parameter_version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("parameter_version", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "parameter_version") == 0)
    {
        __result = parameter_version.GetInfo(&__path[__pos], __info);
    }

    // tuning_version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("tuning_version", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "tuning_version") == 0)
    {
        __result = tuning_version.GetInfo(&__path[__pos], __info);
    }

    // Fusion
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("Fusion", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "Fusion") == 0)
    {
        __result = Fusion.GetInfo(&__path[__pos], __info);
    }

    // Motion_Adaptation
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("Motion_Adaptation", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "Motion_Adaptation") == 0)
    {
        __result = Motion_Adaptation.GetInfo(&__path[__pos], __info);
    }

    // Tone_Mapping
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("Tone_Mapping", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "Tone_Mapping") == 0)
    {
        __result = Tone_Mapping.GetInfo(&__path[__pos], __info);
    }

    // Flare_Correction
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("Flare_Correction", ParameterParserDataType::Structure));
    }
    else if (PARAMETER_STRCMP(__name, "Flare_Correction") == 0)
    {
        __result = Flare_Correction.GetInfo(&__path[__pos], __info);
    }

    return __result;
}

bool hidrx100Type::enable_sectionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "shdr_enable") == 0)
    {
        ParameterUtils::DoubleToString((double)shdr_enable, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool hidrx100Type::enable_sectionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "shdr_enable") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            shdr_enable = (globalelements::enable_flag_type)dblValue; 
        }
    }

    return __result;
}

bool hidrx100Type::enable_sectionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // shdr_enable
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("shdr_enable", ParameterParserDataType::Int32, (double)shdr_enable, 0));
    }
    else if (PARAMETER_STRCMP(__name, "shdr_enable") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)shdr_enable, 0));
    }

    return __result;
}

bool hidrx100Type::module_versionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)major_revision, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)minor_revision, __value, __size, 0);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        ParameterUtils::DoubleToString((double)incr_revision, __value, __size, 0);
        __result = true;
    }

    return __result;
}

bool hidrx100Type::module_versionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            major_revision = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            minor_revision = (INT32)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            incr_revision = (INT32)dblValue; 
        }
    }

    return __result;
}

bool hidrx100Type::module_versionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // major_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("major_revision", ParameterParserDataType::Int32, (double)major_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "major_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)major_revision, 0));
    }

    // minor_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("minor_revision", ParameterParserDataType::Int32, (double)minor_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "minor_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)minor_revision, 0));
    }

    // incr_revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("incr_revision", ParameterParserDataType::Int32, (double)incr_revision, 0));
    }
    else if (PARAMETER_STRCMP(__name, "incr_revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Int32, (double)incr_revision, 0));
    }

    return __result;
}

bool hidrx100Type::parameter_versionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        PARAMETER_STRCPY(__value, __size, revision);
        __result = true;
    }

    return __result;
}

bool hidrx100Type::parameter_versionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const /*__value*/)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        // Cannot modify strings, risk of memory leaks or corruption
    }

    return __result;
}

bool hidrx100Type::parameter_versionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // revision
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("revision", ParameterParserDataType::String, revision));
    }
    else if (PARAMETER_STRCMP(__name, "revision") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::String, revision));
    }

    return __result;
}

bool hidrx100Type::tuning_versionStruct::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "version") == 0)
    {
        PARAMETER_STRCPY(__value, __size, version);
        __result = true;
    }

    return __result;
}

bool hidrx100Type::tuning_versionStruct::SetValue(
    const CHAR* const __path,
    const CHAR* const /*__value*/)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "version") == 0)
    {
        // Cannot modify strings, risk of memory leaks or corruption
    }

    return __result;
}

bool hidrx100Type::tuning_versionStruct::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // version
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("version", ParameterParserDataType::String, version));
    }
    else if (PARAMETER_STRCMP(__name, "version") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::String, version));
    }

    return __result;
}

bool trigger_pt_type_gain::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "gain_start") == 0)
    {
        ParameterUtils::DoubleToString((double)gain_start, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "gain_end") == 0)
    {
        ParameterUtils::DoubleToString((double)gain_end, __value, __size);
        __result = true;
    }

    return __result;
}

bool trigger_pt_type_gain::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "gain_start") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gain_start = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "gain_end") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            gain_end = (float)dblValue; 
        }
    }

    return __result;
}

bool trigger_pt_type_gain::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // gain_start
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gain_start", ParameterParserDataType::Float, (double)gain_start));
    }
    else if (PARAMETER_STRCMP(__name, "gain_start") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gain_start));
    }

    // gain_end
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("gain_end", ParameterParserDataType::Float, (double)gain_end));
    }
    else if (PARAMETER_STRCMP(__name, "gain_end") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)gain_end));
    }

    return __result;
}

bool trigger_pt_type_lux_idx::GetValue(
    const CHAR* const __path,
    CHAR* const       __value,
    UINT32 const      __size)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "lux_idx_start") == 0)
    {
        ParameterUtils::DoubleToString((double)lux_idx_start, __value, __size);
        __result = true;
    }
    else if (PARAMETER_STRCMP(__name, "lux_idx_end") == 0)
    {
        ParameterUtils::DoubleToString((double)lux_idx_end, __value, __size);
        __result = true;
    }

    return __result;
}

bool trigger_pt_type_lux_idx::SetValue(
    const CHAR* const __path,
    const CHAR* const __value)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    if (PARAMETER_STRCMP(__name, "lux_idx_start") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lux_idx_start = (float)dblValue; 
        }
    }
    else if (PARAMETER_STRCMP(__name, "lux_idx_end") == 0)
    {
        const double dblValue = ParameterUtils::StringToDouble(__value, __result);
        if (__result)
        {
            lux_idx_end = (float)dblValue; 
        }
    }

    return __result;
}

bool trigger_pt_type_lux_idx::GetInfo(
    const CHAR* const           __path,
    PList<ParameterParserInfo>& __info)
{
    constexpr SIZE_T MAX_SIZE = 129;
    CHAR   __name[MAX_SIZE] = "";
    UINT32 __index          = MAX_UINT;
    bool   __result         = false;

    (void)ParameterUtils::GetVariable(__path, __name, __index, MAX_SIZE);

    // lux_idx_start
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lux_idx_start", ParameterParserDataType::Float, (double)lux_idx_start));
    }
    else if (PARAMETER_STRCMP(__name, "lux_idx_start") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)lux_idx_start));
    }

    // lux_idx_end
    if (__name[0] == '\0')
    {
        __result = true;
        __info.Add(ParameterParserInfo("lux_idx_end", ParameterParserDataType::Float, (double)lux_idx_end));
    }
    else if (PARAMETER_STRCMP(__name, "lux_idx_end") == 0)
    {
        __result = true;
        __info.Add(ParameterParserInfo(nullptr, ParameterParserDataType::Float, (double)lux_idx_end));
    }

    return __result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
hidrx100TypeClass::hidrx100TypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, nullptr)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(enable_section);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(tuning_version);
    PARAMETER_INITIALIZE(Fusion);
    PARAMETER_INITIALIZE(Motion_Adaptation);
    PARAMETER_INITIALIZE(Tone_Mapping);
    PARAMETER_INITIALIZE(Flare_Correction);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
hidrx100TypeClass::hidrx100TypeClass(
    const CHAR*       name,
    ModuleData* const moduleData)
    : ParameterModule(name, MAJOR, MINOR, PATCH, moduleData)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(enable_section);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(tuning_version);
    PARAMETER_INITIALIZE(Fusion);
    PARAMETER_INITIALIZE(Motion_Adaptation);
    PARAMETER_INITIALIZE(Tone_Mapping);
    PARAMETER_INITIALIZE(Flare_Correction);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
hidrx100TypeClass::~hidrx100TypeClass()
{
    if (Loaded)
    {
        UnloadModule();
    }
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Flare_Correction_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Flare_Correction_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(FC_blc_factor);
    PARAMETER_INITIALIZE(FC_blc_up_limit);
    PARAMETER_INITIALIZE(FC_blc_reflection_lut_tab);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x90d2760c5802a988;
        entry->ReadSimpleTypeFixedArray(&FC_blc_factor, 1, localParams);
        localParams.NameHash = 0x87b79e24e84ac438;
        entry->ReadSimpleTypeFixedArray(&FC_blc_up_limit, 1, localParams);
        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xd76e9fb4d5cc63c5;
        FC_blc_reflection_lut_tab.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Flare_Correction_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        Flare_Correction_data_type* arrayPtr = (Flare_Correction_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Flare_Correction_data_type::AllocArray(
    UINT32 __count)
{
    Flare_Correction_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW Flare_Correction_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Flare_Correction_data_type_FC_blc_reflection_lut_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Flare_Correction_data_type::FC_blc_reflection_lut_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(FC_blc_reflection_lut);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xbbd967e5695e7803;
        entry->ReadSimpleTypeFixedArray<float>(FC_blc_reflection_lut, FC_blc_reflection_lutFixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Flare_Correction_data_type::FC_blc_reflection_lut_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        FC_blc_reflection_lut_tabStruct* arrayPtr = (FC_blc_reflection_lut_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Flare_Correction_data_type::FC_blc_reflection_lut_tabStruct::AllocArray(
    UINT32 __count)
{
    FC_blc_reflection_lut_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW FC_blc_reflection_lut_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load shdrv38_LTM_trigger_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void shdrv38_LTM_trigger_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(TM_desat_th);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xa7dc2ce0927fd9b9;
        entry->ReadSimpleTypeFixedArray(&TM_desat_th, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void shdrv38_LTM_trigger_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        shdrv38_LTM_trigger_data_type* arrayPtr = (shdrv38_LTM_trigger_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* shdrv38_LTM_trigger_data_type::AllocArray(
    UINT32 __count)
{
    shdrv38_LTM_trigger_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW shdrv38_LTM_trigger_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load trigger_pt_type_exp_ratio
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void trigger_pt_type_exp_ratio::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(exp_ratio_start);
    PARAMETER_INITIALIZE(exp_ratio_end);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xf777e17f5a8892d3;
        entry->ReadSimpleTypeFixedArray(&exp_ratio_start, 1, localParams);
        localParams.NameHash = 0xd9b4393d21ccb64e;
        entry->ReadSimpleTypeFixedArray(&exp_ratio_end, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void trigger_pt_type_exp_ratio::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        trigger_pt_type_exp_ratio* arrayPtr = (trigger_pt_type_exp_ratio*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* trigger_pt_type_exp_ratio::AllocArray(
    UINT32 __count)
{
    trigger_pt_type_exp_ratio* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW trigger_pt_type_exp_ratio[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load shdrv38_LTM_trigger_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void shdrv38_LTM_trigger_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(zone_trigger);
    PARAMETER_INITIALIZE(zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x9e03f9ab521536e4;
        zone_trigger.Load(localParams);
        localParams.NameHash        = 0xa279605f0bf3c9ff;
        zone.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void shdrv38_LTM_trigger_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        shdrv38_LTM_trigger_type* arrayPtr = (shdrv38_LTM_trigger_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* shdrv38_LTM_trigger_type::AllocArray(
    UINT32 __count)
{
    shdrv38_LTM_trigger_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW shdrv38_LTM_trigger_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load LTM_trigger_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void LTM_trigger_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(TM_strength);
    PARAMETER_INITIALIZE(TM_bright_compression);
    PARAMETER_INITIALIZE(TM_dark_boost);
    PARAMETER_INITIALIZE(TM_contrast_pos_strength_tab);
    PARAMETER_INITIALIZE(TM_contrast_neg_strength_tab);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xa03446a0a21193fd;
        entry->ReadSimpleTypeFixedArray(&TM_strength, 1, localParams);
        localParams.NameHash = 0xd2186bd759ad0f56;
        entry->ReadSimpleTypeFixedArray(&TM_bright_compression, 1, localParams);
        localParams.NameHash = 0xc136da73dfe2feeb;
        entry->ReadSimpleTypeFixedArray(&TM_dark_boost, 1, localParams);
        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xff8ff42bfd9f9dba;
        TM_contrast_pos_strength_tab.Load(localParams);
        localParams.NameHash        = 0x980c4fd1bafe0616;
        TM_contrast_neg_strength_tab.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void LTM_trigger_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        LTM_trigger_data_type* arrayPtr = (LTM_trigger_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* LTM_trigger_data_type::AllocArray(
    UINT32 __count)
{
    LTM_trigger_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW LTM_trigger_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load LTM_trigger_data_type_TM_contrast_pos_strength_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void LTM_trigger_data_type::TM_contrast_pos_strength_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(TM_contrast_pos_strength);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xa76361bacb7b66cf;
        entry->ReadSimpleTypeFixedArray<float>(TM_contrast_pos_strength, TM_contrast_pos_strengthFixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void LTM_trigger_data_type::TM_contrast_pos_strength_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        TM_contrast_pos_strength_tabStruct* arrayPtr = (TM_contrast_pos_strength_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* LTM_trigger_data_type::TM_contrast_pos_strength_tabStruct::AllocArray(
    UINT32 __count)
{
    TM_contrast_pos_strength_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW TM_contrast_pos_strength_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load LTM_trigger_data_type_TM_contrast_neg_strength_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void LTM_trigger_data_type::TM_contrast_neg_strength_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(TM_contrast_neg_strength);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xfb3be5ec8a4de4c8;
        entry->ReadSimpleTypeFixedArray<float>(TM_contrast_neg_strength, TM_contrast_neg_strengthFixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void LTM_trigger_data_type::TM_contrast_neg_strength_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        TM_contrast_neg_strength_tabStruct* arrayPtr = (TM_contrast_neg_strength_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* LTM_trigger_data_type::TM_contrast_neg_strength_tabStruct::AllocArray(
    UINT32 __count)
{
    TM_contrast_neg_strength_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW TM_contrast_neg_strength_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load LTM_trigger_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void LTM_trigger_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(zone_trigger);
    PARAMETER_INITIALIZE(zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x9e03f9ab521536e4;
        zone_trigger.Load(localParams);
        localParams.NameHash        = 0xa279605f0bf3c9ff;
        zone.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void LTM_trigger_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        LTM_trigger_type* arrayPtr = (LTM_trigger_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* LTM_trigger_type::AllocArray(
    UINT32 __count)
{
    LTM_trigger_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW LTM_trigger_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load GTM_trigger_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GTM_trigger_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(TM_gamma);
    PARAMETER_INITIALIZE(TM_sat_adjustment);
    PARAMETER_INITIALIZE(TM_cs_blending);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x8aea65bfa230a634;
        entry->ReadSimpleTypeFixedArray(&TM_gamma, 1, localParams);
        localParams.NameHash = 0xec6fd865bfe01e87;
        entry->ReadSimpleTypeFixedArray(&TM_sat_adjustment, 1, localParams);
        localParams.NameHash = 0xefff4ebe51ffed03;
        entry->ReadSimpleTypeFixedArray(&TM_cs_blending, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void GTM_trigger_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        GTM_trigger_data_type* arrayPtr = (GTM_trigger_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* GTM_trigger_data_type::AllocArray(
    UINT32 __count)
{
    GTM_trigger_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW GTM_trigger_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load GTM_trigger_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void GTM_trigger_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(zone_trigger);
    PARAMETER_INITIALIZE(zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x9e03f9ab521536e4;
        zone_trigger.Load(localParams);
        localParams.NameHash        = 0xa279605f0bf3c9ff;
        zone.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void GTM_trigger_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        GTM_trigger_type* arrayPtr = (GTM_trigger_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* GTM_trigger_type::AllocArray(
    UINT32 __count)
{
    GTM_trigger_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW GTM_trigger_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Tone_Mapping_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(GTM);
    PARAMETER_INITIALIZE(LTM);
    PARAMETER_INITIALIZE(SHDRv38_LTM);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xe231749651435f06;
        GTM.Load(localParams);
        localParams.NameHash        = 0xbc91390f238b7115;
        LTM.Load(localParams);
        localParams.NameHash        = 0xe02c5313df39a627;
        SHDRv38_LTM.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Tone_Mapping_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        Tone_Mapping_data_type* arrayPtr = (Tone_Mapping_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Tone_Mapping_data_type::AllocArray(
    UINT32 __count)
{
    Tone_Mapping_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW Tone_Mapping_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Tone_Mapping_data_type_GTMStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::GTMStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(exp_ratio_zoneCount);
    PARAMETER_INITIALIZE(exp_ratio_zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xdd06a80a69adbc18;
        entry->ReadStructureArray(exp_ratio_zone, exp_ratio_zoneCount, exp_ratio_zoneID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Tone_Mapping_data_type::GTMStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        GTMStruct* arrayPtr = (GTMStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Tone_Mapping_data_type::GTMStruct::AllocArray(
    UINT32 __count)
{
    GTMStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW GTMStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Tone_Mapping_data_type_LTMStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::LTMStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(exp_ratio_zoneCount);
    PARAMETER_INITIALIZE(exp_ratio_zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xdd06a80a69adbc18;
        entry->ReadStructureArray(exp_ratio_zone, exp_ratio_zoneCount, exp_ratio_zoneID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Tone_Mapping_data_type::LTMStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        LTMStruct* arrayPtr = (LTMStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Tone_Mapping_data_type::LTMStruct::AllocArray(
    UINT32 __count)
{
    LTMStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW LTMStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Tone_Mapping_data_type_SHDRv38_LTMStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::SHDRv38_LTMStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(TM_perf_indicator);
    PARAMETER_INITIALIZE(TM_detail_smoothing_weight_full);
    PARAMETER_INITIALIZE(TM_detail_smoothing_weight_dc4);
    PARAMETER_INITIALIZE(exp_ratio_zoneCount);
    PARAMETER_INITIALIZE(exp_ratio_zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xa7d5f58374d4035c;
        entry->ReadSimpleTypeFixedArray(&TM_perf_indicator, 1, localParams);
        localParams.NameHash = 0xe4446c4ec6cc6e1f;
        entry->ReadSimpleTypeFixedArray(&TM_detail_smoothing_weight_full, 1, localParams);
        localParams.NameHash = 0x87a67eedfb431564;
        entry->ReadSimpleTypeFixedArray(&TM_detail_smoothing_weight_dc4, 1, localParams);
        localParams.NameHash = 0xdd06a80a69adbc18;
        entry->ReadStructureArray(exp_ratio_zone, exp_ratio_zoneCount, exp_ratio_zoneID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Tone_Mapping_data_type::SHDRv38_LTMStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        SHDRv38_LTMStruct* arrayPtr = (SHDRv38_LTMStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Tone_Mapping_data_type::SHDRv38_LTMStruct::AllocArray(
    UINT32 __count)
{
    SHDRv38_LTMStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW SHDRv38_LTMStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load shdrv38_motion_adaption_table_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void shdrv38_motion_adaption_table_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_region_tab);
    PARAMETER_INITIALIZE(MA_diff_th1_tab);
    PARAMETER_INITIALIZE(MA_diff_th2_tab);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xceeaa32e6307618c;
        MA_region_tab.Load(localParams);
        localParams.NameHash        = 0x9c079dadf0e15f0c;
        MA_diff_th1_tab.Load(localParams);
        localParams.NameHash        = 0xfadf96f0fff952f2;
        MA_diff_th2_tab.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void shdrv38_motion_adaption_table_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        shdrv38_motion_adaption_table_data_type* arrayPtr = (shdrv38_motion_adaption_table_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* shdrv38_motion_adaption_table_data_type::AllocArray(
    UINT32 __count)
{
    shdrv38_motion_adaption_table_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW shdrv38_motion_adaption_table_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load shdrv38_motion_adaption_table_data_type_MA_region_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void shdrv38_motion_adaption_table_data_type::MA_region_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_region_exp0);
    PARAMETER_INITIALIZE(MA_region_exp1);
    PARAMETER_INITIALIZE(MA_region_exp2);
    PARAMETER_INITIALIZE(MA_region_exp3);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x8c425bac6445243c;
        entry->ReadSimpleTypeFixedArray<float>(MA_region_exp0, MA_region_exp0FixedCount,
            localParams);
        localParams.NameHash = 0xb4a631736f7e8fc6;
        entry->ReadSimpleTypeFixedArray<float>(MA_region_exp1, MA_region_exp1FixedCount,
            localParams);
        localParams.NameHash = 0xfd8a8e12723273c8;
        entry->ReadSimpleTypeFixedArray<float>(MA_region_exp2, MA_region_exp2FixedCount,
            localParams);
        localParams.NameHash = 0xc56ee4cd7909d832;
        entry->ReadSimpleTypeFixedArray<float>(MA_region_exp3, MA_region_exp3FixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void shdrv38_motion_adaption_table_data_type::MA_region_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        MA_region_tabStruct* arrayPtr = (MA_region_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* shdrv38_motion_adaption_table_data_type::MA_region_tabStruct::AllocArray(
    UINT32 __count)
{
    MA_region_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW MA_region_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load shdrv38_motion_adaption_table_data_type_MA_diff_th1_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void shdrv38_motion_adaption_table_data_type::MA_diff_th1_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_diff_th1_exp0);
    PARAMETER_INITIALIZE(MA_diff_th1_exp1);
    PARAMETER_INITIALIZE(MA_diff_th1_exp2);
    PARAMETER_INITIALIZE(MA_diff_th1_exp3);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xd2395ff34fd73660;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th1_exp0, MA_diff_th1_exp0FixedCount,
            localParams);
        localParams.NameHash = 0xeadd352c44ec9d9a;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th1_exp1, MA_diff_th1_exp1FixedCount,
            localParams);
        localParams.NameHash = 0xa3f18a4d59a06194;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th1_exp2, MA_diff_th1_exp2FixedCount,
            localParams);
        localParams.NameHash = 0x9b15e092529bca6e;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th1_exp3, MA_diff_th1_exp3FixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void shdrv38_motion_adaption_table_data_type::MA_diff_th1_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        MA_diff_th1_tabStruct* arrayPtr = (MA_diff_th1_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* shdrv38_motion_adaption_table_data_type::MA_diff_th1_tabStruct::AllocArray(
    UINT32 __count)
{
    MA_diff_th1_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW MA_diff_th1_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load shdrv38_motion_adaption_table_data_type_MA_diff_th2_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void shdrv38_motion_adaption_table_data_type::MA_diff_th2_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_diff_th2_exp0);
    PARAMETER_INITIALIZE(MA_diff_th2_exp1);
    PARAMETER_INITIALIZE(MA_diff_th2_exp2);
    PARAMETER_INITIALIZE(MA_diff_th2_exp3);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xfa7228b71db7db2c;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th2_exp0, MA_diff_th2_exp0FixedCount,
            localParams);
        localParams.NameHash = 0xc2964268168c70d6;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th2_exp1, MA_diff_th2_exp1FixedCount,
            localParams);
        localParams.NameHash = 0x8bbafd090bc08cd8;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th2_exp2, MA_diff_th2_exp2FixedCount,
            localParams);
        localParams.NameHash = 0xb35e97d600fb2722;
        entry->ReadSimpleTypeFixedArray<float>(MA_diff_th2_exp3, MA_diff_th2_exp3FixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void shdrv38_motion_adaption_table_data_type::MA_diff_th2_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        MA_diff_th2_tabStruct* arrayPtr = (MA_diff_th2_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* shdrv38_motion_adaption_table_data_type::MA_diff_th2_tabStruct::AllocArray(
    UINT32 __count)
{
    MA_diff_th2_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW MA_diff_th2_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load shdrv38_motion_adaption_trigger_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void shdrv38_motion_adaption_trigger_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(zone_trigger);
    PARAMETER_INITIALIZE(zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x9e03f9ab521536e4;
        zone_trigger.Load(localParams);
        localParams.NameHash        = 0xa279605f0bf3c9ff;
        zone.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void shdrv38_motion_adaption_trigger_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        shdrv38_motion_adaption_trigger_type* arrayPtr = (shdrv38_motion_adaption_trigger_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* shdrv38_motion_adaption_trigger_type::AllocArray(
    UINT32 __count)
{
    shdrv38_motion_adaption_trigger_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW shdrv38_motion_adaption_trigger_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motion_adaption_table_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void motion_adaption_table_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_motion_percentage_tab);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_tab);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xf7b4514a7de98272;
        MA_motion_percentage_tab.Load(localParams);
        localParams.NameHash        = 0x80c451d87d2857fd;
        MA_motion_tolerance_range_tab.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void motion_adaption_table_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        motion_adaption_table_data_type* arrayPtr = (motion_adaption_table_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* motion_adaption_table_data_type::AllocArray(
    UINT32 __count)
{
    motion_adaption_table_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW motion_adaption_table_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motion_adaption_table_data_type_MA_motion_percentage_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void motion_adaption_table_data_type::MA_motion_percentage_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_motion_percentage_luma_exp0);
    PARAMETER_INITIALIZE(MA_motion_percentage_luma_exp1);
    PARAMETER_INITIALIZE(MA_motion_percentage_luma_exp2);
    PARAMETER_INITIALIZE(MA_motion_percentage_luma_exp3);
    PARAMETER_INITIALIZE(MA_motion_percentage_r_exp0);
    PARAMETER_INITIALIZE(MA_motion_percentage_r_exp1);
    PARAMETER_INITIALIZE(MA_motion_percentage_r_exp2);
    PARAMETER_INITIALIZE(MA_motion_percentage_r_exp3);
    PARAMETER_INITIALIZE(MA_motion_percentage_b_exp0);
    PARAMETER_INITIALIZE(MA_motion_percentage_b_exp1);
    PARAMETER_INITIALIZE(MA_motion_percentage_b_exp2);
    PARAMETER_INITIALIZE(MA_motion_percentage_b_exp3);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x8a66860dafc94d57;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_luma_exp0, MA_motion_percentage_luma_exp0FixedCount,
            localParams);
        localParams.NameHash = 0xb282ecd2a4f2e6ad;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_luma_exp1, MA_motion_percentage_luma_exp1FixedCount,
            localParams);
        localParams.NameHash = 0xfbae53b3b9be1aa3;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_luma_exp2, MA_motion_percentage_luma_exp2FixedCount,
            localParams);
        localParams.NameHash = 0xc34a396cb285b159;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_luma_exp3, MA_motion_percentage_luma_exp3FixedCount,
            localParams);
        localParams.NameHash = 0xa04808cf9e95eb94;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_r_exp0, MA_motion_percentage_r_exp0FixedCount,
            localParams);
        localParams.NameHash = 0x98ac621095ae406e;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_r_exp1, MA_motion_percentage_r_exp1FixedCount,
            localParams);
        localParams.NameHash = 0xd180dd7188e2bc60;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_r_exp2, MA_motion_percentage_r_exp2FixedCount,
            localParams);
        localParams.NameHash = 0xe964b7ae83d9179a;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_r_exp3, MA_motion_percentage_r_exp3FixedCount,
            localParams);
        localParams.NameHash = 0xd15821c7b9a0cba0;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_b_exp0, MA_motion_percentage_b_exp0FixedCount,
            localParams);
        localParams.NameHash = 0xe9bc4b18b29b605a;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_b_exp1, MA_motion_percentage_b_exp1FixedCount,
            localParams);
        localParams.NameHash = 0xa090f479afd79c54;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_b_exp2, MA_motion_percentage_b_exp2FixedCount,
            localParams);
        localParams.NameHash = 0x98749ea6a4ec37ae;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_percentage_b_exp3, MA_motion_percentage_b_exp3FixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void motion_adaption_table_data_type::MA_motion_percentage_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        MA_motion_percentage_tabStruct* arrayPtr = (MA_motion_percentage_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* motion_adaption_table_data_type::MA_motion_percentage_tabStruct::AllocArray(
    UINT32 __count)
{
    MA_motion_percentage_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW MA_motion_percentage_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motion_adaption_table_data_type_MA_motion_tolerance_range_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void motion_adaption_table_data_type::MA_motion_tolerance_range_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_luma_exp0);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_luma_exp1);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_luma_exp2);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_luma_exp3);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_r_exp0);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_r_exp1);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_r_exp2);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_r_exp3);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_b_exp0);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_b_exp1);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_b_exp2);
    PARAMETER_INITIALIZE(MA_motion_tolerance_range_b_exp3);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xe2112843887024d2;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_luma_exp0, MA_motion_tolerance_range_luma_exp0FixedCount,
            localParams);
        localParams.NameHash = 0xdaf5429c834b8f28;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_luma_exp1, MA_motion_tolerance_range_luma_exp1FixedCount,
            localParams);
        localParams.NameHash = 0x93d9fdfd9e077326;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_luma_exp2, MA_motion_tolerance_range_luma_exp2FixedCount,
            localParams);
        localParams.NameHash = 0xab3d9722953cd8dc;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_luma_exp3, MA_motion_tolerance_range_luma_exp3FixedCount,
            localParams);
        localParams.NameHash = 0xceec1d4e35ec688c;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_r_exp0, MA_motion_tolerance_range_r_exp0FixedCount,
            localParams);
        localParams.NameHash = 0xf60877913ed7c376;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_r_exp1, MA_motion_tolerance_range_r_exp1FixedCount,
            localParams);
        localParams.NameHash = 0xbf24c8f0239b3f78;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_r_exp2, MA_motion_tolerance_range_r_exp2FixedCount,
            localParams);
        localParams.NameHash = 0x87c0a22f28a09482;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_r_exp3, MA_motion_tolerance_range_r_exp3FixedCount,
            localParams);
        localParams.NameHash = 0xbffc344612d948b8;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_b_exp0, MA_motion_tolerance_range_b_exp0FixedCount,
            localParams);
        localParams.NameHash = 0x87185e9919e2e342;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_b_exp1, MA_motion_tolerance_range_b_exp1FixedCount,
            localParams);
        localParams.NameHash = 0xce34e1f804ae1f4c;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_b_exp2, MA_motion_tolerance_range_b_exp2FixedCount,
            localParams);
        localParams.NameHash = 0xf6d08b270f95b4b6;
        entry->ReadSimpleTypeFixedArray<float>(MA_motion_tolerance_range_b_exp3, MA_motion_tolerance_range_b_exp3FixedCount,
            localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void motion_adaption_table_data_type::MA_motion_tolerance_range_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        MA_motion_tolerance_range_tabStruct* arrayPtr = (MA_motion_tolerance_range_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* motion_adaption_table_data_type::MA_motion_tolerance_range_tabStruct::AllocArray(
    UINT32 __count)
{
    MA_motion_tolerance_range_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW MA_motion_tolerance_range_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load motion_adaption_trigger_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void motion_adaption_trigger_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(zone_trigger);
    PARAMETER_INITIALIZE(zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x9e03f9ab521536e4;
        zone_trigger.Load(localParams);
        localParams.NameHash        = 0xa279605f0bf3c9ff;
        zone.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void motion_adaption_trigger_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        motion_adaption_trigger_type* arrayPtr = (motion_adaption_trigger_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* motion_adaption_trigger_type::AllocArray(
    UINT32 __count)
{
    motion_adaption_trigger_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW motion_adaption_trigger_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Motion_Adaptation_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(common_MA_LUT);
    PARAMETER_INITIALIZE(SHDRv38_MA_LUT);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xe62cf30b80469703;
        common_MA_LUT.Load(localParams);
        localParams.NameHash        = 0x92ab48ac91797805;
        SHDRv38_MA_LUT.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Motion_Adaptation_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        Motion_Adaptation_data_type* arrayPtr = (Motion_Adaptation_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Motion_Adaptation_data_type::AllocArray(
    UINT32 __count)
{
    Motion_Adaptation_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW Motion_Adaptation_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Motion_Adaptation_data_type_common_MA_LUTStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::common_MA_LUTStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_morphology);
    PARAMETER_INITIALIZE(MA_motion_factor_tab);
    PARAMETER_INITIALIZE(exp_ratio_zoneCount);
    PARAMETER_INITIALIZE(exp_ratio_zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xe719ff8cfbb5c20d;
        entry->ReadSimpleTypeFixedArray(&MA_morphology, 1, localParams);
        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xc9729b7e251dae05;
        MA_motion_factor_tab.Load(localParams);
        localParams.NameHash = 0xdd06a80a69adbc18;
        entry->ReadStructureArray(exp_ratio_zone, exp_ratio_zoneCount, exp_ratio_zoneID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Motion_Adaptation_data_type::common_MA_LUTStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        common_MA_LUTStruct* arrayPtr = (common_MA_LUTStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Motion_Adaptation_data_type::common_MA_LUTStruct::AllocArray(
    UINT32 __count)
{
    common_MA_LUTStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW common_MA_LUTStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Motion_Adaptation_data_type_common_MA_LUTStruct_MA_motion_factor_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::common_MA_LUTStruct::MA_motion_factor_tabStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(MA_motion_factor_exp0Count);
    PARAMETER_INITIALIZE(MA_motion_factor_exp0);
    PARAMETER_INITIALIZE(MA_motion_factor_exp1Count);
    PARAMETER_INITIALIZE(MA_motion_factor_exp1);
    PARAMETER_INITIALIZE(MA_motion_factor_exp2Count);
    PARAMETER_INITIALIZE(MA_motion_factor_exp2);
    PARAMETER_INITIALIZE(MA_motion_factor_exp3Count);
    PARAMETER_INITIALIZE(MA_motion_factor_exp3);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xba489f3b7fff71fc;
        entry->ReadSimpleTypeArray(MA_motion_factor_exp0, MA_motion_factor_exp0Count, MA_motion_factor_exp0ID, 1,
            localParams, __COUNTER__);
        localParams.NameHash = 0x82acf5e474c4da06;
        entry->ReadSimpleTypeArray(MA_motion_factor_exp1, MA_motion_factor_exp1Count, MA_motion_factor_exp1ID, 1,
            localParams, __COUNTER__);
        localParams.NameHash = 0xcb804a8569882608;
        entry->ReadSimpleTypeArray(MA_motion_factor_exp2, MA_motion_factor_exp2Count, MA_motion_factor_exp2ID, 1,
            localParams, __COUNTER__);
        localParams.NameHash = 0xf364205a62b38df2;
        entry->ReadSimpleTypeArray(MA_motion_factor_exp3, MA_motion_factor_exp3Count, MA_motion_factor_exp3ID, 1,
            localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Motion_Adaptation_data_type::common_MA_LUTStruct::MA_motion_factor_tabStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        MA_motion_factor_tabStruct* arrayPtr = (MA_motion_factor_tabStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Motion_Adaptation_data_type::common_MA_LUTStruct::MA_motion_factor_tabStruct::AllocArray(
    UINT32 __count)
{
    MA_motion_factor_tabStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW MA_motion_factor_tabStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Motion_Adaptation_data_type_SHDRv38_MA_LUTStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::SHDRv38_MA_LUTStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(exp_ratio_zoneCount);
    PARAMETER_INITIALIZE(exp_ratio_zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xdd06a80a69adbc18;
        entry->ReadStructureArray(exp_ratio_zone, exp_ratio_zoneCount, exp_ratio_zoneID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Motion_Adaptation_data_type::SHDRv38_MA_LUTStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        SHDRv38_MA_LUTStruct* arrayPtr = (SHDRv38_MA_LUTStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Motion_Adaptation_data_type::SHDRv38_MA_LUTStruct::AllocArray(
    UINT32 __count)
{
    SHDRv38_MA_LUTStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW SHDRv38_MA_LUTStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load fusion_table_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void fusion_table_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(LUMA_th1_exp0);
    PARAMETER_INITIALIZE(LUMA_th1_exp1);
    PARAMETER_INITIALIZE(LUMA_th1_exp2);
    PARAMETER_INITIALIZE(LUMA_th1_exp3);
    PARAMETER_INITIALIZE(LUMA_th2_exp0);
    PARAMETER_INITIALIZE(LUMA_th2_exp1);
    PARAMETER_INITIALIZE(LUMA_th2_exp2);
    PARAMETER_INITIALIZE(LUMA_th2_exp3);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x8a00da2542aef052;
        entry->ReadSimpleTypeFixedArray(&LUMA_th1_exp0, 1, localParams);
        localParams.NameHash = 0xb2e4b0fa49955ba8;
        entry->ReadSimpleTypeFixedArray(&LUMA_th1_exp1, 1, localParams);
        localParams.NameHash = 0xfbc80f9b54d9a7a6;
        entry->ReadSimpleTypeFixedArray(&LUMA_th1_exp2, 1, localParams);
        localParams.NameHash = 0xc32c65445fe20c5c;
        entry->ReadSimpleTypeFixedArray(&LUMA_th1_exp3, 1, localParams);
        localParams.NameHash = 0xa24bad6110ce1d1e;
        entry->ReadSimpleTypeFixedArray(&LUMA_th2_exp0, 1, localParams);
        localParams.NameHash = 0x9aafc7be1bf5b6e4;
        entry->ReadSimpleTypeFixedArray(&LUMA_th2_exp1, 1, localParams);
        localParams.NameHash = 0xd38378df06b94aea;
        entry->ReadSimpleTypeFixedArray(&LUMA_th2_exp2, 1, localParams);
        localParams.NameHash = 0xeb6712000d82e110;
        entry->ReadSimpleTypeFixedArray(&LUMA_th2_exp3, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void fusion_table_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        fusion_table_data_type* arrayPtr = (fusion_table_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* fusion_table_data_type::AllocArray(
    UINT32 __count)
{
    fusion_table_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW fusion_table_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load fusion_trigger_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void fusion_trigger_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(zone_trigger);
    PARAMETER_INITIALIZE(zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0x9e03f9ab521536e4;
        zone_trigger.Load(localParams);
        localParams.NameHash        = 0xa279605f0bf3c9ff;
        zone.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void fusion_trigger_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        fusion_trigger_type* arrayPtr = (fusion_trigger_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* fusion_trigger_type::AllocArray(
    UINT32 __count)
{
    fusion_trigger_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW fusion_trigger_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Fusion_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Fusion_data_type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(luma_threshold_LUT);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xad340deaff18ee8a;
        luma_threshold_LUT.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Fusion_data_type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        Fusion_data_type* arrayPtr = (Fusion_data_type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Fusion_data_type::AllocArray(
    UINT32 __count)
{
    Fusion_data_type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW Fusion_data_type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load Fusion_data_type_luma_threshold_LUTStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Fusion_data_type::luma_threshold_LUTStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(exp_ratio_zoneCount);
    PARAMETER_INITIALIZE(exp_ratio_zone);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xdd06a80a69adbc18;
        entry->ReadStructureArray(exp_ratio_zone, exp_ratio_zoneCount, exp_ratio_zoneID, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void Fusion_data_type::luma_threshold_LUTStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        luma_threshold_LUTStruct* arrayPtr = (luma_threshold_LUTStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* Fusion_data_type::luma_threshold_LUTStruct::AllocArray(
    UINT32 __count)
{
    luma_threshold_LUTStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW luma_threshold_LUTStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load hidrx100Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(enable_section);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(tuning_version);
    PARAMETER_INITIALIZE(Fusion);
    PARAMETER_INITIALIZE(Motion_Adaptation);
    PARAMETER_INITIALIZE(Tone_Mapping);
    PARAMETER_INITIALIZE(Flare_Correction);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.UseParent       = false;
        localParams.UseParentOffset = true;
        localParams.NameHash        = 0xd52c240cf111efe4;
        enable_section.Load(localParams);
        localParams.NameHash        = 0xe11cd9f365a2599f;
        module_version.Load(localParams);
        localParams.NameHash        = 0xca3106e199a12935;
        parameter_version.Load(localParams);
        localParams.NameHash        = 0x95d5b219a447a4c6;
        tuning_version.Load(localParams);
        localParams.NameHash        = 0x857969aa476f636f;
        Fusion.Load(localParams);
        localParams.NameHash        = 0xbd62c9e59ad7c10b;
        Motion_Adaptation.Load(localParams);
        localParams.NameHash        = 0xf7ac6338d0f6a2da;
        Tone_Mapping.Load(localParams);
        localParams.NameHash        = 0xdb757ebca6822c03;
        Flare_Correction.Load(localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void hidrx100Type::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        hidrx100Type* arrayPtr = (hidrx100Type*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* hidrx100Type::AllocArray(
    UINT32 __count)
{
    hidrx100Type* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW hidrx100Type[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load enable_sectionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::enable_sectionStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(shdr_enable);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xdabf8c475e5cab93;
        entry->ReadSimpleTypeFixedArray(&shdr_enable, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void hidrx100Type::enable_sectionStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        enable_sectionStruct* arrayPtr = (enable_sectionStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* hidrx100Type::enable_sectionStruct::AllocArray(
    UINT32 __count)
{
    enable_sectionStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW enable_sectionStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::module_versionStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(major_revision);
    PARAMETER_INITIALIZE(minor_revision);
    PARAMETER_INITIALIZE(incr_revision);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xcd66249477636693;
        entry->ReadSimpleTypeFixedArray(&major_revision, 1, localParams);
        localParams.NameHash = 0xc5497493137a9c25;
        entry->ReadSimpleTypeFixedArray(&minor_revision, 1, localParams);
        localParams.NameHash = 0xb27b8a668efb2a56;
        entry->ReadSimpleTypeFixedArray(&incr_revision, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void hidrx100Type::module_versionStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        module_versionStruct* arrayPtr = (module_versionStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* hidrx100Type::module_versionStruct::AllocArray(
    UINT32 __count)
{
    module_versionStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW module_versionStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::parameter_versionStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(revision);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xd594eed07a5650c5;
        entry->ReadStringFixedArray(&revision, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void hidrx100Type::parameter_versionStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        parameter_versionStruct* arrayPtr = (parameter_versionStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* hidrx100Type::parameter_versionStruct::AllocArray(
    UINT32 __count)
{
    parameter_versionStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW parameter_versionStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load tuning_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::tuning_versionStruct::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(version);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xf74d972795cdbcde;
        entry->ReadStringFixedArray(&version, 1, localParams, __COUNTER__);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void hidrx100Type::tuning_versionStruct::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        tuning_versionStruct* arrayPtr = (tuning_versionStruct*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* hidrx100Type::tuning_versionStruct::AllocArray(
    UINT32 __count)
{
    tuning_versionStruct* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW tuning_versionStruct[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load trigger_pt_type_gain
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void trigger_pt_type_gain::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(gain_start);
    PARAMETER_INITIALIZE(gain_end);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0xc1caf9102a8c4bcd;
        entry->ReadSimpleTypeFixedArray(&gain_start, 1, localParams);
        localParams.NameHash = 0xdf4179732028dad3;
        entry->ReadSimpleTypeFixedArray(&gain_end, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void trigger_pt_type_gain::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        trigger_pt_type_gain* arrayPtr = (trigger_pt_type_gain*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* trigger_pt_type_gain::AllocArray(
    UINT32 __count)
{
    trigger_pt_type_gain* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW trigger_pt_type_gain[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load trigger_pt_type_lux_idx
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void trigger_pt_type_lux_idx::Load(
    ParameterLoadParameters& parentParams)
{
    PARAMETER_INITIALIZE(lux_idx_start);
    PARAMETER_INITIALIZE(lux_idx_end);

    ParameterFileSymbolTableEntry* const entry = parentParams.Entry;
    ParameterLoadParameters localParams(parentParams);
    localParams.Element   = nullptr;
    localParams.UseParent = false;
    localParams.Index     = 0;

    if (parentParams.Element != nullptr)
    {
        bool _posChanged = false;
        localParams.Element = entry->AdjustPositionAndGetElement(parentParams, true, _posChanged);
    }

    // If parentParams.Element != null && localParams.Element == null, then this element is not defined in the binary file.
    // If parentParams.Element == null then this binary file does not contain a definition table or
    // the full backwards compatibility feature is disabled (for memory or performance reasons)
    if (parentParams.Element == nullptr || parentParams.Element->Verified || localParams.Element != nullptr)
    {
        localParams.Position      = entry->Position;
        localParams.LoadDataLimit = entry->ReadLoadDataLimit(parentParams.LoadDataLimit);

        localParams.NameHash = 0x9400c837a72e7366;
        entry->ReadSimpleTypeFixedArray(&lux_idx_start, 1, localParams);
        localParams.NameHash = 0x8feebe8493968b4e;
        entry->ReadSimpleTypeFixedArray(&lux_idx_end, 1, localParams);

        entry->UpdatePosition(localParams.LoadDataLimit);
    }
    else
    {
        PARAMETER_LOG_ERROR(entry->Table->SetManager, "%s: 0x%llx entry not found in the binary file, all values will be 0\n",
            __FUNCTION__, parentParams.NameHash);
    }
}

void trigger_pt_type_lux_idx::LoadArray(
    ParameterLoadParameters& __params,
    void*                    __array,
    UINT32                   __count)
{
    if (__array != nullptr)
    {
        trigger_pt_type_lux_idx* arrayPtr = (trigger_pt_type_lux_idx*)__array;
        for (UINT32 i = 0; i < __count; i++)
        {
            __params.Index = i;
            arrayPtr[i].Load(__params);
        }
    }
}

void* trigger_pt_type_lux_idx::AllocArray(
    UINT32 __count)
{
    trigger_pt_type_lux_idx* result = nullptr;
    if (__count > 0)
    {
        result = PARAMETER_NEW trigger_pt_type_lux_idx[__count];
    }
    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Tone_Mapping_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::Unload(ParameterFileSymbolTable* const __table)
{
    GTM.Unload(__table);
    LTM.Unload(__table);
    SHDRv38_LTM.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Tone_Mapping_data_type_GTMStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::GTMStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, exp_ratio_zone);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Tone_Mapping_data_type_LTMStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::LTMStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, exp_ratio_zone);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Tone_Mapping_data_type_SHDRv38_LTMStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Tone_Mapping_data_type::SHDRv38_LTMStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, exp_ratio_zone);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Motion_Adaptation_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::Unload(ParameterFileSymbolTable* const __table)
{
    common_MA_LUT.Unload(__table);
    SHDRv38_MA_LUT.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Motion_Adaptation_data_type_common_MA_LUTStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::common_MA_LUTStruct::Unload(ParameterFileSymbolTable* const __table)
{
    MA_motion_factor_tab.Unload(__table);
    ParameterFileSymbolTable::ReleaseObject(__table, exp_ratio_zone);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Motion_Adaptation_data_type_common_MA_LUTStruct_MA_motion_factor_tabStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::common_MA_LUTStruct::MA_motion_factor_tabStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, MA_motion_factor_exp0);
    ParameterFileSymbolTable::ReleaseObject(__table, MA_motion_factor_exp1);
    ParameterFileSymbolTable::ReleaseObject(__table, MA_motion_factor_exp2);
    ParameterFileSymbolTable::ReleaseObject(__table, MA_motion_factor_exp3);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Motion_Adaptation_data_type_SHDRv38_MA_LUTStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Motion_Adaptation_data_type::SHDRv38_MA_LUTStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, exp_ratio_zone);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Fusion_data_type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Fusion_data_type::Unload(ParameterFileSymbolTable* const __table)
{
    luma_threshold_LUT.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload Fusion_data_type_luma_threshold_LUTStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Fusion_data_type::luma_threshold_LUTStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, exp_ratio_zone);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload hidrx100Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::Unload(ParameterFileSymbolTable* const __table)
{
    parameter_version.Unload(__table);
    tuning_version.Unload(__table);
    Fusion.Unload(__table);
    Motion_Adaptation.Unload(__table);
    Tone_Mapping.Unload(__table);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::parameter_versionStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, revision);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload tuning_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::tuning_versionStruct::Unload(ParameterFileSymbolTable* const __table)
{
    ParameterFileSymbolTable::ReleaseObject(__table, version);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Release the ParameterModule object
/// Requires that this object was created via a ParameterSetManager::GetModule call
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100Type::Release()
{
    ((hidrx100TypeClass*)this)->Release();
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Returns the ParameterModule::Modified value
/// The Modified value is incremented when the module's data or pointer values change
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
UINT32 hidrx100Type::GetModified()
{
    return ((hidrx100TypeClass*)this)->Modified;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetModuleName: Returns ParameterModule::Name variable
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* hidrx100Type::GetModuleName()
{
    return ((hidrx100TypeClass*)this)->Name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetModuleName: Returns ParameterModule::NameHash variable
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
UINT64 hidrx100Type::GetModuleNameHash()
{
    return ((hidrx100TypeClass*)this)->NameHash;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Create module, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* hidrx100TypeClass::Create(
    ModuleData* const    moduleData,
    DefaultModule* const defModule) const
{
    hidrx100TypeClass* cls = nullptr;

    if (IsModuleMatch(moduleData) && Version.Value == moduleData->Version.Value)
    {
        const UINT32 id = moduleData->DuplicateID > 0 ? moduleData->DuplicateID : moduleData->ID;

        ParameterModule* const module = defModule->Find(id);
        if (module != nullptr)
        {
            cls = (hidrx100TypeClass*)module;
        }
        else
        {
            cls = PARAMETER_NEW hidrx100TypeClass(Name, moduleData);
            cls->SymbolTableID = id;
            defModule->AddModule((ParameterModule*)cls);
        }
    }
    else if (Version.Value != moduleData->Version.Value)
    {
        PARAMETER_LOG_ERROR(moduleData->SetManager, "Unable to create hidrx100TypeClass, binary version (%lld) does not match source version (%lld)\n",
            moduleData->Version.Value, Version.Value);
    }
    else
    {
        PARAMETER_LOG_ERROR(moduleData->SetManager, "Unable to create hidrx100TypeClass, binary name hash (0x%016llx) does not match source name hash (0x%016llx)\n",
            moduleData->NameHash, NameHash);
    }

    return (ParameterModule*)cls;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module data, return true is successful
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
bool hidrx100TypeClass::LoadModule(
    ParameterFileSymbolTable* const table)
{
    bool result = true;

#ifdef PARAMETER_USE_MUTEX
    ParameterMutexLocker lock(Mutex); // Unique LOCK
#endif

    if (!Loaded)
    {
        hidrx100TypeClass* const cls = this;

        ParameterFileSymbolTableEntry  entryObj;
        ParameterFileSymbolTableEntry* const entry = &entryObj;
        // With EzTune enabled, the unused upper byte of SymbolTableID value can change, so clear it
        result = table->Find(entryObj, SymbolTableID & 0x00ffffffU);

        if (!result)
        {
            PARAMETER_LOG_ERROR(entry->Table->SetManager, "hidrx100TypeClass::LoadModule Failed to find module ID (%d) in Symbol Table\n", SymbolTableID);
        }


        ParameterDefinitionElement* _element = nullptr;
        if (table->ModuleDefinitions != nullptr && !table->ModuleDefinitions->empty())
        {
            _element = table->BuildModuleElement(NameHash);
        }

        ParameterLoadParameters parentParams(entry, NameHash, true, true, _element, entry->Position, 0, ParameterFileSymbolTableEntry::LOAD_LIMIT_MAX);
        cls->Load(parentParams);
        PARAMETER_DELETE _element;
        Modified++;
        Loaded = true;
    }

    if (!result)
    {
        /// Module failed to fully load, unload it
        UnloadModule();
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload module data
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100TypeClass::UnloadModule()
{
#ifdef PARAMETER_USE_MUTEX
    ParameterMutexLocker lock(Mutex); // Unique LOCK
#endif

    if (Loaded)
    {
        if (Data != nullptr && Data->SymbolTable != nullptr)
        {
            Unload(Data->SymbolTable);
        }
        else
        {
            PARAMETER_LOG_ERROR(Data != nullptr ? Data->SetManager : nullptr, "UnloadModule %s called with nullptr "
                "Data->SymbolTable object\n", Name);
            Unload(nullptr);
        }
        Loaded = false;
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// /// Release the ParameterModule object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void hidrx100TypeClass::Release()
{
    ParameterModule::Release();
}

HIDRX_1_0_1_NAMESPACE_END
