ZAP-generated Matter TV Casting Attribute and Cluster objects (#32392)

* ZAP-generated Matter TV Casting Attribute and Cluster objects
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge.xcodeproj/project.pbxproj b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge.xcodeproj/project.pbxproj
index 8e87fc9..f55ca2b 100644
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge.xcodeproj/project.pbxproj
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge.xcodeproj/project.pbxproj
@@ -7,6 +7,14 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		39589F162B91556B00BE040C /* MCStructsObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 39589F152B91556B00BE040C /* MCStructsObjc.h */; };
+		39589F182B91557700BE040C /* MCStructsObjc.mm in Sources */ = {isa = PBXBuildFile; fileRef = 39589F172B91557700BE040C /* MCStructsObjc.mm */; };
+		39BF57C52B8CFF790081653C /* MCAttributeObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BF57C42B8CFF790081653C /* MCAttributeObjects.h */; };
+		39BF57C72B8CFFB90081653C /* MCAttributeObjects.mm in Sources */ = {isa = PBXBuildFile; fileRef = 39BF57C62B8CFFB90081653C /* MCAttributeObjects.mm */; };
+		39BF57C92B8D66540081653C /* NSStringSpanConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BF57C82B8D66540081653C /* NSStringSpanConversion.h */; };
+		39BF57CB2B8E54F80081653C /* NSDataSpanConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BF57CA2B8E54F80081653C /* NSDataSpanConversion.h */; };
+		39BF57CD2B8FC0EF0081653C /* MCClusterObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BF57CC2B8FC0EF0081653C /* MCClusterObjects.h */; };
+		39BF57CF2B8FC1030081653C /* MCClusterObjects.mm in Sources */ = {isa = PBXBuildFile; fileRef = 39BF57CE2B8FC1030081653C /* MCClusterObjects.mm */; };
 		3C0474062B3F7E5F0012AE95 /* MCEndpointFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C0474052B3F7E5F0012AE95 /* MCEndpointFilter.h */; };
 		3C04740C2B4604CF0012AE95 /* MCCryptoUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C04740B2B4604CF0012AE95 /* MCCryptoUtils.h */; };
 		3C04740E2B4605B40012AE95 /* MCCryptoUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C04740D2B4605B40012AE95 /* MCCryptoUtils.mm */; };
@@ -34,16 +42,12 @@
 		3C4F52282B51DB3000BB8A10 /* MCCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C4F52272B51DB3000BB8A10 /* MCCommand.h */; };
 		3C4F522A2B51DFAE00BB8A10 /* MCCommand_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C4F52292B51DFAE00BB8A10 /* MCCommand_Internal.h */; };
 		3C4F522C2B51E02800BB8A10 /* MCCommand.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C4F522B2B51E02800BB8A10 /* MCCommand.mm */; };
-		3C4F52342B57338B00BB8A10 /* MCClusterObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C4F52332B57338B00BB8A10 /* MCClusterObjects.h */; };
-		3C4F52362B5733A200BB8A10 /* MCClusterObjects.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C4F52352B5733A200BB8A10 /* MCClusterObjects.mm */; };
 		3C621CA12B5F6CF8005CDBA3 /* MCCommandObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C621CA02B5F6CF8005CDBA3 /* MCCommandObjects.h */; };
 		3C621CA32B5F6D08005CDBA3 /* MCCommandObjects.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C621CA22B5F6D08005CDBA3 /* MCCommandObjects.mm */; };
 		3C621CA52B605A6A005CDBA3 /* MCAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C621CA42B605A6A005CDBA3 /* MCAttribute.h */; };
 		3C621CA72B605AA1005CDBA3 /* MCObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C621CA62B605AA1005CDBA3 /* MCObserver.h */; };
 		3C621CA92B605C52005CDBA3 /* MCAttribute_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C621CA82B605C52005CDBA3 /* MCAttribute_Internal.h */; };
 		3C621CAB2B605C6E005CDBA3 /* MCAttribute.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C621CAA2B605C6E005CDBA3 /* MCAttribute.mm */; };
-		3C621CAD2B605E94005CDBA3 /* MCAttributeObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C621CAC2B605E94005CDBA3 /* MCAttributeObjects.h */; };
-		3C621CAF2B605EA7005CDBA3 /* MCAttributeObjects.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C621CAE2B605EA7005CDBA3 /* MCAttributeObjects.mm */; };
 		3C66FBFC290327BB00B63FE7 /* AppParameters.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C66FBFB290327BB00B63FE7 /* AppParameters.mm */; };
 		3C6920462AA1093300D0F613 /* MCDeviceAttestationCredentialsProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C6920452AA1093300D0F613 /* MCDeviceAttestationCredentialsProvider.h */; };
 		3C6920482AA1094000D0F613 /* MCDeviceAttestationCredentialsProvider.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C6920472AA1094000D0F613 /* MCDeviceAttestationCredentialsProvider.mm */; };
@@ -80,6 +84,14 @@
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
+		39589F152B91556B00BE040C /* MCStructsObjc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCStructsObjc.h; sourceTree = "<group>"; };
+		39589F172B91557700BE040C /* MCStructsObjc.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCStructsObjc.mm; sourceTree = "<group>"; };
+		39BF57C42B8CFF790081653C /* MCAttributeObjects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCAttributeObjects.h; sourceTree = "<group>"; };
+		39BF57C62B8CFFB90081653C /* MCAttributeObjects.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCAttributeObjects.mm; sourceTree = "<group>"; };
+		39BF57C82B8D66540081653C /* NSStringSpanConversion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSStringSpanConversion.h; sourceTree = "<group>"; };
+		39BF57CA2B8E54F80081653C /* NSDataSpanConversion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NSDataSpanConversion.h; sourceTree = "<group>"; };
+		39BF57CC2B8FC0EF0081653C /* MCClusterObjects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCClusterObjects.h; sourceTree = "<group>"; };
+		39BF57CE2B8FC1030081653C /* MCClusterObjects.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCClusterObjects.mm; sourceTree = "<group>"; };
 		3C0474052B3F7E5F0012AE95 /* MCEndpointFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCEndpointFilter.h; sourceTree = "<group>"; };
 		3C04740B2B4604CF0012AE95 /* MCCryptoUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCCryptoUtils.h; sourceTree = "<group>"; };
 		3C04740D2B4605B40012AE95 /* MCCryptoUtils.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCCryptoUtils.mm; sourceTree = "<group>"; };
@@ -112,16 +124,12 @@
 		3C4F52272B51DB3000BB8A10 /* MCCommand.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCCommand.h; sourceTree = "<group>"; };
 		3C4F52292B51DFAE00BB8A10 /* MCCommand_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCCommand_Internal.h; sourceTree = "<group>"; };
 		3C4F522B2B51E02800BB8A10 /* MCCommand.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCCommand.mm; sourceTree = "<group>"; };
-		3C4F52332B57338B00BB8A10 /* MCClusterObjects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCClusterObjects.h; sourceTree = "<group>"; };
-		3C4F52352B5733A200BB8A10 /* MCClusterObjects.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCClusterObjects.mm; sourceTree = "<group>"; };
 		3C621CA02B5F6CF8005CDBA3 /* MCCommandObjects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCCommandObjects.h; sourceTree = "<group>"; };
 		3C621CA22B5F6D08005CDBA3 /* MCCommandObjects.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCCommandObjects.mm; sourceTree = "<group>"; };
 		3C621CA42B605A6A005CDBA3 /* MCAttribute.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCAttribute.h; sourceTree = "<group>"; };
 		3C621CA62B605AA1005CDBA3 /* MCObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCObserver.h; sourceTree = "<group>"; };
 		3C621CA82B605C52005CDBA3 /* MCAttribute_Internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCAttribute_Internal.h; sourceTree = "<group>"; };
 		3C621CAA2B605C6E005CDBA3 /* MCAttribute.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCAttribute.mm; sourceTree = "<group>"; };
-		3C621CAC2B605E94005CDBA3 /* MCAttributeObjects.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCAttributeObjects.h; sourceTree = "<group>"; usesTabs = 0; };
-		3C621CAE2B605EA7005CDBA3 /* MCAttributeObjects.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = MCAttributeObjects.mm; sourceTree = "<group>"; };
 		3C66FBFA2903279A00B63FE7 /* AppParameters.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppParameters.h; sourceTree = "<group>"; };
 		3C66FBFB290327BB00B63FE7 /* AppParameters.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppParameters.mm; sourceTree = "<group>"; };
 		3C6920452AA1093300D0F613 /* MCDeviceAttestationCredentialsProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCDeviceAttestationCredentialsProvider.h; sourceTree = "<group>"; };
@@ -177,6 +185,19 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		395241F42B854EA700F7DB91 /* zap-generated */ = {
+			isa = PBXGroup;
+			children = (
+				39BF57C42B8CFF790081653C /* MCAttributeObjects.h */,
+				39BF57C62B8CFFB90081653C /* MCAttributeObjects.mm */,
+				39BF57CC2B8FC0EF0081653C /* MCClusterObjects.h */,
+				39BF57CE2B8FC1030081653C /* MCClusterObjects.mm */,
+				39589F152B91556B00BE040C /* MCStructsObjc.h */,
+				39589F172B91557700BE040C /* MCStructsObjc.mm */,
+			);
+			path = "zap-generated";
+			sourceTree = "<group>";
+		};
 		3C94378A2B3654720096E5F4 /* Core */ = {
 			isa = PBXGroup;
 			children = (
@@ -219,6 +240,7 @@
 		3CCB871F2869085400771BAD /* MatterTvCastingBridge */ = {
 			isa = PBXGroup;
 			children = (
+				395241F42B854EA700F7DB91 /* zap-generated */,
 				3C94378A2B3654720096E5F4 /* Core */,
 				3C94378B2B36547A0096E5F4 /* Support */,
 				3C94378C2B3654960096E5F4 /* Clusters */,
@@ -243,12 +265,8 @@
 				3C621CA42B605A6A005CDBA3 /* MCAttribute.h */,
 				3C621CA82B605C52005CDBA3 /* MCAttribute_Internal.h */,
 				3C621CAA2B605C6E005CDBA3 /* MCAttribute.mm */,
-				3C4F52332B57338B00BB8A10 /* MCClusterObjects.h */,
-				3C4F52352B5733A200BB8A10 /* MCClusterObjects.mm */,
 				3C621CA02B5F6CF8005CDBA3 /* MCCommandObjects.h */,
 				3C621CA22B5F6D08005CDBA3 /* MCCommandObjects.mm */,
-				3C621CAC2B605E94005CDBA3 /* MCAttributeObjects.h */,
-				3C621CAE2B605EA7005CDBA3 /* MCAttributeObjects.mm */,
 				3C4F521F2B507C4A00BB8A10 /* MCEndpointClusterType.h */,
 				3C4F52132B4F31DC00BB8A10 /* MCDeviceTypeStruct.h */,
 				3C4F52152B4F31FA00BB8A10 /* MCDeviceTypeStruct.m */,
@@ -272,6 +290,8 @@
 				3C9437932B3B47A10096E5F4 /* MCErrorUtils.mm */,
 				3C04740B2B4604CF0012AE95 /* MCCryptoUtils.h */,
 				3C04740D2B4605B40012AE95 /* MCCryptoUtils.mm */,
+				39BF57CA2B8E54F80081653C /* NSDataSpanConversion.h */,
+				39BF57C82B8D66540081653C /* NSStringSpanConversion.h */,
 				3CCB873A286A593700771BAD /* CastingServerBridge.h */,
 				3CCB873D286A593700771BAD /* CastingServerBridge.mm */,
 				3C66FBFA2903279A00B63FE7 /* AppParameters.h */,
@@ -318,23 +338,26 @@
 				3CD6D01A298CDA2100D7569A /* CommissionerDiscoveryDelegateImpl.h in Headers */,
 				3CF71C0E2A992DA2003A5CE5 /* MCDataSource.h in Headers */,
 				3C4F52142B4F31DC00BB8A10 /* MCDeviceTypeStruct.h in Headers */,
+				39BF57CD2B8FC0EF0081653C /* MCClusterObjects.h in Headers */,
 				3C26AC8C2926FE0C00BA6881 /* DeviceAttestationCredentialsProviderImpl.hpp in Headers */,
 				3C621CA52B605A6A005CDBA3 /* MCAttribute.h in Headers */,
 				3CD73F1C2A9E8396009D82D1 /* MCCommissionableDataProvider.h in Headers */,
 				3C4F521E2B4F4B3B00BB8A10 /* MCEndpoint_Internal.h in Headers */,
+				39BF57C92B8D66540081653C /* NSStringSpanConversion.h in Headers */,
 				3C4F52262B50899700BB8A10 /* MCCluster_Internal.h in Headers */,
 				3CF71C0A2A992D0D003A5CE5 /* MCCastingApp.h in Headers */,
 				3C4F521C2B4F4B1B00BB8A10 /* MCCastingPlayer_Internal.h in Headers */,
 				3CD73F172A9E6884009D82D1 /* MCRotatingDeviceIdUniqueIdProvider.h in Headers */,
 				3C4F52102B4E18C800BB8A10 /* MCEndpoint.h in Headers */,
 				3C4F52282B51DB3000BB8A10 /* MCCommand.h in Headers */,
+				39BF57CB2B8E54F80081653C /* NSDataSpanConversion.h in Headers */,
 				3C621CA92B605C52005CDBA3 /* MCAttribute_Internal.h in Headers */,
 				3CF71C102A99312D003A5CE5 /* MCCommissionableData.h in Headers */,
 				3C4F522A2B51DFAE00BB8A10 /* MCCommand_Internal.h in Headers */,
 				3CD73F202A9EA060009D82D1 /* MCDeviceAttestationCredentials.h in Headers */,
 				3CCB8740286A593700771BAD /* CastingServerBridge.h in Headers */,
-				3C4F52342B57338B00BB8A10 /* MCClusterObjects.h in Headers */,
 				3CE5ECCE2A673B30007CF331 /* CommissioningCallbackHandlers.h in Headers */,
+				39589F162B91556B00BE040C /* MCStructsObjc.h in Headers */,
 				3CCB8742286A593700771BAD /* ConversionUtils.hpp in Headers */,
 				3C621CA72B605AA1005CDBA3 /* MCObserver.h in Headers */,
 				3C9437922B3B478E0096E5F4 /* MCErrorUtils.h in Headers */,
@@ -345,7 +368,7 @@
 				3C621CA12B5F6CF8005CDBA3 /* MCCommandObjects.h in Headers */,
 				3C4F52202B507C4A00BB8A10 /* MCEndpointClusterType.h in Headers */,
 				3C6920462AA1093300D0F613 /* MCDeviceAttestationCredentialsProvider.h in Headers */,
-				3C621CAD2B605E94005CDBA3 /* MCAttributeObjects.h in Headers */,
+				39BF57C52B8CFF790081653C /* MCAttributeObjects.h in Headers */,
 				3C04740C2B4604CF0012AE95 /* MCCryptoUtils.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -450,7 +473,9 @@
 				3C4E53B228E5184C00F293E8 /* TargetNavigatorTypes.mm in Sources */,
 				3C6920482AA1094000D0F613 /* MCDeviceAttestationCredentialsProvider.mm in Sources */,
 				3CE5ECD02A673E2C007CF331 /* CommissioningCallbackHandlers.m in Sources */,
+				39BF57CF2B8FC1030081653C /* MCClusterObjects.mm in Sources */,
 				3CD73F192A9E68A7009D82D1 /* MCRotatingDeviceIdUniqueIdProvider.mm in Sources */,
+				39589F182B91557700BE040C /* MCStructsObjc.mm in Sources */,
 				3CF8532728E37F1000F07B9F /* MatterError.mm in Sources */,
 				3C4F522C2B51E02800BB8A10 /* MCCommand.mm in Sources */,
 				3C4E53B628E5595A00F293E8 /* ContentLauncherTypes.mm in Sources */,
@@ -462,10 +487,9 @@
 				3C4F52122B4E18ED00BB8A10 /* MCEndpoint.mm in Sources */,
 				3C4E53B028E4F28100F293E8 /* MediaPlaybackTypes.mm in Sources */,
 				3C04740E2B4605B40012AE95 /* MCCryptoUtils.mm in Sources */,
-				3C4F52362B5733A200BB8A10 /* MCClusterObjects.mm in Sources */,
 				3CD73F1E2A9E83C1009D82D1 /* MCCommissionableDataProvider.mm in Sources */,
 				3CD73F222A9EA078009D82D1 /* MCDeviceAttestationCredentials.mm in Sources */,
-				3C621CAF2B605EA7005CDBA3 /* MCAttributeObjects.mm in Sources */,
+				39BF57C72B8CFFB90081653C /* MCAttributeObjects.mm in Sources */,
 				3C2346252B362BBB00FA276E /* MCCastingPlayerDiscovery.mm in Sources */,
 				3C4F52242B507CA800BB8A10 /* MCCluster.mm in Sources */,
 				3C66FBFC290327BB00B63FE7 /* AppParameters.mm in Sources */,
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttributeObjects.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttributeObjects.h
deleted file mode 100644
index d8f371e..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttributeObjects.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- *
- *    Copyright (c) 2020-2024 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import "MCAttribute.h"
-#import <Foundation/Foundation.h>
-
-#ifndef MCAttributeObjects_h
-#define MCAttributeObjects_h
-
-@interface MCApplicationBasicClusterVendorIDAttribute : MCAttribute <NSNumber *>
-@end
-
-@interface MCMediaPlaybackClusterCurrentStateAttribute : MCAttribute <NSNumber *>
-@end
-
-#endif /* MCAttributeObjects_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttributeObjects.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttributeObjects.mm
deleted file mode 100644
index 5ce91d5..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttributeObjects.mm
+++ /dev/null
@@ -1,109 +0,0 @@
-/**
- *
- *    Copyright (c) 2024 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import "MCAttributeObjects.h"
-
-#import "MCAttribute_Internal.h"
-#import "MCCastingApp.h"
-#import "MCErrorUtils.h"
-
-#include "core/Attribute.h"
-#include <app-common/zap-generated/cluster-objects.h>
-
-#import <Foundation/Foundation.h>
-
-@implementation MCApplicationBasicClusterVendorIDAttribute
-- (void)read:(void * _Nullable)context
-    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
-{
-    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo>(self.cppAttribute,
-        [self](std::any cppValue) {
-            return [self getObjTypeFromCpp:cppValue];
-        });
-    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
-        completion(context, before, after, err);
-        delete mcAttribute;
-    });
-}
-
-- (void)subscribe:(void * _Nullable)context
-       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
-      minInterval:(NSNumber * _Nonnull)minInterval
-      maxInterval:(NSNumber * _Nonnull)maxInterval
-{
-    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo>(self.cppAttribute,
-        [self](std::any cppValue) {
-            return [self getObjTypeFromCpp:cppValue];
-        });
-    mcAttribute->subscribe(
-        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
-            completion(context, before, after, err);
-            delete mcAttribute;
-        }, minInterval, maxInterval);
-}
-
-- (id _Nullable)getObjTypeFromCpp:(std::any)cppValue
-{
-    NSNumber * outValue = nil;
-    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableArgType>)) {
-        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableArgType> valueSharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableArgType>>(cppValue);
-        outValue = valueSharedPtr != nil ? [NSNumber numberWithUnsignedInteger:*valueSharedPtr] : nil;
-    }
-    return outValue;
-}
-@end
-
-@implementation MCMediaPlaybackClusterCurrentStateAttribute
-- (void)read:(void * _Nullable)context
-    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
-{
-    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo>(self.cppAttribute,
-        [self](std::any cppValue) {
-            return [self getObjTypeFromCpp:cppValue];
-        });
-    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
-        completion(context, before, after, err);
-        delete mcAttribute;
-    });
-}
-
-- (void)subscribe:(void * _Nullable)context
-       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
-      minInterval:(NSNumber * _Nonnull)minInterval
-      maxInterval:(NSNumber * _Nonnull)maxInterval
-{
-    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo>(self.cppAttribute,
-        [self](std::any cppValue) {
-            return [self getObjTypeFromCpp:cppValue];
-        });
-    mcAttribute->subscribe(
-        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
-            completion(context, before, after, err);
-            delete mcAttribute;
-        }, minInterval, maxInterval);
-}
-
-- (id _Nullable)getObjTypeFromCpp:(std::any)cppValue
-{
-    NSNumber * outValue = nil;
-    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableArgType>)) {
-        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableArgType> valueSharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableArgType>>(cppValue);
-        outValue = valueSharedPtr != nil ? [NSNumber numberWithUnsignedInteger:static_cast<uint8_t>(*valueSharedPtr)] : nil;
-    }
-    return outValue;
-}
-@end
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttribute_Internal.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttribute_Internal.h
index 9a0c7e0..95f05f4 100644
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttribute_Internal.h
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCAttribute_Internal.h
@@ -36,7 +36,7 @@
 
 - (instancetype _Nonnull)initWithCppAttribute:(void * _Nonnull)cppAttribute;
 
-- (id _Nullable)getObjTypeFromCpp:(std::any)cppValue;
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR * _Nonnull)aError;
 
 @end
 
@@ -44,10 +44,10 @@
 class MCAttributeTemplate {
 public:
     MCAttributeTemplate(void * _Nonnull cppAttribute,
-        std::function<id(std::any)> getObjTypeFromCppFn)
+        std::function<id(std::any, CHIP_ERROR * _Nonnull)> getObjCTypeFromCppFn)
     {
         mCppAttribute = cppAttribute;
-        mGetObjTypeFromCppFn = getObjTypeFromCppFn;
+        mGetObjCTypeFromCppFn = getObjCTypeFromCppFn;
     }
 
     void read(void * _Nullable context, std::function<void(void * _Nullable, id _Nullable, id _Nullable, NSError * _Nullable)> completion)
@@ -58,18 +58,23 @@
 
             attribute->Read(
                 context,
-                [clientQueue, completion, this](void * context, chip::Optional<typename TypeInfo::DecodableArgType> before, typename TypeInfo::DecodableArgType after) {
+                [clientQueue, completion, this](void * context, chip::Optional<typename TypeInfo::DecodableType> before, typename TypeInfo::DecodableArgType after) {
                     NSNumber *objCBefore = nil, *objCAfter = nil;
+                    CHIP_ERROR errBefore = CHIP_NO_ERROR, errAfter = CHIP_NO_ERROR;
                     if (before.HasValue()) {
                         ChipLogProgress(AppServer, "<MCAttributeTemplate> converting 'before' value from Cpp to ObjC");
-                        std::any anyBefore = std::any(std::make_shared<typename TypeInfo::DecodableArgType>(before.Value()));
-                        objCBefore = mGetObjTypeFromCppFn(anyBefore);
+                        std::any anyBefore = std::any(std::make_shared<typename TypeInfo::DecodableType>(before.Value()));
+                        objCBefore = mGetObjCTypeFromCppFn(anyBefore, &errBefore);
                     }
                     ChipLogProgress(AppServer, "<MCAttributeTemplate> converting 'after' value from Cpp to ObjC");
-                    std::any anyAfter = std::any(std::make_shared<typename TypeInfo::DecodableArgType>(after));
-                    objCAfter = mGetObjTypeFromCppFn(anyAfter);
+                    std::any anyAfter = std::any(std::make_shared<typename TypeInfo::DecodableType>(after));
+                    objCAfter = mGetObjCTypeFromCppFn(anyAfter, &errAfter);
                     dispatch_async(clientQueue, ^{
-                        completion(context, objCBefore, objCAfter, nil);
+                        if (errBefore == CHIP_NO_ERROR && errAfter == CHIP_NO_ERROR) {
+                            completion(context, objCBefore, objCAfter, nil);
+                        } else {
+                            completion(context, nil, nil, [MCErrorUtils NSErrorFromChipError:(errAfter != CHIP_NO_ERROR ? errAfter : errBefore)]);
+                        }
                     });
                 },
                 [clientQueue, completion](void * context, CHIP_ERROR error) {
@@ -89,18 +94,23 @@
 
             attribute->Subscribe(
                 context,
-                [clientQueue, completion, this](void * context, chip::Optional<typename TypeInfo::DecodableArgType> before, typename TypeInfo::DecodableArgType after) {
+                [clientQueue, completion, this](void * context, chip::Optional<typename TypeInfo::DecodableType> before, typename TypeInfo::DecodableArgType after) {
                     NSNumber *objCBefore = nil, *objCAfter = nil;
+                    CHIP_ERROR errBefore = CHIP_NO_ERROR, errAfter = CHIP_NO_ERROR;
                     if (before.HasValue()) {
                         ChipLogProgress(AppServer, "<MCAttributeTemplate> converting 'before' value from Cpp to ObjC");
-                        std::any anyBefore = std::any(std::make_shared<typename TypeInfo::DecodableArgType>(before.Value()));
-                        objCBefore = mGetObjTypeFromCppFn(anyBefore);
+                        std::any anyBefore = std::any(std::make_shared<typename TypeInfo::DecodableType>(before.Value()));
+                        objCBefore = mGetObjCTypeFromCppFn(anyBefore, &errBefore);
                     }
                     ChipLogProgress(AppServer, "<MCAttributeTemplate> converting 'after' value from Cpp to ObjC");
-                    std::any anyAfter = std::any(std::make_shared<typename TypeInfo::DecodableArgType>(after));
-                    objCAfter = mGetObjTypeFromCppFn(anyAfter);
+                    std::any anyAfter = std::any(std::make_shared<typename TypeInfo::DecodableType>(after));
+                    objCAfter = mGetObjCTypeFromCppFn(anyAfter, &errAfter);
                     dispatch_async(clientQueue, ^{
-                        completion(context, objCBefore, objCAfter, nil);
+                        if (errBefore == CHIP_NO_ERROR && errAfter == CHIP_NO_ERROR) {
+                            completion(context, objCBefore, objCAfter, nil);
+                        } else {
+                            completion(context, nil, nil, [MCErrorUtils NSErrorFromChipError:(errAfter != CHIP_NO_ERROR ? errAfter : errBefore)]);
+                        }
                     });
                 },
                 [clientQueue, completion](void * context, CHIP_ERROR error) {
@@ -115,6 +125,6 @@
 
 private:
     void * _Nonnull mCppAttribute;
-    std::function<id(std::any)> mGetObjTypeFromCppFn;
+    std::function<id(std::any, CHIP_ERROR * _Nonnull)> mGetObjCTypeFromCppFn;
 };
 #endif /* MCAttribute_Internal_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCCluster.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCCluster.mm
index ecb7a91..7841475 100644
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCCluster.mm
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCCluster.mm
@@ -15,8 +15,8 @@
  *    limitations under the License.
  */
 
-#import "MCClusterObjects.h"
 #import "MCCluster_Internal.h"
+#import "zap-generated/MCClusterObjects.h"
 
 #import "MCEndpoint_Internal.h"
 
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCClusterObjects.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCClusterObjects.h
deleted file mode 100644
index 290b747..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCClusterObjects.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- *
- *    Copyright (c) 2020-2024 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import "MCAttributeObjects.h"
-#import "MCCluster.h"
-#import "MCCommandObjects.h"
-#import <Foundation/Foundation.h>
-
-#ifndef MCClusterObjects_h
-#define MCClusterObjects_h
-
-@interface MCContentLauncherCluster : MCCluster
-/**
- * @brief Returns non-nil pointer to MCContentLauncherClusterLaunchURLCommand if supported, nil otherwise
- */
-- (MCContentLauncherClusterLaunchURLCommand * _Nullable)launchURLCommand;
-@end
-
-@interface MCApplicationBasicCluster : MCCluster
-/**
- * @brief Returns non-nil pointer to MCApplicationBasicClusterVendorIDAttribute if supported, nil otherwise
- */
-- (MCApplicationBasicClusterVendorIDAttribute * _Nullable)vendorIDAttribute;
-@end
-
-@interface MCMediaPlaybackCluster : MCCluster
-/**
- * @brief Returns non-nil pointer to MCMediaPlaybackClusterCurrentStateAttribute if supported, nil otherwise
- */
-- (MCMediaPlaybackClusterCurrentStateAttribute * _Nullable)currentStateAttribute;
-@end
-
-#endif /* MCClusterObjects_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCClusterObjects.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCClusterObjects.mm
deleted file mode 100644
index 397dc62..0000000
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCClusterObjects.mm
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- *
- *    Copyright (c) 2024 Project CHIP Authors
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-
-#import "MCClusterObjects.h"
-
-#import "MCAttribute_Internal.h"
-#import "MCCluster_Internal.h"
-#import "MCCommand_Internal.h"
-
-#include "core/Attribute.h"
-#include "core/Command.h"
-#include <app-common/zap-generated/cluster-objects.h>
-
-#import <Foundation/Foundation.h>
-
-@implementation MCContentLauncherCluster
-- (id)launchURLCommand
-{
-    void * cppCommand = self.cppCluster->GetCommand(chip::app::Clusters::ContentLauncher::Commands::LaunchURL::Id);
-    return cppCommand != nil ? [[MCContentLauncherClusterLaunchURLCommand alloc] initWithCppCommand:cppCommand] : nil;
-}
-@end
-
-@implementation MCApplicationBasicCluster
-- (id)vendorIDAttribute
-{
-    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::VendorID::Id);
-    return cppAttribute != nil ? [[MCApplicationBasicClusterVendorIDAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
-}
-@end
-
-@implementation MCMediaPlaybackCluster
-- (id)currentStateAttribute
-{
-    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::CurrentState::Id);
-    return cppAttribute != nil ? [[MCMediaPlaybackClusterCurrentStateAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
-}
-@end
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCEndpoint.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCEndpoint.mm
index 006488a..f5e5aac 100644
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCEndpoint.mm
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MCEndpoint.mm
@@ -21,7 +21,7 @@
 #import "MCCluster_Internal.h"
 #import "MCDeviceTypeStruct.h"
 
-#import "MCClusterObjects.h"
+#import "zap-generated/MCClusterObjects.h"
 
 #import "clusters/Clusters.h"
 #import "core/Endpoint.h"
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MatterTvCastingBridge.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MatterTvCastingBridge.h
index 093f02b..19db166 100644
--- a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MatterTvCastingBridge.h
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/MatterTvCastingBridge.h
@@ -27,12 +27,10 @@
 
 // Add simplified casting API headers here
 #import "MCAttribute.h"
-#import "MCAttributeObjects.h"
 #import "MCCastingApp.h"
 #import "MCCastingPlayer.h"
 #import "MCCastingPlayerDiscovery.h"
 #import "MCCluster.h"
-#import "MCClusterObjects.h"
 #import "MCCommand.h"
 #import "MCCommandObjects.h"
 #import "MCCommissionableData.h"
@@ -42,3 +40,5 @@
 #import "MCEndpointClusterType.h"
 #import "MCEndpointFilter.h"
 #import "MCObserver.h"
+#import "zap-generated/MCAttributeObjects.h"
+#import "zap-generated/MCClusterObjects.h"
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/NSDataSpanConversion.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/NSDataSpanConversion.h
new file mode 100644
index 0000000..4ebc71c
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/NSDataSpanConversion.h
@@ -0,0 +1,33 @@
+/**
+ *    Copyright (c) 2024 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#pragma once
+
+#import <Foundation/Foundation.h>
+
+#include <lib/support/Span.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Utilities for converting between NSData and chip::Span.
+ */
+
+inline chip::ByteSpan AsByteSpan(NSData * data) { return chip::ByteSpan(static_cast<const uint8_t *>(data.bytes), data.length); }
+
+inline NSData * AsData(chip::ByteSpan span) { return [NSData dataWithBytes:span.data() length:span.size()]; }
+
+NS_ASSUME_NONNULL_END
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/NSStringSpanConversion.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/NSStringSpanConversion.h
new file mode 100644
index 0000000..8f8b426
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/NSStringSpanConversion.h
@@ -0,0 +1,39 @@
+/**
+ *    Copyright (c) 2024 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#pragma once
+
+#import <Foundation/Foundation.h>
+
+#include <lib/support/Span.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Utilities for converting between NSString and chip::CharSpan.
+ */
+
+inline chip::CharSpan AsCharSpan(NSString * str)
+{
+    return chip::CharSpan([str UTF8String], [str lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
+}
+
+inline NSString * AsString(chip::CharSpan span)
+{
+    return [[NSString alloc] initWithBytes:span.data() length:span.size() encoding:NSUTF8StringEncoding];
+}
+
+NS_ASSUME_NONNULL_END
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCAttributeObjects-src.zapt b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCAttributeObjects-src.zapt
new file mode 100644
index 0000000..90b0f40
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCAttributeObjects-src.zapt
@@ -0,0 +1,75 @@
+{{> header excludeZapComment=false}}
+
+#import "MCAttributeObjects.h"
+
+#import "../MCAttribute_Internal.h"
+#import "../MCCastingApp.h"
+#import "../MCErrorUtils.h"
+#import "../NSDataSpanConversion.h"
+#import "../NSStringSpanConversion.h"
+
+#include "core/Attribute.h"
+#include <app-common/zap-generated/cluster-objects.h>
+
+#import <Foundation/Foundation.h>
+
+{{#zcl_clusters}}
+{{#if (isSupported (asUpperCamelCase name preserveAcronyms=true))}}
+{{#if (isInConfigList name "MatterCastingClusters")}}
+
+// {{asUpperCamelCase name}} cluster attributes:
+
+{{#zcl_attributes_server removeKeys='isOptional'}}
+{{#if (isSupported (asUpperCamelCase ../name preserveAcronyms=true) attribute=(asUpperCamelCase name preserveAcronyms=true))}}
+@implementation MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Attribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    {{asObjectiveCClass type ../name structTypePrefix="MC"}} * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        //auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        {{asObjectiveCType type parent.name structTypePrefix="MC"}} value;
+        {{>decode_value target="value" source="_cppValue" cluster=parent.name errorCode="*aError = err; return nil;" depth=0}}
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+{{/if}}
+{{/zcl_attributes_server}}
+{{/if}}
+{{/if}}
+{{/zcl_clusters}}
\ No newline at end of file
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCAttributeObjects.zapt b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCAttributeObjects.zapt
new file mode 100644
index 0000000..37390b3
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCAttributeObjects.zapt
@@ -0,0 +1,28 @@
+{{> header excludeZapComment=false}}
+
+#import "MCStructsObjc.h"
+
+#import "../MCAttribute.h"
+#import <Foundation/Foundation.h>
+
+#ifndef MCAttributeObjects_h
+#define MCAttributeObjects_h
+
+{{#zcl_clusters}}
+{{#if (isSupported (asUpperCamelCase name))}}
+{{#if (isInConfigList name "MatterCastingClusters")}}
+
+// {{asUpperCamelCase name}} cluster attributes:
+
+{{#zcl_attributes_server}}
+{{#if (isSupported (asUpperCamelCase ../name preserveAcronyms=true) attribute=(asUpperCamelCase name preserveAcronyms=true))}}
+@interface MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Attribute : MCAttribute <{{asObjectiveCClass type ../name structTypePrefix="MC"}} *>
+@end
+
+{{/if}}
+{{/zcl_attributes_server}}
+{{/if}}
+{{/if}}
+{{/zcl_clusters}}
+
+#endif /* MCAttributeObjects_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCClusterObjects-src.zapt b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCClusterObjects-src.zapt
new file mode 100644
index 0000000..0b9207e
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCClusterObjects-src.zapt
@@ -0,0 +1,53 @@
+{{> header excludeZapComment=false}}
+
+#import "MCClusterObjects.h"
+
+#import "../MCAttribute_Internal.h"
+#import "../MCCluster_Internal.h"
+#import "../MCCommand_Internal.h"
+
+#include "core/Attribute.h"
+#include "core/Command.h"
+#include <app-common/zap-generated/cluster-objects.h>
+
+#import <Foundation/Foundation.h>
+
+{{#zcl_clusters}}
+{{#if (isSupported (asUpperCamelCase name))}}
+{{#if (isInConfigList name "MatterCastingClusters")}}
+
+// {{asUpperCamelCase name}} cluster:
+
+@implementation MC{{asUpperCamelCase name}}Cluster
+
+// {{asUpperCamelCase name}} cluster commands:
+
+{{#zcl_commands}}
+{{#if (isSupported (asUpperCamelCase ../name preserveAcronyms=true) command=(asUpperCamelCase name preserveAcronyms=true))}}
+{{#if (isInConfigList name "MatterCastingImplementedCommands")}}
+
+- (id){{asMethodName name}}Command
+{
+    void * cppCommand = self.cppCluster->GetCommand(chip::app::Clusters::{{asUpperCamelCase ../name}}::Commands::{{asUpperCamelCase name}}::Id);
+    return cppCommand != nil ? [[MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Command alloc] initWithCppCommand:cppCommand] : nil;
+}
+
+{{/if}}
+{{/if}}
+{{/zcl_commands}}
+
+// {{asUpperCamelCase name}} cluster attributes:
+{{#zcl_attributes_server}}
+{{#if (isSupported (asUpperCamelCase ../name preserveAcronyms=true) attribute=(asUpperCamelCase name preserveAcronyms=true))}}
+
+- (id){{asMethodName name}}Attribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::{{asUpperCamelCase ../name}}::Attributes::{{asUpperCamelCase name}}::Id);
+    return cppAttribute != nil ? [[MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Attribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+{{/if}}
+{{/zcl_attributes_server}}
+@end
+{{/if}}
+{{/if}}
+{{/zcl_clusters}}
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCClusterObjects.zapt b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCClusterObjects.zapt
new file mode 100644
index 0000000..a4ecab1
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCClusterObjects.zapt
@@ -0,0 +1,48 @@
+{{> header excludeZapComment=false}}
+
+#import "MCAttributeObjects.h"
+#import "../MCCluster.h"
+#import "../MCCommandObjects.h"
+#import <Foundation/Foundation.h>
+
+#ifndef MCClusterObjects_h
+#define MCClusterObjects_h
+
+{{#zcl_clusters}}
+{{#if (isSupported (asUpperCamelCase name))}}
+{{#if (isInConfigList name "MatterCastingClusters")}}
+
+// {{asUpperCamelCase name}} cluster:
+
+@interface MC{{asUpperCamelCase name}}Cluster : MCCluster
+
+// {{asUpperCamelCase name}} cluster commands:
+
+{{#zcl_commands}}
+{{#if (isSupported (asUpperCamelCase ../name preserveAcronyms=true) command=(asUpperCamelCase name preserveAcronyms=true))}}
+{{#if (isInConfigList name "MatterCastingImplementedCommands")}}
+
+/**
+ * @brief Returns non-nil pointer to MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Command if supported, nil otherwise.
+ */
+- (MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Command * _Nullable){{asMethodName name}}Command;
+{{/if}}
+{{/if}}
+{{/zcl_commands}}
+
+// {{asUpperCamelCase name}} cluster attributes:
+{{#zcl_attributes_server}}
+{{#if (isSupported (asUpperCamelCase ../name preserveAcronyms=true) attribute=(asUpperCamelCase name preserveAcronyms=true))}}
+
+/**
+ * @brief Returns non-nil pointer to MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Attribute if supported, nil otherwise.
+ */
+- (MC{{asUpperCamelCase ../name}}Cluster{{asUpperCamelCase name}}Attribute * _Nullable){{asMethodName name}}Attribute;
+{{/if}}
+{{/zcl_attributes_server}}
+@end
+{{/if}}
+{{/if}}
+{{/zcl_clusters}}
+
+#endif /* MCClusterObjects_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCCommandObjects-src.zapt b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCCommandObjects-src.zapt
new file mode 100644
index 0000000..21eab79
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCCommandObjects-src.zapt
@@ -0,0 +1,3 @@
+{{> header excludeZapComment=false}}
+
+// TODO: To be implemented in the following PR.
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCCommandObjects.zapt b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCCommandObjects.zapt
new file mode 100644
index 0000000..21eab79
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/MCCommandObjects.zapt
@@ -0,0 +1,3 @@
+{{> header excludeZapComment=false}}
+
+// TODO: To be implemented in the following PR.
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/availability.yaml b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/availability.yaml
new file mode 100644
index 0000000..aa94eeb
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/availability.yaml
@@ -0,0 +1,8664 @@
+# The magic value "future" for versions can be used once we are
+# tracking a release but don't know what its version numbers will be.
+#
+# Each release has:
+# * A name (labeled "release")
+# * A versions field which is either a dictionary of per-OS versions, or "future"
+# * "introduced" and "deprecated" fields, which are dictionaries with the following keys:
+#   * "clusters": An array of cluster names
+#   * "attributes": A dictionary with cluster names as keys and arrays of
+#                   attribute names as values.
+#   * "commands": A dictionary with cluster names as keys and arrays of
+#                 command names as values.
+#   * "command fields": A dictionary with cluster names as keys and dictionaries
+#                       as values.  Those dictionaries have command names as
+#                       keys and arrays of field names as values.
+#   * "structs": A dictionary with cluster names as keys and arrays of
+#                struct names as values.
+#   * "struct fields": A dictionary with cluster names as keys and dictionaries
+#                      as values.  Those dictionaries have struct names as
+#                      keys and arrays of field names as values.
+#   * "events": A dictionary with cluster names as keys and arrays of
+#               event names as values.
+#   * "event fields": A dictionary with cluster names as keys and dictionaries
+#                     as values.  Those dictionaries have event names as
+#                     keys and arrays of field names as values.
+#   * "enums": A dictionary with cluster names as keys and arrays of
+#              enum names as values.
+#   * "enum values": A dictionary with cluster names as keys and dictionaries
+#                    as values.  Those dictionaries have enum names as
+#                    keys and arrays of enum value names as values.
+#   * "bitmaps": A dictionary with cluster names as keys and arrays of
+#                bitmap names as values.
+#   * "bitmap values": A dictionary with cluster names as keys and dictionaries
+#                      as values.  Those dictionaries have bitmap names as
+#                      keys and arrays of bitmap value names as values.
+#   * "ids": Can contain clusters, attributes, commands, events as described
+#            above inside it, but just indicates whether the id was
+#            introduced/deprecated, not the construct itself.
+#   * "command payloads": Lists commands only, if we introduced the payload without
+#                         actually exposing API for the command.
+#   * "global attributes": An array of names of global attributes.
+#   * "apis": An array of API labels that codegen can use.
+#
+# * "renames": Can contain clusters, attributes, etc as described
+#              above for "introduced" and "deprecated", with the one
+#              difference that instead of an array the value is a hash
+#              with new names as keys and old names as values.
+#
+# * "removed": Can contain clusters, commands, attributes, etc as described
+#              above for "introduced" and "deprecated".  Items can be removed
+#              without ever being introduced, if they are added to the XML but
+#              we have never shipped generated APIs for them.
+#              NOTE: support for "removed" may not be complete in the templates.
+#              Please examine codegen carefully when using "removed" to make
+#              sure all the things that should have been removed have been.
+#
+# * "swiftUnavailable": Can contain clusters, commands, attributes, etc as
+#                       described above for "introduced" and "deprecated".  This
+#                       can be used to mark APIs with NS_SWIFT_UNAVAILABLE,
+#                       typically when an API was renamed between two names that
+#                       map to the same Swift name and then both names were
+#                       deprecated.
+#
+# * "provisional": Can contain clusters, commands, attributes, etc as described
+#                  above for "introduced" and "deprecated".  Items can be
+#                  defined as provisional to prevent code generation for them.
+#                  If they are then listed as introduced in a release that is
+#                  later than the one where they were marked provisional,
+#                  they will start being code-generated.
+#                  NOTE: support for "provisional" may not be complete in the
+#                  templates. Please examine codegen carefully when using
+#                  "provisional" to make sure all the things that should have
+#                  been omitted have been.
+
+- release: "Initial release"
+  versions:
+      iOS: "16.1"
+      macOS: "13.0"
+      watchOS: "9.1"
+      tvOS: "16.1"
+  introduced:
+      clusters:
+          - Identify
+          - Groups
+          - Scenes
+          - OnOff
+          - OnOffSwitchConfiguration
+          - LevelControl
+          - BinaryInputBasic
+          - Descriptor
+          - Binding
+          - AccessControl
+          - Actions
+          - Basic
+          - OtaSoftwareUpdateProvider
+          - OtaSoftwareUpdateRequestor
+          - LocalizationConfiguration
+          - TimeFormatLocalization
+          - UnitLocalization
+          - PowerSourceConfiguration
+          - PowerSource
+          - GeneralCommissioning
+          - NetworkCommissioning
+          - DiagnosticLogs
+          - GeneralDiagnostics
+          - SoftwareDiagnostics
+          - ThreadNetworkDiagnostics
+          - WiFiNetworkDiagnostics
+          - EthernetNetworkDiagnostics
+          - BridgedDeviceBasic
+          - Switch
+          - AdministratorCommissioning
+          - OperationalCredentials
+          - GroupKeyManagement
+          - FixedLabel
+          - UserLabel
+          - BooleanState
+          - ModeSelect
+          - DoorLock
+          - WindowCovering
+          - BarrierControl
+          - PumpConfigurationAndControl
+          - Thermostat
+          - FanControl
+          - ThermostatUserInterfaceConfiguration
+          - ColorControl
+          - BallastConfiguration
+          - IlluminanceMeasurement
+          - TemperatureMeasurement
+          - PressureMeasurement
+          - FlowMeasurement
+          - RelativeHumidityMeasurement
+          - OccupancySensing
+          - WakeOnLan
+          - Channel
+          - TargetNavigator
+          - MediaPlayback
+          - MediaInput
+          - LowPower
+          - KeypadInput
+          - ContentLauncher
+          - AudioOutput
+          - ApplicationLauncher
+          - ApplicationBasic
+          - AccountLogin
+          - ElectricalMeasurement
+          - TestCluster
+      attributes:
+          Identify:
+              - IdentifyTime
+              - IdentifyType
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Groups:
+              - NameSupport
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Scenes:
+              - SceneCount
+              - CurrentScene
+              - CurrentGroup
+              - SceneValid
+              - NameSupport
+              - LastConfiguredBy
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OnOff:
+              - OnOff
+              - GlobalSceneControl
+              - OnTime
+              - OffWaitTime
+              - StartUpOnOff
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OnOffSwitchConfiguration:
+              - SwitchType
+              - SwitchActions
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          LevelControl:
+              - CurrentLevel
+              - RemainingTime
+              - MinLevel
+              - MaxLevel
+              - CurrentFrequency
+              - MinFrequency
+              - MaxFrequency
+              - Options
+              - OnOffTransitionTime
+              - OnLevel
+              - OnTransitionTime
+              - OffTransitionTime
+              - DefaultMoveRate
+              - StartUpCurrentLevel
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          BinaryInputBasic:
+              - ActiveText
+              - Description
+              - InactiveText
+              - OutOfService
+              - Polarity
+              - PresentValue
+              - Reliability
+              - StatusFlags
+              - ApplicationType
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Descriptor:
+              - DeviceList
+              - ServerList
+              - ClientList
+              - PartsList
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Binding:
+              - Binding
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          AccessControl:
+              - Acl
+              - Extension
+              - SubjectsPerAccessControlEntry
+              - TargetsPerAccessControlEntry
+              - AccessControlEntriesPerFabric
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Actions:
+              - ActionList
+              - EndpointLists
+              - SetupURL
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Basic:
+              - DataModelRevision
+              - VendorName
+              - VendorID
+              - ProductName
+              - ProductID
+              - NodeLabel
+              - Location
+              - HardwareVersion
+              - HardwareVersionString
+              - SoftwareVersion
+              - SoftwareVersionString
+              - ManufacturingDate
+              - PartNumber
+              - ProductURL
+              - ProductLabel
+              - SerialNumber
+              - LocalConfigDisabled
+              - Reachable
+              - UniqueID
+              - CapabilityMinima
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OtaSoftwareUpdateProvider:
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OtaSoftwareUpdateRequestor:
+              - DefaultOtaProviders
+              - UpdatePossible
+              - UpdateState
+              - UpdateStateProgress
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          LocalizationConfiguration:
+              - ActiveLocale
+              - SupportedLocales
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          TimeFormatLocalization:
+              - HourFormat
+              - ActiveCalendarType
+              - SupportedCalendarTypes
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          UnitLocalization:
+              - TemperatureUnit
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          PowerSourceConfiguration:
+              - Sources
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          PowerSource:
+              - Status
+              - Order
+              - Description
+              - WiredAssessedInputVoltage
+              - WiredAssessedInputFrequency
+              - WiredCurrentType
+              - WiredAssessedCurrent
+              - WiredNominalVoltage
+              - WiredMaximumCurrent
+              - WiredPresent
+              - ActiveWiredFaults
+              - BatVoltage
+              - BatPercentRemaining
+              - BatTimeRemaining
+              - BatChargeLevel
+              - BatReplacementNeeded
+              - BatReplaceability
+              - BatPresent
+              - ActiveBatFaults
+              - BatReplacementDescription
+              - BatCommonDesignation
+              - BatANSIDesignation
+              - BatIECDesignation
+              - BatApprovedChemistry
+              - BatCapacity
+              - BatQuantity
+              - BatChargeState
+              - BatTimeToFullCharge
+              - BatFunctionalWhileCharging
+              - BatChargingCurrent
+              - ActiveBatChargeFaults
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          GeneralCommissioning:
+              - Breadcrumb
+              - BasicCommissioningInfo
+              - RegulatoryConfig
+              - LocationCapability
+              - SupportsConcurrentConnection
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          NetworkCommissioning:
+              - MaxNetworks
+              - Networks
+              - ScanMaxTimeSeconds
+              - ConnectMaxTimeSeconds
+              - InterfaceEnabled
+              - LastNetworkingStatus
+              - LastNetworkID
+              - LastConnectErrorValue
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          DiagnosticLogs:
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          GeneralDiagnostics:
+              - NetworkInterfaces
+              - RebootCount
+              - UpTime
+              - TotalOperationalHours
+              - BootReasons
+              - ActiveHardwareFaults
+              - ActiveRadioFaults
+              - ActiveNetworkFaults
+              - TestEventTriggersEnabled
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          SoftwareDiagnostics:
+              - ThreadMetrics
+              - CurrentHeapFree
+              - CurrentHeapUsed
+              - CurrentHeapHighWatermark
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ThreadNetworkDiagnostics:
+              - Channel
+              - RoutingRole
+              - NetworkName
+              - PanId
+              - ExtendedPanId
+              - MeshLocalPrefix
+              - OverrunCount
+              - NeighborTableList
+              - RouteTableList
+              - PartitionId
+              - Weighting
+              - DataVersion
+              - StableDataVersion
+              - LeaderRouterId
+              - DetachedRoleCount
+              - ChildRoleCount
+              - RouterRoleCount
+              - LeaderRoleCount
+              - AttachAttemptCount
+              - PartitionIdChangeCount
+              - BetterPartitionAttachAttemptCount
+              - ParentChangeCount
+              - TxTotalCount
+              - TxUnicastCount
+              - TxBroadcastCount
+              - TxAckRequestedCount
+              - TxAckedCount
+              - TxNoAckRequestedCount
+              - TxDataCount
+              - TxDataPollCount
+              - TxBeaconCount
+              - TxBeaconRequestCount
+              - TxOtherCount
+              - TxRetryCount
+              - TxDirectMaxRetryExpiryCount
+              - TxIndirectMaxRetryExpiryCount
+              - TxErrCcaCount
+              - TxErrAbortCount
+              - TxErrBusyChannelCount
+              - RxTotalCount
+              - RxUnicastCount
+              - RxBroadcastCount
+              - RxDataCount
+              - RxDataPollCount
+              - RxBeaconCount
+              - RxBeaconRequestCount
+              - RxOtherCount
+              - RxAddressFilteredCount
+              - RxDestAddrFilteredCount
+              - RxDuplicatedCount
+              - RxErrNoFrameCount
+              - RxErrUnknownNeighborCount
+              - RxErrInvalidSrcAddrCount
+              - RxErrSecCount
+              - RxErrFcsCount
+              - RxErrOtherCount
+              - ActiveTimestamp
+              - PendingTimestamp
+              - Delay
+              - SecurityPolicy
+              - ChannelPage0Mask
+              - OperationalDatasetComponents
+              - ActiveNetworkFaultsList
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          WiFiNetworkDiagnostics:
+              - Bssid
+              - SecurityType
+              - WiFiVersion
+              - ChannelNumber
+              - Rssi
+              - BeaconLostCount
+              - BeaconRxCount
+              - PacketMulticastRxCount
+              - PacketMulticastTxCount
+              - PacketUnicastRxCount
+              - PacketUnicastTxCount
+              - CurrentMaxRate
+              - OverrunCount
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          EthernetNetworkDiagnostics:
+              - PHYRate
+              - FullDuplex
+              - PacketRxCount
+              - PacketTxCount
+              - TxErrCount
+              - CollisionCount
+              - OverrunCount
+              - CarrierDetect
+              - TimeSinceReset
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          BridgedDeviceBasic:
+              - VendorName
+              - VendorID
+              - ProductName
+              - NodeLabel
+              - HardwareVersion
+              - HardwareVersionString
+              - SoftwareVersion
+              - SoftwareVersionString
+              - ManufacturingDate
+              - PartNumber
+              - ProductURL
+              - ProductLabel
+              - SerialNumber
+              - Reachable
+              - UniqueID
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Switch:
+              - NumberOfPositions
+              - CurrentPosition
+              - MultiPressMax
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          AdministratorCommissioning:
+              - WindowStatus
+              - AdminFabricIndex
+              - AdminVendorId
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OperationalCredentials:
+              - NOCs
+              - Fabrics
+              - SupportedFabrics
+              - CommissionedFabrics
+              - TrustedRootCertificates
+              - CurrentFabricIndex
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          GroupKeyManagement:
+              - GroupKeyMap
+              - GroupTable
+              - MaxGroupsPerFabric
+              - MaxGroupKeysPerFabric
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          FixedLabel:
+              - LabelList
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          UserLabel:
+              - LabelList
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          BooleanState:
+              - StateValue
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ModeSelect:
+              - Description
+              - StandardNamespace
+              - SupportedModes
+              - CurrentMode
+              - StartUpMode
+              - OnMode
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          DoorLock:
+              - LockState
+              - LockType
+              - ActuatorEnabled
+              - DoorState
+              - DoorOpenEvents
+              - DoorClosedEvents
+              - OpenPeriod
+              - NumberOfTotalUsersSupported
+              - NumberOfPINUsersSupported
+              - NumberOfRFIDUsersSupported
+              - NumberOfWeekDaySchedulesSupportedPerUser
+              - NumberOfYearDaySchedulesSupportedPerUser
+              - NumberOfHolidaySchedulesSupported
+              - MaxPINCodeLength
+              - MinPINCodeLength
+              - MaxRFIDCodeLength
+              - MinRFIDCodeLength
+              - CredentialRulesSupport
+              - NumberOfCredentialsSupportedPerUser
+              - Language
+              - LEDSettings
+              - AutoRelockTime
+              - SoundVolume
+              - OperatingMode
+              - SupportedOperatingModes
+              - DefaultConfigurationRegister
+              - EnableLocalProgramming
+              - EnableOneTouchLocking
+              - EnableInsideStatusLED
+              - EnablePrivacyModeButton
+              - LocalProgrammingFeatures
+              - WrongCodeEntryLimit
+              - UserCodeTemporaryDisableTime
+              - SendPINOverTheAir
+              - RequirePINforRemoteOperation
+              - ExpiringUserTimeout
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          WindowCovering:
+              - Type
+              - PhysicalClosedLimitLift
+              - PhysicalClosedLimitTilt
+              - CurrentPositionLift
+              - CurrentPositionTilt
+              - NumberOfActuationsLift
+              - NumberOfActuationsTilt
+              - ConfigStatus
+              - CurrentPositionLiftPercentage
+              - CurrentPositionTiltPercentage
+              - OperationalStatus
+              - TargetPositionLiftPercent100ths
+              - TargetPositionTiltPercent100ths
+              - EndProductType
+              - CurrentPositionLiftPercent100ths
+              - CurrentPositionTiltPercent100ths
+              - InstalledOpenLimitLift
+              - InstalledClosedLimitLift
+              - InstalledOpenLimitTilt
+              - InstalledClosedLimitTilt
+              - Mode
+              - SafetyStatus
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          BarrierControl:
+              - BarrierMovingState
+              - BarrierSafetyStatus
+              - BarrierCapabilities
+              - BarrierOpenEvents
+              - BarrierCloseEvents
+              - BarrierCommandOpenEvents
+              - BarrierCommandCloseEvents
+              - BarrierOpenPeriod
+              - BarrierClosePeriod
+              - BarrierPosition
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          PumpConfigurationAndControl:
+              - MaxPressure
+              - MaxSpeed
+              - MaxFlow
+              - MinConstPressure
+              - MaxConstPressure
+              - MinCompPressure
+              - MaxCompPressure
+              - MinConstSpeed
+              - MaxConstSpeed
+              - MinConstFlow
+              - MaxConstFlow
+              - MinConstTemp
+              - MaxConstTemp
+              - PumpStatus
+              - EffectiveOperationMode
+              - EffectiveControlMode
+              - Capacity
+              - Speed
+              - LifetimeRunningHours
+              - Power
+              - LifetimeEnergyConsumed
+              - OperationMode
+              - ControlMode
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Thermostat:
+              - LocalTemperature
+              - OutdoorTemperature
+              - Occupancy
+              - AbsMinHeatSetpointLimit
+              - AbsMaxHeatSetpointLimit
+              - AbsMinCoolSetpointLimit
+              - AbsMaxCoolSetpointLimit
+              - PICoolingDemand
+              - PIHeatingDemand
+              - HVACSystemTypeConfiguration
+              - LocalTemperatureCalibration
+              - OccupiedCoolingSetpoint
+              - OccupiedHeatingSetpoint
+              - UnoccupiedCoolingSetpoint
+              - UnoccupiedHeatingSetpoint
+              - MinHeatSetpointLimit
+              - MaxHeatSetpointLimit
+              - MinCoolSetpointLimit
+              - MaxCoolSetpointLimit
+              - MinSetpointDeadBand
+              - RemoteSensing
+              - ControlSequenceOfOperation
+              - SystemMode
+              - ThermostatRunningMode
+              - StartOfWeek
+              - NumberOfWeeklyTransitions
+              - NumberOfDailyTransitions
+              - TemperatureSetpointHold
+              - TemperatureSetpointHoldDuration
+              - ThermostatProgrammingOperationMode
+              - ThermostatRunningState
+              - SetpointChangeSource
+              - SetpointChangeAmount
+              - SetpointChangeSourceTimestamp
+              - OccupiedSetback
+              - OccupiedSetbackMin
+              - OccupiedSetbackMax
+              - UnoccupiedSetback
+              - UnoccupiedSetbackMin
+              - UnoccupiedSetbackMax
+              - EmergencyHeatDelta
+              - ACType
+              - ACCapacity
+              - ACRefrigerantType
+              - ACCompressorType
+              - ACErrorCode
+              - ACLouverPosition
+              - ACCoilTemperature
+              - ACCapacityformat
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          FanControl:
+              - FanMode
+              - FanModeSequence
+              - PercentSetting
+              - PercentCurrent
+              - SpeedMax
+              - SpeedSetting
+              - SpeedCurrent
+              - RockSupport
+              - RockSetting
+              - WindSupport
+              - WindSetting
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ThermostatUserInterfaceConfiguration:
+              - TemperatureDisplayMode
+              - KeypadLockout
+              - ScheduleProgrammingVisibility
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ColorControl:
+              - CurrentHue
+              - CurrentSaturation
+              - RemainingTime
+              - CurrentX
+              - CurrentY
+              - DriftCompensation
+              - CompensationText
+              - ColorTemperatureMireds
+              - ColorMode
+              - Options
+              - NumberOfPrimaries
+              - Primary1X
+              - Primary1Y
+              - Primary1Intensity
+              - Primary2X
+              - Primary2Y
+              - Primary2Intensity
+              - Primary3X
+              - Primary3Y
+              - Primary3Intensity
+              - Primary4X
+              - Primary4Y
+              - Primary4Intensity
+              - Primary5X
+              - Primary5Y
+              - Primary5Intensity
+              - Primary6X
+              - Primary6Y
+              - Primary6Intensity
+              - WhitePointX
+              - WhitePointY
+              - ColorPointRX
+              - ColorPointRY
+              - ColorPointRIntensity
+              - ColorPointGX
+              - ColorPointGY
+              - ColorPointGIntensity
+              - ColorPointBX
+              - ColorPointBY
+              - ColorPointBIntensity
+              - EnhancedCurrentHue
+              - EnhancedColorMode
+              - ColorLoopActive
+              - ColorLoopDirection
+              - ColorLoopTime
+              - ColorLoopStartEnhancedHue
+              - ColorLoopStoredEnhancedHue
+              - ColorCapabilities
+              - ColorTempPhysicalMinMireds
+              - ColorTempPhysicalMaxMireds
+              - CoupleColorTempToLevelMinMireds
+              - StartUpColorTemperatureMireds
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          BallastConfiguration:
+              - PhysicalMinLevel
+              - PhysicalMaxLevel
+              - BallastStatus
+              - MinLevel
+              - MaxLevel
+              - IntrinsicBalanceFactor
+              - BallastFactorAdjustment
+              - LampQuantity
+              - LampType
+              - LampManufacturer
+              - LampRatedHours
+              - LampBurnHours
+              - LampAlarmMode
+              - LampBurnHoursTripPoint
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          IlluminanceMeasurement:
+              - MeasuredValue
+              - MinMeasuredValue
+              - MaxMeasuredValue
+              - Tolerance
+              - LightSensorType
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          TemperatureMeasurement:
+              - MeasuredValue
+              - MinMeasuredValue
+              - MaxMeasuredValue
+              - Tolerance
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          PressureMeasurement:
+              - MeasuredValue
+              - MinMeasuredValue
+              - MaxMeasuredValue
+              - Tolerance
+              - ScaledValue
+              - MinScaledValue
+              - MaxScaledValue
+              - ScaledTolerance
+              - Scale
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          FlowMeasurement:
+              - MeasuredValue
+              - MinMeasuredValue
+              - MaxMeasuredValue
+              - Tolerance
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          RelativeHumidityMeasurement:
+              - MeasuredValue
+              - MinMeasuredValue
+              - MaxMeasuredValue
+              - Tolerance
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OccupancySensing:
+              - Occupancy
+              - OccupancySensorType
+              - OccupancySensorTypeBitmap
+              - PirOccupiedToUnoccupiedDelay
+              - PirUnoccupiedToOccupiedDelay
+              - PirUnoccupiedToOccupiedThreshold
+              - UltrasonicOccupiedToUnoccupiedDelay
+              - UltrasonicUnoccupiedToOccupiedDelay
+              - UltrasonicUnoccupiedToOccupiedThreshold
+              - PhysicalContactOccupiedToUnoccupiedDelay
+              - PhysicalContactUnoccupiedToOccupiedDelay
+              - PhysicalContactUnoccupiedToOccupiedThreshold
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          WakeOnLan:
+              - MACAddress
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          Channel:
+              - ChannelList
+              - Lineup
+              - CurrentChannel
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          TargetNavigator:
+              - TargetList
+              - CurrentTarget
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          MediaPlayback:
+              - CurrentState
+              - StartTime
+              - Duration
+              - SampledPosition
+              - PlaybackSpeed
+              - SeekRangeEnd
+              - SeekRangeStart
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          MediaInput:
+              - InputList
+              - CurrentInput
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          LowPower:
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          KeypadInput:
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ContentLauncher:
+              - AcceptHeader
+              - SupportedStreamingProtocols
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          AudioOutput:
+              - OutputList
+              - CurrentOutput
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ApplicationLauncher:
+              - CatalogList
+              - CurrentApp
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ApplicationBasic:
+              - VendorName
+              - VendorID
+              - ApplicationName
+              - ProductID
+              - Application
+              - Status
+              - ApplicationVersion
+              - AllowedVendorList
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          AccountLogin:
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ElectricalMeasurement:
+              - MeasurementType
+              - DcVoltage
+              - DcVoltageMin
+              - DcVoltageMax
+              - DcCurrent
+              - DcCurrentMin
+              - DcCurrentMax
+              - DcPower
+              - DcPowerMin
+              - DcPowerMax
+              - DcVoltageMultiplier
+              - DcVoltageDivisor
+              - DcCurrentMultiplier
+              - DcCurrentDivisor
+              - DcPowerMultiplier
+              - DcPowerDivisor
+              - AcFrequency
+              - AcFrequencyMin
+              - AcFrequencyMax
+              - NeutralCurrent
+              - TotalActivePower
+              - TotalReactivePower
+              - TotalApparentPower
+              - Measured1stHarmonicCurrent
+              - Measured3rdHarmonicCurrent
+              - Measured5thHarmonicCurrent
+              - Measured7thHarmonicCurrent
+              - Measured9thHarmonicCurrent
+              - Measured11thHarmonicCurrent
+              - MeasuredPhase1stHarmonicCurrent
+              - MeasuredPhase3rdHarmonicCurrent
+              - MeasuredPhase5thHarmonicCurrent
+              - MeasuredPhase7thHarmonicCurrent
+              - MeasuredPhase9thHarmonicCurrent
+              - MeasuredPhase11thHarmonicCurrent
+              - AcFrequencyMultiplier
+              - AcFrequencyDivisor
+              - PowerMultiplier
+              - PowerDivisor
+              - HarmonicCurrentMultiplier
+              - PhaseHarmonicCurrentMultiplier
+              - InstantaneousVoltage
+              - InstantaneousLineCurrent
+              - InstantaneousActiveCurrent
+              - InstantaneousReactiveCurrent
+              - InstantaneousPower
+              - RmsVoltage
+              - RmsVoltageMin
+              - RmsVoltageMax
+              - RmsCurrent
+              - RmsCurrentMin
+              - RmsCurrentMax
+              - ActivePower
+              - ActivePowerMin
+              - ActivePowerMax
+              - ReactivePower
+              - ApparentPower
+              - PowerFactor
+              - AverageRmsVoltageMeasurementPeriod
+              - AverageRmsUnderVoltageCounter
+              - RmsExtremeOverVoltagePeriod
+              - RmsExtremeUnderVoltagePeriod
+              - RmsVoltageSagPeriod
+              - RmsVoltageSwellPeriod
+              - AcVoltageMultiplier
+              - AcVoltageDivisor
+              - AcCurrentMultiplier
+              - AcCurrentDivisor
+              - AcPowerMultiplier
+              - AcPowerDivisor
+              - OverloadAlarmsMask
+              - VoltageOverload
+              - CurrentOverload
+              - AcOverloadAlarmsMask
+              - AcVoltageOverload
+              - AcCurrentOverload
+              - AcActivePowerOverload
+              - AcReactivePowerOverload
+              - AverageRmsOverVoltage
+              - AverageRmsUnderVoltage
+              - RmsExtremeOverVoltage
+              - RmsExtremeUnderVoltage
+              - RmsVoltageSag
+              - RmsVoltageSwell
+              - LineCurrentPhaseB
+              - ActiveCurrentPhaseB
+              - ReactiveCurrentPhaseB
+              - RmsVoltagePhaseB
+              - RmsVoltageMinPhaseB
+              - RmsVoltageMaxPhaseB
+              - RmsCurrentPhaseB
+              - RmsCurrentMinPhaseB
+              - RmsCurrentMaxPhaseB
+              - ActivePowerPhaseB
+              - ActivePowerMinPhaseB
+              - ActivePowerMaxPhaseB
+              - ReactivePowerPhaseB
+              - ApparentPowerPhaseB
+              - PowerFactorPhaseB
+              - AverageRmsVoltageMeasurementPeriodPhaseB
+              - AverageRmsOverVoltageCounterPhaseB
+              - AverageRmsUnderVoltageCounterPhaseB
+              - RmsExtremeOverVoltagePeriodPhaseB
+              - RmsExtremeUnderVoltagePeriodPhaseB
+              - RmsVoltageSagPeriodPhaseB
+              - RmsVoltageSwellPeriodPhaseB
+              - LineCurrentPhaseC
+              - ActiveCurrentPhaseC
+              - ReactiveCurrentPhaseC
+              - RmsVoltagePhaseC
+              - RmsVoltageMinPhaseC
+              - RmsVoltageMaxPhaseC
+              - RmsCurrentPhaseC
+              - RmsCurrentMinPhaseC
+              - RmsCurrentMaxPhaseC
+              - ActivePowerPhaseC
+              - ActivePowerMinPhaseC
+              - ActivePowerMaxPhaseC
+              - ReactivePowerPhaseC
+              - ApparentPowerPhaseC
+              - PowerFactorPhaseC
+              - AverageRmsVoltageMeasurementPeriodPhaseC
+              - AverageRmsOverVoltageCounterPhaseC
+              - AverageRmsUnderVoltageCounterPhaseC
+              - RmsExtremeOverVoltagePeriodPhaseC
+              - RmsExtremeUnderVoltagePeriodPhaseC
+              - RmsVoltageSagPeriodPhaseC
+              - RmsVoltageSwellPeriodPhaseC
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          TestCluster:
+              - Boolean
+              - Bitmap8
+              - Bitmap16
+              - Bitmap32
+              - Bitmap64
+              - Int8u
+              - Int16u
+              - Int24u
+              - Int32u
+              - Int40u
+              - Int48u
+              - Int56u
+              - Int64u
+              - Int8s
+              - Int16s
+              - Int24s
+              - Int32s
+              - Int40s
+              - Int48s
+              - Int56s
+              - Int64s
+              - Enum8
+              - Enum16
+              - FloatSingle
+              - FloatDouble
+              - OctetString
+              - ListInt8u
+              - ListOctetString
+              - ListStructOctetString
+              - LongOctetString
+              - CharString
+              - LongCharString
+              - EpochUs
+              - EpochS
+              - VendorId
+              - ListNullablesAndOptionalsStruct
+              - EnumAttr
+              - StructAttr
+              - RangeRestrictedInt8u
+              - RangeRestrictedInt8s
+              - RangeRestrictedInt16u
+              - RangeRestrictedInt16s
+              - ListLongOctetString
+              - ListFabricScoped
+              - TimedWriteBoolean
+              - GeneralErrorBoolean
+              - ClusterErrorBoolean
+              - Unsupported
+              - NullableBoolean
+              - NullableBitmap8
+              - NullableBitmap16
+              - NullableBitmap32
+              - NullableBitmap64
+              - NullableInt8u
+              - NullableInt16u
+              - NullableInt24u
+              - NullableInt32u
+              - NullableInt40u
+              - NullableInt48u
+              - NullableInt56u
+              - NullableInt64u
+              - NullableInt8s
+              - NullableInt16s
+              - NullableInt24s
+              - NullableInt32s
+              - NullableInt40s
+              - NullableInt48s
+              - NullableInt56s
+              - NullableInt64s
+              - NullableEnum8
+              - NullableEnum16
+              - NullableFloatSingle
+              - NullableFloatDouble
+              - NullableOctetString
+              - NullableCharString
+              - NullableEnumAttr
+              - NullableStruct
+              - NullableRangeRestrictedInt8u
+              - NullableRangeRestrictedInt8s
+              - NullableRangeRestrictedInt16u
+              - NullableRangeRestrictedInt16s
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+      commands:
+          Identify:
+              - Identify
+              - TriggerEffect
+          Groups:
+              - AddGroup
+              - AddGroupResponse
+              - ViewGroup
+              - ViewGroupResponse
+              - GetGroupMembership
+              - GetGroupMembershipResponse
+              - RemoveGroup
+              - RemoveGroupResponse
+              - RemoveAllGroups
+              - AddGroupIfIdentifying
+          Scenes:
+              - AddScene
+              - AddSceneResponse
+              - ViewScene
+              - ViewSceneResponse
+              - RemoveScene
+              - RemoveSceneResponse
+              - RemoveAllScenes
+              - RemoveAllScenesResponse
+              - StoreScene
+              - StoreSceneResponse
+              - RecallScene
+              - GetSceneMembership
+              - GetSceneMembershipResponse
+              - EnhancedAddScene
+              - EnhancedAddSceneResponse
+              - EnhancedViewScene
+              - EnhancedViewSceneResponse
+              - CopyScene
+              - CopySceneResponse
+          OnOff:
+              - Off
+              - On
+              - Toggle
+              - OffWithEffect
+              - OnWithRecallGlobalScene
+              - OnWithTimedOff
+          LevelControl:
+              - MoveToLevel
+              - Move
+              - Step
+              - Stop
+              - MoveToLevelWithOnOff
+              - MoveWithOnOff
+              - StepWithOnOff
+              - StopWithOnOff
+              - MoveToClosestFrequency
+          Actions:
+              - InstantAction
+              - InstantActionWithTransition
+              - StartAction
+              - StartActionWithDuration
+              - StopAction
+              - PauseAction
+              - PauseActionWithDuration
+              - ResumeAction
+              - EnableAction
+              - EnableActionWithDuration
+              - DisableAction
+              - DisableActionWithDuration
+          Basic:
+              - MfgSpecificPing
+          OtaSoftwareUpdateProvider:
+              - QueryImage
+              - QueryImageResponse
+              - ApplyUpdateRequest
+              - ApplyUpdateResponse
+              - NotifyUpdateApplied
+          OtaSoftwareUpdateRequestor:
+              - AnnounceOtaProvider
+          GeneralCommissioning:
+              - ArmFailSafe
+              - ArmFailSafeResponse
+              - SetRegulatoryConfig
+              - SetRegulatoryConfigResponse
+              - CommissioningComplete
+              - CommissioningCompleteResponse
+          NetworkCommissioning:
+              - ScanNetworks
+              - ScanNetworksResponse
+              - AddOrUpdateWiFiNetwork
+              - AddOrUpdateThreadNetwork
+              - RemoveNetwork
+              - NetworkConfigResponse
+              - ConnectNetwork
+              - ConnectNetworkResponse
+              - ReorderNetwork
+          DiagnosticLogs:
+              - RetrieveLogsRequest
+              - RetrieveLogsResponse
+          GeneralDiagnostics:
+              - TestEventTrigger
+          SoftwareDiagnostics:
+              - ResetWatermarks
+          ThreadNetworkDiagnostics:
+              - ResetCounts
+          WiFiNetworkDiagnostics:
+              - ResetCounts
+          EthernetNetworkDiagnostics:
+              - ResetCounts
+          AdministratorCommissioning:
+              - OpenCommissioningWindow
+              - OpenBasicCommissioningWindow
+              - RevokeCommissioning
+          OperationalCredentials:
+              - AttestationRequest
+              - AttestationResponse
+              - CertificateChainRequest
+              - CertificateChainResponse
+              - CSRRequest
+              - CSRResponse
+              - AddNOC
+              - UpdateNOC
+              - NOCResponse
+              - UpdateFabricLabel
+              - RemoveFabric
+              - AddTrustedRootCertificate
+          GroupKeyManagement:
+              - KeySetWrite
+              - KeySetRead
+              - KeySetReadResponse
+              - KeySetRemove
+              - KeySetReadAllIndices
+              - KeySetReadAllIndicesResponse
+          ModeSelect:
+              - ChangeToMode
+          DoorLock:
+              - LockDoor
+              - UnlockDoor
+              - UnlockWithTimeout
+              - SetWeekDaySchedule
+              - GetWeekDaySchedule
+              - GetWeekDayScheduleResponse
+              - ClearWeekDaySchedule
+              - SetYearDaySchedule
+              - GetYearDaySchedule
+              - GetYearDayScheduleResponse
+              - ClearYearDaySchedule
+              - SetHolidaySchedule
+              - GetHolidaySchedule
+              - GetHolidayScheduleResponse
+              - ClearHolidaySchedule
+              - SetUser
+              - GetUser
+              - GetUserResponse
+              - ClearUser
+              - SetCredential
+              - SetCredentialResponse
+              - GetCredentialStatus
+              - GetCredentialStatusResponse
+              - ClearCredential
+          WindowCovering:
+              - UpOrOpen
+              - DownOrClose
+              - StopMotion
+              - GoToLiftValue
+              - GoToLiftPercentage
+              - GoToTiltValue
+              - GoToTiltPercentage
+          BarrierControl:
+              - BarrierControlGoToPercent
+              - BarrierControlStop
+          Thermostat:
+              - SetpointRaiseLower
+              - GetWeeklyScheduleResponse
+              - SetWeeklySchedule
+              - GetWeeklySchedule
+              - ClearWeeklySchedule
+          ColorControl:
+              - MoveToHue
+              - MoveHue
+              - StepHue
+              - MoveToSaturation
+              - MoveSaturation
+              - StepSaturation
+              - MoveToHueAndSaturation
+              - MoveToColor
+              - MoveColor
+              - StepColor
+              - MoveToColorTemperature
+              - EnhancedMoveToHue
+              - EnhancedMoveHue
+              - EnhancedStepHue
+              - EnhancedMoveToHueAndSaturation
+              - ColorLoopSet
+              - StopMoveStep
+              - MoveColorTemperature
+              - StepColorTemperature
+          Channel:
+              - ChangeChannel
+              - ChangeChannelResponse
+              - ChangeChannelByNumber
+              - SkipChannel
+          TargetNavigator:
+              - NavigateTarget
+              - NavigateTargetResponse
+          MediaPlayback:
+              - Play
+              - Pause
+              - StopPlayback
+              - StartOver
+              - Previous
+              - Next
+              - Rewind
+              - FastForward
+              - SkipForward
+              - SkipBackward
+              - PlaybackResponse
+              - Seek
+          MediaInput:
+              - SelectInput
+              - ShowInputStatus
+              - HideInputStatus
+              - RenameInput
+          LowPower:
+              - Sleep
+          KeypadInput:
+              - SendKey
+              - SendKeyResponse
+          ContentLauncher:
+              - LaunchContent
+              - LaunchURL
+              - LaunchResponse
+          AudioOutput:
+              - SelectOutput
+              - RenameOutput
+          ApplicationLauncher:
+              - LaunchApp
+              - StopApp
+              - HideApp
+              - LauncherResponse
+          AccountLogin:
+              - GetSetupPIN
+              - GetSetupPINResponse
+              - Login
+              - Logout
+          ElectricalMeasurement:
+              - GetProfileInfoResponseCommand
+              - GetProfileInfoCommand
+              - GetMeasurementProfileResponseCommand
+              - GetMeasurementProfileCommand
+          TestCluster:
+              - Test
+              - TestSpecificResponse
+              - TestNotHandled
+              - TestAddArgumentsResponse
+              - TestSpecific
+              - TestSimpleArgumentResponse
+              - TestUnknownCommand
+              - TestStructArrayArgumentResponse
+              - TestAddArguments
+              - TestListInt8UReverseResponse
+              - TestSimpleArgumentRequest
+              - TestEnumsResponse
+              - TestStructArrayArgumentRequest
+              - TestNullableOptionalResponse
+              - TestStructArgumentRequest
+              - TestComplexNullableOptionalResponse
+              - TestNestedStructArgumentRequest
+              - BooleanResponse
+              - TestListStructArgumentRequest
+              - SimpleStructResponse
+              - TestListInt8UArgumentRequest
+              - TestEmitTestEventResponse
+              - TestNestedStructListArgumentRequest
+              - TestEmitTestFabricScopedEventResponse
+              - TestListNestedStructListArgumentRequest
+              - TestListInt8UReverseRequest
+              - TestEnumsRequest
+              - TestNullableOptionalRequest
+              - TestComplexNullableOptionalRequest
+              - SimpleStructEchoRequest
+              - TimedInvokeRequest
+              - TestSimpleOptionalArgumentRequest
+              - TestEmitTestEventRequest
+              - TestEmitTestFabricScopedEventRequest
+      command fields:
+          Identify:
+              Identify:
+                  - identifyTime
+              TriggerEffect:
+                  - effectIdentifier
+                  - effectVariant
+          Groups:
+              AddGroup:
+                  - groupId
+                  - groupName
+              AddGroupResponse:
+                  - status
+                  - groupId
+              ViewGroup:
+                  - groupId
+              ViewGroupResponse:
+                  - status
+                  - groupId
+                  - groupName
+              GetGroupMembership:
+                  - groupList
+              GetGroupMembershipResponse:
+                  - capacity
+                  - groupList
+              RemoveGroup:
+                  - groupId
+              RemoveGroupResponse:
+                  - status
+                  - groupId
+              AddGroupIfIdentifying:
+                  - groupId
+                  - groupName
+          Scenes:
+              AddScene:
+                  - groupId
+                  - sceneId
+                  - transitionTime
+                  - sceneName
+                  - extensionFieldSets
+              AddSceneResponse:
+                  - status
+                  - groupId
+                  - sceneId
+              ViewScene:
+                  - groupId
+                  - sceneId
+              ViewSceneResponse:
+                  - status
+                  - groupId
+                  - sceneId
+                  - transitionTime
+                  - sceneName
+                  - extensionFieldSets
+              RemoveScene:
+                  - groupId
+                  - sceneId
+              RemoveSceneResponse:
+                  - status
+                  - groupId
+                  - sceneId
+              RemoveAllScenes:
+                  - groupId
+              RemoveAllScenesResponse:
+                  - status
+                  - groupId
+              StoreScene:
+                  - groupId
+                  - sceneId
+              StoreSceneResponse:
+                  - status
+                  - groupId
+                  - sceneId
+              RecallScene:
+                  - groupId
+                  - sceneId
+                  - transitionTime
+              GetSceneMembership:
+                  - groupId
+              GetSceneMembershipResponse:
+                  - status
+                  - capacity
+                  - groupId
+                  - sceneList
+              EnhancedAddScene:
+                  - groupId
+                  - sceneId
+                  - transitionTime
+                  - sceneName
+                  - extensionFieldSets
+              EnhancedAddSceneResponse:
+                  - status
+                  - groupId
+                  - sceneId
+              EnhancedViewScene:
+                  - groupId
+                  - sceneId
+              EnhancedViewSceneResponse:
+                  - status
+                  - groupId
+                  - sceneId
+                  - transitionTime
+                  - sceneName
+                  - extensionFieldSets
+              CopyScene:
+                  - mode
+                  - groupIdFrom
+                  - sceneIdFrom
+                  - groupIdTo
+                  - sceneIdTo
+              CopySceneResponse:
+                  - status
+                  - groupIdFrom
+                  - sceneIdFrom
+          OnOff:
+              OffWithEffect:
+                  - effectId
+                  - effectVariant
+              OnWithTimedOff:
+                  - onOffControl
+                  - onTime
+                  - offWaitTime
+          LevelControl:
+              MoveToLevel:
+                  - level
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              Move:
+                  - moveMode
+                  - rate
+                  - optionsMask
+                  - optionsOverride
+              Step:
+                  - stepMode
+                  - stepSize
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              Stop:
+                  - optionsMask
+                  - optionsOverride
+              MoveToLevelWithOnOff:
+                  - level
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveWithOnOff:
+                  - moveMode
+                  - rate
+                  - optionsMask
+                  - optionsOverride
+              StepWithOnOff:
+                  - stepMode
+                  - stepSize
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              StopWithOnOff:
+                  - optionsMask
+                  - optionsOverride
+              MoveToClosestFrequency:
+                  - frequency
+          Actions:
+              InstantAction:
+                  - actionID
+                  - invokeID
+              InstantActionWithTransition:
+                  - actionID
+                  - invokeID
+                  - transitionTime
+              StartAction:
+                  - actionID
+                  - invokeID
+              StartActionWithDuration:
+                  - actionID
+                  - invokeID
+                  - duration
+              StopAction:
+                  - actionID
+                  - invokeID
+              PauseAction:
+                  - actionID
+                  - invokeID
+              PauseActionWithDuration:
+                  - actionID
+                  - invokeID
+                  - duration
+              ResumeAction:
+                  - actionID
+                  - invokeID
+              EnableAction:
+                  - actionID
+                  - invokeID
+              EnableActionWithDuration:
+                  - actionID
+                  - invokeID
+                  - duration
+              DisableAction:
+                  - actionID
+                  - invokeID
+              DisableActionWithDuration:
+                  - actionID
+                  - invokeID
+                  - duration
+          OtaSoftwareUpdateProvider:
+              QueryImage:
+                  - vendorId
+                  - productId
+                  - softwareVersion
+                  - protocolsSupported
+                  - hardwareVersion
+                  - location
+                  - requestorCanConsent
+                  - metadataForProvider
+              QueryImageResponse:
+                  - status
+                  - delayedActionTime
+                  - imageURI
+                  - softwareVersion
+                  - softwareVersionString
+                  - updateToken
+                  - userConsentNeeded
+                  - metadataForRequestor
+              ApplyUpdateRequest:
+                  - updateToken
+                  - newVersion
+              ApplyUpdateResponse:
+                  - action
+                  - delayedActionTime
+              NotifyUpdateApplied:
+                  - updateToken
+                  - softwareVersion
+          OtaSoftwareUpdateRequestor:
+              AnnounceOtaProvider:
+                  - providerNodeId
+                  - vendorId
+                  - announcementReason
+                  - metadataForNode
+                  - endpoint
+          GeneralCommissioning:
+              ArmFailSafe:
+                  - expiryLengthSeconds
+                  - breadcrumb
+              ArmFailSafeResponse:
+                  - errorCode
+                  - debugText
+              SetRegulatoryConfig:
+                  - newRegulatoryConfig
+                  - countryCode
+                  - breadcrumb
+              SetRegulatoryConfigResponse:
+                  - errorCode
+                  - debugText
+              CommissioningCompleteResponse:
+                  - errorCode
+                  - debugText
+          NetworkCommissioning:
+              ScanNetworks:
+                  - ssid
+                  - breadcrumb
+              ScanNetworksResponse:
+                  - networkingStatus
+                  - debugText
+                  - wiFiScanResults
+                  - threadScanResults
+              AddOrUpdateWiFiNetwork:
+                  - ssid
+                  - credentials
+                  - breadcrumb
+              AddOrUpdateThreadNetwork:
+                  - operationalDataset
+                  - breadcrumb
+              RemoveNetwork:
+                  - networkID
+                  - breadcrumb
+              NetworkConfigResponse:
+                  - networkingStatus
+                  - debugText
+                  - networkIndex
+              ConnectNetwork:
+                  - networkID
+                  - breadcrumb
+              ConnectNetworkResponse:
+                  - networkingStatus
+                  - debugText
+                  - errorValue
+              ReorderNetwork:
+                  - networkID
+                  - networkIndex
+                  - breadcrumb
+          DiagnosticLogs:
+              RetrieveLogsRequest:
+                  - intent
+                  - requestedProtocol
+              RetrieveLogsResponse:
+                  - status
+                  - content
+                  - timeStamp
+                  - timeSinceBoot
+          GeneralDiagnostics:
+              TestEventTrigger:
+                  - enableKey
+                  - eventTrigger
+          SoftwareDiagnostics:
+          ThreadNetworkDiagnostics:
+          WiFiNetworkDiagnostics:
+          EthernetNetworkDiagnostics:
+          TimeSynchronization:
+              SetUtcTime:
+                  - utcTime
+                  - granularity
+                  - timeSource
+          AdministratorCommissioning:
+              OpenCommissioningWindow:
+                  - commissioningTimeout
+                  - pakeVerifier
+                  - discriminator
+                  - iterations
+                  - salt
+              OpenBasicCommissioningWindow:
+                  - commissioningTimeout
+          OperationalCredentials:
+              AttestationRequest:
+                  - attestationNonce
+              AttestationResponse:
+                  - attestationElements
+                  - signature
+              CertificateChainRequest:
+                  - certificateType
+              CertificateChainResponse:
+                  - certificate
+              CSRRequest:
+                  - csrNonce
+                  - isForUpdateNOC
+              CSRResponse:
+                  - nocsrElements
+                  - attestationSignature
+              AddNOC:
+                  - nocValue
+                  - icacValue
+                  - ipkValue
+                  - caseAdminSubject
+                  - adminVendorId
+              UpdateNOC:
+                  - nocValue
+                  - icacValue
+              NOCResponse:
+                  - statusCode
+                  - fabricIndex
+                  - debugText
+              UpdateFabricLabel:
+                  - label
+              RemoveFabric:
+                  - fabricIndex
+              AddTrustedRootCertificate:
+                  - rootCertificate
+          GroupKeyManagement:
+              KeySetWrite:
+                  - groupKeySet
+              KeySetRead:
+                  - groupKeySetID
+              KeySetReadResponse:
+                  - groupKeySet
+              KeySetRemove:
+                  - groupKeySetID
+              KeySetReadAllIndices:
+                  - groupKeySetIDs
+              KeySetReadAllIndicesResponse:
+                  - groupKeySetIDs
+          ModeSelect:
+              ChangeToMode:
+                  - newMode
+          DoorLock:
+              LockDoor:
+                  - pinCode
+              UnlockDoor:
+                  - pinCode
+              UnlockWithTimeout:
+                  - timeout
+                  - pinCode
+              SetWeekDaySchedule:
+                  - weekDayIndex
+                  - userIndex
+                  - daysMask
+                  - startHour
+                  - startMinute
+                  - endHour
+                  - endMinute
+              GetWeekDaySchedule:
+                  - weekDayIndex
+                  - userIndex
+              GetWeekDayScheduleResponse:
+                  - weekDayIndex
+                  - userIndex
+                  - status
+                  - daysMask
+                  - startHour
+                  - startMinute
+                  - endHour
+                  - endMinute
+              ClearWeekDaySchedule:
+                  - weekDayIndex
+                  - userIndex
+              SetYearDaySchedule:
+                  - yearDayIndex
+                  - userIndex
+                  - localStartTime
+                  - localEndTime
+              GetYearDaySchedule:
+                  - yearDayIndex
+                  - userIndex
+              GetYearDayScheduleResponse:
+                  - yearDayIndex
+                  - userIndex
+                  - status
+                  - localStartTime
+                  - localEndTime
+              ClearYearDaySchedule:
+                  - yearDayIndex
+                  - userIndex
+              SetHolidaySchedule:
+                  - holidayIndex
+                  - localStartTime
+                  - localEndTime
+                  - operatingMode
+              GetHolidaySchedule:
+                  - holidayIndex
+              GetHolidayScheduleResponse:
+                  - holidayIndex
+                  - status
+                  - localStartTime
+                  - localEndTime
+                  - operatingMode
+              ClearHolidaySchedule:
+                  - holidayIndex
+              SetUser:
+                  - operationType
+                  - userIndex
+                  - userName
+                  - userUniqueId
+                  - userStatus
+                  - userType
+                  - credentialRule
+              GetUser:
+                  - userIndex
+              GetUserResponse:
+                  - userIndex
+                  - userName
+                  - userUniqueId
+                  - userStatus
+                  - userType
+                  - credentialRule
+                  - credentials
+                  - creatorFabricIndex
+                  - lastModifiedFabricIndex
+                  - nextUserIndex
+              ClearUser:
+                  - userIndex
+              SetCredential:
+                  - operationType
+                  - credential
+                  - credentialData
+                  - userIndex
+                  - userStatus
+                  - userType
+              SetCredentialResponse:
+                  - status
+                  - userIndex
+                  - nextCredentialIndex
+              GetCredentialStatus:
+                  - credential
+              GetCredentialStatusResponse:
+                  - credentialExists
+                  - userIndex
+                  - creatorFabricIndex
+                  - lastModifiedFabricIndex
+                  - nextCredentialIndex
+              ClearCredential:
+                  - credential
+          WindowCovering:
+              GoToLiftValue:
+                  - liftValue
+              GoToLiftPercentage:
+                  - liftPercent100thsValue
+              GoToTiltValue:
+                  - tiltValue
+              GoToTiltPercentage:
+                  - tiltPercent100thsValue
+          BarrierControl:
+              BarrierControlGoToPercent:
+                  - percentOpen
+          Thermostat:
+              SetpointRaiseLower:
+                  - mode
+                  - amount
+              GetWeeklyScheduleResponse:
+                  - numberOfTransitionsForSequence
+                  - dayOfWeekForSequence
+                  - modeForSequence
+                  - transitions
+              SetWeeklySchedule:
+                  - numberOfTransitionsForSequence
+                  - dayOfWeekForSequence
+                  - modeForSequence
+                  - transitions
+              GetWeeklySchedule:
+                  - daysToReturn
+                  - modeToReturn
+          ColorControl:
+              MoveToHue:
+                  - hue
+                  - direction
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveHue:
+                  - moveMode
+                  - rate
+                  - optionsMask
+                  - optionsOverride
+              StepHue:
+                  - stepMode
+                  - stepSize
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveToSaturation:
+                  - saturation
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveSaturation:
+                  - moveMode
+                  - rate
+                  - optionsMask
+                  - optionsOverride
+              StepSaturation:
+                  - stepMode
+                  - stepSize
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveToHueAndSaturation:
+                  - hue
+                  - saturation
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveToColor:
+                  - colorX
+                  - colorY
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveColor:
+                  - rateX
+                  - rateY
+                  - optionsMask
+                  - optionsOverride
+              StepColor:
+                  - stepX
+                  - stepY
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              MoveToColorTemperature:
+                  - colorTemperature
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              EnhancedMoveToHue:
+                  - enhancedHue
+                  - direction
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              EnhancedMoveHue:
+                  - moveMode
+                  - rate
+                  - optionsMask
+                  - optionsOverride
+              EnhancedStepHue:
+                  - stepMode
+                  - stepSize
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              EnhancedMoveToHueAndSaturation:
+                  - enhancedHue
+                  - saturation
+                  - transitionTime
+                  - optionsMask
+                  - optionsOverride
+              ColorLoopSet:
+                  - updateFlags
+                  - action
+                  - direction
+                  - time
+                  - startHue
+                  - optionsMask
+                  - optionsOverride
+              StopMoveStep:
+                  - optionsMask
+                  - optionsOverride
+              MoveColorTemperature:
+                  - moveMode
+                  - rate
+                  - colorTemperatureMinimumMireds
+                  - colorTemperatureMaximumMireds
+                  - optionsMask
+                  - optionsOverride
+              StepColorTemperature:
+                  - stepMode
+                  - stepSize
+                  - transitionTime
+                  - colorTemperatureMinimumMireds
+                  - colorTemperatureMaximumMireds
+                  - optionsMask
+                  - optionsOverride
+          Channel:
+              ChangeChannel:
+                  - match
+              ChangeChannelResponse:
+                  - status
+                  - data
+              ChangeChannelByNumber:
+                  - majorNumber
+                  - minorNumber
+              SkipChannel:
+                  - count
+          TargetNavigator:
+              NavigateTarget:
+                  - target
+                  - data
+              NavigateTargetResponse:
+                  - status
+                  - data
+          MediaPlayback:
+              SkipForward:
+                  - deltaPositionMilliseconds
+              SkipBackward:
+                  - deltaPositionMilliseconds
+              PlaybackResponse:
+                  - status
+                  - data
+              Seek:
+                  - position
+          MediaInput:
+              SelectInput:
+                  - index
+              RenameInput:
+                  - index
+                  - name
+          LowPower:
+          KeypadInput:
+              SendKey:
+                  - keyCode
+              SendKeyResponse:
+                  - status
+          ContentLauncher:
+              LaunchContent:
+                  - search
+                  - autoPlay
+                  - data
+              LaunchURL:
+                  - contentURL
+                  - displayString
+                  - brandingInformation
+              LaunchResponse:
+                  - status
+                  - data
+          AudioOutput:
+              SelectOutput:
+                  - index
+              RenameOutput:
+                  - index
+                  - name
+          ApplicationLauncher:
+              LaunchApp:
+                  - application
+                  - data
+              StopApp:
+                  - application
+              HideApp:
+                  - application
+              LauncherResponse:
+                  - status
+                  - data
+          AccountLogin:
+              GetSetupPIN:
+                  - tempAccountIdentifier
+              GetSetupPINResponse:
+                  - setupPIN
+              Login:
+                  - tempAccountIdentifier
+                  - setupPIN
+          ElectricalMeasurement:
+              GetProfileInfoResponseCommand:
+                  - profileCount
+                  - profileIntervalPeriod
+                  - maxNumberOfIntervals
+                  - listOfAttributes
+              GetMeasurementProfileResponseCommand:
+                  - startTime
+                  - status
+                  - profileIntervalPeriod
+                  - numberOfIntervalsDelivered
+                  - attributeId
+                  - intervals
+              GetMeasurementProfileCommand:
+                  - attributeId
+                  - startTime
+                  - numberOfIntervals
+          TestCluster:
+              TestSpecificResponse:
+                  - returnValue
+              TestAddArgumentsResponse:
+                  - returnValue
+              TestSimpleArgumentResponse:
+                  - returnValue
+              TestStructArrayArgumentResponse:
+                  - arg1
+                  - arg2
+                  - arg3
+                  - arg4
+                  - arg5
+                  - arg6
+              TestAddArguments:
+                  - arg1
+                  - arg2
+              TestListInt8UReverseResponse:
+                  - arg1
+              TestSimpleArgumentRequest:
+                  - arg1
+              TestEnumsResponse:
+                  - arg1
+                  - arg2
+              TestStructArrayArgumentRequest:
+                  - arg1
+                  - arg2
+                  - arg3
+                  - arg4
+                  - arg5
+                  - arg6
+              TestNullableOptionalResponse:
+                  - wasPresent
+                  - wasNull
+                  - value
+                  - originalValue
+              TestStructArgumentRequest:
+                  - arg1
+              TestComplexNullableOptionalResponse:
+                  - nullableIntWasNull
+                  - nullableIntValue
+                  - optionalIntWasPresent
+                  - optionalIntValue
+                  - nullableOptionalIntWasPresent
+                  - nullableOptionalIntWasNull
+                  - nullableOptionalIntValue
+                  - nullableStringWasNull
+                  - nullableStringValue
+                  - optionalStringWasPresent
+                  - optionalStringValue
+                  - nullableOptionalStringWasPresent
+                  - nullableOptionalStringWasNull
+                  - nullableOptionalStringValue
+                  - nullableStructWasNull
+                  - nullableStructValue
+                  - optionalStructWasPresent
+                  - optionalStructValue
+                  - nullableOptionalStructWasPresent
+                  - nullableOptionalStructWasNull
+                  - nullableOptionalStructValue
+                  - nullableListWasNull
+                  - nullableListValue
+                  - optionalListWasPresent
+                  - optionalListValue
+                  - nullableOptionalListWasPresent
+                  - nullableOptionalListWasNull
+                  - nullableOptionalListValue
+              TestNestedStructArgumentRequest:
+                  - arg1
+              BooleanResponse:
+                  - value
+              TestListStructArgumentRequest:
+                  - arg1
+              SimpleStructResponse:
+                  - arg1
+              TestListInt8UArgumentRequest:
+                  - arg1
+              TestEmitTestEventResponse:
+                  - value
+              TestNestedStructListArgumentRequest:
+                  - arg1
+              TestEmitTestFabricScopedEventResponse:
+                  - value
+              TestListNestedStructListArgumentRequest:
+                  - arg1
+              TestListInt8UReverseRequest:
+                  - arg1
+              TestEnumsRequest:
+                  - arg1
+                  - arg2
+              TestNullableOptionalRequest:
+                  - arg1
+              TestComplexNullableOptionalRequest:
+                  - nullableInt
+                  - optionalInt
+                  - nullableOptionalInt
+                  - nullableString
+                  - optionalString
+                  - nullableOptionalString
+                  - nullableStruct
+                  - optionalStruct
+                  - nullableOptionalStruct
+                  - nullableList
+                  - optionalList
+                  - nullableOptionalList
+              SimpleStructEchoRequest:
+                  - arg1
+              TestSimpleOptionalArgumentRequest:
+                  - arg1
+              TestEmitTestEventRequest:
+                  - arg1
+                  - arg2
+                  - arg3
+              TestEmitTestFabricScopedEventRequest:
+                  - arg1
+          FaultInjection:
+              FailAtFault:
+                  - type
+                  - id
+                  - numCallsToSkip
+                  - numCallsToFail
+                  - takeMutex
+              FailRandomlyAtFault:
+                  - type
+                  - id
+                  - percentage
+      structs:
+          Scenes:
+              - AttributeValuePair
+              - ExtensionFieldSet
+          Descriptor:
+              - DeviceType
+          Binding:
+              - TargetStruct
+          AccessControl:
+              - Target
+              - AccessControlEntry
+              - ExtensionEntry
+          Actions:
+              - ActionStruct
+              - EndpointListStruct
+          Basic:
+              - CapabilityMinimaStruct
+          OtaSoftwareUpdateRequestor:
+              - ProviderLocation
+          PowerSource:
+              - BatChargeFaultChangeType
+              - BatFaultChangeType
+              - WiredFaultChangeType
+          GeneralCommissioning:
+              - BasicCommissioningInfo
+          NetworkCommissioning:
+              - NetworkInfo
+              - ThreadInterfaceScanResult
+              - WiFiInterfaceScanResult
+          GeneralDiagnostics:
+              - NetworkInterfaceType
+          SoftwareDiagnostics:
+              - ThreadMetrics
+          ThreadNetworkDiagnostics:
+              - NeighborTable
+              - OperationalDatasetComponents
+              - RouteTable
+              - SecurityPolicy
+          TimeSynchronization:
+              - DstOffsetType
+              - TimeZoneType
+          OperationalCredentials:
+              - FabricDescriptor
+              - NOCStruct
+          GroupKeyManagement:
+              - GroupInfoMapStruct
+              - GroupKeyMapStruct
+              - GroupKeySetStruct
+          FixedLabel:
+              - LabelStruct
+          UserLabel:
+              - LabelStruct
+          ModeSelect:
+              - SemanticTag
+              - ModeOptionStruct
+          DoorLock:
+              - DlCredential
+          Thermostat:
+              - ThermostatScheduleTransition
+          Channel:
+              - ChannelInfo
+              - LineupInfo
+          TargetNavigator:
+              - TargetInfo
+          MediaPlayback:
+              - PlaybackPosition
+          MediaInput:
+              - InputInfo
+          ContentLauncher:
+              - Dimension
+              - AdditionalInfo
+              - Parameter
+              - ContentSearch
+              - StyleInformation
+              - BrandingInformation
+          AudioOutput:
+              - OutputInfo
+          ApplicationLauncher:
+              - Application
+              - ApplicationEP
+          ApplicationBasic:
+              - ApplicationBasicApplication
+          TestCluster:
+              - SimpleStruct
+              - TestFabricScoped
+              - NullablesAndOptionalsStruct
+              - NestedStruct
+              - NestedStructList
+              - DoubleNestedStructList
+              - TestListStructOctet
+      struct fields:
+          Scenes:
+              AttributeValuePair:
+                  - attributeId
+                  - attributeValue
+              ExtensionFieldSet:
+                  - clusterId
+                  - attributeValueList
+          Descriptor:
+              DeviceType:
+                  - type
+                  - revision
+          Binding:
+              TargetStruct:
+                  - node
+                  - group
+                  - endpoint
+                  - cluster
+                  - fabricIndex
+          AccessControl:
+              Target:
+                  - cluster
+                  - endpoint
+                  - deviceType
+              AccessControlEntry:
+                  - privilege
+                  - authMode
+                  - subjects
+                  - targets
+                  - fabricIndex
+              ExtensionEntry:
+                  - data
+                  - fabricIndex
+          Actions:
+              ActionStruct:
+                  - actionID
+                  - name
+                  - type
+                  - endpointListID
+                  - supportedCommands
+                  - state
+              EndpointListStruct:
+                  - endpointListID
+                  - name
+                  - type
+                  - endpoints
+          Basic:
+              CapabilityMinimaStruct:
+                  - caseSessionsPerFabric
+                  - subscriptionsPerFabric
+          OtaSoftwareUpdateRequestor:
+              ProviderLocation:
+                  - providerNodeID
+                  - endpoint
+                  - fabricIndex
+          PowerSource:
+              BatChargeFaultChangeType:
+                  - current
+                  - previous
+              BatFaultChangeType:
+                  - current
+                  - previous
+              WiredFaultChangeType:
+                  - current
+                  - previous
+          GeneralCommissioning:
+              BasicCommissioningInfo:
+                  - failSafeExpiryLengthSeconds
+                  - maxCumulativeFailsafeSeconds
+          NetworkCommissioning:
+              NetworkInfo:
+                  - networkID
+                  - connected
+              ThreadInterfaceScanResult:
+                  - panId
+                  - extendedPanId
+                  - networkName
+                  - channel
+                  - version
+                  - extendedAddress
+                  - rssi
+                  - lqi
+              WiFiInterfaceScanResult:
+                  - security
+                  - ssid
+                  - bssid
+                  - channel
+                  - wiFiBand
+                  - rssi
+          GeneralDiagnostics:
+              NetworkInterfaceType:
+                  - name
+                  - isOperational
+                  - offPremiseServicesReachableIPv4
+                  - offPremiseServicesReachableIPv6
+                  - hardwareAddress
+                  - iPv4Addresses
+                  - iPv6Addresses
+                  - type
+          SoftwareDiagnostics:
+              ThreadMetrics:
+                  - id
+                  - name
+                  - stackFreeCurrent
+                  - stackFreeMinimum
+                  - stackSize
+          ThreadNetworkDiagnostics:
+              NeighborTable:
+                  - extAddress
+                  - age
+                  - rloc16
+                  - linkFrameCounter
+                  - mleFrameCounter
+                  - lqi
+                  - averageRssi
+                  - lastRssi
+                  - frameErrorRate
+                  - messageErrorRate
+                  - rxOnWhenIdle
+                  - fullThreadDevice
+                  - fullNetworkData
+                  - isChild
+              OperationalDatasetComponents:
+                  - activeTimestampPresent
+                  - pendingTimestampPresent
+                  - masterKeyPresent
+                  - networkNamePresent
+                  - extendedPanIdPresent
+                  - meshLocalPrefixPresent
+                  - delayPresent
+                  - panIdPresent
+                  - channelPresent
+                  - pskcPresent
+                  - securityPolicyPresent
+                  - channelMaskPresent
+              RouteTable:
+                  - extAddress
+                  - rloc16
+                  - routerId
+                  - nextHop
+                  - pathCost
+                  - lqiIn
+                  - lqiOut
+                  - age
+                  - allocated
+                  - linkEstablished
+              SecurityPolicy:
+                  - rotationTime
+                  - flags
+          TimeSynchronization:
+              DstOffsetType:
+                  - offset
+                  - validStarting
+                  - validUntil
+              TimeZoneType:
+                  - offset
+                  - validAt
+                  - name
+          OperationalCredentials:
+              FabricDescriptor:
+                  - rootPublicKey
+                  - vendorId
+                  - fabricId
+                  - nodeId
+                  - label
+                  - fabricIndex
+              NOCStruct:
+                  - noc
+                  - icac
+                  - fabricIndex
+          GroupKeyManagement:
+              GroupInfoMapStruct:
+                  - groupId
+                  - endpoints
+                  - groupName
+                  - fabricIndex
+              GroupKeyMapStruct:
+                  - groupId
+                  - groupKeySetID
+                  - fabricIndex
+              GroupKeySetStruct:
+                  - groupKeySetID
+                  - groupKeySecurityPolicy
+                  - epochKey0
+                  - epochStartTime0
+                  - epochKey1
+                  - epochStartTime1
+                  - epochKey2
+                  - epochStartTime2
+          FixedLabel:
+              LabelStruct:
+                  - label
+                  - value
+          UserLabel:
+              LabelStruct:
+                  - label
+                  - value
+          ModeSelect:
+              SemanticTag:
+                  - mfgCode
+                  - value
+              ModeOptionStruct:
+                  - label
+                  - mode
+                  - semanticTags
+          DoorLock:
+              DlCredential:
+                  - credentialType
+                  - credentialIndex
+          Thermostat:
+              ThermostatScheduleTransition:
+                  - transitionTime
+                  - heatSetpoint
+                  - coolSetpoint
+          Channel:
+              ChannelInfo:
+                  - majorNumber
+                  - minorNumber
+                  - name
+                  - callSign
+                  - affiliateCallSign
+              LineupInfo:
+                  - operatorName
+                  - lineupName
+                  - postalCode
+                  - lineupInfoType
+          TargetNavigator:
+              TargetInfo:
+                  - identifier
+                  - name
+          MediaPlayback:
+              PlaybackPosition:
+                  - updatedAt
+                  - position
+          MediaInput:
+              InputInfo:
+                  - index
+                  - inputType
+                  - name
+                  - descriptionString
+          ContentLauncher:
+              Dimension:
+                  - width
+                  - height
+                  - metric
+              AdditionalInfo:
+                  - name
+                  - value
+              Parameter:
+                  - type
+                  - value
+                  - externalIDList
+              ContentSearch:
+                  - parameterList
+              StyleInformation:
+                  - imageUrl
+                  - color
+                  - size
+              BrandingInformation:
+                  - providerName
+                  - background
+                  - logo
+                  - progressBar
+                  - splash
+                  - waterMark
+          AudioOutput:
+              OutputInfo:
+                  - index
+                  - outputType
+                  - name
+          ApplicationLauncher:
+              Application:
+                  - catalogVendorId
+                  - applicationId
+              ApplicationEP:
+                  - application
+                  - endpoint
+          ApplicationBasic:
+              ApplicationBasicApplication:
+                  - catalogVendorId
+                  - applicationId
+          TestCluster:
+              SimpleStruct:
+                  - a
+                  - b
+                  - c
+                  - d
+                  - e
+                  - f
+                  - g
+                  - h
+              TestFabricScoped:
+                  - fabricSensitiveInt8u
+                  - optionalFabricSensitiveInt8u
+                  - nullableFabricSensitiveInt8u
+                  - nullableOptionalFabricSensitiveInt8u
+                  - fabricSensitiveCharString
+                  - fabricSensitiveStruct
+                  - fabricSensitiveInt8uList
+                  - fabricIndex
+              NullablesAndOptionalsStruct:
+                  - nullableInt
+                  - optionalInt
+                  - nullableOptionalInt
+                  - nullableString
+                  - optionalString
+                  - nullableOptionalString
+                  - nullableStruct
+                  - optionalStruct
+                  - nullableOptionalStruct
+                  - nullableList
+                  - optionalList
+                  - nullableOptionalList
+              NestedStruct:
+                  - a
+                  - b
+                  - c
+              NestedStructList:
+                  - a
+                  - b
+                  - c
+                  - d
+                  - e
+                  - f
+                  - g
+              DoubleNestedStructList:
+                  - a
+              TestListStructOctet:
+                  - member1
+                  - member2
+      events:
+          AccessControl:
+              - AccessControlEntryChanged
+              - AccessControlExtensionChanged
+          Actions:
+              - StateChanged
+              - ActionFailed
+          Basic:
+              - StartUp
+              - ShutDown
+              - Leave
+              - ReachableChanged
+          OtaSoftwareUpdateRequestor:
+              - StateTransition
+              - VersionApplied
+              - DownloadError
+          GeneralDiagnostics:
+              - HardwareFaultChange
+              - RadioFaultChange
+              - NetworkFaultChange
+              - BootReason
+          SoftwareDiagnostics:
+              - SoftwareFault
+          ThreadNetworkDiagnostics:
+              - ConnectionStatus
+              - NetworkFaultChange
+          WiFiNetworkDiagnostics:
+              - Disconnection
+              - AssociationFailure
+              - ConnectionStatus
+          BridgedDeviceBasic:
+              - StartUp
+              - ShutDown
+              - Leave
+              - ReachableChanged
+          Switch:
+              - SwitchLatched
+              - InitialPress
+              - LongPress
+              - ShortRelease
+              - LongRelease
+              - MultiPressOngoing
+              - MultiPressComplete
+          BooleanState:
+              - StateChange
+          DoorLock:
+              - DoorLockAlarm
+              - DoorStateChange
+              - LockOperation
+              - LockOperationError
+              - LockUserChange
+          PumpConfigurationAndControl:
+              - SupplyVoltageLow
+              - SupplyVoltageHigh
+              - PowerMissingPhase
+              - SystemPressureLow
+              - SystemPressureHigh
+              - DryRunning
+              - MotorTemperatureHigh
+              - PumpMotorFatalFailure
+              - ElectronicTemperatureHigh
+              - PumpBlocked
+              - SensorFailure
+              - ElectronicNonFatalFailure
+              - ElectronicFatalFailure
+              - GeneralFault
+              - Leakage
+              - AirDetection
+              - TurbineOperation
+          TestCluster:
+              - TestEvent
+              - TestFabricScopedEvent
+      event fields:
+          AccessControl:
+              AccessControlEntryChanged:
+                  - adminNodeID
+                  - adminPasscodeID
+                  - changeType
+                  - latestValue
+                  - fabricIndex
+              AccessControlExtensionChanged:
+                  - adminNodeID
+                  - adminPasscodeID
+                  - changeType
+                  - latestValue
+                  - fabricIndex
+          Actions:
+              StateChanged:
+                  - actionID
+                  - invokeID
+                  - newState
+              ActionFailed:
+                  - actionID
+                  - invokeID
+                  - newState
+                  - error
+          Basic:
+              StartUp:
+                  - softwareVersion
+              Leave:
+                  - fabricIndex
+              ReachableChanged:
+                  - reachableNewValue
+          OtaSoftwareUpdateRequestor:
+              StateTransition:
+                  - previousState
+                  - newState
+                  - reason
+                  - targetSoftwareVersion
+              VersionApplied:
+                  - softwareVersion
+                  - productID
+              DownloadError:
+                  - softwareVersion
+                  - bytesDownloaded
+                  - progressPercent
+                  - platformCode
+          GeneralDiagnostics:
+              HardwareFaultChange:
+                  - current
+                  - previous
+              RadioFaultChange:
+                  - current
+                  - previous
+              NetworkFaultChange:
+                  - current
+                  - previous
+              BootReason:
+                  - bootReason
+          SoftwareDiagnostics:
+              SoftwareFault:
+                  - id
+                  - name
+                  - faultRecording
+          ThreadNetworkDiagnostics:
+              ConnectionStatus:
+                  - connectionStatus
+              NetworkFaultChange:
+                  - current
+                  - previous
+          WiFiNetworkDiagnostics:
+              Disconnection:
+                  - reasonCode
+              AssociationFailure:
+                  - associationFailure
+                  - status
+              ConnectionStatus:
+                  - connectionStatus
+          BridgedDeviceBasic:
+              StartUp:
+                  - softwareVersion
+              ReachableChanged:
+                  - reachableNewValue
+          Switch:
+              SwitchLatched:
+                  - newPosition
+              InitialPress:
+                  - newPosition
+              LongPress:
+                  - newPosition
+              ShortRelease:
+                  - previousPosition
+              LongRelease:
+                  - previousPosition
+              MultiPressOngoing:
+                  - newPosition
+                  - currentNumberOfPressesCounted
+              MultiPressComplete:
+                  - newPosition
+                  - totalNumberOfPressesCounted
+          BooleanState:
+              StateChange:
+                  - stateValue
+          DoorLock:
+              DoorLockAlarm:
+                  - alarmCode
+              DoorStateChange:
+                  - doorState
+              LockOperation:
+                  - lockOperationType
+                  - operationSource
+                  - userIndex
+                  - fabricIndex
+                  - sourceNode
+                  - credentials
+              LockOperationError:
+                  - lockOperationType
+                  - operationSource
+                  - operationError
+                  - userIndex
+                  - fabricIndex
+                  - sourceNode
+                  - credentials
+              LockUserChange:
+                  - lockDataType
+                  - dataOperationType
+                  - operationSource
+                  - userIndex
+                  - fabricIndex
+                  - sourceNode
+                  - dataIndex
+          PumpConfigurationAndControl:
+          TestCluster:
+              TestEvent:
+                  - arg1
+                  - arg2
+                  - arg3
+                  - arg4
+                  - arg5
+                  - arg6
+              TestFabricScopedEvent:
+                  - fabricIndex
+      enums:
+          Identify:
+              # EffectIdentifierEnum, EffectVariantEnum, and IdentifyTypeEnum
+              # were originally named IdentifyEffectIdentifier,
+              # IdentifyEffectVariant, and IdentifyIdentifyType, but we generate
+              # the same API for the names with/without "Enum" at the end, and
+              # with/without the cluster name at the beginning, so the name can
+              # just change here.
+              - EffectIdentifierEnum
+              - EffectVariantEnum
+              - IdentifyTypeEnum
+          OnOff:
+              # DelayedOnOffEffectVariantEnum, DyingLightEffectVariantEnum,
+              # EffectIdentifierEnum, and StartUpOnOffEnum were originally named
+              # OnOffDelayedAllOffEffectVariant,
+              # OnOffDelayedAllOffEffectVariant, OnOffEffectIdentifier, and
+              # OnOffStartUpOnOff, but we generate the same API for the names
+              # with/without "Enum" at the end, and with/without the cluster
+              # name at the beginning, so the name can just change here.
+              - DelayedAllOffEffectVariantEnum
+              - DyingLightEffectVariantEnum
+              - EffectIdentifierEnum
+              - StartUpOnOffEnum
+          LevelControl:
+              # MoveModeEnum and StepModeEnum were originally named MoveMode and
+              # StepMode, but we generate the same API for the names
+              # with/without "Enum" at the end, and with/without the cluster
+              # name at the beginning, so the name can just change here.
+              - MoveModeEnum
+              - StepModeEnum
+          AccessControl:
+              - AuthMode
+              - ChangeTypeEnum
+              - Privilege
+          Actions:
+              - ActionErrorEnum
+              - ActionStateEnum
+              - ActionTypeEnum
+              - EndpointListTypeEnum
+          OtaSoftwareUpdateProvider:
+              - OTAApplyUpdateAction
+              - OTADownloadProtocol
+              - OTAQueryStatus
+          OtaSoftwareUpdateRequestor:
+              - OTAAnnouncementReason
+              - OTAChangeReasonEnum
+              - OTAUpdateStateEnum
+          TimeFormatLocalization:
+              # CalendarTypeEnum and HourFormatEnum were originally just named
+              # CalendarType and HourFormat, but we generate the same API for
+              # the names with/without "Enum" at the end, so the name can just
+              # change here.
+              - CalendarTypeEnum
+              - HourFormatEnum
+          UnitLocalization:
+              # TempUnitEnum was originally just named TempUnit, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              - TempUnitEnum
+          PowerSource:
+              # All the PowerSource enums originally did not have the "Enum"
+              # suffix, but we generate the same API whether that suffix is
+              # there or not, so the names can just change here.
+              - BatChargeFaultEnum
+              - BatChargeLevelEnum
+              - BatChargeStateEnum
+              - BatFaultEnum
+              - BatReplaceabilityEnum
+              - PowerSourceStatusEnum
+              - WiredCurrentTypeEnum
+              - WiredFaultEnum
+          GeneralCommissioning:
+              # CommissioningErrorEnum was originally just named
+              # CommissioningError, but we generate the same API
+              # for both of those names, so the name can just change
+              # here.
+              - CommissioningErrorEnum
+              # RegulatoryLocationTypeEnum was originally just named
+              # RegulatoryLocationType, but we generate the same API
+              # for both of those names, so the name can just change
+              # here.
+              - RegulatoryLocationTypeEnum
+          NetworkCommissioning:
+              # NetworkCommissioningStatusEnum and WiFiBandEnum were originally
+              # just named NetworkCommissioningStatus and WiFiBand, but we
+              # generate the same API for both of those names, so the name can
+              # just change here.
+              - NetworkCommissioningStatusEnum
+              - WiFiBandEnum
+          DiagnosticLogs:
+              - LogsIntent
+              - LogsStatus
+              - LogsTransferProtocol
+          GeneralDiagnostics:
+              - BootReasonType
+              - HardwareFaultType
+              # InterfaceTypeEnum was originally just named InterfaceType, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              - InterfaceTypeEnum
+              - NetworkFaultType
+              - RadioFaultType
+          ThreadNetworkDiagnostics:
+              # NetworkFaultEnum and RoutingRoleEnum were originally just named
+              # NetworkFault and RoutingRole, but we generate the same API for
+              # both of those names, so the name can just change here.
+              - NetworkFaultEnum
+              - RoutingRoleEnum
+              - ThreadConnectionStatus
+          WiFiNetworkDiagnostics:
+              # AssociationFailureCauseEnum was originally just named
+              # AssociationFailureCause, but we generate the same API for both
+              # of those names, so the name can just change here.
+              - AssociationFailureCauseEnum
+              # SecurityTypeEnum was originally just named SecurityType, but we
+              # generate the same API for both of those names, so the name can
+              # just change here.
+              - SecurityTypeEnum
+              - WiFiConnectionStatus
+              - WiFiVersionType
+          EthernetNetworkDiagnostics:
+              - PHYRateType
+          TimeSynchronization:
+              - GranularityEnum
+              - TimeSourceEnum
+          AdministratorCommissioning:
+              # CommissioningWindowStatusEnum was originally just named
+              # CommissioningWindowStatus, but we generate the same API for both
+              # of those names, so the name can just change here.
+              - CommissioningWindowStatusEnum
+              - StatusCode
+          OperationalCredentials:
+              - OperationalCertStatus
+          GroupKeyManagement:
+              # GroupKeySecurityPolicyEnum was originally just named
+              # GroupKeySecurityPolicy, but we generate the same API for both of
+              # those names, so the name can just change here.
+              - GroupKeySecurityPolicyEnum
+          DoorLock:
+              - DlAlarmCode
+              - DlCredentialRule
+              - DlCredentialType
+              - DlDataOperationType
+              - DlDoorState
+              - DlLockDataType
+              - DlLockOperationType
+              - DlLockState
+              - DlLockType
+              - DlOperatingMode
+              - DlOperationError
+              - DlOperationSource
+              - DlStatus
+              - DlUserStatus
+              - DlUserType
+              - DoorLockOperationEventCode
+              - DoorLockProgrammingEventCode
+              - DoorLockSetPinOrIdStatus
+              - DoorLockUserStatus
+              - DoorLockUserType
+              # UserTypeEnum and UserStatusEnum use the same generated name as
+              # DoorLockUserStatus and DoorLockUserType, so need to be
+              # considered as introduced at the same time.
+              - UserStatusEnum
+              - UserTypeEnum
+          WindowCovering:
+              - EndProductType
+              - Type
+          PumpConfigurationAndControl:
+              - PumpControlMode
+              - PumpOperationMode
+          Thermostat:
+              - SetpointAdjustMode
+              - ThermostatControlSequence
+              # ThermostatRunningModeEnum was originally named
+              # ThermostatRunningMode, but we generate the same API for the
+              # names with/without "Enum" at the end, so the name can just
+              # change here.
+              - ThermostatRunningModeEnum
+              # SystemModeEnum was originally named ThermostatSystemMode, but we
+              # generate the same API for the names with/without "Enum" at the
+              # end and the cluster name present/absent at the beginning, so the
+              # name can just change here.
+              - SystemModeEnum
+          FanControl:
+              - FanModeSequenceType
+              - FanModeType
+          ColorControl:
+              - ColorLoopAction
+              - ColorLoopDirection
+              - ColorMode
+              - HueDirection
+              - HueMoveMode
+              - HueStepMode
+              - SaturationMoveMode
+              - SaturationStepMode
+          IlluminanceMeasurement:
+              # LightSensorTypeEnum was originally named LightSensorType, but we
+              # generate the same API for the names with/without "Enum" at the
+              # end, so the name can just change here.
+              - LightSensorTypeEnum
+          Channel:
+              # StatusEnum was originally named ChannelStatusEnum, but we
+              # generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              - StatusEnum
+              - LineupInfoTypeEnum
+          TargetNavigator:
+              # StatusEnum was originally named TargetNavigatorStatusEnum, but
+              # we generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              - StatusEnum
+          MediaPlayback:
+              # StatusEnum was originally named MediaPlaybackStatusEnum, but we
+              # generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              - StatusEnum
+              - PlaybackStateEnum
+          MediaInput:
+              - InputTypeEnum
+          KeypadInput:
+              - CecKeyCode
+              # StatusEnum was originally named KeypadInputStatusEnum, but we
+              # generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              - StatusEnum
+          ContentLauncher:
+              - ContentLaunchStatusEnum
+              - MetricTypeEnum
+              - ParameterEnum
+          AudioOutput:
+              - OutputTypeEnum
+          ApplicationLauncher:
+              # StatusEnum was originally named ApplicationLauncherStatusEnum, but we
+              # generate the same API for the names with/without the cluster name at the
+              # beginning, so the name can just change here.
+              - StatusEnum
+          ApplicationBasic:
+              - ApplicationStatusEnum
+          TestCluster:
+              - SimpleEnum
+          FaultInjection:
+              - FaultType
+      enum values:
+          Identify:
+              # EffectIdentifierEnum, EffectVariantEnum, and IdentifyTypeEnum
+              # were originally named IdentifyEffectIdentifier,
+              # IdentifyEffectVariant, and IdentifyIdentifyType, but we generate
+              # the same API for the names with/without "Enum" at the end, and
+              # with/without the cluster name at the beginning, so the name can
+              # just change here.
+              EffectIdentifierEnum:
+                  - Blink
+                  - Breathe
+                  - Okay
+                  - ChannelChange
+                  - FinishEffect
+                  - StopEffect
+              EffectVariantEnum:
+                  - Default
+              IdentifyTypeEnum:
+                  - None
+                  - VisibleLight
+                  - VisibleLED
+                  - AudibleBeep
+                  - Display
+                  - Actuator
+          OnOff:
+              # DelayedOnOffEffectVariantEnum, DyingLightEffectVariantEnum,
+              # EffectIdentifierEnum, and StartUpOnOffEnum were originally named
+              # OnOffDelayedAllOffEffectVariant,
+              # OnOffDelayedAllOffEffectVariant, OnOffEffectIdentifier, and
+              # OnOffStartUpOnOff, but we generate the same API for the names
+              # with/without "Enum" at the end, and with/without the cluster
+              # name at the beginning, so the name can just change here.
+              DelayedAllOffEffectVariantEnum:
+                  - FadeToOffIn0p8Seconds
+                  - NoFade
+                  - 50PercentDimDownIn0p8SecondsThenFadeToOffIn12Seconds
+              DyingLightEffectVariantEnum:
+                  - 20PercenterDimUpIn0p5SecondsThenFadeToOffIn1Second
+              EffectIdentifierEnum:
+                  - DelayedAllOff
+                  - DyingLight
+              StartUpOnOffEnum:
+                  - Off
+                  - On
+                  - TogglePreviousOnOff
+          LevelControl:
+              # MoveModeEnum and StepModeEnum were originally named MoveMode and
+              # StepMode, but we generate the same API for the names
+              # with/without "Enum" at the end, and with/without the cluster
+              # name at the beginning, so the name can just change here.
+              MoveModeEnum:
+                  - Up
+                  - Down
+              StepModeEnum:
+                  - Up
+                  - Down
+          AccessControl:
+              AuthMode:
+                  - PASE
+                  - CASE
+                  - Group
+              ChangeTypeEnum:
+                  - Changed
+                  - Added
+                  - Removed
+              Privilege:
+                  - View
+                  - ProxyView
+                  - Operate
+                  - Manage
+                  - Administer
+          Actions:
+              ActionErrorEnum:
+                  - Unknown
+                  - Interrupted
+              ActionStateEnum:
+                  - Inactive
+                  - Active
+                  - Paused
+                  - Disabled
+              ActionTypeEnum:
+                  - Other
+                  - Scene
+                  - Sequence
+                  - Automation
+                  - Exception
+                  - Notification
+                  - Alarm
+              EndpointListTypeEnum:
+                  - Other
+                  - Room
+                  - Zone
+          OtaSoftwareUpdateProvider:
+              OTAApplyUpdateAction:
+                  - Proceed
+                  - AwaitNextAction
+                  - Discontinue
+              OTADownloadProtocol:
+                  - BDXSynchronous
+                  - BDXAsynchronous
+                  - HTTPS
+                  - VendorSpecific
+              OTAQueryStatus:
+                  - UpdateAvailable
+                  - Busy
+                  - NotAvailable
+                  - DownloadProtocolNotSupported
+          OtaSoftwareUpdateRequestor:
+              OTAAnnouncementReason:
+                  - SimpleAnnouncement
+                  - UpdateAvailable
+                  - UrgentUpdateAvailable
+              OTAChangeReasonEnum:
+                  - Unknown
+                  - Success
+                  - Failure
+                  - TimeOut
+                  - DelayByProvider
+              OTAUpdateStateEnum:
+                  - Unknown
+                  - Idle
+                  - Querying
+                  - DelayedOnQuery
+                  - Downloading
+                  - Applying
+                  - DelayedOnApply
+                  - RollingBack
+                  - DelayedOnUserConsent
+          TimeFormatLocalization:
+              # CalendarTypeEnum and HourFormatEnum were originally just named
+              # CalendarType and HourFormat, but we generate the same API for
+              # the names with/without "Enum" at the end, so the name can just
+              # change here.
+              CalendarTypeEnum:
+                  - Buddhist
+                  - Chinese
+                  - Coptic
+                  - Ethiopian
+                  - Gregorian
+                  - Hebrew
+                  - Indian
+                  - Islamic
+                  - Japanese
+                  - Korean
+                  - Persian
+                  - Taiwanese
+              HourFormatEnum:
+                  - 12hr
+                  - 24hr
+          UnitLocalization:
+              # TempUnitEnum was originally just named TempUnit, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              TempUnitEnum:
+                  - Fahrenheit
+                  - Celsius
+                  - Kelvin
+          PowerSource:
+              # All the PowerSource enums originally did not have the "Enum"
+              # suffix, but we generate the same API whether that suffix is
+              # there or not, so the names can just change here.
+              BatChargeFaultEnum:
+                  - Unspecfied
+                  - AmbientTooHot
+                  - AmbientTooCold
+                  - BatteryTooHot
+                  - BatteryTooCold
+                  - BatteryAbsent
+                  - BatteryOverVoltage
+                  - BatteryUnderVoltage
+                  - ChargerOverVoltage
+                  - ChargerUnderVoltage
+                  - SafetyTimeout
+              BatChargeLevelEnum:
+                  - Ok
+                  - Warning
+                  - Critical
+              BatChargeStateEnum:
+                  - Unknown
+                  - IsCharging
+                  - IsAtFullCharge
+                  - IsNotCharging
+              BatFaultEnum:
+                  - Unspecfied
+                  - OverTemp
+                  - UnderTemp
+              BatReplaceabilityEnum:
+                  - Unspecified
+                  - NotReplaceable
+                  - UserReplaceable
+                  - FactoryReplaceable
+              PowerSourceStatusEnum:
+                  - Unspecfied
+                  - Active
+                  - Standby
+                  - Unavailable
+              WiredCurrentTypeEnum:
+                  - AC
+                  - DC
+              WiredFaultEnum:
+                  - Unspecfied
+                  - OverVoltage
+                  - UnderVoltage
+          GeneralCommissioning:
+              # CommissioningErrorEnum was originally just named
+              # CommissioningError, but we generate the same API
+              # for both of those names, so the name can just change
+              # here.
+              CommissioningErrorEnum:
+                  - Ok
+                  - ValueOutsideRange
+                  - InvalidAuthentication
+                  - NoFailSafe
+                  - BusyWithOtherAdmin
+              # RegulatoryLocationTypeEnum was originally just named
+              # RegulatoryLocationType, but we generate the same API
+              # for both of those names, so the name can just change
+              # here.
+              RegulatoryLocationTypeEnum:
+                  - Indoor
+                  - Outdoor
+                  - IndoorOutdoor
+          NetworkCommissioning:
+              # NetworkCommissioningStatusEnum and WiFiBandEnum were originally
+              # just named NetworkCommissioningStatus and WiFiBand, but we
+              # generate the same API for both of those names, so the name can
+              # just change here.
+              NetworkCommissioningStatusEnum:
+                  - Success
+                  - OutOfRange
+                  - BoundsExceeded
+                  - NetworkIDNotFound
+                  - DuplicateNetworkID
+                  - NetworkNotFound
+                  - RegulatoryError
+                  - AuthFailure
+                  - UnsupportedSecurity
+                  - OtherConnectionFailure
+                  - IPV6Failed
+                  - IPBindFailed
+                  - UnknownError
+              WiFiBandEnum:
+                  - 2G4
+                  - 3G65
+                  - 5G
+                  - 6G
+                  - 60G
+          DiagnosticLogs:
+              LogsIntent:
+                  - EndUserSupport
+                  - NetworkDiag
+                  - CrashLogs
+              LogsStatus:
+                  - Success
+                  - Exhausted
+                  - NoLogs
+                  - Busy
+                  - Denied
+              LogsTransferProtocol:
+                  - ResponsePayload
+                  - BDX
+          GeneralDiagnostics:
+              BootReasonType:
+                  - Unspecified
+                  - PowerOnReboot
+                  - BrownOutReset
+                  - SoftwareWatchdogReset
+                  - HardwareWatchdogReset
+                  - SoftwareUpdateCompleted
+                  - SoftwareReset
+              HardwareFaultType:
+                  - Unspecified
+                  - Radio
+                  - Sensor
+                  - ResettableOverTemp
+                  - NonResettableOverTemp
+                  - PowerSource
+                  - VisualDisplayFault
+                  - AudioOutputFault
+                  - UserInterfaceFault
+                  - NonVolatileMemoryError
+                  - TamperDetected
+              # InterfaceTypeEnum was originally just named InterfaceType, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              InterfaceTypeEnum:
+                  - Unspecified
+                  - WiFi
+                  - Ethernet
+                  - Cellular
+                  - Thread
+              NetworkFaultType:
+                  - Unspecified
+                  - HardwareFailure
+                  - NetworkJammed
+                  - ConnectionFailed
+              RadioFaultType:
+                  - Unspecified
+                  - WiFiFault
+                  - CellularFault
+                  - ThreadFault
+                  - NFCFault
+                  - BLEFault
+                  - EthernetFault
+          ThreadNetworkDiagnostics:
+              # NetworkFaultEnum and RoutingRoleEnum were originally just named
+              # NetworkFault and RoutingRole, but we generate the same API for
+              # both of those names, so the name can just change here.
+              NetworkFaultEnum:
+                  - Unspecified
+                  - LinkDown
+                  - HardwareFailure
+                  - NetworkJammed
+              RoutingRoleEnum:
+                  - Unspecified
+                  - Unassigned
+                  - SleepyEndDevice
+                  - EndDevice
+                  - REED
+                  - Router
+                  - Leader
+              ThreadConnectionStatus:
+                  - Connected
+                  - NotConnected
+          WiFiNetworkDiagnostics:
+              # AssociationFailureCauseEnum was originally just named
+              # AssociationFailureCause, but we generate the same API for both
+              # of those names, so the name can just change here.
+              AssociationFailureCauseEnum:
+                  - Unknown
+                  - AssociationFailed
+                  - AuthenticationFailed
+                  - SsidNotFound
+              # SecurityTypeEnum was originally just named SecurityType, but we
+              # generate the same API for both of those names, so the name can
+              # just change here.
+              SecurityTypeEnum:
+                  - Unspecified
+                  - None
+                  - WEP
+                  - WPA
+                  - WPA2
+                  - WPA3
+              WiFiConnectionStatus:
+                  - Connected
+                  - NotConnected
+              WiFiVersionType:
+                  - 80211a
+                  - 80211b
+                  - 80211g
+                  - 80211n
+                  - 80211ac
+                  - 80211ax
+          EthernetNetworkDiagnostics:
+              PHYRateType:
+                  - 10M
+                  - 100M
+                  - 1000M
+                  - 25G
+                  - 5G
+                  - 10G
+                  - 40G
+                  - 100G
+                  - 200G
+                  - 400G
+          TimeSynchronization:
+              GranularityEnum:
+                  - NoTimeGranularity
+                  - MinutesGranularity
+                  - SecondsGranularity
+                  - MillisecondsGranularity
+                  - MicrosecondsGranularity
+              TimeSourceEnum:
+                  - None
+                  - Unknown
+                  - Admin
+                  - NodeTimeCluster
+                  - NonFabricSntp
+                  - NonFabricNtp
+                  - FabricSntp
+                  - FabricNtp
+                  - MixedNtp
+                  - NonFabricSntpNts
+                  - NonFabricNtpNts
+                  - FabricSntpNts
+                  - FabricNtpNts
+                  - MixedNtpNts
+                  - CloudSource
+                  - Ptp
+                  - Gnss
+          AdministratorCommissioning:
+              # CommissioningWindowStatusEnum was originally just named
+              # CommissioningWindowStatus, but we generate the same API for both
+              # of those names, so the name can just change here.
+              CommissioningWindowStatusEnum:
+                  - WindowNotOpen
+                  - EnhancedWindowOpen
+                  - BasicWindowOpen
+              StatusCode:
+                  - Busy
+                  - PAKEParameterError
+                  - WindowNotOpen
+          OperationalCredentials:
+              OperationalCertStatus:
+                  - SUCCESS
+                  - InvalidPublicKey
+                  - InvalidNodeOpId
+                  - InvalidNOC
+                  - MissingCsr
+                  - TableFull
+                  - InvalidAdminSubject
+                  - FabricConflict
+                  - LabelConflict
+                  - InvalidFabricIndex
+          GroupKeyManagement:
+              # GroupKeySecurityPolicyEnum was originally just named
+              # GroupKeySecurityPolicy, but we generate the same API for both of
+              # those names, so the name can just change here.
+              GroupKeySecurityPolicyEnum:
+                  - TrustFirst
+                  - CacheAndSync
+          DoorLock:
+              DlAlarmCode:
+                  - LockJammed
+                  - LockFactoryReset
+                  - LockRadioPowerCycled
+                  - WrongCodeEntryLimit
+                  - FrontEsceutcheonRemoved
+                  - DoorForcedOpen
+                  - DoorAjar
+                  - ForcedUser
+              DlCredentialRule:
+                  - Single
+                  - Double
+                  - Tri
+              DlCredentialType:
+                  - ProgrammingPIN
+                  - PIN
+                  - RFID
+                  - Fingerprint
+                  - FingerVein
+                  - Face
+              DlDataOperationType:
+                  - Add
+                  - Clear
+                  - Modify
+              DlDoorState:
+                  - DoorOpen
+                  - DoorClosed
+                  - DoorJammed
+                  - DoorForcedOpen
+                  - DoorUnspecifiedError
+                  - DoorAjar
+              DlLockDataType:
+                  - Unspecified
+                  - ProgrammingCode
+                  - UserIndex
+                  - WeekDaySchedule
+                  - YearDaySchedule
+                  - HolidaySchedule
+                  - PIN
+                  - RFID
+                  - Fingerprint
+              DlLockOperationType:
+                  - Lock
+                  - Unlock
+                  - NonAccessUserEvent
+                  - ForcedUserEvent
+              DlLockState:
+                  - NotFullyLocked
+                  - Locked
+                  - Unlocked
+              DlLockType:
+                  - DeadBolt
+                  - Magnetic
+                  - Other
+                  - Mortise
+                  - Rim
+                  - LatchBolt
+                  - CylindricalLock
+                  - TubularLock
+                  - InterconnectedLock
+                  - DeadLatch
+                  - DoorFurniture
+              DlOperatingMode:
+                  - Normal
+                  - Vacation
+                  - Privacy
+                  - NoRemoteLockUnlock
+                  - Passage
+              DlOperationError:
+                  - Unspecified
+                  - InvalidCredential
+                  - DisabledUserDenied
+                  - Restricted
+                  - InsufficientBattery
+              DlOperationSource:
+                  - Unspecified
+                  - Manual
+                  - ProprietaryRemote
+                  - Keypad
+                  - Auto
+                  - Button
+                  - Schedule
+                  - Remote
+                  - RFID
+                  - Biometric
+              DlStatus:
+                  - Success
+                  - Failure
+                  - Duplicate
+                  - Occupied
+                  - InvalidField
+                  - ResourceExhausted
+                  - NotFound
+              DlUserStatus:
+                  - Available
+                  - OccupiedEnabled
+                  - OccupiedDisabled
+              DlUserType:
+                  - UnrestrictedUser
+                  - YearDayScheduleUser
+                  - WeekDayScheduleUser
+                  - ProgrammingUser
+                  - NonAccessUser
+                  - ForcedUser
+                  - DisposableUser
+                  - ExpiringUser
+                  - ScheduleRestrictedUser
+                  - RemoteOnlyUser
+              DoorLockOperationEventCode:
+                  - UnknownOrMfgSpecific
+                  - Lock
+                  - Unlock
+                  - LockInvalidPinOrId
+                  - LockInvalidSchedule
+                  - UnlockInvalidPinOrId
+                  - UnlockInvalidSchedule
+                  - OneTouchLock
+                  - KeyLock
+                  - KeyUnlock
+                  - AutoLock
+                  - ScheduleLock
+                  - ScheduleUnlock
+                  - ManualLock
+                  - ManualUnlock
+              DoorLockProgrammingEventCode:
+                  - UnknownOrMfgSpecific
+                  - MasterCodeChanged
+                  - PinAdded
+                  - PinDeleted
+                  - PinChanged
+                  - IdAdded
+                  - IdDeleted
+              DoorLockSetPinOrIdStatus:
+                  - Success
+                  - GeneralFailure
+                  - MemoryFull
+                  - DuplicateCodeError
+              DoorLockUserStatus:
+                  - Available
+                  - OccupiedEnabled
+                  - OccupiedDisabled
+                  - NotSupported
+              DoorLockUserType:
+                  - Unrestricted
+                  - YearDayScheduleUser
+                  - WeekDayScheduleUser
+                  - MasterUser
+                  - NonAccessUser
+                  - NotSupported
+              # UserTypeEnum and UserStatusEnum use the same generated name as
+              # DoorLockUserStatus and DoorLockUserType, so need to be
+              # considered as introduced at the same time, with the enum value
+              # names that match DoorLockUserStatus and DoorLockUserType.
+              UserStatusEnum:
+                  - Available
+                  - OccupiedEnabled
+                  - OccupiedDisabled
+                  - NotSupported
+              UserTypeEnum:
+                  - Unrestricted
+                  - YearDayScheduleUser
+                  - WeekDayScheduleUser
+                  - MasterUser
+                  - NonAccessUser
+                  - NotSupported
+          WindowCovering:
+              EndProductType:
+                  - RollerShade
+                  - RomanShade
+                  - BalloonShade
+                  - WovenWood
+                  - PleatedShade
+                  - CellularShade
+                  - LayeredShade
+                  - LayeredShade2D
+                  - SheerShade
+                  - TiltOnlyInteriorBlind
+                  - InteriorBlind
+                  - VerticalBlindStripCurtain
+                  - InteriorVenetianBlind
+                  - ExteriorVenetianBlind
+                  - LateralLeftCurtain
+                  - LateralRightCurtain
+                  - CentralCurtain
+                  - RollerShutter
+                  - ExteriorVerticalScreen
+                  - AwningTerracePatio
+                  - AwningVerticalScreen
+                  - TiltOnlyPergola
+                  - SwingingShutter
+                  - SlidingShutter
+                  - Unknown
+              Type:
+                  - RollerShade
+                  - RollerShade2Motor
+                  - RollerShadeExterior
+                  - RollerShadeExterior2Motor
+                  - Drapery
+                  - Awning
+                  - Shutter
+                  - TiltBlindTiltOnly
+                  - TiltBlindLiftAndTilt
+                  - ProjectorScreen
+                  - Unknown
+          PumpConfigurationAndControl:
+              PumpControlMode:
+                  - ConstantSpeed
+                  - ConstantPressure
+                  - ProportionalPressure
+                  - ConstantFlow
+                  - ConstantTemperature
+                  - Automatic
+              PumpOperationMode:
+                  - Normal
+                  - Minimum
+                  - Maximum
+                  - Local
+          Thermostat:
+              SetpointAdjustMode:
+                  - HeatSetpoint
+                  - CoolSetpoint
+                  - HeatAndCoolSetpoints
+              ThermostatControlSequence:
+                  - CoolingOnly
+                  - CoolingWithReheat
+                  - HeatingOnly
+                  - HeatingWithReheat
+                  - CoolingAndHeating
+                  - CoolingAndHeatingWithReheat
+              # ThermostatRunningModeEnum was originally named
+              # ThermostatRunningMode, but we generate the same API for the
+              # names with/without "Enum" at the end, so the name can just
+              # change here.
+              ThermostatRunningModeEnum:
+                  - Off
+                  - Cool
+                  - Heat
+              # SystemModeEnum was originally named ThermostatSystemMode, but we
+              # generate the same API for the names with/without "Enum" at the
+              # end and the cluster name present/absent at the beginning, so the
+              # name can just change here.
+              SystemModeEnum:
+                  - Off
+                  - Auto
+                  - Cool
+                  - Heat
+                  - EmergencyHeating
+                  - Precooling
+                  - FanOnly
+          FanControl:
+              FanModeSequenceType:
+                  - OffLowMedHigh
+                  - OffLowHigh
+                  - OffLowMedHighAuto
+                  - OffLowHighAuto
+                  - OffOnAuto
+                  - OffOn
+              FanModeType:
+                  - Off
+                  - Low
+                  - Medium
+                  - High
+                  - On
+                  - Auto
+                  - Smart
+          ColorControl:
+              ColorLoopAction:
+                  - Deactivate
+                  - ActivateFromColorLoopStartEnhancedHue
+                  - ActivateFromEnhancedCurrentHue
+              ColorLoopDirection:
+                  - DecrementHue
+                  - IncrementHue
+              ColorMode:
+                  - CurrentHueAndCurrentSaturation
+                  - CurrentXAndCurrentY
+                  - ColorTemperature
+              HueDirection:
+                  - ShortestDistance
+                  - LongestDistance
+                  - Up
+                  - Down
+              HueMoveMode:
+                  - Stop
+                  - Up
+                  - Down
+              HueStepMode:
+                  - Up
+                  - Down
+              SaturationMoveMode:
+                  - Stop
+                  - Up
+                  - Down
+              SaturationStepMode:
+                  - Up
+                  - Down
+          IlluminanceMeasurement:
+              LightSensorTypeEnum:
+                  - Photodiode
+                  - CMOS
+          Channel:
+              # StatusEnum was originally named ChannelStatusEnum, but we
+              # generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              StatusEnum:
+                  - Success
+                  - MultipleMatches
+                  - NoMatches
+              LineupInfoTypeEnum:
+                  - Mso
+          TargetNavigator:
+              # StatusEnum was originally named TargetNavigatorStatusEnum, but
+              # we generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              StatusEnum:
+                  - Success
+                  - TargetNotFound
+                  - NotAllowed
+          MediaPlayback:
+              # StatusEnum was originally named MediaPlaybackStatusEnum, but we
+              # generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              StatusEnum:
+                  - Success
+                  - InvalidStateForCommand
+                  - NotAllowed
+                  - NotActive
+                  - SpeedOutOfRange
+                  - SeekOutOfRange
+              PlaybackStateEnum:
+                  - Playing
+                  - Paused
+                  - NotPlaying
+                  - Buffering
+          MediaInput:
+              InputTypeEnum:
+                  - Internal
+                  - Aux
+                  - Coax
+                  - Composite
+                  - Hdmi
+                  - Input
+                  - Line
+                  - Optical
+                  - Video
+                  - Scart
+                  - Usb
+                  - Other
+          KeypadInput:
+              CecKeyCode:
+                  - Select
+                  - Up
+                  - Down
+                  - Left
+                  - Right
+                  - RightUp
+                  - RightDown
+                  - LeftUp
+                  - LeftDown
+                  - RootMenu
+                  - SetupMenu
+                  - ContentsMenu
+                  - FavoriteMenu
+                  - Exit
+                  - MediaTopMenu
+                  - MediaContextSensitiveMenu
+                  - NumberEntryMode
+                  - Number11
+                  - Number12
+                  - Number0OrNumber10
+                  - Numbers1
+                  - Numbers2
+                  - Numbers3
+                  - Numbers4
+                  - Numbers5
+                  - Numbers6
+                  - Numbers7
+                  - Numbers8
+                  - Numbers9
+                  - Dot
+                  - Enter
+                  - Clear
+                  - NextFavorite
+                  - ChannelUp
+                  - ChannelDown
+                  - PreviousChannel
+                  - SoundSelect
+                  - InputSelect
+                  - DisplayInformation
+                  - Help
+                  - PageUp
+                  - PageDown
+                  - Power
+                  - VolumeUp
+                  - VolumeDown
+                  - Mute
+                  - Play
+                  - Stop
+                  - Pause
+                  - Record
+                  - Rewind
+                  - FastForward
+                  - Eject
+                  - Forward
+                  - Backward
+                  - StopRecord
+                  - PauseRecord
+                  - Reserved
+                  - Angle
+                  - SubPicture
+                  - VideoOnDemand
+                  - ElectronicProgramGuide
+                  - TimerProgramming
+                  - InitialConfiguration
+                  - SelectBroadcastType
+                  - SelectSoundPresentation
+                  - PlayFunction
+                  - PausePlayFunction
+                  - RecordFunction
+                  - PauseRecordFunction
+                  - StopFunction
+                  - MuteFunction
+                  - RestoreVolumeFunction
+                  - TuneFunction
+                  - SelectMediaFunction
+                  - SelectAvInputFunction
+                  - SelectAudioInputFunction
+                  - PowerToggleFunction
+                  - PowerOffFunction
+                  - PowerOnFunction
+                  - F1Blue
+                  - F2Red
+                  - F3Green
+                  - F4Yellow
+                  - F5
+                  - Data
+              # StatusEnum was originally named KeypadInputStatusEnum, but we
+              # generate the same API for the names with/without the cluster
+              # name at the beginning, so the name can just change here.
+              StatusEnum:
+                  - Success
+                  - UnsupportedKey
+                  - InvalidKeyInCurrentState
+          ContentLauncher:
+              ContentLaunchStatusEnum:
+                  - Success
+                  - UrlNotAvailable
+                  - AuthFailed
+              MetricTypeEnum:
+                  - PIXELS
+                  - PERCENTAGE
+              ParameterEnum:
+                  - Actor
+                  - Channel
+                  - Character
+                  - Director
+                  - Event
+                  - Franchise
+                  - Genre
+                  - League
+                  - Popularity
+                  - Provider
+                  - Sport
+                  - SportsTeam
+                  - Type
+          AudioOutput:
+              OutputTypeEnum:
+                  - Hdmi
+                  - Bt
+                  - Optical
+                  - Headphone
+                  - Internal
+                  - Other
+          ApplicationLauncher:
+              # StatusEnum was originally named ApplicationLauncherStatusEnum, but we
+              # generate the same API for the names with/without the cluster name at the
+              # beginning, so the name can just change here.
+              StatusEnum:
+                  - Success
+                  - AppNotAvailable
+                  - SystemBusy
+          ApplicationBasic:
+              ApplicationStatusEnum:
+                  - Stopped
+                  - ActiveVisibleFocus
+                  - ActiveHidden
+                  - ActiveVisibleNotFocus
+          TestCluster:
+              SimpleEnum:
+                  - Unspecified
+                  - ValueA
+                  - ValueB
+                  - ValueC
+      bitmaps:
+          Groups:
+              - GroupClusterFeature
+          Scenes:
+              - ScenesCopyMode
+          OnOff:
+              - OnOffControl
+              # Feature was originally named OnOffFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          LevelControl:
+              # Feature was originally named LevelControlFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          Actions:
+              - CommandBits
+          UnitLocalization:
+              # Feature was originally named UnitLocalizationFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          PowerSource:
+              # Feature was originally named PowerSourceFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          NetworkCommissioning:
+              # Feature was originally named NetworkCommissioningFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+              - WiFiSecurity
+          SoftwareDiagnostics:
+              # Feature was originally named SoftwareDiagnosticsFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          ThreadNetworkDiagnostics:
+              # Feature was originally named ThreadNetworkDiagnosticsFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          ModeSelect:
+              # Feature was originally named ModeSelectFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          DoorLock:
+              - DlCredentialRuleMask
+              - DlCredentialRulesSupport
+              - DlDaysMaskMap
+              - DlDefaultConfigurationRegister
+              - DlKeypadOperationEventMask
+              - DlKeypadProgrammingEventMask
+              - DlLocalProgrammingFeatures
+              - DlManualOperationEventMask
+              - DlRFIDOperationEventMask
+              - DlRFIDProgrammingEventMask
+              - DlRemoteOperationEventMask
+              - DlRemoteProgrammingEventMask
+              - DlSupportedOperatingModes
+              - DoorLockDayOfWeek
+              # Feature was originally named DoorLockFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          WindowCovering:
+              - ConfigStatus
+              - Feature
+              - Mode
+              - OperationalStatus
+              - SafetyStatus
+          PumpConfigurationAndControl:
+              - PumpStatus
+          Thermostat:
+              - DayOfWeek
+              - ModeForSequence
+              # Feature was originally named ThermostatFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          FanControl:
+              # Feature was originally named FanControlFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              - Feature
+              - RockSupportMask
+              - WindSettingMask
+              - WindSupportMask
+          ColorControl:
+              - ColorCapabilities
+              # Feature was originally named ColorControlFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+              - ColorLoopUpdateFlags
+          PressureMeasurement:
+              - PressureFeature
+          Channel:
+              # Feature was originally named ChannelFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          MediaInput:
+              # Feature was originally named MediaInputFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          KeypadInput:
+              # Feature was originally named KeypadInputFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          ContentLauncher:
+              # Feature was originally named ContentLauncherFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+              - SupportedStreamingProtocol
+          AudioOutput:
+              # Feature was originally named AudioOutputFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              - Feature
+          ApplicationLauncher:
+              # Feature was originally named ApplicationLauncherFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              - Feature
+          TestCluster:
+              - Bitmap16MaskMap
+              - Bitmap32MaskMap
+              - Bitmap64MaskMap
+              - Bitmap8MaskMap
+              - SimpleBitmap
+      bitmap values:
+          Groups:
+              GroupClusterFeature:
+                  - GroupNames
+          Scenes:
+              ScenesCopyMode:
+                  - CopyAllScenes
+          OnOff:
+              OnOffControl:
+                  - AcceptOnlyWhenOn
+              # Feature was originally named OnOffFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - Lighting
+          LevelControl:
+              # Feature was originally named LevelControlFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - OnOff
+                  - Lighting
+                  - Frequency
+          Actions:
+              CommandBits:
+                  - InstantAction
+                  - InstantActionWithTransition
+                  - StartAction
+                  - StartActionWithDuration
+                  - StopAction
+                  - PauseAction
+                  - PauseActionWithDuration
+                  - ResumeAction
+                  - EnableAction
+                  - EnableActionWithDuration
+                  - DisableAction
+                  - DisableActionWithDuration
+          UnitLocalization:
+              # Feature was originally named UnitLocalizationFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - TemperatureUnit
+          PowerSource:
+              # Feature was originally named PowerSourceFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - Wired
+                  - Battery
+                  - Rechargeable
+                  - Replaceable
+          NetworkCommissioning:
+              # Feature was originally named NetworkCommissioningFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - WiFiNetworkInterface
+                  - ThreadNetworkInterface
+                  - EthernetNetworkInterface
+              WiFiSecurity:
+                  - Unencrypted
+                  - WepPersonal
+                  - WpaPersonal
+                  - Wpa2Personal
+                  - Wpa3Personal
+          SoftwareDiagnostics:
+              # Feature was originally named SoftwareDiagnosticsFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - WaterMarks
+          ThreadNetworkDiagnostics:
+              # Feature was originally named ThreadNetworkDiagnosticsFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - PacketCounts
+                  - ErrorCounts
+                  - MLECounts
+                  - MACCounts
+          ModeSelect:
+              # Feature was originally named ModeSelectFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - DEPONOFF
+          DoorLock:
+              DlCredentialRuleMask:
+                  - Single
+                  - Dual
+                  - Tri
+              DlCredentialRulesSupport:
+                  - Single
+                  - Dual
+                  - Tri
+              DlDaysMaskMap:
+                  - Sunday
+                  - Monday
+                  - Tuesday
+                  - Wednesday
+                  - Thursday
+                  - Friday
+                  - Saturday
+              DlDefaultConfigurationRegister:
+                  - EnableLocalProgrammingEnabled
+                  - KeypadInterfaceDefaultAccessEnabled
+                  - RemoteInterfaceDefaultAccessIsEnabled
+                  - SoundEnabled
+                  - AutoRelockTimeSet
+                  - LEDSettingsSet
+              DlKeypadOperationEventMask:
+                  - Unknown
+                  - Lock
+                  - Unlock
+                  - LockInvalidPIN
+                  - LockInvalidSchedule
+                  - UnlockInvalidCode
+                  - UnlockInvalidSchedule
+                  - NonAccessUserOpEvent
+              DlKeypadProgrammingEventMask:
+                  - Unknown
+                  - ProgrammingPINChanged
+                  - PINAdded
+                  - PINCleared
+                  - PINChanged
+              DlLocalProgrammingFeatures:
+                  - AddUsersCredentialsSchedulesLocally
+                  - ModifyUsersCredentialsSchedulesLocally
+                  - ClearUsersCredentialsSchedulesLocally
+                  - AdjustLockSettingsLocally
+              DlManualOperationEventMask:
+                  - Unknown
+                  - ThumbturnLock
+                  - ThumbturnUnlock
+                  - OneTouchLock
+                  - KeyLock
+                  - KeyUnlock
+                  - AutoLock
+                  - ScheduleLock
+                  - ScheduleUnlock
+                  - ManualLock
+                  - ManualUnlock
+              DlRFIDOperationEventMask:
+                  - Unknown
+                  - Lock
+                  - Unlock
+                  - LockInvalidRFID
+                  - LockInvalidSchedule
+                  - UnlockInvalidRFID
+                  - UnlockInvalidSchedule
+              DlRFIDProgrammingEventMask:
+                  - Unknown
+                  - RFIDCodeAdded
+                  - RFIDCodeCleared
+              DlRemoteOperationEventMask:
+                  - Unknown
+                  - Lock
+                  - Unlock
+                  - LockInvalidCode
+                  - LockInvalidSchedule
+                  - UnlockInvalidCode
+                  - UnlockInvalidSchedule
+              DlRemoteProgrammingEventMask:
+                  - Unknown
+                  - ProgrammingPINChanged
+                  - PINAdded
+                  - PINCleared
+                  - PINChanged
+                  - RFIDCodeAdded
+                  - RFIDCodeCleared
+              DlSupportedOperatingModes:
+                  - Normal
+                  - Vacation
+                  - Privacy
+                  - NoRemoteLockUnlock
+                  - Passage
+              DoorLockDayOfWeek:
+                  - Sunday
+                  - Monday
+                  - Tuesday
+                  - Wednesday
+                  - Thursday
+                  - Friday
+                  - Saturday
+              # Feature was originally named DoorLockFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - PINCredentials
+                  - RFIDCredentials
+                  - FingerCredentials
+                  - Logging
+                  - WeekDaySchedules
+                  - DoorPositionSensor
+                  - FaceCredentials
+                  - CredentialsOTA
+                  - UsersManagement
+                  - Notifications
+                  - YearDaySchedules
+                  - HolidaySchedules
+          WindowCovering:
+              ConfigStatus:
+                  - Operational
+                  - OnlineReserved
+                  - LiftMovementReversed
+                  - LiftPositionAware
+                  - TiltPositionAware
+                  - LiftEncoderControlled
+                  - TiltEncoderControlled
+              Feature:
+                  - Lift
+                  - Tilt
+                  - PositionAwareLift
+                  - AbsolutePosition
+                  - PositionAwareTilt
+              Mode:
+                  - MotorDirectionReversed
+                  - CalibrationMode
+                  - MaintenanceMode
+                  - LedFeedback
+              OperationalStatus:
+                  - Global
+                  - Lift
+                  - Tilt
+              SafetyStatus:
+                  - RemoteLockout
+                  - TamperDetection
+                  - FailedCommunication
+                  - PositionFailure
+                  - ThermalProtection
+                  - ObstacleDetected
+                  - Power
+                  - StopInput
+                  - MotorJammed
+                  - HardwareFailure
+                  - ManualOperation
+                  - Protection
+          PumpConfigurationAndControl:
+              PumpStatus:
+                  - DeviceFault
+                  - Supplyfault
+                  - SpeedLow
+                  - SpeedHigh
+                  - LocalOverride
+                  - Running
+                  - RemotePressure
+                  - RemoteFlow
+                  - RemoteTemperature
+          Thermostat:
+              DayOfWeek:
+                  - Sunday
+                  - Monday
+                  - Tuesday
+                  - Wednesday
+                  - Thursday
+                  - Friday
+                  - Saturday
+                  - AwayOrVacation
+              ModeForSequence:
+                  - HeatSetpointFieldPresent
+                  - CoolSetpointFieldPresent
+              # Feature was originally named ThermostatFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - Heating
+                  - Cooling
+                  - Occupancy
+                  - Schedule
+                  - Setback
+                  - Automode
+          FanControl:
+              # Feature was originally named FanControlFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              Feature:
+                  - MultiSpeed
+                  - Auto
+                  - Rocking
+                  - Wind
+              RockSupportMask:
+                  - RockLeftRight
+                  - RockUpDown
+                  - RockRound
+              WindSettingMask:
+                  - SleepWind
+                  - NaturalWind
+              WindSupportMask:
+                  - SleepWind
+                  - NaturalWind
+          ColorControl:
+              ColorCapabilities:
+                  - HueSaturationSupported
+                  - EnhancedHueSupported
+                  - ColorLoopSupported
+                  - XYAttributesSupported
+                  - ColorTemperatureSupported
+              # Feature was originally named ColorControlFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - HueAndSaturation
+                  - EnhancedHue
+                  - ColorLoop
+                  - XY
+                  - ColorTemperature
+              ColorLoopUpdateFlags:
+                  - UpdateAction
+                  - UpdateDirection
+                  - UpdateTime
+                  - UpdateStartHue
+          PressureMeasurement:
+              PressureFeature:
+                  - EXT
+          Channel:
+              # Feature was originally named ChannelFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - ChannelList
+                  - LineupInfo
+          MediaInput:
+              # Feature was originally named MediaInputFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - NameUpdates
+          KeypadInput:
+              # Feature was originally named KeypadInputFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - NavigationKeyCodes
+                  - LocationKeys
+                  - NumberKeys
+          ContentLauncher:
+              # Feature was originally named ContentLauncherFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - ContentSearch
+                  - URLPlayback
+              SupportedStreamingProtocol:
+                  - DASH
+                  - HLS
+          AudioOutput:
+              # Feature was originally named AudioOutputFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              Feature:
+                  - NameUpdates
+          ApplicationLauncher:
+              # Feature was originally named ApplicationLauncherFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              Feature:
+                  - ApplicationPlatform
+          TestCluster:
+              Bitmap16MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              Bitmap32MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              Bitmap64MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              Bitmap8MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              SimpleBitmap:
+                  - ValueA
+                  - ValueB
+                  - ValueC
+      ids:
+          clusters:
+              - PulseWidthModulation
+              - TimeSynchronization
+          attributes:
+              PulseWidthModulation:
+                  - GeneratedCommandList
+                  - AcceptedCommandList
+                  - AttributeList
+                  - FeatureMap
+                  - ClusterRevision
+              TimeSynchronization:
+                  - GeneratedCommandList
+                  - AcceptedCommandList
+                  - AttributeList
+                  - FeatureMap
+                  - ClusterRevision
+                  - UTCTime
+                  - Granularity
+                  - TimeSource
+                  - TrustedTimeNodeId
+                  - DefaultNtp
+                  - TimeZone
+                  - DstOffset
+                  - LocalTime
+                  - TimeZoneDatabase
+                  - NtpServerPort
+          commands:
+              TimeSynchronization:
+                  - SetUtcTime
+      command payloads:
+          TimeSynchronization:
+              - SetUtcTime
+      global attributes:
+          - FeatureMap
+          - ClusterRevision
+          - AttributeList
+          - GeneratedCommandList
+          - AcceptedCommandList
+      apis:
+          - Timed Invoke for server to client commands
+          - Deprecated global attribute names
+  provisional:
+      clusters:
+          - PulseWidthModulation
+          - TimeSynchronization
+
+- release: "First dot-release"
+  versions:
+      iOS: "16.2"
+      macOS: "13.1"
+      watchOS: "9.2"
+      tvOS: "16.2"
+  introduced:
+      attributes:
+          TestCluster:
+              - WriteOnlyInt8u
+      structs:
+          Descriptor:
+              - DeviceTypeStruct
+      struct fields:
+          Descriptor:
+              DeviceTypeStruct:
+                  - type
+                  - revision
+      bitmaps:
+          Switch:
+              # Feature was originally named SwitchFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+          MediaPlayback:
+              # Feature was originally named MediaPlaybackFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              - Feature
+      bitmap values:
+          Switch:
+              # Feature was originally named SwitchFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - LatchingSwitch
+                  - MomentarySwitch
+                  - MomentarySwitchRelease
+                  - MomentarySwitchLongPress
+                  - MomentarySwitchMultiPress
+          MediaPlayback:
+              # Feature was originally named MediaPlaybackFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - AdvancedSeek
+                  - VariableSpeed
+      ids:
+          attributes:
+              Descriptor:
+                  - DeviceTypeList
+  renames:
+      structs:
+          Descriptor:
+              DeviceTypeStruct: DeviceType
+
+- release: "First major API revamp"
+  versions:
+      iOS: "16.4"
+      macOS: "13.3"
+      watchOS: "9.4"
+      tvOS: "16.4"
+  introduced:
+      clusters:
+          - OTASoftwareUpdateProvider
+          - OTASoftwareUpdateRequestor
+          - UnitTesting
+          - WakeOnLAN
+          - BasicInformation
+          - BridgedDeviceBasicInformation
+      attributes:
+          Descriptor:
+              # We really only started treating DeviceTypeList as DeviceTypeList in the API revamp,
+              # except in the list of attribute ids.
+              - DeviceTypeList
+          AccessControl:
+              - ACL
+          BallastConfiguration:
+              - IntrinsicBallastFactor
+          OccupancySensing:
+              - PIROccupiedToUnoccupiedDelay
+              - PIRUnoccupiedToOccupiedDelay
+              - PIRUnoccupiedToOccupiedThreshold
+          UnitTesting:
+              - Boolean
+              - Bitmap8
+              - Bitmap16
+              - Bitmap32
+              - Bitmap64
+              - Int8u
+              - Int16u
+              - Int24u
+              - Int32u
+              - Int40u
+              - Int48u
+              - Int56u
+              - Int64u
+              - Int8s
+              - Int16s
+              - Int24s
+              - Int32s
+              - Int40s
+              - Int48s
+              - Int56s
+              - Int64s
+              - Enum8
+              - Enum16
+              - FloatSingle
+              - FloatDouble
+              - OctetString
+              - ListInt8u
+              - ListOctetString
+              - ListStructOctetString
+              - LongOctetString
+              - CharString
+              - LongCharString
+              - EpochUs
+              - EpochS
+              - VendorId
+              - ListNullablesAndOptionalsStruct
+              - EnumAttr
+              - StructAttr
+              - RangeRestrictedInt8u
+              - RangeRestrictedInt8s
+              - RangeRestrictedInt16u
+              - RangeRestrictedInt16s
+              - ListLongOctetString
+              - ListFabricScoped
+              - TimedWriteBoolean
+              - GeneralErrorBoolean
+              - ClusterErrorBoolean
+              - Unsupported
+              - NullableBoolean
+              - NullableBitmap8
+              - NullableBitmap16
+              - NullableBitmap32
+              - NullableBitmap64
+              - NullableInt8u
+              - NullableInt16u
+              - NullableInt24u
+              - NullableInt32u
+              - NullableInt40u
+              - NullableInt48u
+              - NullableInt56u
+              - NullableInt64u
+              - NullableInt8s
+              - NullableInt16s
+              - NullableInt24s
+              - NullableInt32s
+              - NullableInt40s
+              - NullableInt48s
+              - NullableInt56s
+              - NullableInt64s
+              - NullableEnum8
+              - NullableEnum16
+              - NullableFloatSingle
+              - NullableFloatDouble
+              - NullableOctetString
+              - NullableCharString
+              - NullableEnumAttr
+              - NullableStruct
+              - NullableRangeRestrictedInt8u
+              - NullableRangeRestrictedInt8s
+              - NullableRangeRestrictedInt16u
+              - NullableRangeRestrictedInt16s
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+              - WriteOnlyInt8u
+          OTASoftwareUpdateProvider:
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OTASoftwareUpdateRequestor:
+              - DefaultOTAProviders
+              - UpdatePossible
+              - UpdateState
+              - UpdateStateProgress
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          WakeOnLAN:
+              - MACAddress
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          BasicInformation:
+              - DataModelRevision
+              - VendorName
+              - VendorID
+              - ProductName
+              - ProductID
+              - NodeLabel
+              - Location
+              - HardwareVersion
+              - HardwareVersionString
+              - SoftwareVersion
+              - SoftwareVersionString
+              - ManufacturingDate
+              - PartNumber
+              - ProductURL
+              - ProductLabel
+              - SerialNumber
+              - LocalConfigDisabled
+              - Reachable
+              - UniqueID
+              - CapabilityMinima
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          ThreadNetworkDiagnostics:
+              - NeighborTable
+              - RouteTable
+          WiFiNetworkDiagnostics:
+              - BSSID
+              - RSSI
+          GeneralDiagnostics:
+              - BootReason
+          BridgedDeviceBasicInformation:
+              - VendorName
+              - VendorID
+              - ProductName
+              - NodeLabel
+              - HardwareVersion
+              - HardwareVersionString
+              - SoftwareVersion
+              - SoftwareVersionString
+              - ManufacturingDate
+              - PartNumber
+              - ProductURL
+              - ProductLabel
+              - SerialNumber
+              - Reachable
+              - UniqueID
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+      commands:
+          OTASoftwareUpdateProvider:
+              - QueryImage
+              - QueryImageResponse
+              - ApplyUpdateRequest
+              - ApplyUpdateResponse
+              - NotifyUpdateApplied
+          OTASoftwareUpdateRequestor:
+              - AnnounceOTAProvider
+          UnitTesting:
+              - Test
+              - TestSpecificResponse
+              - TestNotHandled
+              - TestAddArgumentsResponse
+              - TestSpecific
+              - TestSimpleArgumentResponse
+              - TestUnknownCommand
+              - TestStructArrayArgumentResponse
+              - TestAddArguments
+              - TestListInt8UReverseResponse
+              - TestSimpleArgumentRequest
+              - TestEnumsResponse
+              - TestStructArrayArgumentRequest
+              - TestNullableOptionalResponse
+              - TestStructArgumentRequest
+              - TestComplexNullableOptionalResponse
+              - TestNestedStructArgumentRequest
+              - BooleanResponse
+              - TestListStructArgumentRequest
+              - SimpleStructResponse
+              - TestListInt8UArgumentRequest
+              - TestEmitTestEventResponse
+              - TestNestedStructListArgumentRequest
+              - TestEmitTestFabricScopedEventResponse
+              - TestListNestedStructListArgumentRequest
+              - TestListInt8UReverseRequest
+              - TestEnumsRequest
+              - TestNullableOptionalRequest
+              - TestComplexNullableOptionalRequest
+              - SimpleStructEchoRequest
+              - TimedInvokeRequest
+              - TestSimpleOptionalArgumentRequest
+              - TestEmitTestEventRequest
+              - TestEmitTestFabricScopedEventRequest
+          ContentLauncher:
+              - LauncherResponse
+          MediaPlayback:
+              - Stop
+      command fields:
+          UnitTesting:
+              TestSpecificResponse:
+                  - returnValue
+              TestAddArgumentsResponse:
+                  - returnValue
+              TestSimpleArgumentResponse:
+                  - returnValue
+              TestStructArrayArgumentResponse:
+                  - arg1
+                  - arg2
+                  - arg3
+                  - arg4
+                  - arg5
+                  - arg6
+              TestAddArguments:
+                  - arg1
+                  - arg2
+              TestListInt8UReverseResponse:
+                  - arg1
+              TestSimpleArgumentRequest:
+                  - arg1
+              TestEnumsResponse:
+                  - arg1
+                  - arg2
+              TestStructArrayArgumentRequest:
+                  - arg1
+                  - arg2
+                  - arg3
+                  - arg4
+                  - arg5
+                  - arg6
+              TestNullableOptionalResponse:
+                  - wasPresent
+                  - wasNull
+                  - value
+                  - originalValue
+              TestStructArgumentRequest:
+                  - arg1
+              TestComplexNullableOptionalResponse:
+                  - nullableIntWasNull
+                  - nullableIntValue
+                  - optionalIntWasPresent
+                  - optionalIntValue
+                  - nullableOptionalIntWasPresent
+                  - nullableOptionalIntWasNull
+                  - nullableOptionalIntValue
+                  - nullableStringWasNull
+                  - nullableStringValue
+                  - optionalStringWasPresent
+                  - optionalStringValue
+                  - nullableOptionalStringWasPresent
+                  - nullableOptionalStringWasNull
+                  - nullableOptionalStringValue
+                  - nullableStructWasNull
+                  - nullableStructValue
+                  - optionalStructWasPresent
+                  - optionalStructValue
+                  - nullableOptionalStructWasPresent
+                  - nullableOptionalStructWasNull
+                  - nullableOptionalStructValue
+                  - nullableListWasNull
+                  - nullableListValue
+                  - optionalListWasPresent
+                  - optionalListValue
+                  - nullableOptionalListWasPresent
+                  - nullableOptionalListWasNull
+                  - nullableOptionalListValue
+              TestNestedStructArgumentRequest:
+                  - arg1
+              BooleanResponse:
+                  - value
+              TestListStructArgumentRequest:
+                  - arg1
+              SimpleStructResponse:
+                  - arg1
+              TestListInt8UArgumentRequest:
+                  - arg1
+              TestEmitTestEventResponse:
+                  - value
+              TestNestedStructListArgumentRequest:
+                  - arg1
+              TestEmitTestFabricScopedEventResponse:
+                  - value
+              TestListNestedStructListArgumentRequest:
+                  - arg1
+              TestListInt8UReverseRequest:
+                  - arg1
+              TestEnumsRequest:
+                  - arg1
+                  - arg2
+              TestNullableOptionalRequest:
+                  - arg1
+              TestComplexNullableOptionalRequest:
+                  - nullableInt
+                  - optionalInt
+                  - nullableOptionalInt
+                  - nullableString
+                  - optionalString
+                  - nullableOptionalString
+                  - nullableStruct
+                  - optionalStruct
+                  - nullableOptionalStruct
+                  - nullableList
+                  - optionalList
+                  - nullableOptionalList
+              SimpleStructEchoRequest:
+                  - arg1
+              TestSimpleOptionalArgumentRequest:
+                  - arg1
+              TestEmitTestEventRequest:
+                  - arg1
+                  - arg2
+                  - arg3
+              TestEmitTestFabricScopedEventRequest:
+                  - arg1
+          OTASoftwareUpdateProvider:
+              QueryImage:
+                  - vendorID
+                  - productID
+                  - softwareVersion
+                  - protocolsSupported
+                  - hardwareVersion
+                  - location
+                  - requestorCanConsent
+                  - metadataForProvider
+                  # Next two were introduced and deprecated at the same time, effectively
+                  - vendorId
+                  - productId
+              QueryImageResponse:
+                  - status
+                  - delayedActionTime
+                  - imageURI
+                  - softwareVersion
+                  - softwareVersionString
+                  - updateToken
+                  - userConsentNeeded
+                  - metadataForRequestor
+              ApplyUpdateRequest:
+                  - updateToken
+                  - newVersion
+              ApplyUpdateResponse:
+                  - action
+                  - delayedActionTime
+              NotifyUpdateApplied:
+                  - updateToken
+                  - softwareVersion
+          OTASoftwareUpdateRequestor:
+              AnnounceOTAProvider:
+                  - providerNodeID
+                  - vendorID
+                  - announcementReason
+                  - metadataForNode
+                  - endpoint
+                  # Next two were introduced and deprecated at the same time, effectively
+                  - providerNodeId
+                  - vendorId
+          Groups:
+              AddGroup:
+                  - groupID
+              AddGroupIfIdentifying:
+                  - groupID
+              AddGroupResponse:
+                  - groupID
+              RemoveGroup:
+                  - groupID
+              RemoveGroupResponse:
+                  - groupID
+              ViewGroup:
+                  - groupID
+              ViewGroupResponse:
+                  - groupID
+          OnOff:
+              OffWithEffect:
+                  - effectIdentifier
+          DiagnosticLogs:
+              RetrieveLogsResponse:
+                  - logContent
+                  - utcTimeStamp
+          AdministratorCommissioning:
+              OpenCommissioningWindow:
+                  - pakePasscodeVerifier
+          OperationalCredentials:
+              AttestationResponse:
+                  - attestationSignature
+              AddTrustedRootCertificate:
+                  - rootCACertificate
+          DoorLock:
+              SetUser:
+                  - userUniqueID
+              GetUserResponse:
+                  - userUniqueID
+          ColorControl:
+              MoveToColorTemperature:
+                  - colorTemperatureMireds
+          ContentLauncher:
+              LauncherResponse:
+                  - status
+                  - data
+          Scenes:
+              AddScene:
+                  - groupID
+                  - sceneID
+              ViewScene:
+                  - groupID
+                  - sceneID
+              RemoveScene:
+                  - groupID
+                  - sceneID
+              RemoveAllScenes:
+                  - groupID
+              StoreScene:
+                  - groupID
+                  - sceneID
+              RecallScene:
+                  - groupID
+                  - sceneID
+              GetSceneMembership:
+                  - groupID
+              EnhancedAddScene:
+                  - groupID
+                  - sceneID
+              EnhancedViewScene:
+                  - groupID
+                  - sceneID
+              CopyScene:
+                  - groupIdentifierFrom
+                  - sceneIdentifierFrom
+                  - groupIdentifierTo
+                  - sceneIdentifierTo
+              AddSceneResponse:
+                  - groupID
+                  - sceneID
+              ViewSceneResponse:
+                  - groupID
+                  - sceneID
+              RemoveSceneResponse:
+                  - groupID
+                  - sceneID
+              RemoveAllScenesResponse:
+                  - groupID
+              StoreSceneResponse:
+                  - groupID
+                  - sceneID
+              GetSceneMembershipResponse:
+                  - groupID
+              EnhancedAddSceneResponse:
+                  - groupID
+                  - sceneID
+              EnhancedViewSceneResponse:
+                  - groupID
+                  - sceneID
+              CopySceneResponse:
+                  - groupIdentifierFrom
+                  - sceneIdentifierFrom
+      structs:
+          OTASoftwareUpdateRequestor:
+              - ProviderLocation
+          UnitTesting:
+              - SimpleStruct
+              - TestFabricScoped
+              - NullablesAndOptionalsStruct
+              - NestedStruct
+              - NestedStructList
+              - DoubleNestedStructList
+              - TestListStructOctet
+          BasicInformation:
+              - CapabilityMinimaStruct
+          AccessControl:
+              - AccessControlEntryStruct
+              - AccessControlExtensionStruct
+          SoftwareDiagnostics:
+              - ThreadMetricsStruct
+          GeneralDiagnostics:
+              - NetworkInterface
+          ModeSelect:
+              - SemanticTagStruct
+          OperationalCredentials:
+              - FabricDescriptorStruct
+          DoorLock:
+              - CredentialStruct
+          MediaPlayback:
+              - PlaybackPositionStruct
+          TargetNavigator:
+              - TargetInfoStruct
+          MediaInput:
+              - InputInfoStruct
+          AudioOutput:
+              - OutputInfoStruct
+          Channel:
+              - ChannelInfoStruct
+              - LineupInfoStruct
+          ContentLauncher:
+              - DimensionStruct
+              - AdditionalInfoStruct
+              - ParameterStruct
+              - ContentSearchStruct
+              - StyleInformationStruct
+              - BrandingInformationStruct
+          ApplicationLauncher:
+              - ApplicationStruct
+              - ApplicationEPStruct
+          ApplicationBasic:
+              - ApplicationStruct
+      struct fields:
+          UnitTesting:
+              SimpleStruct:
+                  - a
+                  - b
+                  - c
+                  - d
+                  - e
+                  - f
+                  - g
+                  - h
+              TestFabricScoped:
+                  - fabricSensitiveInt8u
+                  - optionalFabricSensitiveInt8u
+                  - nullableFabricSensitiveInt8u
+                  - nullableOptionalFabricSensitiveInt8u
+                  - fabricSensitiveCharString
+                  - fabricSensitiveStruct
+                  - fabricSensitiveInt8uList
+                  - fabricIndex
+              NullablesAndOptionalsStruct:
+                  - nullableInt
+                  - optionalInt
+                  - nullableOptionalInt
+                  - nullableString
+                  - optionalString
+                  - nullableOptionalString
+                  - nullableStruct
+                  - optionalStruct
+                  - nullableOptionalStruct
+                  - nullableList
+                  - optionalList
+                  - nullableOptionalList
+              NestedStruct:
+                  - a
+                  - b
+                  - c
+              NestedStructList:
+                  - a
+                  - b
+                  - c
+                  - d
+                  - e
+                  - f
+                  - g
+              DoubleNestedStructList:
+                  - a
+              TestListStructOctet:
+                  - member1
+                  - member2
+          OTASoftwareUpdateRequestor:
+              ProviderLocation:
+                  - providerNodeID
+                  - endpoint
+                  - fabricIndex
+          BasicInformation:
+              CapabilityMinimaStruct:
+                  - caseSessionsPerFabric
+                  - subscriptionsPerFabric
+          Descriptor:
+              DeviceTypeStruct:
+                  - deviceType
+          AccessControl:
+              AccessControlEntryStruct:
+                  - privilege
+                  - authMode
+                  - subjects
+                  - targets
+                  - fabricIndex
+              AccessControlExtensionStruct:
+                  - data
+                  - fabricIndex
+          SoftwareDiagnostics:
+              ThreadMetricsStruct:
+                  - id
+                  - name
+                  - stackFreeCurrent
+                  - stackFreeMinimum
+                  - stackSize
+          GeneralDiagnostics:
+              NetworkInterface:
+                  - name
+                  - isOperational
+                  - offPremiseServicesReachableIPv4
+                  - offPremiseServicesReachableIPv6
+                  - hardwareAddress
+                  - iPv4Addresses
+                  - iPv6Addresses
+                  - type
+          ModeSelect:
+              SemanticTagStruct:
+                  - mfgCode
+                  - value
+          OperationalCredentials:
+              FabricDescriptorStruct:
+                  - rootPublicKey
+                  - vendorID
+                  - fabricID
+                  - nodeID
+                  - label
+                  - fabricIndex
+                  # Values that are actually deprecated, but we effectively
+                  # introduced them in this release.
+                  - vendorId
+                  - fabricId
+                  - nodeId
+          DoorLock:
+              CredentialStruct:
+                  - credentialType
+                  - credentialIndex
+          MediaPlayback:
+              PlaybackPositionStruct:
+                  - updatedAt
+                  - position
+          TargetNavigator:
+              TargetInfoStruct:
+                  - identifier
+                  - name
+          MediaInput:
+              InputInfoStruct:
+                  - index
+                  - inputType
+                  - name
+                  - descriptionString
+          AudioOutput:
+              OutputInfoStruct:
+                  - index
+                  - outputType
+                  - name
+          Channel:
+              ChannelInfoStruct:
+                  - majorNumber
+                  - minorNumber
+                  - name
+                  - callSign
+                  - affiliateCallSign
+              LineupInfoStruct:
+                  - operatorName
+                  - lineupName
+                  - postalCode
+                  - lineupInfoType
+          ContentLauncher:
+              DimensionStruct:
+                  - width
+                  - height
+                  - metric
+              AdditionalInfoStruct:
+                  - name
+                  - value
+              ParameterStruct:
+                  - type
+                  - value
+                  - externalIDList
+              ContentSearchStruct:
+                  - parameterList
+              StyleInformationStruct:
+                  - imageURL
+                  - color
+                  - size
+                  # Member that is actually deprecated, but we effectively
+                  # introduced it in this release.
+                  - imageUrl
+              BrandingInformationStruct:
+                  - providerName
+                  - background
+                  - logo
+                  - progressBar
+                  - splash
+                  - waterMark
+          ApplicationLauncher:
+              ApplicationStruct:
+                  - catalogVendorID
+                  - applicationID
+                  # Values that are actually deprecated, but we effectively
+                  # introduced them in this release.
+                  - catalogVendorId
+                  - applicationId
+              ApplicationEPStruct:
+                  - application
+                  - endpoint
+          ApplicationBasic:
+              ApplicationStruct:
+                  - catalogVendorID
+                  - applicationID
+                  # Values that are actually deprecated, but we effectively
+                  # introduced them in this release.
+                  - catalogVendorId
+                  - applicationId
+          Scenes:
+              AttributeValuePair:
+                  - attributeID
+              ExtensionFieldSet:
+                  - clusterID
+      events:
+          OTASoftwareUpdateRequestor:
+              - StateTransition
+              - VersionApplied
+              - DownloadError
+          UnitTesting:
+              - TestEvent
+              - TestFabricScopedEvent
+          BasicInformation:
+              - StartUp
+              - ShutDown
+              - Leave
+              - ReachableChanged
+          PowerSource:
+              - WiredFaultChange
+              - BatFaultChange
+              - BatChargeFaultChange
+          BridgedDeviceBasicInformation:
+              - StartUp
+              - ShutDown
+              - Leave
+              - ReachableChanged
+      event fields:
+          Switch:
+              MultiPressComplete:
+                  - previousPosition
+          UnitTesting:
+              TestEvent:
+                  - arg1
+                  - arg2
+                  - arg3
+                  - arg4
+                  - arg5
+                  - arg6
+              TestFabricScopedEvent:
+                  - fabricIndex
+          OTASoftwareUpdateRequestor:
+              StateTransition:
+                  - previousState
+                  - newState
+                  - reason
+                  - targetSoftwareVersion
+              VersionApplied:
+                  - softwareVersion
+                  - productID
+              DownloadError:
+                  - softwareVersion
+                  - bytesDownloaded
+                  - progressPercent
+                  - platformCode
+          BasicInformation:
+              StartUp:
+                  - softwareVersion
+              Leave:
+                  - fabricIndex
+              ReachableChanged:
+                  - reachableNewValue
+          PowerSource:
+              WiredFaultChange:
+                  - current
+                  - previous
+              BatFaultChange:
+                  - current
+                  - previous
+              BatChargeFaultChange:
+                  - current
+                  - previous
+          BridgedDeviceBasicInformation:
+              StartUp:
+                  - softwareVersion
+              ReachableChanged:
+                  - reachableNewValue
+      enums:
+          OTASoftwareUpdateProvider:
+              - OTAApplyUpdateAction
+              - OTADownloadProtocol
+              - OTAQueryStatus
+          OTASoftwareUpdateRequestor:
+              - OTAAnnouncementReason
+              - OTAChangeReasonEnum
+              - OTAUpdateStateEnum
+          UnitTesting:
+              - SimpleEnum
+          AccessControl:
+              - AccessControlEntryPrivilegeEnum
+              - AccessControlEntryAuthModeEnum
+          ThreadNetworkDiagnostics:
+              - ConnectionStatusEnum
+          EthernetNetworkDiagnostics:
+              - PHYRateEnum
+          GeneralDiagnostics:
+              - HardwareFaultEnum
+              - RadioFaultEnum
+              - BootReasonEnum
+              - NetworkFaultEnum
+          OperationalCredentials:
+              - NodeOperationalCertStatusEnum
+              - CertificateChainTypeEnum
+          DoorLock:
+              - AlarmCodeEnum
+              - CredentialRuleEnum
+              - CredentialTypeEnum
+              - DataOperationTypeEnum
+              - DoorStateEnum
+              - LockDataTypeEnum
+              - LockOperationTypeEnum
+              - OperationErrorEnum
+              - OperatingModeEnum
+              - OperationSourceEnum
+      enum values:
+          OTASoftwareUpdateProvider:
+              OTAApplyUpdateAction:
+                  - Proceed
+                  - AwaitNextAction
+                  - Discontinue
+              OTADownloadProtocol:
+                  - BDXSynchronous
+                  - BDXAsynchronous
+                  - HTTPS
+                  - VendorSpecific
+              OTAQueryStatus:
+                  - UpdateAvailable
+                  - Busy
+                  - NotAvailable
+                  - DownloadProtocolNotSupported
+          OTASoftwareUpdateRequestor:
+              OTAAnnouncementReason:
+                  - SimpleAnnouncement
+                  - UpdateAvailable
+                  - UrgentUpdateAvailable
+              OTAChangeReasonEnum:
+                  - Unknown
+                  - Success
+                  - Failure
+                  - TimeOut
+                  - DelayByProvider
+              OTAUpdateStateEnum:
+                  - Unknown
+                  - Idle
+                  - Querying
+                  - DelayedOnQuery
+                  - Downloading
+                  - Applying
+                  - DelayedOnApply
+                  - RollingBack
+                  - DelayedOnUserConsent
+          UnitTesting:
+              SimpleEnum:
+                  - Unspecified
+                  - ValueA
+                  - ValueB
+                  - ValueC
+          GeneralCommissioning:
+              # CommissioningErrorEnum was originally just named
+              # CommissioningError, but we generate the same API
+              # for both of those names, so the name can just change
+              # here.
+              CommissioningErrorEnum:
+                  - OK
+          AccessControl:
+              AccessControlEntryPrivilegeEnum:
+                  - View
+                  - ProxyView
+                  - Operate
+                  - Manage
+                  - Administer
+              AccessControlEntryAuthModeEnum:
+                  - PASE
+                  - CASE
+                  - Group
+          PowerSource:
+              BatChargeLevelEnum:
+                  - OK
+              BatChargeFaultEnum:
+                  - Unspecified
+              PowerSourceStatusEnum:
+                  - Unspecified
+          ThreadNetworkDiagnostics:
+              ConnectionStatusEnum:
+                  - Connected
+                  - NotConnected
+          WiFiNetworkDiagnostics:
+              WiFiVersionType:
+                  - A
+                  - B
+                  - G
+                  - N
+                  - Ac
+                  - Ax
+          EthernetNetworkDiagnostics:
+              PHYRateEnum:
+                  - Rate10M
+                  - Rate100M
+                  - Rate1G
+                  - Rate25G
+                  - Rate5G
+                  - Rate10G
+                  - Rate40G
+                  - Rate100G
+                  - Rate200G
+                  - Rate400G
+          GeneralDiagnostics:
+              HardwareFaultEnum:
+                  - Unspecified
+                  - Radio
+                  - Sensor
+                  - ResettableOverTemp
+                  - NonResettableOverTemp
+                  - PowerSource
+                  - VisualDisplayFault
+                  - AudioOutputFault
+                  - UserInterfaceFault
+                  - NonVolatileMemoryError
+                  - TamperDetected
+              RadioFaultEnum:
+                  - Unspecified
+                  - WiFiFault
+                  - CellularFault
+                  - ThreadFault
+                  - NFCFault
+                  - BLEFault
+                  - EthernetFault
+              BootReasonEnum:
+                  - Unspecified
+                  - PowerOnReboot
+                  - BrownOutReset
+                  - SoftwareWatchdogReset
+                  - HardwareWatchdogReset
+                  - SoftwareUpdateCompleted
+                  - SoftwareReset
+              NetworkFaultEnum:
+                  - Unspecified
+                  - HardwareFailure
+                  - NetworkJammed
+                  - ConnectionFailed
+          OperationalCredentials:
+              NodeOperationalCertStatusEnum:
+                  - OK
+                  - InvalidPublicKey
+                  - InvalidNodeOpId
+                  - InvalidNOC
+                  - MissingCsr
+                  - TableFull
+                  - InvalidAdminSubject
+                  - FabricConflict
+                  - LabelConflict
+                  - InvalidFabricIndex
+              CertificateChainTypeEnum:
+                  - DACCertificate
+                  - PAICertificate
+          DoorLock:
+              AlarmCodeEnum:
+                  - LockJammed
+                  - LockFactoryReset
+                  - LockRadioPowerCycled
+                  - WrongCodeEntryLimit
+                  - FrontEsceutcheonRemoved
+                  - DoorForcedOpen
+                  - DoorAjar
+                  - ForcedUser
+              CredentialRuleEnum:
+                  - Single
+                  - Dual
+                  - Tri
+              CredentialTypeEnum:
+                  - ProgrammingPIN
+                  - PIN
+                  - RFID
+                  - Fingerprint
+                  - FingerVein
+                  - Face
+              DataOperationTypeEnum:
+                  - Add
+                  - Clear
+                  - Modify
+              DoorStateEnum:
+                  - DoorOpen
+                  - DoorClosed
+                  - DoorJammed
+                  - DoorForcedOpen
+                  - DoorUnspecifiedError
+                  - DoorAjar
+              LockDataTypeEnum:
+                  - Unspecified
+                  - ProgrammingCode
+                  - UserIndex
+                  - WeekDaySchedule
+                  - YearDaySchedule
+                  - HolidaySchedule
+                  - PIN
+                  - RFID
+                  - Fingerprint
+              LockOperationTypeEnum:
+                  - Lock
+                  - Unlock
+                  - NonAccessUserEvent
+                  - ForcedUserEvent
+              OperationErrorEnum:
+                  - Unspecified
+                  - InvalidCredential
+                  - DisabledUserDenied
+                  - Restricted
+                  - InsufficientBattery
+              OperatingModeEnum:
+                  - Normal
+                  - Vacation
+                  - Privacy
+                  - NoRemoteLockUnlock
+                  - Passage
+              OperationSourceEnum:
+                  - Unspecified
+                  - Manual
+                  - ProprietaryRemote
+                  - Keypad
+                  - Auto
+                  - Button
+                  - Schedule
+                  - Remote
+                  - RFID
+                  - Biometric
+              UserTypeEnum:
+                  - UnrestrictedUser
+                  - ProgrammingUser
+                  - ForcedUser
+                  - DisposableUser
+                  - ExpiringUser
+                  - ScheduleRestrictedUser
+                  - RemoteOnlyUser
+          MediaInput:
+              InputTypeEnum:
+                  - HDMI
+                  - SCART
+                  - USB
+          AudioOutput:
+              OutputTypeEnum:
+                  - HDMI
+                  - BT
+          Channel:
+              LineupInfoTypeEnum:
+                  - MSO
+          ContentLauncher:
+              MetricTypeEnum:
+                  - Pixels
+                  - Percentage
+              ParameterEnum:
+                  - Video
+          Thermostat:
+              # SystemModeEnum was originally named ThermostatSystemMode, but we
+              # generate the same API for the names with/without "Enum" at the
+              # end and the cluster name present/absent at the beginning, so the
+              # name can just change here.
+              SystemModeEnum:
+                  - EmergencyHeat
+                  - Dry
+                  - Sleep
+              SetpointAdjustMode:
+                  - Heat
+                  - Cool
+                  - Both
+      bitmaps:
+          UnitTesting:
+              - Bitmap8MaskMap
+              - Bitmap16MaskMap
+              - Bitmap32MaskMap
+              - Bitmap64MaskMap
+              - SimpleBitmap
+          LevelControl:
+              - LevelControlOptions
+          DoorLock:
+              - DaysMaskMap
+          PumpConfigurationAndControl:
+              - PumpFeature
+          WiFiNetworkDiagnostics:
+              # Feature was originally named WiFiNetworkDiagnosticsFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              - Feature
+          EthernetNetworkDiagnostics:
+              # Feature was originally named EthernetNetworkDiagnosticsFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              - Feature
+      bitmap values:
+          UnitTesting:
+              Bitmap8MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              Bitmap16MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              Bitmap32MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              Bitmap64MaskMap:
+                  - MaskVal1
+                  - MaskVal2
+                  - MaskVal3
+                  - MaskVal4
+              SimpleBitmap:
+                  - ValueA
+                  - ValueB
+                  - ValueC
+          LevelControl:
+              LevelControlOptions:
+                  - ExecuteIfOff
+                  - CoupleColorTempToLevel
+          NetworkCommissioning:
+              WiFiSecurity:
+                  - WEP
+                  - WPAPersonal
+                  - WPA2Personal
+                  - WPA3Personal
+          PressureMeasurement:
+              PressureFeature:
+                  - Extended
+          DoorLock:
+              DaysMaskMap:
+                  - Sunday
+                  - Monday
+                  - Tuesday
+                  - Wednesday
+                  - Thursday
+                  - Friday
+                  - Saturday
+              # Feature was originally named DoorLockFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - PINCredential
+                  - RFIDCredential
+                  - WeekDayAccessSchedules
+                  - CredentialsOverTheAirAccess
+                  - User
+                  - Notification
+                  - YearDayAccessSchedules
+          PumpConfigurationAndControl:
+              PumpFeature:
+                  - ConstantPressure
+                  - CompensatedPressure
+                  - ConstantFlow
+                  - ConstantSpeed
+                  - ConstantTemperature
+                  - Automatic
+                  - Local
+          Thermostat:
+              # Feature was originally named ThermostatFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - ScheduleConfiguration
+                  - AutoMode
+              DayOfWeek:
+                  - Away
+              ModeForSequence:
+                  - HeatSetpointPresent
+                  - CoolSetpointPresent
+          WiFiNetworkDiagnostics:
+              # Feature was originally named WiFiNetworkDiagnosticsFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              Feature:
+                  - PacketCounts
+                  - ErrorCounts
+          EthernetNetworkDiagnostics:
+              # Feature was originally named EthernetNetworkDiagnosticsFeature, but
+              # we generate the same API for both of those names, so the name
+              # can just change here.
+              Feature:
+                  - PacketCounts
+                  - ErrorCounts
+  deprecated:
+      clusters:
+          - OtaSoftwareUpdateProvider
+          - OtaSoftwareUpdateRequestor
+          - TestCluster
+          - WakeOnLan
+          - Basic
+      attributes:
+          Descriptor:
+              - DeviceList
+          AccessControl:
+              - Acl
+          BallastConfiguration:
+              - IntrinsicBalanceFactor
+          OccupancySensing:
+              - PirOccupiedToUnoccupiedDelay
+              - PirUnoccupiedToOccupiedDelay
+              - PirUnoccupiedToOccupiedThreshold
+          ThreadNetworkDiagnostics:
+              - NeighborTableList
+              - RouteTableList
+          WiFiNetworkDiagnostics:
+              - Bssid
+              - Rssi
+          GeneralDiagnostics:
+              - BootReasons
+      commands:
+          ContentLauncher:
+              - LaunchResponse
+          MediaPlayback:
+              - StopPlayback
+      command fields:
+          Groups:
+              AddGroup:
+                  - groupId
+              AddGroupIfIdentifying:
+                  - groupId
+              AddGroupResponse:
+                  - groupId
+              RemoveGroup:
+                  - groupId
+              RemoveGroupResponse:
+                  - groupId
+              ViewGroup:
+                  - groupId
+              ViewGroupResponse:
+                  - groupId
+          OnOff:
+              OffWithEffect:
+                  - effectId
+          DiagnosticLogs:
+              RetrieveLogsResponse:
+                  - content
+                  - timeStamp
+          AdministratorCommissioning:
+              OpenCommissioningWindow:
+                  - pakeVerifier
+          OperationalCredentials:
+              AttestationResponse:
+                  - signature
+              AddTrustedRootCertificate:
+                  - rootCertificate
+          DoorLock:
+              SetUser:
+                  - userUniqueId
+              GetUserResponse:
+                  - userUniqueId
+          ColorControl:
+              MoveToColorTemperature:
+                  - colorTemperature
+          OTASoftwareUpdateProvider:
+              QueryImage:
+                  - vendorId
+                  - productId
+          OTASoftwareUpdateRequestor:
+              AnnounceOTAProvider:
+                  - providerNodeId
+                  - vendorId
+          Scenes:
+              AddScene:
+                  - groupId
+                  - sceneId
+              ViewScene:
+                  - groupId
+                  - sceneId
+              RemoveScene:
+                  - groupId
+                  - sceneId
+              RemoveAllScenes:
+                  - groupId
+              StoreScene:
+                  - groupId
+                  - sceneId
+              RecallScene:
+                  - groupId
+                  - sceneId
+              GetSceneMembership:
+                  - groupId
+              EnhancedAddScene:
+                  - groupId
+                  - sceneId
+              EnhancedViewScene:
+                  - groupId
+                  - sceneId
+              CopyScene:
+                  - groupIdFrom
+                  - sceneIdFrom
+                  - groupIdTo
+                  - sceneIdTo
+              AddSceneResponse:
+                  - groupId
+                  - sceneId
+              ViewSceneResponse:
+                  - groupId
+                  - sceneId
+              RemoveSceneResponse:
+                  - groupId
+                  - sceneId
+              RemoveAllScenesResponse:
+                  - groupId
+              StoreSceneResponse:
+                  - groupId
+                  - sceneId
+              GetSceneMembershipResponse:
+                  - groupId
+              EnhancedAddSceneResponse:
+                  - groupId
+                  - sceneId
+              EnhancedViewSceneResponse:
+                  - groupId
+                  - sceneId
+              CopySceneResponse:
+                  - groupIdFrom
+                  - sceneIdFrom
+      structs:
+          Descriptor:
+              - DeviceType
+          AccessControl:
+              - AccessControlEntry
+              - ExtensionEntry
+          PowerSource:
+              - WiredFaultChangeType
+              - BatFaultChangeType
+              - BatChargeFaultChangeType
+          SoftwareDiagnostics:
+              - ThreadMetrics
+          GeneralDiagnostics:
+              - NetworkInterfaceType
+          ModeSelect:
+              - SemanticTag
+          OperationalCredentials:
+              - FabricDescriptor
+          DoorLock:
+              - DlCredential
+          MediaPlayback:
+              - PlaybackPosition
+          TargetNavigator:
+              - TargetInfo
+          MediaInput:
+              - InputInfo
+          AudioOutput:
+              - OutputInfo
+          Channel:
+              - ChannelInfo
+              - LineupInfo
+          ContentLauncher:
+              - Dimension
+              - AdditionalInfo
+              - Parameter
+              - ContentSearch
+              - StyleInformation
+              - BrandingInformation
+          ApplicationLauncher:
+              - Application
+              - ApplicationEP
+          ApplicationBasic:
+              - ApplicationBasicApplication
+      struct fields:
+          Descriptor:
+              DeviceTypeStruct:
+                  - type
+          OperationalCredentials:
+              FabricDescriptorStruct:
+                  - vendorId
+                  - fabricId
+                  - nodeId
+          ContentLauncher:
+              StyleInformationStruct:
+                  - imageUrl
+          ApplicationLauncher:
+              ApplicationStruct:
+                  - catalogVendorId
+                  - applicationId
+          ApplicationBasic:
+              ApplicationStruct:
+                  - catalogVendorId
+                  - applicationId
+          Scenes:
+              AttributeValuePair:
+                  - attributeId
+              ExtensionFieldSet:
+                  - clusterId
+      event fields:
+          Switch:
+              MultiPressComplete:
+                  - newPosition
+      enums:
+          AccessControl:
+              - Privilege
+              - AuthMode
+          ThreadNetworkDiagnostics:
+              - ThreadConnectionStatus
+          EthernetNetworkDiagnostics:
+              - PHYRateType
+          GeneralDiagnostics:
+              - HardwareFaultType
+              - RadioFaultType
+              - BootReasonType
+              - NetworkFaultType
+          OperationalCredentials:
+              - OperationalCertStatus
+          DoorLock:
+              - DlAlarmCode
+              - DlCredentialRule
+              - DlCredentialType
+              - DlDataOperationType
+              - DlDoorState
+              - DlLockDataType
+              - DlLockOperationType
+              - DlOperationError
+              - DlOperatingMode
+              - DlOperationSource
+              - DlUserStatus
+              - DlUserType
+              # The enums after this come from the draft/types/door-lock.xml, not the
+              # door lock cluster XML
+              #
+              # DoorLockUserStatus is not marked deprecated here because the
+              # UserStatusEnum from the spec ends up with the same enum name
+              # (MTRDoorLockUserStatus) but is missing one of the values
+              # compared to DoorLockUserStatus.  So we have to keep
+              # DoorLockUserStatus for now and just deprecate its one extra name.
+              - DoorLockUserStatus
+              - DoorLockUserType
+              - DoorLockDayOfWeek
+              - DoorLockSetPinOrIdStatus
+              - DoorLockOperationEventCode
+              - DoorLockProgrammingEventCode
+      enum values:
+          GeneralCommissioning:
+              # CommissioningErrorEnum was originally just named
+              # CommissioningError, but we generate the same API
+              # for both of those names, so the name can just change
+              # here.
+              CommissioningErrorEnum:
+                  - Ok
+          PowerSource:
+              BatChargeLevelEnum:
+                  - Ok
+              BatChargeFaultEnum:
+                  - Unspecfied
+              PowerSourceStatusEnum:
+                  - Unspecfied
+          WiFiNetworkDiagnostics:
+              WiFiVersionType:
+                  - 80211a
+                  - 80211b
+                  - 80211g
+                  - 80211n
+                  - 80211ac
+                  - 80211ax
+          DoorLock:
+              UserStatusEnum:
+                  - NotSupported
+              UserTypeEnum:
+                  - NotSupported
+                  - Unrestricted
+                  - MasterUser
+          MediaInput:
+              InputTypeEnum:
+                  - Hdmi
+                  - Scart
+                  - Usb
+          AudioOutput:
+              OutputTypeEnum:
+                  - Hdmi
+                  - Bt
+          Channel:
+              LineupInfoTypeEnum:
+                  - Mso
+          ContentLauncher:
+              MetricTypeEnum:
+                  - PIXELS
+                  - PERCENTAGE
+          Thermostat:
+              # SystemModeEnum was originally named ThermostatSystemMode, but we
+              # generate the same API for the names with/without "Enum" at the
+              # end and the cluster name present/absent at the beginning, so the
+              # name can just change here.
+              SystemModeEnum:
+                  - EmergencyHeating
+              SetpointAdjustMode:
+                  - HeatSetpoint
+                  - CoolSetpoint
+                  - HeatAndCoolSetpoints
+      bitmaps:
+          DoorLock:
+              - DlDaysMaskMap
+      bitmap values:
+          NetworkCommissioning:
+              WiFiSecurity:
+                  - WepPersonal
+                  - WpaPersonal
+                  - Wpa2Personal
+                  - Wpa3Personal
+          PressureMeasurement:
+              PressureFeature:
+                  - EXT
+          DoorLock:
+              # Feature was originally named DoorLockFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - PINCredentials
+                  - RFIDCredentials
+                  - WeekDaySchedules
+                  - CredentialsOTA
+                  - UsersManagement
+                  - Notifications
+                  - YearDaySchedules
+          Thermostat:
+              # Feature was originally named ThermostatFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - Schedule
+                  - Automode
+              DayOfWeek:
+                  - AwayOrVacation
+              ModeForSequence:
+                  - HeatSetpointFieldPresent
+                  - CoolSetpointFieldPresent
+      apis:
+          - Timed Invoke for server to client commands
+          - Deprecated global attribute names
+  removed:
+      commands:
+          BasicInformation:
+              - MfgSpecificPing
+      command fields:
+          # Cases where the cluster/command got renamed and the fields got
+          # renamed, so the old command name never had the new fields.
+          OtaSoftwareUpdateProvider:
+              QueryImage:
+                  - vendorID
+                  - productID
+      enums:
+          # DoorLockUserStatus (non-spec) and UserStatusEnum (from the spec) end
+          # up with the same enum name (MTRDoorLockUserStatus), so just remove
+          # the non-spec one.
+          DoorLock:
+              - DoorLockUserStatus
+              - DoorLockUserType
+      enum values:
+          EthernetNetworkDiagnostics:
+              # Both the enum and the values got renamed, so don't output the
+              # old values with the new enum name.
+              PHYRateEnum:
+                  - 10M
+                  - 100M
+                  - 1000M
+                  - 25G
+                  - 5G
+                  - 10G
+                  - 40G
+                  - 100G
+                  - 200G
+                  - 400G
+          OperationalCredentials:
+              # Both the enum and the value got renamed, so don't output the
+              # old value with the new enum name.
+              NodeOperationalCertStatusEnum:
+                  - SUCCESS
+          DoorLock:
+              # Both the enum and the values got renamed, so don't output the
+              # old value with the new enum name.
+              CredentialRuleEnum:
+                  - Double
+  renames:
+      clusters:
+          UnitTesting: TestCluster
+          BasicInformation: Basic
+          OTASoftwareUpdateProvider: OtaSoftwareUpdateProvider
+          OTASoftwareUpdateRequestor: OtaSoftwareUpdateRequestor
+          WakeOnLAN: WakeOnLan
+          BridgedDeviceBasicInformation: BridgedDeviceBasic
+      attributes:
+          Descriptor:
+              DeviceTypeList: DeviceList
+          AccessControl:
+              ACL: Acl
+          BallastConfiguration:
+              IntrinsicBallastFactor: IntrinsicBalanceFactor
+          OccupancySensing:
+              PIROccupiedToUnoccupiedDelay: PirOccupiedToUnoccupiedDelay
+              PIRUnoccupiedToOccupiedDelay: PirUnoccupiedToOccupiedDelay
+              PIRUnoccupiedToOccupiedThreshold: PirUnoccupiedToOccupiedThreshold
+          OTASoftwareUpdateRequestor:
+              DefaultOTAProviders: DefaultOtaProviders
+          ThreadNetworkDiagnostics:
+              NeighborTable: NeighborTableList
+              RouteTable: RouteTableList
+          WiFiNetworkDiagnostics:
+              BSSID: Bssid
+              RSSI: Rssi
+          GeneralDiagnostics:
+              BootReason: BootReasons
+      commands:
+          OTASoftwareUpdateRequestor:
+              AnnounceOTAProvider: AnnounceOtaProvider
+          ContentLauncher:
+              LauncherResponse: LaunchResponse
+          MediaPlayback:
+              Stop: StopPlayback
+      command fields:
+          OTASoftwareUpdateProvider:
+              QueryImage:
+                  vendorID: vendorId
+                  productID: productId
+          OTASoftwareUpdateRequestor:
+              AnnounceOTAProvider:
+                  providerNodeID: providerNodeId
+                  vendorID: vendorId
+          Groups:
+              AddGroup:
+                  groupID: groupId
+              AddGroupIfIdentifying:
+                  groupID: groupId
+              AddGroupResponse:
+                  groupID: groupId
+              RemoveGroup:
+                  groupID: groupId
+              RemoveGroupResponse:
+                  groupID: groupId
+              ViewGroup:
+                  groupID: groupId
+              ViewGroupResponse:
+                  groupID: groupId
+          OnOff:
+              OffWithEffect:
+                  effectIdentifier: effectId
+          DiagnosticLogs:
+              RetrieveLogsResponse:
+                  logContent: content
+                  utcTimeStamp: timeStamp
+          AdministratorCommissioning:
+              OpenCommissioningWindow:
+                  pakePasscodeVerifier: pakeVerifier
+          OperationalCredentials:
+              AttestationResponse:
+                  attestationSignature: signature
+              AddTrustedRootCertificate:
+                  rootCACertificate: rootCertificate
+          DoorLock:
+              SetUser:
+                  userUniqueID: userUniqueId
+              GetUserResponse:
+                  userUniqueID: userUniqueId
+          ColorControl:
+              MoveToColorTemperature:
+                  colorTemperatureMireds: colorTemperature
+          Scenes:
+              AddScene:
+                  groupID: groupId
+                  sceneID: sceneId
+              ViewScene:
+                  groupID: groupId
+                  sceneID: sceneId
+              RemoveScene:
+                  groupID: groupId
+                  sceneID: sceneId
+              RemoveAllScenes:
+                  groupID: groupId
+              StoreScene:
+                  groupID: groupId
+                  sceneID: sceneId
+              RecallScene:
+                  groupID: groupId
+                  sceneID: sceneId
+              GetSceneMembership:
+                  groupID: groupId
+              EnhancedAddScene:
+                  groupID: groupId
+                  sceneID: sceneId
+              EnhancedViewScene:
+                  groupID: groupId
+                  sceneID: sceneId
+              CopyScene:
+                  groupIdentifierFrom: groupIdFrom
+                  sceneIdentifierFrom: sceneIdFrom
+                  groupIdentifierTo: groupIdTo
+                  sceneIdentifierTo: sceneIdTo
+              AddSceneResponse:
+                  groupID: groupId
+                  sceneID: sceneId
+              ViewSceneResponse:
+                  groupID: groupId
+                  sceneID: sceneId
+              RemoveSceneResponse:
+                  groupID: groupId
+                  sceneID: sceneId
+              RemoveAllScenesResponse:
+                  groupID: groupId
+              StoreSceneResponse:
+                  groupID: groupId
+                  sceneID: sceneId
+              GetSceneMembershipResponse:
+                  groupID: groupId
+              EnhancedAddSceneResponse:
+                  groupID: groupId
+                  sceneID: sceneId
+              EnhancedViewSceneResponse:
+                  groupID: groupId
+                  sceneID: sceneId
+              CopySceneResponse:
+                  groupIdentifierFrom: groupIdFrom
+                  sceneIdentifierFrom: sceneIdFrom
+      structs:
+          AccessControl:
+              AccessControlEntryStruct: AccessControlEntry
+              AccessControlExtensionStruct: ExtensionEntry
+          SoftwareDiagnostics:
+              ThreadMetricsStruct: ThreadMetrics
+          GeneralDiagnostics:
+              NetworkInterface: NetworkInterfaceType
+          ModeSelect:
+              SemanticTagStruct: SemanticTag
+          OperationalCredentials:
+              FabricDescriptorStruct: FabricDescriptor
+          DoorLock:
+              CredentialStruct: DlCredential
+          MediaPlayback:
+              PlaybackPositionStruct: PlaybackPosition
+          TargetNavigator:
+              TargetInfoStruct: TargetInfo
+          MediaInput:
+              InputInfoStruct: InputInfo
+          AudioOutput:
+              OutputInfoStruct: OutputInfo
+          Channel:
+              ChannelInfoStruct: ChannelInfo
+              LineupInfoStruct: LineupInfo
+          ContentLauncher:
+              DimensionStruct: Dimension
+              AdditionalInfoStruct: AdditionalInfo
+              ParameterStruct: Parameter
+              ContentSearchStruct: ContentSearch
+              StyleInformationStruct: StyleInformation
+              BrandingInformationStruct: BrandingInformation
+          ApplicationLauncher:
+              ApplicationStruct: Application
+              ApplicationEPStruct: ApplicationEP
+          ApplicationBasic:
+              ApplicationStruct: ApplicationBasicApplication
+      struct fields:
+          Descriptor:
+              DeviceTypeStruct:
+                  deviceType: type
+          OperationalCredentials:
+              FabricDescriptorStruct:
+                  vendorID: vendorId
+                  fabricID: fabricId
+                  nodeID: nodeId
+          ContentLauncher:
+              StyleInformationStruct:
+                  imageURL: imageUrl
+          ApplicationLauncher:
+              ApplicationStruct:
+                  catalogVendorID: catalogVendorId
+                  applicationID: applicationId
+          ApplicationBasic:
+              ApplicationStruct:
+                  catalogVendorID: catalogVendorId
+                  applicationID: applicationId
+          Scenes:
+              AttributeValuePair:
+                  attributeID: attributeId
+              ExtensionFieldSet:
+                  clusterID: clusterId
+      event fields:
+          Switch:
+              MultiPressComplete:
+                  previousPosition: newPosition
+      enums:
+          AccessControl:
+              AccessControlEntryPrivilegeEnum: Privilege
+              AccessControlEntryAuthModeEnum: AuthMode
+          ThreadNetworkDiagnostics:
+              ConnectionStatusEnum: ThreadConnectionStatus
+          EthernetNetworkDiagnostics:
+              PHYRateEnum: PHYRateType
+          GeneralDiagnostics:
+              HardwareFaultEnum: HardwareFaultType
+              RadioFaultEnum: RadioFaultType
+              BootReasonEnum: BootReasonType
+              NetworkFaultEnum: NetworkFaultType
+          OperationalCredentials:
+              NodeOperationalCertStatusEnum: OperationalCertStatus
+          DoorLock:
+              AlarmCodeEnum: DlAlarmCode
+              CredentialRuleEnum: DlCredentialRule
+              CredentialTypeEnum: DlCredentialType
+              DataOperationTypeEnum: DlDataOperationType
+              DoorStateEnum: DlDoorState
+              LockDataTypeEnum: DlLockDataType
+              LockOperationTypeEnum: DlLockOperationType
+              OperationErrorEnum: DlOperationError
+              OperatingModeEnum: DlOperatingMode
+              OperationSourceEnum: DlOperationSource
+              UserStatusEnum: DlUserStatus
+              UserTypeEnum: DlUserType
+      enum values:
+          GeneralCommissioning:
+              # CommissioningErrorEnum was originally just named
+              # CommissioningError, but we generate the same API
+              # for both of those names, so the name can just change
+              # here.
+              CommissioningErrorEnum:
+                  OK: Ok
+          PowerSource:
+              BatChargeLevelEnum:
+                  OK: Ok
+              BatChargeFaultEnum:
+                  Unspecified: Unspecfied
+              PowerSourceStatusEnum:
+                  Unspecified: Unspecfied
+          WiFiNetworkDiagnostics:
+              WiFiVersionType:
+                  A: 80211a
+                  B: 80211b
+                  G: 80211g
+                  N: 80211n
+                  Ac: 80211ac
+                  Ax: 80211ax
+          EthernetNetworkDiagnostics:
+              PHYRateEnum:
+                  Rate10M: 10M
+                  Rate100M: 100M
+                  Rate1G: 1000M
+                  Rate25G: 25G
+                  Rate5G: 5G
+                  Rate10G: 10G
+                  Rate40G: 40G
+                  Rate100G: 100G
+                  Rate200G: 200G
+                  Rate400G: 400G
+              PHYRateType:
+                  Rate10M: 10M
+                  Rate100M: 100M
+                  Rate1G: 1000M
+                  Rate25G: 25G
+                  Rate5G: 5G
+                  Rate10G: 10G
+                  Rate40G: 40G
+                  Rate100G: 100G
+                  Rate200G: 200G
+                  Rate400G: 400G
+          OperationalCredentials:
+              NodeOperationalCertStatusEnum:
+                  OK: SUCCESS
+              OperationalCertStatus:
+                  OK: SUCCESS
+          DoorLock:
+              CredentialRuleEnum:
+                  Dual: Double
+              UserTypeEnum:
+                  UnrestrictedUser: Unrestricted
+                  ProgrammingUser: MasterUser
+          MediaInput:
+              InputTypeEnum:
+                  HDMI: Hdmi
+                  SCART: Scart
+                  USB: Usb
+          AudioOutput:
+              OutputTypeEnum:
+                  HDMI: Hdmi
+                  BT: Bt
+          Channel:
+              LineupInfoTypeEnum:
+                  MSO: Mso
+          ContentLauncher:
+              MetricTypeEnum:
+                  Pixels: PIXELS
+                  Percentage: PERCENTAGE
+          Thermostat:
+              # SystemModeEnum was originally named ThermostatSystemMode, but we
+              # generate the same API for the names with/without "Enum" at the
+              # end and the cluster name present/absent at the beginning, so the
+              # name can just change here.
+              SystemModeEnum:
+                  EmergencyHeat: EmergencyHeating
+              SetpointAdjustMode:
+                  Heat: HeatSetpoint
+                  Cool: CoolSetpoint
+                  Both: HeatAndCoolSetpoints
+      bitmaps:
+          DoorLock:
+              DaysMaskMap: DlDaysMaskMap
+      bitmap values:
+          NetworkCommissioning:
+              WiFiSecurity:
+                  WEP: WepPersonal
+                  WPAPersonal: WpaPersonal
+                  WPA2Personal: Wpa2Personal
+                  WPA3Personal: Wpa3Personal
+          PressureMeasurement:
+              PressureFeature:
+                  Extended: EXT
+          DoorLock:
+              # Feature was originally named DoorLockFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  PINCredential: PINCredentials
+                  RFIDCredential: RFIDCredentials
+                  WeekDayAccessSchedules: WeekDaySchedules
+                  CredentialsOverTheAirAccess: CredentialsOTA
+                  User: UsersManagement
+                  Notification: Notifications
+                  YearDayAccessSchedules: YearDaySchedules
+          Thermostat:
+              # Feature was originally named ThermostatFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  ScheduleConfiguration: Schedule
+                  AutoMode: Automode
+              DayOfWeek:
+                  Away: AwayOrVacation
+              ModeForSequence:
+                  HeatSetpointPresent: HeatSetpointFieldPresent
+                  CoolSetpointPresent: CoolSetpointFieldPresent
+
+- release: "First after major API revamp"
+  versions:
+      iOS: "16.5"
+      macOS: "13.4"
+      watchOS: "9.5"
+      tvOS: "16.5"
+  introduced:
+      ids:
+          attributes:
+              TimeSynchronization:
+                  - DSTOffset
+      command fields:
+          DiagnosticLogs:
+              RetrieveLogsRequest:
+                  # Not really usable in earlier releases: wrong type.
+                  - transferFileDesignator
+      structs:
+          TimeSynchronization:
+              - DSTOffsetStruct
+              - TimeZoneStruct
+      struct fields:
+          TimeSynchronization:
+              DSTOffsetStruct:
+                  - offset
+                  - validStarting
+                  - validUntil
+              TimeZoneStruct:
+                  - offset
+                  - validAt
+                  - name
+      enums:
+          DiagnosticLogs:
+              - IntentEnum
+              - StatusEnum
+              - TransferProtocolEnum
+          OccupancySensing:
+              - OccupancySensorTypeEnum
+          WiFiNetworkDiagnostics:
+              - ConnectionStatusEnum
+              - WiFiVersionEnum
+          PumpConfigurationAndControl:
+              - ControlModeEnum
+              - OperationModeEnum
+          PowerSource:
+              - BatCommonDesignationEnum
+              - BatApprovedChemistryEnum
+      enum values:
+          DoorLock:
+              LockDataTypeEnum:
+                  - FingerVein
+                  - Face
+          DiagnosticLogs:
+              IntentEnum:
+                  - EndUserSupport
+                  - NetworkDiag
+                  - CrashLogs
+              StatusEnum:
+                  - Success
+                  - Exhausted
+                  - NoLogs
+                  - Busy
+                  - Denied
+              TransferProtocolEnum:
+                  - ResponsePayload
+                  - BDX
+          OccupancySensing:
+              OccupancySensorTypeEnum:
+                  - PIR
+                  - Ultrasonic
+                  - PIRAndUltrasonic
+                  - PhysicalContact
+          WiFiNetworkDiagnostics:
+              ConnectionStatusEnum:
+                  - Connected
+                  - NotConnected
+              WiFiVersionEnum:
+                  - A
+                  - B
+                  - G
+                  - N
+                  - Ac
+                  - Ax
+          PumpConfigurationAndControl:
+              ControlModeEnum:
+                  - ConstantSpeed
+                  - ConstantPressure
+                  - ProportionalPressure
+                  - ConstantFlow
+                  - ConstantTemperature
+                  - Automatic
+              OperationModeEnum:
+                  - Normal
+                  - Minimum
+                  - Maximum
+                  - Local
+          PowerSource:
+              WiredFaultEnum:
+                  - Unspecified
+              BatFaultEnum:
+                  - Unspecified
+              BatCommonDesignationEnum:
+                  - Unspecified
+                  - AAA
+                  - AA
+                  - C
+                  - D
+                  - 4v5
+                  - 6v0
+                  - 9v0
+                  - 12AA
+                  - AAAA
+                  - A
+                  - B
+                  - F
+                  - N
+                  - No6
+                  - SubC
+                  - A23
+                  - A27
+                  - BA5800
+                  - Duplex
+                  - 4SR44
+                  - "523"
+                  - "531"
+                  - 15v0
+                  - 22v5
+                  - 30v0
+                  - 45v0
+                  - 67v5
+                  - J
+                  - CR123A
+                  - CR2
+                  - 2CR5
+                  - CRP2
+                  - CRV3
+                  - SR41
+                  - SR43
+                  - SR44
+                  - SR45
+                  - SR48
+                  - SR54
+                  - SR55
+                  - SR57
+                  - SR58
+                  - SR59
+                  - SR60
+                  - SR63
+                  - SR64
+                  - SR65
+                  - SR66
+                  - SR67
+                  - SR68
+                  - SR69
+                  - SR516
+                  - SR731
+                  - SR712
+                  - LR932
+                  - A5
+                  - A10
+                  - A13
+                  - A312
+                  - A675
+                  - AC41E
+                  - "10180"
+                  - "10280"
+                  - "10440"
+                  - "14250"
+                  - "14430"
+                  - "14500"
+                  - "14650"
+                  - "15270"
+                  - "16340"
+                  - RCR123A
+                  - "17500"
+                  - "17670"
+                  - "18350"
+                  - "18500"
+                  - "18650"
+                  - "19670"
+                  - "25500"
+                  - "26650"
+                  - "32600"
+              BatApprovedChemistryEnum:
+                  - Unspecified
+                  - Alkaline
+                  - LithiumCarbonFluoride
+                  - LithiumChromiumOxide
+                  - LithiumCopperOxide
+                  - LithiumIronDisulfide
+                  - LithiumManganeseDioxide
+                  - LithiumThionylChloride
+                  - Magnesium
+                  - MercuryOxide
+                  - NickelOxyhydride
+                  - SilverOxide
+                  - ZincAir
+                  - ZincCarbon
+                  - ZincChloride
+                  - ZincManganeseDioxide
+                  - LeadAcid
+                  - LithiumCobaltOxide
+                  - LithiumIon
+                  - LithiumIonPolymer
+                  - LithiumIronPhosphate
+                  - LithiumSulfur
+                  - LithiumTitanate
+                  - NickelCadmium
+                  - NickelHydrogen
+                  - NickelIron
+                  - NickelMetalHydride
+                  - NickelZinc
+                  - SilverZinc
+                  - SodiumIon
+                  - SodiumSulfur
+                  - ZincBromide
+                  - ZincCerium
+      bitmaps:
+          OccupancySensing:
+              - OccupancyBitmap
+              - OccupancySensorTypeBitmap
+          PumpConfigurationAndControl:
+              - PumpStatusBitmap
+      bitmap values:
+          OccupancySensing:
+              OccupancyBitmap:
+                  - Occupied
+              OccupancySensorTypeBitmap:
+                  - PIR
+                  - Ultrasonic
+                  - PhysicalContact
+          PumpConfigurationAndControl:
+              PumpFeature:
+                  - LocalOperation
+              PumpStatusBitmap:
+                  - DeviceFault
+                  - Supplyfault
+                  - SpeedLow
+                  - SpeedHigh
+                  - LocalOverride
+                  - Running
+                  - RemotePressure
+                  - RemoteFlow
+                  - RemoteTemperature
+  deprecated:
+      attributes:
+          TimeSynchronization:
+              - DstOffset
+      structs:
+          TimeSynchronization:
+              - DstOffsetType
+              - TimeZoneType
+      enums:
+          DiagnosticLogs:
+              - LogsIntent
+              - LogsStatus
+              - LogsTransferProtocol
+          WiFiNetworkDiagnostics:
+              - WiFiConnectionStatus
+              - WiFiVersionType
+          PumpConfigurationAndControl:
+              - PumpControlMode
+              - PumpOperationMode
+      enum values:
+          PowerSource:
+              WiredFaultEnum:
+                  - Unspecfied
+              BatFaultEnum:
+                  - Unspecfied
+      bitmaps:
+          PumpConfigurationAndControl:
+              - PumpStatus
+      bitmap values:
+          PumpConfigurationAndControl:
+              PumpFeature:
+                  - Local
+  renames:
+      attributes:
+          TimeSynchronization:
+              DSTOffset: DstOffset
+      structs:
+          TimeSynchronization:
+              DSTOffsetStruct: DstOffsetType
+              TimeZoneStruct: TimeZoneType
+      enums:
+          DiagnosticLogs:
+              IntentEnum: LogsIntent
+              StatusEnum: LogsStatus
+              TransferProtocolEnum: LogsTransferProtocol
+          WiFiNetworkDiagnostics:
+              ConnectionStatusEnum: WiFiConnectionStatus
+              WiFiVersionEnum: WiFiVersionType
+          PumpConfigurationAndControl:
+              ControlModeEnum: PumpControlMode
+              OperationModeEnum: PumpOperationMode
+      enum values:
+          PowerSource:
+              WiredFaultEnum:
+                  Unspecified: Unspecfied
+              BatFaultEnum:
+                  Unspecified: Unspecfied
+      bitmaps:
+          PumpConfigurationAndControl:
+              PumpStatusBitmap: PumpStatus
+      bitmap values:
+          PumpConfigurationAndControl:
+              PumpFeature:
+                  LocalOperation: Local
+
+- release: "Fall 2023"
+  versions:
+      iOS: "17.0"
+      macOS: "14.0"
+      watchOS: "10.0"
+      tvOS: "17.0"
+  introduced:
+      attributes:
+          BasicInformation:
+              - ProductAppearance
+          BridgedDeviceBasicInformation:
+              - ProductAppearance
+      structs:
+          AccessControl:
+              - AccessControlTargetStruct
+          BasicInformation:
+              - ProductAppearanceStruct
+          BridgedDeviceBasicInformation:
+              - ProductAppearanceStruct
+          NetworkCommissioning:
+              - WiFiInterfaceScanResultStruct
+              - ThreadInterfaceScanResultStruct
+              - NetworkInfoStruct
+          ThreadNetworkDiagnostics:
+              - NeighborTableStruct
+              - RouteTableStruct
+      struct fields:
+          AccessControl:
+              AccessControlTargetStruct:
+                  - cluster
+                  - endpoint
+                  - deviceType
+          BasicInformation:
+              ProductAppearanceStruct:
+                  - finish
+                  - primaryColor
+          BridgedDeviceBasicInformation:
+              ProductAppearanceStruct:
+                  - finish
+                  - primaryColor
+          NetworkCommissioning:
+              WiFiInterfaceScanResultStruct:
+                  - security
+                  - ssid
+                  - bssid
+                  - channel
+                  - wiFiBand
+                  - rssi
+              ThreadInterfaceScanResultStruct:
+                  - panId
+                  - extendedPanId
+                  - networkName
+                  - channel
+                  - version
+                  - extendedAddress
+                  - rssi
+                  - lqi
+              NetworkInfoStruct:
+                  - networkID
+                  - connected
+          ThreadNetworkDiagnostics:
+              NeighborTableStruct:
+                  - extAddress
+                  - age
+                  - rloc16
+                  - linkFrameCounter
+                  - mleFrameCounter
+                  - lqi
+                  - averageRssi
+                  - lastRssi
+                  - frameErrorRate
+                  - messageErrorRate
+                  - rxOnWhenIdle
+                  - fullThreadDevice
+                  - fullNetworkData
+                  - isChild
+              RouteTableStruct:
+                  - extAddress
+                  - rloc16
+                  - routerId
+                  - nextHop
+                  - pathCost
+                  - lqiIn
+                  - lqiOut
+                  - age
+                  - allocated
+                  - linkEstablished
+      enums:
+          BasicInformation:
+              - ColorEnum
+              - ProductFinishEnum
+          BridgedDeviceBasicInformation:
+              - ColorEnum
+              - ProductFinishEnum
+          FanControl:
+              - FanModeEnum
+              - FanModeSequenceEnum
+      enum values:
+          BasicInformation:
+              ColorEnum:
+                  - Black
+                  - Navy
+                  - Green
+                  - Teal
+                  - Maroon
+                  - Purple
+                  - Olive
+                  - Gray
+                  - Blue
+                  - Lime
+                  - Aqua
+                  - Red
+                  - Fuchsia
+                  - Yellow
+                  - White
+                  - Nickel
+                  - Chrome
+                  - Brass
+                  - Copper
+                  - Silver
+                  - Gold
+              ProductFinishEnum:
+                  - Matte
+                  - Satin
+                  - Polished
+                  - Rugged
+                  - Fabric
+                  - Other
+          BridgedDeviceBasicInformation:
+              ColorEnum:
+                  - Black
+                  - Navy
+                  - Green
+                  - Teal
+                  - Maroon
+                  - Purple
+                  - Olive
+                  - Gray
+                  - Blue
+                  - Lime
+                  - Aqua
+                  - Red
+                  - Fuchsia
+                  - Yellow
+                  - White
+                  - Nickel
+                  - Chrome
+                  - Brass
+                  - Copper
+                  - Silver
+                  - Gold
+              ProductFinishEnum:
+                  - Matte
+                  - Satin
+                  - Polished
+                  - Rugged
+                  - Fabric
+                  - Other
+          FanControl:
+              FanModeEnum:
+                  - Off
+                  - Low
+                  - Medium
+                  - High
+                  - On
+                  - Auto
+                  - Smart
+              FanModeSequenceEnum:
+                  - OffLowMedHigh
+                  - OffLowHigh
+                  - OffLowMedHighAuto
+                  - OffLowHighAuto
+                  - OffOnAuto
+                  - OffOn
+          NetworkCommissioning:
+              # WiFiBandEnum was originally just named WiFiBand, but we generate
+              # the same API for both of those names, so the name can just
+              # change here.
+              WiFiBandEnum:
+                  - 1G
+          WiFiNetworkDiagnostics:
+              WiFiVersionEnum:
+                  - Ah
+          Identify:
+              IdentifyTypeEnum:
+                  - LightOutput
+                  - VisibleIndicator
+      bitmaps:
+          Groups:
+              - Feature
+              - NameSupportBitmap
+          NetworkCommissioning:
+              - WiFiSecurityBitmap
+          PressureMeasurement:
+              - Feature
+          PumpConfigurationAndControl:
+              - Feature
+          Scenes:
+              - Feature
+          FanControl:
+              - RockBitmap
+              - WindBitmap
+      bitmap values:
+          FanControl:
+              RockBitmap:
+                  - RockLeftRight
+                  - RockUpDown
+                  - RockRound
+              WindBitmap:
+                  - SleepWind
+                  - NaturalWind
+          Groups:
+              Feature:
+                  - GroupNames
+              NameSupportBitmap:
+                  - GroupNames
+          ModeSelect:
+              Feature:
+                  - OnOff
+          NetworkCommissioning:
+              WiFiSecurityBitmap:
+                  - Unencrypted
+                  - WEP
+                  - WPAPersonal
+                  - WPA2Personal
+                  - WPA3Personal
+          PressureMeasurement:
+              Feature:
+                  - Extended
+          PumpConfigurationAndControl:
+              Feature:
+                  - ConstantPressure
+                  - CompensatedPressure
+                  - ConstantFlow
+                  - ConstantSpeed
+                  - ConstantTemperature
+                  - Automatic
+                  - LocalOperation
+          Scenes:
+              Feature:
+                  - SceneNames
+          Thermostat:
+              Feature:
+                  - LocalTemperatureNotExposed
+      ids:
+          attributes:
+              TimeSynchronization:
+                  - TrustedTimeSource
+                  - DefaultNTP
+                  - NTPServerAvailable
+  deprecated:
+      clusters:
+          # We apparently forgot to deprecate BridgedDeviceBasic when we
+          # introduced BridgedDeviceBasicInformation.
+          - BridgedDeviceBasic
+      enum values:
+          Identify:
+              IdentifyTypeEnum:
+                  - VisibleLight
+                  - VisibleLED
+      structs:
+          AccessControl:
+              - Target
+          NetworkCommissioning:
+              - WiFiInterfaceScanResult
+              - ThreadInterfaceScanResult
+              - NetworkInfo
+          ThreadNetworkDiagnostics:
+              - NeighborTable
+              - RouteTable
+      enums:
+          FanControl:
+              - FanModeType
+              - FanModeSequenceType
+      bitmaps:
+          Groups:
+              - GroupClusterFeature
+          NetworkCommissioning:
+              - WiFiSecurity
+          PressureMeasurement:
+              - PressureFeature
+          PumpConfigurationAndControl:
+              - PumpFeature
+          FanControl:
+              - RockSupportMask
+              - WindSupportMask
+      bitmap values:
+          ModeSelect:
+              Feature:
+                  - DEPONOFF
+  renames:
+      attributes:
+          TimeSynchronization:
+              TrustedTimeSource: TrustedTimeNodeId
+              DefaultNTP: DefaultNtp
+              NTPServerAvailable: NtpServerPort
+      commands:
+          TimeSynchronization:
+              SetUTCTime: SetUtcTime
+      structs:
+          AccessControl:
+              AccessControlTargetStruct: Target
+          NetworkCommissioning:
+              WiFiInterfaceScanResultStruct: WiFiInterfaceScanResult
+              ThreadInterfaceScanResultStruct: ThreadInterfaceScanResult
+              NetworkInfoStruct: NetworkInfo
+          ThreadNetworkDiagnostics:
+              NeighborTableStruct: NeighborTable
+              RouteTableStruct: RouteTable
+      enums:
+          FanControl:
+              FanModeEnum: FanModeType
+              FanModeSequenceEnum: FanModeSequenceType
+      enum values:
+          TimeSynchronization:
+              TimeSourceEnum:
+                  NonMatterSNTP: NonFabricSntp
+                  NonMatterNTP: NonFabricNtp
+                  MatterSNTP: FabricSntp
+                  MatterNTP: FabricNtp
+                  MixedNTP: MixedNtp
+                  NonMatterSNTPNTS: NonFabricSntpNts
+                  NonMatterNTPNTS: NonFabricNtpNts
+                  MatterSNTPNTS: FabricSntpNts
+                  MatterNTPNTS: FabricNtpNts
+                  MixedNTPNTS: MixedNtpNts
+                  PTP: Ptp
+                  GNSS: Gnss
+          Identify:
+              IdentifyTypeEnum:
+                  LightOutput: VisibleLight
+                  VisibleIndicator: VisibleLED
+      bitmaps:
+          Groups:
+              Feature: GroupClusterFeature
+          NetworkCommissioning:
+              WiFiSecurityBitmap: WiFiSecurity
+          PressureMeasurement:
+              Feature: PressureFeature
+          PumpConfigurationAndControl:
+              Feature: PumpFeature
+          FanControl:
+              RockBitmap: RockSupportMask
+              WindBitmap: WindSupportMask
+      bitmap values:
+          ModeSelect:
+              Feature:
+                  OnOff: DEPONOFF
+  swiftUnavailable:
+      bitmap values:
+          NetworkCommissioning:
+              WiFiSecurity:
+                  # The bitmap got renamed to WiFiSecurityBitmap, so now both
+                  # the Wpa* and WPA* names on WiFiSecurity are deprecated.
+                  # They get mapped to Swift with identical names, which leads
+                  # to the names being ambiguous.  Mark the "Wpa*" as
+                  # unavailable to Swift to work around this.
+                  - WpaPersonal
+                  - Wpa2Personal
+                  - Wpa3Personal
+  provisional:
+      clusters:
+          ## Not ready at cutoff
+          - AirQuality
+          # Replaceable Monitoring clusters
+          - HEPAFilterMonitoring
+          - ActivatedCarbonFilterMonitoring
+          # Concentration Measurement clusters
+          - CarbonDioxideConcentrationMeasurement
+          - CarbonMonoxideConcentrationMeasurement
+          - FormaldehydeConcentrationMeasurement
+          - NitrogenDioxideConcentrationMeasurement
+          - OzoneConcentrationMeasurement
+          - PM10ConcentrationMeasurement
+          - PM1ConcentrationMeasurement
+          - PM25ConcentrationMeasurement
+          - RadonConcentrationMeasurement
+          - TotalVolatileOrganicCompoundsConcentrationMeasurement
+          - RefrigeratorAlarm
+          - TemperatureControl
+          - SmokeCOAlarm
+          ## Not ready to be public API yet.
+          - ICDManagement
+          - LaundryWasherMode
+          - RefrigeratorAndTemperatureControlledCabinetMode
+          - DishwasherMode
+          - LaundryWasherControls
+          - DishwasherAlarm
+          - SampleMEI
+      attributes:
+          Scenes:
+              # New scenes bits not stable yet.
+              - SceneTableSize
+          FanControl:
+              # New Fan Control bits not stable yet.
+              - AirflowDirection
+          RVCCleanMode:
+              # People are trying to deprecate this one
+              - OnMode
+          RVCRunMode:
+              # People are trying to deprecate this one
+              - OnMode
+      commands:
+          FanControl:
+              # Not stable yet
+              - Step
+          DoorLock:
+              # Not stable yet
+              - UnboltDoor
+          RVCOperationalState:
+              # Disallowed in the spec, but present in our XML?
+              - Start
+              - Stop
+      enums:
+          FanControl:
+              # Not stable yet.
+              - StepDirectionEnum
+              - AirflowDirectionEnum
+      enum values:
+          DoorLock:
+              # Not stable yet
+              DlLockState:
+                  - Unlatched
+              DlLockType:
+                  - Eurocylinder
+              LockOperationTypeEnum:
+                  - Unlatch
+          TimeSynchronization:
+              TimeSourceEnum:
+                  - NonMatterSNTP
+                  - NonMatterNTP
+                  - MatterSNTP
+                  - MatterNTP
+                  - MixedNTP
+                  - NonMatterSNTPNTS
+                  - NonMatterNTPNTS
+                  - MatterSNTPNTS
+                  - MatterNTPNTS
+                  - MixedNTPNTS
+                  - PTP
+                  - GNSS
+      bitmap values:
+          DoorLock:
+              # Not stable yet
+              # Feature was originally named DoorLockFeature, but we generate the
+              # same API for both of those names, so the name can just change
+              # here.
+              Feature:
+                  - Unbolt
+          FanControl:
+              # Not stable yet
+              Feature:
+                  - Step
+                  - AirflowDirection
+          RVCRunMode:
+              Feature:
+                  # People are trying to deprecate this one
+                  - OnOff
+          RVCCleanMode:
+              Feature:
+                  # People are trying to deprecate this one
+                  - OnOff
+      global attributes:
+          - EventList
+      # Once we actually unmark TimeSynchronization as provisional, all these bits except EventList should go away too, and we should instead
+      # mark things as introduced/deprecated as needed.  The "ids" entries should go away, in particular.
+      ids:
+          attributes:
+              TimeSynchronization:
+                  - TimeZoneListMaxSize
+                  - DSTOffsetListMaxSize
+                  - SupportsDNSResolve
+                  # Because we are special-casing ids for TimeSynchronization
+                  # above, we need to explicitly mark the EventList id
+                  # provisional.
+                  - EventList
+              PulseWidthModulation:
+                  # Because we are special-casing ids for PulseWidthModulation
+                  # above, we need to explicitly mark the EventList id
+                  # provisional.
+                  - EventList
+          commands:
+              TimeSynchronization:
+                  - SetUTCTime
+                  - SetTrustedTimeSource
+                  - SetTimeZone
+                  - SetTimeZoneResponse
+                  - SetDSTOffset
+                  - SetDefaultNTP
+          events:
+              TimeSynchronization:
+                  - DSTTableEmpty
+                  - DSTStatus
+                  - TimeZoneStatus
+                  - TimeFailure
+                  - MissingTrustedTimeSource
+
+- release: "Fall 2023 #2"
+  versions:
+      iOS: "17.1"
+      macOS: "14.1"
+      watchOS: "10.1"
+      tvOS: "17.1"
+  introduced:
+      bitmaps:
+          TimeFormatLocalization:
+              - Feature
+      bitmap values:
+          OnOff:
+              Feature:
+                  - DeadFront
+          TimeFormatLocalization:
+              Feature:
+                  - CalendarFormat
+  provisional:
+      attributes:
+          Descriptor:
+              - TagList
+      structs:
+          # New things, not quite finalized.
+          Descriptor:
+              - SemanticTagStruct
+      struct fields:
+          # New things, not quite finalized.
+          Descriptor:
+              SemanticTagStruct:
+                  - mfgCode
+                  - namespaceID
+                  - tag
+                  - label
+      bitmaps:
+          # CacheAndSync is provisional in the spec.
+          GroupKeyManagement:
+              - Feature
+          # New things, not quite finalized.
+          Descriptor:
+              - Feature
+      bitmap values:
+          # New things, not quite finalized.
+          Descriptor:
+              Feature:
+                  - TagList
+          # CacheAndSync is provisional in the spec.
+          GroupKeyManagement:
+              Feature:
+                  - CacheAndSync
+          # Scenes are generally provisional for now.
+          Scenes:
+              Feature:
+                  - Explicit
+                  - TableSize
+                  - FabricScenes
+  removed:
+      clusters:
+          # Clusters that really should just not be exposed, even if they're in our XML.
+          - FaultInjection
+          # Clusters that are not going to end up shipping in their current form,
+          # so we should not be exposing the bits we expose now.
+          - ProxyConfiguration
+          - ProxyDiscovery
+          - ProxyValid
+
+- release: "Fall 2023 #3"
+  versions:
+      iOS: "17.2"
+      macOS: "14.2"
+      watchOS: "10.2"
+      tvOS: "17.2"
+  introduced:
+      command payloads:
+          TimeSynchronization:
+              - SetUTCTime
+      command fields:
+          TimeSynchronization:
+              SetUTCTime:
+                  - utcTime
+                  - granularity
+                  - timeSource
+      enums:
+          OTASoftwareUpdateProvider:
+              - StatusEnum
+              - ApplyUpdateActionEnum
+              - DownloadProtocolEnum
+          OTASoftwareUpdateRequestor:
+              - AnnouncementReasonEnum
+              - UpdateStateEnum
+              - ChangeReasonEnum
+      enum values:
+          OTASoftwareUpdateProvider:
+              StatusEnum:
+                  - UpdateAvailable
+                  - Busy
+                  - NotAvailable
+                  - DownloadProtocolNotSupported
+              ApplyUpdateActionEnum:
+                  - Proceed
+                  - AwaitNextAction
+                  - Discontinue
+              DownloadProtocolEnum:
+                  - BDXSynchronous
+                  - BDXAsynchronous
+                  - HTTPS
+                  - VendorSpecific
+          OTASoftwareUpdateRequestor:
+              AnnouncementReasonEnum:
+                  - SimpleAnnouncement
+                  - UpdateAvailable
+                  - UrgentUpdateAvailable
+              UpdateStateEnum:
+                  - Unknown
+                  - Idle
+                  - Querying
+                  - DelayedOnQuery
+                  - Downloading
+                  - Applying
+                  - DelayedOnApply
+                  - RollingBack
+                  - DelayedOnUserConsent
+              ChangeReasonEnum:
+                  - Unknown
+                  - Success
+                  - Failure
+                  - TimeOut
+                  - DelayByProvider
+          OnOff:
+              DelayedAllOffEffectVariantEnum:
+                  - DelayedOffFastFade
+                  - DelayedOffSlowFade
+              DyingLightEffectVariantEnum:
+                  - DyingLightFadeOff
+              StartUpOnOffEnum:
+                  - Toggle
+      bitmaps:
+          OnOff:
+              - OnOffControlBitmap
+      bitmap values:
+          OnOff:
+              Feature:
+                  - DeadFrontBehavior
+              OnOffControlBitmap:
+                  - AcceptOnlyWhenOn
+  deprecated:
+      enums:
+          OTASoftwareUpdateProvider:
+              - OTAQueryStatus
+              - OTAApplyUpdateAction
+              - OTADownloadProtocol
+          OTASoftwareUpdateRequestor:
+              - OTAAnnouncementReason
+              - OTAUpdateStateEnum
+              - OTAChangeReasonEnum
+      enum values:
+          OnOff:
+              DelayedAllOffEffectVariantEnum:
+                  - FadeToOffIn0p8Seconds
+                  - 50PercentDimDownIn0p8SecondsThenFadeToOffIn12Seconds
+              DyingLightEffectVariantEnum:
+                  - 20PercenterDimUpIn0p5SecondsThenFadeToOffIn1Second
+              StartUpOnOffEnum:
+                  - TogglePreviousOnOff
+      bitmaps:
+          OnOff:
+              - OnOffControl
+      bitmap values:
+          OnOff:
+              Feature:
+                  - DeadFront
+  provisional:
+      bitmaps:
+          BarrierControl:
+              - BarrierControlCapabilities
+              - BarrierControlSafetyStatus
+          BallastConfiguration:
+              # The BallastConfiguration cluster is provisional for now, but not marked that way.
+              - BallastStatusBitmap
+              - LampAlarmModeBitmap
+      attributes:
+          GeneralDiagnostics:
+              # Not in the spec yet.
+              - AverageWearCount
+              # New things, not quite finalized.
+  renames:
+      enums:
+          OTASoftwareUpdateProvider:
+              StatusEnum: OTAQueryStatus
+              ApplyUpdateActionEnum: OTAApplyUpdateAction
+              DownloadProtocolEnum: OTADownloadProtocol
+          OTASoftwareUpdateRequestor:
+              AnnouncementReasonEnum: OTAAnnouncementReason
+              UpdateStateEnum: OTAUpdateStateEnum
+              ChangeReasonEnum: OTAChangeReasonEnum
+      enum values:
+          OnOff:
+              DelayedAllOffEffectVariantEnum:
+                  DelayedOffFastFade: FadeToOffIn0p8Seconds
+                  DelayedOffSlowFade: 50PercentDimDownIn0p8SecondsThenFadeToOffIn12Seconds
+              DyingLightEffectVariantEnum:
+                  DyingLightFadeOff: 20PercenterDimUpIn0p5SecondsThenFadeToOffIn1Second
+              StartUpOnOffEnum:
+                  Toggle: TogglePreviousOnOff
+      bitmaps:
+          OnOff:
+              OnOffControlBitmap: OnOffControl
+      bitmap values:
+          OnOff:
+              Feature:
+                  DeadFrontBehavior: DeadFront
+
+- release: "Early 2024"
+  versions:
+      iOS: "17.4"
+      macOS: "14.4"
+      watchOS: "10.4"
+      tvOS: "17.4"
+  introduced:
+      clusters:
+          - RVCRunMode
+          - RVCCleanMode
+          - RVCOperationalState
+          - OperationalState
+      attributes:
+          RVCRunMode:
+              - SupportedModes
+              - CurrentMode
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          RVCCleanMode:
+              - SupportedModes
+              - CurrentMode
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          RVCOperationalState:
+              - PhaseList
+              - CurrentPhase
+              - CountdownTime
+              - OperationalStateList
+              - OperationalState
+              - OperationalError
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          OperationalState:
+              - PhaseList
+              - CurrentPhase
+              - CountdownTime
+              - OperationalStateList
+              - OperationalState
+              - OperationalError
+              - GeneratedCommandList
+              - AcceptedCommandList
+              - AttributeList
+              - FeatureMap
+              - ClusterRevision
+          PowerSource:
+              - EndpointList
+      commands:
+          RVCRunMode:
+              - ChangeToMode
+              - ChangeToModeResponse
+          RVCCleanMode:
+              - ChangeToMode
+              - ChangeToModeResponse
+          RVCOperationalState:
+              - Pause
+              - Resume
+              - OperationalCommandResponse
+          OperationalState:
+              - Start
+              - Stop
+              - Pause
+              - Resume
+              - OperationalCommandResponse
+      command fields:
+          RVCRunMode:
+              ChangeToMode:
+                  - newMode
+              ChangeToModeResponse:
+                  - status
+                  - statusText
+          RVCCleanMode:
+              ChangeToMode:
+                  - newMode
+              ChangeToModeResponse:
+                  - status
+                  - statusText
+          RVCOperationalState:
+              OperationalCommandResponse:
+                  - commandResponseState
+          OperationalState:
+              OperationalCommandResponse:
+                  - commandResponseState
+      structs:
+          RVCOperationalState:
+              - OperationalStateStruct
+              - ErrorStateStruct
+          RVCRunMode:
+              - ModeTagStruct
+              - ModeOptionStruct
+          RVCCleanMode:
+              - ModeTagStruct
+              - ModeOptionStruct
+          OperationalState:
+              - OperationalStateStruct
+              - ErrorStateStruct
+          Thermostat:
+              - WeeklyScheduleTransitionStruct
+      struct fields:
+          RVCOperationalState:
+              OperationalStateStruct:
+                  - operationalStateID
+                  - operationalStateLabel
+              ErrorStateStruct:
+                  - errorStateID
+                  - errorStateLabel
+                  - errorStateDetails
+          RVCRunMode:
+              ModeTagStruct:
+                  - mfgCode
+                  - value
+              ModeOptionStruct:
+                  - label
+                  - mode
+                  - modeTags
+          RVCCleanMode:
+              ModeTagStruct:
+                  - mfgCode
+                  - value
+              ModeOptionStruct:
+                  - label
+                  - mode
+                  - modeTags
+          OperationalState:
+              OperationalStateStruct:
+                  - operationalStateID
+                  - operationalStateLabel
+              ErrorStateStruct:
+                  - errorStateID
+                  - errorStateLabel
+                  - errorStateDetails
+          Thermostat:
+              WeeklyScheduleTransitionStruct:
+                  - transitionTime
+                  - heatSetpoint
+                  - coolSetpoint
+      events:
+          RVCOperationalState:
+              - OperationalError
+              - OperationCompletion
+          OperationalState:
+              - OperationalError
+              - OperationCompletion
+      event fields:
+          WiFiNetworkDiagnostics:
+              AssociationFailure:
+                  - associationFailureCause
+          RVCOperationalState:
+              OperationalError:
+                  - errorState
+              OperationCompletion:
+                  - completionErrorCode
+                  - totalOperationalTime
+                  - pausedTime
+          OperationalState:
+              OperationalError:
+                  - errorState
+              OperationCompletion:
+                  - completionErrorCode
+                  - totalOperationalTime
+                  - pausedTime
+      enums:
+          ContentLauncher:
+              - StatusEnum
+          KeypadInput:
+              - CECKeyCodeEnum
+          ThermostatUserInterfaceConfiguration:
+              - KeypadLockoutEnum
+              - ScheduleProgrammingVisibilityEnum
+              - TemperatureDisplayModeEnum
+          RVCOperationalState:
+              - OperationalStateEnum
+              - ErrorStateEnum
+          RVCRunMode:
+              - ModeTag
+              - StatusCode
+          RVCCleanMode:
+              - ModeTag
+              - StatusCode
+          OperationalState:
+              - OperationalStateEnum
+              - ErrorStateEnum
+          Thermostat:
+              - ControlSequenceOfOperationEnum
+              - SetpointRaiseLowerModeEnum
+      enum values:
+          ContentLauncher:
+              StatusEnum:
+                  - Success
+                  - URLNotAvailable
+                  - AuthFailed
+          FanControl:
+              FanModeSequenceEnum:
+                  - OffHighAuto
+                  - OffHigh
+          KeypadInput:
+              CECKeyCodeEnum:
+                  - Select
+                  - Up
+                  - Down
+                  - Left
+                  - Right
+                  - RightUp
+                  - RightDown
+                  - LeftUp
+                  - LeftDown
+                  - RootMenu
+                  - SetupMenu
+                  - ContentsMenu
+                  - FavoriteMenu
+                  - Exit
+                  - MediaTopMenu
+                  - MediaContextSensitiveMenu
+                  - NumberEntryMode
+                  - Number11
+                  - Number12
+                  - Number0OrNumber10
+                  - Numbers1
+                  - Numbers2
+                  - Numbers3
+                  - Numbers4
+                  - Numbers5
+                  - Numbers6
+                  - Numbers7
+                  - Numbers8
+                  - Numbers9
+                  - Dot
+                  - Enter
+                  - Clear
+                  - NextFavorite
+                  - ChannelUp
+                  - ChannelDown
+                  - PreviousChannel
+                  - SoundSelect
+                  - InputSelect
+                  - DisplayInformation
+                  - Help
+                  - PageUp
+                  - PageDown
+                  - Power
+                  - VolumeUp
+                  - VolumeDown
+                  - Mute
+                  - Play
+                  - Stop
+                  - Pause
+                  - Record
+                  - Rewind
+                  - FastForward
+                  - Eject
+                  - Forward
+                  - Backward
+                  - StopRecord
+                  - PauseRecord
+                  - Reserved
+                  - Angle
+                  - SubPicture
+                  - VideoOnDemand
+                  - ElectronicProgramGuide
+                  - TimerProgramming
+                  - InitialConfiguration
+                  - SelectBroadcastType
+                  - SelectSoundPresentation
+                  - PlayFunction
+                  - PausePlayFunction
+                  - RecordFunction
+                  - PauseRecordFunction
+                  - StopFunction
+                  - MuteFunction
+                  - RestoreVolumeFunction
+                  - TuneFunction
+                  - SelectMediaFunction
+                  - SelectAvInputFunction
+                  - SelectAudioInputFunction
+                  - PowerToggleFunction
+                  - PowerOffFunction
+                  - PowerOnFunction
+                  - F1Blue
+                  - F2Red
+                  - F3Green
+                  - F4Yellow
+                  - F5
+                  - Data
+          ThermostatUserInterfaceConfiguration:
+              KeypadLockoutEnum:
+                  - NoLockout
+                  - Lockout1
+                  - Lockout2
+                  - Lockout3
+                  - Lockout4
+                  - Lockout5
+              ScheduleProgrammingVisibilityEnum:
+                  - ScheduleProgrammingPermitted
+                  - ScheduleProgrammingDenied
+              TemperatureDisplayModeEnum:
+                  - Celsius
+                  - Fahrenheit
+          RVCOperationalState:
+              OperationalStateEnum:
+                  - SeekingCharger
+                  - Charging
+                  - Docked
+              ErrorStateEnum:
+                  - FailedToFindChargingDock
+                  - Stuck
+                  - DustBinMissing
+                  - DustBinFull
+                  - WaterTankEmpty
+                  - WaterTankMissing
+                  - WaterTankLidOpen
+                  - MopCleaningPadMissing
+          RVCRunMode:
+              ModeTag:
+                  - Idle
+                  - Cleaning
+              StatusCode:
+                  - Stuck
+                  - DustBinMissing
+                  - DustBinFull
+                  - WaterTankEmpty
+                  - WaterTankMissing
+                  - WaterTankLidOpen
+                  - MopCleaningPadMissing
+                  - BatteryLow
+          RVCCleanMode:
+              ModeTag:
+                  - DeepClean
+                  - Vacuum
+                  - Mop
+              StatusCode:
+                  - CleaningInProgress
+          OperationalState:
+              OperationalStateEnum:
+                  - Stopped
+                  - Running
+                  - Paused
+                  - Error
+              ErrorStateEnum:
+                  - NoError
+                  - UnableToStartOrResume
+                  - UnableToCompleteOperation
+                  - CommandInvalidInState
+          Thermostat:
+              ControlSequenceOfOperationEnum:
+                  - CoolingOnly
+                  - CoolingWithReheat
+                  - HeatingOnly
+                  - HeatingWithReheat
+                  - CoolingAndHeating
+                  - CoolingAndHeatingWithReheat
+              SetpointRaiseLowerModeEnum:
+                  - Heat
+                  - Cool
+                  - Both
+      bitmaps:
+          Scenes:
+              - CopyModeBitmap
+          AdministratorCommissioning:
+              - Feature
+          ContentLauncher:
+              - SupportedProtocolsBitmap
+          LevelControl:
+              - OptionsBitmap
+          RVCRunMode:
+              - Feature
+          RVCCleanMode:
+              - Feature
+          Thermostat:
+              - ScheduleDayOfWeekBitmap
+              - ScheduleModeBitmap
+      bitmap values:
+          PumpConfigurationAndControl:
+              PumpStatusBitmap:
+                  - SupplyFault
+          Scenes:
+              CopyModeBitmap:
+                  - CopyAllScenes
+          SoftwareDiagnostics:
+              Feature:
+                  - Watermarks
+          AdministratorCommissioning:
+              Feature:
+                  - Basic
+          ContentLauncher:
+              SupportedProtocolsBitmap:
+                  - DASH
+                  - HLS
+          LevelControl:
+              OptionsBitmap:
+                  - ExecuteIfOff
+                  - CoupleColorTempToLevel
+          Thermostat:
+              ScheduleDayOfWeekBitmap:
+                  - Sunday
+                  - Monday
+                  - Tuesday
+                  - Wednesday
+                  - Thursday
+                  - Friday
+                  - Saturday
+                  - Away
+              ScheduleModeBitmap:
+                  - HeatSetpointPresent
+                  - CoolSetpointPresent
+  deprecated:
+      structs:
+          Thermostat:
+              - ThermostatScheduleTransition
+      event fields:
+          WiFiNetworkDiagnostics:
+              AssociationFailure:
+                  - associationFailure
+      enums:
+          ContentLauncher:
+              - ContentLaunchStatusEnum
+          KeypadInput:
+              - CecKeyCode
+          Thermostat:
+              - ThermostatControlSequence
+              - SetpointAdjustMode
+      enum values:
+          FanControl:
+              FanModeSequenceEnum:
+                  - OffOnAuto
+                  - OffOn
+      bitmaps:
+          Scenes:
+              - ScenesCopyMode
+          ContentLauncher:
+              - SupportedStreamingProtocol
+          LevelControl:
+              - LevelControlOptions
+          Thermostat:
+              - DayOfWeek
+              - ModeForSequence
+      bitmap values:
+          PumpConfigurationAndControl:
+              PumpStatusBitmap:
+                  - Supplyfault
+          SoftwareDiagnostics:
+              Feature:
+                  - WaterMarks
+  provisional:
+      clusters:
+          # Targeting Spring 2024 Matter release
+          - MicrowaveOvenControl
+          - MicrowaveOvenMode
+          - DemandResponseLoadControl
+          - BooleanStateConfiguration
+          - ValveConfigurationAndControl
+          - Timer
+          - OvenMode
+          - LaundryDryerControls
+          - EnergyEVSE
+          - OvenCavityOperationalState
+          - ContentControl
+          - ContentAppObserver
+          - DeviceEnergyManagement
+          - ElectricalEnergyMeasurement
+          - EnergyPreference
+          - ScenesManagement
+      attributes:
+          NetworkCommissioning:
+              # Targeting Spring 2024 Matter release
+              - SupportedWiFiBands
+              - SupportedThreadFeatures
+              - ThreadVersion
+          WakeOnLAN:
+              # Targeting Spring 2024 Matter release
+              - LinkLocalAddress
+          BasicInformation:
+              # Targeting Spring 2024 Matter release
+              - SpecificationVersion
+              - MaxPathsPerInvoke
+          Scenes:
+              # Targeting Spring 2024 Matter release
+              - FabricSceneInfo
+          MediaPlayback:
+              # Targeting Spring 2024 Matter release
+              - ActiveAudioTrack
+              - AvailableAudioTracks
+              - ActiveTextTrack
+              - AvailableTextTracks
+      commands:
+          GeneralDiagnostics:
+              # Targeting Spring 2024 Matter release
+              - TimeSnapshot
+              - TimeSnapshotResponse
+          NetworkCommissioning:
+              # Targeting Spring 2024 Matter release
+              - QueryIdentity
+              - QueryIdentityResponse
+          Channel:
+              # Targeting Spring 2024 Matter release
+              - GetProgramGuide
+              - ProgramGuideResponse
+              - RecordProgram
+              - CancelRecordProgram
+          MediaPlayback:
+              # Targeting Spring 2024 Matter release
+              - ActivateAudioTrack
+              - ActivateTextTrack
+              - DeactivateTextTrack
+          UnitTesting:
+              # Ideally none of UnitTesting would be exposed as public API, but
+              # for now just start doing that for new additions to it.
+              - TestBatchHelperResponse
+              - TestBatchHelperRequest
+              - TestSecondBatchHelperRequest
+      command fields:
+          NetworkCommissioning:
+              # Targeting Spring 2024 Matter release
+              AddOrUpdateWiFiNetwork:
+                  - networkIdentity
+                  - clientIdentifier
+                  - possessionNonce
+              NetworkConfigResponse:
+                  - clientIdentity
+                  - possessionSignature
+              QueryIdentity:
+                  - keyIdentifier
+                  - possessionNonce
+              QueryIdentityResponse:
+                  - identity
+                  - possessionSignature
+          MediaPlayback:
+              # Targeting Spring 2024 Matter release
+              Rewind:
+                  - audioAdvanceUnmuted
+              FastForward:
+                  - audioAdvanceUnmuted
+          ContentLauncher:
+              # Targeting Spring 2024 Matter release
+              LaunchContent:
+                  - playbackPreferences
+                  - useCurrentContext
+          AccountLogin:
+              # Targeting Spring 2024 Matter release
+              Login:
+                  - node
+              Logout:
+                  - node
+      structs:
+          Scenes:
+              # Targeting Spring 2024 Matter release
+              - SceneInfoStruct
+          Channel:
+              # Targeting Spring 2024 Matter release
+              - ProgramStruct
+              - SeriesInfoStruct
+              - ProgramCategoryStruct
+              - ProgramCastStruct
+              - PageTokenStruct
+              - ChannelPagingStruct
+              - AdditionalInfoStruct
+          MediaPlayback:
+              # Targeting Spring 2024 Matter release
+              - TrackStruct
+              - TrackAttributesStruct
+          ContentLauncher:
+              # Targeting Spring 2024 Matter release
+              - PlaybackPreferencesStruct
+              - TrackPreferenceStruct
+      struct fields:
+          NetworkCommissioning:
+              # Targeting Spring 2024 Matter release
+              NetworkInfoStruct:
+                  - networkIdentifier
+                  - clientIdentifier
+          Channel:
+              # Targeting Spring 2024 Matter release
+              ChannelInfoStruct:
+                  - identifier
+                  - type
+      events:
+          MediaPlayback:
+              # Targeting Spring 2024 Matter release
+              - StateChanged
+          AccountLogin:
+              # Targeting Spring 2024 Matter release
+              - LoggedOut
+          TargetNavigator:
+              # Targeting Spring 2024 Matter release
+              - TargetUpdated
+      enums:
+          Thermostat:
+              # Targeting Spring 2024 Matter release
+              - StartOfWeekEnum
+              - TemperatureSetpointHoldEnum
+              - ACCapacityFormatEnum
+              - ACCompressorTypeEnum
+              - ACLouverPositionEnum
+              - ACRefrigerantTypeEnum
+              - ACTypeEnum
+              - SetpointChangeSourceEnum
+          Channel:
+              # Targeting Spring 2024 Matter release
+              - ChannelTypeEnum
+          MediaPlayback:
+              # Targeting Spring 2024 Matter release
+              - CharacteristicEnum
+          ContentLauncher:
+              # Targeting Spring 2024 Matter release
+              - CharacteristicEnum
+      enum values:
+          ContentLauncher:
+              # Targeting Spring 2024 Matter release
+              ParameterEnum:
+                  - Season
+                  - Episode
+                  - Any
+              StatusEnum:
+                  - TextTrackNotAvailable
+                  - AudioTrackNotAvailable
+          TimeFormatLocalization:
+              CalendarTypeEnum:
+                  - UseActiveLocale
+              HourFormatEnum:
+                  - UseActiveLocale
+      bitmaps:
+          NetworkCommissioning:
+              # Targeting Spring 2024 Matter release
+              - ThreadCapabilitiesBitmap
+          Scenes:
+              # Targeting Spring 2024 Matter release
+              - NameSupportBitmap
+          Thermostat:
+              # Targeting Spring 2024 Matter release
+              - ACErrorCodeBitmap
+              - HVACSystemTypeBitmap
+              - ProgrammingOperationModeBitmap
+              - RelayStateBitmap
+              - RemoteSensingBitmap
+          Channel:
+              # Targeting Spring 2024 Matter release
+              - RecordingFlagBitmap
+      bitmap values:
+          OnOff:
+              Feature:
+                  # Targeting Spring 2024 Matter release
+                  - OffOnly
+          NetworkCommissioning:
+              # Targeting Spring 2024 Matter release
+              Feature:
+                  - PerDeviceCredentials
+              WiFiSecurityBitmap:
+                  - WPA3MatterPDC
+          Channel:
+              # Targeting Spring 2024 Matter release
+              Feature:
+                  - ElectronicGuide
+                  - RecordProgram
+          MediaPlayback:
+              # Targeting Spring 2024 Matter release
+              Feature:
+                  - TextTracks
+                  - AudioTracks
+                  - AudioAdvance
+          ContentLauncher:
+              # Targeting Spring 2024 Matter release
+              SupportedProtocolsBitmap:
+                  - WebRTC
+              Feature:
+                  - AdvancedSeek
+                  - TextTracks
+                  - AudioTracks
+  renames:
+      structs:
+          Thermostat:
+              WeeklyScheduleTransitionStruct: ThermostatScheduleTransition
+      event fields:
+          WiFiNetworkDiagnostics:
+              AssociationFailure:
+                  associationFailureCause: associationFailure
+      enums:
+          ContentLauncher:
+              StatusEnum: ContentLaunchStatusEnum
+          KeypadInput:
+              CECKeyCodeEnum: CecKeyCode
+          Thermostat:
+              ControlSequenceOfOperationEnum: ThermostatControlSequence
+              SetpointRaiseLowerModeEnum: SetpointAdjustMode
+      enum values:
+          ContentLauncher:
+              # The URLNotAvailable value got renamed at the same time
+              # as the enum.  Record the rename here so that the old
+              # value name is generated for the old enum name.
+              ContentLaunchStatusEnum:
+                  URLNotAvailable: UrlNotAvailable
+          FanControl:
+              FanModeSequenceEnum:
+                  OffHighAuto: OffOnAuto
+                  OffHigh: OffOn
+              # FanModeSequenceType is the old name of
+              # FanModeSequenceEnum; we need this rename annotation
+              # here so we don't lose the old values under that old
+              # name.
+              FanModeSequenceType:
+                  OffHighAuto: OffOnAuto
+                  OffHigh: OffOn
+      bitmaps:
+          Scenes:
+              CopyModeBitmap: ScenesCopyMode
+          ContentLauncher:
+              SupportedProtocolsBitmap: SupportedStreamingProtocol
+          LevelControl:
+              OptionsBitmap: LevelControlOptions
+          Thermostat:
+              ScheduleDayOfWeekBitmap: DayOfWeek
+              ScheduleModeBitmap: ModeForSequence
+      bitmap values:
+          PumpConfigurationAndControl:
+              PumpStatusBitmap:
+                  SupplyFault: Supplyfault
+          SoftwareDiagnostics:
+              Feature:
+                  Watermarks: WaterMarks
+  removed:
+      clusters:
+          # Should never have been exposed in the shape it was in, and now is
+          # getting renamed and getting a new cluster id, so just removing it
+          # seems like the most sensible thing.
+          - Scenes
+      enum values:
+          ContentLauncher:
+              # The URLNotAvailable value got renamed at the same time
+              # as the enum.  The old enum name never had the new value name.
+              ContentLaunchStatusEnum:
+                  - URLNotAvailable
+
+- release: "Future"
+  versions: "future"
+  provisional:
+      clusters:
+          # Targeting Spring 2024 Matter release
+          - EnergyEVSEMode
+          - DeviceEnergyManagementMode
+          - Messages
+      attributes:
+          DoorLock:
+              # Aliro is not ready yet.
+              - AliroReaderVerificationKey
+              - AliroReaderGroupIdentifier
+              - AliroReaderGroupSubIdentifier
+              - AliroExpeditedTransactionSupportedProtocolVersions
+              - AliroGroupResolvingKey
+              - AliroSupportedBLEUWBProtocolVersions
+              - AliroBLEAdvertisingVersion
+              - NumberOfAliroCredentialIssuerKeysSupported
+              - NumberOfAliroEndpointKeysSupported
+          ICDManagement:
+              # Targeting Spring 2024 Matter release
+              - OperatingMode
+          Thermostat:
+              # Targeting Spring 2024 Matter release
+              - PresetTypes
+              - ScheduleTypes
+              - NumberOfPresets
+              - NumberOfSchedules
+              - NumberOfScheduleTransitions
+              - NumberOfScheduleTransitionPerDay
+              - ActivePresetHandle
+              - Presets
+              - Schedules
+              - PresetsSchedulesEditable
+              - TemperatureSetpointHoldPolicy
+              - SetpointHoldExpiryTimestamp
+              - QueuedPreset
+              - ActiveScheduleHandle
+          UnitTesting:
+              # Ideally none of UnitTesting would be exposed as public API, but
+              # for now just start doing that for new additions to it.
+              - MeiInt8u
+      commands:
+          DoorLock:
+              # Aliro is not ready yet.
+              - SetAliroReaderConfig
+              - ClearAliroReaderConfig
+          Thermostat:
+              # Targeting Spring 2024 Matter release
+              - SetActiveScheduleRequest
+              - SetActivePresetRequest
+              - StartPresetsSchedulesEditRequest
+              - CancelPresetsSchedulesEditRequest
+              - CommitPresetsSchedulesRequest
+              - CancelSetActivePresetRequest
+              - SetTemperatureSetpointHoldPolicy
+          RVCOperationalState:
+              # Targeting Spring 2024 Matter release
+              - GoHome
+          UnitTesting:
+              # Ideally none of UnitTesting would be exposed as public API, but
+              # for now just start doing that for new additions to it.
+              - TestDifferentVendorMeiRequest
+              - TestDifferentVendorMeiResponse
+      structs:
+          Thermostat:
+              # Targeting Spring 2024 Matter release
+              - ScheduleTransitionStruct
+              - ScheduleStruct
+              - PresetStruct
+              - PresetTypeStruct
+              - ScheduleTypeStruct
+              - QueuedPresetStruct
+      events:
+          UnitTesting:
+              # Ideally none of UnitTesting would be exposed as public API, but
+              # for now just start doing that for new additions to it.
+              - TestDifferentVendorMeiEvent
+      enums:
+          Thermostat:
+              # Targeting Spring 2024 Matter release
+              - PresetScenarioEnum
+      enum values:
+          DoorLock:
+              CredentialTypeEnum:
+                  # Aliro is not ready yet.
+                  - AliroCredentialIssuerKey
+                  - AliroEvictableEndpointKey
+                  - AliroNonEvictableEndpointKey
+              LockDataTypeEnum:
+                  # Aliro is not ready yet.
+                  - AliroCredentialIssuerKey
+                  - AliroEvictableEndpointKey
+                  - AliroNonEvictableEndpointKey
+              OperationSourceEnum:
+                  # Aliro is not ready yet.
+                  - Aliro
+          RVCRunMode:
+              ModeTag:
+                  # Targeting Spring 2024 Matter release
+                  - Mapping
+      bitmaps:
+          Thermostat:
+              # Targeting Spring 2024 Matter release
+              - PresetTypeFeaturesBitmap
+              - ScheduleTypeFeaturesBitmap
+              - TemperatureSetpointHoldPolicyBitmap
+      bitmap values:
+          DoorLock:
+              Feature:
+                  # Aliro is not ready yet.
+                  - AliroProvisioning
+                  - AliroBLEUWB
+          Thermostat:
+              Feature:
+                  # Targeting Spring 2024 Matter release
+                  - QueuedPresetsSupported
+                  - Setpoints
+                  - Presets
+                  - MatterScheduleConfiguration
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/config-data.yaml b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/config-data.yaml
new file mode 100644
index 0000000..b45974c
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/config-data.yaml
@@ -0,0 +1,36 @@
+DarwinForceWritable:
+    # Work-around for not allowing changes from writable to read-only
+    # happened in https://github.com/project-chip/connectedhomeip/pull/30134
+    - ApplicationLauncher::CurrentApp
+    - ContentLauncher::SupportedStreamingProtocols
+    - FanControl::FanModeSequence
+
+# A list of commands that used to have only optional arguments before we started
+# generating the no-params-needed variants of methods for that case.  These
+# declarations need to have availability based on when we started generating
+# those variants, not the command's own availability.
+LegacyCommandsWithOnlyOptionalArguments:
+    - NetworkCommissioning::ScanNetworks
+    - DoorLock::LockDoor
+    - DoorLock::UnlockDoor
+    - ApplicationLauncher::LaunchApp
+    - ApplicationLauncher::StopApp
+    - ApplicationLauncher::HideApp
+    - UnitTesting::TestNullableOptionalRequest
+    - UnitTesting::TestSimpleOptionalArgumentRequest
+
+# The media clusters relevant to Matter Casting
+MatterCastingClusters:
+    - Application Basic
+    - Application Launcher
+    - Content Launcher
+    - Keypad Input
+    - Level Control
+    - Media Playback
+    - On/Off
+    - Target Navigator
+    - Wake on LAN
+
+# The commands currently implemented for Matter Casting in MCCommandObjects.h/mm. We will ZAP generate this file in the next PR.
+MatterCastingImplementedCommands:
+    - LaunchURL
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/partials/decode_value.zapt b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/partials/decode_value.zapt
new file mode 100644
index 0000000..2900ce0
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/partials/decode_value.zapt
@@ -0,0 +1,57 @@
+{{#if isOptional}}
+  if ({{source}}.HasValue()) {
+    {{>decode_value target=target source=(concat source ".Value()") cluster=cluster errorCode=errorCode depth=(incrementDepth depth) isOptional=false}}
+  } else {
+    {{target}} = nil;
+  }
+{{else if isNullable}}
+  if ({{source}}.IsNull()) {
+    {{target}} = nil;
+  } else {
+    {{>decode_value target=target source=(concat source ".Value()") cluster=cluster errorCode=errorCode depth=(incrementDepth depth) isNullable=false}}
+  }
+{{else if isArray}}
+  { // Scope for our temporary variables
+    auto * array_{{depth}} = [NSMutableArray new];
+    auto iter_{{depth}} = {{source}}.begin();
+    while (iter_{{depth}}.Next()) {
+      auto & entry_{{depth}} = iter_{{depth}}.GetValue();
+      {{asObjectiveCClass type cluster forceNotList=true structTypePrefix="MC"}} * newElement_{{depth}};
+      {{>decode_value target=(concat "newElement_" depth) source=(concat "entry_" depth) cluster=cluster errorCode=errorCode depth=(incrementDepth depth) isArray=false}}
+      [array_{{depth}} addObject:newElement_{{depth}}];
+    }
+    CHIP_ERROR err = iter_{{depth}}.GetStatus();
+    if (err != CHIP_NO_ERROR) {
+      {{errorCode}}
+    }
+    {{target}} = array_{{depth}};
+  }
+{{else}}
+  {{#if_is_struct type}}
+    {{target}} = [{{asObjectiveCClass type cluster forceNotList=true structTypePrefix="MC"}} new];
+    {{#zcl_struct_items_by_struct_and_cluster_name type cluster}}
+      {{#if (isSupported (asUpperCamelCase ../cluster preserveAcronyms=true) struct=(asUpperCamelCase ../type preserveAcronyms=true) structField=(asStructPropertyName label))}}
+      {{>decode_value target=(concat ../target "." (asStructPropertyName label)) source=(concat ../source "." (asLowerCamelCase label)) cluster=../cluster errorCode=../errorCode depth=(incrementDepth ../depth) }}
+      {{/if}}
+    {{/zcl_struct_items_by_struct_and_cluster_name}}
+  {{else}}
+    {{#if_is_strongly_typed_chip_enum type}}
+      {{target}} = [NSNumber numberWith{{asObjectiveCNumberType "" type false}}:chip::to_underlying({{source}})];
+    {{else}}
+      {{#if_is_strongly_typed_bitmap type}}
+        {{target}} = [NSNumber numberWith{{asObjectiveCNumberType "" type false}}:{{source}}.Raw()];
+      {{else if (isOctetString type)}}
+        {{target}} = AsData({{source}});
+      {{else if (isCharString type)}}
+        {{target}} = AsString({{source}});
+        if ({{target}} == nil) {
+          {{! Invalid UTF-8.  Just make up an error for now. }}
+          CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+          {{errorCode}}
+        }
+      {{else}}
+        {{target}} = [NSNumber numberWith{{asObjectiveCNumberType "" type false}}:{{source}}];
+      {{/if_is_strongly_typed_bitmap}}
+    {{/if_is_strongly_typed_chip_enum}}
+  {{/if_is_struct}}
+{{/if}}
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/templates.json b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/templates.json
new file mode 100644
index 0000000..881ac38
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/templates.json
@@ -0,0 +1,50 @@
+{
+    "name": "Framework templates",
+    "version": "chip-v1",
+    "helpers": [
+        "partials/helper.js",
+        "common/ChipTypesHelper.js",
+        "common/StringHelper.js",
+        "templates/app/helper.js",
+        "templates/chip/helper.js",
+        "common/ClusterTestGeneration.js",
+        "darwin/Framework/CHIP/templates/helper.js"
+    ],
+    "resources": {
+        "availability-data": "availability.yaml",
+        "config-data": "config-data.yaml"
+    },
+    "override": "../../../../../../src/app/zap-templates/common/override.js",
+    "partials": [
+        {
+            "name": "header",
+            "path": "../../../../../../src/app/zap-templates/partials/header.zapt"
+        },
+        {
+            "name": "decode_value",
+            "path": "partials/decode_value.zapt"
+        }
+    ],
+    "templates": [
+        {
+            "path": "MCAttributeObjects.zapt",
+            "name": "Objc ZCL asynchronous API Internal Header",
+            "output": "examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.h"
+        },
+        {
+            "path": "MCAttributeObjects-src.zapt",
+            "name": "Objc ZCL asynchronous API Internal Header",
+            "output": "examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.mm"
+        },
+        {
+            "path": "MCClusterObjects.zapt",
+            "name": "Objc ZCL asynchronous API Internal Header",
+            "output": "examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.h"
+        },
+        {
+            "path": "MCClusterObjects-src.zapt",
+            "name": "Objc ZCL asynchronous API Internal Header",
+            "output": "examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.mm"
+        }
+    ]
+}
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.h
new file mode 100644
index 0000000..81184fe
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.h
@@ -0,0 +1,346 @@
+/*
+ *
+ *    Copyright (c) 2022 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import "MCStructsObjc.h"
+
+#import "../MCAttribute.h"
+#import <Foundation/Foundation.h>
+
+#ifndef MCAttributeObjects_h
+#define MCAttributeObjects_h
+
+// OnOff cluster attributes:
+
+@interface MCOnOffClusterOnOffAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCOnOffClusterGlobalSceneControlAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCOnOffClusterOnTimeAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCOnOffClusterOffWaitTimeAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCOnOffClusterStartUpOnOffAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCOnOffClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCOnOffClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCOnOffClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCOnOffClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCOnOffClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCOnOffClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// LevelControl cluster attributes:
+
+@interface MCLevelControlClusterCurrentLevelAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterRemainingTimeAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterMinLevelAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterMaxLevelAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterCurrentFrequencyAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterMinFrequencyAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterMaxFrequencyAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterOptionsAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterOnOffTransitionTimeAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterOnLevelAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterOnTransitionTimeAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterOffTransitionTimeAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterDefaultMoveRateAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterStartUpCurrentLevelAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCLevelControlClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCLevelControlClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCLevelControlClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCLevelControlClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCLevelControlClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// WakeOnLan cluster attributes:
+
+@interface MCWakeOnLanClusterMACAddressAttribute : MCAttribute <NSString *>
+@end
+
+@interface MCWakeOnLanClusterLinkLocalAddressAttribute : MCAttribute <NSData *>
+@end
+
+@interface MCWakeOnLanClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCWakeOnLanClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCWakeOnLanClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCWakeOnLanClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCWakeOnLanClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCWakeOnLanClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// TargetNavigator cluster attributes:
+
+@interface MCTargetNavigatorClusterTargetListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCTargetNavigatorClusterCurrentTargetAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCTargetNavigatorClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCTargetNavigatorClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCTargetNavigatorClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCTargetNavigatorClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCTargetNavigatorClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCTargetNavigatorClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// MediaPlayback cluster attributes:
+
+@interface MCMediaPlaybackClusterCurrentStateAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCMediaPlaybackClusterStartTimeAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCMediaPlaybackClusterDurationAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCMediaPlaybackClusterSampledPositionAttribute : MCAttribute <MCMediaPlaybackClusterPlaybackPositionStruct *>
+@end
+
+@interface MCMediaPlaybackClusterPlaybackSpeedAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCMediaPlaybackClusterSeekRangeEndAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCMediaPlaybackClusterSeekRangeStartAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCMediaPlaybackClusterActiveAudioTrackAttribute : MCAttribute <MCMediaPlaybackClusterTrackStruct *>
+@end
+
+@interface MCMediaPlaybackClusterAvailableAudioTracksAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCMediaPlaybackClusterActiveTextTrackAttribute : MCAttribute <MCMediaPlaybackClusterTrackStruct *>
+@end
+
+@interface MCMediaPlaybackClusterAvailableTextTracksAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCMediaPlaybackClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCMediaPlaybackClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCMediaPlaybackClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCMediaPlaybackClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCMediaPlaybackClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCMediaPlaybackClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// KeypadInput cluster attributes:
+
+@interface MCKeypadInputClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCKeypadInputClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCKeypadInputClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCKeypadInputClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCKeypadInputClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCKeypadInputClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// ContentLauncher cluster attributes:
+
+@interface MCContentLauncherClusterAcceptHeaderAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCContentLauncherClusterSupportedStreamingProtocolsAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCContentLauncherClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCContentLauncherClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCContentLauncherClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCContentLauncherClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCContentLauncherClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCContentLauncherClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// ApplicationLauncher cluster attributes:
+
+@interface MCApplicationLauncherClusterCatalogListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationLauncherClusterCurrentAppAttribute : MCAttribute <MCApplicationLauncherClusterApplicationEPStruct *>
+@end
+
+@interface MCApplicationLauncherClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationLauncherClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationLauncherClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationLauncherClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationLauncherClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCApplicationLauncherClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+// ApplicationBasic cluster attributes:
+
+@interface MCApplicationBasicClusterVendorNameAttribute : MCAttribute <NSString *>
+@end
+
+@interface MCApplicationBasicClusterVendorIDAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCApplicationBasicClusterApplicationNameAttribute : MCAttribute <NSString *>
+@end
+
+@interface MCApplicationBasicClusterProductIDAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCApplicationBasicClusterApplicationAttribute : MCAttribute <MCApplicationBasicClusterApplicationStruct *>
+@end
+
+@interface MCApplicationBasicClusterStatusAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCApplicationBasicClusterApplicationVersionAttribute : MCAttribute <NSString *>
+@end
+
+@interface MCApplicationBasicClusterAllowedVendorListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationBasicClusterGeneratedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationBasicClusterAcceptedCommandListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationBasicClusterEventListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationBasicClusterAttributeListAttribute : MCAttribute <NSArray *>
+@end
+
+@interface MCApplicationBasicClusterFeatureMapAttribute : MCAttribute <NSNumber *>
+@end
+
+@interface MCApplicationBasicClusterClusterRevisionAttribute : MCAttribute <NSNumber *>
+@end
+
+#endif /* MCAttributeObjects_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.mm
new file mode 100644
index 0000000..e5191ee
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCAttributeObjects.mm
@@ -0,0 +1,5629 @@
+/*
+ *
+ *    Copyright (c) 2022 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import "MCAttributeObjects.h"
+
+#import "../MCAttribute_Internal.h"
+#import "../MCCastingApp.h"
+#import "../MCErrorUtils.h"
+#import "../NSDataSpanConversion.h"
+#import "../NSStringSpanConversion.h"
+
+#include "core/Attribute.h"
+#include <app-common/zap-generated/cluster-objects.h>
+
+#import <Foundation/Foundation.h>
+
+// OnOff cluster attributes:
+
+@implementation MCOnOffClusterOnOffAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::OnOff::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithBool:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterGlobalSceneControlAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithBool:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterOnTimeAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::OnTime::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterOffWaitTimeAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::OffWaitTime::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterStartUpOnOffAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::StartUpOnOff::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedChar:chip::to_underlying(_cppValue.Value())];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCOnOffClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::OnOff::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// LevelControl cluster attributes:
+
+@implementation MCLevelControlClusterCurrentLevelAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::CurrentLevel::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedChar:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterRemainingTimeAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::RemainingTime::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterMinLevelAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::MinLevel::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedChar:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterMaxLevelAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::MaxLevel::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedChar:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterCurrentFrequencyAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterMinFrequencyAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::MinFrequency::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterMaxFrequencyAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::MaxFrequency::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterOptionsAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::Options::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedChar:_cppValue.Raw()];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterOnOffTransitionTimeAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterOnLevelAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::OnLevel::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedChar:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterOnTransitionTimeAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedShort:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterOffTransitionTimeAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedShort:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterDefaultMoveRateAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedChar:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterStartUpCurrentLevelAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedChar:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCLevelControlClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::LevelControl::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// WakeOnLan cluster attributes:
+
+@implementation MCWakeOnLanClusterMACAddressAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSString * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::MACAddress::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSString * _Nonnull value;
+        value = AsString(_cppValue);
+        if (value == nil) {
+            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+            *aError = err;
+            return nil;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCWakeOnLanClusterLinkLocalAddressAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSData * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSData * _Nonnull value;
+        value = AsData(_cppValue);
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCWakeOnLanClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCWakeOnLanClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCWakeOnLanClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCWakeOnLanClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCWakeOnLanClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCWakeOnLanClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// TargetNavigator cluster attributes:
+
+@implementation MCTargetNavigatorClusterTargetListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::TargetList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                MCTargetNavigatorClusterTargetInfoStruct * newElement_0;
+                newElement_0 = [MCTargetNavigatorClusterTargetInfoStruct new];
+                newElement_0.identifier = [NSNumber numberWithUnsignedChar:entry_0.identifier];
+                newElement_0.name = AsString(entry_0.name);
+                if (newElement_0.name == nil) {
+                    CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                    *aError = err;
+                    return nil;
+                }
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCTargetNavigatorClusterCurrentTargetAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedChar:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCTargetNavigatorClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCTargetNavigatorClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCTargetNavigatorClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCTargetNavigatorClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCTargetNavigatorClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCTargetNavigatorClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// MediaPlayback cluster attributes:
+
+@implementation MCMediaPlaybackClusterCurrentStateAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::CurrentState::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedChar:chip::to_underlying(_cppValue)];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterStartTimeAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::StartTime::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedLongLong:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterDurationAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::Duration::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedLongLong:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterSampledPositionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    MCMediaPlaybackClusterPlaybackPositionStruct * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        MCMediaPlaybackClusterPlaybackPositionStruct * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [MCMediaPlaybackClusterPlaybackPositionStruct new];
+            value.updatedAt = [NSNumber numberWithUnsignedLongLong:_cppValue.Value().updatedAt];
+            if (_cppValue.Value().position.IsNull()) {
+                value.position = nil;
+            } else {
+                value.position = [NSNumber numberWithUnsignedLongLong:_cppValue.Value().position.Value()];
+            }
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterPlaybackSpeedAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithFloat:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterSeekRangeEndAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedLongLong:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterSeekRangeStartAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [NSNumber numberWithUnsignedLongLong:_cppValue.Value()];
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterActiveAudioTrackAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    MCMediaPlaybackClusterTrackStruct * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        MCMediaPlaybackClusterTrackStruct * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [MCMediaPlaybackClusterTrackStruct new];
+            value.id = AsString(_cppValue.Value().id);
+            if (value.id == nil) {
+                CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                *aError = err;
+                return nil;
+            }
+            if (_cppValue.Value().trackAttributes.IsNull()) {
+                value.trackAttributes = nil;
+            } else {
+                value.trackAttributes = [MCMediaPlaybackClusterTrackAttributesStruct new];
+                value.trackAttributes.languageCode = AsString(_cppValue.Value().trackAttributes.Value().languageCode);
+                if (value.trackAttributes.languageCode == nil) {
+                    CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                    *aError = err;
+                    return nil;
+                }
+                if (_cppValue.Value().trackAttributes.Value().displayName.HasValue()) {
+                    if (_cppValue.Value().trackAttributes.Value().displayName.Value().IsNull()) {
+                        value.trackAttributes.displayName = nil;
+                    } else {
+                        value.trackAttributes.displayName = AsString(_cppValue.Value().trackAttributes.Value().displayName.Value().Value());
+                        if (value.trackAttributes.displayName == nil) {
+                            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                            *aError = err;
+                            return nil;
+                        }
+                    }
+                } else {
+                    value.trackAttributes.displayName = nil;
+                }
+            }
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterAvailableAudioTracksAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            { // Scope for our temporary variables
+                auto * array_1 = [NSMutableArray new];
+                auto iter_1 = _cppValue.Value().begin();
+                while (iter_1.Next()) {
+                    auto & entry_1 = iter_1.GetValue();
+                    MCMediaPlaybackClusterTrackStruct * newElement_1;
+                    newElement_1 = [MCMediaPlaybackClusterTrackStruct new];
+                    newElement_1.id = AsString(entry_1.id);
+                    if (newElement_1.id == nil) {
+                        CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                        *aError = err;
+                        return nil;
+                    }
+                    if (entry_1.trackAttributes.IsNull()) {
+                        newElement_1.trackAttributes = nil;
+                    } else {
+                        newElement_1.trackAttributes = [MCMediaPlaybackClusterTrackAttributesStruct new];
+                        newElement_1.trackAttributes.languageCode = AsString(entry_1.trackAttributes.Value().languageCode);
+                        if (newElement_1.trackAttributes.languageCode == nil) {
+                            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                            *aError = err;
+                            return nil;
+                        }
+                        if (entry_1.trackAttributes.Value().displayName.HasValue()) {
+                            if (entry_1.trackAttributes.Value().displayName.Value().IsNull()) {
+                                newElement_1.trackAttributes.displayName = nil;
+                            } else {
+                                newElement_1.trackAttributes.displayName = AsString(entry_1.trackAttributes.Value().displayName.Value().Value());
+                                if (newElement_1.trackAttributes.displayName == nil) {
+                                    CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                                    *aError = err;
+                                    return nil;
+                                }
+                            }
+                        } else {
+                            newElement_1.trackAttributes.displayName = nil;
+                        }
+                    }
+                    [array_1 addObject:newElement_1];
+                }
+                CHIP_ERROR err = iter_1.GetStatus();
+                if (err != CHIP_NO_ERROR) {
+                    *aError = err;
+                    return nil;
+                }
+                value = array_1;
+            }
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterActiveTextTrackAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    MCMediaPlaybackClusterTrackStruct * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        MCMediaPlaybackClusterTrackStruct * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [MCMediaPlaybackClusterTrackStruct new];
+            value.id = AsString(_cppValue.Value().id);
+            if (value.id == nil) {
+                CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                *aError = err;
+                return nil;
+            }
+            if (_cppValue.Value().trackAttributes.IsNull()) {
+                value.trackAttributes = nil;
+            } else {
+                value.trackAttributes = [MCMediaPlaybackClusterTrackAttributesStruct new];
+                value.trackAttributes.languageCode = AsString(_cppValue.Value().trackAttributes.Value().languageCode);
+                if (value.trackAttributes.languageCode == nil) {
+                    CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                    *aError = err;
+                    return nil;
+                }
+                if (_cppValue.Value().trackAttributes.Value().displayName.HasValue()) {
+                    if (_cppValue.Value().trackAttributes.Value().displayName.Value().IsNull()) {
+                        value.trackAttributes.displayName = nil;
+                    } else {
+                        value.trackAttributes.displayName = AsString(_cppValue.Value().trackAttributes.Value().displayName.Value().Value());
+                        if (value.trackAttributes.displayName == nil) {
+                            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                            *aError = err;
+                            return nil;
+                        }
+                    }
+                } else {
+                    value.trackAttributes.displayName = nil;
+                }
+            }
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterAvailableTextTracksAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            { // Scope for our temporary variables
+                auto * array_1 = [NSMutableArray new];
+                auto iter_1 = _cppValue.Value().begin();
+                while (iter_1.Next()) {
+                    auto & entry_1 = iter_1.GetValue();
+                    MCMediaPlaybackClusterTrackStruct * newElement_1;
+                    newElement_1 = [MCMediaPlaybackClusterTrackStruct new];
+                    newElement_1.id = AsString(entry_1.id);
+                    if (newElement_1.id == nil) {
+                        CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                        *aError = err;
+                        return nil;
+                    }
+                    if (entry_1.trackAttributes.IsNull()) {
+                        newElement_1.trackAttributes = nil;
+                    } else {
+                        newElement_1.trackAttributes = [MCMediaPlaybackClusterTrackAttributesStruct new];
+                        newElement_1.trackAttributes.languageCode = AsString(entry_1.trackAttributes.Value().languageCode);
+                        if (newElement_1.trackAttributes.languageCode == nil) {
+                            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                            *aError = err;
+                            return nil;
+                        }
+                        if (entry_1.trackAttributes.Value().displayName.HasValue()) {
+                            if (entry_1.trackAttributes.Value().displayName.Value().IsNull()) {
+                                newElement_1.trackAttributes.displayName = nil;
+                            } else {
+                                newElement_1.trackAttributes.displayName = AsString(entry_1.trackAttributes.Value().displayName.Value().Value());
+                                if (newElement_1.trackAttributes.displayName == nil) {
+                                    CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                                    *aError = err;
+                                    return nil;
+                                }
+                            }
+                        } else {
+                            newElement_1.trackAttributes.displayName = nil;
+                        }
+                    }
+                    [array_1 addObject:newElement_1];
+                }
+                CHIP_ERROR err = iter_1.GetStatus();
+                if (err != CHIP_NO_ERROR) {
+                    *aError = err;
+                    return nil;
+                }
+                value = array_1;
+            }
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCMediaPlaybackClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// KeypadInput cluster attributes:
+
+@implementation MCKeypadInputClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCKeypadInputClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCKeypadInputClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::KeypadInput::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCKeypadInputClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::KeypadInput::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCKeypadInputClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::KeypadInput::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCKeypadInputClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// ContentLauncher cluster attributes:
+
+@implementation MCContentLauncherClusterAcceptHeaderAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSString * newElement_0;
+                newElement_0 = AsString(entry_0);
+                if (newElement_0 == nil) {
+                    CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                    *aError = err;
+                    return nil;
+                }
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCContentLauncherClusterSupportedStreamingProtocolsAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue.Raw()];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCContentLauncherClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCContentLauncherClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCContentLauncherClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCContentLauncherClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCContentLauncherClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCContentLauncherClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// ApplicationLauncher cluster attributes:
+
+@implementation MCApplicationLauncherClusterCatalogListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedShort:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationLauncherClusterCurrentAppAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    MCApplicationLauncherClusterApplicationEPStruct * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        MCApplicationLauncherClusterApplicationEPStruct * _Nullable value;
+        if (_cppValue.IsNull()) {
+            value = nil;
+        } else {
+            value = [MCApplicationLauncherClusterApplicationEPStruct new];
+            value.application = [MCApplicationLauncherClusterApplicationStruct new];
+            value.application.catalogVendorID = [NSNumber numberWithUnsignedShort:_cppValue.Value().application.catalogVendorID];
+            value.application.applicationID = AsString(_cppValue.Value().application.applicationID);
+            if (value.application.applicationID == nil) {
+                CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+                *aError = err;
+                return nil;
+            }
+            if (_cppValue.Value().endpoint.HasValue()) {
+                value.endpoint = [NSNumber numberWithUnsignedShort:_cppValue.Value().endpoint.Value()];
+            } else {
+                value.endpoint = nil;
+            }
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationLauncherClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationLauncherClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationLauncherClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationLauncherClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationLauncherClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationLauncherClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+// ApplicationBasic cluster attributes:
+
+@implementation MCApplicationBasicClusterVendorNameAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSString * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::VendorName::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSString * _Nonnull value;
+        value = AsString(_cppValue);
+        if (value == nil) {
+            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+            *aError = err;
+            return nil;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterVendorIDAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::VendorID::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:chip::to_underlying(_cppValue)];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterApplicationNameAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSString * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSString * _Nonnull value;
+        value = AsString(_cppValue);
+        if (value == nil) {
+            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+            *aError = err;
+            return nil;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterProductIDAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::ProductID::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterApplicationAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    MCApplicationBasicClusterApplicationStruct * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::Application::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        MCApplicationBasicClusterApplicationStruct * _Nonnull value;
+        value = [MCApplicationBasicClusterApplicationStruct new];
+        value.catalogVendorID = [NSNumber numberWithUnsignedShort:_cppValue.catalogVendorID];
+        value.applicationID = AsString(_cppValue.applicationID);
+        if (value.applicationID == nil) {
+            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+            *aError = err;
+            return nil;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterStatusAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::Status::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedChar:chip::to_underlying(_cppValue)];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterApplicationVersionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSString * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSString * _Nonnull value;
+        value = AsString(_cppValue);
+        if (value == nil) {
+            CHIP_ERROR err = CHIP_ERROR_INVALID_ARGUMENT;
+            *aError = err;
+            return nil;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterAllowedVendorListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedShort:chip::to_underlying(entry_0)];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterGeneratedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterAcceptedCommandListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterEventListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::EventList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterAttributeListAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSArray * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSArray * _Nonnull value;
+        { // Scope for our temporary variables
+            auto * array_0 = [NSMutableArray new];
+            auto iter_0 = _cppValue.begin();
+            while (iter_0.Next()) {
+                auto & entry_0 = iter_0.GetValue();
+                NSNumber * newElement_0;
+                newElement_0 = [NSNumber numberWithUnsignedInt:entry_0];
+                [array_0 addObject:newElement_0];
+            }
+            CHIP_ERROR err = iter_0.GetStatus();
+            if (err != CHIP_NO_ERROR) {
+                *aError = err;
+                return nil;
+            }
+            value = array_0;
+        }
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterFeatureMapAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedInt:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
+
+@implementation MCApplicationBasicClusterClusterRevisionAttribute
+- (void)read:(void * _Nullable)context
+    completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->read(context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+        completion(context, before, after, err);
+        delete mcAttribute;
+    });
+}
+
+- (void)subscribe:(void * _Nullable)context
+       completion:(void (^_Nonnull __strong)(void * _Nullable, id _Nullable __strong before, id _Nullable __strong after, NSError * _Nullable __strong error))completion
+      minInterval:(NSNumber * _Nonnull)minInterval
+      maxInterval:(NSNumber * _Nonnull)maxInterval
+{
+    MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo> * mcAttribute = new MCAttributeTemplate<chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo>(self.cppAttribute,
+        [self](std::any cppValue, CHIP_ERROR * errPtr) {
+            return [self getObjCTypeFromCpp:cppValue errorCode:errPtr];
+        });
+    mcAttribute->subscribe(
+        context, [mcAttribute, completion](void * context, id before, id after, NSError * err) {
+            completion(context, before, after, err);
+            delete mcAttribute;
+        }, minInterval, maxInterval);
+}
+
+- (id _Nullable)getObjCTypeFromCpp:(std::any)cppValue errorCode:(CHIP_ERROR *)aError
+{
+    NSNumber * value = nil;
+    if (cppValue.type() == typeid(std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo::DecodableType>)) {
+        std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo::DecodableType> sharedPtr = std::any_cast<std::shared_ptr<chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo::DecodableType>>(cppValue);
+        chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::TypeInfo::DecodableType _cppValue = *sharedPtr;
+        // auto & valueSharedPtr = *sharedPtr;
+        *aError = CHIP_NO_ERROR;
+        NSNumber * _Nonnull value;
+        value = [NSNumber numberWithUnsignedShort:_cppValue];
+        return value;
+    }
+    *aError = CHIP_ERROR_INTERNAL;
+    return value;
+}
+@end
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.h
new file mode 100644
index 0000000..683de52
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.h
@@ -0,0 +1,614 @@
+/*
+ *
+ *    Copyright (c) 2022 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import "../MCCluster.h"
+#import "../MCCommandObjects.h"
+#import "MCAttributeObjects.h"
+#import <Foundation/Foundation.h>
+
+#ifndef MCClusterObjects_h
+#define MCClusterObjects_h
+
+// OnOff cluster:
+
+@interface MCOnOffCluster : MCCluster
+
+// OnOff cluster commands:
+
+// OnOff cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterOnOffAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterOnOffAttribute * _Nullable)onOffAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterGlobalSceneControlAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterGlobalSceneControlAttribute * _Nullable)globalSceneControlAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterOnTimeAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterOnTimeAttribute * _Nullable)onTimeAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterOffWaitTimeAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterOffWaitTimeAttribute * _Nullable)offWaitTimeAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterStartUpOnOffAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterStartUpOnOffAttribute * _Nullable)startUpOnOffAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCOnOffClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCOnOffClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// LevelControl cluster:
+
+@interface MCLevelControlCluster : MCCluster
+
+// LevelControl cluster commands:
+
+// LevelControl cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterCurrentLevelAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterCurrentLevelAttribute * _Nullable)currentLevelAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterRemainingTimeAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterRemainingTimeAttribute * _Nullable)remainingTimeAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterMinLevelAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterMinLevelAttribute * _Nullable)minLevelAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterMaxLevelAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterMaxLevelAttribute * _Nullable)maxLevelAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterCurrentFrequencyAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterCurrentFrequencyAttribute * _Nullable)currentFrequencyAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterMinFrequencyAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterMinFrequencyAttribute * _Nullable)minFrequencyAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterMaxFrequencyAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterMaxFrequencyAttribute * _Nullable)maxFrequencyAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterOptionsAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterOptionsAttribute * _Nullable)optionsAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterOnOffTransitionTimeAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterOnOffTransitionTimeAttribute * _Nullable)onOffTransitionTimeAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterOnLevelAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterOnLevelAttribute * _Nullable)onLevelAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterOnTransitionTimeAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterOnTransitionTimeAttribute * _Nullable)onTransitionTimeAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterOffTransitionTimeAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterOffTransitionTimeAttribute * _Nullable)offTransitionTimeAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterDefaultMoveRateAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterDefaultMoveRateAttribute * _Nullable)defaultMoveRateAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterStartUpCurrentLevelAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterStartUpCurrentLevelAttribute * _Nullable)startUpCurrentLevelAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCLevelControlClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCLevelControlClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// WakeOnLan cluster:
+
+@interface MCWakeOnLanCluster : MCCluster
+
+// WakeOnLan cluster commands:
+
+// WakeOnLan cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterMACAddressAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterMACAddressAttribute * _Nullable)macAddressAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterLinkLocalAddressAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterLinkLocalAddressAttribute * _Nullable)linkLocalAddressAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCWakeOnLanClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCWakeOnLanClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// TargetNavigator cluster:
+
+@interface MCTargetNavigatorCluster : MCCluster
+
+// TargetNavigator cluster commands:
+
+// TargetNavigator cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterTargetListAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterTargetListAttribute * _Nullable)targetListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterCurrentTargetAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterCurrentTargetAttribute * _Nullable)currentTargetAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCTargetNavigatorClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCTargetNavigatorClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// MediaPlayback cluster:
+
+@interface MCMediaPlaybackCluster : MCCluster
+
+// MediaPlayback cluster commands:
+
+// MediaPlayback cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterCurrentStateAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterCurrentStateAttribute * _Nullable)currentStateAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterStartTimeAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterStartTimeAttribute * _Nullable)startTimeAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterDurationAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterDurationAttribute * _Nullable)durationAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterSampledPositionAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterSampledPositionAttribute * _Nullable)sampledPositionAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterPlaybackSpeedAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterPlaybackSpeedAttribute * _Nullable)playbackSpeedAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterSeekRangeEndAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterSeekRangeEndAttribute * _Nullable)seekRangeEndAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterSeekRangeStartAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterSeekRangeStartAttribute * _Nullable)seekRangeStartAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterActiveAudioTrackAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterActiveAudioTrackAttribute * _Nullable)activeAudioTrackAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterAvailableAudioTracksAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterAvailableAudioTracksAttribute * _Nullable)availableAudioTracksAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterActiveTextTrackAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterActiveTextTrackAttribute * _Nullable)activeTextTrackAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterAvailableTextTracksAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterAvailableTextTracksAttribute * _Nullable)availableTextTracksAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCMediaPlaybackClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCMediaPlaybackClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// KeypadInput cluster:
+
+@interface MCKeypadInputCluster : MCCluster
+
+// KeypadInput cluster commands:
+
+// KeypadInput cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCKeypadInputClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCKeypadInputClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCKeypadInputClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCKeypadInputClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCKeypadInputClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCKeypadInputClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCKeypadInputClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCKeypadInputClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCKeypadInputClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCKeypadInputClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCKeypadInputClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCKeypadInputClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// ContentLauncher cluster:
+
+@interface MCContentLauncherCluster : MCCluster
+
+// ContentLauncher cluster commands:
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterLaunchURLCommand if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterLaunchURLCommand * _Nullable)launchURLCommand;
+
+// ContentLauncher cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterAcceptHeaderAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterAcceptHeaderAttribute * _Nullable)acceptHeaderAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterSupportedStreamingProtocolsAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterSupportedStreamingProtocolsAttribute * _Nullable)supportedStreamingProtocolsAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCContentLauncherClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCContentLauncherClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// ApplicationLauncher cluster:
+
+@interface MCApplicationLauncherCluster : MCCluster
+
+// ApplicationLauncher cluster commands:
+
+// ApplicationLauncher cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterCatalogListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterCatalogListAttribute * _Nullable)catalogListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterCurrentAppAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterCurrentAppAttribute * _Nullable)currentAppAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationLauncherClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCApplicationLauncherClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+// ApplicationBasic cluster:
+
+@interface MCApplicationBasicCluster : MCCluster
+
+// ApplicationBasic cluster commands:
+
+// ApplicationBasic cluster attributes:
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterVendorNameAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterVendorNameAttribute * _Nullable)vendorNameAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterVendorIDAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterVendorIDAttribute * _Nullable)vendorIDAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterApplicationNameAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterApplicationNameAttribute * _Nullable)applicationNameAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterProductIDAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterProductIDAttribute * _Nullable)productIDAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterApplicationAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterApplicationAttribute * _Nullable)applicationAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterStatusAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterStatusAttribute * _Nullable)statusAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterApplicationVersionAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterApplicationVersionAttribute * _Nullable)applicationVersionAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterAllowedVendorListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterAllowedVendorListAttribute * _Nullable)allowedVendorListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterGeneratedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterGeneratedCommandListAttribute * _Nullable)generatedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterAcceptedCommandListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterAcceptedCommandListAttribute * _Nullable)acceptedCommandListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterEventListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterEventListAttribute * _Nullable)eventListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterAttributeListAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterAttributeListAttribute * _Nullable)attributeListAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterFeatureMapAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterFeatureMapAttribute * _Nullable)featureMapAttribute;
+
+/**
+ * @brief Returns non-nil pointer to MCApplicationBasicClusterClusterRevisionAttribute if supported, nil otherwise.
+ */
+- (MCApplicationBasicClusterClusterRevisionAttribute * _Nullable)clusterRevisionAttribute;
+@end
+
+#endif /* MCClusterObjects_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.mm
new file mode 100644
index 0000000..c7fb369
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCClusterObjects.mm
@@ -0,0 +1,717 @@
+/*
+ *
+ *    Copyright (c) 2022 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+// THIS FILE IS GENERATED BY ZAP
+
+#import "MCClusterObjects.h"
+
+#import "../MCAttribute_Internal.h"
+#import "../MCCluster_Internal.h"
+#import "../MCCommand_Internal.h"
+
+#include "core/Attribute.h"
+#include "core/Command.h"
+#include <app-common/zap-generated/cluster-objects.h>
+
+#import <Foundation/Foundation.h>
+
+// OnOff cluster:
+
+@implementation MCOnOffCluster
+
+// OnOff cluster commands:
+
+// OnOff cluster attributes:
+
+- (id)onOffAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::OnOff::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterOnOffAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)globalSceneControlAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::GlobalSceneControl::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterGlobalSceneControlAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)onTimeAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::OnTime::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterOnTimeAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)offWaitTimeAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::OffWaitTime::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterOffWaitTimeAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)startUpOnOffAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::StartUpOnOff::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterStartUpOnOffAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::OnOff::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCOnOffClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// LevelControl cluster:
+
+@implementation MCLevelControlCluster
+
+// LevelControl cluster commands:
+
+// LevelControl cluster attributes:
+
+- (id)currentLevelAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::CurrentLevel::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterCurrentLevelAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)remainingTimeAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::RemainingTime::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterRemainingTimeAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)minLevelAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::MinLevel::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterMinLevelAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)maxLevelAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::MaxLevel::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterMaxLevelAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)currentFrequencyAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::CurrentFrequency::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterCurrentFrequencyAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)minFrequencyAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::MinFrequency::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterMinFrequencyAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)maxFrequencyAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::MaxFrequency::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterMaxFrequencyAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)optionsAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::Options::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterOptionsAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)onOffTransitionTimeAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::OnOffTransitionTime::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterOnOffTransitionTimeAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)onLevelAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::OnLevel::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterOnLevelAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)onTransitionTimeAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::OnTransitionTime::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterOnTransitionTimeAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)offTransitionTimeAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::OffTransitionTime::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterOffTransitionTimeAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)defaultMoveRateAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::DefaultMoveRate::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterDefaultMoveRateAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)startUpCurrentLevelAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::StartUpCurrentLevel::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterStartUpCurrentLevelAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::LevelControl::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCLevelControlClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// WakeOnLan cluster:
+
+@implementation MCWakeOnLanCluster
+
+// WakeOnLan cluster commands:
+
+// WakeOnLan cluster attributes:
+
+- (id)macAddressAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::MACAddress::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterMACAddressAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)linkLocalAddressAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::LinkLocalAddress::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterLinkLocalAddressAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::WakeOnLan::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCWakeOnLanClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// TargetNavigator cluster:
+
+@implementation MCTargetNavigatorCluster
+
+// TargetNavigator cluster commands:
+
+// TargetNavigator cluster attributes:
+
+- (id)targetListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::TargetList::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterTargetListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)currentTargetAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::CurrentTarget::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterCurrentTargetAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::TargetNavigator::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCTargetNavigatorClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// MediaPlayback cluster:
+
+@implementation MCMediaPlaybackCluster
+
+// MediaPlayback cluster commands:
+
+// MediaPlayback cluster attributes:
+
+- (id)currentStateAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::CurrentState::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterCurrentStateAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)startTimeAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::StartTime::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterStartTimeAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)durationAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::Duration::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterDurationAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)sampledPositionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::SampledPosition::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterSampledPositionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)playbackSpeedAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::PlaybackSpeed::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterPlaybackSpeedAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)seekRangeEndAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::SeekRangeEnd::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterSeekRangeEndAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)seekRangeStartAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::SeekRangeStart::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterSeekRangeStartAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)activeAudioTrackAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::ActiveAudioTrack::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterActiveAudioTrackAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)availableAudioTracksAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::AvailableAudioTracks::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterAvailableAudioTracksAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)activeTextTrackAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::ActiveTextTrack::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterActiveTextTrackAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)availableTextTracksAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::AvailableTextTracks::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterAvailableTextTracksAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::MediaPlayback::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCMediaPlaybackClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// KeypadInput cluster:
+
+@implementation MCKeypadInputCluster
+
+// KeypadInput cluster commands:
+
+// KeypadInput cluster attributes:
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::KeypadInput::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCKeypadInputClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::KeypadInput::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCKeypadInputClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::KeypadInput::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCKeypadInputClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::KeypadInput::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCKeypadInputClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::KeypadInput::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCKeypadInputClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::KeypadInput::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCKeypadInputClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// ContentLauncher cluster:
+
+@implementation MCContentLauncherCluster
+
+// ContentLauncher cluster commands:
+
+- (id)launchURLCommand
+{
+    void * cppCommand = self.cppCluster->GetCommand(chip::app::Clusters::ContentLauncher::Commands::LaunchURL::Id);
+    return cppCommand != nil ? [[MCContentLauncherClusterLaunchURLCommand alloc] initWithCppCommand:cppCommand] : nil;
+}
+
+// ContentLauncher cluster attributes:
+
+- (id)acceptHeaderAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::AcceptHeader::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterAcceptHeaderAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)supportedStreamingProtocolsAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::SupportedStreamingProtocols::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterSupportedStreamingProtocolsAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ContentLauncher::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCContentLauncherClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// ApplicationLauncher cluster:
+
+@implementation MCApplicationLauncherCluster
+
+// ApplicationLauncher cluster commands:
+
+// ApplicationLauncher cluster attributes:
+
+- (id)catalogListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::CatalogList::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterCatalogListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)currentAppAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::CurrentApp::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterCurrentAppAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationLauncher::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCApplicationLauncherClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
+
+// ApplicationBasic cluster:
+
+@implementation MCApplicationBasicCluster
+
+// ApplicationBasic cluster commands:
+
+// ApplicationBasic cluster attributes:
+
+- (id)vendorNameAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::VendorName::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterVendorNameAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)vendorIDAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::VendorID::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterVendorIDAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)applicationNameAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::ApplicationName::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterApplicationNameAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)productIDAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::ProductID::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterProductIDAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)applicationAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::Application::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterApplicationAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)statusAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::Status::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterStatusAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)applicationVersionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::ApplicationVersion::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterApplicationVersionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)allowedVendorListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::AllowedVendorList::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterAllowedVendorListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)generatedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::GeneratedCommandList::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterGeneratedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)acceptedCommandListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::AcceptedCommandList::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterAcceptedCommandListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)eventListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::EventList::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterEventListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)attributeListAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::AttributeList::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterAttributeListAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)featureMapAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::FeatureMap::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterFeatureMapAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+
+- (id)clusterRevisionAttribute
+{
+    void * cppAttribute = self.cppCluster->GetAttribute(chip::app::Clusters::ApplicationBasic::Attributes::ClusterRevision::Id);
+    return cppAttribute != nil ? [[MCApplicationBasicClusterClusterRevisionAttribute alloc] initWithCppAttribute:cppAttribute] : nil;
+}
+@end
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCStructsObjc.h b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCStructsObjc.h
new file mode 100644
index 0000000..fa03916
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCStructsObjc.h
@@ -0,0 +1,58 @@
+/**
+ *
+ *    Copyright (c) 2020-2024 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+#ifndef MCStructsObjc_h
+#define MCStructsObjc_h
+
+@interface MCMediaPlaybackClusterPlaybackPositionStruct : NSObject <NSCopying>
+@property (nonatomic, copy) NSNumber * _Nonnull updatedAt;
+@property (nonatomic, copy) NSNumber * _Nullable position;
+@end
+
+@interface MCMediaPlaybackClusterTrackAttributesStruct : NSObject <NSCopying>
+@property (nonatomic, copy) NSString * _Nonnull languageCode;
+@property (nonatomic, copy) NSString * _Nullable displayName;
+@end
+
+@interface MCMediaPlaybackClusterTrackStruct : NSObject <NSCopying>
+@property (nonatomic, copy) NSString * _Nonnull id;
+@property (nonatomic, copy) MCMediaPlaybackClusterTrackAttributesStruct * _Nullable trackAttributes;
+@end
+
+@interface MCApplicationBasicClusterApplicationStruct : NSObject <NSCopying>
+@property (nonatomic, copy) NSNumber * _Nonnull catalogVendorID;
+@property (nonatomic, copy) NSString * _Nonnull applicationID;
+@end
+
+@interface MCTargetNavigatorClusterTargetInfoStruct : NSObject <NSCopying>
+@property (nonatomic, copy) NSNumber * _Nonnull identifier;
+@property (nonatomic, copy) NSString * _Nonnull name;
+@end
+
+@interface MCApplicationLauncherClusterApplicationStruct : NSObject <NSCopying>
+@property (nonatomic, copy) NSNumber * _Nonnull catalogVendorID;
+@property (nonatomic, copy) NSString * _Nonnull applicationID;
+@end
+
+@interface MCApplicationLauncherClusterApplicationEPStruct : NSObject <NSCopying>
+@property (nonatomic, copy) MCApplicationLauncherClusterApplicationStruct * _Nonnull application;
+@property (nonatomic, copy) NSNumber * _Nullable endpoint;
+@end
+
+#endif /* MCStructsObjc_h */
diff --git a/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCStructsObjc.mm b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCStructsObjc.mm
new file mode 100644
index 0000000..64ced38
--- /dev/null
+++ b/examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/zap-generated/MCStructsObjc.mm
@@ -0,0 +1,291 @@
+/**
+ *
+ *    Copyright (c) 2020-2024 Project CHIP Authors
+ *
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#import "MCStructsObjc.h"
+
+#import <Foundation/Foundation.h>
+
+@implementation MCMediaPlaybackClusterPlaybackPositionStruct
+- (instancetype)init
+{
+    if (self = [super init]) {
+
+        _updatedAt = @(0);
+
+        _position = nil;
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+    auto other = [[MCMediaPlaybackClusterPlaybackPositionStruct alloc] init];
+
+    other.updatedAt = self.updatedAt;
+    other.position = self.position;
+
+    return other;
+}
+
+- (NSString *)description
+{
+    NSString * descriptionString = [NSString stringWithFormat:@"<%@: updatedAt:%@; position:%@; >", NSStringFromClass([self class]), _updatedAt, _position];
+    return descriptionString;
+}
+
+@end
+
+@implementation MCMediaPlaybackClusterPlaybackPosition : MCMediaPlaybackClusterPlaybackPositionStruct
+@dynamic updatedAt;
+@dynamic position;
+@end
+
+@implementation MCMediaPlaybackClusterTrackAttributesStruct
+- (instancetype)init
+{
+    if (self = [super init]) {
+
+        _languageCode = @"";
+
+        _displayName = nil;
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+    auto other = [[MCMediaPlaybackClusterTrackAttributesStruct alloc] init];
+
+    other.languageCode = self.languageCode;
+    other.displayName = self.displayName;
+
+    return other;
+}
+
+- (NSString *)description
+{
+    NSString * descriptionString = [NSString stringWithFormat:@"<%@: languageCode:%@; displayName:%@; >", NSStringFromClass([self class]), _languageCode, _displayName];
+    return descriptionString;
+}
+
+@end
+
+@implementation MCMediaPlaybackClusterTrackStruct
+- (instancetype)init
+{
+    if (self = [super init]) {
+
+        _id = @"";
+
+        _trackAttributes = nil;
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+    auto other = [[MCMediaPlaybackClusterTrackStruct alloc] init];
+
+    other.id = self.id;
+    other.trackAttributes = self.trackAttributes;
+
+    return other;
+}
+
+- (NSString *)description
+{
+    NSString * descriptionString = [NSString stringWithFormat:@"<%@: id:%@; trackAttributes:%@; >", NSStringFromClass([self class]), _id, _trackAttributes];
+    return descriptionString;
+}
+
+@end
+
+@implementation MCApplicationBasicClusterApplicationStruct
+- (instancetype)init
+{
+    if (self = [super init]) {
+
+        _catalogVendorID = @(0);
+
+        _applicationID = @"";
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+    auto other = [[MCApplicationBasicClusterApplicationStruct alloc] init];
+
+    other.catalogVendorID = self.catalogVendorID;
+    other.applicationID = self.applicationID;
+
+    return other;
+}
+
+- (NSString *)description
+{
+    NSString * descriptionString = [NSString stringWithFormat:@"<%@: catalogVendorID:%@; applicationID:%@; >", NSStringFromClass([self class]), _catalogVendorID, _applicationID];
+    return descriptionString;
+}
+
+- (void)setCatalogVendorId:(NSNumber * _Nonnull)catalogVendorId
+{
+    self.catalogVendorID = catalogVendorId;
+}
+
+- (NSNumber * _Nonnull)catalogVendorId
+{
+    return self.catalogVendorID;
+}
+
+- (void)setApplicationId:(NSString * _Nonnull)applicationId
+{
+    self.applicationID = applicationId;
+}
+
+- (NSString * _Nonnull)applicationId
+{
+    return self.applicationID;
+}
+
+@end
+
+@implementation MCApplicationBasicClusterApplicationBasicApplication : MCApplicationBasicClusterApplicationStruct
+@end
+
+@implementation MCTargetNavigatorClusterTargetInfoStruct
+- (instancetype)init
+{
+    if (self = [super init]) {
+
+        _identifier = @(0);
+
+        _name = @"";
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+    auto other = [[MCTargetNavigatorClusterTargetInfoStruct alloc] init];
+
+    other.identifier = self.identifier;
+    other.name = self.name;
+
+    return other;
+}
+
+- (NSString *)description
+{
+    NSString * descriptionString = [NSString stringWithFormat:@"<%@: identifier:%@; name:%@; >", NSStringFromClass([self class]), _identifier, _name];
+    return descriptionString;
+}
+
+@end
+
+@implementation MCTargetNavigatorClusterTargetInfo : MCTargetNavigatorClusterTargetInfoStruct
+@dynamic identifier;
+@dynamic name;
+@end
+
+@implementation MCApplicationLauncherClusterApplicationStruct
+- (instancetype)init
+{
+    if (self = [super init]) {
+
+        _catalogVendorID = @(0);
+
+        _applicationID = @"";
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+    auto other = [[MCApplicationLauncherClusterApplicationStruct alloc] init];
+
+    other.catalogVendorID = self.catalogVendorID;
+    other.applicationID = self.applicationID;
+
+    return other;
+}
+
+- (NSString *)description
+{
+    NSString * descriptionString = [NSString stringWithFormat:@"<%@: catalogVendorID:%@; applicationID:%@; >", NSStringFromClass([self class]), _catalogVendorID, _applicationID];
+    return descriptionString;
+}
+
+- (void)setCatalogVendorId:(NSNumber * _Nonnull)catalogVendorId
+{
+    self.catalogVendorID = catalogVendorId;
+}
+
+- (NSNumber * _Nonnull)catalogVendorId
+{
+    return self.catalogVendorID;
+}
+
+- (void)setApplicationId:(NSString * _Nonnull)applicationId
+{
+    self.applicationID = applicationId;
+}
+
+- (NSString * _Nonnull)applicationId
+{
+    return self.applicationID;
+}
+
+@end
+
+@implementation MCApplicationLauncherClusterApplication : MCApplicationLauncherClusterApplicationStruct
+@end
+
+@implementation MCApplicationLauncherClusterApplicationEPStruct
+- (instancetype)init
+{
+    if (self = [super init]) {
+
+        _application = [MCApplicationLauncherClusterApplicationStruct new];
+
+        _endpoint = nil;
+    }
+    return self;
+}
+
+- (id)copyWithZone:(NSZone * _Nullable)zone
+{
+    auto other = [[MCApplicationLauncherClusterApplicationEPStruct alloc] init];
+
+    other.application = self.application;
+    other.endpoint = self.endpoint;
+
+    return other;
+}
+
+- (NSString *)description
+{
+    NSString * descriptionString = [NSString stringWithFormat:@"<%@: application:%@; endpoint:%@; >", NSStringFromClass([self class]), _application, _endpoint];
+    return descriptionString;
+}
+
+@end
+
+@implementation MCApplicationLauncherClusterApplicationEP : MCApplicationLauncherClusterApplicationEPStruct
+@dynamic application;
+@dynamic endpoint;
+@end
diff --git a/examples/tv-casting-app/tv-casting-common/core/Attribute.h b/examples/tv-casting-app/tv-casting-common/core/Attribute.h
index 6ce2aa0..958c7ab 100644
--- a/examples/tv-casting-app/tv-casting-common/core/Attribute.h
+++ b/examples/tv-casting-app/tv-casting-common/core/Attribute.h
@@ -26,18 +26,18 @@
 namespace casting {
 namespace core {
 
-template <typename TypeInfoDecodableType>
-using ReadResponseSuccessCallbackFn =
-    std::function<void(void * context, chip::Optional<TypeInfoDecodableType> before, TypeInfoDecodableType after)>;
+template <typename TypeInfo>
+using ReadResponseSuccessCallbackFn  = std::function<void(void * context, chip::Optional<typename TypeInfo::DecodableType> before,
+                                                         typename TypeInfo::DecodableArgType after)>;
 using ReadResponseFailureCallbackFn  = std::function<void(void * context, CHIP_ERROR err)>;
 using WriteResponseSuccessCallbackFn = std::function<void(void * context)>;
 using WriteResponseFailureCallbackFn = std::function<void(void * context, CHIP_ERROR err)>;
 
-template <typename TypeInfoDecodableType>
+template <typename TypeInfo>
 struct ReadAttributeContext;
-template <typename TypeInfoDecodableType>
+template <typename TypeInfo>
 struct WriteAttributeContext;
-template <typename TypeInfoDecodableType>
+template <typename TypeInfo>
 struct SubscribeAttributeContext;
 
 template <typename TypeInfo>
@@ -72,21 +72,19 @@
      * before (if the Attribute had been previously read)
      * @param failureCb Called when there is a failure in reading the Attribute
      */
-    void Read(void * context, ReadResponseSuccessCallbackFn<typename TypeInfo::DecodableType> successCb,
-              ReadResponseFailureCallbackFn failureCb)
+    void Read(void * context, ReadResponseSuccessCallbackFn<TypeInfo> successCb, ReadResponseFailureCallbackFn failureCb)
     {
         memory::Strong<core::Endpoint> endpoint = this->GetEndpoint().lock();
         if (endpoint)
         {
-            ReadAttributeContext<typename TypeInfo::DecodableType> * attributeContext =
-                new ReadAttributeContext<typename TypeInfo::DecodableType>(this, endpoint, context, successCb, failureCb);
+            ReadAttributeContext<TypeInfo> * attributeContext =
+                new ReadAttributeContext<TypeInfo>(this, endpoint, context, successCb, failureCb);
 
             endpoint->GetCastingPlayer()->FindOrEstablishSession(
                 attributeContext,
                 // FindOrEstablishSession success handler
                 [](void * _context, chip::Messaging::ExchangeManager & exchangeMgr, const chip::SessionHandle & sessionHandle) {
-                    ReadAttributeContext<typename TypeInfo::DecodableType> * _attributeContext =
-                        static_cast<ReadAttributeContext<typename TypeInfo::DecodableType> *>(_context);
+                    ReadAttributeContext<TypeInfo> * _attributeContext = static_cast<ReadAttributeContext<TypeInfo> *>(_context);
                     ChipLogProgress(AppServer, "<Attribute>::Read() Found or established session");
 
                     // Read attribute
@@ -94,9 +92,9 @@
                     CHIP_ERROR err = mediaClusterBase.template ReadAttribute<TypeInfo>(
                         _attributeContext,
                         // Read success handler
-                        [](void * __context, typename TypeInfo::DecodableType response) {
-                            ReadAttributeContext<typename TypeInfo::DecodableType> * __attributeContext =
-                                static_cast<ReadAttributeContext<typename TypeInfo::DecodableType> *>(__context);
+                        [](void * __context, typename TypeInfo::DecodableArgType response) {
+                            ReadAttributeContext<TypeInfo> * __attributeContext =
+                                static_cast<ReadAttributeContext<TypeInfo> *>(__context);
                             ChipLogProgress(AppServer, "<Attribute>::Read() success");
                             Attribute<TypeInfo> * __attr = static_cast<Attribute<TypeInfo> *>(__attributeContext->mAttribute);
                             __attr->value                = response;
@@ -114,8 +112,8 @@
                         },
                         // Read failure handler
                         [](void * __context, CHIP_ERROR error) {
-                            ReadAttributeContext<typename TypeInfo::DecodableType> * __attributeContext =
-                                static_cast<ReadAttributeContext<typename TypeInfo::DecodableType> *>(__context);
+                            ReadAttributeContext<TypeInfo> * __attributeContext =
+                                static_cast<ReadAttributeContext<TypeInfo> *>(__context);
                             ChipLogError(AppServer,
                                          "<Attribute>::Read() failure response on EndpointId: %d with error: "
                                          "%" CHIP_ERROR_FORMAT,
@@ -137,8 +135,7 @@
                 },
                 // FindOrEstablishSession failure handler
                 [](void * _context, const chip::ScopedNodeId & peerId, CHIP_ERROR error) {
-                    ReadAttributeContext<typename TypeInfo::DecodableType> * _attributeContext =
-                        static_cast<ReadAttributeContext<typename TypeInfo::DecodableType> *>(_context);
+                    ReadAttributeContext<TypeInfo> * _attributeContext = static_cast<ReadAttributeContext<TypeInfo> *>(_context);
                     ChipLogError(AppServer,
                                  "<Attribute>::Read() failure in retrieving session info for peerId.nodeId: "
                                  "0x" ChipLogFormatX64 ", peer.fabricIndex: %d with error: %" CHIP_ERROR_FORMAT,
@@ -245,22 +242,21 @@
      * @param minIntervalFloorSeconds the requested minimum interval boundary floor in seconds for attribute udpates
      * @param maxIntervalCeilingSeconds the requested maximum interval boundary ceiling in seconds for attribute udpates
      */
-    void Subscribe(void * context, ReadResponseSuccessCallbackFn<typename TypeInfo::DecodableType> successCb,
-                   ReadResponseFailureCallbackFn failureCb, uint16_t minIntervalFloorSeconds, uint16_t maxIntervalCeilingSeconds)
+    void Subscribe(void * context, ReadResponseSuccessCallbackFn<TypeInfo> successCb, ReadResponseFailureCallbackFn failureCb,
+                   uint16_t minIntervalFloorSeconds, uint16_t maxIntervalCeilingSeconds)
     {
         memory::Strong<core::Endpoint> endpoint = this->GetEndpoint().lock();
         if (endpoint)
         {
-            SubscribeAttributeContext<typename TypeInfo::DecodableType> * attributeContext =
-                new SubscribeAttributeContext<typename TypeInfo::DecodableType>(this, endpoint, context, successCb, failureCb,
-                                                                                minIntervalFloorSeconds, maxIntervalCeilingSeconds);
+            SubscribeAttributeContext<TypeInfo> * attributeContext = new SubscribeAttributeContext<TypeInfo>(
+                this, endpoint, context, successCb, failureCb, minIntervalFloorSeconds, maxIntervalCeilingSeconds);
 
             endpoint->GetCastingPlayer()->FindOrEstablishSession(
                 attributeContext,
                 // FindOrEstablishSession success handler
                 [](void * _context, chip::Messaging::ExchangeManager & exchangeMgr, const chip::SessionHandle & sessionHandle) {
-                    SubscribeAttributeContext<typename TypeInfo::DecodableType> * _attributeContext =
-                        static_cast<SubscribeAttributeContext<typename TypeInfo::DecodableType> *>(_context);
+                    SubscribeAttributeContext<TypeInfo> * _attributeContext =
+                        static_cast<SubscribeAttributeContext<TypeInfo> *>(_context);
                     ChipLogProgress(AppServer, "<Attribute>::Subscribe() Found or established session");
 
                     // Subscribe to attribute
@@ -268,12 +264,13 @@
                     CHIP_ERROR err = mediaClusterBase.template SubscribeAttribute<TypeInfo>(
                         _attributeContext,
                         // Subscription success handler
-                        [](void * __context, typename TypeInfo::DecodableType response) {
-                            SubscribeAttributeContext<typename TypeInfo::DecodableType> * __attributeContext =
-                                static_cast<SubscribeAttributeContext<typename TypeInfo::DecodableType> *>(__context);
+                        [](void * __context, typename TypeInfo::DecodableArgType response) {
+                            SubscribeAttributeContext<TypeInfo> * __attributeContext =
+                                static_cast<SubscribeAttributeContext<TypeInfo> *>(__context);
                             ChipLogProgress(AppServer, "<Attribute>::Subscribe() success");
                             Attribute<TypeInfo> * __attr = static_cast<Attribute<TypeInfo> *>(__attributeContext->mAttribute);
                             __attr->value                = response;
+                            // TODO: Save old value and then overwrite
                             if (__attr->hasValue)
                             {
                                 __attributeContext->mSuccessCb(__attributeContext->mClientContext,
@@ -288,8 +285,8 @@
                         },
                         // Subscription failure handler
                         [](void * __context, CHIP_ERROR error) {
-                            SubscribeAttributeContext<typename TypeInfo::DecodableType> * __attributeContext =
-                                static_cast<SubscribeAttributeContext<typename TypeInfo::DecodableType> *>(__context);
+                            SubscribeAttributeContext<TypeInfo> * __attributeContext =
+                                static_cast<SubscribeAttributeContext<TypeInfo> *>(__context);
                             ChipLogError(AppServer,
                                          "<Attribute>::Subscribe() failure response on EndpointId: %d with error: "
                                          "%" CHIP_ERROR_FORMAT,
@@ -314,8 +311,8 @@
                 },
                 // FindOrEstablishSession failure handler
                 [](void * _context, const chip::ScopedNodeId & peerId, CHIP_ERROR error) {
-                    SubscribeAttributeContext<typename TypeInfo::DecodableType> * _attributeContext =
-                        static_cast<SubscribeAttributeContext<typename TypeInfo::DecodableType> *>(_context);
+                    SubscribeAttributeContext<TypeInfo> * _attributeContext =
+                        static_cast<SubscribeAttributeContext<TypeInfo> *>(_context);
                     ChipLogError(AppServer,
                                  "<Attribute>::Subscribe() failure in retrieving session info for peerId.nodeId: "
                                  "0x" ChipLogFormatX64 ", peer.fabricIndex: %d with error: %" CHIP_ERROR_FORMAT,
@@ -335,11 +332,11 @@
 /**
  * @brief Context object used by the Attribute class during the Read API's execution
  */
-template <typename TypeInfoDecodableType>
+template <typename TypeInfo>
 struct ReadAttributeContext
 {
     ReadAttributeContext(void * attribute, memory::Strong<core::Endpoint> endpoint, void * clientContext,
-                         ReadResponseSuccessCallbackFn<TypeInfoDecodableType> successCb, ReadResponseFailureCallbackFn failureCb) :
+                         ReadResponseSuccessCallbackFn<TypeInfo> successCb, ReadResponseFailureCallbackFn failureCb) :
         mEndpoint(endpoint),
         mClientContext(clientContext), mSuccessCb(successCb), mFailureCb(failureCb)
     {
@@ -349,7 +346,7 @@
     void * mAttribute;
     memory::Strong<core::Endpoint> mEndpoint;
     void * mClientContext;
-    ReadResponseSuccessCallbackFn<TypeInfoDecodableType> mSuccessCb;
+    ReadResponseSuccessCallbackFn<TypeInfo> mSuccessCb;
     ReadResponseFailureCallbackFn mFailureCb;
 };
 
@@ -380,13 +377,12 @@
 /**
  * @brief Context object used by the Attribute class during the Subscribe API's execution
  */
-template <typename TypeInfoDecodableType>
+template <typename TypeInfo>
 struct SubscribeAttributeContext
 {
     SubscribeAttributeContext(void * attribute, memory::Strong<core::Endpoint> endpoint, void * clientContext,
-                              ReadResponseSuccessCallbackFn<TypeInfoDecodableType> successCb,
-                              ReadResponseFailureCallbackFn failureCb, uint16_t minIntervalFloorSeconds,
-                              uint16_t maxIntervalCeilingSeconds) :
+                              ReadResponseSuccessCallbackFn<TypeInfo> successCb, ReadResponseFailureCallbackFn failureCb,
+                              uint16_t minIntervalFloorSeconds, uint16_t maxIntervalCeilingSeconds) :
         mEndpoint(endpoint),
         mClientContext(clientContext), mSuccessCb(successCb), mFailureCb(failureCb)
     {
@@ -398,7 +394,7 @@
     void * mAttribute;
     memory::Strong<core::Endpoint> mEndpoint;
     void * mClientContext;
-    ReadResponseSuccessCallbackFn<TypeInfoDecodableType> mSuccessCb;
+    ReadResponseSuccessCallbackFn<TypeInfo> mSuccessCb;
     ReadResponseFailureCallbackFn mFailureCb;
     uint16_t mMinIntervalFloorSeconds;
     uint16_t mMaxIntervalCeilingSeconds;
diff --git a/scripts/tools/zap_regen_all.py b/scripts/tools/zap_regen_all.py
index 0e0b2b6..53729ff 100755
--- a/scripts/tools/zap_regen_all.py
+++ b/scripts/tools/zap_regen_all.py
@@ -424,6 +424,7 @@
         'src/controller/python/templates/templates.json': None,
         'src/darwin/Framework/CHIP/templates/templates.json': None,
         'src/controller/java/templates/templates.json': None,
+        'examples/tv-casting-app/darwin/MatterTvCastingBridge/MatterTvCastingBridge/templates/templates.json': None,
     }
 
     targets = []