stop using `controller-clusters.zap` in zap_generate_all (#26948)

* separate out zap input, so we have control over it

* Switch zcl_clusters on for python

* Fix more loops to use the generic non-zap helpers

* Switch zap generate to use zcl

* update generate.py and change CHIPClientCallbacks.zapt

* Restyled by autopep8

* Fix another comment location

* Remove import from optional to make linter happy

* Skip restyling java generated files

* Run zap_regen_all

* Fix restyle path to include a glob

* Switch global callbacks to jinja

* update unit tests

* Fix global logic and codegen

* Codegen updated, validated that global callbacks is now identical

* Fix lint issue

* Update codegen logic to not depend on zap for src/controller/java/templates/ClusterInfo-java.zapt

* Also fix src/controller/java/templates/ChipClusters-java.zapt

* Use ANDROID_NDK_HOME env even for newer gradle build as the environment variable itself was deprecated (see https://github.com/android/ndk-samples/wiki/Configure-NDK-Path#android_ndk_home)

* Fixed indent a bit

* Updated comments a bit about controller-clusters.zap

* Be explicit on matter file name on codegen

* Remove duplicate output name

* Fix file path for CHIPClientCallbacks.h

* Update scripts/tools/zap_regen_all.py

Co-authored-by: Boris Zbarsky <bzbarsky@apple.com>

* Do some renames and code review updates

---------

Co-authored-by: Andrei Litvin <andreilitvin@google.com>
Co-authored-by: Restyled.io <commits@restyled.io>
Co-authored-by: Boris Zbarsky <bzbarsky@apple.com>
diff --git a/examples/android/CHIPTest/app/build.gradle b/examples/android/CHIPTest/app/build.gradle
index 3d391d8..8e37624 100644
--- a/examples/android/CHIPTest/app/build.gradle
+++ b/examples/android/CHIPTest/app/build.gradle
@@ -10,6 +10,7 @@
 android {
     compileSdkVersion 30
     buildToolsVersion "30.0.3"
+    ndkPath System.getenv("ANDROID_NDK_HOME")
 
     defaultConfig {
         applicationId "com.tcl.chip.chiptest"
diff --git a/examples/android/CHIPTool/app/build.gradle b/examples/android/CHIPTool/app/build.gradle
index 9f116f9..3689302 100644
--- a/examples/android/CHIPTool/app/build.gradle
+++ b/examples/android/CHIPTool/app/build.gradle
@@ -4,6 +4,7 @@
 
 android {
     compileSdkVersion 31
+    ndkPath System.getenv("ANDROID_NDK_HOME")
 
     ndkVersion "23.2.8568313"
 
diff --git a/scripts/py_matter_idl/matter_idl/generators/java/CHIPGlobalCallbacks_cpp.jinja b/scripts/py_matter_idl/matter_idl/generators/java/CHIPGlobalCallbacks_cpp.jinja
new file mode 100644
index 0000000..3042568
--- /dev/null
+++ b/scripts/py_matter_idl/matter_idl/generators/java/CHIPGlobalCallbacks_cpp.jinja
@@ -0,0 +1,76 @@
+#include <jni.h>
+#include <jni/CHIPReadCallbacks.h>
+#include <lib/support/JniReferences.h>
+#include <lib/support/JniTypeWrappers.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/SafeInt.h>
+#include <platform/PlatformManager.h>
+#include <controller/java/zap-generated/CHIPClientCallbacks.h>
+
+{% for type in globalTypes -%}
+{%- set typeLookup = idl | createLookupContext(None) -%}
+{%- set encodable = type.idl_type | globalAsEncodable(typeLookup) -%}
+CHIP{{type.name}}AttributeCallback::CHIP{{type.name}}AttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<{{type.name}}AttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIP{{type.name}}AttributeCallback::~CHIP{{type.name}}AttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIP{{type.name}}AttributeCallback::CallbackFn(void * context, {{type.cpp_type}} value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIP{{type.name}}AttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIP{{type.name}}AttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+  {%- if encodable.is_octet_string %}
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "([B)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+
+    VerifyOrReturn(chip::CanCastTo<uint32_t>(value.size()), ChipLogError(Zcl, "Value too long"));
+    jbyteArray valueArr = env->NewByteArray(static_cast<uint32_t>(value.size()));
+    env->ExceptionClear();
+    env->SetByteArrayRegion(valueArr, 0, static_cast<uint32_t>(value.size()), reinterpret_cast<const jbyte *>(value.data()));
+
+    env->CallVoidMethod(javaCallbackRef, javaMethod, valueArr);
+  {%- elif encodable.is_char_string %}
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Ljava/lang/String;)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+
+    chip::UtfString valueStr(env, value);
+    env->CallVoidMethod(javaCallbackRef, javaMethod, valueStr.jniValue());
+  {%- else %}
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "({{encodable.unboxed_java_signature}})V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<{{encodable.jni_fundamental_type}}>(value));
+  {%- endif %}
+}
+
+{% endfor %}
diff --git a/scripts/py_matter_idl/matter_idl/generators/java/__init__.py b/scripts/py_matter_idl/matter_idl/generators/java/__init__.py
index 8f37670..0dd602e 100644
--- a/scripts/py_matter_idl/matter_idl/generators/java/__init__.py
+++ b/scripts/py_matter_idl/matter_idl/generators/java/__init__.py
@@ -35,25 +35,26 @@
 
 @dataclasses.dataclass
 class GlobalType:
-    name: str       # java name
+    name: str      # java name
     cpp_type: str  # underlying type
+    idl_type: str  # assumed IDL type
 
 
 # types that java should see globally
 _GLOBAL_TYPES = [
-    GlobalType("Boolean", "bool"),
-    GlobalType("CharString", "const chip::CharSpan"),
-    GlobalType("Double", "double"),
-    GlobalType("Float", "float"),
-    GlobalType("Int8s", "int8_t"),
-    GlobalType("Int8u", "uint8_t"),
-    GlobalType("Int16s", "int16_t"),
-    GlobalType("Int16u", "uint16_t"),
-    GlobalType("Int32s", "int32_t"),
-    GlobalType("Int32u", "uint32_t"),
-    GlobalType("Int64s", "int64_t"),
-    GlobalType("Int64u", "uint64_t"),
-    GlobalType("OctetString", "const chip::ByteSpan"),
+    GlobalType("Boolean", "bool", "boolean"),
+    GlobalType("CharString", "const chip::CharSpan", "char_string"),
+    GlobalType("Double", "double", "double"),
+    GlobalType("Float", "float", "single"),
+    GlobalType("Int8s", "int8_t", "int8s"),
+    GlobalType("Int8u", "uint8_t", "int8u"),
+    GlobalType("Int16s", "int16_t", "int16s"),
+    GlobalType("Int16u", "uint16_t", "int16u"),
+    GlobalType("Int32s", "int32_t", "int32s"),
+    GlobalType("Int32u", "uint32_t", "int32u"),
+    GlobalType("Int64s", "int64_t", "int64s"),
+    GlobalType("Int64u", "uint64_t", "int64u"),
+    GlobalType("OctetString", "const chip::ByteSpan", "octet_string"),
 ]
 
 
@@ -424,6 +425,23 @@
         return e
 
     @property
+    def jni_fundamental_type(self):
+        java_type = self.boxed_java_type
+
+        if java_type == 'Boolean':
+            return 'jboolean'
+        elif java_type == 'Float':
+            return 'jfloat'
+        elif java_type == 'Double':
+            return 'jdouble'
+        elif java_type == 'Long':
+            return 'jlong'
+        elif java_type == 'Integer':
+            return 'jint'
+
+        raise Exception("Unknown jni fundamental type.")
+
+    @property
     def boxed_java_type(self):
         t = ParseDataType(self.data_type, self.context)
 
@@ -461,6 +479,30 @@
             return "Object"
 
     @property
+    def unboxed_java_signature(self):
+        if self.is_optional or self.is_list:
+            raise Exception("Not a basic type: %r" % self)
+
+        t = ParseDataType(self.data_type, self.context)
+
+        if isinstance(t, FundamentalType):
+            if t == FundamentalType.BOOL:
+                return "Z"
+            elif t == FundamentalType.FLOAT:
+                return "F"
+            elif t == FundamentalType.DOUBLE:
+                return "D"
+            else:
+                raise Exception("Unknown fundamental type")
+        elif isinstance(t, BasicInteger):
+            if t.byte_count >= 3:
+                return "J"
+            else:
+                return "I"
+        else:
+            raise Exception("Not a basic type: %r" % self)
+
+    @property
     def boxed_java_signature(self):
         # Optional takes precedence over list - Optional<ArrayList> compiles down to just java.util.Optional.
         if self.is_optional:
@@ -504,6 +546,13 @@
             return "Lchip/devicecontroller/ChipStructs${}Cluster{};".format(self.context.cluster.name, self.data_type.name)
 
 
+def GlobalEncodableValueFrom(typeName: str, context: TypeLookupContext) -> EncodableValue:
+    """
+    Filter to convert a global type name to an encodable value
+    """
+    return EncodableValue(context, DataType(name=typeName), {})
+
+
 def EncodableValueFrom(field: Field, context: TypeLookupContext) -> EncodableValue:
     """
     Filter to convert a standard field to an EncodableValue.
@@ -526,7 +575,7 @@
     return EncodableValue(context, field.data_type, attrs)
 
 
-def CreateLookupContext(idl: Idl, cluster: Cluster) -> TypeLookupContext:
+def CreateLookupContext(idl: Idl, cluster: Optional[Cluster]) -> TypeLookupContext:
     """
     A filter to mark a lookup context to be within a specific cluster.
 
@@ -579,6 +628,7 @@
         self.jinja_env.filters['toBoxedJavaType'] = ToBoxedJavaType
         self.jinja_env.filters['lowercaseFirst'] = LowercaseFirst
         self.jinja_env.filters['asEncodable'] = EncodableValueFrom
+        self.jinja_env.filters['globalAsEncodable'] = GlobalEncodableValueFrom
         self.jinja_env.filters['createLookupContext'] = CreateLookupContext
         self.jinja_env.filters['canGenerateSubscribe'] = CanGenerateSubscribe
         self.jinja_env.filters['decodableJniType'] = DecodableJniType
@@ -602,7 +652,9 @@
             GenerateTarget(template="CHIPCallbackTypes.jinja",
                            output_name="jni/CHIPCallbackTypes.h"),
             GenerateTarget(template="CHIPReadCallbacks_h.jinja",
-                           output_name="jni/CHIPReadCallbacks.h")
+                           output_name="jni/CHIPReadCallbacks.h"),
+            GenerateTarget(template="CHIPGlobalCallbacks_cpp.jinja",
+                           output_name="jni/CHIPGlobalCallbacks.cpp"),
         ]
 
         for target in large_targets:
diff --git a/scripts/py_matter_idl/matter_idl/tests/available_tests.yaml b/scripts/py_matter_idl/matter_idl/tests/available_tests.yaml
index c16e97b..f8f757b 100644
--- a/scripts/py_matter_idl/matter_idl/tests/available_tests.yaml
+++ b/scripts/py_matter_idl/matter_idl/tests/available_tests.yaml
@@ -16,18 +16,21 @@
         jni/MyClusterClient-InvokeSubscribeImpl.cpp: outputs/simple_attribute/jni/MyClusterClient-InvokeSubscribeImpl.cpp
         jni/CHIPCallbackTypes.h: outputs/simple_attribute/jni/CHIPCallbackTypes.h
         jni/CHIPReadCallbacks.h: outputs/simple_attribute/jni/CHIPReadReadCallbacks.h
+        jni/CHIPGlobalCallbacks.cpp: outputs/shared/jni/CHIPGlobalCallbacks.cpp
 
     inputs/global_struct_attribute.matter:
         jni/DemoClusterClient-ReadImpl.cpp: outputs/global_struct_attribute/jni/DemoClusterClient-ReadImpl.cpp
         jni/DemoClusterClient-InvokeSubscribeImpl.cpp: outputs/global_struct_attribute/jni/DemoClusterClient-InvokeSubscribeImpl.cpp
         jni/CHIPCallbackTypes.h: outputs/global_struct_attribute/jni/CHIPCallbackTypes.h
         jni/CHIPReadCallbacks.h: outputs/global_struct_attribute/jni/CHIPReadReadCallbacks.h
+        jni/CHIPGlobalCallbacks.cpp: outputs/shared/jni/CHIPGlobalCallbacks.cpp
 
     inputs/cluster_struct_attribute.matter:
         jni/DemoClusterClient-ReadImpl.cpp: outputs/cluster_struct_attribute/jni/DemoClusterClient-ReadImpl.cpp
         jni/DemoClusterClient-InvokeSubscribeImpl.cpp: outputs/cluster_struct_attribute/jni/DemoClusterClient-InvokeSubscribeImpl.cpp
         jni/CHIPCallbackTypes.h: outputs/cluster_struct_attribute/jni/CHIPCallbackTypes.h
         jni/CHIPReadCallbacks.h: outputs/cluster_struct_attribute/jni/CHIPReadReadCallbacks.h
+        jni/CHIPGlobalCallbacks.cpp: outputs/shared/jni/CHIPGlobalCallbacks.cpp
 
     inputs/several_clusters.matter:
         jni/FirstClient-ReadImpl.cpp: outputs/several_clusters/jni/FirstClient-ReadImpl.cpp
@@ -38,12 +41,14 @@
         jni/ThirdClient-InvokeSubscribeImpl.cpp: outputs/several_clusters/jni/ThirdClient-InvokeSubscribeImpl.cpp
         jni/CHIPCallbackTypes.h: outputs/several_clusters/jni/CHIPCallbackTypes.h
         jni/CHIPReadCallbacks.h: outputs/several_clusters/jni/CHIPReadReadCallbacks.h
+        jni/CHIPGlobalCallbacks.cpp: outputs/shared/jni/CHIPGlobalCallbacks.cpp
 
     inputs/optional_argument.matter:
         jni/MyClusterClient-ReadImpl.cpp: outputs/optional_argument/jni/MyClusterClient-ReadImpl.cpp
         jni/MyClusterClient-InvokeSubscribeImpl.cpp: outputs/optional_argument/jni/MyClusterClient-InvokeSubscribeImpl.cpp
         jni/CHIPCallbackTypes.h: outputs/optional_argument/jni/CHIPCallbackTypes.h
         jni/CHIPReadCallbacks.h: outputs/optional_argument/jni/CHIPReadReadCallbacks.h
+        jni/CHIPGlobalCallbacks.cpp: outputs/shared/jni/CHIPGlobalCallbacks.cpp
 
 java-class:
     inputs/several_clusters.matter:
diff --git a/scripts/py_matter_idl/matter_idl/tests/outputs/shared/jni/CHIPGlobalCallbacks.cpp b/scripts/py_matter_idl/matter_idl/tests/outputs/shared/jni/CHIPGlobalCallbacks.cpp
new file mode 100644
index 0000000..e890452
--- /dev/null
+++ b/scripts/py_matter_idl/matter_idl/tests/outputs/shared/jni/CHIPGlobalCallbacks.cpp
@@ -0,0 +1,603 @@
+#include <jni.h>
+#include <jni/CHIPReadCallbacks.h>
+#include <lib/support/JniReferences.h>
+#include <lib/support/JniTypeWrappers.h>
+#include <lib/support/CodeUtils.h>
+#include <lib/support/SafeInt.h>
+#include <platform/PlatformManager.h>
+#include <controller/java/zap-generated/CHIPClientCallbacks.h>
+
+CHIPBooleanAttributeCallback::CHIPBooleanAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<BooleanAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPBooleanAttributeCallback::~CHIPBooleanAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPBooleanAttributeCallback::CallbackFn(void * context, bool value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPBooleanAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPBooleanAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Z)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jboolean>(value));
+}
+
+CHIPCharStringAttributeCallback::CHIPCharStringAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<CharStringAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPCharStringAttributeCallback::~CHIPCharStringAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPCharStringAttributeCallback::CallbackFn(void * context, const chip::CharSpan value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPCharStringAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPCharStringAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Ljava/lang/String;)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+
+    chip::UtfString valueStr(env, value);
+    env->CallVoidMethod(javaCallbackRef, javaMethod, valueStr.jniValue());
+}
+
+CHIPDoubleAttributeCallback::CHIPDoubleAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<DoubleAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPDoubleAttributeCallback::~CHIPDoubleAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPDoubleAttributeCallback::CallbackFn(void * context, double value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPDoubleAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPDoubleAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(D)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jdouble>(value));
+}
+
+CHIPFloatAttributeCallback::CHIPFloatAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<FloatAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPFloatAttributeCallback::~CHIPFloatAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPFloatAttributeCallback::CallbackFn(void * context, float value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPFloatAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPFloatAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(F)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jfloat>(value));
+}
+
+CHIPInt8sAttributeCallback::CHIPInt8sAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int8sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt8sAttributeCallback::~CHIPInt8sAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt8sAttributeCallback::CallbackFn(void * context, int8_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt8sAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt8sAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
+}
+
+CHIPInt8uAttributeCallback::CHIPInt8uAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int8uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt8uAttributeCallback::~CHIPInt8uAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt8uAttributeCallback::CallbackFn(void * context, uint8_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt8uAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt8uAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
+}
+
+CHIPInt16sAttributeCallback::CHIPInt16sAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int16sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt16sAttributeCallback::~CHIPInt16sAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt16sAttributeCallback::CallbackFn(void * context, int16_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt16sAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt16sAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
+}
+
+CHIPInt16uAttributeCallback::CHIPInt16uAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int16uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt16uAttributeCallback::~CHIPInt16uAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt16uAttributeCallback::CallbackFn(void * context, uint16_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt16uAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt16uAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
+}
+
+CHIPInt32sAttributeCallback::CHIPInt32sAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int32sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt32sAttributeCallback::~CHIPInt32sAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt32sAttributeCallback::CallbackFn(void * context, int32_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt32sAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt32sAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
+}
+
+CHIPInt32uAttributeCallback::CHIPInt32uAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int32uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt32uAttributeCallback::~CHIPInt32uAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt32uAttributeCallback::CallbackFn(void * context, uint32_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt32uAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt32uAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
+}
+
+CHIPInt64sAttributeCallback::CHIPInt64sAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int64sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt64sAttributeCallback::~CHIPInt64sAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt64sAttributeCallback::CallbackFn(void * context, int64_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt64sAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt64sAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
+}
+
+CHIPInt64uAttributeCallback::CHIPInt64uAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<Int64uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPInt64uAttributeCallback::~CHIPInt64uAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPInt64uAttributeCallback::CallbackFn(void * context, uint64_t value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPInt64uAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPInt64uAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
+}
+
+CHIPOctetStringAttributeCallback::CHIPOctetStringAttributeCallback(jobject javaCallback, bool keepAlive) :
+    chip::Callback::Callback<OctetStringAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
+{
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+        return;
+    }
+    javaCallbackRef = env->NewGlobalRef(javaCallback);
+    if (javaCallbackRef == nullptr) {
+        ChipLogError(Zcl, "Could not create global reference for Java callback");
+    }
+}
+
+CHIPOctetStringAttributeCallback::~CHIPOctetStringAttributeCallback() {
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    if (env == nullptr)
+    {
+        ChipLogError(Zcl, "Could not delete global reference for Java callback");
+        return;
+    }
+    env->DeleteGlobalRef(javaCallbackRef);
+}
+
+void CHIPOctetStringAttributeCallback::CallbackFn(void * context, const chip::ByteSpan value)
+{
+    chip::DeviceLayer::StackUnlock unlock;
+    CHIP_ERROR err = CHIP_NO_ERROR;
+
+    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
+    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
+
+    std::unique_ptr<CHIPOctetStringAttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIPOctetStringAttributeCallback *>(context), maybeDestroy);
+
+    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a
+    // null callback.
+    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
+    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
+
+    jmethodID javaMethod;
+    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "([B)V", &javaMethod);
+    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
+
+    VerifyOrReturn(chip::CanCastTo<uint32_t>(value.size()), ChipLogError(Zcl, "Value too long"));
+    jbyteArray valueArr = env->NewByteArray(static_cast<uint32_t>(value.size()));
+    env->ExceptionClear();
+    env->SetByteArrayRegion(valueArr, 0, static_cast<uint32_t>(value.size()), reinterpret_cast<const jbyte *>(value.data()));
+
+    env->CallVoidMethod(javaCallbackRef, javaMethod, valueArr);
+}
+
+
diff --git a/scripts/tools/zap/generate.py b/scripts/tools/zap/generate.py
index 5b1f4f4..46ae0eb 100755
--- a/scripts/tools/zap/generate.py
+++ b/scripts/tools/zap/generate.py
@@ -34,7 +34,7 @@
 
 @dataclass
 class CmdLineArgs:
-    zapFile: str
+    zapFile: Optional[str]
     zclFile: str
     templateFile: str
     outputDir: str
@@ -44,6 +44,7 @@
     version_check: bool = True
     lock_file: Optional[str] = None
     delete_output_dir: bool = False
+    matter_file_name: Optional[str] = None
 
 
 CHIP_ROOT_DIR = os.path.realpath(
@@ -118,13 +119,15 @@
 
     parser = argparse.ArgumentParser(
         description='Generate artifacts from .zapt templates')
-    parser.add_argument('zap', help='Path to the application .zap file')
+    parser.add_argument('zap', nargs="?", default=None, help='Path to the application .zap file')
     parser.add_argument('-t', '--templates', default=default_templates,
                         help='Path to the .zapt templates records to use for generating artifacts (default: "' + default_templates + '")')
     parser.add_argument('-z', '--zcl',
                         help='Path to the zcl templates records to use for generating artifacts (default: autodetect read from zap file)')
     parser.add_argument('-o', '--output-dir', default=None,
                         help='Output directory for the generated files (default: a temporary directory in out)')
+    parser.add_argument('-m', '--matter-file-name', default=None,
+                        help='Where to copy any generated .matter file')
     parser.add_argument('--run-bootstrap', default=None, action='store_true',
                         help='Automatically run ZAP bootstrap. By default the bootstrap is not triggered')
     parser.add_argument('--parallel', action='store_true')
@@ -143,6 +146,7 @@
     parser.set_defaults(version_check=True)
     parser.set_defaults(lock_file=None)
     parser.set_defaults(keep_output_dir=False)
+    parser.set_defaults(matter_file_name=None)
     args = parser.parse_args()
 
     delete_output_dir = False
@@ -154,7 +158,10 @@
     else:
         output_dir = ''
 
-    zap_file = getFilePath(args.zap)
+    if args.zap:
+        zap_file = getFilePath(args.zap)
+    else:
+        zap_file = None
 
     if args.zcl:
         zcl_file = getFilePath(args.zcl)
@@ -164,6 +171,11 @@
     templates_file = getFilePath(args.templates)
     output_dir = getDirPath(output_dir)
 
+    if args.matter_file_name:
+        matter_file_name = getFilePath(args.matter_file_name)
+    else:
+        matter_file_name = None
+
     return CmdLineArgs(
         zap_file, zcl_file, templates_file, output_dir, args.run_bootstrap,
         parallel=args.parallel,
@@ -171,10 +183,24 @@
         version_check=args.version_check,
         lock_file=args.lock_file,
         delete_output_dir=delete_output_dir,
+        matter_file_name=matter_file_name,
     )
 
 
-def extractGeneratedIdl(output_dir, zap_config_path):
+def matterPathFromZapPath(zap_config_path):
+    if not zap_config_path:
+        return None
+
+    target_path = zap_config_path.replace(".zap", ".matter")
+    if not target_path.endswith(".matter"):
+        # We expect "something.zap" and don't handle corner cases of
+        # multiple extensions. This is to work with existing codebase only
+        raise Error("Unexpected input zap file  %s" % self.zap_config)
+
+    return target_path
+
+
+def extractGeneratedIdl(output_dir, matter_name):
     """Find a file Clusters.matter in the output directory and
        place it along with the input zap file.
 
@@ -184,13 +210,7 @@
     if not os.path.exists(idl_path):
         return
 
-    target_path = zap_config_path.replace(".zap", ".matter")
-    if not target_path.endswith(".matter"):
-        # We expect "something.zap" and don't handle corner cases of
-        # multiple extensions. This is to work with existing codebase only
-        raise Error("Unexpected input zap file  %s" % self.zap_config)
-
-    shutil.move(idl_path, target_path)
+    shutil.move(idl_path, matter_name)
 
 
 def runGeneration(cmdLineArgs):
@@ -205,8 +225,11 @@
     if cmdLineArgs.version_check:
         tool.version_check()
 
-    args = ['-z', zcl_file, '-g', templates_file,
-            '-i', zap_file, '-o', output_dir]
+    args = ['-z', zcl_file, '-g', templates_file, '-o', output_dir]
+
+    if zap_file:
+        args.append('-i')
+        args.append(zap_file)
 
     if parallel:
         # Parallel-compatible runs will need separate state
@@ -214,7 +237,13 @@
 
     tool.run('generate', *args)
 
-    extractGeneratedIdl(output_dir, zap_file)
+    if cmdLineArgs.matter_file_name:
+        matter_name = cmdLineArgs.matter_file_name
+    else:
+        matter_name = matterPathFromZapPath(zap_file)
+
+    if matter_name:
+        extractGeneratedIdl(output_dir, matter_name)
 
 
 def getClangFormatBinaryChoices():
diff --git a/scripts/tools/zap_regen_all.py b/scripts/tools/zap_regen_all.py
index 4bf94f1..9522d00 100755
--- a/scripts/tools/zap_regen_all.py
+++ b/scripts/tools/zap_regen_all.py
@@ -27,13 +27,14 @@
 from dataclasses import dataclass
 from enum import Flag, auto
 from pathlib import Path
+from typing import List
 
 CHIP_ROOT_DIR = os.path.realpath(
     os.path.join(os.path.dirname(__file__), '../..'))
 
 
-# Type of targets that can be re-generated
 class TargetType(Flag):
+    """Type of targets that can be re-generated"""
 
     # Tests for golden images
     TESTS = auto()
@@ -65,6 +66,52 @@
 }
 
 
+class ZapInput:
+    """ZAP may be run from a .zap configuration or from just cluster XML.
+
+    Running from a '.zap' configuration will load the cluster XML and
+    it will also load cluster enabling and settings defined in the .zap
+    configuration.
+
+    For `client-side` code generation, CHIP wants to explicitly not depend
+    on zap enabling/disabling as everything should be enabled.
+    """
+
+    @staticmethod
+    def FromZap(f):
+        return ZapInput(zap_file=str(f))
+
+    @staticmethod
+    def FromPropertiesJson(f):
+        """ Build without a ".zap" file, use the `-z/--zclProperties` command in zap. """
+        return ZapInput(properties_json=str(f))
+
+    def __init__(self, zap_file=None,  properties_json=None):
+        if zap_file and properties_json:
+            raise Exception("only one of zap/zcl should be specified")
+        self.zap_file = zap_file
+        self.properties_json = properties_json
+
+    @property
+    def value(self) -> str:
+        if self.zap_file:
+            return f"ZAP:{self.zap_file}"
+        return f"ZCL:{self.properties_json}"
+
+    @property
+    def is_for_chef_example(self) -> bool:
+        if self.zap_file is None:
+            return False
+
+        return "chef" in self.zap_file
+
+    def build_command(self, script: str) -> List[str]:
+        """What command to execute for this zap input. """
+        if self.zap_file:
+            return [script, self.zap_file]
+        return [script, '-z', self.properties_json]
+
+
 @dataclass
 class TargetRunStats:
     config: str
@@ -88,18 +135,19 @@
 class ZAPGenerateTarget:
 
     @staticmethod
-    def MatterIdlTarget(zap_config, client_side=False):
+    def MatterIdlTarget(zap_config: ZapInput, client_side=False, matter_file_name=None):
         if client_side:
-            return ZAPGenerateTarget(zap_config, template="src/app/zap-templates/matter-idl-client.json", output_dir=None)
+            return ZAPGenerateTarget(zap_config, matter_file_name=matter_file_name, template="src/app/zap-templates/matter-idl-client.json", output_dir=None)
         else:
             # NOTE: this assumes `src/app/zap-templates/matter-idl-server.json` is the
             #       DEFAULT generation target and it needs no output_dir
-            return ZAPGenerateTarget(zap_config, template=None, output_dir=None)
+            return ZAPGenerateTarget(zap_config, matter_file_name=matter_file_name, template=None, output_dir=None)
 
-    def __init__(self, zap_config, template, output_dir=None):
+    def __init__(self, zap_config: ZapInput, template, output_dir=None, matter_file_name=None):
         self.script = './scripts/tools/zap/generate.py'
-        self.zap_config = str(zap_config)
+        self.zap_config = zap_config
         self.template = template
+        self.matter_file_name = matter_file_name
 
         if output_dir:
             # make sure we convert  any os.PathLike object to string
@@ -119,7 +167,7 @@
             # output_directory is MIS-USED here because zap files may reside in the same
             # directory (e.g. chef) so we claim the zap config is an output directory
             # for uniqueness
-            return ZapDistinctOutput(input_template=None, output_directory=self.zap_config)
+            return ZapDistinctOutput(input_template=None, output_directory=self.zap_config.value)
         else:
             return ZapDistinctOutput(input_template=self.template, output_directory=self.output_dir)
 
@@ -131,7 +179,7 @@
     def build_cmd(self):
         """Builds the command line we would run to generate this target.
         """
-        cmd = [self.script, self.zap_config]
+        cmd = self.zap_config.build_command(self.script)
 
         if self.template:
             cmd.append('-t')
@@ -143,6 +191,10 @@
             cmd.append('-o')
             cmd.append(self.output_dir)
 
+        if self.matter_file_name:
+            cmd.append('-m')
+            cmd.append(self.matter_file_name)
+
         return cmd
 
     def generate(self) -> TargetRunStats:
@@ -155,8 +207,8 @@
         subprocess.check_call(cmd)
         generate_end = time.time()
 
-        if "chef" in self.zap_config:
-            idl_path = self.zap_config.replace(".zap", ".matter")
+        if self.zap_config.is_for_chef_example:
+            idl_path = self.zap_config.zap_file.replace(".zap", ".matter")
             target_path = os.path.join("examples",
                                        "chef",
                                        "devices",
@@ -164,7 +216,7 @@
             os.rename(idl_path, target_path)
         return TargetRunStats(
             generate_time=generate_end - generate_start,
-            config=self.zap_config,
+            config=self.zap_config.value,
             template=self.template,
         )
 
@@ -303,8 +355,8 @@
             template = os.path.join(
                 'examples', 'placeholder', 'linux', 'apps', example_name, 'templates', 'templates.json')
 
-            targets.append(ZAPGenerateTarget.MatterIdlTarget(filepath))
-            targets.append(ZAPGenerateTarget(filepath, output_dir=output_dir, template=template))
+            targets.append(ZAPGenerateTarget.MatterIdlTarget(ZapInput.FromZap(filepath)))
+            targets.append(ZAPGenerateTarget(ZapInput.FromZap(filepath), output_dir=output_dir, template=template))
             continue
 
         if example_name == "chef":
@@ -326,9 +378,10 @@
         # a name like <zap-generated/foo.h>
         output_dir = os.path.join(
             'zzz_generated', generate_subdir, 'zap-generated')
-        targets.append(ZAPGenerateTarget.MatterIdlTarget(filepath))
+        targets.append(ZAPGenerateTarget.MatterIdlTarget(ZapInput.FromZap(filepath)))
 
-    targets.append(ZAPGenerateTarget.MatterIdlTarget('src/controller/data_model/controller-clusters.zap', client_side=True))
+    targets.append(ZAPGenerateTarget.MatterIdlTarget(ZapInput.FromPropertiesJson('src/app/zap-templates/zcl/zcl.json'),
+                   client_side=True, matter_file_name="src/controller/data_model/controller-clusters.matter"))
 
     return targets
 
@@ -345,14 +398,13 @@
 
 
 def getTestsTemplatesTargets(test_target):
+    zap_input = ZapInput.FromPropertiesJson('src/app/zap-templates/zcl/zcl.json')
     templates = {
         'chip-tool': {
-            'zap': 'src/controller/data_model/controller-clusters.zap',
             'template': 'examples/chip-tool/templates/tests/templates.json',
             'output_dir': 'zzz_generated/chip-tool/zap-generated'
         },
         'darwin-framework-tool': {
-            'zap': 'src/controller/data_model/controller-clusters.zap',
             'template': 'examples/darwin-framework-tool/templates/tests/templates.json',
             'output_dir': 'zzz_generated/darwin-framework-tool/zap-generated'
         }
@@ -363,8 +415,7 @@
         if test_target == 'all' or test_target == key:
             logging.info("Found test target %s (via %s)" %
                          (key, target['template']))
-            targets.append(ZAPGenerateTarget(
-                target['zap'], template=target['template'], output_dir=target['output_dir']))
+            targets.append(ZAPGenerateTarget(zap_input, template=target['template'], output_dir=target['output_dir']))
 
     return targets
 
@@ -374,7 +425,7 @@
 
 
 def getSpecificTemplatesTargets():
-    zap_filepath = 'src/controller/data_model/controller-clusters.zap'
+    zap_input = ZapInput.FromPropertiesJson('src/app/zap-templates/zcl/zcl.json')
 
     # Mapping of required template and output directory
     templates = {
@@ -390,8 +441,7 @@
     targets = []
     for template, output_dir in templates.items():
         logging.info("Found specific template %s" % template)
-        targets.append(ZAPGenerateTarget(
-            zap_filepath, template=template, output_dir=output_dir))
+        targets.append(ZAPGenerateTarget(zap_input, template=template, output_dir=output_dir))
 
     return targets
 
diff --git a/src/controller/data_model/BUILD.gn b/src/controller/data_model/BUILD.gn
index f97ccd0..72e981c 100644
--- a/src/controller/data_model/BUILD.gn
+++ b/src/controller/data_model/BUILD.gn
@@ -80,8 +80,6 @@
       "jni/BromodichloromethaneConcentrationMeasurementClient-ReadImpl.cpp",
       "jni/BromoformConcentrationMeasurementClient-InvokeSubscribeImpl.cpp",
       "jni/BromoformConcentrationMeasurementClient-ReadImpl.cpp",
-      "jni/CHIPCallbackTypes.h",
-      "jni/CHIPReadCallbacks.h",
       "jni/CarbonDioxideConcentrationMeasurementClient-InvokeSubscribeImpl.cpp",
       "jni/CarbonDioxideConcentrationMeasurementClient-ReadImpl.cpp",
       "jni/CarbonMonoxideConcentrationMeasurementClient-InvokeSubscribeImpl.cpp",
@@ -90,6 +88,9 @@
       "jni/CeramicFilterMonitoringClient-ReadImpl.cpp",
       "jni/ChannelClient-InvokeSubscribeImpl.cpp",
       "jni/ChannelClient-ReadImpl.cpp",
+      "jni/CHIPCallbackTypes.h",
+      "jni/CHIPGlobalCallbacks.cpp",
+      "jni/CHIPReadCallbacks.h",
       "jni/ChloraminesConcentrationMeasurementClient-InvokeSubscribeImpl.cpp",
       "jni/ChloraminesConcentrationMeasurementClient-ReadImpl.cpp",
       "jni/ChlorineConcentrationMeasurementClient-InvokeSubscribeImpl.cpp",
diff --git a/src/controller/java/templates/CHIPReadCallbacks-src.zapt b/src/controller/java/templates/CHIPReadCallbacks-src.zapt
index 7e58533..b1feb25 100644
--- a/src/controller/java/templates/CHIPReadCallbacks-src.zapt
+++ b/src/controller/java/templates/CHIPReadCallbacks-src.zapt
@@ -10,80 +10,6 @@
 #include <lib/support/SafeInt.h>
 #include <platform/PlatformManager.h>
 
-{{#chip_server_global_responses}}
-{{! TODO: Add support for struct-typed attributes }}
-{{#unless (isStrEqual chipCallback.name "Unsupported")}}
-
-CHIP{{chipCallback.name}}AttributeCallback::CHIP{{chipCallback.name}}AttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<{{chipCallback.name}}AttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr) {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr) {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIP{{chipCallback.name}}AttributeCallback::~CHIP{{chipCallback.name}}AttributeCallback() {
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIP{{chipCallback.name}}AttributeCallback::CallbackFn(void * context, {{chipCallback.type}} value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIP{{chipCallback.name}}AttributeCallback, decltype(&maybeDestroy)> cppCallback(reinterpret_cast<CHIP{{chipCallback.name}}AttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr, ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    {{#unless (isStrEqual chipCallback.name "OctetString")}}
-    {{#unless (isStrEqual chipCallback.name "CharString")}}
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "({{convertCTypeToJniSignature chipCallback.type false}})V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<{{convertBasicCTypeToJniType chipCallback.type}}>(value));
-    {{/unless}}
-    {{/unless}}
-
-    {{#if (isStrEqual chipCallback.name "OctetString")}}
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "([B)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-
-    VerifyOrReturn(chip::CanCastTo<uint32_t>(value.size()), ChipLogError(Zcl, "Value too long"));
-    jbyteArray valueArr = env->NewByteArray(static_cast<uint32_t>(value.size()));
-    env->ExceptionClear();
-    env->SetByteArrayRegion(valueArr, 0, static_cast<uint32_t>(value.size()), reinterpret_cast<const jbyte *>(value.data()));
-
-    env->CallVoidMethod(javaCallbackRef, javaMethod, valueArr);
-    {{/if}}
-
-    {{#if (isStrEqual chipCallback.name "CharString")}}
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Ljava/lang/String;)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-
-    chip::UtfString valueStr(env, value);
-    env->CallVoidMethod(javaCallbackRef, javaMethod, valueStr.jniValue());
-    {{/if}}
-}
-{{/unless}}
-{{/chip_server_global_responses}}
-
 {{#zcl_clusters}}
 {{#zcl_attributes_server removeKeys='isOptional'}}
 {{! TODO: Add support for struct-typed attributes }}
diff --git a/src/controller/java/templates/ChipClusters-java.zapt b/src/controller/java/templates/ChipClusters-java.zapt
index 59cd477..1f02502 100644
--- a/src/controller/java/templates/ChipClusters-java.zapt
+++ b/src/controller/java/templates/ChipClusters-java.zapt
@@ -110,9 +110,8 @@
 
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
-  {{#all_user_cluster_generated_commands}}
-    {{#if_compare clusterId ../id operator='=='}}
-      {{#if (is_str_equal commandSource 'client')}}
+  {{#zcl_commands}}
+      {{#if (is_str_equal source 'client')}}
 
     {{#unless mustUseTimedInvoke}}
     public void {{asLowerCamelCase name}}({{#if hasSpecificResponse}}{{asUpperCamelCase responseName}}Callback{{else}}DefaultClusterCallback{{/if}} callback
@@ -127,29 +126,24 @@
       {{asLowerCamelCase name}}(chipClusterPtr, callback{{#zcl_command_arguments}}, {{asLowerCamelCase label}}{{/zcl_command_arguments}}, timedInvokeTimeoutMs);
     }
       {{/if}}
-    {{/if_compare}}
-  {{/all_user_cluster_generated_commands}}
-  {{#all_user_cluster_generated_commands}}
-    {{#if_compare clusterId ../id operator='=='}}
-      {{#if (is_str_equal commandSource 'client')}}
+  {{/zcl_commands}}
+  {{#zcl_commands}}
+      {{#if (is_str_equal source 'client')}}
     private native void {{asLowerCamelCase name}}(long chipClusterPtr, {{#if hasSpecificResponse}}{{asUpperCamelCase responseName}}Callback{{else}}DefaultClusterCallback{{/if}} Callback
       {{#zcl_command_arguments}}, {{asJavaType type chipType parent.parent.name includeAnnotations=true clusterId=parent.parent.id}} {{asLowerCamelCase label}}{{/zcl_command_arguments}}
       , @Nullable Integer timedInvokeTimeoutMs);
       {{/if}}
-    {{/if_compare}}
-  {{/all_user_cluster_generated_commands}}
-    {{#all_user_cluster_generated_commands}}
-      {{#if_compare clusterId ../id operator='=='}}
-        {{#if (is_str_equal commandSource 'server')}}
+  {{/zcl_commands}}
+  {{#zcl_commands}}
+     {{#if (is_str_equal source 'server')}}
     public interface {{asUpperCamelCase name}}Callback {
       void onSuccess({{#zcl_command_arguments}}{{#not_first}}, {{/not_first}}{{asJavaType type chipType parent.parent.name includeAnnotations=true clusterId=parent.parent.id}} {{asLowerCamelCase label}}{{/zcl_command_arguments}});
-      
+
       void onError(Exception error);
     }
 
-        {{/if}}
-    {{/if_compare}}
-  {{/all_user_cluster_generated_commands}}
+     {{/if}}
+  {{/zcl_commands}}
 
   {{#zcl_attributes_server removeKeys='isOptional'}}
   {{#if_unsupported_attribute_callback type isArray ../id}}
diff --git a/src/controller/java/templates/ClusterInfo-java.zapt b/src/controller/java/templates/ClusterInfo-java.zapt
index 53666f7..d80780c 100644
--- a/src/controller/java/templates/ClusterInfo-java.zapt
+++ b/src/controller/java/templates/ClusterInfo-java.zapt
@@ -198,9 +198,8 @@
     }
   }
   {{#zcl_clusters}}
-    {{#all_user_cluster_generated_commands}}
-      {{#if_compare clusterId ../id operator='=='}}
-        {{#if (is_str_equal commandSource 'server')}}
+    {{#zcl_commands}}
+        {{#if (is_str_equal source 'server')}}
       public static class Delegated{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Callback implements ChipClusters.{{asUpperCamelCase ../name}}Cluster.{{asUpperCamelCase name}}Callback, DelegatedClusterCallback {
         private ClusterCommandCallback callback;
         @Override
@@ -235,8 +234,7 @@
       }
 
         {{/if}}
-    {{/if_compare}}
-  {{/all_user_cluster_generated_commands}}
+  {{/zcl_commands}}
       {{#zcl_attributes_server removeKeys='isOptional'}}
       {{#if_unsupported_attribute_callback type isArray ../id}}
       {{else}}
@@ -311,9 +309,8 @@
      Map<String, Map<String, InteractionInfo>> commandMap = new HashMap<>();
      {{#zcl_clusters}}
      Map<String, InteractionInfo> {{asLowerCamelCase name}}ClusterInteractionInfoMap = new LinkedHashMap<>();
-      {{#all_user_cluster_generated_commands}}
-        {{#if_compare clusterId ../id operator='=='}}
-          {{#if (is_str_equal commandSource 'client')}}
+      {{#zcl_commands}}
+          {{#if (is_str_equal source 'client')}}
      Map<String, CommandParameterInfo> {{asLowerCamelCase ../name}}{{asLowerCamelCase name}}CommandParams = new LinkedHashMap<String, CommandParameterInfo>();
      {{! TODO: fill out parameter types }}
      {{#if hasArguments}}
@@ -362,8 +359,7 @@
      {{/if}}
        {{asLowerCamelCase ../name}}ClusterInteractionInfoMap.put("{{asLowerCamelCase name}}", {{asLowerCamelCase ../name}}{{asLowerCamelCase name}}InteractionInfo);
           {{/if}}
-        {{/if_compare}}
-      {{/all_user_cluster_generated_commands}}
+      {{/zcl_commands}}
      commandMap.put("{{asLowerCamelCase name}}", {{asLowerCamelCase name}}ClusterInteractionInfoMap);
      {{/zcl_clusters}}
      return commandMap;
diff --git a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
index d113e22..9471d37 100644
--- a/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
+++ b/src/controller/java/zap-generated/CHIPReadCallbacks.cpp
@@ -27,653 +27,6 @@
 #include <lib/support/SafeInt.h>
 #include <platform/PlatformManager.h>
 
-CHIPBooleanAttributeCallback::CHIPBooleanAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<BooleanAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPBooleanAttributeCallback::~CHIPBooleanAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPBooleanAttributeCallback::CallbackFn(void * context, bool value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPBooleanAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPBooleanAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Z)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jboolean>(value));
-}
-
-CHIPCharStringAttributeCallback::CHIPCharStringAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<CharStringAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPCharStringAttributeCallback::~CHIPCharStringAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPCharStringAttributeCallback::CallbackFn(void * context, const chip::CharSpan value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPCharStringAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPCharStringAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(Ljava/lang/String;)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-
-    chip::UtfString valueStr(env, value);
-    env->CallVoidMethod(javaCallbackRef, javaMethod, valueStr.jniValue());
-}
-
-CHIPDoubleAttributeCallback::CHIPDoubleAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<DoubleAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPDoubleAttributeCallback::~CHIPDoubleAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPDoubleAttributeCallback::CallbackFn(void * context, double value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPDoubleAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPDoubleAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(D)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jdouble>(value));
-}
-
-CHIPFloatAttributeCallback::CHIPFloatAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<FloatAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPFloatAttributeCallback::~CHIPFloatAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPFloatAttributeCallback::CallbackFn(void * context, float value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPFloatAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPFloatAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(F)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jfloat>(value));
-}
-
-CHIPInt8sAttributeCallback::CHIPInt8sAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int8sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt8sAttributeCallback::~CHIPInt8sAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt8sAttributeCallback::CallbackFn(void * context, int8_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt8sAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt8sAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
-}
-
-CHIPInt8uAttributeCallback::CHIPInt8uAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int8uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt8uAttributeCallback::~CHIPInt8uAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt8uAttributeCallback::CallbackFn(void * context, uint8_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt8uAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt8uAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
-}
-
-CHIPInt16sAttributeCallback::CHIPInt16sAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int16sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt16sAttributeCallback::~CHIPInt16sAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt16sAttributeCallback::CallbackFn(void * context, int16_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt16sAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt16sAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
-}
-
-CHIPInt16uAttributeCallback::CHIPInt16uAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int16uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt16uAttributeCallback::~CHIPInt16uAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt16uAttributeCallback::CallbackFn(void * context, uint16_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt16uAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt16uAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(I)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jint>(value));
-}
-
-CHIPInt32sAttributeCallback::CHIPInt32sAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int32sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt32sAttributeCallback::~CHIPInt32sAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt32sAttributeCallback::CallbackFn(void * context, int32_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt32sAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt32sAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
-}
-
-CHIPInt32uAttributeCallback::CHIPInt32uAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int32uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt32uAttributeCallback::~CHIPInt32uAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt32uAttributeCallback::CallbackFn(void * context, uint32_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt32uAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt32uAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
-}
-
-CHIPInt64sAttributeCallback::CHIPInt64sAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int64sAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt64sAttributeCallback::~CHIPInt64sAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt64sAttributeCallback::CallbackFn(void * context, int64_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt64sAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt64sAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
-}
-
-CHIPInt64uAttributeCallback::CHIPInt64uAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<Int64uAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPInt64uAttributeCallback::~CHIPInt64uAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPInt64uAttributeCallback::CallbackFn(void * context, uint64_t value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPInt64uAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPInt64uAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "(J)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-    env->CallVoidMethod(javaCallbackRef, javaMethod, static_cast<jlong>(value));
-}
-
-CHIPOctetStringAttributeCallback::CHIPOctetStringAttributeCallback(jobject javaCallback, bool keepAlive) :
-    chip::Callback::Callback<OctetStringAttributeCallback>(CallbackFn, this), keepAlive(keepAlive)
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-        return;
-    }
-    javaCallbackRef = env->NewGlobalRef(javaCallback);
-    if (javaCallbackRef == nullptr)
-    {
-        ChipLogError(Zcl, "Could not create global reference for Java callback");
-    }
-}
-
-CHIPOctetStringAttributeCallback::~CHIPOctetStringAttributeCallback()
-{
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    if (env == nullptr)
-    {
-        ChipLogError(Zcl, "Could not delete global reference for Java callback");
-        return;
-    }
-    env->DeleteGlobalRef(javaCallbackRef);
-}
-
-void CHIPOctetStringAttributeCallback::CallbackFn(void * context, const chip::ByteSpan value)
-{
-    chip::DeviceLayer::StackUnlock unlock;
-    CHIP_ERROR err = CHIP_NO_ERROR;
-
-    JNIEnv * env = chip::JniReferences::GetInstance().GetEnvForCurrentThread();
-    VerifyOrReturn(env != nullptr, ChipLogError(Zcl, "Could not get JNI env"));
-
-    std::unique_ptr<CHIPOctetStringAttributeCallback, decltype(&maybeDestroy)> cppCallback(
-        reinterpret_cast<CHIPOctetStringAttributeCallback *>(context), maybeDestroy);
-
-    // It's valid for javaCallbackRef to be nullptr if the Java code passed in a null callback.
-    jobject javaCallbackRef = cppCallback.get()->javaCallbackRef;
-    VerifyOrReturn(javaCallbackRef != nullptr,
-                   ChipLogDetail(Zcl, "Early return from attribute callback since Java callback is null"));
-
-    jmethodID javaMethod;
-
-    err = chip::JniReferences::GetInstance().FindMethod(env, javaCallbackRef, "onSuccess", "([B)V", &javaMethod);
-    VerifyOrReturn(err == CHIP_NO_ERROR, ChipLogError(Zcl, "Could not find onSuccess method"));
-
-    VerifyOrReturn(chip::CanCastTo<uint32_t>(value.size()), ChipLogError(Zcl, "Value too long"));
-    jbyteArray valueArr = env->NewByteArray(static_cast<uint32_t>(value.size()));
-    env->ExceptionClear();
-    env->SetByteArrayRegion(valueArr, 0, static_cast<uint32_t>(value.size()), reinterpret_cast<const jbyte *>(value.data()));
-
-    env->CallVoidMethod(javaCallbackRef, javaMethod, valueArr);
-}
-
 CHIPIdentifyGeneratedCommandListAttributeCallback::CHIPIdentifyGeneratedCommandListAttributeCallback(jobject javaCallback,
                                                                                                      bool keepAlive) :
     chip::Callback::Callback<CHIPIdentifyClusterGeneratedCommandListAttributeCallbackType>(CallbackFn, this),
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
index 6b848ae..c3280d6 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ChipClusters.java
@@ -432,25 +432,25 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface AddGroupResponseCallback {
       void onSuccess(Integer status, Integer groupID);
-      
+
       void onError(Exception error);
     }
 
     public interface ViewGroupResponseCallback {
       void onSuccess(Integer status, Integer groupID, String groupName);
-      
+
       void onError(Exception error);
     }
 
     public interface GetGroupMembershipResponseCallback {
       void onSuccess(@Nullable Integer capacity, ArrayList<Integer> groupList);
-      
+
       void onError(Exception error);
     }
 
     public interface RemoveGroupResponseCallback {
       void onSuccess(Integer status, Integer groupID);
-      
+
       void onError(Exception error);
     }
 
@@ -696,6 +696,39 @@
       , int timedInvokeTimeoutMs) {
       getSceneMembership(chipClusterPtr, callback, groupID, timedInvokeTimeoutMs);
     }
+
+    public void enhancedAddScene(EnhancedAddSceneResponseCallback callback
+      , Integer groupID, Integer sceneID, Integer transitionTime, String sceneName, ArrayList<ChipStructs.ScenesClusterExtensionFieldSet> extensionFieldSets) {
+      enhancedAddScene(chipClusterPtr, callback, groupID, sceneID, transitionTime, sceneName, extensionFieldSets, null);
+    }
+
+    public void enhancedAddScene(EnhancedAddSceneResponseCallback callback
+      , Integer groupID, Integer sceneID, Integer transitionTime, String sceneName, ArrayList<ChipStructs.ScenesClusterExtensionFieldSet> extensionFieldSets
+      , int timedInvokeTimeoutMs) {
+      enhancedAddScene(chipClusterPtr, callback, groupID, sceneID, transitionTime, sceneName, extensionFieldSets, timedInvokeTimeoutMs);
+    }
+
+    public void enhancedViewScene(EnhancedViewSceneResponseCallback callback
+      , Integer groupID, Integer sceneID) {
+      enhancedViewScene(chipClusterPtr, callback, groupID, sceneID, null);
+    }
+
+    public void enhancedViewScene(EnhancedViewSceneResponseCallback callback
+      , Integer groupID, Integer sceneID
+      , int timedInvokeTimeoutMs) {
+      enhancedViewScene(chipClusterPtr, callback, groupID, sceneID, timedInvokeTimeoutMs);
+    }
+
+    public void copyScene(CopySceneResponseCallback callback
+      , Integer mode, Integer groupIdentifierFrom, Integer sceneIdentifierFrom, Integer groupIdentifierTo, Integer sceneIdentifierTo) {
+      copyScene(chipClusterPtr, callback, mode, groupIdentifierFrom, sceneIdentifierFrom, groupIdentifierTo, sceneIdentifierTo, null);
+    }
+
+    public void copyScene(CopySceneResponseCallback callback
+      , Integer mode, Integer groupIdentifierFrom, Integer sceneIdentifierFrom, Integer groupIdentifierTo, Integer sceneIdentifierTo
+      , int timedInvokeTimeoutMs) {
+      copyScene(chipClusterPtr, callback, mode, groupIdentifierFrom, sceneIdentifierFrom, groupIdentifierTo, sceneIdentifierTo, timedInvokeTimeoutMs);
+    }
     private native void addScene(long chipClusterPtr, AddSceneResponseCallback Callback
       , Integer groupID, Integer sceneID, Integer transitionTime, String sceneName, ArrayList<ChipStructs.ScenesClusterExtensionFieldSet> extensionFieldSets
       , @Nullable Integer timedInvokeTimeoutMs);
@@ -717,39 +750,66 @@
     private native void getSceneMembership(long chipClusterPtr, GetSceneMembershipResponseCallback Callback
       , Integer groupID
       , @Nullable Integer timedInvokeTimeoutMs);
+    private native void enhancedAddScene(long chipClusterPtr, EnhancedAddSceneResponseCallback Callback
+      , Integer groupID, Integer sceneID, Integer transitionTime, String sceneName, ArrayList<ChipStructs.ScenesClusterExtensionFieldSet> extensionFieldSets
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void enhancedViewScene(long chipClusterPtr, EnhancedViewSceneResponseCallback Callback
+      , Integer groupID, Integer sceneID
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void copyScene(long chipClusterPtr, CopySceneResponseCallback Callback
+      , Integer mode, Integer groupIdentifierFrom, Integer sceneIdentifierFrom, Integer groupIdentifierTo, Integer sceneIdentifierTo
+      , @Nullable Integer timedInvokeTimeoutMs);
     public interface AddSceneResponseCallback {
       void onSuccess(Integer status, Integer groupID, Integer sceneID);
-      
+
       void onError(Exception error);
     }
 
     public interface ViewSceneResponseCallback {
       void onSuccess(Integer status, Integer groupID, Integer sceneID, Optional<Integer> transitionTime, Optional<String> sceneName, Optional<ArrayList<ChipStructs.ScenesClusterExtensionFieldSet>> extensionFieldSets);
-      
+
       void onError(Exception error);
     }
 
     public interface RemoveSceneResponseCallback {
       void onSuccess(Integer status, Integer groupID, Integer sceneID);
-      
+
       void onError(Exception error);
     }
 
     public interface RemoveAllScenesResponseCallback {
       void onSuccess(Integer status, Integer groupID);
-      
+
       void onError(Exception error);
     }
 
     public interface StoreSceneResponseCallback {
       void onSuccess(Integer status, Integer groupID, Integer sceneID);
-      
+
       void onError(Exception error);
     }
 
     public interface GetSceneMembershipResponseCallback {
       void onSuccess(Integer status, @Nullable Integer capacity, Integer groupID, Optional<ArrayList<Integer>> sceneList);
-      
+
+      void onError(Exception error);
+    }
+
+    public interface EnhancedAddSceneResponseCallback {
+      void onSuccess(Integer status, Integer groupID, Integer sceneID);
+
+      void onError(Exception error);
+    }
+
+    public interface EnhancedViewSceneResponseCallback {
+      void onSuccess(Integer status, Integer groupID, Integer sceneID, Optional<Integer> transitionTime, Optional<String> sceneName, Optional<ArrayList<ChipStructs.ScenesClusterExtensionFieldSet>> extensionFieldSets);
+
+      void onError(Exception error);
+    }
+
+    public interface CopySceneResponseCallback {
+      void onSuccess(Integer status, Integer groupIdentifierFrom, Integer sceneIdentifierFrom);
+
       void onError(Exception error);
     }
 
@@ -1694,6 +1754,17 @@
       , int timedInvokeTimeoutMs) {
       stopWithOnOff(chipClusterPtr, callback, optionsMask, optionsOverride, timedInvokeTimeoutMs);
     }
+
+    public void moveToClosestFrequency(DefaultClusterCallback callback
+      , Integer frequency) {
+      moveToClosestFrequency(chipClusterPtr, callback, frequency, null);
+    }
+
+    public void moveToClosestFrequency(DefaultClusterCallback callback
+      , Integer frequency
+      , int timedInvokeTimeoutMs) {
+      moveToClosestFrequency(chipClusterPtr, callback, frequency, timedInvokeTimeoutMs);
+    }
     private native void moveToLevel(long chipClusterPtr, DefaultClusterCallback Callback
       , Integer level, @Nullable Integer transitionTime, Integer optionsMask, Integer optionsOverride
       , @Nullable Integer timedInvokeTimeoutMs);
@@ -1718,6 +1789,9 @@
     private native void stopWithOnOff(long chipClusterPtr, DefaultClusterCallback Callback
       , Integer optionsMask, Integer optionsOverride
       , @Nullable Integer timedInvokeTimeoutMs);
+    private native void moveToClosestFrequency(long chipClusterPtr, DefaultClusterCallback Callback
+      , Integer frequency
+      , @Nullable Integer timedInvokeTimeoutMs);
 
       public interface CurrentLevelAttributeCallback {
         void onSuccess(@Nullable Integer value);
@@ -3812,6 +3886,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void mfgSpecificPing(DefaultClusterCallback callback
+      ) {
+      mfgSpecificPing(chipClusterPtr, callback, null);
+    }
+
+    public void mfgSpecificPing(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      mfgSpecificPing(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void mfgSpecificPing(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -4389,13 +4477,13 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface QueryImageResponseCallback {
       void onSuccess(Integer status, Optional<Long> delayedActionTime, Optional<String> imageURI, Optional<Long> softwareVersion, Optional<String> softwareVersionString, Optional<byte[]> updateToken, Optional<Boolean> userConsentNeeded, Optional<byte[]> metadataForRequestor);
-      
+
       void onError(Exception error);
     }
 
     public interface ApplyUpdateResponseCallback {
       void onSuccess(Integer action, Long delayedActionTime);
-      
+
       void onError(Exception error);
     }
 
@@ -6402,19 +6490,19 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ArmFailSafeResponseCallback {
       void onSuccess(Integer errorCode, String debugText);
-      
+
       void onError(Exception error);
     }
 
     public interface SetRegulatoryConfigResponseCallback {
       void onSuccess(Integer errorCode, String debugText);
-      
+
       void onError(Exception error);
     }
 
     public interface CommissioningCompleteResponseCallback {
       void onSuccess(Integer errorCode, String debugText);
-      
+
       void onError(Exception error);
     }
 
@@ -6735,19 +6823,19 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ScanNetworksResponseCallback {
       void onSuccess(Integer networkingStatus, Optional<String> debugText, Optional<ArrayList<ChipStructs.NetworkCommissioningClusterWiFiInterfaceScanResultStruct>> wiFiScanResults, Optional<ArrayList<ChipStructs.NetworkCommissioningClusterThreadInterfaceScanResultStruct>> threadScanResults);
-      
+
       void onError(Exception error);
     }
 
     public interface NetworkConfigResponseCallback {
       void onSuccess(Integer networkingStatus, Optional<String> debugText, Optional<Integer> networkIndex);
-      
+
       void onError(Exception error);
     }
 
     public interface ConnectNetworkResponseCallback {
       void onSuccess(Integer networkingStatus, Optional<String> debugText, @Nullable Long errorValue);
-      
+
       void onError(Exception error);
     }
 
@@ -7094,7 +7182,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface RetrieveLogsResponseCallback {
       void onSuccess(Integer status, byte[] logContent, Optional<Long> UTCTimeStamp, Optional<Long> timeSinceBoot);
-      
+
       void onError(Exception error);
     }
 
@@ -10135,7 +10223,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface SetTimeZoneResponseCallback {
       void onSuccess(Boolean DSTOffsetRequired);
-      
+
       void onError(Exception error);
     }
 
@@ -11538,25 +11626,25 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface AttestationResponseCallback {
       void onSuccess(byte[] attestationElements, byte[] attestationSignature);
-      
+
       void onError(Exception error);
     }
 
     public interface CertificateChainResponseCallback {
       void onSuccess(byte[] certificate);
-      
+
       void onError(Exception error);
     }
 
     public interface CSRResponseCallback {
       void onSuccess(byte[] NOCSRElements, byte[] attestationSignature);
-      
+
       void onError(Exception error);
     }
 
     public interface NOCResponseCallback {
       void onSuccess(Integer statusCode, Optional<Integer> fabricIndex, Optional<String> debugText);
-      
+
       void onError(Exception error);
     }
 
@@ -11893,13 +11981,13 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface KeySetReadResponseCallback {
       void onSuccess(ChipStructs.GroupKeyManagementClusterGroupKeySetStruct groupKeySet);
-      
+
       void onError(Exception error);
     }
 
     public interface KeySetReadAllIndicesResponseCallback {
       void onSuccess(ArrayList<Integer> groupKeySetIDs);
-      
+
       void onError(Exception error);
     }
 
@@ -13140,7 +13228,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface RegisterClientResponseCallback {
       void onSuccess(Long ICDCounter);
-      
+
       void onError(Exception error);
     }
 
@@ -13737,7 +13825,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ChangeToModeResponseCallback {
       void onSuccess(Integer status, Optional<String> statusText);
-      
+
       void onError(Exception error);
     }
 
@@ -14012,7 +14100,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ChangeToModeResponseCallback {
       void onSuccess(Integer status, Optional<String> statusText);
-      
+
       void onError(Exception error);
     }
 
@@ -14542,7 +14630,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ChangeToModeResponseCallback {
       void onSuccess(Integer status, Optional<String> statusText);
-      
+
       void onError(Exception error);
     }
 
@@ -14817,7 +14905,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ChangeToModeResponseCallback {
       void onSuccess(Integer status, Optional<String> statusText);
-      
+
       void onError(Exception error);
     }
 
@@ -15574,7 +15662,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ChangeToModeResponseCallback {
       void onSuccess(Integer status, Optional<String> statusText);
-      
+
       void onError(Exception error);
     }
 
@@ -16425,9 +16513,23 @@
       , int timedInvokeTimeoutMs) {
       reset(chipClusterPtr, callback, alarms, timedInvokeTimeoutMs);
     }
+
+    public void modifyEnabledAlarms(DefaultClusterCallback callback
+      , Long mask) {
+      modifyEnabledAlarms(chipClusterPtr, callback, mask, null);
+    }
+
+    public void modifyEnabledAlarms(DefaultClusterCallback callback
+      , Long mask
+      , int timedInvokeTimeoutMs) {
+      modifyEnabledAlarms(chipClusterPtr, callback, mask, timedInvokeTimeoutMs);
+    }
     private native void reset(long chipClusterPtr, DefaultClusterCallback Callback
       , Long alarms
       , @Nullable Integer timedInvokeTimeoutMs);
+    private native void modifyEnabledAlarms(long chipClusterPtr, DefaultClusterCallback Callback
+      , Long mask
+      , @Nullable Integer timedInvokeTimeoutMs);
 
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
@@ -16651,6 +16753,68 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void pause(OperationalCommandResponseCallback callback
+      ) {
+      pause(chipClusterPtr, callback, null);
+    }
+
+    public void pause(OperationalCommandResponseCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      pause(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+
+    public void stop(OperationalCommandResponseCallback callback
+      ) {
+      stop(chipClusterPtr, callback, null);
+    }
+
+    public void stop(OperationalCommandResponseCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      stop(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+
+    public void start(OperationalCommandResponseCallback callback
+      ) {
+      start(chipClusterPtr, callback, null);
+    }
+
+    public void start(OperationalCommandResponseCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      start(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+
+    public void resume(OperationalCommandResponseCallback callback
+      ) {
+      resume(chipClusterPtr, callback, null);
+    }
+
+    public void resume(OperationalCommandResponseCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resume(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void pause(long chipClusterPtr, OperationalCommandResponseCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void stop(long chipClusterPtr, OperationalCommandResponseCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void start(long chipClusterPtr, OperationalCommandResponseCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void resume(long chipClusterPtr, OperationalCommandResponseCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+    public interface OperationalCommandResponseCallback {
+      void onSuccess(ChipStructs.OperationalStateClusterErrorStateStruct commandResponseState);
+
+      void onError(Exception error);
+    }
+
+
       public interface PhaseListAttributeCallback {
         void onSuccess(@Nullable List<String> valueList);
         void onError(Exception ex);
@@ -16950,7 +17114,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface OperationalCommandResponseCallback {
       void onSuccess(ChipStructs.RvcOperationalStateClusterErrorStateStruct commandResponseState);
-      
+
       void onError(Exception error);
     }
 
@@ -17197,6 +17361,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -17419,6 +17597,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -17641,6 +17833,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -17863,6 +18069,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -18085,6 +18305,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -18307,6 +18541,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -18529,6 +18777,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -18751,6 +19013,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -18973,6 +19249,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -19195,6 +19485,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -19417,6 +19721,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -19639,6 +19957,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void resetCondition(DefaultClusterCallback callback
+      ) {
+      resetCondition(chipClusterPtr, callback, null);
+    }
+
+    public void resetCondition(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      resetCondition(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+    private native void resetCondition(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -20030,6 +20362,13 @@
       , int timedInvokeTimeoutMs) {
       clearCredential(chipClusterPtr, callback, credential, timedInvokeTimeoutMs);
     }
+
+
+    public void unboltDoor(DefaultClusterCallback callback
+      , Optional<byte[]> PINCode
+      , int timedInvokeTimeoutMs) {
+      unboltDoor(chipClusterPtr, callback, PINCode, timedInvokeTimeoutMs);
+    }
     private native void lockDoor(long chipClusterPtr, DefaultClusterCallback Callback
       , Optional<byte[]> PINCode
       , @Nullable Integer timedInvokeTimeoutMs);
@@ -20084,39 +20423,42 @@
     private native void clearCredential(long chipClusterPtr, DefaultClusterCallback Callback
       , @Nullable ChipStructs.DoorLockClusterCredentialStruct credential
       , @Nullable Integer timedInvokeTimeoutMs);
+    private native void unboltDoor(long chipClusterPtr, DefaultClusterCallback Callback
+      , Optional<byte[]> PINCode
+      , @Nullable Integer timedInvokeTimeoutMs);
     public interface GetWeekDayScheduleResponseCallback {
       void onSuccess(Integer weekDayIndex, Integer userIndex, Integer status, Optional<Integer> daysMask, Optional<Integer> startHour, Optional<Integer> startMinute, Optional<Integer> endHour, Optional<Integer> endMinute);
-      
+
       void onError(Exception error);
     }
 
     public interface GetYearDayScheduleResponseCallback {
       void onSuccess(Integer yearDayIndex, Integer userIndex, Integer status, Optional<Long> localStartTime, Optional<Long> localEndTime);
-      
+
       void onError(Exception error);
     }
 
     public interface GetHolidayScheduleResponseCallback {
       void onSuccess(Integer holidayIndex, Integer status, Optional<Long> localStartTime, Optional<Long> localEndTime, Optional<Integer> operatingMode);
-      
+
       void onError(Exception error);
     }
 
     public interface GetUserResponseCallback {
       void onSuccess(Integer userIndex, @Nullable String userName, @Nullable Long userUniqueID, @Nullable Integer userStatus, @Nullable Integer userType, @Nullable Integer credentialRule, @Nullable ArrayList<ChipStructs.DoorLockClusterCredentialStruct> credentials, @Nullable Integer creatorFabricIndex, @Nullable Integer lastModifiedFabricIndex, @Nullable Integer nextUserIndex);
-      
+
       void onError(Exception error);
     }
 
     public interface SetCredentialResponseCallback {
       void onSuccess(Integer status, @Nullable Integer userIndex, @Nullable Integer nextCredentialIndex);
-      
+
       void onError(Exception error);
     }
 
     public interface GetCredentialStatusResponseCallback {
       void onSuccess(Boolean credentialExists, @Nullable Integer userIndex, @Nullable Integer creatorFabricIndex, @Nullable Integer lastModifiedFabricIndex, @Nullable Integer nextCredentialIndex);
-      
+
       void onError(Exception error);
     }
 
@@ -23018,7 +23360,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface GetWeeklyScheduleResponseCallback {
       void onSuccess(Integer numberOfTransitionsForSequence, Integer dayOfWeekForSequence, Integer modeForSequence, ArrayList<ChipStructs.ThermostatClusterThermostatScheduleTransition> transitions);
-      
+
       void onError(Exception error);
     }
 
@@ -24398,6 +24740,20 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void step(DefaultClusterCallback callback
+      , Integer direction, Optional<Boolean> wrap, Optional<Boolean> lowestOff) {
+      step(chipClusterPtr, callback, direction, wrap, lowestOff, null);
+    }
+
+    public void step(DefaultClusterCallback callback
+      , Integer direction, Optional<Boolean> wrap, Optional<Boolean> lowestOff
+      , int timedInvokeTimeoutMs) {
+      step(chipClusterPtr, callback, direction, wrap, lowestOff, timedInvokeTimeoutMs);
+    }
+    private native void step(long chipClusterPtr, DefaultClusterCallback Callback
+      , Integer direction, Optional<Boolean> wrap, Optional<Boolean> lowestOff
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface PercentSettingAttributeCallback {
         void onSuccess(@Nullable Integer value);
         void onError(Exception ex);
@@ -42836,7 +43192,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface ChangeChannelResponseCallback {
       void onSuccess(Integer status, Optional<String> data);
-      
+
       void onError(Exception error);
     }
 
@@ -43026,7 +43382,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface NavigateTargetResponseCallback {
       void onSuccess(Integer status, Optional<String> data);
-      
+
       void onError(Exception error);
     }
 
@@ -43375,7 +43731,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface PlaybackResponseCallback {
       void onSuccess(Integer status, Optional<String> data);
-      
+
       void onError(Exception error);
     }
 
@@ -44080,7 +44436,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface SendKeyResponseCallback {
       void onSuccess(Integer status);
-      
+
       void onError(Exception error);
     }
 
@@ -44260,7 +44616,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface LauncherResponseCallback {
       void onSuccess(Integer status, Optional<String> data);
-      
+
       void onError(Exception error);
     }
 
@@ -44723,7 +45079,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface LauncherResponseCallback {
       void onSuccess(Integer status, Optional<byte[]> data);
-      
+
       void onError(Exception error);
     }
 
@@ -45213,7 +45569,7 @@
       , @Nullable Integer timedInvokeTimeoutMs);
     public interface GetSetupPINResponseCallback {
       void onSuccess(String setupPIN);
-      
+
       void onError(Exception error);
     }
 
@@ -45364,6 +45720,46 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void getProfileInfoCommand(DefaultClusterCallback callback
+      ) {
+      getProfileInfoCommand(chipClusterPtr, callback, null);
+    }
+
+    public void getProfileInfoCommand(DefaultClusterCallback callback
+      
+      , int timedInvokeTimeoutMs) {
+      getProfileInfoCommand(chipClusterPtr, callback, timedInvokeTimeoutMs);
+    }
+
+    public void getMeasurementProfileCommand(DefaultClusterCallback callback
+      , Integer attributeId, Long startTime, Integer numberOfIntervals) {
+      getMeasurementProfileCommand(chipClusterPtr, callback, attributeId, startTime, numberOfIntervals, null);
+    }
+
+    public void getMeasurementProfileCommand(DefaultClusterCallback callback
+      , Integer attributeId, Long startTime, Integer numberOfIntervals
+      , int timedInvokeTimeoutMs) {
+      getMeasurementProfileCommand(chipClusterPtr, callback, attributeId, startTime, numberOfIntervals, timedInvokeTimeoutMs);
+    }
+    private native void getProfileInfoCommand(long chipClusterPtr, DefaultClusterCallback Callback
+      
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void getMeasurementProfileCommand(long chipClusterPtr, DefaultClusterCallback Callback
+      , Integer attributeId, Long startTime, Integer numberOfIntervals
+      , @Nullable Integer timedInvokeTimeoutMs);
+    public interface GetProfileInfoResponseCommandCallback {
+      void onSuccess(Integer profileCount, Integer profileIntervalPeriod, Integer maxNumberOfIntervals, ArrayList<Integer> listOfAttributes);
+
+      void onError(Exception error);
+    }
+
+    public interface GetMeasurementProfileResponseCommandCallback {
+      void onSuccess(Long startTime, Integer status, Integer profileIntervalPeriod, Integer numberOfIntervalsDelivered, Integer attributeId, ArrayList<Integer> intervals);
+
+      void onError(Exception error);
+    }
+
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
@@ -48069,6 +48465,28 @@
       testAddArguments(chipClusterPtr, callback, arg1, arg2, timedInvokeTimeoutMs);
     }
 
+    public void testSimpleArgumentRequest(TestSimpleArgumentResponseCallback callback
+      , Boolean arg1) {
+      testSimpleArgumentRequest(chipClusterPtr, callback, arg1, null);
+    }
+
+    public void testSimpleArgumentRequest(TestSimpleArgumentResponseCallback callback
+      , Boolean arg1
+      , int timedInvokeTimeoutMs) {
+      testSimpleArgumentRequest(chipClusterPtr, callback, arg1, timedInvokeTimeoutMs);
+    }
+
+    public void testStructArrayArgumentRequest(TestStructArrayArgumentResponseCallback callback
+      , ArrayList<ChipStructs.UnitTestingClusterNestedStructList> arg1, ArrayList<ChipStructs.UnitTestingClusterSimpleStruct> arg2, ArrayList<Integer> arg3, ArrayList<Integer> arg4, Integer arg5, Boolean arg6) {
+      testStructArrayArgumentRequest(chipClusterPtr, callback, arg1, arg2, arg3, arg4, arg5, arg6, null);
+    }
+
+    public void testStructArrayArgumentRequest(TestStructArrayArgumentResponseCallback callback
+      , ArrayList<ChipStructs.UnitTestingClusterNestedStructList> arg1, ArrayList<ChipStructs.UnitTestingClusterSimpleStruct> arg2, ArrayList<Integer> arg3, ArrayList<Integer> arg4, Integer arg5, Boolean arg6
+      , int timedInvokeTimeoutMs) {
+      testStructArrayArgumentRequest(chipClusterPtr, callback, arg1, arg2, arg3, arg4, arg5, arg6, timedInvokeTimeoutMs);
+    }
+
     public void testStructArgumentRequest(BooleanResponseCallback callback
       , ChipStructs.UnitTestingClusterSimpleStruct arg1) {
       testStructArgumentRequest(chipClusterPtr, callback, arg1, null);
@@ -48168,6 +48586,17 @@
       testNullableOptionalRequest(chipClusterPtr, callback, arg1, timedInvokeTimeoutMs);
     }
 
+    public void testComplexNullableOptionalRequest(TestComplexNullableOptionalResponseCallback callback
+      , @Nullable Integer nullableInt, Optional<Integer> optionalInt, @Nullable Optional<Integer> nullableOptionalInt, @Nullable String nullableString, Optional<String> optionalString, @Nullable Optional<String> nullableOptionalString, @Nullable ChipStructs.UnitTestingClusterSimpleStruct nullableStruct, Optional<ChipStructs.UnitTestingClusterSimpleStruct> optionalStruct, @Nullable Optional<ChipStructs.UnitTestingClusterSimpleStruct> nullableOptionalStruct, @Nullable ArrayList<Integer> nullableList, Optional<ArrayList<Integer>> optionalList, @Nullable Optional<ArrayList<Integer>> nullableOptionalList) {
+      testComplexNullableOptionalRequest(chipClusterPtr, callback, nullableInt, optionalInt, nullableOptionalInt, nullableString, optionalString, nullableOptionalString, nullableStruct, optionalStruct, nullableOptionalStruct, nullableList, optionalList, nullableOptionalList, null);
+    }
+
+    public void testComplexNullableOptionalRequest(TestComplexNullableOptionalResponseCallback callback
+      , @Nullable Integer nullableInt, Optional<Integer> optionalInt, @Nullable Optional<Integer> nullableOptionalInt, @Nullable String nullableString, Optional<String> optionalString, @Nullable Optional<String> nullableOptionalString, @Nullable ChipStructs.UnitTestingClusterSimpleStruct nullableStruct, Optional<ChipStructs.UnitTestingClusterSimpleStruct> optionalStruct, @Nullable Optional<ChipStructs.UnitTestingClusterSimpleStruct> nullableOptionalStruct, @Nullable ArrayList<Integer> nullableList, Optional<ArrayList<Integer>> optionalList, @Nullable Optional<ArrayList<Integer>> nullableOptionalList
+      , int timedInvokeTimeoutMs) {
+      testComplexNullableOptionalRequest(chipClusterPtr, callback, nullableInt, optionalInt, nullableOptionalInt, nullableString, optionalString, nullableOptionalString, nullableStruct, optionalStruct, nullableOptionalStruct, nullableList, optionalList, nullableOptionalList, timedInvokeTimeoutMs);
+    }
+
     public void simpleStructEchoRequest(SimpleStructResponseCallback callback
       , ChipStructs.UnitTestingClusterSimpleStruct arg1) {
       simpleStructEchoRequest(chipClusterPtr, callback, arg1, null);
@@ -48207,6 +48636,17 @@
       , int timedInvokeTimeoutMs) {
       testEmitTestEventRequest(chipClusterPtr, callback, arg1, arg2, arg3, timedInvokeTimeoutMs);
     }
+
+    public void testEmitTestFabricScopedEventRequest(TestEmitTestFabricScopedEventResponseCallback callback
+      , Integer arg1) {
+      testEmitTestFabricScopedEventRequest(chipClusterPtr, callback, arg1, null);
+    }
+
+    public void testEmitTestFabricScopedEventRequest(TestEmitTestFabricScopedEventResponseCallback callback
+      , Integer arg1
+      , int timedInvokeTimeoutMs) {
+      testEmitTestFabricScopedEventRequest(chipClusterPtr, callback, arg1, timedInvokeTimeoutMs);
+    }
     private native void test(long chipClusterPtr, DefaultClusterCallback Callback
       
       , @Nullable Integer timedInvokeTimeoutMs);
@@ -48222,6 +48662,12 @@
     private native void testAddArguments(long chipClusterPtr, TestAddArgumentsResponseCallback Callback
       , Integer arg1, Integer arg2
       , @Nullable Integer timedInvokeTimeoutMs);
+    private native void testSimpleArgumentRequest(long chipClusterPtr, TestSimpleArgumentResponseCallback Callback
+      , Boolean arg1
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void testStructArrayArgumentRequest(long chipClusterPtr, TestStructArrayArgumentResponseCallback Callback
+      , ArrayList<ChipStructs.UnitTestingClusterNestedStructList> arg1, ArrayList<ChipStructs.UnitTestingClusterSimpleStruct> arg2, ArrayList<Integer> arg3, ArrayList<Integer> arg4, Integer arg5, Boolean arg6
+      , @Nullable Integer timedInvokeTimeoutMs);
     private native void testStructArgumentRequest(long chipClusterPtr, BooleanResponseCallback Callback
       , ChipStructs.UnitTestingClusterSimpleStruct arg1
       , @Nullable Integer timedInvokeTimeoutMs);
@@ -48249,6 +48695,9 @@
     private native void testNullableOptionalRequest(long chipClusterPtr, TestNullableOptionalResponseCallback Callback
       , @Nullable Optional<Integer> arg1
       , @Nullable Integer timedInvokeTimeoutMs);
+    private native void testComplexNullableOptionalRequest(long chipClusterPtr, TestComplexNullableOptionalResponseCallback Callback
+      , @Nullable Integer nullableInt, Optional<Integer> optionalInt, @Nullable Optional<Integer> nullableOptionalInt, @Nullable String nullableString, Optional<String> optionalString, @Nullable Optional<String> nullableOptionalString, @Nullable ChipStructs.UnitTestingClusterSimpleStruct nullableStruct, Optional<ChipStructs.UnitTestingClusterSimpleStruct> optionalStruct, @Nullable Optional<ChipStructs.UnitTestingClusterSimpleStruct> nullableOptionalStruct, @Nullable ArrayList<Integer> nullableList, Optional<ArrayList<Integer>> optionalList, @Nullable Optional<ArrayList<Integer>> nullableOptionalList
+      , @Nullable Integer timedInvokeTimeoutMs);
     private native void simpleStructEchoRequest(long chipClusterPtr, SimpleStructResponseCallback Callback
       , ChipStructs.UnitTestingClusterSimpleStruct arg1
       , @Nullable Integer timedInvokeTimeoutMs);
@@ -48261,51 +48710,78 @@
     private native void testEmitTestEventRequest(long chipClusterPtr, TestEmitTestEventResponseCallback Callback
       , Integer arg1, Integer arg2, Boolean arg3
       , @Nullable Integer timedInvokeTimeoutMs);
+    private native void testEmitTestFabricScopedEventRequest(long chipClusterPtr, TestEmitTestFabricScopedEventResponseCallback Callback
+      , Integer arg1
+      , @Nullable Integer timedInvokeTimeoutMs);
     public interface TestSpecificResponseCallback {
       void onSuccess(Integer returnValue);
-      
+
       void onError(Exception error);
     }
 
     public interface TestAddArgumentsResponseCallback {
       void onSuccess(Integer returnValue);
-      
+
+      void onError(Exception error);
+    }
+
+    public interface TestSimpleArgumentResponseCallback {
+      void onSuccess(Boolean returnValue);
+
+      void onError(Exception error);
+    }
+
+    public interface TestStructArrayArgumentResponseCallback {
+      void onSuccess(ArrayList<ChipStructs.UnitTestingClusterNestedStructList> arg1, ArrayList<ChipStructs.UnitTestingClusterSimpleStruct> arg2, ArrayList<Integer> arg3, ArrayList<Integer> arg4, Integer arg5, Boolean arg6);
+
       void onError(Exception error);
     }
 
     public interface TestListInt8UReverseResponseCallback {
       void onSuccess(ArrayList<Integer> arg1);
-      
+
       void onError(Exception error);
     }
 
     public interface TestEnumsResponseCallback {
       void onSuccess(Integer arg1, Integer arg2);
-      
+
       void onError(Exception error);
     }
 
     public interface TestNullableOptionalResponseCallback {
       void onSuccess(Boolean wasPresent, Optional<Boolean> wasNull, Optional<Integer> value, @Nullable Optional<Integer> originalValue);
-      
+
+      void onError(Exception error);
+    }
+
+    public interface TestComplexNullableOptionalResponseCallback {
+      void onSuccess(Boolean nullableIntWasNull, Optional<Integer> nullableIntValue, Boolean optionalIntWasPresent, Optional<Integer> optionalIntValue, Boolean nullableOptionalIntWasPresent, Optional<Boolean> nullableOptionalIntWasNull, Optional<Integer> nullableOptionalIntValue, Boolean nullableStringWasNull, Optional<String> nullableStringValue, Boolean optionalStringWasPresent, Optional<String> optionalStringValue, Boolean nullableOptionalStringWasPresent, Optional<Boolean> nullableOptionalStringWasNull, Optional<String> nullableOptionalStringValue, Boolean nullableStructWasNull, Optional<ChipStructs.UnitTestingClusterSimpleStruct> nullableStructValue, Boolean optionalStructWasPresent, Optional<ChipStructs.UnitTestingClusterSimpleStruct> optionalStructValue, Boolean nullableOptionalStructWasPresent, Optional<Boolean> nullableOptionalStructWasNull, Optional<ChipStructs.UnitTestingClusterSimpleStruct> nullableOptionalStructValue, Boolean nullableListWasNull, Optional<ArrayList<Integer>> nullableListValue, Boolean optionalListWasPresent, Optional<ArrayList<Integer>> optionalListValue, Boolean nullableOptionalListWasPresent, Optional<Boolean> nullableOptionalListWasNull, Optional<ArrayList<Integer>> nullableOptionalListValue);
+
       void onError(Exception error);
     }
 
     public interface BooleanResponseCallback {
       void onSuccess(Boolean value);
-      
+
       void onError(Exception error);
     }
 
     public interface SimpleStructResponseCallback {
       void onSuccess(ChipStructs.UnitTestingClusterSimpleStruct arg1);
-      
+
       void onError(Exception error);
     }
 
     public interface TestEmitTestEventResponseCallback {
       void onSuccess(Long value);
-      
+
+      void onError(Exception error);
+    }
+
+    public interface TestEmitTestFabricScopedEventResponseCallback {
+      void onSuccess(Long value);
+
       void onError(Exception error);
     }
 
@@ -50883,6 +51359,34 @@
     @Override
     public native long initWithDevice(long devicePtr, int endpointId);
 
+    public void failAtFault(DefaultClusterCallback callback
+      , Integer type, Long id, Long numCallsToSkip, Long numCallsToFail, Boolean takeMutex) {
+      failAtFault(chipClusterPtr, callback, type, id, numCallsToSkip, numCallsToFail, takeMutex, null);
+    }
+
+    public void failAtFault(DefaultClusterCallback callback
+      , Integer type, Long id, Long numCallsToSkip, Long numCallsToFail, Boolean takeMutex
+      , int timedInvokeTimeoutMs) {
+      failAtFault(chipClusterPtr, callback, type, id, numCallsToSkip, numCallsToFail, takeMutex, timedInvokeTimeoutMs);
+    }
+
+    public void failRandomlyAtFault(DefaultClusterCallback callback
+      , Integer type, Long id, Integer percentage) {
+      failRandomlyAtFault(chipClusterPtr, callback, type, id, percentage, null);
+    }
+
+    public void failRandomlyAtFault(DefaultClusterCallback callback
+      , Integer type, Long id, Integer percentage
+      , int timedInvokeTimeoutMs) {
+      failRandomlyAtFault(chipClusterPtr, callback, type, id, percentage, timedInvokeTimeoutMs);
+    }
+    private native void failAtFault(long chipClusterPtr, DefaultClusterCallback Callback
+      , Integer type, Long id, Long numCallsToSkip, Long numCallsToFail, Boolean takeMutex
+      , @Nullable Integer timedInvokeTimeoutMs);
+    private native void failRandomlyAtFault(long chipClusterPtr, DefaultClusterCallback Callback
+      , Integer type, Long id, Integer percentage
+      , @Nullable Integer timedInvokeTimeoutMs);
+
       public interface GeneratedCommandListAttributeCallback {
         void onSuccess( List<Long> valueList);
         void onError(Exception ex);
diff --git a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
index d34fdec..8670eb8 100644
--- a/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
+++ b/src/controller/java/zap-generated/chip/devicecontroller/ClusterInfoMapping.java
@@ -618,6 +618,87 @@
         }
       }
 
+      public static class DelegatedScenesClusterEnhancedAddSceneResponseCallback implements ChipClusters.ScenesCluster.EnhancedAddSceneResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Integer Status, Integer GroupID, Integer SceneID) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo StatusResponseValue = new CommandResponseInfo("Status", "Integer");
+               responseValues.put(StatusResponseValue, Status);
+               CommandResponseInfo GroupIDResponseValue = new CommandResponseInfo("GroupID", "Integer");
+               responseValues.put(GroupIDResponseValue, GroupID);
+               CommandResponseInfo SceneIDResponseValue = new CommandResponseInfo("SceneID", "Integer");
+               responseValues.put(SceneIDResponseValue, SceneID);
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
+      public static class DelegatedScenesClusterEnhancedViewSceneResponseCallback implements ChipClusters.ScenesCluster.EnhancedViewSceneResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Integer Status, Integer GroupID, Integer SceneID, Optional<Integer> TransitionTime, Optional<String> SceneName, Optional<ArrayList<ChipStructs.ScenesClusterExtensionFieldSet>> ExtensionFieldSets) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo StatusResponseValue = new CommandResponseInfo("Status", "Integer");
+               responseValues.put(StatusResponseValue, Status);
+               CommandResponseInfo GroupIDResponseValue = new CommandResponseInfo("GroupID", "Integer");
+               responseValues.put(GroupIDResponseValue, GroupID);
+               CommandResponseInfo SceneIDResponseValue = new CommandResponseInfo("SceneID", "Integer");
+               responseValues.put(SceneIDResponseValue, SceneID);
+               CommandResponseInfo TransitionTimeResponseValue = new CommandResponseInfo("TransitionTime", "Optional<Integer>");
+               responseValues.put(TransitionTimeResponseValue, TransitionTime);
+               CommandResponseInfo SceneNameResponseValue = new CommandResponseInfo("SceneName", "Optional<String>");
+               responseValues.put(SceneNameResponseValue, SceneName);
+               // ExtensionFieldSets: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
+      public static class DelegatedScenesClusterCopySceneResponseCallback implements ChipClusters.ScenesCluster.CopySceneResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Integer Status, Integer GroupIdentifierFrom, Integer SceneIdentifierFrom) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo StatusResponseValue = new CommandResponseInfo("Status", "Integer");
+               responseValues.put(StatusResponseValue, Status);
+               CommandResponseInfo GroupIdentifierFromResponseValue = new CommandResponseInfo("GroupIdentifierFrom", "Integer");
+               responseValues.put(GroupIdentifierFromResponseValue, GroupIdentifierFrom);
+               CommandResponseInfo SceneIdentifierFromResponseValue = new CommandResponseInfo("SceneIdentifierFrom", "Integer");
+               responseValues.put(SceneIdentifierFromResponseValue, SceneIdentifierFrom);
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
       public static class DelegatedScenesClusterLastConfiguredByAttributeCallback implements ChipClusters.ScenesCluster.LastConfiguredByAttributeCallback, DelegatedClusterCallback {
         private ClusterCommandCallback callback;
         @Override
@@ -7233,6 +7314,27 @@
         }
       }
 
+      public static class DelegatedOperationalStateClusterOperationalCommandResponseCallback implements ChipClusters.OperationalStateCluster.OperationalCommandResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(ChipStructs.OperationalStateClusterErrorStateStruct CommandResponseState) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               // CommandResponseState: Struct ErrorStateStruct
+               // Conversion from this type to Java is not properly implemented yet
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
       public static class DelegatedOperationalStateClusterPhaseListAttributeCallback implements ChipClusters.OperationalStateCluster.PhaseListAttributeCallback, DelegatedClusterCallback {
         private ClusterCommandCallback callback;
         @Override
@@ -18778,6 +18880,64 @@
         }
       }
 
+      public static class DelegatedElectricalMeasurementClusterGetProfileInfoResponseCommandCallback implements ChipClusters.ElectricalMeasurementCluster.GetProfileInfoResponseCommandCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Integer profileCount, Integer profileIntervalPeriod, Integer maxNumberOfIntervals, ArrayList<Integer> listOfAttributes) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo profileCountResponseValue = new CommandResponseInfo("profileCount", "Integer");
+               responseValues.put(profileCountResponseValue, profileCount);
+               CommandResponseInfo profileIntervalPeriodResponseValue = new CommandResponseInfo("profileIntervalPeriod", "Integer");
+               responseValues.put(profileIntervalPeriodResponseValue, profileIntervalPeriod);
+               CommandResponseInfo maxNumberOfIntervalsResponseValue = new CommandResponseInfo("maxNumberOfIntervals", "Integer");
+               responseValues.put(maxNumberOfIntervalsResponseValue, maxNumberOfIntervals);
+               // listOfAttributes: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
+      public static class DelegatedElectricalMeasurementClusterGetMeasurementProfileResponseCommandCallback implements ChipClusters.ElectricalMeasurementCluster.GetMeasurementProfileResponseCommandCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Long startTime, Integer status, Integer profileIntervalPeriod, Integer numberOfIntervalsDelivered, Integer attributeId, ArrayList<Integer> intervals) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo startTimeResponseValue = new CommandResponseInfo("startTime", "Long");
+               responseValues.put(startTimeResponseValue, startTime);
+               CommandResponseInfo statusResponseValue = new CommandResponseInfo("status", "Integer");
+               responseValues.put(statusResponseValue, status);
+               CommandResponseInfo profileIntervalPeriodResponseValue = new CommandResponseInfo("profileIntervalPeriod", "Integer");
+               responseValues.put(profileIntervalPeriodResponseValue, profileIntervalPeriod);
+               CommandResponseInfo numberOfIntervalsDeliveredResponseValue = new CommandResponseInfo("numberOfIntervalsDelivered", "Integer");
+               responseValues.put(numberOfIntervalsDeliveredResponseValue, numberOfIntervalsDelivered);
+               CommandResponseInfo attributeIdResponseValue = new CommandResponseInfo("attributeId", "Integer");
+               responseValues.put(attributeIdResponseValue, attributeId);
+               // intervals: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
       public static class DelegatedElectricalMeasurementClusterGeneratedCommandListAttributeCallback implements ChipClusters.ElectricalMeasurementCluster.GeneratedCommandListAttributeCallback, DelegatedClusterCallback {
         private ClusterCommandCallback callback;
         @Override
@@ -18897,6 +19057,58 @@
         }
       }
 
+      public static class DelegatedUnitTestingClusterTestSimpleArgumentResponseCallback implements ChipClusters.UnitTestingCluster.TestSimpleArgumentResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Boolean returnValue) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo returnValueResponseValue = new CommandResponseInfo("returnValue", "Boolean");
+               responseValues.put(returnValueResponseValue, returnValue);
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
+      public static class DelegatedUnitTestingClusterTestStructArrayArgumentResponseCallback implements ChipClusters.UnitTestingCluster.TestStructArrayArgumentResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(ArrayList<ChipStructs.UnitTestingClusterNestedStructList> arg1, ArrayList<ChipStructs.UnitTestingClusterSimpleStruct> arg2, ArrayList<Integer> arg3, ArrayList<Integer> arg4, Integer arg5, Boolean arg6) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               // arg1: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+               // arg2: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+               // arg3: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+               // arg4: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+               CommandResponseInfo arg5ResponseValue = new CommandResponseInfo("arg5", "Integer");
+               responseValues.put(arg5ResponseValue, arg5);
+               CommandResponseInfo arg6ResponseValue = new CommandResponseInfo("arg6", "Boolean");
+               responseValues.put(arg6ResponseValue, arg6);
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
       public static class DelegatedUnitTestingClusterTestListInt8UReverseResponseCallback implements ChipClusters.UnitTestingCluster.TestListInt8UReverseResponseCallback, DelegatedClusterCallback {
         private ClusterCommandCallback callback;
         @Override
@@ -18968,6 +19180,81 @@
         }
       }
 
+      public static class DelegatedUnitTestingClusterTestComplexNullableOptionalResponseCallback implements ChipClusters.UnitTestingCluster.TestComplexNullableOptionalResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Boolean NullableIntWasNull, Optional<Integer> NullableIntValue, Boolean OptionalIntWasPresent, Optional<Integer> OptionalIntValue, Boolean NullableOptionalIntWasPresent, Optional<Boolean> NullableOptionalIntWasNull, Optional<Integer> NullableOptionalIntValue, Boolean NullableStringWasNull, Optional<String> NullableStringValue, Boolean OptionalStringWasPresent, Optional<String> OptionalStringValue, Boolean NullableOptionalStringWasPresent, Optional<Boolean> NullableOptionalStringWasNull, Optional<String> NullableOptionalStringValue, Boolean NullableStructWasNull, Optional<ChipStructs.UnitTestingClusterSimpleStruct> NullableStructValue, Boolean OptionalStructWasPresent, Optional<ChipStructs.UnitTestingClusterSimpleStruct> OptionalStructValue, Boolean NullableOptionalStructWasPresent, Optional<Boolean> NullableOptionalStructWasNull, Optional<ChipStructs.UnitTestingClusterSimpleStruct> NullableOptionalStructValue, Boolean NullableListWasNull, Optional<ArrayList<Integer>> NullableListValue, Boolean OptionalListWasPresent, Optional<ArrayList<Integer>> OptionalListValue, Boolean NullableOptionalListWasPresent, Optional<Boolean> NullableOptionalListWasNull, Optional<ArrayList<Integer>> NullableOptionalListValue) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo NullableIntWasNullResponseValue = new CommandResponseInfo("NullableIntWasNull", "Boolean");
+               responseValues.put(NullableIntWasNullResponseValue, NullableIntWasNull);
+               CommandResponseInfo NullableIntValueResponseValue = new CommandResponseInfo("NullableIntValue", "Optional<Integer>");
+               responseValues.put(NullableIntValueResponseValue, NullableIntValue);
+               CommandResponseInfo OptionalIntWasPresentResponseValue = new CommandResponseInfo("OptionalIntWasPresent", "Boolean");
+               responseValues.put(OptionalIntWasPresentResponseValue, OptionalIntWasPresent);
+               CommandResponseInfo OptionalIntValueResponseValue = new CommandResponseInfo("OptionalIntValue", "Optional<Integer>");
+               responseValues.put(OptionalIntValueResponseValue, OptionalIntValue);
+               CommandResponseInfo NullableOptionalIntWasPresentResponseValue = new CommandResponseInfo("NullableOptionalIntWasPresent", "Boolean");
+               responseValues.put(NullableOptionalIntWasPresentResponseValue, NullableOptionalIntWasPresent);
+               CommandResponseInfo NullableOptionalIntWasNullResponseValue = new CommandResponseInfo("NullableOptionalIntWasNull", "Optional<Boolean>");
+               responseValues.put(NullableOptionalIntWasNullResponseValue, NullableOptionalIntWasNull);
+               CommandResponseInfo NullableOptionalIntValueResponseValue = new CommandResponseInfo("NullableOptionalIntValue", "Optional<Integer>");
+               responseValues.put(NullableOptionalIntValueResponseValue, NullableOptionalIntValue);
+               CommandResponseInfo NullableStringWasNullResponseValue = new CommandResponseInfo("NullableStringWasNull", "Boolean");
+               responseValues.put(NullableStringWasNullResponseValue, NullableStringWasNull);
+               CommandResponseInfo NullableStringValueResponseValue = new CommandResponseInfo("NullableStringValue", "Optional<String>");
+               responseValues.put(NullableStringValueResponseValue, NullableStringValue);
+               CommandResponseInfo OptionalStringWasPresentResponseValue = new CommandResponseInfo("OptionalStringWasPresent", "Boolean");
+               responseValues.put(OptionalStringWasPresentResponseValue, OptionalStringWasPresent);
+               CommandResponseInfo OptionalStringValueResponseValue = new CommandResponseInfo("OptionalStringValue", "Optional<String>");
+               responseValues.put(OptionalStringValueResponseValue, OptionalStringValue);
+               CommandResponseInfo NullableOptionalStringWasPresentResponseValue = new CommandResponseInfo("NullableOptionalStringWasPresent", "Boolean");
+               responseValues.put(NullableOptionalStringWasPresentResponseValue, NullableOptionalStringWasPresent);
+               CommandResponseInfo NullableOptionalStringWasNullResponseValue = new CommandResponseInfo("NullableOptionalStringWasNull", "Optional<Boolean>");
+               responseValues.put(NullableOptionalStringWasNullResponseValue, NullableOptionalStringWasNull);
+               CommandResponseInfo NullableOptionalStringValueResponseValue = new CommandResponseInfo("NullableOptionalStringValue", "Optional<String>");
+               responseValues.put(NullableOptionalStringValueResponseValue, NullableOptionalStringValue);
+               CommandResponseInfo NullableStructWasNullResponseValue = new CommandResponseInfo("NullableStructWasNull", "Boolean");
+               responseValues.put(NullableStructWasNullResponseValue, NullableStructWasNull);
+               // NullableStructValue: Struct SimpleStruct
+               // Conversion from this type to Java is not properly implemented yet
+               CommandResponseInfo OptionalStructWasPresentResponseValue = new CommandResponseInfo("OptionalStructWasPresent", "Boolean");
+               responseValues.put(OptionalStructWasPresentResponseValue, OptionalStructWasPresent);
+               // OptionalStructValue: Struct SimpleStruct
+               // Conversion from this type to Java is not properly implemented yet
+               CommandResponseInfo NullableOptionalStructWasPresentResponseValue = new CommandResponseInfo("NullableOptionalStructWasPresent", "Boolean");
+               responseValues.put(NullableOptionalStructWasPresentResponseValue, NullableOptionalStructWasPresent);
+               CommandResponseInfo NullableOptionalStructWasNullResponseValue = new CommandResponseInfo("NullableOptionalStructWasNull", "Optional<Boolean>");
+               responseValues.put(NullableOptionalStructWasNullResponseValue, NullableOptionalStructWasNull);
+               // NullableOptionalStructValue: Struct SimpleStruct
+               // Conversion from this type to Java is not properly implemented yet
+               CommandResponseInfo NullableListWasNullResponseValue = new CommandResponseInfo("NullableListWasNull", "Boolean");
+               responseValues.put(NullableListWasNullResponseValue, NullableListWasNull);
+               // NullableListValue: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+               CommandResponseInfo OptionalListWasPresentResponseValue = new CommandResponseInfo("OptionalListWasPresent", "Boolean");
+               responseValues.put(OptionalListWasPresentResponseValue, OptionalListWasPresent);
+               // OptionalListValue: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+               CommandResponseInfo NullableOptionalListWasPresentResponseValue = new CommandResponseInfo("NullableOptionalListWasPresent", "Boolean");
+               responseValues.put(NullableOptionalListWasPresentResponseValue, NullableOptionalListWasPresent);
+               CommandResponseInfo NullableOptionalListWasNullResponseValue = new CommandResponseInfo("NullableOptionalListWasNull", "Optional<Boolean>");
+               responseValues.put(NullableOptionalListWasNullResponseValue, NullableOptionalListWasNull);
+               // NullableOptionalListValue: /* TYPE WARNING: array array defaults to */ uint8_t * 
+               // Conversion from this type to Java is not properly implemented yet
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
       public static class DelegatedUnitTestingClusterBooleanResponseCallback implements ChipClusters.UnitTestingCluster.BooleanResponseCallback, DelegatedClusterCallback {
         private ClusterCommandCallback callback;
         @Override
@@ -19031,6 +19318,27 @@
         }
       }
 
+      public static class DelegatedUnitTestingClusterTestEmitTestFabricScopedEventResponseCallback implements ChipClusters.UnitTestingCluster.TestEmitTestFabricScopedEventResponseCallback, DelegatedClusterCallback {
+        private ClusterCommandCallback callback;
+        @Override
+        public void setCallbackDelegate(ClusterCommandCallback callback) {
+          this.callback = callback;
+        }
+
+        @Override
+        public void onSuccess(Long value) {
+           Map<CommandResponseInfo, Object> responseValues = new LinkedHashMap<>();
+               CommandResponseInfo valueResponseValue = new CommandResponseInfo("value", "Long");
+               responseValues.put(valueResponseValue, value);
+           callback.onSuccess(responseValues);
+        }
+
+        @Override
+        public void onError(Exception error) {
+          callback.onFailure(error);
+        }
+      }
+
       public static class DelegatedUnitTestingClusterListInt8uAttributeCallback implements ChipClusters.UnitTestingCluster.ListInt8uAttributeCallback, DelegatedClusterCallback {
         private ClusterCommandCallback callback;
         @Override
@@ -20774,6 +21082,99 @@
            scenesgetSceneMembershipCommandParams
        );
        scenesClusterInteractionInfoMap.put("getSceneMembership", scenesgetSceneMembershipInteractionInfo);
+     Map<String, CommandParameterInfo> scenesenhancedAddSceneCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo scenesenhancedAddScenegroupIDCommandParameterInfo = new CommandParameterInfo("groupID", Integer.class, Integer.class);
+       scenesenhancedAddSceneCommandParams.put("groupID",scenesenhancedAddScenegroupIDCommandParameterInfo);
+      
+       CommandParameterInfo scenesenhancedAddScenesceneIDCommandParameterInfo = new CommandParameterInfo("sceneID", Integer.class, Integer.class);
+       scenesenhancedAddSceneCommandParams.put("sceneID",scenesenhancedAddScenesceneIDCommandParameterInfo);
+      
+       CommandParameterInfo scenesenhancedAddScenetransitionTimeCommandParameterInfo = new CommandParameterInfo("transitionTime", Integer.class, Integer.class);
+       scenesenhancedAddSceneCommandParams.put("transitionTime",scenesenhancedAddScenetransitionTimeCommandParameterInfo);
+      
+       CommandParameterInfo scenesenhancedAddScenesceneNameCommandParameterInfo = new CommandParameterInfo("sceneName", String.class, String.class);
+       scenesenhancedAddSceneCommandParams.put("sceneName",scenesenhancedAddScenesceneNameCommandParameterInfo);
+      
+       InteractionInfo scenesenhancedAddSceneInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ScenesCluster) cluster)
+           .enhancedAddScene((ChipClusters.ScenesCluster.EnhancedAddSceneResponseCallback) callback
+           , (Integer)
+           commandArguments.get("groupID")
+           , (Integer)
+           commandArguments.get("sceneID")
+           , (Integer)
+           commandArguments.get("transitionTime")
+           , (String)
+           commandArguments.get("sceneName")
+           , (ArrayList<ChipStructs.ScenesClusterExtensionFieldSet>)
+           commandArguments.get("extensionFieldSets")
+           
+           );
+         },
+         () -> new DelegatedScenesClusterEnhancedAddSceneResponseCallback(),
+           scenesenhancedAddSceneCommandParams
+       );
+       scenesClusterInteractionInfoMap.put("enhancedAddScene", scenesenhancedAddSceneInteractionInfo);
+     Map<String, CommandParameterInfo> scenesenhancedViewSceneCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo scenesenhancedViewScenegroupIDCommandParameterInfo = new CommandParameterInfo("groupID", Integer.class, Integer.class);
+       scenesenhancedViewSceneCommandParams.put("groupID",scenesenhancedViewScenegroupIDCommandParameterInfo);
+      
+       CommandParameterInfo scenesenhancedViewScenesceneIDCommandParameterInfo = new CommandParameterInfo("sceneID", Integer.class, Integer.class);
+       scenesenhancedViewSceneCommandParams.put("sceneID",scenesenhancedViewScenesceneIDCommandParameterInfo);
+     
+       InteractionInfo scenesenhancedViewSceneInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ScenesCluster) cluster)
+           .enhancedViewScene((ChipClusters.ScenesCluster.EnhancedViewSceneResponseCallback) callback
+           , (Integer)
+           commandArguments.get("groupID")
+           , (Integer)
+           commandArguments.get("sceneID")
+           
+           );
+         },
+         () -> new DelegatedScenesClusterEnhancedViewSceneResponseCallback(),
+           scenesenhancedViewSceneCommandParams
+       );
+       scenesClusterInteractionInfoMap.put("enhancedViewScene", scenesenhancedViewSceneInteractionInfo);
+     Map<String, CommandParameterInfo> scenescopySceneCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo scenescopyScenemodeCommandParameterInfo = new CommandParameterInfo("mode", Integer.class, Integer.class);
+       scenescopySceneCommandParams.put("mode",scenescopyScenemodeCommandParameterInfo);
+      
+       CommandParameterInfo scenescopyScenegroupIdentifierFromCommandParameterInfo = new CommandParameterInfo("groupIdentifierFrom", Integer.class, Integer.class);
+       scenescopySceneCommandParams.put("groupIdentifierFrom",scenescopyScenegroupIdentifierFromCommandParameterInfo);
+      
+       CommandParameterInfo scenescopyScenesceneIdentifierFromCommandParameterInfo = new CommandParameterInfo("sceneIdentifierFrom", Integer.class, Integer.class);
+       scenescopySceneCommandParams.put("sceneIdentifierFrom",scenescopyScenesceneIdentifierFromCommandParameterInfo);
+      
+       CommandParameterInfo scenescopyScenegroupIdentifierToCommandParameterInfo = new CommandParameterInfo("groupIdentifierTo", Integer.class, Integer.class);
+       scenescopySceneCommandParams.put("groupIdentifierTo",scenescopyScenegroupIdentifierToCommandParameterInfo);
+      
+       CommandParameterInfo scenescopyScenesceneIdentifierToCommandParameterInfo = new CommandParameterInfo("sceneIdentifierTo", Integer.class, Integer.class);
+       scenescopySceneCommandParams.put("sceneIdentifierTo",scenescopyScenesceneIdentifierToCommandParameterInfo);
+     
+       InteractionInfo scenescopySceneInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ScenesCluster) cluster)
+           .copyScene((ChipClusters.ScenesCluster.CopySceneResponseCallback) callback
+           , (Integer)
+           commandArguments.get("mode")
+           , (Integer)
+           commandArguments.get("groupIdentifierFrom")
+           , (Integer)
+           commandArguments.get("sceneIdentifierFrom")
+           , (Integer)
+           commandArguments.get("groupIdentifierTo")
+           , (Integer)
+           commandArguments.get("sceneIdentifierTo")
+           
+           );
+         },
+         () -> new DelegatedScenesClusterCopySceneResponseCallback(),
+           scenescopySceneCommandParams
+       );
+       scenesClusterInteractionInfoMap.put("copyScene", scenescopySceneInteractionInfo);
      commandMap.put("scenes", scenesClusterInteractionInfoMap);
      Map<String, InteractionInfo> onOffClusterInteractionInfoMap = new LinkedHashMap<>();
      Map<String, CommandParameterInfo> onOffoffCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
@@ -21123,6 +21524,23 @@
            levelControlstopWithOnOffCommandParams
        );
        levelControlClusterInteractionInfoMap.put("stopWithOnOff", levelControlstopWithOnOffInteractionInfo);
+     Map<String, CommandParameterInfo> levelControlmoveToClosestFrequencyCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo levelControlmoveToClosestFrequencyfrequencyCommandParameterInfo = new CommandParameterInfo("frequency", Integer.class, Integer.class);
+       levelControlmoveToClosestFrequencyCommandParams.put("frequency",levelControlmoveToClosestFrequencyfrequencyCommandParameterInfo);
+     
+       InteractionInfo levelControlmoveToClosestFrequencyInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.LevelControlCluster) cluster)
+           .moveToClosestFrequency((DefaultClusterCallback) callback
+           , (Integer)
+           commandArguments.get("frequency")
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           levelControlmoveToClosestFrequencyCommandParams
+       );
+       levelControlClusterInteractionInfoMap.put("moveToClosestFrequency", levelControlmoveToClosestFrequencyInteractionInfo);
      commandMap.put("levelControl", levelControlClusterInteractionInfoMap);
      Map<String, InteractionInfo> binaryInputBasicClusterInteractionInfoMap = new LinkedHashMap<>();
      commandMap.put("binaryInputBasic", binaryInputBasicClusterInteractionInfoMap);
@@ -21426,6 +21844,18 @@
        actionsClusterInteractionInfoMap.put("disableActionWithDuration", actionsdisableActionWithDurationInteractionInfo);
      commandMap.put("actions", actionsClusterInteractionInfoMap);
      Map<String, InteractionInfo> basicInformationClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> basicInformationmfgSpecificPingCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo basicInformationmfgSpecificPingInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.BasicInformationCluster) cluster)
+           .mfgSpecificPing((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           basicInformationmfgSpecificPingCommandParams
+       );
+       basicInformationClusterInteractionInfoMap.put("mfgSpecificPing", basicInformationmfgSpecificPingInteractionInfo);
      commandMap.put("basicInformation", basicInformationClusterInteractionInfoMap);
      Map<String, InteractionInfo> otaSoftwareUpdateProviderClusterInteractionInfoMap = new LinkedHashMap<>();
      Map<String, CommandParameterInfo> otaSoftwareUpdateProviderqueryImageCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
@@ -22536,8 +22966,73 @@
            dishwasherAlarmresetCommandParams
        );
        dishwasherAlarmClusterInteractionInfoMap.put("reset", dishwasherAlarmresetInteractionInfo);
+     Map<String, CommandParameterInfo> dishwasherAlarmmodifyEnabledAlarmsCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo dishwasherAlarmmodifyEnabledAlarmsmaskCommandParameterInfo = new CommandParameterInfo("mask", Long.class, Long.class);
+       dishwasherAlarmmodifyEnabledAlarmsCommandParams.put("mask",dishwasherAlarmmodifyEnabledAlarmsmaskCommandParameterInfo);
+     
+       InteractionInfo dishwasherAlarmmodifyEnabledAlarmsInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.DishwasherAlarmCluster) cluster)
+           .modifyEnabledAlarms((DefaultClusterCallback) callback
+           , (Long)
+           commandArguments.get("mask")
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           dishwasherAlarmmodifyEnabledAlarmsCommandParams
+       );
+       dishwasherAlarmClusterInteractionInfoMap.put("modifyEnabledAlarms", dishwasherAlarmmodifyEnabledAlarmsInteractionInfo);
      commandMap.put("dishwasherAlarm", dishwasherAlarmClusterInteractionInfoMap);
      Map<String, InteractionInfo> operationalStateClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> operationalStatepauseCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo operationalStatepauseInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.OperationalStateCluster) cluster)
+           .pause((ChipClusters.OperationalStateCluster.OperationalCommandResponseCallback) callback
+           
+           );
+         },
+         () -> new DelegatedOperationalStateClusterOperationalCommandResponseCallback(),
+           operationalStatepauseCommandParams
+       );
+       operationalStateClusterInteractionInfoMap.put("pause", operationalStatepauseInteractionInfo);
+     Map<String, CommandParameterInfo> operationalStatestopCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo operationalStatestopInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.OperationalStateCluster) cluster)
+           .stop((ChipClusters.OperationalStateCluster.OperationalCommandResponseCallback) callback
+           
+           );
+         },
+         () -> new DelegatedOperationalStateClusterOperationalCommandResponseCallback(),
+           operationalStatestopCommandParams
+       );
+       operationalStateClusterInteractionInfoMap.put("stop", operationalStatestopInteractionInfo);
+     Map<String, CommandParameterInfo> operationalStatestartCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo operationalStatestartInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.OperationalStateCluster) cluster)
+           .start((ChipClusters.OperationalStateCluster.OperationalCommandResponseCallback) callback
+           
+           );
+         },
+         () -> new DelegatedOperationalStateClusterOperationalCommandResponseCallback(),
+           operationalStatestartCommandParams
+       );
+       operationalStateClusterInteractionInfoMap.put("start", operationalStatestartInteractionInfo);
+     Map<String, CommandParameterInfo> operationalStateresumeCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo operationalStateresumeInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.OperationalStateCluster) cluster)
+           .resume((ChipClusters.OperationalStateCluster.OperationalCommandResponseCallback) callback
+           
+           );
+         },
+         () -> new DelegatedOperationalStateClusterOperationalCommandResponseCallback(),
+           operationalStateresumeCommandParams
+       );
+       operationalStateClusterInteractionInfoMap.put("resume", operationalStateresumeInteractionInfo);
      commandMap.put("operationalState", operationalStateClusterInteractionInfoMap);
      Map<String, InteractionInfo> rvcOperationalStateClusterInteractionInfoMap = new LinkedHashMap<>();
      Map<String, CommandParameterInfo> rvcOperationalStatepauseCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
@@ -22590,28 +23085,172 @@
        rvcOperationalStateClusterInteractionInfoMap.put("resume", rvcOperationalStateresumeInteractionInfo);
      commandMap.put("rvcOperationalState", rvcOperationalStateClusterInteractionInfoMap);
      Map<String, InteractionInfo> hepaFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> hepaFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo hepaFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.HepaFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           hepaFilterMonitoringresetConditionCommandParams
+       );
+       hepaFilterMonitoringClusterInteractionInfoMap.put("resetCondition", hepaFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("hepaFilterMonitoring", hepaFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> activatedCarbonFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> activatedCarbonFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo activatedCarbonFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ActivatedCarbonFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           activatedCarbonFilterMonitoringresetConditionCommandParams
+       );
+       activatedCarbonFilterMonitoringClusterInteractionInfoMap.put("resetCondition", activatedCarbonFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("activatedCarbonFilterMonitoring", activatedCarbonFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> ceramicFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> ceramicFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo ceramicFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.CeramicFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           ceramicFilterMonitoringresetConditionCommandParams
+       );
+       ceramicFilterMonitoringClusterInteractionInfoMap.put("resetCondition", ceramicFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("ceramicFilterMonitoring", ceramicFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> electrostaticFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> electrostaticFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo electrostaticFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ElectrostaticFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           electrostaticFilterMonitoringresetConditionCommandParams
+       );
+       electrostaticFilterMonitoringClusterInteractionInfoMap.put("resetCondition", electrostaticFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("electrostaticFilterMonitoring", electrostaticFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> uvFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> uvFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo uvFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.UvFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           uvFilterMonitoringresetConditionCommandParams
+       );
+       uvFilterMonitoringClusterInteractionInfoMap.put("resetCondition", uvFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("uvFilterMonitoring", uvFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> ionizingFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> ionizingFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo ionizingFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.IonizingFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           ionizingFilterMonitoringresetConditionCommandParams
+       );
+       ionizingFilterMonitoringClusterInteractionInfoMap.put("resetCondition", ionizingFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("ionizingFilterMonitoring", ionizingFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> zeoliteFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> zeoliteFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo zeoliteFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ZeoliteFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           zeoliteFilterMonitoringresetConditionCommandParams
+       );
+       zeoliteFilterMonitoringClusterInteractionInfoMap.put("resetCondition", zeoliteFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("zeoliteFilterMonitoring", zeoliteFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> ozoneFilterMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> ozoneFilterMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo ozoneFilterMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.OzoneFilterMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           ozoneFilterMonitoringresetConditionCommandParams
+       );
+       ozoneFilterMonitoringClusterInteractionInfoMap.put("resetCondition", ozoneFilterMonitoringresetConditionInteractionInfo);
      commandMap.put("ozoneFilterMonitoring", ozoneFilterMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> waterTankMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> waterTankMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo waterTankMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.WaterTankMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           waterTankMonitoringresetConditionCommandParams
+       );
+       waterTankMonitoringClusterInteractionInfoMap.put("resetCondition", waterTankMonitoringresetConditionInteractionInfo);
      commandMap.put("waterTankMonitoring", waterTankMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> fuelTankMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> fuelTankMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo fuelTankMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.FuelTankMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           fuelTankMonitoringresetConditionCommandParams
+       );
+       fuelTankMonitoringClusterInteractionInfoMap.put("resetCondition", fuelTankMonitoringresetConditionInteractionInfo);
      commandMap.put("fuelTankMonitoring", fuelTankMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> inkCartridgeMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> inkCartridgeMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo inkCartridgeMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.InkCartridgeMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           inkCartridgeMonitoringresetConditionCommandParams
+       );
+       inkCartridgeMonitoringClusterInteractionInfoMap.put("resetCondition", inkCartridgeMonitoringresetConditionInteractionInfo);
      commandMap.put("inkCartridgeMonitoring", inkCartridgeMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> tonerCartridgeMonitoringClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> tonerCartridgeMonitoringresetConditionCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo tonerCartridgeMonitoringresetConditionInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.TonerCartridgeMonitoringCluster) cluster)
+           .resetCondition((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           tonerCartridgeMonitoringresetConditionCommandParams
+       );
+       tonerCartridgeMonitoringClusterInteractionInfoMap.put("resetCondition", tonerCartridgeMonitoringresetConditionInteractionInfo);
      commandMap.put("tonerCartridgeMonitoring", tonerCartridgeMonitoringClusterInteractionInfoMap);
      Map<String, InteractionInfo> doorLockClusterInteractionInfoMap = new LinkedHashMap<>();
      Map<String, CommandParameterInfo> doorLocklockDoorCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
@@ -23051,6 +23690,23 @@
            doorLockclearCredentialCommandParams
        );
        doorLockClusterInteractionInfoMap.put("clearCredential", doorLockclearCredentialInteractionInfo);
+     Map<String, CommandParameterInfo> doorLockunboltDoorCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo doorLockunboltDoorPINCodeCommandParameterInfo = new CommandParameterInfo("PINCode", Optional.class, byte[].class);
+       doorLockunboltDoorCommandParams.put("PINCode",doorLockunboltDoorPINCodeCommandParameterInfo);
+     
+       InteractionInfo doorLockunboltDoorInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.DoorLockCluster) cluster)
+           .unboltDoor((DefaultClusterCallback) callback
+           , (Optional<byte[]>)
+           commandArguments.get("PINCode")
+           , 10000
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           doorLockunboltDoorCommandParams
+       );
+       doorLockClusterInteractionInfoMap.put("unboltDoor", doorLockunboltDoorInteractionInfo);
      commandMap.put("doorLock", doorLockClusterInteractionInfoMap);
      Map<String, InteractionInfo> windowCoveringClusterInteractionInfoMap = new LinkedHashMap<>();
      Map<String, CommandParameterInfo> windowCoveringupOrOpenCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
@@ -23279,6 +23935,33 @@
        thermostatClusterInteractionInfoMap.put("clearWeeklySchedule", thermostatclearWeeklyScheduleInteractionInfo);
      commandMap.put("thermostat", thermostatClusterInteractionInfoMap);
      Map<String, InteractionInfo> fanControlClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> fanControlstepCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo fanControlstepdirectionCommandParameterInfo = new CommandParameterInfo("direction", Integer.class, Integer.class);
+       fanControlstepCommandParams.put("direction",fanControlstepdirectionCommandParameterInfo);
+      
+       CommandParameterInfo fanControlstepwrapCommandParameterInfo = new CommandParameterInfo("wrap", Optional.class, Boolean.class);
+       fanControlstepCommandParams.put("wrap",fanControlstepwrapCommandParameterInfo);
+      
+       CommandParameterInfo fanControlsteplowestOffCommandParameterInfo = new CommandParameterInfo("lowestOff", Optional.class, Boolean.class);
+       fanControlstepCommandParams.put("lowestOff",fanControlsteplowestOffCommandParameterInfo);
+     
+       InteractionInfo fanControlstepInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.FanControlCluster) cluster)
+           .step((DefaultClusterCallback) callback
+           , (Integer)
+           commandArguments.get("direction")
+           , (Optional<Boolean>)
+           commandArguments.get("wrap")
+           , (Optional<Boolean>)
+           commandArguments.get("lowestOff")
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           fanControlstepCommandParams
+       );
+       fanControlClusterInteractionInfoMap.put("step", fanControlstepInteractionInfo);
      commandMap.put("fanControl", fanControlClusterInteractionInfoMap);
      Map<String, InteractionInfo> thermostatUserInterfaceConfigurationClusterInteractionInfoMap = new LinkedHashMap<>();
      commandMap.put("thermostatUserInterfaceConfiguration", thermostatUserInterfaceConfigurationClusterInteractionInfoMap);
@@ -24580,6 +25263,45 @@
        accountLoginClusterInteractionInfoMap.put("logout", accountLoginlogoutInteractionInfo);
      commandMap.put("accountLogin", accountLoginClusterInteractionInfoMap);
      Map<String, InteractionInfo> electricalMeasurementClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> electricalMeasurementgetProfileInfoCommandCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       InteractionInfo electricalMeasurementgetProfileInfoCommandInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ElectricalMeasurementCluster) cluster)
+           .getProfileInfoCommand((DefaultClusterCallback) callback
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           electricalMeasurementgetProfileInfoCommandCommandParams
+       );
+       electricalMeasurementClusterInteractionInfoMap.put("getProfileInfoCommand", electricalMeasurementgetProfileInfoCommandInteractionInfo);
+     Map<String, CommandParameterInfo> electricalMeasurementgetMeasurementProfileCommandCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo electricalMeasurementgetMeasurementProfileCommandattributeIdCommandParameterInfo = new CommandParameterInfo("attributeId", Integer.class, Integer.class);
+       electricalMeasurementgetMeasurementProfileCommandCommandParams.put("attributeId",electricalMeasurementgetMeasurementProfileCommandattributeIdCommandParameterInfo);
+      
+       CommandParameterInfo electricalMeasurementgetMeasurementProfileCommandstartTimeCommandParameterInfo = new CommandParameterInfo("startTime", Long.class, Long.class);
+       electricalMeasurementgetMeasurementProfileCommandCommandParams.put("startTime",electricalMeasurementgetMeasurementProfileCommandstartTimeCommandParameterInfo);
+      
+       CommandParameterInfo electricalMeasurementgetMeasurementProfileCommandnumberOfIntervalsCommandParameterInfo = new CommandParameterInfo("numberOfIntervals", Integer.class, Integer.class);
+       electricalMeasurementgetMeasurementProfileCommandCommandParams.put("numberOfIntervals",electricalMeasurementgetMeasurementProfileCommandnumberOfIntervalsCommandParameterInfo);
+     
+       InteractionInfo electricalMeasurementgetMeasurementProfileCommandInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.ElectricalMeasurementCluster) cluster)
+           .getMeasurementProfileCommand((DefaultClusterCallback) callback
+           , (Integer)
+           commandArguments.get("attributeId")
+           , (Long)
+           commandArguments.get("startTime")
+           , (Integer)
+           commandArguments.get("numberOfIntervals")
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           electricalMeasurementgetMeasurementProfileCommandCommandParams
+       );
+       electricalMeasurementClusterInteractionInfoMap.put("getMeasurementProfileCommand", electricalMeasurementgetMeasurementProfileCommandInteractionInfo);
      commandMap.put("electricalMeasurement", electricalMeasurementClusterInteractionInfoMap);
      Map<String, InteractionInfo> unitTestingClusterInteractionInfoMap = new LinkedHashMap<>();
      Map<String, CommandParameterInfo> unitTestingtestCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
@@ -24652,6 +25374,59 @@
            unitTestingtestAddArgumentsCommandParams
        );
        unitTestingClusterInteractionInfoMap.put("testAddArguments", unitTestingtestAddArgumentsInteractionInfo);
+     Map<String, CommandParameterInfo> unitTestingtestSimpleArgumentRequestCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo unitTestingtestSimpleArgumentRequestarg1CommandParameterInfo = new CommandParameterInfo("arg1", Boolean.class, Boolean.class);
+       unitTestingtestSimpleArgumentRequestCommandParams.put("arg1",unitTestingtestSimpleArgumentRequestarg1CommandParameterInfo);
+     
+       InteractionInfo unitTestingtestSimpleArgumentRequestInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.UnitTestingCluster) cluster)
+           .testSimpleArgumentRequest((ChipClusters.UnitTestingCluster.TestSimpleArgumentResponseCallback) callback
+           , (Boolean)
+           commandArguments.get("arg1")
+           
+           );
+         },
+         () -> new DelegatedUnitTestingClusterTestSimpleArgumentResponseCallback(),
+           unitTestingtestSimpleArgumentRequestCommandParams
+       );
+       unitTestingClusterInteractionInfoMap.put("testSimpleArgumentRequest", unitTestingtestSimpleArgumentRequestInteractionInfo);
+     Map<String, CommandParameterInfo> unitTestingtestStructArrayArgumentRequestCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo unitTestingtestStructArrayArgumentRequestarg3CommandParameterInfo = new CommandParameterInfo("arg3", ArrayList.class, Integer.class);
+       unitTestingtestStructArrayArgumentRequestCommandParams.put("arg3",unitTestingtestStructArrayArgumentRequestarg3CommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestStructArrayArgumentRequestarg4CommandParameterInfo = new CommandParameterInfo("arg4", ArrayList.class, Integer.class);
+       unitTestingtestStructArrayArgumentRequestCommandParams.put("arg4",unitTestingtestStructArrayArgumentRequestarg4CommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestStructArrayArgumentRequestarg5CommandParameterInfo = new CommandParameterInfo("arg5", Integer.class, Integer.class);
+       unitTestingtestStructArrayArgumentRequestCommandParams.put("arg5",unitTestingtestStructArrayArgumentRequestarg5CommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestStructArrayArgumentRequestarg6CommandParameterInfo = new CommandParameterInfo("arg6", Boolean.class, Boolean.class);
+       unitTestingtestStructArrayArgumentRequestCommandParams.put("arg6",unitTestingtestStructArrayArgumentRequestarg6CommandParameterInfo);
+     
+       InteractionInfo unitTestingtestStructArrayArgumentRequestInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.UnitTestingCluster) cluster)
+           .testStructArrayArgumentRequest((ChipClusters.UnitTestingCluster.TestStructArrayArgumentResponseCallback) callback
+           , (ArrayList<ChipStructs.UnitTestingClusterNestedStructList>)
+           commandArguments.get("arg1")
+           , (ArrayList<ChipStructs.UnitTestingClusterSimpleStruct>)
+           commandArguments.get("arg2")
+           , (ArrayList<Integer>)
+           commandArguments.get("arg3")
+           , (ArrayList<Integer>)
+           commandArguments.get("arg4")
+           , (Integer)
+           commandArguments.get("arg5")
+           , (Boolean)
+           commandArguments.get("arg6")
+           
+           );
+         },
+         () -> new DelegatedUnitTestingClusterTestStructArrayArgumentResponseCallback(),
+           unitTestingtestStructArrayArgumentRequestCommandParams
+       );
+       unitTestingClusterInteractionInfoMap.put("testStructArrayArgumentRequest", unitTestingtestStructArrayArgumentRequestInteractionInfo);
      Map<String, CommandParameterInfo> unitTestingtestStructArgumentRequestCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
        InteractionInfo unitTestingtestStructArgumentRequestInteractionInfo = new InteractionInfo(
          (cluster, callback, commandArguments) -> {
@@ -24795,6 +25570,69 @@
            unitTestingtestNullableOptionalRequestCommandParams
        );
        unitTestingClusterInteractionInfoMap.put("testNullableOptionalRequest", unitTestingtestNullableOptionalRequestInteractionInfo);
+     Map<String, CommandParameterInfo> unitTestingtestComplexNullableOptionalRequestCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestnullableIntCommandParameterInfo = new CommandParameterInfo("nullableInt", Integer.class, Integer.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("nullableInt",unitTestingtestComplexNullableOptionalRequestnullableIntCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestoptionalIntCommandParameterInfo = new CommandParameterInfo("optionalInt", Optional.class, Integer.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("optionalInt",unitTestingtestComplexNullableOptionalRequestoptionalIntCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestnullableOptionalIntCommandParameterInfo = new CommandParameterInfo("nullableOptionalInt", Optional.class, Integer.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("nullableOptionalInt",unitTestingtestComplexNullableOptionalRequestnullableOptionalIntCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestnullableStringCommandParameterInfo = new CommandParameterInfo("nullableString", String.class, String.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("nullableString",unitTestingtestComplexNullableOptionalRequestnullableStringCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestoptionalStringCommandParameterInfo = new CommandParameterInfo("optionalString", Optional.class, String.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("optionalString",unitTestingtestComplexNullableOptionalRequestoptionalStringCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestnullableOptionalStringCommandParameterInfo = new CommandParameterInfo("nullableOptionalString", Optional.class, String.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("nullableOptionalString",unitTestingtestComplexNullableOptionalRequestnullableOptionalStringCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestnullableListCommandParameterInfo = new CommandParameterInfo("nullableList", ArrayList.class, Integer.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("nullableList",unitTestingtestComplexNullableOptionalRequestnullableListCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestoptionalListCommandParameterInfo = new CommandParameterInfo("optionalList", Optional.class, Integer.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("optionalList",unitTestingtestComplexNullableOptionalRequestoptionalListCommandParameterInfo);
+      
+       CommandParameterInfo unitTestingtestComplexNullableOptionalRequestnullableOptionalListCommandParameterInfo = new CommandParameterInfo("nullableOptionalList", Optional.class, Integer.class);
+       unitTestingtestComplexNullableOptionalRequestCommandParams.put("nullableOptionalList",unitTestingtestComplexNullableOptionalRequestnullableOptionalListCommandParameterInfo);
+     
+       InteractionInfo unitTestingtestComplexNullableOptionalRequestInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.UnitTestingCluster) cluster)
+           .testComplexNullableOptionalRequest((ChipClusters.UnitTestingCluster.TestComplexNullableOptionalResponseCallback) callback
+           , (Integer)
+           commandArguments.get("nullableInt")
+           , (Optional<Integer>)
+           commandArguments.get("optionalInt")
+           , (Optional<Integer>)
+           commandArguments.get("nullableOptionalInt")
+           , (String)
+           commandArguments.get("nullableString")
+           , (Optional<String>)
+           commandArguments.get("optionalString")
+           , (Optional<String>)
+           commandArguments.get("nullableOptionalString")
+           , (ChipStructs.UnitTestingClusterSimpleStruct)
+           commandArguments.get("nullableStruct")
+           , (Optional<ChipStructs.UnitTestingClusterSimpleStruct>)
+           commandArguments.get("optionalStruct")
+           , (Optional<ChipStructs.UnitTestingClusterSimpleStruct>)
+           commandArguments.get("nullableOptionalStruct")
+           , (ArrayList<Integer>)
+           commandArguments.get("nullableList")
+           , (Optional<ArrayList<Integer>>)
+           commandArguments.get("optionalList")
+           , (Optional<ArrayList<Integer>>)
+           commandArguments.get("nullableOptionalList")
+           
+           );
+         },
+         () -> new DelegatedUnitTestingClusterTestComplexNullableOptionalResponseCallback(),
+           unitTestingtestComplexNullableOptionalRequestCommandParams
+       );
+       unitTestingClusterInteractionInfoMap.put("testComplexNullableOptionalRequest", unitTestingtestComplexNullableOptionalRequestInteractionInfo);
      Map<String, CommandParameterInfo> unitTestingsimpleStructEchoRequestCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
        InteractionInfo unitTestingsimpleStructEchoRequestInteractionInfo = new InteractionInfo(
          (cluster, callback, commandArguments) -> {
@@ -24865,8 +25703,89 @@
            unitTestingtestEmitTestEventRequestCommandParams
        );
        unitTestingClusterInteractionInfoMap.put("testEmitTestEventRequest", unitTestingtestEmitTestEventRequestInteractionInfo);
+     Map<String, CommandParameterInfo> unitTestingtestEmitTestFabricScopedEventRequestCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo unitTestingtestEmitTestFabricScopedEventRequestarg1CommandParameterInfo = new CommandParameterInfo("arg1", Integer.class, Integer.class);
+       unitTestingtestEmitTestFabricScopedEventRequestCommandParams.put("arg1",unitTestingtestEmitTestFabricScopedEventRequestarg1CommandParameterInfo);
+     
+       InteractionInfo unitTestingtestEmitTestFabricScopedEventRequestInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.UnitTestingCluster) cluster)
+           .testEmitTestFabricScopedEventRequest((ChipClusters.UnitTestingCluster.TestEmitTestFabricScopedEventResponseCallback) callback
+           , (Integer)
+           commandArguments.get("arg1")
+           
+           );
+         },
+         () -> new DelegatedUnitTestingClusterTestEmitTestFabricScopedEventResponseCallback(),
+           unitTestingtestEmitTestFabricScopedEventRequestCommandParams
+       );
+       unitTestingClusterInteractionInfoMap.put("testEmitTestFabricScopedEventRequest", unitTestingtestEmitTestFabricScopedEventRequestInteractionInfo);
      commandMap.put("unitTesting", unitTestingClusterInteractionInfoMap);
      Map<String, InteractionInfo> faultInjectionClusterInteractionInfoMap = new LinkedHashMap<>();
+     Map<String, CommandParameterInfo> faultInjectionfailAtFaultCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo faultInjectionfailAtFaulttypeCommandParameterInfo = new CommandParameterInfo("type", Integer.class, Integer.class);
+       faultInjectionfailAtFaultCommandParams.put("type",faultInjectionfailAtFaulttypeCommandParameterInfo);
+      
+       CommandParameterInfo faultInjectionfailAtFaultidCommandParameterInfo = new CommandParameterInfo("id", Long.class, Long.class);
+       faultInjectionfailAtFaultCommandParams.put("id",faultInjectionfailAtFaultidCommandParameterInfo);
+      
+       CommandParameterInfo faultInjectionfailAtFaultnumCallsToSkipCommandParameterInfo = new CommandParameterInfo("numCallsToSkip", Long.class, Long.class);
+       faultInjectionfailAtFaultCommandParams.put("numCallsToSkip",faultInjectionfailAtFaultnumCallsToSkipCommandParameterInfo);
+      
+       CommandParameterInfo faultInjectionfailAtFaultnumCallsToFailCommandParameterInfo = new CommandParameterInfo("numCallsToFail", Long.class, Long.class);
+       faultInjectionfailAtFaultCommandParams.put("numCallsToFail",faultInjectionfailAtFaultnumCallsToFailCommandParameterInfo);
+      
+       CommandParameterInfo faultInjectionfailAtFaulttakeMutexCommandParameterInfo = new CommandParameterInfo("takeMutex", Boolean.class, Boolean.class);
+       faultInjectionfailAtFaultCommandParams.put("takeMutex",faultInjectionfailAtFaulttakeMutexCommandParameterInfo);
+     
+       InteractionInfo faultInjectionfailAtFaultInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.FaultInjectionCluster) cluster)
+           .failAtFault((DefaultClusterCallback) callback
+           , (Integer)
+           commandArguments.get("type")
+           , (Long)
+           commandArguments.get("id")
+           , (Long)
+           commandArguments.get("numCallsToSkip")
+           , (Long)
+           commandArguments.get("numCallsToFail")
+           , (Boolean)
+           commandArguments.get("takeMutex")
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           faultInjectionfailAtFaultCommandParams
+       );
+       faultInjectionClusterInteractionInfoMap.put("failAtFault", faultInjectionfailAtFaultInteractionInfo);
+     Map<String, CommandParameterInfo> faultInjectionfailRandomlyAtFaultCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
+       CommandParameterInfo faultInjectionfailRandomlyAtFaulttypeCommandParameterInfo = new CommandParameterInfo("type", Integer.class, Integer.class);
+       faultInjectionfailRandomlyAtFaultCommandParams.put("type",faultInjectionfailRandomlyAtFaulttypeCommandParameterInfo);
+      
+       CommandParameterInfo faultInjectionfailRandomlyAtFaultidCommandParameterInfo = new CommandParameterInfo("id", Long.class, Long.class);
+       faultInjectionfailRandomlyAtFaultCommandParams.put("id",faultInjectionfailRandomlyAtFaultidCommandParameterInfo);
+      
+       CommandParameterInfo faultInjectionfailRandomlyAtFaultpercentageCommandParameterInfo = new CommandParameterInfo("percentage", Integer.class, Integer.class);
+       faultInjectionfailRandomlyAtFaultCommandParams.put("percentage",faultInjectionfailRandomlyAtFaultpercentageCommandParameterInfo);
+     
+       InteractionInfo faultInjectionfailRandomlyAtFaultInteractionInfo = new InteractionInfo(
+         (cluster, callback, commandArguments) -> {
+           ((ChipClusters.FaultInjectionCluster) cluster)
+           .failRandomlyAtFault((DefaultClusterCallback) callback
+           , (Integer)
+           commandArguments.get("type")
+           , (Long)
+           commandArguments.get("id")
+           , (Integer)
+           commandArguments.get("percentage")
+           
+           );
+         },
+         () -> new DelegatedDefaultClusterCallback(),
+           faultInjectionfailRandomlyAtFaultCommandParams
+       );
+       faultInjectionClusterInteractionInfoMap.put("failRandomlyAtFault", faultInjectionfailRandomlyAtFaultInteractionInfo);
      commandMap.put("faultInjection", faultInjectionClusterInteractionInfoMap);
      return commandMap;
   }