diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index 1167412..076dc94 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -23,6 +23,7 @@
 # Users are not expected to import this file, instead, users can use import chip.clusters,
 # which will import all symbols from this file and can get a readable, pretty naming like
 # clusters.OnOff.commands.OnCommand
+from __future__ import annotations
 
 import typing
 from dataclasses import dataclass, field
@@ -490,14 +491,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    identifyTime: 'uint' = None
-    identifyType: 'Identify.Enums.IdentifyTypeEnum' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    identifyTime: uint = 0
+    identifyType: Identify.Enums.IdentifyTypeEnum = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class EffectIdentifierEnum(MatterIntEnum):
@@ -540,7 +541,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000003
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -549,14 +550,14 @@
                         ClusterObjectFieldDescriptor(Label="identifyTime", Tag=0, Type=uint),
                     ])
 
-            identifyTime: 'uint' = 0
+            identifyTime: uint = 0
 
         @dataclass
         class TriggerEffect(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000003
             command_id: typing.ClassVar[int] = 0x00000040
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -566,8 +567,8 @@
                         ClusterObjectFieldDescriptor(Label="effectVariant", Tag=1, Type=Identify.Enums.EffectVariantEnum),
                     ])
 
-            effectIdentifier: 'Identify.Enums.EffectIdentifierEnum' = 0
-            effectVariant: 'Identify.Enums.EffectVariantEnum' = 0
+            effectIdentifier: Identify.Enums.EffectIdentifierEnum = 0
+            effectVariant: Identify.Enums.EffectVariantEnum = 0
 
     class Attributes:
         @dataclass
@@ -584,7 +585,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class IdentifyType(ClusterAttributeDescriptor):
@@ -600,7 +601,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=Identify.Enums.IdentifyTypeEnum)
 
-            value: 'Identify.Enums.IdentifyTypeEnum' = 0
+            value: Identify.Enums.IdentifyTypeEnum = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -616,7 +617,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -632,7 +633,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -648,7 +649,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -664,7 +665,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -680,7 +681,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -696,7 +697,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -716,13 +717,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    nameSupport: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    nameSupport: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -747,15 +748,15 @@
                         ClusterObjectFieldDescriptor(Label="groupName", Tag=1, Type=str),
                     ])
 
-            groupID: 'uint' = 0
-            groupName: 'str' = ""
+            groupID: uint = 0
+            groupName: str = ""
 
         @dataclass
         class AddGroupResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000004
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -765,8 +766,8 @@
                         ClusterObjectFieldDescriptor(Label="groupID", Tag=1, Type=uint),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
+            status: uint = 0
+            groupID: uint = 0
 
         @dataclass
         class ViewGroup(ClusterCommand):
@@ -782,14 +783,14 @@
                         ClusterObjectFieldDescriptor(Label="groupID", Tag=0, Type=uint),
                     ])
 
-            groupID: 'uint' = 0
+            groupID: uint = 0
 
         @dataclass
         class ViewGroupResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000004
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -800,9 +801,9 @@
                         ClusterObjectFieldDescriptor(Label="groupName", Tag=2, Type=str),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
-            groupName: 'str' = ""
+            status: uint = 0
+            groupID: uint = 0
+            groupName: str = ""
 
         @dataclass
         class GetGroupMembership(ClusterCommand):
@@ -818,14 +819,14 @@
                         ClusterObjectFieldDescriptor(Label="groupList", Tag=0, Type=typing.List[uint]),
                     ])
 
-            groupList: 'typing.List[uint]' = field(default_factory=lambda: [])
+            groupList: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class GetGroupMembershipResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000004
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -835,8 +836,8 @@
                         ClusterObjectFieldDescriptor(Label="groupList", Tag=1, Type=typing.List[uint]),
                     ])
 
-            capacity: 'typing.Union[Nullable, uint]' = NullValue
-            groupList: 'typing.List[uint]' = field(default_factory=lambda: [])
+            capacity: typing.Union[Nullable, uint] = NullValue
+            groupList: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class RemoveGroup(ClusterCommand):
@@ -852,14 +853,14 @@
                         ClusterObjectFieldDescriptor(Label="groupID", Tag=0, Type=uint),
                     ])
 
-            groupID: 'uint' = 0
+            groupID: uint = 0
 
         @dataclass
         class RemoveGroupResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000004
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -869,15 +870,15 @@
                         ClusterObjectFieldDescriptor(Label="groupID", Tag=1, Type=uint),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
+            status: uint = 0
+            groupID: uint = 0
 
         @dataclass
         class RemoveAllGroups(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000004
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -890,7 +891,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000004
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -900,8 +901,8 @@
                         ClusterObjectFieldDescriptor(Label="groupName", Tag=1, Type=str),
                     ])
 
-            groupID: 'uint' = 0
-            groupName: 'str' = ""
+            groupID: uint = 0
+            groupName: str = ""
 
     class Attributes:
         @dataclass
@@ -918,7 +919,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -934,7 +935,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -950,7 +951,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -966,7 +967,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -982,7 +983,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -998,7 +999,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -1014,7 +1015,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -1038,17 +1039,17 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    onOff: 'bool' = None
-    globalSceneControl: 'typing.Optional[bool]' = None
-    onTime: 'typing.Optional[uint]' = None
-    offWaitTime: 'typing.Optional[uint]' = None
-    startUpOnOff: 'typing.Union[None, Nullable, OnOff.Enums.StartUpOnOffEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    onOff: bool = False
+    globalSceneControl: typing.Optional[bool] = None
+    onTime: typing.Optional[uint] = None
+    offWaitTime: typing.Optional[uint] = None
+    startUpOnOff: typing.Union[None, Nullable, OnOff.Enums.StartUpOnOffEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class DelayedAllOffEffectVariantEnum(MatterIntEnum):
@@ -1103,7 +1104,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000006
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1116,7 +1117,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000006
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1129,7 +1130,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000006
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1142,7 +1143,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000006
             command_id: typing.ClassVar[int] = 0x00000040
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1152,15 +1153,15 @@
                         ClusterObjectFieldDescriptor(Label="effectVariant", Tag=1, Type=uint),
                     ])
 
-            effectIdentifier: 'OnOff.Enums.EffectIdentifierEnum' = 0
-            effectVariant: 'uint' = 0
+            effectIdentifier: OnOff.Enums.EffectIdentifierEnum = 0
+            effectVariant: uint = 0
 
         @dataclass
         class OnWithRecallGlobalScene(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000006
             command_id: typing.ClassVar[int] = 0x00000041
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1173,7 +1174,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000006
             command_id: typing.ClassVar[int] = 0x00000042
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1184,9 +1185,9 @@
                         ClusterObjectFieldDescriptor(Label="offWaitTime", Tag=2, Type=uint),
                     ])
 
-            onOffControl: 'uint' = 0
-            onTime: 'uint' = 0
-            offWaitTime: 'uint' = 0
+            onOffControl: uint = 0
+            onTime: uint = 0
+            offWaitTime: uint = 0
 
     class Attributes:
         @dataclass
@@ -1203,7 +1204,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GlobalSceneControl(ClusterAttributeDescriptor):
@@ -1219,7 +1220,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class OnTime(ClusterAttributeDescriptor):
@@ -1235,7 +1236,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class OffWaitTime(ClusterAttributeDescriptor):
@@ -1251,7 +1252,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class StartUpOnOff(ClusterAttributeDescriptor):
@@ -1267,7 +1268,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, OnOff.Enums.StartUpOnOffEnum])
 
-            value: 'typing.Union[None, Nullable, OnOff.Enums.StartUpOnOffEnum]' = None
+            value: typing.Union[None, Nullable, OnOff.Enums.StartUpOnOffEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -1283,7 +1284,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -1299,7 +1300,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -1315,7 +1316,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -1331,7 +1332,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -1347,7 +1348,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -1363,7 +1364,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -1396,26 +1397,26 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    currentLevel: 'typing.Union[Nullable, uint]' = None
-    remainingTime: 'typing.Optional[uint]' = None
-    minLevel: 'typing.Optional[uint]' = None
-    maxLevel: 'typing.Optional[uint]' = None
-    currentFrequency: 'typing.Optional[uint]' = None
-    minFrequency: 'typing.Optional[uint]' = None
-    maxFrequency: 'typing.Optional[uint]' = None
-    options: 'uint' = None
-    onOffTransitionTime: 'typing.Optional[uint]' = None
-    onLevel: 'typing.Union[Nullable, uint]' = None
-    onTransitionTime: 'typing.Union[None, Nullable, uint]' = None
-    offTransitionTime: 'typing.Union[None, Nullable, uint]' = None
-    defaultMoveRate: 'typing.Union[None, Nullable, uint]' = None
-    startUpCurrentLevel: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    currentLevel: typing.Union[Nullable, uint] = NullValue
+    remainingTime: typing.Optional[uint] = None
+    minLevel: typing.Optional[uint] = None
+    maxLevel: typing.Optional[uint] = None
+    currentFrequency: typing.Optional[uint] = None
+    minFrequency: typing.Optional[uint] = None
+    maxFrequency: typing.Optional[uint] = None
+    options: uint = 0
+    onOffTransitionTime: typing.Optional[uint] = None
+    onLevel: typing.Union[Nullable, uint] = NullValue
+    onTransitionTime: typing.Union[None, Nullable, uint] = None
+    offTransitionTime: typing.Union[None, Nullable, uint] = None
+    defaultMoveRate: typing.Union[None, Nullable, uint] = None
+    startUpCurrentLevel: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class MoveModeEnum(MatterIntEnum):
@@ -1452,7 +1453,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1464,17 +1465,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            level: 'uint' = 0
-            transitionTime: 'typing.Union[Nullable, uint]' = NullValue
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            level: uint = 0
+            transitionTime: typing.Union[Nullable, uint] = NullValue
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class Move(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1486,17 +1487,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            moveMode: 'LevelControl.Enums.MoveModeEnum' = 0
-            rate: 'typing.Union[Nullable, uint]' = NullValue
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            moveMode: LevelControl.Enums.MoveModeEnum = 0
+            rate: typing.Union[Nullable, uint] = NullValue
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class Step(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1509,18 +1510,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            stepMode: 'LevelControl.Enums.StepModeEnum' = 0
-            stepSize: 'uint' = 0
-            transitionTime: 'typing.Union[Nullable, uint]' = NullValue
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            stepMode: LevelControl.Enums.StepModeEnum = 0
+            stepSize: uint = 0
+            transitionTime: typing.Union[Nullable, uint] = NullValue
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class Stop(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1530,15 +1531,15 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=1, Type=uint),
                     ])
 
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveToLevelWithOnOff(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1550,17 +1551,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            level: 'uint' = 0
-            transitionTime: 'typing.Union[Nullable, uint]' = NullValue
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            level: uint = 0
+            transitionTime: typing.Union[Nullable, uint] = NullValue
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveWithOnOff(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1572,17 +1573,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            moveMode: 'LevelControl.Enums.MoveModeEnum' = 0
-            rate: 'typing.Union[Nullable, uint]' = NullValue
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            moveMode: LevelControl.Enums.MoveModeEnum = 0
+            rate: typing.Union[Nullable, uint] = NullValue
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class StepWithOnOff(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1595,18 +1596,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            stepMode: 'LevelControl.Enums.StepModeEnum' = 0
-            stepSize: 'uint' = 0
-            transitionTime: 'typing.Union[Nullable, uint]' = NullValue
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            stepMode: LevelControl.Enums.StepModeEnum = 0
+            stepSize: uint = 0
+            transitionTime: typing.Union[Nullable, uint] = NullValue
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class StopWithOnOff(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1616,15 +1617,15 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=1, Type=uint),
                     ])
 
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveToClosestFrequency(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000008
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -1633,7 +1634,7 @@
                         ClusterObjectFieldDescriptor(Label="frequency", Tag=0, Type=uint),
                     ])
 
-            frequency: 'uint' = 0
+            frequency: uint = 0
 
     class Attributes:
         @dataclass
@@ -1650,7 +1651,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class RemainingTime(ClusterAttributeDescriptor):
@@ -1666,7 +1667,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MinLevel(ClusterAttributeDescriptor):
@@ -1682,7 +1683,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MaxLevel(ClusterAttributeDescriptor):
@@ -1698,7 +1699,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CurrentFrequency(ClusterAttributeDescriptor):
@@ -1714,7 +1715,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MinFrequency(ClusterAttributeDescriptor):
@@ -1730,7 +1731,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MaxFrequency(ClusterAttributeDescriptor):
@@ -1746,7 +1747,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Options(ClusterAttributeDescriptor):
@@ -1762,7 +1763,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class OnOffTransitionTime(ClusterAttributeDescriptor):
@@ -1778,7 +1779,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class OnLevel(ClusterAttributeDescriptor):
@@ -1794,7 +1795,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class OnTransitionTime(ClusterAttributeDescriptor):
@@ -1810,7 +1811,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OffTransitionTime(ClusterAttributeDescriptor):
@@ -1826,7 +1827,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class DefaultMoveRate(ClusterAttributeDescriptor):
@@ -1842,7 +1843,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class StartUpCurrentLevel(ClusterAttributeDescriptor):
@@ -1858,7 +1859,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -1874,7 +1875,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -1890,7 +1891,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -1906,7 +1907,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -1922,7 +1923,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -1938,7 +1939,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -1954,7 +1955,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -1973,12 +1974,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -1995,7 +1996,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -2011,7 +2012,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -2027,7 +2028,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -2043,7 +2044,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -2059,7 +2060,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -2075,7 +2076,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -2099,17 +2100,17 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    deviceTypeList: 'typing.List[Descriptor.Structs.DeviceTypeStruct]' = None
-    serverList: 'typing.List[uint]' = None
-    clientList: 'typing.List[uint]' = None
-    partsList: 'typing.List[uint]' = None
-    tagList: 'typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    deviceTypeList: typing.List[Descriptor.Structs.DeviceTypeStruct] = field(default_factory=lambda: [])
+    serverList: typing.List[uint] = field(default_factory=lambda: [])
+    clientList: typing.List[uint] = field(default_factory=lambda: [])
+    partsList: typing.List[uint] = field(default_factory=lambda: [])
+    tagList: typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -2161,7 +2162,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[Descriptor.Structs.DeviceTypeStruct])
 
-            value: 'typing.List[Descriptor.Structs.DeviceTypeStruct]' = field(default_factory=lambda: [])
+            value: typing.List[Descriptor.Structs.DeviceTypeStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class ServerList(ClusterAttributeDescriptor):
@@ -2177,7 +2178,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class ClientList(ClusterAttributeDescriptor):
@@ -2193,7 +2194,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class PartsList(ClusterAttributeDescriptor):
@@ -2209,7 +2210,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class TagList(ClusterAttributeDescriptor):
@@ -2225,7 +2226,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]])
 
-            value: 'typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]]' = None
+            value: typing.Optional[typing.List[Descriptor.Structs.SemanticTagStruct]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -2241,7 +2242,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -2257,7 +2258,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -2273,7 +2274,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -2289,7 +2290,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -2305,7 +2306,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -2321,7 +2322,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -2341,13 +2342,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    binding: 'typing.List[Binding.Structs.TargetStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    binding: typing.List[Binding.Structs.TargetStruct] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Structs:
         @dataclass
@@ -2384,7 +2385,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[Binding.Structs.TargetStruct])
 
-            value: 'typing.List[Binding.Structs.TargetStruct]' = field(default_factory=lambda: [])
+            value: typing.List[Binding.Structs.TargetStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -2400,7 +2401,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -2416,7 +2417,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -2432,7 +2433,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -2448,7 +2449,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -2464,7 +2465,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -2480,7 +2481,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -2506,19 +2507,19 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    acl: 'typing.List[AccessControl.Structs.AccessControlEntryStruct]' = None
-    extension: 'typing.Optional[typing.List[AccessControl.Structs.AccessControlExtensionStruct]]' = None
-    subjectsPerAccessControlEntry: 'uint' = None
-    targetsPerAccessControlEntry: 'uint' = None
-    accessControlEntriesPerFabric: 'uint' = None
-    commissioningARL: 'typing.Optional[typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct]]' = None
-    arl: 'typing.Optional[typing.List[AccessControl.Structs.AccessRestrictionEntryStruct]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    acl: typing.List[AccessControl.Structs.AccessControlEntryStruct] = field(default_factory=lambda: [])
+    extension: typing.Optional[typing.List[AccessControl.Structs.AccessControlExtensionStruct]] = None
+    subjectsPerAccessControlEntry: uint = 0
+    targetsPerAccessControlEntry: uint = 0
+    accessControlEntriesPerFabric: uint = 0
+    commissioningARL: typing.Optional[typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct]] = None
+    arl: typing.Optional[typing.List[AccessControl.Structs.AccessRestrictionEntryStruct]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AccessControlEntryAuthModeEnum(MatterIntEnum):
@@ -2677,14 +2678,14 @@
                         ClusterObjectFieldDescriptor(Label="arl", Tag=0, Type=typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct]),
                     ])
 
-            arl: 'typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct]' = field(default_factory=lambda: [])
+            arl: typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class ReviewFabricRestrictionsResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000001F
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -2693,7 +2694,7 @@
                         ClusterObjectFieldDescriptor(Label="token", Tag=0, Type=uint),
                     ])
 
-            token: 'uint' = 0
+            token: uint = 0
 
     class Attributes:
         @dataclass
@@ -2710,7 +2711,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[AccessControl.Structs.AccessControlEntryStruct])
 
-            value: 'typing.List[AccessControl.Structs.AccessControlEntryStruct]' = field(default_factory=lambda: [])
+            value: typing.List[AccessControl.Structs.AccessControlEntryStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class Extension(ClusterAttributeDescriptor):
@@ -2726,7 +2727,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[AccessControl.Structs.AccessControlExtensionStruct]])
 
-            value: 'typing.Optional[typing.List[AccessControl.Structs.AccessControlExtensionStruct]]' = None
+            value: typing.Optional[typing.List[AccessControl.Structs.AccessControlExtensionStruct]] = None
 
         @dataclass
         class SubjectsPerAccessControlEntry(ClusterAttributeDescriptor):
@@ -2742,7 +2743,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TargetsPerAccessControlEntry(ClusterAttributeDescriptor):
@@ -2758,7 +2759,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class AccessControlEntriesPerFabric(ClusterAttributeDescriptor):
@@ -2774,7 +2775,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class CommissioningARL(ClusterAttributeDescriptor):
@@ -2790,7 +2791,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct]])
 
-            value: 'typing.Optional[typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct]]' = None
+            value: typing.Optional[typing.List[AccessControl.Structs.CommissioningAccessRestrictionEntryStruct]] = None
 
         @dataclass
         class Arl(ClusterAttributeDescriptor):
@@ -2806,7 +2807,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[AccessControl.Structs.AccessRestrictionEntryStruct]])
 
-            value: 'typing.Optional[typing.List[AccessControl.Structs.AccessRestrictionEntryStruct]]' = None
+            value: typing.Optional[typing.List[AccessControl.Structs.AccessRestrictionEntryStruct]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -2822,7 +2823,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -2838,7 +2839,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -2854,7 +2855,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -2870,7 +2871,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -2886,7 +2887,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -2902,7 +2903,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -2926,11 +2927,11 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=254, Type=uint),
                     ])
 
-            adminNodeID: 'typing.Union[Nullable, uint]' = NullValue
-            adminPasscodeID: 'typing.Union[Nullable, uint]' = NullValue
-            changeType: 'AccessControl.Enums.ChangeTypeEnum' = 0
-            latestValue: 'typing.Union[Nullable, AccessControl.Structs.AccessControlEntryStruct]' = NullValue
-            fabricIndex: 'uint' = 0
+            adminNodeID: typing.Union[Nullable, uint] = NullValue
+            adminPasscodeID: typing.Union[Nullable, uint] = NullValue
+            changeType: AccessControl.Enums.ChangeTypeEnum = 0
+            latestValue: typing.Union[Nullable, AccessControl.Structs.AccessControlEntryStruct] = NullValue
+            fabricIndex: uint = 0
 
         @dataclass
         class AccessControlExtensionChanged(ClusterEvent):
@@ -2953,11 +2954,11 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=254, Type=uint),
                     ])
 
-            adminNodeID: 'typing.Union[Nullable, uint]' = NullValue
-            adminPasscodeID: 'typing.Union[Nullable, uint]' = NullValue
-            changeType: 'AccessControl.Enums.ChangeTypeEnum' = 0
-            latestValue: 'typing.Union[Nullable, AccessControl.Structs.AccessControlExtensionStruct]' = NullValue
-            fabricIndex: 'uint' = 0
+            adminNodeID: typing.Union[Nullable, uint] = NullValue
+            adminPasscodeID: typing.Union[Nullable, uint] = NullValue
+            changeType: AccessControl.Enums.ChangeTypeEnum = 0
+            latestValue: typing.Union[Nullable, AccessControl.Structs.AccessControlExtensionStruct] = NullValue
+            fabricIndex: uint = 0
 
         @dataclass
         class FabricRestrictionReviewUpdate(ClusterEvent):
@@ -2979,10 +2980,10 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=254, Type=uint),
                     ])
 
-            token: 'uint' = 0
-            instruction: 'typing.Optional[str]' = None
-            ARLRequestFlowUrl: 'typing.Optional[str]' = None
-            fabricIndex: 'uint' = 0
+            token: uint = 0
+            instruction: typing.Optional[str] = None
+            ARLRequestFlowUrl: typing.Optional[str] = None
+            fabricIndex: uint = 0
 
 
 @dataclass
@@ -3004,15 +3005,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    actionList: 'typing.List[Actions.Structs.ActionStruct]' = None
-    endpointLists: 'typing.List[Actions.Structs.EndpointListStruct]' = None
-    setupURL: 'typing.Optional[str]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    actionList: typing.List[Actions.Structs.ActionStruct] = field(default_factory=lambda: [])
+    endpointLists: typing.List[Actions.Structs.EndpointListStruct] = field(default_factory=lambda: [])
+    setupURL: typing.Optional[str] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ActionErrorEnum(MatterIntEnum):
@@ -3119,7 +3120,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3129,15 +3130,15 @@
                         ClusterObjectFieldDescriptor(Label="invokeID", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
 
         @dataclass
         class InstantActionWithTransition(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3148,16 +3149,16 @@
                         ClusterObjectFieldDescriptor(Label="transitionTime", Tag=2, Type=uint),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
-            transitionTime: 'uint' = 0
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
+            transitionTime: uint = 0
 
         @dataclass
         class StartAction(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3167,15 +3168,15 @@
                         ClusterObjectFieldDescriptor(Label="invokeID", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
 
         @dataclass
         class StartActionWithDuration(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3186,16 +3187,16 @@
                         ClusterObjectFieldDescriptor(Label="duration", Tag=2, Type=uint),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
-            duration: 'uint' = 0
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
+            duration: uint = 0
 
         @dataclass
         class StopAction(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3205,15 +3206,15 @@
                         ClusterObjectFieldDescriptor(Label="invokeID", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
 
         @dataclass
         class PauseAction(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3223,15 +3224,15 @@
                         ClusterObjectFieldDescriptor(Label="invokeID", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
 
         @dataclass
         class PauseActionWithDuration(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3242,16 +3243,16 @@
                         ClusterObjectFieldDescriptor(Label="duration", Tag=2, Type=uint),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
-            duration: 'uint' = 0
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
+            duration: uint = 0
 
         @dataclass
         class ResumeAction(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3261,15 +3262,15 @@
                         ClusterObjectFieldDescriptor(Label="invokeID", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
 
         @dataclass
         class EnableAction(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3279,15 +3280,15 @@
                         ClusterObjectFieldDescriptor(Label="invokeID", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
 
         @dataclass
         class EnableActionWithDuration(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x00000009
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3298,16 +3299,16 @@
                         ClusterObjectFieldDescriptor(Label="duration", Tag=2, Type=uint),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
-            duration: 'uint' = 0
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
+            duration: uint = 0
 
         @dataclass
         class DisableAction(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x0000000A
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3317,15 +3318,15 @@
                         ClusterObjectFieldDescriptor(Label="invokeID", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
 
         @dataclass
         class DisableActionWithDuration(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000025
             command_id: typing.ClassVar[int] = 0x0000000B
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3336,9 +3337,9 @@
                         ClusterObjectFieldDescriptor(Label="duration", Tag=2, Type=uint),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'typing.Optional[uint]' = None
-            duration: 'uint' = 0
+            actionID: uint = 0
+            invokeID: typing.Optional[uint] = None
+            duration: uint = 0
 
     class Attributes:
         @dataclass
@@ -3355,7 +3356,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[Actions.Structs.ActionStruct])
 
-            value: 'typing.List[Actions.Structs.ActionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[Actions.Structs.ActionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class EndpointLists(ClusterAttributeDescriptor):
@@ -3371,7 +3372,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[Actions.Structs.EndpointListStruct])
 
-            value: 'typing.List[Actions.Structs.EndpointListStruct]' = field(default_factory=lambda: [])
+            value: typing.List[Actions.Structs.EndpointListStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class SetupURL(ClusterAttributeDescriptor):
@@ -3387,7 +3388,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -3403,7 +3404,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -3419,7 +3420,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -3435,7 +3436,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -3451,7 +3452,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -3467,7 +3468,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -3483,7 +3484,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -3505,9 +3506,9 @@
                         ClusterObjectFieldDescriptor(Label="newState", Tag=2, Type=Actions.Enums.ActionStateEnum),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'uint' = 0
-            newState: 'Actions.Enums.ActionStateEnum' = 0
+            actionID: uint = 0
+            invokeID: uint = 0
+            newState: Actions.Enums.ActionStateEnum = 0
 
         @dataclass
         class ActionFailed(ClusterEvent):
@@ -3529,10 +3530,10 @@
                         ClusterObjectFieldDescriptor(Label="error", Tag=3, Type=Actions.Enums.ActionErrorEnum),
                     ])
 
-            actionID: 'uint' = 0
-            invokeID: 'uint' = 0
-            newState: 'Actions.Enums.ActionStateEnum' = 0
-            error: 'Actions.Enums.ActionErrorEnum' = 0
+            actionID: uint = 0
+            invokeID: uint = 0
+            newState: Actions.Enums.ActionStateEnum = 0
+            error: Actions.Enums.ActionErrorEnum = 0
 
 
 @dataclass
@@ -3574,35 +3575,35 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    dataModelRevision: 'uint' = None
-    vendorName: 'str' = None
-    vendorID: 'uint' = None
-    productName: 'str' = None
-    productID: 'uint' = None
-    nodeLabel: 'str' = None
-    location: 'str' = None
-    hardwareVersion: 'uint' = None
-    hardwareVersionString: 'str' = None
-    softwareVersion: 'uint' = None
-    softwareVersionString: 'str' = None
-    manufacturingDate: 'typing.Optional[str]' = None
-    partNumber: 'typing.Optional[str]' = None
-    productURL: 'typing.Optional[str]' = None
-    productLabel: 'typing.Optional[str]' = None
-    serialNumber: 'typing.Optional[str]' = None
-    localConfigDisabled: 'typing.Optional[bool]' = None
-    reachable: 'typing.Optional[bool]' = None
-    uniqueID: 'str' = None
-    capabilityMinima: 'BasicInformation.Structs.CapabilityMinimaStruct' = None
-    productAppearance: 'typing.Optional[BasicInformation.Structs.ProductAppearanceStruct]' = None
-    specificationVersion: 'uint' = None
-    maxPathsPerInvoke: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    dataModelRevision: uint = 0
+    vendorName: str = ""
+    vendorID: uint = 0
+    productName: str = ""
+    productID: uint = 0
+    nodeLabel: str = ""
+    location: str = ""
+    hardwareVersion: uint = 0
+    hardwareVersionString: str = ""
+    softwareVersion: uint = 0
+    softwareVersionString: str = ""
+    manufacturingDate: typing.Optional[str] = None
+    partNumber: typing.Optional[str] = None
+    productURL: typing.Optional[str] = None
+    productLabel: typing.Optional[str] = None
+    serialNumber: typing.Optional[str] = None
+    localConfigDisabled: typing.Optional[bool] = None
+    reachable: typing.Optional[bool] = None
+    uniqueID: str = ""
+    capabilityMinima: BasicInformation.Structs.CapabilityMinimaStruct = field(default_factory=lambda: BasicInformation.Structs.CapabilityMinimaStruct())
+    productAppearance: typing.Optional[BasicInformation.Structs.ProductAppearanceStruct] = None
+    specificationVersion: uint = 0
+    maxPathsPerInvoke: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ColorEnum(MatterIntEnum):
@@ -3679,7 +3680,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000028
             command_id: typing.ClassVar[int] = 0x10020000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -3702,7 +3703,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class VendorName(ClusterAttributeDescriptor):
@@ -3718,7 +3719,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class VendorID(ClusterAttributeDescriptor):
@@ -3734,7 +3735,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ProductName(ClusterAttributeDescriptor):
@@ -3750,7 +3751,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class ProductID(ClusterAttributeDescriptor):
@@ -3766,7 +3767,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class NodeLabel(ClusterAttributeDescriptor):
@@ -3782,7 +3783,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class Location(ClusterAttributeDescriptor):
@@ -3798,7 +3799,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class HardwareVersion(ClusterAttributeDescriptor):
@@ -3814,7 +3815,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class HardwareVersionString(ClusterAttributeDescriptor):
@@ -3830,7 +3831,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class SoftwareVersion(ClusterAttributeDescriptor):
@@ -3846,7 +3847,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class SoftwareVersionString(ClusterAttributeDescriptor):
@@ -3862,7 +3863,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class ManufacturingDate(ClusterAttributeDescriptor):
@@ -3878,7 +3879,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class PartNumber(ClusterAttributeDescriptor):
@@ -3894,7 +3895,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ProductURL(ClusterAttributeDescriptor):
@@ -3910,7 +3911,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ProductLabel(ClusterAttributeDescriptor):
@@ -3926,7 +3927,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class SerialNumber(ClusterAttributeDescriptor):
@@ -3942,7 +3943,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class LocalConfigDisabled(ClusterAttributeDescriptor):
@@ -3958,7 +3959,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class Reachable(ClusterAttributeDescriptor):
@@ -3974,7 +3975,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class UniqueID(ClusterAttributeDescriptor):
@@ -3990,7 +3991,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class CapabilityMinima(ClusterAttributeDescriptor):
@@ -4006,7 +4007,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=BasicInformation.Structs.CapabilityMinimaStruct)
 
-            value: 'BasicInformation.Structs.CapabilityMinimaStruct' = field(default_factory=lambda: BasicInformation.Structs.CapabilityMinimaStruct())
+            value: BasicInformation.Structs.CapabilityMinimaStruct = field(default_factory=lambda: BasicInformation.Structs.CapabilityMinimaStruct())
 
         @dataclass
         class ProductAppearance(ClusterAttributeDescriptor):
@@ -4022,7 +4023,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[BasicInformation.Structs.ProductAppearanceStruct])
 
-            value: 'typing.Optional[BasicInformation.Structs.ProductAppearanceStruct]' = None
+            value: typing.Optional[BasicInformation.Structs.ProductAppearanceStruct] = None
 
         @dataclass
         class SpecificationVersion(ClusterAttributeDescriptor):
@@ -4038,7 +4039,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class MaxPathsPerInvoke(ClusterAttributeDescriptor):
@@ -4054,7 +4055,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -4070,7 +4071,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -4086,7 +4087,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -4102,7 +4103,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -4118,7 +4119,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -4134,7 +4135,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -4150,7 +4151,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -4170,7 +4171,7 @@
                         ClusterObjectFieldDescriptor(Label="softwareVersion", Tag=0, Type=uint),
                     ])
 
-            softwareVersion: 'uint' = 0
+            softwareVersion: uint = 0
 
         @dataclass
         class ShutDown(ClusterEvent):
@@ -4205,7 +4206,7 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=0, Type=uint),
                     ])
 
-            fabricIndex: 'uint' = 0
+            fabricIndex: uint = 0
 
         @dataclass
         class ReachableChanged(ClusterEvent):
@@ -4224,7 +4225,7 @@
                         ClusterObjectFieldDescriptor(Label="reachableNewValue", Tag=0, Type=bool),
                     ])
 
-            reachableNewValue: 'bool' = False
+            reachableNewValue: bool = False
 
 
 @dataclass
@@ -4243,12 +4244,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ApplyUpdateActionEnum(MatterIntEnum):
@@ -4305,21 +4306,21 @@
                         ClusterObjectFieldDescriptor(Label="metadataForProvider", Tag=7, Type=typing.Optional[bytes]),
                     ])
 
-            vendorID: 'uint' = 0
-            productID: 'uint' = 0
-            softwareVersion: 'uint' = 0
-            protocolsSupported: 'typing.List[OtaSoftwareUpdateProvider.Enums.DownloadProtocolEnum]' = field(default_factory=lambda: [])
-            hardwareVersion: 'typing.Optional[uint]' = None
-            location: 'typing.Optional[str]' = None
-            requestorCanConsent: 'typing.Optional[bool]' = None
-            metadataForProvider: 'typing.Optional[bytes]' = None
+            vendorID: uint = 0
+            productID: uint = 0
+            softwareVersion: uint = 0
+            protocolsSupported: typing.List[OtaSoftwareUpdateProvider.Enums.DownloadProtocolEnum] = field(default_factory=lambda: [])
+            hardwareVersion: typing.Optional[uint] = None
+            location: typing.Optional[str] = None
+            requestorCanConsent: typing.Optional[bool] = None
+            metadataForProvider: typing.Optional[bytes] = None
 
         @dataclass
         class QueryImageResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000029
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -4335,14 +4336,14 @@
                         ClusterObjectFieldDescriptor(Label="metadataForRequestor", Tag=7, Type=typing.Optional[bytes]),
                     ])
 
-            status: 'OtaSoftwareUpdateProvider.Enums.StatusEnum' = 0
-            delayedActionTime: 'typing.Optional[uint]' = None
-            imageURI: 'typing.Optional[str]' = None
-            softwareVersion: 'typing.Optional[uint]' = None
-            softwareVersionString: 'typing.Optional[str]' = None
-            updateToken: 'typing.Optional[bytes]' = None
-            userConsentNeeded: 'typing.Optional[bool]' = None
-            metadataForRequestor: 'typing.Optional[bytes]' = None
+            status: OtaSoftwareUpdateProvider.Enums.StatusEnum = 0
+            delayedActionTime: typing.Optional[uint] = None
+            imageURI: typing.Optional[str] = None
+            softwareVersion: typing.Optional[uint] = None
+            softwareVersionString: typing.Optional[str] = None
+            updateToken: typing.Optional[bytes] = None
+            userConsentNeeded: typing.Optional[bool] = None
+            metadataForRequestor: typing.Optional[bytes] = None
 
         @dataclass
         class ApplyUpdateRequest(ClusterCommand):
@@ -4359,15 +4360,15 @@
                         ClusterObjectFieldDescriptor(Label="newVersion", Tag=1, Type=uint),
                     ])
 
-            updateToken: 'bytes' = b""
-            newVersion: 'uint' = 0
+            updateToken: bytes = b""
+            newVersion: uint = 0
 
         @dataclass
         class ApplyUpdateResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000029
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -4377,15 +4378,15 @@
                         ClusterObjectFieldDescriptor(Label="delayedActionTime", Tag=1, Type=uint),
                     ])
 
-            action: 'OtaSoftwareUpdateProvider.Enums.ApplyUpdateActionEnum' = 0
-            delayedActionTime: 'uint' = 0
+            action: OtaSoftwareUpdateProvider.Enums.ApplyUpdateActionEnum = 0
+            delayedActionTime: uint = 0
 
         @dataclass
         class NotifyUpdateApplied(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000029
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -4395,8 +4396,8 @@
                         ClusterObjectFieldDescriptor(Label="softwareVersion", Tag=1, Type=uint),
                     ])
 
-            updateToken: 'bytes' = b""
-            softwareVersion: 'uint' = 0
+            updateToken: bytes = b""
+            softwareVersion: uint = 0
 
     class Attributes:
         @dataclass
@@ -4413,7 +4414,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -4429,7 +4430,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -4445,7 +4446,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -4461,7 +4462,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -4477,7 +4478,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -4493,7 +4494,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -4516,16 +4517,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    defaultOTAProviders: 'typing.List[OtaSoftwareUpdateRequestor.Structs.ProviderLocation]' = None
-    updatePossible: 'bool' = None
-    updateState: 'OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum' = None
-    updateStateProgress: 'typing.Union[Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    defaultOTAProviders: typing.List[OtaSoftwareUpdateRequestor.Structs.ProviderLocation] = field(default_factory=lambda: [])
+    updatePossible: bool = False
+    updateState: OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum = 0
+    updateStateProgress: typing.Union[Nullable, uint] = NullValue
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AnnouncementReasonEnum(MatterIntEnum):
@@ -4588,7 +4589,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000002A
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -4601,11 +4602,11 @@
                         ClusterObjectFieldDescriptor(Label="endpoint", Tag=4, Type=uint),
                     ])
 
-            providerNodeID: 'uint' = 0
-            vendorID: 'uint' = 0
-            announcementReason: 'OtaSoftwareUpdateRequestor.Enums.AnnouncementReasonEnum' = 0
-            metadataForNode: 'typing.Optional[bytes]' = None
-            endpoint: 'uint' = 0
+            providerNodeID: uint = 0
+            vendorID: uint = 0
+            announcementReason: OtaSoftwareUpdateRequestor.Enums.AnnouncementReasonEnum = 0
+            metadataForNode: typing.Optional[bytes] = None
+            endpoint: uint = 0
 
     class Attributes:
         @dataclass
@@ -4622,7 +4623,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[OtaSoftwareUpdateRequestor.Structs.ProviderLocation])
 
-            value: 'typing.List[OtaSoftwareUpdateRequestor.Structs.ProviderLocation]' = field(default_factory=lambda: [])
+            value: typing.List[OtaSoftwareUpdateRequestor.Structs.ProviderLocation] = field(default_factory=lambda: [])
 
         @dataclass
         class UpdatePossible(ClusterAttributeDescriptor):
@@ -4638,7 +4639,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class UpdateState(ClusterAttributeDescriptor):
@@ -4654,7 +4655,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum)
 
-            value: 'OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum' = 0
+            value: OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum = 0
 
         @dataclass
         class UpdateStateProgress(ClusterAttributeDescriptor):
@@ -4670,7 +4671,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -4686,7 +4687,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -4702,7 +4703,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -4718,7 +4719,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -4734,7 +4735,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -4750,7 +4751,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -4766,7 +4767,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -4789,10 +4790,10 @@
                         ClusterObjectFieldDescriptor(Label="targetSoftwareVersion", Tag=3, Type=typing.Union[Nullable, uint]),
                     ])
 
-            previousState: 'OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum' = 0
-            newState: 'OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum' = 0
-            reason: 'OtaSoftwareUpdateRequestor.Enums.ChangeReasonEnum' = 0
-            targetSoftwareVersion: 'typing.Union[Nullable, uint]' = NullValue
+            previousState: OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum = 0
+            newState: OtaSoftwareUpdateRequestor.Enums.UpdateStateEnum = 0
+            reason: OtaSoftwareUpdateRequestor.Enums.ChangeReasonEnum = 0
+            targetSoftwareVersion: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class VersionApplied(ClusterEvent):
@@ -4812,8 +4813,8 @@
                         ClusterObjectFieldDescriptor(Label="productID", Tag=1, Type=uint),
                     ])
 
-            softwareVersion: 'uint' = 0
-            productID: 'uint' = 0
+            softwareVersion: uint = 0
+            productID: uint = 0
 
         @dataclass
         class DownloadError(ClusterEvent):
@@ -4835,10 +4836,10 @@
                         ClusterObjectFieldDescriptor(Label="platformCode", Tag=3, Type=typing.Union[Nullable, int]),
                     ])
 
-            softwareVersion: 'uint' = 0
-            bytesDownloaded: 'uint' = 0
-            progressPercent: 'typing.Union[Nullable, uint]' = NullValue
-            platformCode: 'typing.Union[Nullable, int]' = NullValue
+            softwareVersion: uint = 0
+            bytesDownloaded: uint = 0
+            progressPercent: typing.Union[Nullable, uint] = NullValue
+            platformCode: typing.Union[Nullable, int] = NullValue
 
 
 @dataclass
@@ -4859,14 +4860,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    activeLocale: 'str' = None
-    supportedLocales: 'typing.List[str]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    activeLocale: str = ""
+    supportedLocales: typing.List[str] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -4883,7 +4884,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class SupportedLocales(ClusterAttributeDescriptor):
@@ -4899,7 +4900,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[str])
 
-            value: 'typing.List[str]' = field(default_factory=lambda: [])
+            value: typing.List[str] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -4915,7 +4916,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -4931,7 +4932,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -4947,7 +4948,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -4963,7 +4964,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -4979,7 +4980,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -4995,7 +4996,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -5017,15 +5018,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    hourFormat: 'TimeFormatLocalization.Enums.HourFormatEnum' = None
-    activeCalendarType: 'typing.Optional[TimeFormatLocalization.Enums.CalendarTypeEnum]' = None
-    supportedCalendarTypes: 'typing.Optional[typing.List[TimeFormatLocalization.Enums.CalendarTypeEnum]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    hourFormat: TimeFormatLocalization.Enums.HourFormatEnum = 0
+    activeCalendarType: typing.Optional[TimeFormatLocalization.Enums.CalendarTypeEnum] = None
+    supportedCalendarTypes: typing.Optional[typing.List[TimeFormatLocalization.Enums.CalendarTypeEnum]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CalendarTypeEnum(MatterIntEnum):
@@ -5077,7 +5078,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=TimeFormatLocalization.Enums.HourFormatEnum)
 
-            value: 'TimeFormatLocalization.Enums.HourFormatEnum' = 0
+            value: TimeFormatLocalization.Enums.HourFormatEnum = 0
 
         @dataclass
         class ActiveCalendarType(ClusterAttributeDescriptor):
@@ -5093,7 +5094,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[TimeFormatLocalization.Enums.CalendarTypeEnum])
 
-            value: 'typing.Optional[TimeFormatLocalization.Enums.CalendarTypeEnum]' = None
+            value: typing.Optional[TimeFormatLocalization.Enums.CalendarTypeEnum] = None
 
         @dataclass
         class SupportedCalendarTypes(ClusterAttributeDescriptor):
@@ -5109,7 +5110,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[TimeFormatLocalization.Enums.CalendarTypeEnum]])
 
-            value: 'typing.Optional[typing.List[TimeFormatLocalization.Enums.CalendarTypeEnum]]' = None
+            value: typing.Optional[typing.List[TimeFormatLocalization.Enums.CalendarTypeEnum]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -5125,7 +5126,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -5141,7 +5142,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -5157,7 +5158,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -5173,7 +5174,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -5189,7 +5190,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -5205,7 +5206,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -5225,13 +5226,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    temperatureUnit: 'typing.Optional[UnitLocalization.Enums.TempUnitEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    temperatureUnit: typing.Optional[UnitLocalization.Enums.TempUnitEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class TempUnitEnum(MatterIntEnum):
@@ -5263,7 +5264,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[UnitLocalization.Enums.TempUnitEnum])
 
-            value: 'typing.Optional[UnitLocalization.Enums.TempUnitEnum]' = None
+            value: typing.Optional[UnitLocalization.Enums.TempUnitEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -5279,7 +5280,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -5295,7 +5296,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -5311,7 +5312,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -5327,7 +5328,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -5343,7 +5344,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -5359,7 +5360,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -5379,13 +5380,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    sources: 'typing.List[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    sources: typing.List[uint] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -5402,7 +5403,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -5418,7 +5419,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -5434,7 +5435,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -5450,7 +5451,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -5466,7 +5467,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -5482,7 +5483,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -5498,7 +5499,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -5549,44 +5550,44 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    status: 'PowerSource.Enums.PowerSourceStatusEnum' = None
-    order: 'uint' = None
-    description: 'str' = None
-    wiredAssessedInputVoltage: 'typing.Union[None, Nullable, uint]' = None
-    wiredAssessedInputFrequency: 'typing.Union[None, Nullable, uint]' = None
-    wiredCurrentType: 'typing.Optional[PowerSource.Enums.WiredCurrentTypeEnum]' = None
-    wiredAssessedCurrent: 'typing.Union[None, Nullable, uint]' = None
-    wiredNominalVoltage: 'typing.Optional[uint]' = None
-    wiredMaximumCurrent: 'typing.Optional[uint]' = None
-    wiredPresent: 'typing.Optional[bool]' = None
-    activeWiredFaults: 'typing.Optional[typing.List[PowerSource.Enums.WiredFaultEnum]]' = None
-    batVoltage: 'typing.Union[None, Nullable, uint]' = None
-    batPercentRemaining: 'typing.Union[None, Nullable, uint]' = None
-    batTimeRemaining: 'typing.Union[None, Nullable, uint]' = None
-    batChargeLevel: 'typing.Optional[PowerSource.Enums.BatChargeLevelEnum]' = None
-    batReplacementNeeded: 'typing.Optional[bool]' = None
-    batReplaceability: 'typing.Optional[PowerSource.Enums.BatReplaceabilityEnum]' = None
-    batPresent: 'typing.Optional[bool]' = None
-    activeBatFaults: 'typing.Optional[typing.List[PowerSource.Enums.BatFaultEnum]]' = None
-    batReplacementDescription: 'typing.Optional[str]' = None
-    batCommonDesignation: 'typing.Optional[PowerSource.Enums.BatCommonDesignationEnum]' = None
-    batANSIDesignation: 'typing.Optional[str]' = None
-    batIECDesignation: 'typing.Optional[str]' = None
-    batApprovedChemistry: 'typing.Optional[PowerSource.Enums.BatApprovedChemistryEnum]' = None
-    batCapacity: 'typing.Optional[uint]' = None
-    batQuantity: 'typing.Optional[uint]' = None
-    batChargeState: 'typing.Optional[PowerSource.Enums.BatChargeStateEnum]' = None
-    batTimeToFullCharge: 'typing.Union[None, Nullable, uint]' = None
-    batFunctionalWhileCharging: 'typing.Optional[bool]' = None
-    batChargingCurrent: 'typing.Union[None, Nullable, uint]' = None
-    activeBatChargeFaults: 'typing.Optional[typing.List[PowerSource.Enums.BatChargeFaultEnum]]' = None
-    endpointList: 'typing.List[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    status: PowerSource.Enums.PowerSourceStatusEnum = 0
+    order: uint = 0
+    description: str = ""
+    wiredAssessedInputVoltage: typing.Union[None, Nullable, uint] = None
+    wiredAssessedInputFrequency: typing.Union[None, Nullable, uint] = None
+    wiredCurrentType: typing.Optional[PowerSource.Enums.WiredCurrentTypeEnum] = None
+    wiredAssessedCurrent: typing.Union[None, Nullable, uint] = None
+    wiredNominalVoltage: typing.Optional[uint] = None
+    wiredMaximumCurrent: typing.Optional[uint] = None
+    wiredPresent: typing.Optional[bool] = None
+    activeWiredFaults: typing.Optional[typing.List[PowerSource.Enums.WiredFaultEnum]] = None
+    batVoltage: typing.Union[None, Nullable, uint] = None
+    batPercentRemaining: typing.Union[None, Nullable, uint] = None
+    batTimeRemaining: typing.Union[None, Nullable, uint] = None
+    batChargeLevel: typing.Optional[PowerSource.Enums.BatChargeLevelEnum] = None
+    batReplacementNeeded: typing.Optional[bool] = None
+    batReplaceability: typing.Optional[PowerSource.Enums.BatReplaceabilityEnum] = None
+    batPresent: typing.Optional[bool] = None
+    activeBatFaults: typing.Optional[typing.List[PowerSource.Enums.BatFaultEnum]] = None
+    batReplacementDescription: typing.Optional[str] = None
+    batCommonDesignation: typing.Optional[PowerSource.Enums.BatCommonDesignationEnum] = None
+    batANSIDesignation: typing.Optional[str] = None
+    batIECDesignation: typing.Optional[str] = None
+    batApprovedChemistry: typing.Optional[PowerSource.Enums.BatApprovedChemistryEnum] = None
+    batCapacity: typing.Optional[uint] = None
+    batQuantity: typing.Optional[uint] = None
+    batChargeState: typing.Optional[PowerSource.Enums.BatChargeStateEnum] = None
+    batTimeToFullCharge: typing.Union[None, Nullable, uint] = None
+    batFunctionalWhileCharging: typing.Optional[bool] = None
+    batChargingCurrent: typing.Union[None, Nullable, uint] = None
+    activeBatChargeFaults: typing.Optional[typing.List[PowerSource.Enums.BatChargeFaultEnum]] = None
+    endpointList: typing.List[uint] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class BatApprovedChemistryEnum(MatterIntEnum):
@@ -5869,7 +5870,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=PowerSource.Enums.PowerSourceStatusEnum)
 
-            value: 'PowerSource.Enums.PowerSourceStatusEnum' = 0
+            value: PowerSource.Enums.PowerSourceStatusEnum = 0
 
         @dataclass
         class Order(ClusterAttributeDescriptor):
@@ -5885,7 +5886,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Description(ClusterAttributeDescriptor):
@@ -5901,7 +5902,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class WiredAssessedInputVoltage(ClusterAttributeDescriptor):
@@ -5917,7 +5918,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class WiredAssessedInputFrequency(ClusterAttributeDescriptor):
@@ -5933,7 +5934,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class WiredCurrentType(ClusterAttributeDescriptor):
@@ -5949,7 +5950,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[PowerSource.Enums.WiredCurrentTypeEnum])
 
-            value: 'typing.Optional[PowerSource.Enums.WiredCurrentTypeEnum]' = None
+            value: typing.Optional[PowerSource.Enums.WiredCurrentTypeEnum] = None
 
         @dataclass
         class WiredAssessedCurrent(ClusterAttributeDescriptor):
@@ -5965,7 +5966,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class WiredNominalVoltage(ClusterAttributeDescriptor):
@@ -5981,7 +5982,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class WiredMaximumCurrent(ClusterAttributeDescriptor):
@@ -5997,7 +5998,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class WiredPresent(ClusterAttributeDescriptor):
@@ -6013,7 +6014,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class ActiveWiredFaults(ClusterAttributeDescriptor):
@@ -6029,7 +6030,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[PowerSource.Enums.WiredFaultEnum]])
 
-            value: 'typing.Optional[typing.List[PowerSource.Enums.WiredFaultEnum]]' = None
+            value: typing.Optional[typing.List[PowerSource.Enums.WiredFaultEnum]] = None
 
         @dataclass
         class BatVoltage(ClusterAttributeDescriptor):
@@ -6045,7 +6046,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class BatPercentRemaining(ClusterAttributeDescriptor):
@@ -6061,7 +6062,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class BatTimeRemaining(ClusterAttributeDescriptor):
@@ -6077,7 +6078,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class BatChargeLevel(ClusterAttributeDescriptor):
@@ -6093,7 +6094,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[PowerSource.Enums.BatChargeLevelEnum])
 
-            value: 'typing.Optional[PowerSource.Enums.BatChargeLevelEnum]' = None
+            value: typing.Optional[PowerSource.Enums.BatChargeLevelEnum] = None
 
         @dataclass
         class BatReplacementNeeded(ClusterAttributeDescriptor):
@@ -6109,7 +6110,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class BatReplaceability(ClusterAttributeDescriptor):
@@ -6125,7 +6126,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[PowerSource.Enums.BatReplaceabilityEnum])
 
-            value: 'typing.Optional[PowerSource.Enums.BatReplaceabilityEnum]' = None
+            value: typing.Optional[PowerSource.Enums.BatReplaceabilityEnum] = None
 
         @dataclass
         class BatPresent(ClusterAttributeDescriptor):
@@ -6141,7 +6142,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class ActiveBatFaults(ClusterAttributeDescriptor):
@@ -6157,7 +6158,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[PowerSource.Enums.BatFaultEnum]])
 
-            value: 'typing.Optional[typing.List[PowerSource.Enums.BatFaultEnum]]' = None
+            value: typing.Optional[typing.List[PowerSource.Enums.BatFaultEnum]] = None
 
         @dataclass
         class BatReplacementDescription(ClusterAttributeDescriptor):
@@ -6173,7 +6174,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class BatCommonDesignation(ClusterAttributeDescriptor):
@@ -6189,7 +6190,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[PowerSource.Enums.BatCommonDesignationEnum])
 
-            value: 'typing.Optional[PowerSource.Enums.BatCommonDesignationEnum]' = None
+            value: typing.Optional[PowerSource.Enums.BatCommonDesignationEnum] = None
 
         @dataclass
         class BatANSIDesignation(ClusterAttributeDescriptor):
@@ -6205,7 +6206,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class BatIECDesignation(ClusterAttributeDescriptor):
@@ -6221,7 +6222,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class BatApprovedChemistry(ClusterAttributeDescriptor):
@@ -6237,7 +6238,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[PowerSource.Enums.BatApprovedChemistryEnum])
 
-            value: 'typing.Optional[PowerSource.Enums.BatApprovedChemistryEnum]' = None
+            value: typing.Optional[PowerSource.Enums.BatApprovedChemistryEnum] = None
 
         @dataclass
         class BatCapacity(ClusterAttributeDescriptor):
@@ -6253,7 +6254,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class BatQuantity(ClusterAttributeDescriptor):
@@ -6269,7 +6270,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class BatChargeState(ClusterAttributeDescriptor):
@@ -6285,7 +6286,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[PowerSource.Enums.BatChargeStateEnum])
 
-            value: 'typing.Optional[PowerSource.Enums.BatChargeStateEnum]' = None
+            value: typing.Optional[PowerSource.Enums.BatChargeStateEnum] = None
 
         @dataclass
         class BatTimeToFullCharge(ClusterAttributeDescriptor):
@@ -6301,7 +6302,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class BatFunctionalWhileCharging(ClusterAttributeDescriptor):
@@ -6317,7 +6318,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class BatChargingCurrent(ClusterAttributeDescriptor):
@@ -6333,7 +6334,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ActiveBatChargeFaults(ClusterAttributeDescriptor):
@@ -6349,7 +6350,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[PowerSource.Enums.BatChargeFaultEnum]])
 
-            value: 'typing.Optional[typing.List[PowerSource.Enums.BatChargeFaultEnum]]' = None
+            value: typing.Optional[typing.List[PowerSource.Enums.BatChargeFaultEnum]] = None
 
         @dataclass
         class EndpointList(ClusterAttributeDescriptor):
@@ -6365,7 +6366,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -6381,7 +6382,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -6397,7 +6398,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -6413,7 +6414,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -6429,7 +6430,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -6445,7 +6446,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -6461,7 +6462,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -6482,8 +6483,8 @@
                         ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[PowerSource.Enums.WiredFaultEnum]),
                     ])
 
-            current: 'typing.List[PowerSource.Enums.WiredFaultEnum]' = field(default_factory=lambda: [])
-            previous: 'typing.List[PowerSource.Enums.WiredFaultEnum]' = field(default_factory=lambda: [])
+            current: typing.List[PowerSource.Enums.WiredFaultEnum] = field(default_factory=lambda: [])
+            previous: typing.List[PowerSource.Enums.WiredFaultEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class BatFaultChange(ClusterEvent):
@@ -6503,8 +6504,8 @@
                         ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[PowerSource.Enums.BatFaultEnum]),
                     ])
 
-            current: 'typing.List[PowerSource.Enums.BatFaultEnum]' = field(default_factory=lambda: [])
-            previous: 'typing.List[PowerSource.Enums.BatFaultEnum]' = field(default_factory=lambda: [])
+            current: typing.List[PowerSource.Enums.BatFaultEnum] = field(default_factory=lambda: [])
+            previous: typing.List[PowerSource.Enums.BatFaultEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class BatChargeFaultChange(ClusterEvent):
@@ -6524,8 +6525,8 @@
                         ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[PowerSource.Enums.BatChargeFaultEnum]),
                     ])
 
-            current: 'typing.List[PowerSource.Enums.BatChargeFaultEnum]' = field(default_factory=lambda: [])
-            previous: 'typing.List[PowerSource.Enums.BatChargeFaultEnum]' = field(default_factory=lambda: [])
+            current: typing.List[PowerSource.Enums.BatChargeFaultEnum] = field(default_factory=lambda: [])
+            previous: typing.List[PowerSource.Enums.BatChargeFaultEnum] = field(default_factory=lambda: [])
 
 
 @dataclass
@@ -6554,22 +6555,22 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    breadcrumb: 'uint' = None
-    basicCommissioningInfo: 'GeneralCommissioning.Structs.BasicCommissioningInfo' = None
-    regulatoryConfig: 'GeneralCommissioning.Enums.RegulatoryLocationTypeEnum' = None
-    locationCapability: 'GeneralCommissioning.Enums.RegulatoryLocationTypeEnum' = None
-    supportsConcurrentConnection: 'bool' = None
-    TCAcceptedVersion: 'typing.Optional[uint]' = None
-    TCMinRequiredVersion: 'typing.Optional[uint]' = None
-    TCAcknowledgements: 'typing.Optional[uint]' = None
-    TCAcknowledgementsRequired: 'typing.Optional[bool]' = None
-    TCUpdateDeadline: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    breadcrumb: uint = 0
+    basicCommissioningInfo: GeneralCommissioning.Structs.BasicCommissioningInfo = field(default_factory=lambda: GeneralCommissioning.Structs.BasicCommissioningInfo())
+    regulatoryConfig: GeneralCommissioning.Enums.RegulatoryLocationTypeEnum = 0
+    locationCapability: GeneralCommissioning.Enums.RegulatoryLocationTypeEnum = 0
+    supportsConcurrentConnection: bool = False
+    TCAcceptedVersion: typing.Optional[uint] = None
+    TCMinRequiredVersion: typing.Optional[uint] = None
+    TCAcknowledgements: typing.Optional[uint] = None
+    TCAcknowledgementsRequired: typing.Optional[bool] = None
+    TCUpdateDeadline: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CommissioningErrorEnum(MatterIntEnum):
@@ -6631,15 +6632,15 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=1, Type=uint),
                     ])
 
-            expiryLengthSeconds: 'uint' = 0
-            breadcrumb: 'uint' = 0
+            expiryLengthSeconds: uint = 0
+            breadcrumb: uint = 0
 
         @dataclass
         class ArmFailSafeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000030
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -6649,8 +6650,8 @@
                         ClusterObjectFieldDescriptor(Label="debugText", Tag=1, Type=str),
                     ])
 
-            errorCode: 'GeneralCommissioning.Enums.CommissioningErrorEnum' = 0
-            debugText: 'str' = ""
+            errorCode: GeneralCommissioning.Enums.CommissioningErrorEnum = 0
+            debugText: str = ""
 
         @dataclass
         class SetRegulatoryConfig(ClusterCommand):
@@ -6668,16 +6669,16 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=2, Type=uint),
                     ])
 
-            newRegulatoryConfig: 'GeneralCommissioning.Enums.RegulatoryLocationTypeEnum' = 0
-            countryCode: 'str' = ""
-            breadcrumb: 'uint' = 0
+            newRegulatoryConfig: GeneralCommissioning.Enums.RegulatoryLocationTypeEnum = 0
+            countryCode: str = ""
+            breadcrumb: uint = 0
 
         @dataclass
         class SetRegulatoryConfigResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000030
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -6687,8 +6688,8 @@
                         ClusterObjectFieldDescriptor(Label="debugText", Tag=1, Type=str),
                     ])
 
-            errorCode: 'GeneralCommissioning.Enums.CommissioningErrorEnum' = 0
-            debugText: 'str' = ""
+            errorCode: GeneralCommissioning.Enums.CommissioningErrorEnum = 0
+            debugText: str = ""
 
         @dataclass
         class CommissioningComplete(ClusterCommand):
@@ -6708,7 +6709,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000030
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -6718,8 +6719,8 @@
                         ClusterObjectFieldDescriptor(Label="debugText", Tag=1, Type=str),
                     ])
 
-            errorCode: 'GeneralCommissioning.Enums.CommissioningErrorEnum' = 0
-            debugText: 'str' = ""
+            errorCode: GeneralCommissioning.Enums.CommissioningErrorEnum = 0
+            debugText: str = ""
 
         @dataclass
         class SetTCAcknowledgements(ClusterCommand):
@@ -6736,15 +6737,15 @@
                         ClusterObjectFieldDescriptor(Label="TCUserResponse", Tag=1, Type=uint),
                     ])
 
-            TCVersion: 'uint' = 0
-            TCUserResponse: 'uint' = 0
+            TCVersion: uint = 0
+            TCUserResponse: uint = 0
 
         @dataclass
         class SetTCAcknowledgementsResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000030
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -6753,7 +6754,7 @@
                         ClusterObjectFieldDescriptor(Label="errorCode", Tag=0, Type=GeneralCommissioning.Enums.CommissioningErrorEnum),
                     ])
 
-            errorCode: 'GeneralCommissioning.Enums.CommissioningErrorEnum' = 0
+            errorCode: GeneralCommissioning.Enums.CommissioningErrorEnum = 0
 
     class Attributes:
         @dataclass
@@ -6770,7 +6771,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class BasicCommissioningInfo(ClusterAttributeDescriptor):
@@ -6786,7 +6787,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=GeneralCommissioning.Structs.BasicCommissioningInfo)
 
-            value: 'GeneralCommissioning.Structs.BasicCommissioningInfo' = field(default_factory=lambda: GeneralCommissioning.Structs.BasicCommissioningInfo())
+            value: GeneralCommissioning.Structs.BasicCommissioningInfo = field(default_factory=lambda: GeneralCommissioning.Structs.BasicCommissioningInfo())
 
         @dataclass
         class RegulatoryConfig(ClusterAttributeDescriptor):
@@ -6802,7 +6803,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=GeneralCommissioning.Enums.RegulatoryLocationTypeEnum)
 
-            value: 'GeneralCommissioning.Enums.RegulatoryLocationTypeEnum' = 0
+            value: GeneralCommissioning.Enums.RegulatoryLocationTypeEnum = 0
 
         @dataclass
         class LocationCapability(ClusterAttributeDescriptor):
@@ -6818,7 +6819,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=GeneralCommissioning.Enums.RegulatoryLocationTypeEnum)
 
-            value: 'GeneralCommissioning.Enums.RegulatoryLocationTypeEnum' = 0
+            value: GeneralCommissioning.Enums.RegulatoryLocationTypeEnum = 0
 
         @dataclass
         class SupportsConcurrentConnection(ClusterAttributeDescriptor):
@@ -6834,7 +6835,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class TCAcceptedVersion(ClusterAttributeDescriptor):
@@ -6850,7 +6851,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TCMinRequiredVersion(ClusterAttributeDescriptor):
@@ -6866,7 +6867,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TCAcknowledgements(ClusterAttributeDescriptor):
@@ -6882,7 +6883,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TCAcknowledgementsRequired(ClusterAttributeDescriptor):
@@ -6898,7 +6899,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class TCUpdateDeadline(ClusterAttributeDescriptor):
@@ -6914,7 +6915,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -6930,7 +6931,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -6946,7 +6947,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -6962,7 +6963,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -6978,7 +6979,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -6994,7 +6995,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -7010,7 +7011,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -7040,23 +7041,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    maxNetworks: 'uint' = None
-    networks: 'typing.List[NetworkCommissioning.Structs.NetworkInfoStruct]' = None
-    scanMaxTimeSeconds: 'typing.Optional[uint]' = None
-    connectMaxTimeSeconds: 'typing.Optional[uint]' = None
-    interfaceEnabled: 'bool' = None
-    lastNetworkingStatus: 'typing.Union[Nullable, NetworkCommissioning.Enums.NetworkCommissioningStatusEnum]' = None
-    lastNetworkID: 'typing.Union[Nullable, bytes]' = None
-    lastConnectErrorValue: 'typing.Union[Nullable, int]' = None
-    supportedWiFiBands: 'typing.Optional[typing.List[NetworkCommissioning.Enums.WiFiBandEnum]]' = None
-    supportedThreadFeatures: 'typing.Optional[uint]' = None
-    threadVersion: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    maxNetworks: uint = 0
+    networks: typing.List[NetworkCommissioning.Structs.NetworkInfoStruct] = field(default_factory=lambda: [])
+    scanMaxTimeSeconds: typing.Optional[uint] = None
+    connectMaxTimeSeconds: typing.Optional[uint] = None
+    interfaceEnabled: bool = False
+    lastNetworkingStatus: typing.Union[Nullable, NetworkCommissioning.Enums.NetworkCommissioningStatusEnum] = NullValue
+    lastNetworkID: typing.Union[Nullable, bytes] = NullValue
+    lastConnectErrorValue: typing.Union[Nullable, int] = NullValue
+    supportedWiFiBands: typing.Optional[typing.List[NetworkCommissioning.Enums.WiFiBandEnum]] = None
+    supportedThreadFeatures: typing.Optional[uint] = None
+    threadVersion: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class NetworkCommissioningStatusEnum(MatterIntEnum):
@@ -7194,15 +7195,15 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            ssid: 'typing.Union[None, Nullable, bytes]' = None
-            breadcrumb: 'typing.Optional[uint]' = None
+            ssid: typing.Union[None, Nullable, bytes] = None
+            breadcrumb: typing.Optional[uint] = None
 
         @dataclass
         class ScanNetworksResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000031
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -7214,10 +7215,10 @@
                         ClusterObjectFieldDescriptor(Label="threadScanResults", Tag=3, Type=typing.Optional[typing.List[NetworkCommissioning.Structs.ThreadInterfaceScanResultStruct]]),
                     ])
 
-            networkingStatus: 'NetworkCommissioning.Enums.NetworkCommissioningStatusEnum' = 0
-            debugText: 'typing.Optional[str]' = None
-            wiFiScanResults: 'typing.Optional[typing.List[NetworkCommissioning.Structs.WiFiInterfaceScanResultStruct]]' = None
-            threadScanResults: 'typing.Optional[typing.List[NetworkCommissioning.Structs.ThreadInterfaceScanResultStruct]]' = None
+            networkingStatus: NetworkCommissioning.Enums.NetworkCommissioningStatusEnum = 0
+            debugText: typing.Optional[str] = None
+            wiFiScanResults: typing.Optional[typing.List[NetworkCommissioning.Structs.WiFiInterfaceScanResultStruct]] = None
+            threadScanResults: typing.Optional[typing.List[NetworkCommissioning.Structs.ThreadInterfaceScanResultStruct]] = None
 
         @dataclass
         class AddOrUpdateWiFiNetwork(ClusterCommand):
@@ -7238,12 +7239,12 @@
                         ClusterObjectFieldDescriptor(Label="possessionNonce", Tag=5, Type=typing.Optional[bytes]),
                     ])
 
-            ssid: 'bytes' = b""
-            credentials: 'bytes' = b""
-            breadcrumb: 'typing.Optional[uint]' = None
-            networkIdentity: 'typing.Optional[bytes]' = None
-            clientIdentifier: 'typing.Optional[bytes]' = None
-            possessionNonce: 'typing.Optional[bytes]' = None
+            ssid: bytes = b""
+            credentials: bytes = b""
+            breadcrumb: typing.Optional[uint] = None
+            networkIdentity: typing.Optional[bytes] = None
+            clientIdentifier: typing.Optional[bytes] = None
+            possessionNonce: typing.Optional[bytes] = None
 
         @dataclass
         class AddOrUpdateThreadNetwork(ClusterCommand):
@@ -7260,8 +7261,8 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            operationalDataset: 'bytes' = b""
-            breadcrumb: 'typing.Optional[uint]' = None
+            operationalDataset: bytes = b""
+            breadcrumb: typing.Optional[uint] = None
 
         @dataclass
         class RemoveNetwork(ClusterCommand):
@@ -7278,15 +7279,15 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            networkID: 'bytes' = b""
-            breadcrumb: 'typing.Optional[uint]' = None
+            networkID: bytes = b""
+            breadcrumb: typing.Optional[uint] = None
 
         @dataclass
         class NetworkConfigResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000031
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -7299,11 +7300,11 @@
                         ClusterObjectFieldDescriptor(Label="possessionSignature", Tag=4, Type=typing.Optional[bytes]),
                     ])
 
-            networkingStatus: 'NetworkCommissioning.Enums.NetworkCommissioningStatusEnum' = 0
-            debugText: 'typing.Optional[str]' = None
-            networkIndex: 'typing.Optional[uint]' = None
-            clientIdentity: 'typing.Optional[bytes]' = None
-            possessionSignature: 'typing.Optional[bytes]' = None
+            networkingStatus: NetworkCommissioning.Enums.NetworkCommissioningStatusEnum = 0
+            debugText: typing.Optional[str] = None
+            networkIndex: typing.Optional[uint] = None
+            clientIdentity: typing.Optional[bytes] = None
+            possessionSignature: typing.Optional[bytes] = None
 
         @dataclass
         class ConnectNetwork(ClusterCommand):
@@ -7320,15 +7321,15 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            networkID: 'bytes' = b""
-            breadcrumb: 'typing.Optional[uint]' = None
+            networkID: bytes = b""
+            breadcrumb: typing.Optional[uint] = None
 
         @dataclass
         class ConnectNetworkResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000031
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -7339,9 +7340,9 @@
                         ClusterObjectFieldDescriptor(Label="errorValue", Tag=2, Type=typing.Union[Nullable, int]),
                     ])
 
-            networkingStatus: 'NetworkCommissioning.Enums.NetworkCommissioningStatusEnum' = 0
-            debugText: 'typing.Optional[str]' = None
-            errorValue: 'typing.Union[Nullable, int]' = NullValue
+            networkingStatus: NetworkCommissioning.Enums.NetworkCommissioningStatusEnum = 0
+            debugText: typing.Optional[str] = None
+            errorValue: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class ReorderNetwork(ClusterCommand):
@@ -7359,9 +7360,9 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=2, Type=typing.Optional[uint]),
                     ])
 
-            networkID: 'bytes' = b""
-            networkIndex: 'uint' = 0
-            breadcrumb: 'typing.Optional[uint]' = None
+            networkID: bytes = b""
+            networkIndex: uint = 0
+            breadcrumb: typing.Optional[uint] = None
 
         @dataclass
         class QueryIdentity(ClusterCommand):
@@ -7378,15 +7379,15 @@
                         ClusterObjectFieldDescriptor(Label="possessionNonce", Tag=1, Type=typing.Optional[bytes]),
                     ])
 
-            keyIdentifier: 'bytes' = b""
-            possessionNonce: 'typing.Optional[bytes]' = None
+            keyIdentifier: bytes = b""
+            possessionNonce: typing.Optional[bytes] = None
 
         @dataclass
         class QueryIdentityResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000031
             command_id: typing.ClassVar[int] = 0x0000000A
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -7396,8 +7397,8 @@
                         ClusterObjectFieldDescriptor(Label="possessionSignature", Tag=1, Type=typing.Optional[bytes]),
                     ])
 
-            identity: 'bytes' = b""
-            possessionSignature: 'typing.Optional[bytes]' = None
+            identity: bytes = b""
+            possessionSignature: typing.Optional[bytes] = None
 
     class Attributes:
         @dataclass
@@ -7414,7 +7415,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Networks(ClusterAttributeDescriptor):
@@ -7430,7 +7431,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[NetworkCommissioning.Structs.NetworkInfoStruct])
 
-            value: 'typing.List[NetworkCommissioning.Structs.NetworkInfoStruct]' = field(default_factory=lambda: [])
+            value: typing.List[NetworkCommissioning.Structs.NetworkInfoStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class ScanMaxTimeSeconds(ClusterAttributeDescriptor):
@@ -7446,7 +7447,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ConnectMaxTimeSeconds(ClusterAttributeDescriptor):
@@ -7462,7 +7463,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class InterfaceEnabled(ClusterAttributeDescriptor):
@@ -7478,7 +7479,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class LastNetworkingStatus(ClusterAttributeDescriptor):
@@ -7494,7 +7495,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, NetworkCommissioning.Enums.NetworkCommissioningStatusEnum])
 
-            value: 'typing.Union[Nullable, NetworkCommissioning.Enums.NetworkCommissioningStatusEnum]' = NullValue
+            value: typing.Union[Nullable, NetworkCommissioning.Enums.NetworkCommissioningStatusEnum] = NullValue
 
         @dataclass
         class LastNetworkID(ClusterAttributeDescriptor):
@@ -7510,7 +7511,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes])
 
-            value: 'typing.Union[Nullable, bytes]' = NullValue
+            value: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class LastConnectErrorValue(ClusterAttributeDescriptor):
@@ -7526,7 +7527,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class SupportedWiFiBands(ClusterAttributeDescriptor):
@@ -7542,7 +7543,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[NetworkCommissioning.Enums.WiFiBandEnum]])
 
-            value: 'typing.Optional[typing.List[NetworkCommissioning.Enums.WiFiBandEnum]]' = None
+            value: typing.Optional[typing.List[NetworkCommissioning.Enums.WiFiBandEnum]] = None
 
         @dataclass
         class SupportedThreadFeatures(ClusterAttributeDescriptor):
@@ -7558,7 +7559,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ThreadVersion(ClusterAttributeDescriptor):
@@ -7574,7 +7575,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -7590,7 +7591,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -7606,7 +7607,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -7622,7 +7623,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -7638,7 +7639,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -7654,7 +7655,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -7670,7 +7671,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -7689,12 +7690,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class IntentEnum(MatterIntEnum):
@@ -7745,16 +7746,16 @@
                         ClusterObjectFieldDescriptor(Label="transferFileDesignator", Tag=2, Type=typing.Optional[str]),
                     ])
 
-            intent: 'DiagnosticLogs.Enums.IntentEnum' = 0
-            requestedProtocol: 'DiagnosticLogs.Enums.TransferProtocolEnum' = 0
-            transferFileDesignator: 'typing.Optional[str]' = None
+            intent: DiagnosticLogs.Enums.IntentEnum = 0
+            requestedProtocol: DiagnosticLogs.Enums.TransferProtocolEnum = 0
+            transferFileDesignator: typing.Optional[str] = None
 
         @dataclass
         class RetrieveLogsResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000032
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -7766,10 +7767,10 @@
                         ClusterObjectFieldDescriptor(Label="timeSinceBoot", Tag=3, Type=typing.Optional[uint]),
                     ])
 
-            status: 'DiagnosticLogs.Enums.StatusEnum' = 0
-            logContent: 'bytes' = b""
-            UTCTimeStamp: 'typing.Optional[uint]' = None
-            timeSinceBoot: 'typing.Optional[uint]' = None
+            status: DiagnosticLogs.Enums.StatusEnum = 0
+            logContent: bytes = b""
+            UTCTimeStamp: typing.Optional[uint] = None
+            timeSinceBoot: typing.Optional[uint] = None
 
     class Attributes:
         @dataclass
@@ -7786,7 +7787,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -7802,7 +7803,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -7818,7 +7819,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -7834,7 +7835,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -7850,7 +7851,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -7866,7 +7867,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -7894,21 +7895,21 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    networkInterfaces: 'typing.List[GeneralDiagnostics.Structs.NetworkInterface]' = None
-    rebootCount: 'uint' = None
-    upTime: 'typing.Optional[uint]' = None
-    totalOperationalHours: 'typing.Optional[uint]' = None
-    bootReason: 'typing.Optional[GeneralDiagnostics.Enums.BootReasonEnum]' = None
-    activeHardwareFaults: 'typing.Optional[typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]]' = None
-    activeRadioFaults: 'typing.Optional[typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]]' = None
-    activeNetworkFaults: 'typing.Optional[typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]]' = None
-    testEventTriggersEnabled: 'bool' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    networkInterfaces: typing.List[GeneralDiagnostics.Structs.NetworkInterface] = field(default_factory=lambda: [])
+    rebootCount: uint = 0
+    upTime: typing.Optional[uint] = None
+    totalOperationalHours: typing.Optional[uint] = None
+    bootReason: typing.Optional[GeneralDiagnostics.Enums.BootReasonEnum] = None
+    activeHardwareFaults: typing.Optional[typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]] = None
+    activeRadioFaults: typing.Optional[typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]] = None
+    activeNetworkFaults: typing.Optional[typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]] = None
+    testEventTriggersEnabled: bool = False
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class BootReasonEnum(MatterIntEnum):
@@ -8016,7 +8017,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000033
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -8026,8 +8027,8 @@
                         ClusterObjectFieldDescriptor(Label="eventTrigger", Tag=1, Type=uint),
                     ])
 
-            enableKey: 'bytes' = b""
-            eventTrigger: 'uint' = 0
+            enableKey: bytes = b""
+            eventTrigger: uint = 0
 
         @dataclass
         class TimeSnapshot(ClusterCommand):
@@ -8047,7 +8048,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000033
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -8057,8 +8058,8 @@
                         ClusterObjectFieldDescriptor(Label="posixTimeMs", Tag=1, Type=typing.Union[Nullable, uint]),
                     ])
 
-            systemTimeMs: 'uint' = 0
-            posixTimeMs: 'typing.Union[Nullable, uint]' = NullValue
+            systemTimeMs: uint = 0
+            posixTimeMs: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class PayloadTestRequest(ClusterCommand):
@@ -8076,16 +8077,16 @@
                         ClusterObjectFieldDescriptor(Label="count", Tag=2, Type=uint),
                     ])
 
-            enableKey: 'bytes' = b""
-            value: 'uint' = 0
-            count: 'uint' = 0
+            enableKey: bytes = b""
+            value: uint = 0
+            count: uint = 0
 
         @dataclass
         class PayloadTestResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000033
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -8094,7 +8095,7 @@
                         ClusterObjectFieldDescriptor(Label="payload", Tag=0, Type=bytes),
                     ])
 
-            payload: 'bytes' = b""
+            payload: bytes = b""
 
     class Attributes:
         @dataclass
@@ -8111,7 +8112,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[GeneralDiagnostics.Structs.NetworkInterface])
 
-            value: 'typing.List[GeneralDiagnostics.Structs.NetworkInterface]' = field(default_factory=lambda: [])
+            value: typing.List[GeneralDiagnostics.Structs.NetworkInterface] = field(default_factory=lambda: [])
 
         @dataclass
         class RebootCount(ClusterAttributeDescriptor):
@@ -8127,7 +8128,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class UpTime(ClusterAttributeDescriptor):
@@ -8143,7 +8144,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TotalOperationalHours(ClusterAttributeDescriptor):
@@ -8159,7 +8160,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class BootReason(ClusterAttributeDescriptor):
@@ -8175,7 +8176,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[GeneralDiagnostics.Enums.BootReasonEnum])
 
-            value: 'typing.Optional[GeneralDiagnostics.Enums.BootReasonEnum]' = None
+            value: typing.Optional[GeneralDiagnostics.Enums.BootReasonEnum] = None
 
         @dataclass
         class ActiveHardwareFaults(ClusterAttributeDescriptor):
@@ -8191,7 +8192,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]])
 
-            value: 'typing.Optional[typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]]' = None
+            value: typing.Optional[typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]] = None
 
         @dataclass
         class ActiveRadioFaults(ClusterAttributeDescriptor):
@@ -8207,7 +8208,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]])
 
-            value: 'typing.Optional[typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]]' = None
+            value: typing.Optional[typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]] = None
 
         @dataclass
         class ActiveNetworkFaults(ClusterAttributeDescriptor):
@@ -8223,7 +8224,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]])
 
-            value: 'typing.Optional[typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]]' = None
+            value: typing.Optional[typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]] = None
 
         @dataclass
         class TestEventTriggersEnabled(ClusterAttributeDescriptor):
@@ -8239,7 +8240,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -8255,7 +8256,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -8271,7 +8272,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -8287,7 +8288,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -8303,7 +8304,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -8319,7 +8320,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -8335,7 +8336,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -8356,8 +8357,8 @@
                         ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]),
                     ])
 
-            current: 'typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]' = field(default_factory=lambda: [])
-            previous: 'typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum]' = field(default_factory=lambda: [])
+            current: typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum] = field(default_factory=lambda: [])
+            previous: typing.List[GeneralDiagnostics.Enums.HardwareFaultEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class RadioFaultChange(ClusterEvent):
@@ -8377,8 +8378,8 @@
                         ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]),
                     ])
 
-            current: 'typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]' = field(default_factory=lambda: [])
-            previous: 'typing.List[GeneralDiagnostics.Enums.RadioFaultEnum]' = field(default_factory=lambda: [])
+            current: typing.List[GeneralDiagnostics.Enums.RadioFaultEnum] = field(default_factory=lambda: [])
+            previous: typing.List[GeneralDiagnostics.Enums.RadioFaultEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class NetworkFaultChange(ClusterEvent):
@@ -8398,8 +8399,8 @@
                         ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]),
                     ])
 
-            current: 'typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]' = field(default_factory=lambda: [])
-            previous: 'typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum]' = field(default_factory=lambda: [])
+            current: typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum] = field(default_factory=lambda: [])
+            previous: typing.List[GeneralDiagnostics.Enums.NetworkFaultEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class BootReason(ClusterEvent):
@@ -8418,7 +8419,7 @@
                         ClusterObjectFieldDescriptor(Label="bootReason", Tag=0, Type=GeneralDiagnostics.Enums.BootReasonEnum),
                     ])
 
-            bootReason: 'GeneralDiagnostics.Enums.BootReasonEnum' = 0
+            bootReason: GeneralDiagnostics.Enums.BootReasonEnum = 0
 
 
 @dataclass
@@ -8441,16 +8442,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    threadMetrics: 'typing.Optional[typing.List[SoftwareDiagnostics.Structs.ThreadMetricsStruct]]' = None
-    currentHeapFree: 'typing.Optional[uint]' = None
-    currentHeapUsed: 'typing.Optional[uint]' = None
-    currentHeapHighWatermark: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    threadMetrics: typing.Optional[typing.List[SoftwareDiagnostics.Structs.ThreadMetricsStruct]] = None
+    currentHeapFree: typing.Optional[uint] = None
+    currentHeapUsed: typing.Optional[uint] = None
+    currentHeapHighWatermark: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -8482,7 +8483,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000034
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -8505,7 +8506,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[SoftwareDiagnostics.Structs.ThreadMetricsStruct]])
 
-            value: 'typing.Optional[typing.List[SoftwareDiagnostics.Structs.ThreadMetricsStruct]]' = None
+            value: typing.Optional[typing.List[SoftwareDiagnostics.Structs.ThreadMetricsStruct]] = None
 
         @dataclass
         class CurrentHeapFree(ClusterAttributeDescriptor):
@@ -8521,7 +8522,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CurrentHeapUsed(ClusterAttributeDescriptor):
@@ -8537,7 +8538,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CurrentHeapHighWatermark(ClusterAttributeDescriptor):
@@ -8553,7 +8554,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -8569,7 +8570,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -8585,7 +8586,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -8601,7 +8602,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -8617,7 +8618,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -8633,7 +8634,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -8649,7 +8650,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -8671,9 +8672,9 @@
                         ClusterObjectFieldDescriptor(Label="faultRecording", Tag=2, Type=typing.Optional[bytes]),
                     ])
 
-            id: 'uint' = 0
-            name: 'typing.Optional[str]' = None
-            faultRecording: 'typing.Optional[bytes]' = None
+            id: uint = 0
+            name: typing.Optional[str] = None
+            faultRecording: typing.Optional[bytes] = None
 
 
 @dataclass
@@ -8755,75 +8756,75 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    channel: 'typing.Union[Nullable, uint]' = None
-    routingRole: 'typing.Union[Nullable, ThreadNetworkDiagnostics.Enums.RoutingRoleEnum]' = None
-    networkName: 'typing.Union[Nullable, str]' = None
-    panId: 'typing.Union[Nullable, uint]' = None
-    extendedPanId: 'typing.Union[Nullable, uint]' = None
-    meshLocalPrefix: 'typing.Union[Nullable, bytes]' = None
-    overrunCount: 'typing.Optional[uint]' = None
-    neighborTable: 'typing.List[ThreadNetworkDiagnostics.Structs.NeighborTableStruct]' = None
-    routeTable: 'typing.List[ThreadNetworkDiagnostics.Structs.RouteTableStruct]' = None
-    partitionId: 'typing.Union[Nullable, uint]' = None
-    weighting: 'typing.Union[Nullable, uint]' = None
-    dataVersion: 'typing.Union[Nullable, uint]' = None
-    stableDataVersion: 'typing.Union[Nullable, uint]' = None
-    leaderRouterId: 'typing.Union[Nullable, uint]' = None
-    detachedRoleCount: 'typing.Optional[uint]' = None
-    childRoleCount: 'typing.Optional[uint]' = None
-    routerRoleCount: 'typing.Optional[uint]' = None
-    leaderRoleCount: 'typing.Optional[uint]' = None
-    attachAttemptCount: 'typing.Optional[uint]' = None
-    partitionIdChangeCount: 'typing.Optional[uint]' = None
-    betterPartitionAttachAttemptCount: 'typing.Optional[uint]' = None
-    parentChangeCount: 'typing.Optional[uint]' = None
-    txTotalCount: 'typing.Optional[uint]' = None
-    txUnicastCount: 'typing.Optional[uint]' = None
-    txBroadcastCount: 'typing.Optional[uint]' = None
-    txAckRequestedCount: 'typing.Optional[uint]' = None
-    txAckedCount: 'typing.Optional[uint]' = None
-    txNoAckRequestedCount: 'typing.Optional[uint]' = None
-    txDataCount: 'typing.Optional[uint]' = None
-    txDataPollCount: 'typing.Optional[uint]' = None
-    txBeaconCount: 'typing.Optional[uint]' = None
-    txBeaconRequestCount: 'typing.Optional[uint]' = None
-    txOtherCount: 'typing.Optional[uint]' = None
-    txRetryCount: 'typing.Optional[uint]' = None
-    txDirectMaxRetryExpiryCount: 'typing.Optional[uint]' = None
-    txIndirectMaxRetryExpiryCount: 'typing.Optional[uint]' = None
-    txErrCcaCount: 'typing.Optional[uint]' = None
-    txErrAbortCount: 'typing.Optional[uint]' = None
-    txErrBusyChannelCount: 'typing.Optional[uint]' = None
-    rxTotalCount: 'typing.Optional[uint]' = None
-    rxUnicastCount: 'typing.Optional[uint]' = None
-    rxBroadcastCount: 'typing.Optional[uint]' = None
-    rxDataCount: 'typing.Optional[uint]' = None
-    rxDataPollCount: 'typing.Optional[uint]' = None
-    rxBeaconCount: 'typing.Optional[uint]' = None
-    rxBeaconRequestCount: 'typing.Optional[uint]' = None
-    rxOtherCount: 'typing.Optional[uint]' = None
-    rxAddressFilteredCount: 'typing.Optional[uint]' = None
-    rxDestAddrFilteredCount: 'typing.Optional[uint]' = None
-    rxDuplicatedCount: 'typing.Optional[uint]' = None
-    rxErrNoFrameCount: 'typing.Optional[uint]' = None
-    rxErrUnknownNeighborCount: 'typing.Optional[uint]' = None
-    rxErrInvalidSrcAddrCount: 'typing.Optional[uint]' = None
-    rxErrSecCount: 'typing.Optional[uint]' = None
-    rxErrFcsCount: 'typing.Optional[uint]' = None
-    rxErrOtherCount: 'typing.Optional[uint]' = None
-    activeTimestamp: 'typing.Union[None, Nullable, uint]' = None
-    pendingTimestamp: 'typing.Union[None, Nullable, uint]' = None
-    delay: 'typing.Union[None, Nullable, uint]' = None
-    securityPolicy: 'typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.SecurityPolicy]' = None
-    channelPage0Mask: 'typing.Union[Nullable, bytes]' = None
-    operationalDatasetComponents: 'typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.OperationalDatasetComponents]' = None
-    activeNetworkFaultsList: 'typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    channel: typing.Union[Nullable, uint] = NullValue
+    routingRole: typing.Union[Nullable, ThreadNetworkDiagnostics.Enums.RoutingRoleEnum] = NullValue
+    networkName: typing.Union[Nullable, str] = NullValue
+    panId: typing.Union[Nullable, uint] = NullValue
+    extendedPanId: typing.Union[Nullable, uint] = NullValue
+    meshLocalPrefix: typing.Union[Nullable, bytes] = NullValue
+    overrunCount: typing.Optional[uint] = None
+    neighborTable: typing.List[ThreadNetworkDiagnostics.Structs.NeighborTableStruct] = field(default_factory=lambda: [])
+    routeTable: typing.List[ThreadNetworkDiagnostics.Structs.RouteTableStruct] = field(default_factory=lambda: [])
+    partitionId: typing.Union[Nullable, uint] = NullValue
+    weighting: typing.Union[Nullable, uint] = NullValue
+    dataVersion: typing.Union[Nullable, uint] = NullValue
+    stableDataVersion: typing.Union[Nullable, uint] = NullValue
+    leaderRouterId: typing.Union[Nullable, uint] = NullValue
+    detachedRoleCount: typing.Optional[uint] = None
+    childRoleCount: typing.Optional[uint] = None
+    routerRoleCount: typing.Optional[uint] = None
+    leaderRoleCount: typing.Optional[uint] = None
+    attachAttemptCount: typing.Optional[uint] = None
+    partitionIdChangeCount: typing.Optional[uint] = None
+    betterPartitionAttachAttemptCount: typing.Optional[uint] = None
+    parentChangeCount: typing.Optional[uint] = None
+    txTotalCount: typing.Optional[uint] = None
+    txUnicastCount: typing.Optional[uint] = None
+    txBroadcastCount: typing.Optional[uint] = None
+    txAckRequestedCount: typing.Optional[uint] = None
+    txAckedCount: typing.Optional[uint] = None
+    txNoAckRequestedCount: typing.Optional[uint] = None
+    txDataCount: typing.Optional[uint] = None
+    txDataPollCount: typing.Optional[uint] = None
+    txBeaconCount: typing.Optional[uint] = None
+    txBeaconRequestCount: typing.Optional[uint] = None
+    txOtherCount: typing.Optional[uint] = None
+    txRetryCount: typing.Optional[uint] = None
+    txDirectMaxRetryExpiryCount: typing.Optional[uint] = None
+    txIndirectMaxRetryExpiryCount: typing.Optional[uint] = None
+    txErrCcaCount: typing.Optional[uint] = None
+    txErrAbortCount: typing.Optional[uint] = None
+    txErrBusyChannelCount: typing.Optional[uint] = None
+    rxTotalCount: typing.Optional[uint] = None
+    rxUnicastCount: typing.Optional[uint] = None
+    rxBroadcastCount: typing.Optional[uint] = None
+    rxDataCount: typing.Optional[uint] = None
+    rxDataPollCount: typing.Optional[uint] = None
+    rxBeaconCount: typing.Optional[uint] = None
+    rxBeaconRequestCount: typing.Optional[uint] = None
+    rxOtherCount: typing.Optional[uint] = None
+    rxAddressFilteredCount: typing.Optional[uint] = None
+    rxDestAddrFilteredCount: typing.Optional[uint] = None
+    rxDuplicatedCount: typing.Optional[uint] = None
+    rxErrNoFrameCount: typing.Optional[uint] = None
+    rxErrUnknownNeighborCount: typing.Optional[uint] = None
+    rxErrInvalidSrcAddrCount: typing.Optional[uint] = None
+    rxErrSecCount: typing.Optional[uint] = None
+    rxErrFcsCount: typing.Optional[uint] = None
+    rxErrOtherCount: typing.Optional[uint] = None
+    activeTimestamp: typing.Union[None, Nullable, uint] = None
+    pendingTimestamp: typing.Union[None, Nullable, uint] = None
+    delay: typing.Union[None, Nullable, uint] = None
+    securityPolicy: typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.SecurityPolicy] = NullValue
+    channelPage0Mask: typing.Union[Nullable, bytes] = NullValue
+    operationalDatasetComponents: typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.OperationalDatasetComponents] = NullValue
+    activeNetworkFaultsList: typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ConnectionStatusEnum(MatterIntEnum):
@@ -8986,7 +8987,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000035
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -9009,7 +9010,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class RoutingRole(ClusterAttributeDescriptor):
@@ -9025,7 +9026,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, ThreadNetworkDiagnostics.Enums.RoutingRoleEnum])
 
-            value: 'typing.Union[Nullable, ThreadNetworkDiagnostics.Enums.RoutingRoleEnum]' = NullValue
+            value: typing.Union[Nullable, ThreadNetworkDiagnostics.Enums.RoutingRoleEnum] = NullValue
 
         @dataclass
         class NetworkName(ClusterAttributeDescriptor):
@@ -9041,7 +9042,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, str])
 
-            value: 'typing.Union[Nullable, str]' = NullValue
+            value: typing.Union[Nullable, str] = NullValue
 
         @dataclass
         class PanId(ClusterAttributeDescriptor):
@@ -9057,7 +9058,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class ExtendedPanId(ClusterAttributeDescriptor):
@@ -9073,7 +9074,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MeshLocalPrefix(ClusterAttributeDescriptor):
@@ -9089,7 +9090,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes])
 
-            value: 'typing.Union[Nullable, bytes]' = NullValue
+            value: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class OverrunCount(ClusterAttributeDescriptor):
@@ -9105,7 +9106,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NeighborTable(ClusterAttributeDescriptor):
@@ -9121,7 +9122,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ThreadNetworkDiagnostics.Structs.NeighborTableStruct])
 
-            value: 'typing.List[ThreadNetworkDiagnostics.Structs.NeighborTableStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ThreadNetworkDiagnostics.Structs.NeighborTableStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class RouteTable(ClusterAttributeDescriptor):
@@ -9137,7 +9138,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ThreadNetworkDiagnostics.Structs.RouteTableStruct])
 
-            value: 'typing.List[ThreadNetworkDiagnostics.Structs.RouteTableStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ThreadNetworkDiagnostics.Structs.RouteTableStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class PartitionId(ClusterAttributeDescriptor):
@@ -9153,7 +9154,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class Weighting(ClusterAttributeDescriptor):
@@ -9169,7 +9170,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class DataVersion(ClusterAttributeDescriptor):
@@ -9185,7 +9186,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class StableDataVersion(ClusterAttributeDescriptor):
@@ -9201,7 +9202,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class LeaderRouterId(ClusterAttributeDescriptor):
@@ -9217,7 +9218,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class DetachedRoleCount(ClusterAttributeDescriptor):
@@ -9233,7 +9234,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ChildRoleCount(ClusterAttributeDescriptor):
@@ -9249,7 +9250,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RouterRoleCount(ClusterAttributeDescriptor):
@@ -9265,7 +9266,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class LeaderRoleCount(ClusterAttributeDescriptor):
@@ -9281,7 +9282,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AttachAttemptCount(ClusterAttributeDescriptor):
@@ -9297,7 +9298,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PartitionIdChangeCount(ClusterAttributeDescriptor):
@@ -9313,7 +9314,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class BetterPartitionAttachAttemptCount(ClusterAttributeDescriptor):
@@ -9329,7 +9330,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ParentChangeCount(ClusterAttributeDescriptor):
@@ -9345,7 +9346,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxTotalCount(ClusterAttributeDescriptor):
@@ -9361,7 +9362,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxUnicastCount(ClusterAttributeDescriptor):
@@ -9377,7 +9378,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxBroadcastCount(ClusterAttributeDescriptor):
@@ -9393,7 +9394,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxAckRequestedCount(ClusterAttributeDescriptor):
@@ -9409,7 +9410,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxAckedCount(ClusterAttributeDescriptor):
@@ -9425,7 +9426,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxNoAckRequestedCount(ClusterAttributeDescriptor):
@@ -9441,7 +9442,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxDataCount(ClusterAttributeDescriptor):
@@ -9457,7 +9458,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxDataPollCount(ClusterAttributeDescriptor):
@@ -9473,7 +9474,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxBeaconCount(ClusterAttributeDescriptor):
@@ -9489,7 +9490,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxBeaconRequestCount(ClusterAttributeDescriptor):
@@ -9505,7 +9506,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxOtherCount(ClusterAttributeDescriptor):
@@ -9521,7 +9522,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxRetryCount(ClusterAttributeDescriptor):
@@ -9537,7 +9538,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxDirectMaxRetryExpiryCount(ClusterAttributeDescriptor):
@@ -9553,7 +9554,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxIndirectMaxRetryExpiryCount(ClusterAttributeDescriptor):
@@ -9569,7 +9570,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxErrCcaCount(ClusterAttributeDescriptor):
@@ -9585,7 +9586,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxErrAbortCount(ClusterAttributeDescriptor):
@@ -9601,7 +9602,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxErrBusyChannelCount(ClusterAttributeDescriptor):
@@ -9617,7 +9618,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxTotalCount(ClusterAttributeDescriptor):
@@ -9633,7 +9634,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxUnicastCount(ClusterAttributeDescriptor):
@@ -9649,7 +9650,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxBroadcastCount(ClusterAttributeDescriptor):
@@ -9665,7 +9666,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxDataCount(ClusterAttributeDescriptor):
@@ -9681,7 +9682,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxDataPollCount(ClusterAttributeDescriptor):
@@ -9697,7 +9698,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxBeaconCount(ClusterAttributeDescriptor):
@@ -9713,7 +9714,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxBeaconRequestCount(ClusterAttributeDescriptor):
@@ -9729,7 +9730,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxOtherCount(ClusterAttributeDescriptor):
@@ -9745,7 +9746,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxAddressFilteredCount(ClusterAttributeDescriptor):
@@ -9761,7 +9762,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxDestAddrFilteredCount(ClusterAttributeDescriptor):
@@ -9777,7 +9778,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxDuplicatedCount(ClusterAttributeDescriptor):
@@ -9793,7 +9794,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxErrNoFrameCount(ClusterAttributeDescriptor):
@@ -9809,7 +9810,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxErrUnknownNeighborCount(ClusterAttributeDescriptor):
@@ -9825,7 +9826,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxErrInvalidSrcAddrCount(ClusterAttributeDescriptor):
@@ -9841,7 +9842,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxErrSecCount(ClusterAttributeDescriptor):
@@ -9857,7 +9858,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxErrFcsCount(ClusterAttributeDescriptor):
@@ -9873,7 +9874,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RxErrOtherCount(ClusterAttributeDescriptor):
@@ -9889,7 +9890,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ActiveTimestamp(ClusterAttributeDescriptor):
@@ -9905,7 +9906,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class PendingTimestamp(ClusterAttributeDescriptor):
@@ -9921,7 +9922,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Delay(ClusterAttributeDescriptor):
@@ -9937,7 +9938,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class SecurityPolicy(ClusterAttributeDescriptor):
@@ -9953,7 +9954,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.SecurityPolicy])
 
-            value: 'typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.SecurityPolicy]' = NullValue
+            value: typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.SecurityPolicy] = NullValue
 
         @dataclass
         class ChannelPage0Mask(ClusterAttributeDescriptor):
@@ -9969,7 +9970,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes])
 
-            value: 'typing.Union[Nullable, bytes]' = NullValue
+            value: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class OperationalDatasetComponents(ClusterAttributeDescriptor):
@@ -9985,7 +9986,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.OperationalDatasetComponents])
 
-            value: 'typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.OperationalDatasetComponents]' = NullValue
+            value: typing.Union[Nullable, ThreadNetworkDiagnostics.Structs.OperationalDatasetComponents] = NullValue
 
         @dataclass
         class ActiveNetworkFaultsList(ClusterAttributeDescriptor):
@@ -10001,7 +10002,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum])
 
-            value: 'typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum]' = field(default_factory=lambda: [])
+            value: typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -10017,7 +10018,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -10033,7 +10034,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -10049,7 +10050,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -10065,7 +10066,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -10081,7 +10082,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -10097,7 +10098,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -10117,7 +10118,7 @@
                         ClusterObjectFieldDescriptor(Label="connectionStatus", Tag=0, Type=ThreadNetworkDiagnostics.Enums.ConnectionStatusEnum),
                     ])
 
-            connectionStatus: 'ThreadNetworkDiagnostics.Enums.ConnectionStatusEnum' = 0
+            connectionStatus: ThreadNetworkDiagnostics.Enums.ConnectionStatusEnum = 0
 
         @dataclass
         class NetworkFaultChange(ClusterEvent):
@@ -10137,8 +10138,8 @@
                         ClusterObjectFieldDescriptor(Label="previous", Tag=1, Type=typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum]),
                     ])
 
-            current: 'typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum]' = field(default_factory=lambda: [])
-            previous: 'typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum]' = field(default_factory=lambda: [])
+            current: typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum] = field(default_factory=lambda: [])
+            previous: typing.List[ThreadNetworkDiagnostics.Enums.NetworkFaultEnum] = field(default_factory=lambda: [])
 
 
 @dataclass
@@ -10170,25 +10171,25 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    bssid: 'typing.Union[Nullable, bytes]' = None
-    securityType: 'typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.SecurityTypeEnum]' = None
-    wiFiVersion: 'typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.WiFiVersionEnum]' = None
-    channelNumber: 'typing.Union[Nullable, uint]' = None
-    rssi: 'typing.Union[Nullable, int]' = None
-    beaconLostCount: 'typing.Union[None, Nullable, uint]' = None
-    beaconRxCount: 'typing.Union[None, Nullable, uint]' = None
-    packetMulticastRxCount: 'typing.Union[None, Nullable, uint]' = None
-    packetMulticastTxCount: 'typing.Union[None, Nullable, uint]' = None
-    packetUnicastRxCount: 'typing.Union[None, Nullable, uint]' = None
-    packetUnicastTxCount: 'typing.Union[None, Nullable, uint]' = None
-    currentMaxRate: 'typing.Union[None, Nullable, uint]' = None
-    overrunCount: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    bssid: typing.Union[Nullable, bytes] = NullValue
+    securityType: typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.SecurityTypeEnum] = NullValue
+    wiFiVersion: typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.WiFiVersionEnum] = NullValue
+    channelNumber: typing.Union[Nullable, uint] = NullValue
+    rssi: typing.Union[Nullable, int] = NullValue
+    beaconLostCount: typing.Union[None, Nullable, uint] = None
+    beaconRxCount: typing.Union[None, Nullable, uint] = None
+    packetMulticastRxCount: typing.Union[None, Nullable, uint] = None
+    packetMulticastTxCount: typing.Union[None, Nullable, uint] = None
+    packetUnicastRxCount: typing.Union[None, Nullable, uint] = None
+    packetUnicastTxCount: typing.Union[None, Nullable, uint] = None
+    currentMaxRate: typing.Union[None, Nullable, uint] = None
+    overrunCount: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AssociationFailureCauseEnum(MatterIntEnum):
@@ -10249,7 +10250,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000036
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -10272,7 +10273,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes])
 
-            value: 'typing.Union[Nullable, bytes]' = NullValue
+            value: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class SecurityType(ClusterAttributeDescriptor):
@@ -10288,7 +10289,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.SecurityTypeEnum])
 
-            value: 'typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.SecurityTypeEnum]' = NullValue
+            value: typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.SecurityTypeEnum] = NullValue
 
         @dataclass
         class WiFiVersion(ClusterAttributeDescriptor):
@@ -10304,7 +10305,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.WiFiVersionEnum])
 
-            value: 'typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.WiFiVersionEnum]' = NullValue
+            value: typing.Union[Nullable, WiFiNetworkDiagnostics.Enums.WiFiVersionEnum] = NullValue
 
         @dataclass
         class ChannelNumber(ClusterAttributeDescriptor):
@@ -10320,7 +10321,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class Rssi(ClusterAttributeDescriptor):
@@ -10336,7 +10337,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class BeaconLostCount(ClusterAttributeDescriptor):
@@ -10352,7 +10353,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class BeaconRxCount(ClusterAttributeDescriptor):
@@ -10368,7 +10369,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class PacketMulticastRxCount(ClusterAttributeDescriptor):
@@ -10384,7 +10385,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class PacketMulticastTxCount(ClusterAttributeDescriptor):
@@ -10400,7 +10401,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class PacketUnicastRxCount(ClusterAttributeDescriptor):
@@ -10416,7 +10417,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class PacketUnicastTxCount(ClusterAttributeDescriptor):
@@ -10432,7 +10433,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class CurrentMaxRate(ClusterAttributeDescriptor):
@@ -10448,7 +10449,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OverrunCount(ClusterAttributeDescriptor):
@@ -10464,7 +10465,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -10480,7 +10481,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -10496,7 +10497,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -10512,7 +10513,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -10528,7 +10529,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -10544,7 +10545,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -10560,7 +10561,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -10580,7 +10581,7 @@
                         ClusterObjectFieldDescriptor(Label="reasonCode", Tag=0, Type=uint),
                     ])
 
-            reasonCode: 'uint' = 0
+            reasonCode: uint = 0
 
         @dataclass
         class AssociationFailure(ClusterEvent):
@@ -10600,8 +10601,8 @@
                         ClusterObjectFieldDescriptor(Label="status", Tag=1, Type=uint),
                     ])
 
-            associationFailureCause: 'WiFiNetworkDiagnostics.Enums.AssociationFailureCauseEnum' = 0
-            status: 'uint' = 0
+            associationFailureCause: WiFiNetworkDiagnostics.Enums.AssociationFailureCauseEnum = 0
+            status: uint = 0
 
         @dataclass
         class ConnectionStatus(ClusterEvent):
@@ -10620,7 +10621,7 @@
                         ClusterObjectFieldDescriptor(Label="connectionStatus", Tag=0, Type=WiFiNetworkDiagnostics.Enums.ConnectionStatusEnum),
                     ])
 
-            connectionStatus: 'WiFiNetworkDiagnostics.Enums.ConnectionStatusEnum' = 0
+            connectionStatus: WiFiNetworkDiagnostics.Enums.ConnectionStatusEnum = 0
 
 
 @dataclass
@@ -10648,21 +10649,21 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    PHYRate: 'typing.Union[None, Nullable, EthernetNetworkDiagnostics.Enums.PHYRateEnum]' = None
-    fullDuplex: 'typing.Union[None, Nullable, bool]' = None
-    packetRxCount: 'typing.Optional[uint]' = None
-    packetTxCount: 'typing.Optional[uint]' = None
-    txErrCount: 'typing.Optional[uint]' = None
-    collisionCount: 'typing.Optional[uint]' = None
-    overrunCount: 'typing.Optional[uint]' = None
-    carrierDetect: 'typing.Union[None, Nullable, bool]' = None
-    timeSinceReset: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    PHYRate: typing.Union[None, Nullable, EthernetNetworkDiagnostics.Enums.PHYRateEnum] = None
+    fullDuplex: typing.Union[None, Nullable, bool] = None
+    packetRxCount: typing.Optional[uint] = None
+    packetTxCount: typing.Optional[uint] = None
+    txErrCount: typing.Optional[uint] = None
+    collisionCount: typing.Optional[uint] = None
+    overrunCount: typing.Optional[uint] = None
+    carrierDetect: typing.Union[None, Nullable, bool] = None
+    timeSinceReset: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class PHYRateEnum(MatterIntEnum):
@@ -10693,7 +10694,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000037
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -10716,7 +10717,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, EthernetNetworkDiagnostics.Enums.PHYRateEnum])
 
-            value: 'typing.Union[None, Nullable, EthernetNetworkDiagnostics.Enums.PHYRateEnum]' = None
+            value: typing.Union[None, Nullable, EthernetNetworkDiagnostics.Enums.PHYRateEnum] = None
 
         @dataclass
         class FullDuplex(ClusterAttributeDescriptor):
@@ -10732,7 +10733,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, bool])
 
-            value: 'typing.Union[None, Nullable, bool]' = None
+            value: typing.Union[None, Nullable, bool] = None
 
         @dataclass
         class PacketRxCount(ClusterAttributeDescriptor):
@@ -10748,7 +10749,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PacketTxCount(ClusterAttributeDescriptor):
@@ -10764,7 +10765,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TxErrCount(ClusterAttributeDescriptor):
@@ -10780,7 +10781,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CollisionCount(ClusterAttributeDescriptor):
@@ -10796,7 +10797,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class OverrunCount(ClusterAttributeDescriptor):
@@ -10812,7 +10813,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CarrierDetect(ClusterAttributeDescriptor):
@@ -10828,7 +10829,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, bool])
 
-            value: 'typing.Union[None, Nullable, bool]' = None
+            value: typing.Union[None, Nullable, bool] = None
 
         @dataclass
         class TimeSinceReset(ClusterAttributeDescriptor):
@@ -10844,7 +10845,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -10860,7 +10861,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -10876,7 +10877,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -10892,7 +10893,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -10908,7 +10909,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -10924,7 +10925,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -10940,7 +10941,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -10972,25 +10973,25 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    UTCTime: 'typing.Union[Nullable, uint]' = None
-    granularity: 'TimeSynchronization.Enums.GranularityEnum' = None
-    timeSource: 'typing.Optional[TimeSynchronization.Enums.TimeSourceEnum]' = None
-    trustedTimeSource: 'typing.Union[None, Nullable, TimeSynchronization.Structs.TrustedTimeSourceStruct]' = None
-    defaultNTP: 'typing.Union[None, Nullable, str]' = None
-    timeZone: 'typing.Optional[typing.List[TimeSynchronization.Structs.TimeZoneStruct]]' = None
-    DSTOffset: 'typing.Optional[typing.List[TimeSynchronization.Structs.DSTOffsetStruct]]' = None
-    localTime: 'typing.Union[None, Nullable, uint]' = None
-    timeZoneDatabase: 'typing.Optional[TimeSynchronization.Enums.TimeZoneDatabaseEnum]' = None
-    NTPServerAvailable: 'typing.Optional[bool]' = None
-    timeZoneListMaxSize: 'typing.Optional[uint]' = None
-    DSTOffsetListMaxSize: 'typing.Optional[uint]' = None
-    supportsDNSResolve: 'typing.Optional[bool]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    UTCTime: typing.Union[Nullable, uint] = NullValue
+    granularity: TimeSynchronization.Enums.GranularityEnum = 0
+    timeSource: typing.Optional[TimeSynchronization.Enums.TimeSourceEnum] = None
+    trustedTimeSource: typing.Union[None, Nullable, TimeSynchronization.Structs.TrustedTimeSourceStruct] = None
+    defaultNTP: typing.Union[None, Nullable, str] = None
+    timeZone: typing.Optional[typing.List[TimeSynchronization.Structs.TimeZoneStruct]] = None
+    DSTOffset: typing.Optional[typing.List[TimeSynchronization.Structs.DSTOffsetStruct]] = None
+    localTime: typing.Union[None, Nullable, uint] = None
+    timeZoneDatabase: typing.Optional[TimeSynchronization.Enums.TimeZoneDatabaseEnum] = None
+    NTPServerAvailable: typing.Optional[bool] = None
+    timeZoneListMaxSize: typing.Optional[uint] = None
+    DSTOffsetListMaxSize: typing.Optional[uint] = None
+    supportsDNSResolve: typing.Optional[bool] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class GranularityEnum(MatterIntEnum):
@@ -11119,7 +11120,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000038
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -11130,16 +11131,16 @@
                         ClusterObjectFieldDescriptor(Label="timeSource", Tag=2, Type=typing.Optional[TimeSynchronization.Enums.TimeSourceEnum]),
                     ])
 
-            UTCTime: 'uint' = 0
-            granularity: 'TimeSynchronization.Enums.GranularityEnum' = 0
-            timeSource: 'typing.Optional[TimeSynchronization.Enums.TimeSourceEnum]' = None
+            UTCTime: uint = 0
+            granularity: TimeSynchronization.Enums.GranularityEnum = 0
+            timeSource: typing.Optional[TimeSynchronization.Enums.TimeSourceEnum] = None
 
         @dataclass
         class SetTrustedTimeSource(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000038
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -11148,7 +11149,7 @@
                         ClusterObjectFieldDescriptor(Label="trustedTimeSource", Tag=0, Type=typing.Union[Nullable, TimeSynchronization.Structs.FabricScopedTrustedTimeSourceStruct]),
                     ])
 
-            trustedTimeSource: 'typing.Union[Nullable, TimeSynchronization.Structs.FabricScopedTrustedTimeSourceStruct]' = NullValue
+            trustedTimeSource: typing.Union[Nullable, TimeSynchronization.Structs.FabricScopedTrustedTimeSourceStruct] = NullValue
 
         @dataclass
         class SetTimeZone(ClusterCommand):
@@ -11164,14 +11165,14 @@
                         ClusterObjectFieldDescriptor(Label="timeZone", Tag=0, Type=typing.List[TimeSynchronization.Structs.TimeZoneStruct]),
                     ])
 
-            timeZone: 'typing.List[TimeSynchronization.Structs.TimeZoneStruct]' = field(default_factory=lambda: [])
+            timeZone: typing.List[TimeSynchronization.Structs.TimeZoneStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class SetTimeZoneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000038
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -11180,14 +11181,14 @@
                         ClusterObjectFieldDescriptor(Label="DSTOffsetRequired", Tag=0, Type=bool),
                     ])
 
-            DSTOffsetRequired: 'bool' = False
+            DSTOffsetRequired: bool = False
 
         @dataclass
         class SetDSTOffset(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000038
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -11196,14 +11197,14 @@
                         ClusterObjectFieldDescriptor(Label="DSTOffset", Tag=0, Type=typing.List[TimeSynchronization.Structs.DSTOffsetStruct]),
                     ])
 
-            DSTOffset: 'typing.List[TimeSynchronization.Structs.DSTOffsetStruct]' = field(default_factory=lambda: [])
+            DSTOffset: typing.List[TimeSynchronization.Structs.DSTOffsetStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class SetDefaultNTP(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000038
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -11212,7 +11213,7 @@
                         ClusterObjectFieldDescriptor(Label="defaultNTP", Tag=0, Type=typing.Union[Nullable, str]),
                     ])
 
-            defaultNTP: 'typing.Union[Nullable, str]' = NullValue
+            defaultNTP: typing.Union[Nullable, str] = NullValue
 
     class Attributes:
         @dataclass
@@ -11229,7 +11230,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class Granularity(ClusterAttributeDescriptor):
@@ -11245,7 +11246,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=TimeSynchronization.Enums.GranularityEnum)
 
-            value: 'TimeSynchronization.Enums.GranularityEnum' = 0
+            value: TimeSynchronization.Enums.GranularityEnum = 0
 
         @dataclass
         class TimeSource(ClusterAttributeDescriptor):
@@ -11261,7 +11262,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[TimeSynchronization.Enums.TimeSourceEnum])
 
-            value: 'typing.Optional[TimeSynchronization.Enums.TimeSourceEnum]' = None
+            value: typing.Optional[TimeSynchronization.Enums.TimeSourceEnum] = None
 
         @dataclass
         class TrustedTimeSource(ClusterAttributeDescriptor):
@@ -11277,7 +11278,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, TimeSynchronization.Structs.TrustedTimeSourceStruct])
 
-            value: 'typing.Union[None, Nullable, TimeSynchronization.Structs.TrustedTimeSourceStruct]' = None
+            value: typing.Union[None, Nullable, TimeSynchronization.Structs.TrustedTimeSourceStruct] = None
 
         @dataclass
         class DefaultNTP(ClusterAttributeDescriptor):
@@ -11293,7 +11294,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, str])
 
-            value: 'typing.Union[None, Nullable, str]' = None
+            value: typing.Union[None, Nullable, str] = None
 
         @dataclass
         class TimeZone(ClusterAttributeDescriptor):
@@ -11309,7 +11310,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[TimeSynchronization.Structs.TimeZoneStruct]])
 
-            value: 'typing.Optional[typing.List[TimeSynchronization.Structs.TimeZoneStruct]]' = None
+            value: typing.Optional[typing.List[TimeSynchronization.Structs.TimeZoneStruct]] = None
 
         @dataclass
         class DSTOffset(ClusterAttributeDescriptor):
@@ -11325,7 +11326,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[TimeSynchronization.Structs.DSTOffsetStruct]])
 
-            value: 'typing.Optional[typing.List[TimeSynchronization.Structs.DSTOffsetStruct]]' = None
+            value: typing.Optional[typing.List[TimeSynchronization.Structs.DSTOffsetStruct]] = None
 
         @dataclass
         class LocalTime(ClusterAttributeDescriptor):
@@ -11341,7 +11342,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class TimeZoneDatabase(ClusterAttributeDescriptor):
@@ -11357,7 +11358,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[TimeSynchronization.Enums.TimeZoneDatabaseEnum])
 
-            value: 'typing.Optional[TimeSynchronization.Enums.TimeZoneDatabaseEnum]' = None
+            value: typing.Optional[TimeSynchronization.Enums.TimeZoneDatabaseEnum] = None
 
         @dataclass
         class NTPServerAvailable(ClusterAttributeDescriptor):
@@ -11373,7 +11374,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class TimeZoneListMaxSize(ClusterAttributeDescriptor):
@@ -11389,7 +11390,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class DSTOffsetListMaxSize(ClusterAttributeDescriptor):
@@ -11405,7 +11406,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SupportsDNSResolve(ClusterAttributeDescriptor):
@@ -11421,7 +11422,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -11437,7 +11438,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -11453,7 +11454,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -11469,7 +11470,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -11485,7 +11486,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -11501,7 +11502,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -11517,7 +11518,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -11553,7 +11554,7 @@
                         ClusterObjectFieldDescriptor(Label="DSTOffsetActive", Tag=0, Type=bool),
                     ])
 
-            DSTOffsetActive: 'bool' = False
+            DSTOffsetActive: bool = False
 
         @dataclass
         class TimeZoneStatus(ClusterEvent):
@@ -11573,8 +11574,8 @@
                         ClusterObjectFieldDescriptor(Label="name", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            offset: 'int' = 0
-            name: 'typing.Optional[str]' = None
+            offset: int = 0
+            name: typing.Optional[str] = None
 
         @dataclass
         class TimeFailure(ClusterEvent):
@@ -11642,29 +11643,29 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    vendorName: 'typing.Optional[str]' = None
-    vendorID: 'typing.Optional[uint]' = None
-    productName: 'typing.Optional[str]' = None
-    productID: 'typing.Optional[uint]' = None
-    nodeLabel: 'typing.Optional[str]' = None
-    hardwareVersion: 'typing.Optional[uint]' = None
-    hardwareVersionString: 'typing.Optional[str]' = None
-    softwareVersion: 'typing.Optional[uint]' = None
-    softwareVersionString: 'typing.Optional[str]' = None
-    manufacturingDate: 'typing.Optional[str]' = None
-    partNumber: 'typing.Optional[str]' = None
-    productURL: 'typing.Optional[str]' = None
-    productLabel: 'typing.Optional[str]' = None
-    serialNumber: 'typing.Optional[str]' = None
-    reachable: 'bool' = None
-    uniqueID: 'str' = None
-    productAppearance: 'typing.Optional[BridgedDeviceBasicInformation.Structs.ProductAppearanceStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    vendorName: typing.Optional[str] = None
+    vendorID: typing.Optional[uint] = None
+    productName: typing.Optional[str] = None
+    productID: typing.Optional[uint] = None
+    nodeLabel: typing.Optional[str] = None
+    hardwareVersion: typing.Optional[uint] = None
+    hardwareVersionString: typing.Optional[str] = None
+    softwareVersion: typing.Optional[uint] = None
+    softwareVersionString: typing.Optional[str] = None
+    manufacturingDate: typing.Optional[str] = None
+    partNumber: typing.Optional[str] = None
+    productURL: typing.Optional[str] = None
+    productLabel: typing.Optional[str] = None
+    serialNumber: typing.Optional[str] = None
+    reachable: bool = False
+    uniqueID: str = ""
+    productAppearance: typing.Optional[BridgedDeviceBasicInformation.Structs.ProductAppearanceStruct] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ColorEnum(MatterIntEnum):
@@ -11732,7 +11733,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000039
             command_id: typing.ClassVar[int] = 0x00000080
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -11742,8 +11743,8 @@
                         ClusterObjectFieldDescriptor(Label="timeoutMs", Tag=1, Type=uint),
                     ])
 
-            stayActiveDuration: 'uint' = 0
-            timeoutMs: 'uint' = 0
+            stayActiveDuration: uint = 0
+            timeoutMs: uint = 0
 
     class Attributes:
         @dataclass
@@ -11760,7 +11761,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class VendorID(ClusterAttributeDescriptor):
@@ -11776,7 +11777,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ProductName(ClusterAttributeDescriptor):
@@ -11792,7 +11793,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ProductID(ClusterAttributeDescriptor):
@@ -11808,7 +11809,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NodeLabel(ClusterAttributeDescriptor):
@@ -11824,7 +11825,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class HardwareVersion(ClusterAttributeDescriptor):
@@ -11840,7 +11841,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class HardwareVersionString(ClusterAttributeDescriptor):
@@ -11856,7 +11857,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class SoftwareVersion(ClusterAttributeDescriptor):
@@ -11872,7 +11873,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SoftwareVersionString(ClusterAttributeDescriptor):
@@ -11888,7 +11889,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ManufacturingDate(ClusterAttributeDescriptor):
@@ -11904,7 +11905,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class PartNumber(ClusterAttributeDescriptor):
@@ -11920,7 +11921,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ProductURL(ClusterAttributeDescriptor):
@@ -11936,7 +11937,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ProductLabel(ClusterAttributeDescriptor):
@@ -11952,7 +11953,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class SerialNumber(ClusterAttributeDescriptor):
@@ -11968,7 +11969,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class Reachable(ClusterAttributeDescriptor):
@@ -11984,7 +11985,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class UniqueID(ClusterAttributeDescriptor):
@@ -12000,7 +12001,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class ProductAppearance(ClusterAttributeDescriptor):
@@ -12016,7 +12017,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[BridgedDeviceBasicInformation.Structs.ProductAppearanceStruct])
 
-            value: 'typing.Optional[BridgedDeviceBasicInformation.Structs.ProductAppearanceStruct]' = None
+            value: typing.Optional[BridgedDeviceBasicInformation.Structs.ProductAppearanceStruct] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -12032,7 +12033,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -12048,7 +12049,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -12064,7 +12065,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -12080,7 +12081,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -12096,7 +12097,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -12112,7 +12113,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -12132,7 +12133,7 @@
                         ClusterObjectFieldDescriptor(Label="softwareVersion", Tag=0, Type=uint),
                     ])
 
-            softwareVersion: 'uint' = 0
+            softwareVersion: uint = 0
 
         @dataclass
         class ShutDown(ClusterEvent):
@@ -12183,7 +12184,7 @@
                         ClusterObjectFieldDescriptor(Label="reachableNewValue", Tag=0, Type=bool),
                     ])
 
-            reachableNewValue: 'bool' = False
+            reachableNewValue: bool = False
 
         @dataclass
         class ActiveChanged(ClusterEvent):
@@ -12202,7 +12203,7 @@
                         ClusterObjectFieldDescriptor(Label="promisedActiveDuration", Tag=0, Type=uint),
                     ])
 
-            promisedActiveDuration: 'uint' = 0
+            promisedActiveDuration: uint = 0
 
 
 @dataclass
@@ -12224,15 +12225,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    numberOfPositions: 'uint' = None
-    currentPosition: 'uint' = None
-    multiPressMax: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    numberOfPositions: uint = 0
+    currentPosition: uint = 0
+    multiPressMax: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -12258,7 +12259,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class CurrentPosition(ClusterAttributeDescriptor):
@@ -12274,7 +12275,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class MultiPressMax(ClusterAttributeDescriptor):
@@ -12290,7 +12291,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -12306,7 +12307,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -12322,7 +12323,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -12338,7 +12339,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -12354,7 +12355,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -12370,7 +12371,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -12386,7 +12387,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -12406,7 +12407,7 @@
                         ClusterObjectFieldDescriptor(Label="newPosition", Tag=0, Type=uint),
                     ])
 
-            newPosition: 'uint' = 0
+            newPosition: uint = 0
 
         @dataclass
         class InitialPress(ClusterEvent):
@@ -12425,7 +12426,7 @@
                         ClusterObjectFieldDescriptor(Label="newPosition", Tag=0, Type=uint),
                     ])
 
-            newPosition: 'uint' = 0
+            newPosition: uint = 0
 
         @dataclass
         class LongPress(ClusterEvent):
@@ -12444,7 +12445,7 @@
                         ClusterObjectFieldDescriptor(Label="newPosition", Tag=0, Type=uint),
                     ])
 
-            newPosition: 'uint' = 0
+            newPosition: uint = 0
 
         @dataclass
         class ShortRelease(ClusterEvent):
@@ -12463,7 +12464,7 @@
                         ClusterObjectFieldDescriptor(Label="previousPosition", Tag=0, Type=uint),
                     ])
 
-            previousPosition: 'uint' = 0
+            previousPosition: uint = 0
 
         @dataclass
         class LongRelease(ClusterEvent):
@@ -12482,7 +12483,7 @@
                         ClusterObjectFieldDescriptor(Label="previousPosition", Tag=0, Type=uint),
                     ])
 
-            previousPosition: 'uint' = 0
+            previousPosition: uint = 0
 
         @dataclass
         class MultiPressOngoing(ClusterEvent):
@@ -12502,8 +12503,8 @@
                         ClusterObjectFieldDescriptor(Label="currentNumberOfPressesCounted", Tag=1, Type=uint),
                     ])
 
-            newPosition: 'uint' = 0
-            currentNumberOfPressesCounted: 'uint' = 0
+            newPosition: uint = 0
+            currentNumberOfPressesCounted: uint = 0
 
         @dataclass
         class MultiPressComplete(ClusterEvent):
@@ -12523,8 +12524,8 @@
                         ClusterObjectFieldDescriptor(Label="totalNumberOfPressesCounted", Tag=1, Type=uint),
                     ])
 
-            previousPosition: 'uint' = 0
-            totalNumberOfPressesCounted: 'uint' = 0
+            previousPosition: uint = 0
+            totalNumberOfPressesCounted: uint = 0
 
 
 @dataclass
@@ -12546,15 +12547,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    windowStatus: 'AdministratorCommissioning.Enums.CommissioningWindowStatusEnum' = None
-    adminFabricIndex: 'typing.Union[Nullable, uint]' = None
-    adminVendorId: 'typing.Union[Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    windowStatus: AdministratorCommissioning.Enums.CommissioningWindowStatusEnum = 0
+    adminFabricIndex: typing.Union[Nullable, uint] = NullValue
+    adminVendorId: typing.Union[Nullable, uint] = NullValue
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CommissioningWindowStatusEnum(MatterIntEnum):
@@ -12587,7 +12588,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000003C
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -12604,18 +12605,18 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            commissioningTimeout: 'uint' = 0
-            PAKEPasscodeVerifier: 'bytes' = b""
-            discriminator: 'uint' = 0
-            iterations: 'uint' = 0
-            salt: 'bytes' = b""
+            commissioningTimeout: uint = 0
+            PAKEPasscodeVerifier: bytes = b""
+            discriminator: uint = 0
+            iterations: uint = 0
+            salt: bytes = b""
 
         @dataclass
         class OpenBasicCommissioningWindow(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003C
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -12628,14 +12629,14 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            commissioningTimeout: 'uint' = 0
+            commissioningTimeout: uint = 0
 
         @dataclass
         class RevokeCommissioning(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003C
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -12662,7 +12663,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=AdministratorCommissioning.Enums.CommissioningWindowStatusEnum)
 
-            value: 'AdministratorCommissioning.Enums.CommissioningWindowStatusEnum' = 0
+            value: AdministratorCommissioning.Enums.CommissioningWindowStatusEnum = 0
 
         @dataclass
         class AdminFabricIndex(ClusterAttributeDescriptor):
@@ -12678,7 +12679,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class AdminVendorId(ClusterAttributeDescriptor):
@@ -12694,7 +12695,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -12710,7 +12711,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -12726,7 +12727,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -12742,7 +12743,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -12758,7 +12759,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -12774,7 +12775,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -12790,7 +12791,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -12815,18 +12816,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    NOCs: 'typing.List[OperationalCredentials.Structs.NOCStruct]' = None
-    fabrics: 'typing.List[OperationalCredentials.Structs.FabricDescriptorStruct]' = None
-    supportedFabrics: 'uint' = None
-    commissionedFabrics: 'uint' = None
-    trustedRootCertificates: 'typing.List[bytes]' = None
-    currentFabricIndex: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    NOCs: typing.List[OperationalCredentials.Structs.NOCStruct] = field(default_factory=lambda: [])
+    fabrics: typing.List[OperationalCredentials.Structs.FabricDescriptorStruct] = field(default_factory=lambda: [])
+    supportedFabrics: uint = 0
+    commissionedFabrics: uint = 0
+    trustedRootCertificates: typing.List[bytes] = field(default_factory=lambda: [])
+    currentFabricIndex: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CertificateChainTypeEnum(MatterIntEnum):
@@ -12907,14 +12908,14 @@
                         ClusterObjectFieldDescriptor(Label="attestationNonce", Tag=0, Type=bytes),
                     ])
 
-            attestationNonce: 'bytes' = b""
+            attestationNonce: bytes = b""
 
         @dataclass
         class AttestationResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003E
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -12924,8 +12925,8 @@
                         ClusterObjectFieldDescriptor(Label="attestationSignature", Tag=1, Type=bytes),
                     ])
 
-            attestationElements: 'bytes' = b""
-            attestationSignature: 'bytes' = b""
+            attestationElements: bytes = b""
+            attestationSignature: bytes = b""
 
         @dataclass
         class CertificateChainRequest(ClusterCommand):
@@ -12941,14 +12942,14 @@
                         ClusterObjectFieldDescriptor(Label="certificateType", Tag=0, Type=OperationalCredentials.Enums.CertificateChainTypeEnum),
                     ])
 
-            certificateType: 'OperationalCredentials.Enums.CertificateChainTypeEnum' = 0
+            certificateType: OperationalCredentials.Enums.CertificateChainTypeEnum = 0
 
         @dataclass
         class CertificateChainResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003E
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -12957,7 +12958,7 @@
                         ClusterObjectFieldDescriptor(Label="certificate", Tag=0, Type=bytes),
                     ])
 
-            certificate: 'bytes' = b""
+            certificate: bytes = b""
 
         @dataclass
         class CSRRequest(ClusterCommand):
@@ -12974,15 +12975,15 @@
                         ClusterObjectFieldDescriptor(Label="isForUpdateNOC", Tag=1, Type=typing.Optional[bool]),
                     ])
 
-            CSRNonce: 'bytes' = b""
-            isForUpdateNOC: 'typing.Optional[bool]' = None
+            CSRNonce: bytes = b""
+            isForUpdateNOC: typing.Optional[bool] = None
 
         @dataclass
         class CSRResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003E
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -12992,8 +12993,8 @@
                         ClusterObjectFieldDescriptor(Label="attestationSignature", Tag=1, Type=bytes),
                     ])
 
-            NOCSRElements: 'bytes' = b""
-            attestationSignature: 'bytes' = b""
+            NOCSRElements: bytes = b""
+            attestationSignature: bytes = b""
 
         @dataclass
         class AddNOC(ClusterCommand):
@@ -13013,11 +13014,11 @@
                         ClusterObjectFieldDescriptor(Label="adminVendorId", Tag=4, Type=uint),
                     ])
 
-            NOCValue: 'bytes' = b""
-            ICACValue: 'typing.Optional[bytes]' = None
-            IPKValue: 'bytes' = b""
-            caseAdminSubject: 'uint' = 0
-            adminVendorId: 'uint' = 0
+            NOCValue: bytes = b""
+            ICACValue: typing.Optional[bytes] = None
+            IPKValue: bytes = b""
+            caseAdminSubject: uint = 0
+            adminVendorId: uint = 0
 
         @dataclass
         class UpdateNOC(ClusterCommand):
@@ -13034,15 +13035,15 @@
                         ClusterObjectFieldDescriptor(Label="ICACValue", Tag=1, Type=typing.Optional[bytes]),
                     ])
 
-            NOCValue: 'bytes' = b""
-            ICACValue: 'typing.Optional[bytes]' = None
+            NOCValue: bytes = b""
+            ICACValue: typing.Optional[bytes] = None
 
         @dataclass
         class NOCResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003E
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -13053,9 +13054,9 @@
                         ClusterObjectFieldDescriptor(Label="debugText", Tag=2, Type=typing.Optional[str]),
                     ])
 
-            statusCode: 'OperationalCredentials.Enums.NodeOperationalCertStatusEnum' = 0
-            fabricIndex: 'typing.Optional[uint]' = None
-            debugText: 'typing.Optional[str]' = None
+            statusCode: OperationalCredentials.Enums.NodeOperationalCertStatusEnum = 0
+            fabricIndex: typing.Optional[uint] = None
+            debugText: typing.Optional[str] = None
 
         @dataclass
         class UpdateFabricLabel(ClusterCommand):
@@ -13071,7 +13072,7 @@
                         ClusterObjectFieldDescriptor(Label="label", Tag=0, Type=str),
                     ])
 
-            label: 'str' = ""
+            label: str = ""
 
         @dataclass
         class RemoveFabric(ClusterCommand):
@@ -13087,14 +13088,14 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=0, Type=uint),
                     ])
 
-            fabricIndex: 'uint' = 0
+            fabricIndex: uint = 0
 
         @dataclass
         class AddTrustedRootCertificate(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003E
             command_id: typing.ClassVar[int] = 0x0000000B
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -13103,7 +13104,7 @@
                         ClusterObjectFieldDescriptor(Label="rootCACertificate", Tag=0, Type=bytes),
                     ])
 
-            rootCACertificate: 'bytes' = b""
+            rootCACertificate: bytes = b""
 
     class Attributes:
         @dataclass
@@ -13120,7 +13121,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[OperationalCredentials.Structs.NOCStruct])
 
-            value: 'typing.List[OperationalCredentials.Structs.NOCStruct]' = field(default_factory=lambda: [])
+            value: typing.List[OperationalCredentials.Structs.NOCStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class Fabrics(ClusterAttributeDescriptor):
@@ -13136,7 +13137,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[OperationalCredentials.Structs.FabricDescriptorStruct])
 
-            value: 'typing.List[OperationalCredentials.Structs.FabricDescriptorStruct]' = field(default_factory=lambda: [])
+            value: typing.List[OperationalCredentials.Structs.FabricDescriptorStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class SupportedFabrics(ClusterAttributeDescriptor):
@@ -13152,7 +13153,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class CommissionedFabrics(ClusterAttributeDescriptor):
@@ -13168,7 +13169,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TrustedRootCertificates(ClusterAttributeDescriptor):
@@ -13184,7 +13185,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[bytes])
 
-            value: 'typing.List[bytes]' = field(default_factory=lambda: [])
+            value: typing.List[bytes] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentFabricIndex(ClusterAttributeDescriptor):
@@ -13200,7 +13201,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -13216,7 +13217,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -13232,7 +13233,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -13248,7 +13249,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -13264,7 +13265,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -13280,7 +13281,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -13296,7 +13297,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -13319,16 +13320,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    groupKeyMap: 'typing.List[GroupKeyManagement.Structs.GroupKeyMapStruct]' = None
-    groupTable: 'typing.List[GroupKeyManagement.Structs.GroupInfoMapStruct]' = None
-    maxGroupsPerFabric: 'uint' = None
-    maxGroupKeysPerFabric: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    groupKeyMap: typing.List[GroupKeyManagement.Structs.GroupKeyMapStruct] = field(default_factory=lambda: [])
+    groupTable: typing.List[GroupKeyManagement.Structs.GroupInfoMapStruct] = field(default_factory=lambda: [])
+    maxGroupsPerFabric: uint = 0
+    maxGroupKeysPerFabric: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class GroupKeySecurityPolicyEnum(MatterIntEnum):
@@ -13408,7 +13409,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000003F
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -13417,7 +13418,7 @@
                         ClusterObjectFieldDescriptor(Label="groupKeySet", Tag=0, Type=GroupKeyManagement.Structs.GroupKeySetStruct),
                     ])
 
-            groupKeySet: 'GroupKeyManagement.Structs.GroupKeySetStruct' = field(default_factory=lambda: GroupKeyManagement.Structs.GroupKeySetStruct())
+            groupKeySet: GroupKeyManagement.Structs.GroupKeySetStruct = field(default_factory=lambda: GroupKeyManagement.Structs.GroupKeySetStruct())
 
         @dataclass
         class KeySetRead(ClusterCommand):
@@ -13433,14 +13434,14 @@
                         ClusterObjectFieldDescriptor(Label="groupKeySetID", Tag=0, Type=uint),
                     ])
 
-            groupKeySetID: 'uint' = 0
+            groupKeySetID: uint = 0
 
         @dataclass
         class KeySetReadResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003F
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -13449,14 +13450,14 @@
                         ClusterObjectFieldDescriptor(Label="groupKeySet", Tag=0, Type=GroupKeyManagement.Structs.GroupKeySetStruct),
                     ])
 
-            groupKeySet: 'GroupKeyManagement.Structs.GroupKeySetStruct' = field(default_factory=lambda: GroupKeyManagement.Structs.GroupKeySetStruct())
+            groupKeySet: GroupKeyManagement.Structs.GroupKeySetStruct = field(default_factory=lambda: GroupKeyManagement.Structs.GroupKeySetStruct())
 
         @dataclass
         class KeySetRemove(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000003F
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -13465,7 +13466,7 @@
                         ClusterObjectFieldDescriptor(Label="groupKeySetID", Tag=0, Type=uint),
                     ])
 
-            groupKeySetID: 'uint' = 0
+            groupKeySetID: uint = 0
 
         @dataclass
         class KeySetReadAllIndices(ClusterCommand):
@@ -13485,7 +13486,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000003F
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -13494,7 +13495,7 @@
                         ClusterObjectFieldDescriptor(Label="groupKeySetIDs", Tag=0, Type=typing.List[uint]),
                     ])
 
-            groupKeySetIDs: 'typing.List[uint]' = field(default_factory=lambda: [])
+            groupKeySetIDs: typing.List[uint] = field(default_factory=lambda: [])
 
     class Attributes:
         @dataclass
@@ -13511,7 +13512,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[GroupKeyManagement.Structs.GroupKeyMapStruct])
 
-            value: 'typing.List[GroupKeyManagement.Structs.GroupKeyMapStruct]' = field(default_factory=lambda: [])
+            value: typing.List[GroupKeyManagement.Structs.GroupKeyMapStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GroupTable(ClusterAttributeDescriptor):
@@ -13527,7 +13528,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[GroupKeyManagement.Structs.GroupInfoMapStruct])
 
-            value: 'typing.List[GroupKeyManagement.Structs.GroupInfoMapStruct]' = field(default_factory=lambda: [])
+            value: typing.List[GroupKeyManagement.Structs.GroupInfoMapStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class MaxGroupsPerFabric(ClusterAttributeDescriptor):
@@ -13543,7 +13544,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class MaxGroupKeysPerFabric(ClusterAttributeDescriptor):
@@ -13559,7 +13560,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -13575,7 +13576,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -13591,7 +13592,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -13607,7 +13608,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -13623,7 +13624,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -13639,7 +13640,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -13655,7 +13656,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -13675,13 +13676,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    labelList: 'typing.List[FixedLabel.Structs.LabelStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    labelList: typing.List[FixedLabel.Structs.LabelStruct] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Structs:
         @dataclass
@@ -13712,7 +13713,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[FixedLabel.Structs.LabelStruct])
 
-            value: 'typing.List[FixedLabel.Structs.LabelStruct]' = field(default_factory=lambda: [])
+            value: typing.List[FixedLabel.Structs.LabelStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -13728,7 +13729,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -13744,7 +13745,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -13760,7 +13761,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -13776,7 +13777,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -13792,7 +13793,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -13808,7 +13809,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -13828,13 +13829,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    labelList: 'typing.List[UserLabel.Structs.LabelStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    labelList: typing.List[UserLabel.Structs.LabelStruct] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Structs:
         @dataclass
@@ -13865,7 +13866,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[UserLabel.Structs.LabelStruct])
 
-            value: 'typing.List[UserLabel.Structs.LabelStruct]' = field(default_factory=lambda: [])
+            value: typing.List[UserLabel.Structs.LabelStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -13881,7 +13882,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -13897,7 +13898,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -13913,7 +13914,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -13929,7 +13930,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -13945,7 +13946,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -13961,7 +13962,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -13980,12 +13981,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -14002,7 +14003,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -14018,7 +14019,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -14034,7 +14035,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -14050,7 +14051,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -14066,7 +14067,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -14082,7 +14083,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -14101,12 +14102,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -14123,7 +14124,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -14139,7 +14140,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -14155,7 +14156,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -14171,7 +14172,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -14187,7 +14188,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -14203,7 +14204,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -14222,12 +14223,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -14244,7 +14245,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -14260,7 +14261,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -14276,7 +14277,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -14292,7 +14293,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -14308,7 +14309,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -14324,7 +14325,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -14344,13 +14345,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    stateValue: 'bool' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    stateValue: bool = False
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -14367,7 +14368,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -14383,7 +14384,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -14399,7 +14400,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -14415,7 +14416,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -14431,7 +14432,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -14447,7 +14448,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -14463,7 +14464,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -14483,7 +14484,7 @@
                         ClusterObjectFieldDescriptor(Label="stateValue", Tag=0, Type=bool),
                     ])
 
-            stateValue: 'bool' = False
+            stateValue: bool = False
 
 
 @dataclass
@@ -14512,22 +14513,22 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    idleModeDuration: 'uint' = None
-    activeModeDuration: 'uint' = None
-    activeModeThreshold: 'uint' = None
-    registeredClients: 'typing.Optional[typing.List[IcdManagement.Structs.MonitoringRegistrationStruct]]' = None
-    ICDCounter: 'typing.Optional[uint]' = None
-    clientsSupportedPerFabric: 'typing.Optional[uint]' = None
-    userActiveModeTriggerHint: 'typing.Optional[uint]' = None
-    userActiveModeTriggerInstruction: 'typing.Optional[str]' = None
-    operatingMode: 'typing.Optional[IcdManagement.Enums.OperatingModeEnum]' = None
-    maximumCheckInBackOff: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    idleModeDuration: uint = 0
+    activeModeDuration: uint = 0
+    activeModeThreshold: uint = 0
+    registeredClients: typing.Optional[typing.List[IcdManagement.Structs.MonitoringRegistrationStruct]] = None
+    ICDCounter: typing.Optional[uint] = None
+    clientsSupportedPerFabric: typing.Optional[uint] = None
+    userActiveModeTriggerHint: typing.Optional[uint] = None
+    userActiveModeTriggerInstruction: typing.Optional[str] = None
+    operatingMode: typing.Optional[IcdManagement.Enums.OperatingModeEnum] = None
+    maximumCheckInBackOff: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ClientTypeEnum(MatterIntEnum):
@@ -14611,18 +14612,18 @@
                         ClusterObjectFieldDescriptor(Label="clientType", Tag=4, Type=IcdManagement.Enums.ClientTypeEnum),
                     ])
 
-            checkInNodeID: 'uint' = 0
-            monitoredSubject: 'uint' = 0
-            key: 'bytes' = b""
-            verificationKey: 'typing.Optional[bytes]' = None
-            clientType: 'IcdManagement.Enums.ClientTypeEnum' = 0
+            checkInNodeID: uint = 0
+            monitoredSubject: uint = 0
+            key: bytes = b""
+            verificationKey: typing.Optional[bytes] = None
+            clientType: IcdManagement.Enums.ClientTypeEnum = 0
 
         @dataclass
         class RegisterClientResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000046
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -14631,14 +14632,14 @@
                         ClusterObjectFieldDescriptor(Label="ICDCounter", Tag=0, Type=uint),
                     ])
 
-            ICDCounter: 'uint' = 0
+            ICDCounter: uint = 0
 
         @dataclass
         class UnregisterClient(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000046
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -14648,8 +14649,8 @@
                         ClusterObjectFieldDescriptor(Label="verificationKey", Tag=1, Type=typing.Optional[bytes]),
                     ])
 
-            checkInNodeID: 'uint' = 0
-            verificationKey: 'typing.Optional[bytes]' = None
+            checkInNodeID: uint = 0
+            verificationKey: typing.Optional[bytes] = None
 
         @dataclass
         class StayActiveRequest(ClusterCommand):
@@ -14665,14 +14666,14 @@
                         ClusterObjectFieldDescriptor(Label="stayActiveDuration", Tag=0, Type=uint),
                     ])
 
-            stayActiveDuration: 'uint' = 0
+            stayActiveDuration: uint = 0
 
         @dataclass
         class StayActiveResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000046
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -14681,7 +14682,7 @@
                         ClusterObjectFieldDescriptor(Label="promisedActiveDuration", Tag=0, Type=uint),
                     ])
 
-            promisedActiveDuration: 'uint' = 0
+            promisedActiveDuration: uint = 0
 
     class Attributes:
         @dataclass
@@ -14698,7 +14699,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ActiveModeDuration(ClusterAttributeDescriptor):
@@ -14714,7 +14715,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ActiveModeThreshold(ClusterAttributeDescriptor):
@@ -14730,7 +14731,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class RegisteredClients(ClusterAttributeDescriptor):
@@ -14746,7 +14747,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[IcdManagement.Structs.MonitoringRegistrationStruct]])
 
-            value: 'typing.Optional[typing.List[IcdManagement.Structs.MonitoringRegistrationStruct]]' = None
+            value: typing.Optional[typing.List[IcdManagement.Structs.MonitoringRegistrationStruct]] = None
 
         @dataclass
         class ICDCounter(ClusterAttributeDescriptor):
@@ -14762,7 +14763,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ClientsSupportedPerFabric(ClusterAttributeDescriptor):
@@ -14778,7 +14779,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class UserActiveModeTriggerHint(ClusterAttributeDescriptor):
@@ -14794,7 +14795,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class UserActiveModeTriggerInstruction(ClusterAttributeDescriptor):
@@ -14810,7 +14811,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class OperatingMode(ClusterAttributeDescriptor):
@@ -14826,7 +14827,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[IcdManagement.Enums.OperatingModeEnum])
 
-            value: 'typing.Optional[IcdManagement.Enums.OperatingModeEnum]' = None
+            value: typing.Optional[IcdManagement.Enums.OperatingModeEnum] = None
 
         @dataclass
         class MaximumCheckInBackOff(ClusterAttributeDescriptor):
@@ -14842,7 +14843,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -14858,7 +14859,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -14874,7 +14875,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -14890,7 +14891,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -14906,7 +14907,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -14922,7 +14923,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -14938,7 +14939,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -14960,15 +14961,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    setTime: 'uint' = None
-    timeRemaining: 'uint' = None
-    timerState: 'Timer.Enums.TimerStatusEnum' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    setTime: uint = 0
+    timeRemaining: uint = 0
+    timerState: Timer.Enums.TimerStatusEnum = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class TimerStatusEnum(MatterIntEnum):
@@ -14992,7 +14993,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000047
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -15001,14 +15002,14 @@
                         ClusterObjectFieldDescriptor(Label="newTime", Tag=0, Type=uint),
                     ])
 
-            newTime: 'uint' = 0
+            newTime: uint = 0
 
         @dataclass
         class ResetTimer(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000047
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -15021,7 +15022,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000047
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -15030,14 +15031,14 @@
                         ClusterObjectFieldDescriptor(Label="additionalTime", Tag=0, Type=uint),
                     ])
 
-            additionalTime: 'uint' = 0
+            additionalTime: uint = 0
 
         @dataclass
         class ReduceTime(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000047
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -15046,7 +15047,7 @@
                         ClusterObjectFieldDescriptor(Label="timeReduction", Tag=0, Type=uint),
                     ])
 
-            timeReduction: 'uint' = 0
+            timeReduction: uint = 0
 
     class Attributes:
         @dataclass
@@ -15063,7 +15064,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TimeRemaining(ClusterAttributeDescriptor):
@@ -15079,7 +15080,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TimerState(ClusterAttributeDescriptor):
@@ -15095,7 +15096,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=Timer.Enums.TimerStatusEnum)
 
-            value: 'Timer.Enums.TimerStatusEnum' = 0
+            value: Timer.Enums.TimerStatusEnum = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -15111,7 +15112,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -15127,7 +15128,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -15143,7 +15144,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -15159,7 +15160,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -15175,7 +15176,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -15191,7 +15192,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -15216,18 +15217,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    phaseList: 'typing.Union[Nullable, typing.List[str]]' = None
-    currentPhase: 'typing.Union[Nullable, uint]' = None
-    countdownTime: 'typing.Union[None, Nullable, uint]' = None
-    operationalStateList: 'typing.List[OvenCavityOperationalState.Structs.OperationalStateStruct]' = None
-    operationalState: 'OvenCavityOperationalState.Enums.OperationalStateEnum' = None
-    operationalError: 'OvenCavityOperationalState.Structs.ErrorStateStruct' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    phaseList: typing.Union[Nullable, typing.List[str]] = NullValue
+    currentPhase: typing.Union[Nullable, uint] = NullValue
+    countdownTime: typing.Union[None, Nullable, uint] = None
+    operationalStateList: typing.List[OvenCavityOperationalState.Structs.OperationalStateStruct] = field(default_factory=lambda: [])
+    operationalState: OvenCavityOperationalState.Enums.OperationalStateEnum = 0
+    operationalError: OvenCavityOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OvenCavityOperationalState.Structs.ErrorStateStruct())
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ErrorStateEnum(MatterIntEnum):
@@ -15339,7 +15340,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000048
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -15348,7 +15349,7 @@
                         ClusterObjectFieldDescriptor(Label="commandResponseState", Tag=0, Type=OvenCavityOperationalState.Structs.ErrorStateStruct),
                     ])
 
-            commandResponseState: 'OvenCavityOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: OvenCavityOperationalState.Structs.ErrorStateStruct())
+            commandResponseState: OvenCavityOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OvenCavityOperationalState.Structs.ErrorStateStruct())
 
     class Attributes:
         @dataclass
@@ -15365,7 +15366,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, typing.List[str]])
 
-            value: 'typing.Union[Nullable, typing.List[str]]' = NullValue
+            value: typing.Union[Nullable, typing.List[str]] = NullValue
 
         @dataclass
         class CurrentPhase(ClusterAttributeDescriptor):
@@ -15381,7 +15382,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class CountdownTime(ClusterAttributeDescriptor):
@@ -15397,7 +15398,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OperationalStateList(ClusterAttributeDescriptor):
@@ -15413,7 +15414,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[OvenCavityOperationalState.Structs.OperationalStateStruct])
 
-            value: 'typing.List[OvenCavityOperationalState.Structs.OperationalStateStruct]' = field(default_factory=lambda: [])
+            value: typing.List[OvenCavityOperationalState.Structs.OperationalStateStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class OperationalState(ClusterAttributeDescriptor):
@@ -15429,7 +15430,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=OvenCavityOperationalState.Enums.OperationalStateEnum)
 
-            value: 'OvenCavityOperationalState.Enums.OperationalStateEnum' = 0
+            value: OvenCavityOperationalState.Enums.OperationalStateEnum = 0
 
         @dataclass
         class OperationalError(ClusterAttributeDescriptor):
@@ -15445,7 +15446,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=OvenCavityOperationalState.Structs.ErrorStateStruct)
 
-            value: 'OvenCavityOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: OvenCavityOperationalState.Structs.ErrorStateStruct())
+            value: OvenCavityOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OvenCavityOperationalState.Structs.ErrorStateStruct())
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -15461,7 +15462,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -15477,7 +15478,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -15493,7 +15494,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -15509,7 +15510,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -15525,7 +15526,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -15541,7 +15542,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -15561,7 +15562,7 @@
                         ClusterObjectFieldDescriptor(Label="errorState", Tag=0, Type=OvenCavityOperationalState.Structs.ErrorStateStruct),
                     ])
 
-            errorState: 'OvenCavityOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: OvenCavityOperationalState.Structs.ErrorStateStruct())
+            errorState: OvenCavityOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OvenCavityOperationalState.Structs.ErrorStateStruct())
 
         @dataclass
         class OperationCompletion(ClusterEvent):
@@ -15582,9 +15583,9 @@
                         ClusterObjectFieldDescriptor(Label="pausedTime", Tag=2, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            completionErrorCode: 'uint' = 0
-            totalOperationalTime: 'typing.Union[None, Nullable, uint]' = None
-            pausedTime: 'typing.Union[None, Nullable, uint]' = None
+            completionErrorCode: uint = 0
+            totalOperationalTime: typing.Union[None, Nullable, uint] = None
+            pausedTime: typing.Union[None, Nullable, uint] = None
 
 
 @dataclass
@@ -15607,16 +15608,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[OvenMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[OvenMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -15693,14 +15694,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000049
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -15710,8 +15711,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -15728,7 +15729,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[OvenMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[OvenMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[OvenMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -15744,7 +15745,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -15760,7 +15761,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -15776,7 +15777,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -15792,7 +15793,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -15808,7 +15809,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -15824,7 +15825,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -15840,7 +15841,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -15856,7 +15857,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -15872,7 +15873,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -15893,14 +15894,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedDrynessLevels: 'typing.List[LaundryDryerControls.Enums.DrynessLevelEnum]' = None
-    selectedDrynessLevel: 'typing.Union[Nullable, LaundryDryerControls.Enums.DrynessLevelEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedDrynessLevels: typing.List[LaundryDryerControls.Enums.DrynessLevelEnum] = field(default_factory=lambda: [])
+    selectedDrynessLevel: typing.Union[Nullable, LaundryDryerControls.Enums.DrynessLevelEnum] = NullValue
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class DrynessLevelEnum(MatterIntEnum):
@@ -15929,7 +15930,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[LaundryDryerControls.Enums.DrynessLevelEnum])
 
-            value: 'typing.List[LaundryDryerControls.Enums.DrynessLevelEnum]' = field(default_factory=lambda: [])
+            value: typing.List[LaundryDryerControls.Enums.DrynessLevelEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class SelectedDrynessLevel(ClusterAttributeDescriptor):
@@ -15945,7 +15946,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, LaundryDryerControls.Enums.DrynessLevelEnum])
 
-            value: 'typing.Union[Nullable, LaundryDryerControls.Enums.DrynessLevelEnum]' = NullValue
+            value: typing.Union[Nullable, LaundryDryerControls.Enums.DrynessLevelEnum] = NullValue
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -15961,7 +15962,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -15977,7 +15978,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -15993,7 +15994,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -16009,7 +16010,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -16025,7 +16026,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -16041,7 +16042,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -16066,18 +16067,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    description: 'str' = None
-    standardNamespace: 'typing.Union[Nullable, uint]' = None
-    supportedModes: 'typing.List[ModeSelect.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    description: str = ""
+    standardNamespace: typing.Union[Nullable, uint] = NullValue
+    supportedModes: typing.List[ModeSelect.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -16118,7 +16119,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000050
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -16127,7 +16128,7 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
     class Attributes:
         @dataclass
@@ -16144,7 +16145,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class StandardNamespace(ClusterAttributeDescriptor):
@@ -16160,7 +16161,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class SupportedModes(ClusterAttributeDescriptor):
@@ -16176,7 +16177,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ModeSelect.Structs.ModeOptionStruct])
 
-            value: 'typing.List[ModeSelect.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ModeSelect.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -16192,7 +16193,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -16208,7 +16209,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -16224,7 +16225,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -16240,7 +16241,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -16256,7 +16257,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -16272,7 +16273,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -16288,7 +16289,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -16304,7 +16305,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -16320,7 +16321,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -16343,16 +16344,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[LaundryWasherMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[LaundryWasherMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -16424,14 +16425,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000051
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -16441,8 +16442,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -16459,7 +16460,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[LaundryWasherMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[LaundryWasherMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[LaundryWasherMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -16475,7 +16476,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -16491,7 +16492,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -16507,7 +16508,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -16523,7 +16524,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -16539,7 +16540,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -16555,7 +16556,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -16571,7 +16572,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -16587,7 +16588,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -16603,7 +16604,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -16626,16 +16627,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[RefrigeratorAndTemperatureControlledCabinetMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[RefrigeratorAndTemperatureControlledCabinetMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -16705,14 +16706,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000052
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -16722,8 +16723,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -16740,7 +16741,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[RefrigeratorAndTemperatureControlledCabinetMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[RefrigeratorAndTemperatureControlledCabinetMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[RefrigeratorAndTemperatureControlledCabinetMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -16756,7 +16757,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -16772,7 +16773,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -16788,7 +16789,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -16804,7 +16805,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -16820,7 +16821,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -16836,7 +16837,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -16852,7 +16853,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -16868,7 +16869,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -16884,7 +16885,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -16907,16 +16908,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    spinSpeeds: 'typing.Optional[typing.List[str]]' = None
-    spinSpeedCurrent: 'typing.Union[None, Nullable, uint]' = None
-    numberOfRinses: 'typing.Optional[LaundryWasherControls.Enums.NumberOfRinsesEnum]' = None
-    supportedRinses: 'typing.Optional[typing.List[LaundryWasherControls.Enums.NumberOfRinsesEnum]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    spinSpeeds: typing.Optional[typing.List[str]] = None
+    spinSpeedCurrent: typing.Union[None, Nullable, uint] = None
+    numberOfRinses: typing.Optional[LaundryWasherControls.Enums.NumberOfRinsesEnum] = None
+    supportedRinses: typing.Optional[typing.List[LaundryWasherControls.Enums.NumberOfRinsesEnum]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class NumberOfRinsesEnum(MatterIntEnum):
@@ -16950,7 +16951,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[str]])
 
-            value: 'typing.Optional[typing.List[str]]' = None
+            value: typing.Optional[typing.List[str]] = None
 
         @dataclass
         class SpinSpeedCurrent(ClusterAttributeDescriptor):
@@ -16966,7 +16967,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class NumberOfRinses(ClusterAttributeDescriptor):
@@ -16982,7 +16983,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[LaundryWasherControls.Enums.NumberOfRinsesEnum])
 
-            value: 'typing.Optional[LaundryWasherControls.Enums.NumberOfRinsesEnum]' = None
+            value: typing.Optional[LaundryWasherControls.Enums.NumberOfRinsesEnum] = None
 
         @dataclass
         class SupportedRinses(ClusterAttributeDescriptor):
@@ -16998,7 +16999,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[LaundryWasherControls.Enums.NumberOfRinsesEnum]])
 
-            value: 'typing.Optional[typing.List[LaundryWasherControls.Enums.NumberOfRinsesEnum]]' = None
+            value: typing.Optional[typing.List[LaundryWasherControls.Enums.NumberOfRinsesEnum]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -17014,7 +17015,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -17030,7 +17031,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -17046,7 +17047,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -17062,7 +17063,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -17078,7 +17079,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -17094,7 +17095,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -17115,14 +17116,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[RvcRunMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[RvcRunMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -17208,14 +17209,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000054
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -17225,8 +17226,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -17243,7 +17244,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[RvcRunMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[RvcRunMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[RvcRunMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -17259,7 +17260,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -17275,7 +17276,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -17291,7 +17292,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -17307,7 +17308,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -17323,7 +17324,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -17339,7 +17340,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -17355,7 +17356,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -17376,14 +17377,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[RvcCleanMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[RvcCleanMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -17462,14 +17463,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000055
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -17479,8 +17480,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -17497,7 +17498,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[RvcCleanMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[RvcCleanMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[RvcCleanMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -17513,7 +17514,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -17529,7 +17530,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -17545,7 +17546,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -17561,7 +17562,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -17577,7 +17578,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -17593,7 +17594,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -17609,7 +17610,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -17634,18 +17635,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    temperatureSetpoint: 'typing.Optional[int]' = None
-    minTemperature: 'typing.Optional[int]' = None
-    maxTemperature: 'typing.Optional[int]' = None
-    step: 'typing.Optional[int]' = None
-    selectedTemperatureLevel: 'typing.Optional[uint]' = None
-    supportedTemperatureLevels: 'typing.Optional[typing.List[str]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    temperatureSetpoint: typing.Optional[int] = None
+    minTemperature: typing.Optional[int] = None
+    maxTemperature: typing.Optional[int] = None
+    step: typing.Optional[int] = None
+    selectedTemperatureLevel: typing.Optional[uint] = None
+    supportedTemperatureLevels: typing.Optional[typing.List[str]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -17659,7 +17660,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000056
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -17669,8 +17670,8 @@
                         ClusterObjectFieldDescriptor(Label="targetTemperatureLevel", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            targetTemperature: 'typing.Optional[int]' = None
-            targetTemperatureLevel: 'typing.Optional[uint]' = None
+            targetTemperature: typing.Optional[int] = None
+            targetTemperatureLevel: typing.Optional[uint] = None
 
     class Attributes:
         @dataclass
@@ -17687,7 +17688,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class MinTemperature(ClusterAttributeDescriptor):
@@ -17703,7 +17704,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class MaxTemperature(ClusterAttributeDescriptor):
@@ -17719,7 +17720,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class Step(ClusterAttributeDescriptor):
@@ -17735,7 +17736,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class SelectedTemperatureLevel(ClusterAttributeDescriptor):
@@ -17751,7 +17752,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SupportedTemperatureLevels(ClusterAttributeDescriptor):
@@ -17767,7 +17768,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[str]])
 
-            value: 'typing.Optional[typing.List[str]]' = None
+            value: typing.Optional[typing.List[str]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -17783,7 +17784,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -17799,7 +17800,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -17815,7 +17816,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -17831,7 +17832,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -17847,7 +17848,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -17863,7 +17864,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -17885,15 +17886,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    mask: 'uint' = None
-    state: 'uint' = None
-    supported: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    mask: uint = 0
+    state: uint = 0
+    supported: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class AlarmBitmap(IntFlag):
@@ -17914,7 +17915,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class State(ClusterAttributeDescriptor):
@@ -17930,7 +17931,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Supported(ClusterAttributeDescriptor):
@@ -17946,7 +17947,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -17962,7 +17963,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -17978,7 +17979,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -17994,7 +17995,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -18010,7 +18011,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -18026,7 +18027,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -18042,7 +18043,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -18065,10 +18066,10 @@
                         ClusterObjectFieldDescriptor(Label="mask", Tag=3, Type=uint),
                     ])
 
-            active: 'uint' = 0
-            inactive: 'uint' = 0
-            state: 'uint' = 0
-            mask: 'uint' = 0
+            active: uint = 0
+            inactive: uint = 0
+            state: uint = 0
+            mask: uint = 0
 
 
 @dataclass
@@ -18091,16 +18092,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[DishwasherMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[DishwasherMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -18171,14 +18172,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000059
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -18188,8 +18189,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -18206,7 +18207,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[DishwasherMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[DishwasherMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[DishwasherMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -18222,7 +18223,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -18238,7 +18239,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -18254,7 +18255,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -18270,7 +18271,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -18286,7 +18287,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -18302,7 +18303,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -18318,7 +18319,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -18334,7 +18335,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -18350,7 +18351,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -18370,13 +18371,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    airQuality: 'AirQuality.Enums.AirQualityEnum' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    airQuality: AirQuality.Enums.AirQualityEnum = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AirQualityEnum(MatterIntEnum):
@@ -18415,7 +18416,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=AirQuality.Enums.AirQualityEnum)
 
-            value: 'AirQuality.Enums.AirQualityEnum' = 0
+            value: AirQuality.Enums.AirQualityEnum = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -18431,7 +18432,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -18447,7 +18448,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -18463,7 +18464,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -18479,7 +18480,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -18495,7 +18496,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -18511,7 +18512,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -18543,25 +18544,25 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    expressedState: 'SmokeCoAlarm.Enums.ExpressedStateEnum' = None
-    smokeState: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
-    COState: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
-    batteryAlert: 'SmokeCoAlarm.Enums.AlarmStateEnum' = None
-    deviceMuted: 'typing.Optional[SmokeCoAlarm.Enums.MuteStateEnum]' = None
-    testInProgress: 'bool' = None
-    hardwareFaultAlert: 'bool' = None
-    endOfServiceAlert: 'SmokeCoAlarm.Enums.EndOfServiceEnum' = None
-    interconnectSmokeAlarm: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
-    interconnectCOAlarm: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
-    contaminationState: 'typing.Optional[SmokeCoAlarm.Enums.ContaminationStateEnum]' = None
-    smokeSensitivityLevel: 'typing.Optional[SmokeCoAlarm.Enums.SensitivityEnum]' = None
-    expiryDate: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    expressedState: SmokeCoAlarm.Enums.ExpressedStateEnum = 0
+    smokeState: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
+    COState: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
+    batteryAlert: SmokeCoAlarm.Enums.AlarmStateEnum = 0
+    deviceMuted: typing.Optional[SmokeCoAlarm.Enums.MuteStateEnum] = None
+    testInProgress: bool = False
+    hardwareFaultAlert: bool = False
+    endOfServiceAlert: SmokeCoAlarm.Enums.EndOfServiceEnum = 0
+    interconnectSmokeAlarm: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
+    interconnectCOAlarm: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
+    contaminationState: typing.Optional[SmokeCoAlarm.Enums.ContaminationStateEnum] = None
+    smokeSensitivityLevel: typing.Optional[SmokeCoAlarm.Enums.SensitivityEnum] = None
+    expiryDate: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AlarmStateEnum(MatterIntEnum):
@@ -18640,7 +18641,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000005C
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -18663,7 +18664,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=SmokeCoAlarm.Enums.ExpressedStateEnum)
 
-            value: 'SmokeCoAlarm.Enums.ExpressedStateEnum' = 0
+            value: SmokeCoAlarm.Enums.ExpressedStateEnum = 0
 
         @dataclass
         class SmokeState(ClusterAttributeDescriptor):
@@ -18679,7 +18680,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum])
 
-            value: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
+            value: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
 
         @dataclass
         class COState(ClusterAttributeDescriptor):
@@ -18695,7 +18696,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum])
 
-            value: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
+            value: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
 
         @dataclass
         class BatteryAlert(ClusterAttributeDescriptor):
@@ -18711,7 +18712,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=SmokeCoAlarm.Enums.AlarmStateEnum)
 
-            value: 'SmokeCoAlarm.Enums.AlarmStateEnum' = 0
+            value: SmokeCoAlarm.Enums.AlarmStateEnum = 0
 
         @dataclass
         class DeviceMuted(ClusterAttributeDescriptor):
@@ -18727,7 +18728,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[SmokeCoAlarm.Enums.MuteStateEnum])
 
-            value: 'typing.Optional[SmokeCoAlarm.Enums.MuteStateEnum]' = None
+            value: typing.Optional[SmokeCoAlarm.Enums.MuteStateEnum] = None
 
         @dataclass
         class TestInProgress(ClusterAttributeDescriptor):
@@ -18743,7 +18744,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class HardwareFaultAlert(ClusterAttributeDescriptor):
@@ -18759,7 +18760,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class EndOfServiceAlert(ClusterAttributeDescriptor):
@@ -18775,7 +18776,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=SmokeCoAlarm.Enums.EndOfServiceEnum)
 
-            value: 'SmokeCoAlarm.Enums.EndOfServiceEnum' = 0
+            value: SmokeCoAlarm.Enums.EndOfServiceEnum = 0
 
         @dataclass
         class InterconnectSmokeAlarm(ClusterAttributeDescriptor):
@@ -18791,7 +18792,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum])
 
-            value: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
+            value: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
 
         @dataclass
         class InterconnectCOAlarm(ClusterAttributeDescriptor):
@@ -18807,7 +18808,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum])
 
-            value: 'typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum]' = None
+            value: typing.Optional[SmokeCoAlarm.Enums.AlarmStateEnum] = None
 
         @dataclass
         class ContaminationState(ClusterAttributeDescriptor):
@@ -18823,7 +18824,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[SmokeCoAlarm.Enums.ContaminationStateEnum])
 
-            value: 'typing.Optional[SmokeCoAlarm.Enums.ContaminationStateEnum]' = None
+            value: typing.Optional[SmokeCoAlarm.Enums.ContaminationStateEnum] = None
 
         @dataclass
         class SmokeSensitivityLevel(ClusterAttributeDescriptor):
@@ -18839,7 +18840,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[SmokeCoAlarm.Enums.SensitivityEnum])
 
-            value: 'typing.Optional[SmokeCoAlarm.Enums.SensitivityEnum]' = None
+            value: typing.Optional[SmokeCoAlarm.Enums.SensitivityEnum] = None
 
         @dataclass
         class ExpiryDate(ClusterAttributeDescriptor):
@@ -18855,7 +18856,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -18871,7 +18872,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -18887,7 +18888,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -18903,7 +18904,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -18919,7 +18920,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -18935,7 +18936,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -18951,7 +18952,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -18971,7 +18972,7 @@
                         ClusterObjectFieldDescriptor(Label="alarmSeverityLevel", Tag=0, Type=SmokeCoAlarm.Enums.AlarmStateEnum),
                     ])
 
-            alarmSeverityLevel: 'SmokeCoAlarm.Enums.AlarmStateEnum' = 0
+            alarmSeverityLevel: SmokeCoAlarm.Enums.AlarmStateEnum = 0
 
         @dataclass
         class COAlarm(ClusterEvent):
@@ -18990,7 +18991,7 @@
                         ClusterObjectFieldDescriptor(Label="alarmSeverityLevel", Tag=0, Type=SmokeCoAlarm.Enums.AlarmStateEnum),
                     ])
 
-            alarmSeverityLevel: 'SmokeCoAlarm.Enums.AlarmStateEnum' = 0
+            alarmSeverityLevel: SmokeCoAlarm.Enums.AlarmStateEnum = 0
 
         @dataclass
         class LowBattery(ClusterEvent):
@@ -19009,7 +19010,7 @@
                         ClusterObjectFieldDescriptor(Label="alarmSeverityLevel", Tag=0, Type=SmokeCoAlarm.Enums.AlarmStateEnum),
                     ])
 
-            alarmSeverityLevel: 'SmokeCoAlarm.Enums.AlarmStateEnum' = 0
+            alarmSeverityLevel: SmokeCoAlarm.Enums.AlarmStateEnum = 0
 
         @dataclass
         class HardwareFault(ClusterEvent):
@@ -19108,7 +19109,7 @@
                         ClusterObjectFieldDescriptor(Label="alarmSeverityLevel", Tag=0, Type=SmokeCoAlarm.Enums.AlarmStateEnum),
                     ])
 
-            alarmSeverityLevel: 'SmokeCoAlarm.Enums.AlarmStateEnum' = 0
+            alarmSeverityLevel: SmokeCoAlarm.Enums.AlarmStateEnum = 0
 
         @dataclass
         class InterconnectCOAlarm(ClusterEvent):
@@ -19127,7 +19128,7 @@
                         ClusterObjectFieldDescriptor(Label="alarmSeverityLevel", Tag=0, Type=SmokeCoAlarm.Enums.AlarmStateEnum),
                     ])
 
-            alarmSeverityLevel: 'SmokeCoAlarm.Enums.AlarmStateEnum' = 0
+            alarmSeverityLevel: SmokeCoAlarm.Enums.AlarmStateEnum = 0
 
         @dataclass
         class AllClear(ClusterEvent):
@@ -19166,16 +19167,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    mask: 'uint' = None
-    latch: 'typing.Optional[uint]' = None
-    state: 'uint' = None
-    supported: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    mask: uint = 0
+    latch: typing.Optional[uint] = None
+    state: uint = 0
+    supported: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class AlarmBitmap(IntFlag):
@@ -19195,7 +19196,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000005D
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -19204,14 +19205,14 @@
                         ClusterObjectFieldDescriptor(Label="alarms", Tag=0, Type=uint),
                     ])
 
-            alarms: 'uint' = 0
+            alarms: uint = 0
 
         @dataclass
         class ModifyEnabledAlarms(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000005D
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -19220,7 +19221,7 @@
                         ClusterObjectFieldDescriptor(Label="mask", Tag=0, Type=uint),
                     ])
 
-            mask: 'uint' = 0
+            mask: uint = 0
 
     class Attributes:
         @dataclass
@@ -19237,7 +19238,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Latch(ClusterAttributeDescriptor):
@@ -19253,7 +19254,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class State(ClusterAttributeDescriptor):
@@ -19269,7 +19270,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Supported(ClusterAttributeDescriptor):
@@ -19285,7 +19286,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -19301,7 +19302,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -19317,7 +19318,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -19333,7 +19334,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -19349,7 +19350,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -19365,7 +19366,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -19381,7 +19382,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -19404,10 +19405,10 @@
                         ClusterObjectFieldDescriptor(Label="mask", Tag=3, Type=uint),
                     ])
 
-            active: 'uint' = 0
-            inactive: 'uint' = 0
-            state: 'uint' = 0
-            mask: 'uint' = 0
+            active: uint = 0
+            inactive: uint = 0
+            state: uint = 0
+            mask: uint = 0
 
 
 @dataclass
@@ -19428,14 +19429,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[MicrowaveOvenMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[MicrowaveOvenMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -19505,7 +19506,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[MicrowaveOvenMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[MicrowaveOvenMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[MicrowaveOvenMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -19521,7 +19522,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -19537,7 +19538,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -19553,7 +19554,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -19569,7 +19570,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -19585,7 +19586,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -19601,7 +19602,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -19617,7 +19618,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -19645,21 +19646,21 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    cookTime: 'uint' = None
-    maxCookTime: 'uint' = None
-    powerSetting: 'typing.Optional[uint]' = None
-    minPower: 'typing.Optional[uint]' = None
-    maxPower: 'typing.Optional[uint]' = None
-    powerStep: 'typing.Optional[uint]' = None
-    supportedWatts: 'typing.Optional[typing.List[uint]]' = None
-    selectedWattIndex: 'typing.Optional[uint]' = None
-    wattRating: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    cookTime: uint = 0
+    maxCookTime: uint = 0
+    powerSetting: typing.Optional[uint] = None
+    minPower: typing.Optional[uint] = None
+    maxPower: typing.Optional[uint] = None
+    powerStep: typing.Optional[uint] = None
+    supportedWatts: typing.Optional[typing.List[uint]] = None
+    selectedWattIndex: typing.Optional[uint] = None
+    wattRating: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -19673,7 +19674,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000005F
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -19686,18 +19687,18 @@
                         ClusterObjectFieldDescriptor(Label="startAfterSetting", Tag=4, Type=typing.Optional[bool]),
                     ])
 
-            cookMode: 'typing.Optional[uint]' = None
-            cookTime: 'typing.Optional[uint]' = None
-            powerSetting: 'typing.Optional[uint]' = None
-            wattSettingIndex: 'typing.Optional[uint]' = None
-            startAfterSetting: 'typing.Optional[bool]' = None
+            cookMode: typing.Optional[uint] = None
+            cookTime: typing.Optional[uint] = None
+            powerSetting: typing.Optional[uint] = None
+            wattSettingIndex: typing.Optional[uint] = None
+            startAfterSetting: typing.Optional[bool] = None
 
         @dataclass
         class AddMoreTime(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000005F
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -19706,7 +19707,7 @@
                         ClusterObjectFieldDescriptor(Label="timeToAdd", Tag=0, Type=uint),
                     ])
 
-            timeToAdd: 'uint' = 0
+            timeToAdd: uint = 0
 
     class Attributes:
         @dataclass
@@ -19723,7 +19724,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class MaxCookTime(ClusterAttributeDescriptor):
@@ -19739,7 +19740,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class PowerSetting(ClusterAttributeDescriptor):
@@ -19755,7 +19756,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MinPower(ClusterAttributeDescriptor):
@@ -19771,7 +19772,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MaxPower(ClusterAttributeDescriptor):
@@ -19787,7 +19788,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PowerStep(ClusterAttributeDescriptor):
@@ -19803,7 +19804,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SupportedWatts(ClusterAttributeDescriptor):
@@ -19819,7 +19820,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[uint]])
 
-            value: 'typing.Optional[typing.List[uint]]' = None
+            value: typing.Optional[typing.List[uint]] = None
 
         @dataclass
         class SelectedWattIndex(ClusterAttributeDescriptor):
@@ -19835,7 +19836,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class WattRating(ClusterAttributeDescriptor):
@@ -19851,7 +19852,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -19867,7 +19868,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -19883,7 +19884,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -19899,7 +19900,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -19915,7 +19916,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -19931,7 +19932,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -19947,7 +19948,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -19972,18 +19973,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    phaseList: 'typing.Union[Nullable, typing.List[str]]' = None
-    currentPhase: 'typing.Union[Nullable, uint]' = None
-    countdownTime: 'typing.Union[None, Nullable, uint]' = None
-    operationalStateList: 'typing.List[OperationalState.Structs.OperationalStateStruct]' = None
-    operationalState: 'OperationalState.Enums.OperationalStateEnum' = None
-    operationalError: 'OperationalState.Structs.ErrorStateStruct' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    phaseList: typing.Union[Nullable, typing.List[str]] = NullValue
+    currentPhase: typing.Union[Nullable, uint] = NullValue
+    countdownTime: typing.Union[None, Nullable, uint] = None
+    operationalStateList: typing.List[OperationalState.Structs.OperationalStateStruct] = field(default_factory=lambda: [])
+    operationalState: OperationalState.Enums.OperationalStateEnum = 0
+    operationalError: OperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OperationalState.Structs.ErrorStateStruct())
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ErrorStateEnum(MatterIntEnum):
@@ -20095,7 +20096,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000060
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -20104,7 +20105,7 @@
                         ClusterObjectFieldDescriptor(Label="commandResponseState", Tag=0, Type=OperationalState.Structs.ErrorStateStruct),
                     ])
 
-            commandResponseState: 'OperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: OperationalState.Structs.ErrorStateStruct())
+            commandResponseState: OperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OperationalState.Structs.ErrorStateStruct())
 
     class Attributes:
         @dataclass
@@ -20121,7 +20122,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, typing.List[str]])
 
-            value: 'typing.Union[Nullable, typing.List[str]]' = NullValue
+            value: typing.Union[Nullable, typing.List[str]] = NullValue
 
         @dataclass
         class CurrentPhase(ClusterAttributeDescriptor):
@@ -20137,7 +20138,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class CountdownTime(ClusterAttributeDescriptor):
@@ -20153,7 +20154,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OperationalStateList(ClusterAttributeDescriptor):
@@ -20169,7 +20170,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[OperationalState.Structs.OperationalStateStruct])
 
-            value: 'typing.List[OperationalState.Structs.OperationalStateStruct]' = field(default_factory=lambda: [])
+            value: typing.List[OperationalState.Structs.OperationalStateStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class OperationalState(ClusterAttributeDescriptor):
@@ -20185,7 +20186,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=OperationalState.Enums.OperationalStateEnum)
 
-            value: 'OperationalState.Enums.OperationalStateEnum' = 0
+            value: OperationalState.Enums.OperationalStateEnum = 0
 
         @dataclass
         class OperationalError(ClusterAttributeDescriptor):
@@ -20201,7 +20202,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=OperationalState.Structs.ErrorStateStruct)
 
-            value: 'OperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: OperationalState.Structs.ErrorStateStruct())
+            value: OperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OperationalState.Structs.ErrorStateStruct())
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -20217,7 +20218,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -20233,7 +20234,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -20249,7 +20250,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -20265,7 +20266,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -20281,7 +20282,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -20297,7 +20298,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -20317,7 +20318,7 @@
                         ClusterObjectFieldDescriptor(Label="errorState", Tag=0, Type=OperationalState.Structs.ErrorStateStruct),
                     ])
 
-            errorState: 'OperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: OperationalState.Structs.ErrorStateStruct())
+            errorState: OperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: OperationalState.Structs.ErrorStateStruct())
 
         @dataclass
         class OperationCompletion(ClusterEvent):
@@ -20338,9 +20339,9 @@
                         ClusterObjectFieldDescriptor(Label="pausedTime", Tag=2, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            completionErrorCode: 'uint' = 0
-            totalOperationalTime: 'typing.Union[None, Nullable, uint]' = None
-            pausedTime: 'typing.Union[None, Nullable, uint]' = None
+            completionErrorCode: uint = 0
+            totalOperationalTime: typing.Union[None, Nullable, uint] = None
+            pausedTime: typing.Union[None, Nullable, uint] = None
 
 
 @dataclass
@@ -20365,18 +20366,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    phaseList: 'typing.Union[Nullable, typing.List[str]]' = None
-    currentPhase: 'typing.Union[Nullable, uint]' = None
-    countdownTime: 'typing.Union[None, Nullable, uint]' = None
-    operationalStateList: 'typing.List[RvcOperationalState.Structs.OperationalStateStruct]' = None
-    operationalState: 'uint' = None
-    operationalError: 'RvcOperationalState.Structs.ErrorStateStruct' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    phaseList: typing.Union[Nullable, typing.List[str]] = NullValue
+    currentPhase: typing.Union[Nullable, uint] = NullValue
+    countdownTime: typing.Union[None, Nullable, uint] = None
+    operationalStateList: typing.List[RvcOperationalState.Structs.OperationalStateStruct] = field(default_factory=lambda: [])
+    operationalState: uint = 0
+    operationalError: RvcOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: RvcOperationalState.Structs.ErrorStateStruct())
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ErrorStateEnum(MatterIntEnum):
@@ -20473,7 +20474,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000061
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -20482,7 +20483,7 @@
                         ClusterObjectFieldDescriptor(Label="commandResponseState", Tag=0, Type=RvcOperationalState.Structs.ErrorStateStruct),
                     ])
 
-            commandResponseState: 'RvcOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: RvcOperationalState.Structs.ErrorStateStruct())
+            commandResponseState: RvcOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: RvcOperationalState.Structs.ErrorStateStruct())
 
         @dataclass
         class GoHome(ClusterCommand):
@@ -20512,7 +20513,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, typing.List[str]])
 
-            value: 'typing.Union[Nullable, typing.List[str]]' = NullValue
+            value: typing.Union[Nullable, typing.List[str]] = NullValue
 
         @dataclass
         class CurrentPhase(ClusterAttributeDescriptor):
@@ -20528,7 +20529,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class CountdownTime(ClusterAttributeDescriptor):
@@ -20544,7 +20545,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OperationalStateList(ClusterAttributeDescriptor):
@@ -20560,7 +20561,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[RvcOperationalState.Structs.OperationalStateStruct])
 
-            value: 'typing.List[RvcOperationalState.Structs.OperationalStateStruct]' = field(default_factory=lambda: [])
+            value: typing.List[RvcOperationalState.Structs.OperationalStateStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class OperationalState(ClusterAttributeDescriptor):
@@ -20576,7 +20577,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class OperationalError(ClusterAttributeDescriptor):
@@ -20592,7 +20593,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=RvcOperationalState.Structs.ErrorStateStruct)
 
-            value: 'RvcOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: RvcOperationalState.Structs.ErrorStateStruct())
+            value: RvcOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: RvcOperationalState.Structs.ErrorStateStruct())
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -20608,7 +20609,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -20624,7 +20625,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -20640,7 +20641,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -20656,7 +20657,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -20672,7 +20673,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -20688,7 +20689,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -20708,7 +20709,7 @@
                         ClusterObjectFieldDescriptor(Label="errorState", Tag=0, Type=RvcOperationalState.Structs.ErrorStateStruct),
                     ])
 
-            errorState: 'RvcOperationalState.Structs.ErrorStateStruct' = field(default_factory=lambda: RvcOperationalState.Structs.ErrorStateStruct())
+            errorState: RvcOperationalState.Structs.ErrorStateStruct = field(default_factory=lambda: RvcOperationalState.Structs.ErrorStateStruct())
 
         @dataclass
         class OperationCompletion(ClusterEvent):
@@ -20729,9 +20730,9 @@
                         ClusterObjectFieldDescriptor(Label="pausedTime", Tag=2, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            completionErrorCode: 'uint' = 0
-            totalOperationalTime: 'typing.Union[None, Nullable, uint]' = None
-            pausedTime: 'typing.Union[None, Nullable, uint]' = None
+            completionErrorCode: uint = 0
+            totalOperationalTime: typing.Union[None, Nullable, uint] = None
+            pausedTime: typing.Union[None, Nullable, uint] = None
 
 
 @dataclass
@@ -20753,15 +20754,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    lastConfiguredBy: 'typing.Union[None, Nullable, uint]' = None
-    sceneTableSize: 'uint' = None
-    fabricSceneInfo: 'typing.List[ScenesManagement.Structs.SceneInfoStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    lastConfiguredBy: typing.Union[None, Nullable, uint] = None
+    sceneTableSize: uint = 0
+    fabricSceneInfo: typing.List[ScenesManagement.Structs.SceneInfoStruct] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class CopyModeBitmap(IntFlag):
@@ -20851,18 +20852,18 @@
                         ClusterObjectFieldDescriptor(Label="extensionFieldSets", Tag=4, Type=typing.List[ScenesManagement.Structs.ExtensionFieldSet]),
                     ])
 
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
-            transitionTime: 'uint' = 0
-            sceneName: 'str' = ""
-            extensionFieldSets: 'typing.List[ScenesManagement.Structs.ExtensionFieldSet]' = field(default_factory=lambda: [])
+            groupID: uint = 0
+            sceneID: uint = 0
+            transitionTime: uint = 0
+            sceneName: str = ""
+            extensionFieldSets: typing.List[ScenesManagement.Structs.ExtensionFieldSet] = field(default_factory=lambda: [])
 
         @dataclass
         class AddSceneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -20873,9 +20874,9 @@
                         ClusterObjectFieldDescriptor(Label="sceneID", Tag=2, Type=uint),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
+            status: uint = 0
+            groupID: uint = 0
+            sceneID: uint = 0
 
         @dataclass
         class ViewScene(ClusterCommand):
@@ -20892,15 +20893,15 @@
                         ClusterObjectFieldDescriptor(Label="sceneID", Tag=1, Type=uint),
                     ])
 
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
+            groupID: uint = 0
+            sceneID: uint = 0
 
         @dataclass
         class ViewSceneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -20914,12 +20915,12 @@
                         ClusterObjectFieldDescriptor(Label="extensionFieldSets", Tag=5, Type=typing.Optional[typing.List[ScenesManagement.Structs.ExtensionFieldSet]]),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
-            transitionTime: 'typing.Optional[uint]' = None
-            sceneName: 'typing.Optional[str]' = None
-            extensionFieldSets: 'typing.Optional[typing.List[ScenesManagement.Structs.ExtensionFieldSet]]' = None
+            status: uint = 0
+            groupID: uint = 0
+            sceneID: uint = 0
+            transitionTime: typing.Optional[uint] = None
+            sceneName: typing.Optional[str] = None
+            extensionFieldSets: typing.Optional[typing.List[ScenesManagement.Structs.ExtensionFieldSet]] = None
 
         @dataclass
         class RemoveScene(ClusterCommand):
@@ -20936,15 +20937,15 @@
                         ClusterObjectFieldDescriptor(Label="sceneID", Tag=1, Type=uint),
                     ])
 
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
+            groupID: uint = 0
+            sceneID: uint = 0
 
         @dataclass
         class RemoveSceneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -20955,9 +20956,9 @@
                         ClusterObjectFieldDescriptor(Label="sceneID", Tag=2, Type=uint),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
+            status: uint = 0
+            groupID: uint = 0
+            sceneID: uint = 0
 
         @dataclass
         class RemoveAllScenes(ClusterCommand):
@@ -20973,14 +20974,14 @@
                         ClusterObjectFieldDescriptor(Label="groupID", Tag=0, Type=uint),
                     ])
 
-            groupID: 'uint' = 0
+            groupID: uint = 0
 
         @dataclass
         class RemoveAllScenesResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -20990,8 +20991,8 @@
                         ClusterObjectFieldDescriptor(Label="groupID", Tag=1, Type=uint),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
+            status: uint = 0
+            groupID: uint = 0
 
         @dataclass
         class StoreScene(ClusterCommand):
@@ -21008,15 +21009,15 @@
                         ClusterObjectFieldDescriptor(Label="sceneID", Tag=1, Type=uint),
                     ])
 
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
+            groupID: uint = 0
+            sceneID: uint = 0
 
         @dataclass
         class StoreSceneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21027,16 +21028,16 @@
                         ClusterObjectFieldDescriptor(Label="sceneID", Tag=2, Type=uint),
                     ])
 
-            status: 'uint' = 0
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
+            status: uint = 0
+            groupID: uint = 0
+            sceneID: uint = 0
 
         @dataclass
         class RecallScene(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21047,9 +21048,9 @@
                         ClusterObjectFieldDescriptor(Label="transitionTime", Tag=2, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            groupID: 'uint' = 0
-            sceneID: 'uint' = 0
-            transitionTime: 'typing.Union[None, Nullable, uint]' = None
+            groupID: uint = 0
+            sceneID: uint = 0
+            transitionTime: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GetSceneMembership(ClusterCommand):
@@ -21065,14 +21066,14 @@
                         ClusterObjectFieldDescriptor(Label="groupID", Tag=0, Type=uint),
                     ])
 
-            groupID: 'uint' = 0
+            groupID: uint = 0
 
         @dataclass
         class GetSceneMembershipResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21084,10 +21085,10 @@
                         ClusterObjectFieldDescriptor(Label="sceneList", Tag=3, Type=typing.Optional[typing.List[uint]]),
                     ])
 
-            status: 'uint' = 0
-            capacity: 'typing.Union[Nullable, uint]' = NullValue
-            groupID: 'uint' = 0
-            sceneList: 'typing.Optional[typing.List[uint]]' = None
+            status: uint = 0
+            capacity: typing.Union[Nullable, uint] = NullValue
+            groupID: uint = 0
+            sceneList: typing.Optional[typing.List[uint]] = None
 
         @dataclass
         class CopyScene(ClusterCommand):
@@ -21107,18 +21108,18 @@
                         ClusterObjectFieldDescriptor(Label="sceneIdentifierTo", Tag=4, Type=uint),
                     ])
 
-            mode: 'uint' = 0
-            groupIdentifierFrom: 'uint' = 0
-            sceneIdentifierFrom: 'uint' = 0
-            groupIdentifierTo: 'uint' = 0
-            sceneIdentifierTo: 'uint' = 0
+            mode: uint = 0
+            groupIdentifierFrom: uint = 0
+            sceneIdentifierFrom: uint = 0
+            groupIdentifierTo: uint = 0
+            sceneIdentifierTo: uint = 0
 
         @dataclass
         class CopySceneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000062
             command_id: typing.ClassVar[int] = 0x00000040
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21129,9 +21130,9 @@
                         ClusterObjectFieldDescriptor(Label="sceneIdentifierFrom", Tag=2, Type=uint),
                     ])
 
-            status: 'uint' = 0
-            groupIdentifierFrom: 'uint' = 0
-            sceneIdentifierFrom: 'uint' = 0
+            status: uint = 0
+            groupIdentifierFrom: uint = 0
+            sceneIdentifierFrom: uint = 0
 
     class Attributes:
         @dataclass
@@ -21148,7 +21149,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class SceneTableSize(ClusterAttributeDescriptor):
@@ -21164,7 +21165,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class FabricSceneInfo(ClusterAttributeDescriptor):
@@ -21180,7 +21181,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ScenesManagement.Structs.SceneInfoStruct])
 
-            value: 'typing.List[ScenesManagement.Structs.SceneInfoStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ScenesManagement.Structs.SceneInfoStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -21196,7 +21197,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -21212,7 +21213,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -21228,7 +21229,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -21244,7 +21245,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -21260,7 +21261,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -21276,7 +21277,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -21301,18 +21302,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    condition: 'typing.Optional[uint]' = None
-    degradationDirection: 'typing.Optional[HepaFilterMonitoring.Enums.DegradationDirectionEnum]' = None
-    changeIndication: 'HepaFilterMonitoring.Enums.ChangeIndicationEnum' = None
-    inPlaceIndicator: 'typing.Optional[bool]' = None
-    lastChangedTime: 'typing.Union[None, Nullable, uint]' = None
-    replacementProductList: 'typing.Optional[typing.List[HepaFilterMonitoring.Structs.ReplacementProductStruct]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    condition: typing.Optional[uint] = None
+    degradationDirection: typing.Optional[HepaFilterMonitoring.Enums.DegradationDirectionEnum] = None
+    changeIndication: HepaFilterMonitoring.Enums.ChangeIndicationEnum = 0
+    inPlaceIndicator: typing.Optional[bool] = None
+    lastChangedTime: typing.Union[None, Nullable, uint] = None
+    replacementProductList: typing.Optional[typing.List[HepaFilterMonitoring.Structs.ReplacementProductStruct]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ChangeIndicationEnum(MatterIntEnum):
@@ -21372,7 +21373,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000071
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21395,7 +21396,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class DegradationDirection(ClusterAttributeDescriptor):
@@ -21411,7 +21412,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[HepaFilterMonitoring.Enums.DegradationDirectionEnum])
 
-            value: 'typing.Optional[HepaFilterMonitoring.Enums.DegradationDirectionEnum]' = None
+            value: typing.Optional[HepaFilterMonitoring.Enums.DegradationDirectionEnum] = None
 
         @dataclass
         class ChangeIndication(ClusterAttributeDescriptor):
@@ -21427,7 +21428,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=HepaFilterMonitoring.Enums.ChangeIndicationEnum)
 
-            value: 'HepaFilterMonitoring.Enums.ChangeIndicationEnum' = 0
+            value: HepaFilterMonitoring.Enums.ChangeIndicationEnum = 0
 
         @dataclass
         class InPlaceIndicator(ClusterAttributeDescriptor):
@@ -21443,7 +21444,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class LastChangedTime(ClusterAttributeDescriptor):
@@ -21459,7 +21460,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ReplacementProductList(ClusterAttributeDescriptor):
@@ -21475,7 +21476,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[HepaFilterMonitoring.Structs.ReplacementProductStruct]])
 
-            value: 'typing.Optional[typing.List[HepaFilterMonitoring.Structs.ReplacementProductStruct]]' = None
+            value: typing.Optional[typing.List[HepaFilterMonitoring.Structs.ReplacementProductStruct]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -21491,7 +21492,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -21507,7 +21508,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -21523,7 +21524,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -21539,7 +21540,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -21555,7 +21556,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -21571,7 +21572,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -21596,18 +21597,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    condition: 'typing.Optional[uint]' = None
-    degradationDirection: 'typing.Optional[ActivatedCarbonFilterMonitoring.Enums.DegradationDirectionEnum]' = None
-    changeIndication: 'ActivatedCarbonFilterMonitoring.Enums.ChangeIndicationEnum' = None
-    inPlaceIndicator: 'typing.Optional[bool]' = None
-    lastChangedTime: 'typing.Union[None, Nullable, uint]' = None
-    replacementProductList: 'typing.Optional[typing.List[ActivatedCarbonFilterMonitoring.Structs.ReplacementProductStruct]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    condition: typing.Optional[uint] = None
+    degradationDirection: typing.Optional[ActivatedCarbonFilterMonitoring.Enums.DegradationDirectionEnum] = None
+    changeIndication: ActivatedCarbonFilterMonitoring.Enums.ChangeIndicationEnum = 0
+    inPlaceIndicator: typing.Optional[bool] = None
+    lastChangedTime: typing.Union[None, Nullable, uint] = None
+    replacementProductList: typing.Optional[typing.List[ActivatedCarbonFilterMonitoring.Structs.ReplacementProductStruct]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ChangeIndicationEnum(MatterIntEnum):
@@ -21667,7 +21668,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000072
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21690,7 +21691,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class DegradationDirection(ClusterAttributeDescriptor):
@@ -21706,7 +21707,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[ActivatedCarbonFilterMonitoring.Enums.DegradationDirectionEnum])
 
-            value: 'typing.Optional[ActivatedCarbonFilterMonitoring.Enums.DegradationDirectionEnum]' = None
+            value: typing.Optional[ActivatedCarbonFilterMonitoring.Enums.DegradationDirectionEnum] = None
 
         @dataclass
         class ChangeIndication(ClusterAttributeDescriptor):
@@ -21722,7 +21723,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ActivatedCarbonFilterMonitoring.Enums.ChangeIndicationEnum)
 
-            value: 'ActivatedCarbonFilterMonitoring.Enums.ChangeIndicationEnum' = 0
+            value: ActivatedCarbonFilterMonitoring.Enums.ChangeIndicationEnum = 0
 
         @dataclass
         class InPlaceIndicator(ClusterAttributeDescriptor):
@@ -21738,7 +21739,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class LastChangedTime(ClusterAttributeDescriptor):
@@ -21754,7 +21755,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ReplacementProductList(ClusterAttributeDescriptor):
@@ -21770,7 +21771,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[ActivatedCarbonFilterMonitoring.Structs.ReplacementProductStruct]])
 
-            value: 'typing.Optional[typing.List[ActivatedCarbonFilterMonitoring.Structs.ReplacementProductStruct]]' = None
+            value: typing.Optional[typing.List[ActivatedCarbonFilterMonitoring.Structs.ReplacementProductStruct]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -21786,7 +21787,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -21802,7 +21803,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -21818,7 +21819,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -21834,7 +21835,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -21850,7 +21851,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -21866,7 +21867,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -21893,20 +21894,20 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    currentSensitivityLevel: 'typing.Optional[uint]' = None
-    supportedSensitivityLevels: 'typing.Optional[uint]' = None
-    defaultSensitivityLevel: 'typing.Optional[uint]' = None
-    alarmsActive: 'typing.Optional[uint]' = None
-    alarmsSuppressed: 'typing.Optional[uint]' = None
-    alarmsEnabled: 'typing.Optional[uint]' = None
-    alarmsSupported: 'typing.Optional[uint]' = None
-    sensorFault: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    currentSensitivityLevel: typing.Optional[uint] = None
+    supportedSensitivityLevels: typing.Optional[uint] = None
+    defaultSensitivityLevel: typing.Optional[uint] = None
+    alarmsActive: typing.Optional[uint] = None
+    alarmsSuppressed: typing.Optional[uint] = None
+    alarmsEnabled: typing.Optional[uint] = None
+    alarmsSupported: typing.Optional[uint] = None
+    sensorFault: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class AlarmModeBitmap(IntFlag):
@@ -21928,7 +21929,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000080
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21937,14 +21938,14 @@
                         ClusterObjectFieldDescriptor(Label="alarmsToSuppress", Tag=0, Type=uint),
                     ])
 
-            alarmsToSuppress: 'uint' = 0
+            alarmsToSuppress: uint = 0
 
         @dataclass
         class EnableDisableAlarm(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000080
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -21953,7 +21954,7 @@
                         ClusterObjectFieldDescriptor(Label="alarmsToEnableDisable", Tag=0, Type=uint),
                     ])
 
-            alarmsToEnableDisable: 'uint' = 0
+            alarmsToEnableDisable: uint = 0
 
     class Attributes:
         @dataclass
@@ -21970,7 +21971,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SupportedSensitivityLevels(ClusterAttributeDescriptor):
@@ -21986,7 +21987,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class DefaultSensitivityLevel(ClusterAttributeDescriptor):
@@ -22002,7 +22003,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AlarmsActive(ClusterAttributeDescriptor):
@@ -22018,7 +22019,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AlarmsSuppressed(ClusterAttributeDescriptor):
@@ -22034,7 +22035,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AlarmsEnabled(ClusterAttributeDescriptor):
@@ -22050,7 +22051,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AlarmsSupported(ClusterAttributeDescriptor):
@@ -22066,7 +22067,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SensorFault(ClusterAttributeDescriptor):
@@ -22082,7 +22083,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -22098,7 +22099,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -22114,7 +22115,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -22130,7 +22131,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -22146,7 +22147,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -22162,7 +22163,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -22178,7 +22179,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -22199,8 +22200,8 @@
                         ClusterObjectFieldDescriptor(Label="alarmsSuppressed", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            alarmsActive: 'uint' = 0
-            alarmsSuppressed: 'typing.Optional[uint]' = None
+            alarmsActive: uint = 0
+            alarmsSuppressed: typing.Optional[uint] = None
 
         @dataclass
         class SensorFault(ClusterEvent):
@@ -22219,7 +22220,7 @@
                         ClusterObjectFieldDescriptor(Label="sensorFault", Tag=0, Type=uint),
                     ])
 
-            sensorFault: 'uint' = 0
+            sensorFault: uint = 0
 
 
 @dataclass
@@ -22249,23 +22250,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    openDuration: 'typing.Union[Nullable, uint]' = None
-    defaultOpenDuration: 'typing.Union[Nullable, uint]' = None
-    autoCloseTime: 'typing.Union[None, Nullable, uint]' = None
-    remainingDuration: 'typing.Union[Nullable, uint]' = None
-    currentState: 'typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum]' = None
-    targetState: 'typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum]' = None
-    currentLevel: 'typing.Union[None, Nullable, uint]' = None
-    targetLevel: 'typing.Union[None, Nullable, uint]' = None
-    defaultOpenLevel: 'typing.Optional[uint]' = None
-    valveFault: 'typing.Optional[uint]' = None
-    levelStep: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    openDuration: typing.Union[Nullable, uint] = NullValue
+    defaultOpenDuration: typing.Union[Nullable, uint] = NullValue
+    autoCloseTime: typing.Union[None, Nullable, uint] = None
+    remainingDuration: typing.Union[Nullable, uint] = NullValue
+    currentState: typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum] = NullValue
+    targetState: typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum] = NullValue
+    currentLevel: typing.Union[None, Nullable, uint] = None
+    targetLevel: typing.Union[None, Nullable, uint] = None
+    defaultOpenLevel: typing.Optional[uint] = None
+    valveFault: typing.Optional[uint] = None
+    levelStep: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class StatusCodeEnum(MatterIntEnum):
@@ -22305,7 +22306,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000081
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -22315,15 +22316,15 @@
                         ClusterObjectFieldDescriptor(Label="targetLevel", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            openDuration: 'typing.Union[None, Nullable, uint]' = None
-            targetLevel: 'typing.Optional[uint]' = None
+            openDuration: typing.Union[None, Nullable, uint] = None
+            targetLevel: typing.Optional[uint] = None
 
         @dataclass
         class Close(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000081
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -22346,7 +22347,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class DefaultOpenDuration(ClusterAttributeDescriptor):
@@ -22362,7 +22363,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class AutoCloseTime(ClusterAttributeDescriptor):
@@ -22378,7 +22379,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class RemainingDuration(ClusterAttributeDescriptor):
@@ -22394,7 +22395,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class CurrentState(ClusterAttributeDescriptor):
@@ -22410,7 +22411,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum])
 
-            value: 'typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum]' = NullValue
+            value: typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum] = NullValue
 
         @dataclass
         class TargetState(ClusterAttributeDescriptor):
@@ -22426,7 +22427,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum])
 
-            value: 'typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum]' = NullValue
+            value: typing.Union[Nullable, ValveConfigurationAndControl.Enums.ValveStateEnum] = NullValue
 
         @dataclass
         class CurrentLevel(ClusterAttributeDescriptor):
@@ -22442,7 +22443,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class TargetLevel(ClusterAttributeDescriptor):
@@ -22458,7 +22459,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class DefaultOpenLevel(ClusterAttributeDescriptor):
@@ -22474,7 +22475,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ValveFault(ClusterAttributeDescriptor):
@@ -22490,7 +22491,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class LevelStep(ClusterAttributeDescriptor):
@@ -22506,7 +22507,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -22522,7 +22523,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -22538,7 +22539,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -22554,7 +22555,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -22570,7 +22571,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -22586,7 +22587,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -22602,7 +22603,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -22623,8 +22624,8 @@
                         ClusterObjectFieldDescriptor(Label="valveLevel", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            valveState: 'ValveConfigurationAndControl.Enums.ValveStateEnum' = 0
-            valveLevel: 'typing.Optional[uint]' = None
+            valveState: ValveConfigurationAndControl.Enums.ValveStateEnum = 0
+            valveLevel: typing.Optional[uint] = None
 
         @dataclass
         class ValveFault(ClusterEvent):
@@ -22643,7 +22644,7 @@
                         ClusterObjectFieldDescriptor(Label="valveFault", Tag=0, Type=uint),
                     ])
 
-            valveFault: 'uint' = 0
+            valveFault: uint = 0
 
 
 @dataclass
@@ -22681,31 +22682,31 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    powerMode: 'ElectricalPowerMeasurement.Enums.PowerModeEnum' = None
-    numberOfMeasurementTypes: 'uint' = None
-    accuracy: 'typing.List[ElectricalPowerMeasurement.Structs.MeasurementAccuracyStruct]' = None
-    ranges: 'typing.Optional[typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct]]' = None
-    voltage: 'typing.Union[None, Nullable, int]' = None
-    activeCurrent: 'typing.Union[None, Nullable, int]' = None
-    reactiveCurrent: 'typing.Union[None, Nullable, int]' = None
-    apparentCurrent: 'typing.Union[None, Nullable, int]' = None
-    activePower: 'typing.Union[Nullable, int]' = None
-    reactivePower: 'typing.Union[None, Nullable, int]' = None
-    apparentPower: 'typing.Union[None, Nullable, int]' = None
-    RMSVoltage: 'typing.Union[None, Nullable, int]' = None
-    RMSCurrent: 'typing.Union[None, Nullable, int]' = None
-    RMSPower: 'typing.Union[None, Nullable, int]' = None
-    frequency: 'typing.Union[None, Nullable, int]' = None
-    harmonicCurrents: 'typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]]' = None
-    harmonicPhases: 'typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]]' = None
-    powerFactor: 'typing.Union[None, Nullable, int]' = None
-    neutralCurrent: 'typing.Union[None, Nullable, int]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    powerMode: ElectricalPowerMeasurement.Enums.PowerModeEnum = 0
+    numberOfMeasurementTypes: uint = 0
+    accuracy: typing.List[ElectricalPowerMeasurement.Structs.MeasurementAccuracyStruct] = field(default_factory=lambda: [])
+    ranges: typing.Optional[typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct]] = None
+    voltage: typing.Union[None, Nullable, int] = None
+    activeCurrent: typing.Union[None, Nullable, int] = None
+    reactiveCurrent: typing.Union[None, Nullable, int] = None
+    apparentCurrent: typing.Union[None, Nullable, int] = None
+    activePower: typing.Union[Nullable, int] = NullValue
+    reactivePower: typing.Union[None, Nullable, int] = None
+    apparentPower: typing.Union[None, Nullable, int] = None
+    RMSVoltage: typing.Union[None, Nullable, int] = None
+    RMSCurrent: typing.Union[None, Nullable, int] = None
+    RMSPower: typing.Union[None, Nullable, int] = None
+    frequency: typing.Union[None, Nullable, int] = None
+    harmonicCurrents: typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]] = None
+    harmonicPhases: typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]] = None
+    powerFactor: typing.Union[None, Nullable, int] = None
+    neutralCurrent: typing.Union[None, Nullable, int] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class MeasurementTypeEnum(MatterIntEnum):
@@ -22852,7 +22853,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ElectricalPowerMeasurement.Enums.PowerModeEnum)
 
-            value: 'ElectricalPowerMeasurement.Enums.PowerModeEnum' = 0
+            value: ElectricalPowerMeasurement.Enums.PowerModeEnum = 0
 
         @dataclass
         class NumberOfMeasurementTypes(ClusterAttributeDescriptor):
@@ -22868,7 +22869,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Accuracy(ClusterAttributeDescriptor):
@@ -22884,7 +22885,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ElectricalPowerMeasurement.Structs.MeasurementAccuracyStruct])
 
-            value: 'typing.List[ElectricalPowerMeasurement.Structs.MeasurementAccuracyStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ElectricalPowerMeasurement.Structs.MeasurementAccuracyStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class Ranges(ClusterAttributeDescriptor):
@@ -22900,7 +22901,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct]])
 
-            value: 'typing.Optional[typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct]]' = None
+            value: typing.Optional[typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct]] = None
 
         @dataclass
         class Voltage(ClusterAttributeDescriptor):
@@ -22916,7 +22917,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class ActiveCurrent(ClusterAttributeDescriptor):
@@ -22932,7 +22933,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class ReactiveCurrent(ClusterAttributeDescriptor):
@@ -22948,7 +22949,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class ApparentCurrent(ClusterAttributeDescriptor):
@@ -22964,7 +22965,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class ActivePower(ClusterAttributeDescriptor):
@@ -22980,7 +22981,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class ReactivePower(ClusterAttributeDescriptor):
@@ -22996,7 +22997,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class ApparentPower(ClusterAttributeDescriptor):
@@ -23012,7 +23013,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class RMSVoltage(ClusterAttributeDescriptor):
@@ -23028,7 +23029,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class RMSCurrent(ClusterAttributeDescriptor):
@@ -23044,7 +23045,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class RMSPower(ClusterAttributeDescriptor):
@@ -23060,7 +23061,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class Frequency(ClusterAttributeDescriptor):
@@ -23076,7 +23077,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class HarmonicCurrents(ClusterAttributeDescriptor):
@@ -23092,7 +23093,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]])
 
-            value: 'typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]]' = None
+            value: typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]] = None
 
         @dataclass
         class HarmonicPhases(ClusterAttributeDescriptor):
@@ -23108,7 +23109,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]])
 
-            value: 'typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]]' = None
+            value: typing.Union[None, Nullable, typing.List[ElectricalPowerMeasurement.Structs.HarmonicMeasurementStruct]] = None
 
         @dataclass
         class PowerFactor(ClusterAttributeDescriptor):
@@ -23124,7 +23125,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class NeutralCurrent(ClusterAttributeDescriptor):
@@ -23140,7 +23141,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -23156,7 +23157,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -23172,7 +23173,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -23188,7 +23189,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -23204,7 +23205,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -23220,7 +23221,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -23236,7 +23237,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -23256,7 +23257,7 @@
                         ClusterObjectFieldDescriptor(Label="ranges", Tag=0, Type=typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct]),
                     ])
 
-            ranges: 'typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct]' = field(default_factory=lambda: [])
+            ranges: typing.List[ElectricalPowerMeasurement.Structs.MeasurementRangeStruct] = field(default_factory=lambda: [])
 
 
 @dataclass
@@ -23281,18 +23282,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    accuracy: 'ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct' = None
-    cumulativeEnergyImported: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
-    cumulativeEnergyExported: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
-    periodicEnergyImported: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
-    periodicEnergyExported: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
-    cumulativeEnergyReset: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.CumulativeEnergyResetStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    accuracy: ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct = field(default_factory=lambda: ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct())
+    cumulativeEnergyImported: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
+    cumulativeEnergyExported: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
+    periodicEnergyImported: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
+    periodicEnergyExported: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
+    cumulativeEnergyReset: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.CumulativeEnergyResetStruct] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class MeasurementTypeEnum(MatterIntEnum):
@@ -23420,7 +23421,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct)
 
-            value: 'ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct' = field(default_factory=lambda: ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct())
+            value: ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct = field(default_factory=lambda: ElectricalEnergyMeasurement.Structs.MeasurementAccuracyStruct())
 
         @dataclass
         class CumulativeEnergyImported(ClusterAttributeDescriptor):
@@ -23436,7 +23437,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct])
 
-            value: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
+            value: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
 
         @dataclass
         class CumulativeEnergyExported(ClusterAttributeDescriptor):
@@ -23452,7 +23453,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct])
 
-            value: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
+            value: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
 
         @dataclass
         class PeriodicEnergyImported(ClusterAttributeDescriptor):
@@ -23468,7 +23469,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct])
 
-            value: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
+            value: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
 
         @dataclass
         class PeriodicEnergyExported(ClusterAttributeDescriptor):
@@ -23484,7 +23485,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct])
 
-            value: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
+            value: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
 
         @dataclass
         class CumulativeEnergyReset(ClusterAttributeDescriptor):
@@ -23500,7 +23501,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.CumulativeEnergyResetStruct])
 
-            value: 'typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.CumulativeEnergyResetStruct]' = None
+            value: typing.Union[None, Nullable, ElectricalEnergyMeasurement.Structs.CumulativeEnergyResetStruct] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -23516,7 +23517,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -23532,7 +23533,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -23548,7 +23549,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -23564,7 +23565,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -23580,7 +23581,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -23596,7 +23597,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -23617,8 +23618,8 @@
                         ClusterObjectFieldDescriptor(Label="energyExported", Tag=1, Type=typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]),
                     ])
 
-            energyImported: 'typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
-            energyExported: 'typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
+            energyImported: typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
+            energyExported: typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
 
         @dataclass
         class PeriodicEnergyMeasured(ClusterEvent):
@@ -23638,8 +23639,8 @@
                         ClusterObjectFieldDescriptor(Label="energyExported", Tag=1, Type=typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]),
                     ])
 
-            energyImported: 'typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
-            energyExported: 'typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct]' = None
+            energyImported: typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
+            energyExported: typing.Optional[ElectricalEnergyMeasurement.Structs.EnergyMeasurementStruct] = None
 
 
 @dataclass
@@ -23664,18 +23665,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    heaterTypes: 'uint' = None
-    heatDemand: 'uint' = None
-    tankVolume: 'typing.Optional[uint]' = None
-    estimatedHeatRequired: 'typing.Optional[int]' = None
-    tankPercentage: 'typing.Optional[uint]' = None
-    boostState: 'WaterHeaterManagement.Enums.BoostStateEnum' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    heaterTypes: uint = 0
+    heatDemand: uint = 0
+    tankVolume: typing.Optional[uint] = None
+    estimatedHeatRequired: typing.Optional[int] = None
+    tankPercentage: typing.Optional[uint] = None
+    boostState: WaterHeaterManagement.Enums.BoostStateEnum = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class BoostStateEnum(MatterIntEnum):
@@ -23727,7 +23728,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000094
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -23736,14 +23737,14 @@
                         ClusterObjectFieldDescriptor(Label="boostInfo", Tag=0, Type=WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct),
                     ])
 
-            boostInfo: 'WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct' = field(default_factory=lambda: WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct())
+            boostInfo: WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct = field(default_factory=lambda: WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct())
 
         @dataclass
         class CancelBoost(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000094
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -23766,7 +23767,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class HeatDemand(ClusterAttributeDescriptor):
@@ -23782,7 +23783,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TankVolume(ClusterAttributeDescriptor):
@@ -23798,7 +23799,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class EstimatedHeatRequired(ClusterAttributeDescriptor):
@@ -23814,7 +23815,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class TankPercentage(ClusterAttributeDescriptor):
@@ -23830,7 +23831,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class BoostState(ClusterAttributeDescriptor):
@@ -23846,7 +23847,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=WaterHeaterManagement.Enums.BoostStateEnum)
 
-            value: 'WaterHeaterManagement.Enums.BoostStateEnum' = 0
+            value: WaterHeaterManagement.Enums.BoostStateEnum = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -23862,7 +23863,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -23878,7 +23879,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -23894,7 +23895,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -23910,7 +23911,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -23926,7 +23927,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -23942,7 +23943,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -23962,7 +23963,7 @@
                         ClusterObjectFieldDescriptor(Label="boostInfo", Tag=0, Type=WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct),
                     ])
 
-            boostInfo: 'WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct' = field(default_factory=lambda: WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct())
+            boostInfo: WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct = field(default_factory=lambda: WaterHeaterManagement.Structs.WaterHeaterBoostInfoStruct())
 
         @dataclass
         class BoostEnded(ClusterEvent):
@@ -24005,20 +24006,20 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    loadControlPrograms: 'typing.List[DemandResponseLoadControl.Structs.LoadControlProgramStruct]' = None
-    numberOfLoadControlPrograms: 'uint' = None
-    events: 'typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct]' = None
-    activeEvents: 'typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct]' = None
-    numberOfEventsPerProgram: 'uint' = None
-    numberOfTransitions: 'uint' = None
-    defaultRandomStart: 'uint' = None
-    defaultRandomDuration: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    loadControlPrograms: typing.List[DemandResponseLoadControl.Structs.LoadControlProgramStruct] = field(default_factory=lambda: [])
+    numberOfLoadControlPrograms: uint = 0
+    events: typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct] = field(default_factory=lambda: [])
+    activeEvents: typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct] = field(default_factory=lambda: [])
+    numberOfEventsPerProgram: uint = 0
+    numberOfTransitions: uint = 0
+    defaultRandomStart: uint = 0
+    defaultRandomDuration: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CriticalityLevelEnum(MatterIntEnum):
@@ -24251,7 +24252,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000096
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -24260,14 +24261,14 @@
                         ClusterObjectFieldDescriptor(Label="loadControlProgram", Tag=0, Type=DemandResponseLoadControl.Structs.LoadControlProgramStruct),
                     ])
 
-            loadControlProgram: 'DemandResponseLoadControl.Structs.LoadControlProgramStruct' = field(default_factory=lambda: DemandResponseLoadControl.Structs.LoadControlProgramStruct())
+            loadControlProgram: DemandResponseLoadControl.Structs.LoadControlProgramStruct = field(default_factory=lambda: DemandResponseLoadControl.Structs.LoadControlProgramStruct())
 
         @dataclass
         class UnregisterLoadControlProgramRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000096
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -24276,14 +24277,14 @@
                         ClusterObjectFieldDescriptor(Label="loadControlProgramID", Tag=0, Type=bytes),
                     ])
 
-            loadControlProgramID: 'bytes' = b""
+            loadControlProgramID: bytes = b""
 
         @dataclass
         class AddLoadControlEventRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000096
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -24292,14 +24293,14 @@
                         ClusterObjectFieldDescriptor(Label="event", Tag=0, Type=DemandResponseLoadControl.Structs.LoadControlEventStruct),
                     ])
 
-            event: 'DemandResponseLoadControl.Structs.LoadControlEventStruct' = field(default_factory=lambda: DemandResponseLoadControl.Structs.LoadControlEventStruct())
+            event: DemandResponseLoadControl.Structs.LoadControlEventStruct = field(default_factory=lambda: DemandResponseLoadControl.Structs.LoadControlEventStruct())
 
         @dataclass
         class RemoveLoadControlEventRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000096
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -24309,15 +24310,15 @@
                         ClusterObjectFieldDescriptor(Label="cancelControl", Tag=1, Type=uint),
                     ])
 
-            eventID: 'bytes' = b""
-            cancelControl: 'uint' = 0
+            eventID: bytes = b""
+            cancelControl: uint = 0
 
         @dataclass
         class ClearLoadControlEventsRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000096
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -24340,7 +24341,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[DemandResponseLoadControl.Structs.LoadControlProgramStruct])
 
-            value: 'typing.List[DemandResponseLoadControl.Structs.LoadControlProgramStruct]' = field(default_factory=lambda: [])
+            value: typing.List[DemandResponseLoadControl.Structs.LoadControlProgramStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class NumberOfLoadControlPrograms(ClusterAttributeDescriptor):
@@ -24356,7 +24357,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Events(ClusterAttributeDescriptor):
@@ -24372,7 +24373,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct])
 
-            value: 'typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct]' = field(default_factory=lambda: [])
+            value: typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class ActiveEvents(ClusterAttributeDescriptor):
@@ -24388,7 +24389,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct])
 
-            value: 'typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct]' = field(default_factory=lambda: [])
+            value: typing.List[DemandResponseLoadControl.Structs.LoadControlEventStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class NumberOfEventsPerProgram(ClusterAttributeDescriptor):
@@ -24404,7 +24405,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class NumberOfTransitions(ClusterAttributeDescriptor):
@@ -24420,7 +24421,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class DefaultRandomStart(ClusterAttributeDescriptor):
@@ -24436,7 +24437,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class DefaultRandomDuration(ClusterAttributeDescriptor):
@@ -24452,7 +24453,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -24468,7 +24469,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -24484,7 +24485,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -24500,7 +24501,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -24516,7 +24517,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -24532,7 +24533,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -24548,7 +24549,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -24577,16 +24578,16 @@
                         ClusterObjectFieldDescriptor(Label="heatingSourceControl", Tag=9, Type=typing.Union[None, Nullable, DemandResponseLoadControl.Structs.HeatingSourceControlStruct]),
                     ])
 
-            eventID: 'bytes' = b""
-            transitionIndex: 'typing.Union[Nullable, uint]' = NullValue
-            status: 'DemandResponseLoadControl.Enums.LoadControlEventStatusEnum' = 0
-            criticality: 'DemandResponseLoadControl.Enums.CriticalityLevelEnum' = 0
-            control: 'uint' = 0
-            temperatureControl: 'typing.Union[None, Nullable, DemandResponseLoadControl.Structs.TemperatureControlStruct]' = None
-            averageLoadControl: 'typing.Union[None, Nullable, DemandResponseLoadControl.Structs.AverageLoadControlStruct]' = None
-            dutyCycleControl: 'typing.Union[None, Nullable, DemandResponseLoadControl.Structs.DutyCycleControlStruct]' = None
-            powerSavingsControl: 'typing.Union[None, Nullable, DemandResponseLoadControl.Structs.PowerSavingsControlStruct]' = None
-            heatingSourceControl: 'typing.Union[None, Nullable, DemandResponseLoadControl.Structs.HeatingSourceControlStruct]' = None
+            eventID: bytes = b""
+            transitionIndex: typing.Union[Nullable, uint] = NullValue
+            status: DemandResponseLoadControl.Enums.LoadControlEventStatusEnum = 0
+            criticality: DemandResponseLoadControl.Enums.CriticalityLevelEnum = 0
+            control: uint = 0
+            temperatureControl: typing.Union[None, Nullable, DemandResponseLoadControl.Structs.TemperatureControlStruct] = None
+            averageLoadControl: typing.Union[None, Nullable, DemandResponseLoadControl.Structs.AverageLoadControlStruct] = None
+            dutyCycleControl: typing.Union[None, Nullable, DemandResponseLoadControl.Structs.DutyCycleControlStruct] = None
+            powerSavingsControl: typing.Union[None, Nullable, DemandResponseLoadControl.Structs.PowerSavingsControlStruct] = None
+            heatingSourceControl: typing.Union[None, Nullable, DemandResponseLoadControl.Structs.HeatingSourceControlStruct] = None
 
 
 @dataclass
@@ -24607,14 +24608,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    messages: 'typing.List[Messages.Structs.MessageStruct]' = None
-    activeMessageIDs: 'typing.List[bytes]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    messages: typing.List[Messages.Structs.MessageStruct] = field(default_factory=lambda: [])
+    activeMessageIDs: typing.List[bytes] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class FutureMessagePreferenceEnum(MatterIntEnum):
@@ -24697,7 +24698,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000097
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -24712,20 +24713,20 @@
                         ClusterObjectFieldDescriptor(Label="responses", Tag=6, Type=typing.Optional[typing.List[Messages.Structs.MessageResponseOptionStruct]]),
                     ])
 
-            messageID: 'bytes' = b""
-            priority: 'Messages.Enums.MessagePriorityEnum' = 0
-            messageControl: 'uint' = 0
-            startTime: 'typing.Union[Nullable, uint]' = NullValue
-            duration: 'typing.Union[Nullable, uint]' = NullValue
-            messageText: 'str' = ""
-            responses: 'typing.Optional[typing.List[Messages.Structs.MessageResponseOptionStruct]]' = None
+            messageID: bytes = b""
+            priority: Messages.Enums.MessagePriorityEnum = 0
+            messageControl: uint = 0
+            startTime: typing.Union[Nullable, uint] = NullValue
+            duration: typing.Union[Nullable, uint] = NullValue
+            messageText: str = ""
+            responses: typing.Optional[typing.List[Messages.Structs.MessageResponseOptionStruct]] = None
 
         @dataclass
         class CancelMessagesRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000097
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -24734,7 +24735,7 @@
                         ClusterObjectFieldDescriptor(Label="messageIDs", Tag=0, Type=typing.List[bytes]),
                     ])
 
-            messageIDs: 'typing.List[bytes]' = field(default_factory=lambda: [])
+            messageIDs: typing.List[bytes] = field(default_factory=lambda: [])
 
     class Attributes:
         @dataclass
@@ -24751,7 +24752,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[Messages.Structs.MessageStruct])
 
-            value: 'typing.List[Messages.Structs.MessageStruct]' = field(default_factory=lambda: [])
+            value: typing.List[Messages.Structs.MessageStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class ActiveMessageIDs(ClusterAttributeDescriptor):
@@ -24767,7 +24768,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[bytes])
 
-            value: 'typing.List[bytes]' = field(default_factory=lambda: [])
+            value: typing.List[bytes] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -24783,7 +24784,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -24799,7 +24800,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -24815,7 +24816,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -24831,7 +24832,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -24847,7 +24848,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -24863,7 +24864,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -24883,7 +24884,7 @@
                         ClusterObjectFieldDescriptor(Label="messageID", Tag=0, Type=bytes),
                     ])
 
-            messageID: 'bytes' = b""
+            messageID: bytes = b""
 
         @dataclass
         class MessagePresented(ClusterEvent):
@@ -24902,7 +24903,7 @@
                         ClusterObjectFieldDescriptor(Label="messageID", Tag=0, Type=bytes),
                     ])
 
-            messageID: 'bytes' = b""
+            messageID: bytes = b""
 
         @dataclass
         class MessageComplete(ClusterEvent):
@@ -24924,10 +24925,10 @@
                         ClusterObjectFieldDescriptor(Label="futureMessagesPreference", Tag=3, Type=typing.Union[Nullable, Messages.Enums.FutureMessagePreferenceEnum]),
                     ])
 
-            messageID: 'bytes' = b""
-            responseID: 'typing.Union[None, Nullable, uint]' = None
-            reply: 'typing.Union[None, Nullable, str]' = None
-            futureMessagesPreference: 'typing.Union[Nullable, Messages.Enums.FutureMessagePreferenceEnum]' = NullValue
+            messageID: bytes = b""
+            responseID: typing.Union[None, Nullable, uint] = None
+            reply: typing.Union[None, Nullable, str] = None
+            futureMessagesPreference: typing.Union[Nullable, Messages.Enums.FutureMessagePreferenceEnum] = NullValue
 
 
 @dataclass
@@ -24954,20 +24955,20 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    ESAType: 'DeviceEnergyManagement.Enums.ESATypeEnum' = None
-    ESACanGenerate: 'bool' = None
-    ESAState: 'DeviceEnergyManagement.Enums.ESAStateEnum' = None
-    absMinPower: 'int' = None
-    absMaxPower: 'int' = None
-    powerAdjustmentCapability: 'typing.Union[None, Nullable, DeviceEnergyManagement.Structs.PowerAdjustCapabilityStruct]' = None
-    forecast: 'typing.Union[None, Nullable, DeviceEnergyManagement.Structs.ForecastStruct]' = None
-    optOutState: 'typing.Optional[DeviceEnergyManagement.Enums.OptOutStateEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    ESAType: DeviceEnergyManagement.Enums.ESATypeEnum = 0
+    ESACanGenerate: bool = False
+    ESAState: DeviceEnergyManagement.Enums.ESAStateEnum = 0
+    absMinPower: int = 0
+    absMaxPower: int = 0
+    powerAdjustmentCapability: typing.Union[None, Nullable, DeviceEnergyManagement.Structs.PowerAdjustCapabilityStruct] = None
+    forecast: typing.Union[None, Nullable, DeviceEnergyManagement.Structs.ForecastStruct] = None
+    optOutState: typing.Optional[DeviceEnergyManagement.Enums.OptOutStateEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AdjustmentCauseEnum(MatterIntEnum):
@@ -25237,7 +25238,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25248,16 +25249,16 @@
                         ClusterObjectFieldDescriptor(Label="cause", Tag=2, Type=DeviceEnergyManagement.Enums.AdjustmentCauseEnum),
                     ])
 
-            power: 'int' = 0
-            duration: 'uint' = 0
-            cause: 'DeviceEnergyManagement.Enums.AdjustmentCauseEnum' = 0
+            power: int = 0
+            duration: uint = 0
+            cause: DeviceEnergyManagement.Enums.AdjustmentCauseEnum = 0
 
         @dataclass
         class CancelPowerAdjustRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25270,7 +25271,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25280,15 +25281,15 @@
                         ClusterObjectFieldDescriptor(Label="cause", Tag=1, Type=DeviceEnergyManagement.Enums.AdjustmentCauseEnum),
                     ])
 
-            requestedStartTime: 'uint' = 0
-            cause: 'DeviceEnergyManagement.Enums.AdjustmentCauseEnum' = 0
+            requestedStartTime: uint = 0
+            cause: DeviceEnergyManagement.Enums.AdjustmentCauseEnum = 0
 
         @dataclass
         class PauseRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25298,15 +25299,15 @@
                         ClusterObjectFieldDescriptor(Label="cause", Tag=1, Type=DeviceEnergyManagement.Enums.AdjustmentCauseEnum),
                     ])
 
-            duration: 'uint' = 0
-            cause: 'DeviceEnergyManagement.Enums.AdjustmentCauseEnum' = 0
+            duration: uint = 0
+            cause: DeviceEnergyManagement.Enums.AdjustmentCauseEnum = 0
 
         @dataclass
         class ResumeRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25319,7 +25320,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25330,16 +25331,16 @@
                         ClusterObjectFieldDescriptor(Label="cause", Tag=2, Type=DeviceEnergyManagement.Enums.AdjustmentCauseEnum),
                     ])
 
-            forecastID: 'uint' = 0
-            slotAdjustments: 'typing.List[DeviceEnergyManagement.Structs.SlotAdjustmentStruct]' = field(default_factory=lambda: [])
-            cause: 'DeviceEnergyManagement.Enums.AdjustmentCauseEnum' = 0
+            forecastID: uint = 0
+            slotAdjustments: typing.List[DeviceEnergyManagement.Structs.SlotAdjustmentStruct] = field(default_factory=lambda: [])
+            cause: DeviceEnergyManagement.Enums.AdjustmentCauseEnum = 0
 
         @dataclass
         class RequestConstraintBasedForecast(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25349,15 +25350,15 @@
                         ClusterObjectFieldDescriptor(Label="cause", Tag=1, Type=DeviceEnergyManagement.Enums.AdjustmentCauseEnum),
                     ])
 
-            constraints: 'typing.List[DeviceEnergyManagement.Structs.ConstraintsStruct]' = field(default_factory=lambda: [])
-            cause: 'DeviceEnergyManagement.Enums.AdjustmentCauseEnum' = 0
+            constraints: typing.List[DeviceEnergyManagement.Structs.ConstraintsStruct] = field(default_factory=lambda: [])
+            cause: DeviceEnergyManagement.Enums.AdjustmentCauseEnum = 0
 
         @dataclass
         class CancelRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000098
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25380,7 +25381,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=DeviceEnergyManagement.Enums.ESATypeEnum)
 
-            value: 'DeviceEnergyManagement.Enums.ESATypeEnum' = 0
+            value: DeviceEnergyManagement.Enums.ESATypeEnum = 0
 
         @dataclass
         class ESACanGenerate(ClusterAttributeDescriptor):
@@ -25396,7 +25397,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class ESAState(ClusterAttributeDescriptor):
@@ -25412,7 +25413,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=DeviceEnergyManagement.Enums.ESAStateEnum)
 
-            value: 'DeviceEnergyManagement.Enums.ESAStateEnum' = 0
+            value: DeviceEnergyManagement.Enums.ESAStateEnum = 0
 
         @dataclass
         class AbsMinPower(ClusterAttributeDescriptor):
@@ -25428,7 +25429,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class AbsMaxPower(ClusterAttributeDescriptor):
@@ -25444,7 +25445,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class PowerAdjustmentCapability(ClusterAttributeDescriptor):
@@ -25460,7 +25461,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, DeviceEnergyManagement.Structs.PowerAdjustCapabilityStruct])
 
-            value: 'typing.Union[None, Nullable, DeviceEnergyManagement.Structs.PowerAdjustCapabilityStruct]' = None
+            value: typing.Union[None, Nullable, DeviceEnergyManagement.Structs.PowerAdjustCapabilityStruct] = None
 
         @dataclass
         class Forecast(ClusterAttributeDescriptor):
@@ -25476,7 +25477,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, DeviceEnergyManagement.Structs.ForecastStruct])
 
-            value: 'typing.Union[None, Nullable, DeviceEnergyManagement.Structs.ForecastStruct]' = None
+            value: typing.Union[None, Nullable, DeviceEnergyManagement.Structs.ForecastStruct] = None
 
         @dataclass
         class OptOutState(ClusterAttributeDescriptor):
@@ -25492,7 +25493,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[DeviceEnergyManagement.Enums.OptOutStateEnum])
 
-            value: 'typing.Optional[DeviceEnergyManagement.Enums.OptOutStateEnum]' = None
+            value: typing.Optional[DeviceEnergyManagement.Enums.OptOutStateEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -25508,7 +25509,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -25524,7 +25525,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -25540,7 +25541,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -25556,7 +25557,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -25572,7 +25573,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -25588,7 +25589,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -25626,9 +25627,9 @@
                         ClusterObjectFieldDescriptor(Label="energyUse", Tag=2, Type=int),
                     ])
 
-            cause: 'DeviceEnergyManagement.Enums.CauseEnum' = 0
-            duration: 'uint' = 0
-            energyUse: 'int' = 0
+            cause: DeviceEnergyManagement.Enums.CauseEnum = 0
+            duration: uint = 0
+            energyUse: int = 0
 
         @dataclass
         class Paused(ClusterEvent):
@@ -25663,7 +25664,7 @@
                         ClusterObjectFieldDescriptor(Label="cause", Tag=0, Type=DeviceEnergyManagement.Enums.CauseEnum),
                     ])
 
-            cause: 'DeviceEnergyManagement.Enums.CauseEnum' = 0
+            cause: DeviceEnergyManagement.Enums.CauseEnum = 0
 
 
 @dataclass
@@ -25705,35 +25706,35 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    state: 'typing.Union[Nullable, EnergyEvse.Enums.StateEnum]' = None
-    supplyState: 'EnergyEvse.Enums.SupplyStateEnum' = None
-    faultState: 'EnergyEvse.Enums.FaultStateEnum' = None
-    chargingEnabledUntil: 'typing.Union[Nullable, uint]' = None
-    dischargingEnabledUntil: 'typing.Union[None, Nullable, uint]' = None
-    circuitCapacity: 'int' = None
-    minimumChargeCurrent: 'int' = None
-    maximumChargeCurrent: 'int' = None
-    maximumDischargeCurrent: 'typing.Optional[int]' = None
-    userMaximumChargeCurrent: 'typing.Optional[int]' = None
-    randomizationDelayWindow: 'typing.Optional[uint]' = None
-    nextChargeStartTime: 'typing.Union[None, Nullable, uint]' = None
-    nextChargeTargetTime: 'typing.Union[None, Nullable, uint]' = None
-    nextChargeRequiredEnergy: 'typing.Union[None, Nullable, int]' = None
-    nextChargeTargetSoC: 'typing.Union[None, Nullable, uint]' = None
-    approximateEVEfficiency: 'typing.Union[None, Nullable, uint]' = None
-    stateOfCharge: 'typing.Union[None, Nullable, uint]' = None
-    batteryCapacity: 'typing.Union[None, Nullable, int]' = None
-    vehicleID: 'typing.Union[None, Nullable, str]' = None
-    sessionID: 'typing.Union[Nullable, uint]' = None
-    sessionDuration: 'typing.Union[Nullable, uint]' = None
-    sessionEnergyCharged: 'typing.Union[Nullable, int]' = None
-    sessionEnergyDischarged: 'typing.Union[None, Nullable, int]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    state: typing.Union[Nullable, EnergyEvse.Enums.StateEnum] = NullValue
+    supplyState: EnergyEvse.Enums.SupplyStateEnum = 0
+    faultState: EnergyEvse.Enums.FaultStateEnum = 0
+    chargingEnabledUntil: typing.Union[Nullable, uint] = NullValue
+    dischargingEnabledUntil: typing.Union[None, Nullable, uint] = None
+    circuitCapacity: int = 0
+    minimumChargeCurrent: int = 0
+    maximumChargeCurrent: int = 0
+    maximumDischargeCurrent: typing.Optional[int] = None
+    userMaximumChargeCurrent: typing.Optional[int] = None
+    randomizationDelayWindow: typing.Optional[uint] = None
+    nextChargeStartTime: typing.Union[None, Nullable, uint] = None
+    nextChargeTargetTime: typing.Union[None, Nullable, uint] = None
+    nextChargeRequiredEnergy: typing.Union[None, Nullable, int] = None
+    nextChargeTargetSoC: typing.Union[None, Nullable, uint] = None
+    approximateEVEfficiency: typing.Union[None, Nullable, uint] = None
+    stateOfCharge: typing.Union[None, Nullable, uint] = None
+    batteryCapacity: typing.Union[None, Nullable, int] = None
+    vehicleID: typing.Union[None, Nullable, str] = None
+    sessionID: typing.Union[Nullable, uint] = NullValue
+    sessionDuration: typing.Union[Nullable, uint] = NullValue
+    sessionEnergyCharged: typing.Union[Nullable, int] = NullValue
+    sessionEnergyDischarged: typing.Union[None, Nullable, int] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class EnergyTransferStoppedReasonEnum(MatterIntEnum):
@@ -25849,7 +25850,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000099
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25858,14 +25859,14 @@
                         ClusterObjectFieldDescriptor(Label="chargingTargetSchedules", Tag=0, Type=typing.List[EnergyEvse.Structs.ChargingTargetScheduleStruct]),
                     ])
 
-            chargingTargetSchedules: 'typing.List[EnergyEvse.Structs.ChargingTargetScheduleStruct]' = field(default_factory=lambda: [])
+            chargingTargetSchedules: typing.List[EnergyEvse.Structs.ChargingTargetScheduleStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class Disable(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000099
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25882,7 +25883,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000099
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25897,16 +25898,16 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            chargingEnabledUntil: 'typing.Union[Nullable, uint]' = NullValue
-            minimumChargeCurrent: 'int' = 0
-            maximumChargeCurrent: 'int' = 0
+            chargingEnabledUntil: typing.Union[Nullable, uint] = NullValue
+            minimumChargeCurrent: int = 0
+            maximumChargeCurrent: int = 0
 
         @dataclass
         class EnableDischarging(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000099
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25920,15 +25921,15 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            dischargingEnabledUntil: 'typing.Union[Nullable, uint]' = NullValue
-            maximumDischargeCurrent: 'int' = 0
+            dischargingEnabledUntil: typing.Union[Nullable, uint] = NullValue
+            maximumDischargeCurrent: int = 0
 
         @dataclass
         class StartDiagnostics(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000099
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25945,7 +25946,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000099
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -25958,7 +25959,7 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            chargingTargetSchedules: 'typing.List[EnergyEvse.Structs.ChargingTargetScheduleStruct]' = field(default_factory=lambda: [])
+            chargingTargetSchedules: typing.List[EnergyEvse.Structs.ChargingTargetScheduleStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GetTargets(ClusterCommand):
@@ -25982,7 +25983,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000099
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -26009,7 +26010,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, EnergyEvse.Enums.StateEnum])
 
-            value: 'typing.Union[Nullable, EnergyEvse.Enums.StateEnum]' = NullValue
+            value: typing.Union[Nullable, EnergyEvse.Enums.StateEnum] = NullValue
 
         @dataclass
         class SupplyState(ClusterAttributeDescriptor):
@@ -26025,7 +26026,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=EnergyEvse.Enums.SupplyStateEnum)
 
-            value: 'EnergyEvse.Enums.SupplyStateEnum' = 0
+            value: EnergyEvse.Enums.SupplyStateEnum = 0
 
         @dataclass
         class FaultState(ClusterAttributeDescriptor):
@@ -26041,7 +26042,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=EnergyEvse.Enums.FaultStateEnum)
 
-            value: 'EnergyEvse.Enums.FaultStateEnum' = 0
+            value: EnergyEvse.Enums.FaultStateEnum = 0
 
         @dataclass
         class ChargingEnabledUntil(ClusterAttributeDescriptor):
@@ -26057,7 +26058,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class DischargingEnabledUntil(ClusterAttributeDescriptor):
@@ -26073,7 +26074,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class CircuitCapacity(ClusterAttributeDescriptor):
@@ -26089,7 +26090,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class MinimumChargeCurrent(ClusterAttributeDescriptor):
@@ -26105,7 +26106,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class MaximumChargeCurrent(ClusterAttributeDescriptor):
@@ -26121,7 +26122,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class MaximumDischargeCurrent(ClusterAttributeDescriptor):
@@ -26137,7 +26138,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class UserMaximumChargeCurrent(ClusterAttributeDescriptor):
@@ -26153,7 +26154,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class RandomizationDelayWindow(ClusterAttributeDescriptor):
@@ -26169,7 +26170,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NextChargeStartTime(ClusterAttributeDescriptor):
@@ -26185,7 +26186,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class NextChargeTargetTime(ClusterAttributeDescriptor):
@@ -26201,7 +26202,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class NextChargeRequiredEnergy(ClusterAttributeDescriptor):
@@ -26217,7 +26218,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class NextChargeTargetSoC(ClusterAttributeDescriptor):
@@ -26233,7 +26234,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ApproximateEVEfficiency(ClusterAttributeDescriptor):
@@ -26249,7 +26250,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class StateOfCharge(ClusterAttributeDescriptor):
@@ -26265,7 +26266,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class BatteryCapacity(ClusterAttributeDescriptor):
@@ -26281,7 +26282,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class VehicleID(ClusterAttributeDescriptor):
@@ -26297,7 +26298,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, str])
 
-            value: 'typing.Union[None, Nullable, str]' = None
+            value: typing.Union[None, Nullable, str] = None
 
         @dataclass
         class SessionID(ClusterAttributeDescriptor):
@@ -26313,7 +26314,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class SessionDuration(ClusterAttributeDescriptor):
@@ -26329,7 +26330,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class SessionEnergyCharged(ClusterAttributeDescriptor):
@@ -26345,7 +26346,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class SessionEnergyDischarged(ClusterAttributeDescriptor):
@@ -26361,7 +26362,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -26377,7 +26378,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -26393,7 +26394,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -26409,7 +26410,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -26425,7 +26426,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -26441,7 +26442,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -26457,7 +26458,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -26477,7 +26478,7 @@
                         ClusterObjectFieldDescriptor(Label="sessionID", Tag=0, Type=uint),
                     ])
 
-            sessionID: 'uint' = 0
+            sessionID: uint = 0
 
         @dataclass
         class EVNotDetected(ClusterEvent):
@@ -26500,11 +26501,11 @@
                         ClusterObjectFieldDescriptor(Label="sessionEnergyDischarged", Tag=4, Type=typing.Optional[int]),
                     ])
 
-            sessionID: 'uint' = 0
-            state: 'EnergyEvse.Enums.StateEnum' = 0
-            sessionDuration: 'uint' = 0
-            sessionEnergyCharged: 'int' = 0
-            sessionEnergyDischarged: 'typing.Optional[int]' = None
+            sessionID: uint = 0
+            state: EnergyEvse.Enums.StateEnum = 0
+            sessionDuration: uint = 0
+            sessionEnergyCharged: int = 0
+            sessionEnergyDischarged: typing.Optional[int] = None
 
         @dataclass
         class EnergyTransferStarted(ClusterEvent):
@@ -26526,10 +26527,10 @@
                         ClusterObjectFieldDescriptor(Label="maximumDischargeCurrent", Tag=3, Type=typing.Optional[int]),
                     ])
 
-            sessionID: 'uint' = 0
-            state: 'EnergyEvse.Enums.StateEnum' = 0
-            maximumCurrent: 'int' = 0
-            maximumDischargeCurrent: 'typing.Optional[int]' = None
+            sessionID: uint = 0
+            state: EnergyEvse.Enums.StateEnum = 0
+            maximumCurrent: int = 0
+            maximumDischargeCurrent: typing.Optional[int] = None
 
         @dataclass
         class EnergyTransferStopped(ClusterEvent):
@@ -26552,11 +26553,11 @@
                         ClusterObjectFieldDescriptor(Label="energyDischarged", Tag=5, Type=typing.Optional[int]),
                     ])
 
-            sessionID: 'uint' = 0
-            state: 'EnergyEvse.Enums.StateEnum' = 0
-            reason: 'EnergyEvse.Enums.EnergyTransferStoppedReasonEnum' = 0
-            energyTransferred: 'int' = 0
-            energyDischarged: 'typing.Optional[int]' = None
+            sessionID: uint = 0
+            state: EnergyEvse.Enums.StateEnum = 0
+            reason: EnergyEvse.Enums.EnergyTransferStoppedReasonEnum = 0
+            energyTransferred: int = 0
+            energyDischarged: typing.Optional[int] = None
 
         @dataclass
         class Fault(ClusterEvent):
@@ -26578,10 +26579,10 @@
                         ClusterObjectFieldDescriptor(Label="faultStateCurrentState", Tag=4, Type=EnergyEvse.Enums.FaultStateEnum),
                     ])
 
-            sessionID: 'typing.Union[Nullable, uint]' = NullValue
-            state: 'EnergyEvse.Enums.StateEnum' = 0
-            faultStatePreviousState: 'EnergyEvse.Enums.FaultStateEnum' = 0
-            faultStateCurrentState: 'EnergyEvse.Enums.FaultStateEnum' = 0
+            sessionID: typing.Union[Nullable, uint] = NullValue
+            state: EnergyEvse.Enums.StateEnum = 0
+            faultStatePreviousState: EnergyEvse.Enums.FaultStateEnum = 0
+            faultStateCurrentState: EnergyEvse.Enums.FaultStateEnum = 0
 
         @dataclass
         class Rfid(ClusterEvent):
@@ -26600,7 +26601,7 @@
                         ClusterObjectFieldDescriptor(Label="uid", Tag=0, Type=bytes),
                     ])
 
-            uid: 'bytes' = b""
+            uid: bytes = b""
 
 
 @dataclass
@@ -26624,17 +26625,17 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    energyBalances: 'typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]]' = None
-    currentEnergyBalance: 'typing.Optional[uint]' = None
-    energyPriorities: 'typing.Optional[typing.List[EnergyPreference.Enums.EnergyPriorityEnum]]' = None
-    lowPowerModeSensitivities: 'typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]]' = None
-    currentLowPowerModeSensitivity: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    energyBalances: typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]] = None
+    currentEnergyBalance: typing.Optional[uint] = None
+    energyPriorities: typing.Optional[typing.List[EnergyPreference.Enums.EnergyPriorityEnum]] = None
+    lowPowerModeSensitivities: typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]] = None
+    currentLowPowerModeSensitivity: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class EnergyPriorityEnum(MatterIntEnum):
@@ -26682,7 +26683,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]])
 
-            value: 'typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]]' = None
+            value: typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]] = None
 
         @dataclass
         class CurrentEnergyBalance(ClusterAttributeDescriptor):
@@ -26698,7 +26699,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class EnergyPriorities(ClusterAttributeDescriptor):
@@ -26714,7 +26715,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[EnergyPreference.Enums.EnergyPriorityEnum]])
 
-            value: 'typing.Optional[typing.List[EnergyPreference.Enums.EnergyPriorityEnum]]' = None
+            value: typing.Optional[typing.List[EnergyPreference.Enums.EnergyPriorityEnum]] = None
 
         @dataclass
         class LowPowerModeSensitivities(ClusterAttributeDescriptor):
@@ -26730,7 +26731,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]])
 
-            value: 'typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]]' = None
+            value: typing.Optional[typing.List[EnergyPreference.Structs.BalanceStruct]] = None
 
         @dataclass
         class CurrentLowPowerModeSensitivity(ClusterAttributeDescriptor):
@@ -26746,7 +26747,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -26762,7 +26763,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -26778,7 +26779,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -26794,7 +26795,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -26810,7 +26811,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -26826,7 +26827,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -26842,7 +26843,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -26863,14 +26864,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    availableEndpoints: 'typing.Optional[typing.List[uint]]' = None
-    activeEndpoints: 'typing.Optional[typing.List[uint]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    availableEndpoints: typing.Optional[typing.List[uint]] = None
+    activeEndpoints: typing.Optional[typing.List[uint]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -26894,7 +26895,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[uint]])
 
-            value: 'typing.Optional[typing.List[uint]]' = None
+            value: typing.Optional[typing.List[uint]] = None
 
         @dataclass
         class ActiveEndpoints(ClusterAttributeDescriptor):
@@ -26910,7 +26911,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[uint]])
 
-            value: 'typing.Optional[typing.List[uint]]' = None
+            value: typing.Optional[typing.List[uint]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -26926,7 +26927,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -26942,7 +26943,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -26958,7 +26959,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -26974,7 +26975,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -26990,7 +26991,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -27006,7 +27007,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -27029,16 +27030,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[EnergyEvseMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[EnergyEvseMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -27109,14 +27110,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000009D
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -27126,8 +27127,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -27144,7 +27145,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[EnergyEvseMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[EnergyEvseMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[EnergyEvseMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -27160,7 +27161,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -27176,7 +27177,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -27192,7 +27193,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -27208,7 +27209,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -27224,7 +27225,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -27240,7 +27241,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -27256,7 +27257,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -27272,7 +27273,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -27288,7 +27289,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -27311,16 +27312,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[WaterHeaterMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[WaterHeaterMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -27391,14 +27392,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000009E
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -27408,8 +27409,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -27426,7 +27427,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[WaterHeaterMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[WaterHeaterMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[WaterHeaterMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -27442,7 +27443,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -27458,7 +27459,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -27474,7 +27475,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -27490,7 +27491,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -27506,7 +27507,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -27522,7 +27523,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -27538,7 +27539,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -27554,7 +27555,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -27570,7 +27571,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -27593,16 +27594,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedModes: 'typing.List[DeviceEnergyManagementMode.Structs.ModeOptionStruct]' = None
-    currentMode: 'uint' = None
-    startUpMode: 'typing.Union[None, Nullable, uint]' = None
-    onMode: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedModes: typing.List[DeviceEnergyManagementMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
+    currentMode: uint = 0
+    startUpMode: typing.Union[None, Nullable, uint] = None
+    onMode: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ModeTag(MatterIntEnum):
@@ -27674,14 +27675,14 @@
                         ClusterObjectFieldDescriptor(Label="newMode", Tag=0, Type=uint),
                     ])
 
-            newMode: 'uint' = 0
+            newMode: uint = 0
 
         @dataclass
         class ChangeToModeResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000009F
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -27691,8 +27692,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'uint' = 0
-            statusText: 'typing.Optional[str]' = None
+            status: uint = 0
+            statusText: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -27709,7 +27710,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[DeviceEnergyManagementMode.Structs.ModeOptionStruct])
 
-            value: 'typing.List[DeviceEnergyManagementMode.Structs.ModeOptionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[DeviceEnergyManagementMode.Structs.ModeOptionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentMode(ClusterAttributeDescriptor):
@@ -27725,7 +27726,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class StartUpMode(ClusterAttributeDescriptor):
@@ -27741,7 +27742,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OnMode(ClusterAttributeDescriptor):
@@ -27757,7 +27758,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -27773,7 +27774,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -27789,7 +27790,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -27805,7 +27806,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -27821,7 +27822,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -27837,7 +27838,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -27853,7 +27854,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -27917,57 +27918,57 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    lockState: 'typing.Union[Nullable, DoorLock.Enums.DlLockState]' = None
-    lockType: 'DoorLock.Enums.DlLockType' = None
-    actuatorEnabled: 'bool' = None
-    doorState: 'typing.Union[None, Nullable, DoorLock.Enums.DoorStateEnum]' = None
-    doorOpenEvents: 'typing.Optional[uint]' = None
-    doorClosedEvents: 'typing.Optional[uint]' = None
-    openPeriod: 'typing.Optional[uint]' = None
-    numberOfTotalUsersSupported: 'typing.Optional[uint]' = None
-    numberOfPINUsersSupported: 'typing.Optional[uint]' = None
-    numberOfRFIDUsersSupported: 'typing.Optional[uint]' = None
-    numberOfWeekDaySchedulesSupportedPerUser: 'typing.Optional[uint]' = None
-    numberOfYearDaySchedulesSupportedPerUser: 'typing.Optional[uint]' = None
-    numberOfHolidaySchedulesSupported: 'typing.Optional[uint]' = None
-    maxPINCodeLength: 'typing.Optional[uint]' = None
-    minPINCodeLength: 'typing.Optional[uint]' = None
-    maxRFIDCodeLength: 'typing.Optional[uint]' = None
-    minRFIDCodeLength: 'typing.Optional[uint]' = None
-    credentialRulesSupport: 'typing.Optional[uint]' = None
-    numberOfCredentialsSupportedPerUser: 'typing.Optional[uint]' = None
-    language: 'typing.Optional[str]' = None
-    LEDSettings: 'typing.Optional[uint]' = None
-    autoRelockTime: 'typing.Optional[uint]' = None
-    soundVolume: 'typing.Optional[uint]' = None
-    operatingMode: 'DoorLock.Enums.OperatingModeEnum' = None
-    supportedOperatingModes: 'uint' = None
-    defaultConfigurationRegister: 'typing.Optional[uint]' = None
-    enableLocalProgramming: 'typing.Optional[bool]' = None
-    enableOneTouchLocking: 'typing.Optional[bool]' = None
-    enableInsideStatusLED: 'typing.Optional[bool]' = None
-    enablePrivacyModeButton: 'typing.Optional[bool]' = None
-    localProgrammingFeatures: 'typing.Optional[uint]' = None
-    wrongCodeEntryLimit: 'typing.Optional[uint]' = None
-    userCodeTemporaryDisableTime: 'typing.Optional[uint]' = None
-    sendPINOverTheAir: 'typing.Optional[bool]' = None
-    requirePINforRemoteOperation: 'typing.Optional[bool]' = None
-    expiringUserTimeout: 'typing.Optional[uint]' = None
-    aliroReaderVerificationKey: 'typing.Union[None, Nullable, bytes]' = None
-    aliroReaderGroupIdentifier: 'typing.Union[None, Nullable, bytes]' = None
-    aliroReaderGroupSubIdentifier: 'typing.Optional[bytes]' = None
-    aliroExpeditedTransactionSupportedProtocolVersions: 'typing.Optional[typing.List[bytes]]' = None
-    aliroGroupResolvingKey: 'typing.Union[None, Nullable, bytes]' = None
-    aliroSupportedBLEUWBProtocolVersions: 'typing.Optional[typing.List[bytes]]' = None
-    aliroBLEAdvertisingVersion: 'typing.Optional[uint]' = None
-    numberOfAliroCredentialIssuerKeysSupported: 'typing.Optional[uint]' = None
-    numberOfAliroEndpointKeysSupported: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    lockState: typing.Union[Nullable, DoorLock.Enums.DlLockState] = NullValue
+    lockType: DoorLock.Enums.DlLockType = 0
+    actuatorEnabled: bool = False
+    doorState: typing.Union[None, Nullable, DoorLock.Enums.DoorStateEnum] = None
+    doorOpenEvents: typing.Optional[uint] = None
+    doorClosedEvents: typing.Optional[uint] = None
+    openPeriod: typing.Optional[uint] = None
+    numberOfTotalUsersSupported: typing.Optional[uint] = None
+    numberOfPINUsersSupported: typing.Optional[uint] = None
+    numberOfRFIDUsersSupported: typing.Optional[uint] = None
+    numberOfWeekDaySchedulesSupportedPerUser: typing.Optional[uint] = None
+    numberOfYearDaySchedulesSupportedPerUser: typing.Optional[uint] = None
+    numberOfHolidaySchedulesSupported: typing.Optional[uint] = None
+    maxPINCodeLength: typing.Optional[uint] = None
+    minPINCodeLength: typing.Optional[uint] = None
+    maxRFIDCodeLength: typing.Optional[uint] = None
+    minRFIDCodeLength: typing.Optional[uint] = None
+    credentialRulesSupport: typing.Optional[uint] = None
+    numberOfCredentialsSupportedPerUser: typing.Optional[uint] = None
+    language: typing.Optional[str] = None
+    LEDSettings: typing.Optional[uint] = None
+    autoRelockTime: typing.Optional[uint] = None
+    soundVolume: typing.Optional[uint] = None
+    operatingMode: DoorLock.Enums.OperatingModeEnum = 0
+    supportedOperatingModes: uint = 0
+    defaultConfigurationRegister: typing.Optional[uint] = None
+    enableLocalProgramming: typing.Optional[bool] = None
+    enableOneTouchLocking: typing.Optional[bool] = None
+    enableInsideStatusLED: typing.Optional[bool] = None
+    enablePrivacyModeButton: typing.Optional[bool] = None
+    localProgrammingFeatures: typing.Optional[uint] = None
+    wrongCodeEntryLimit: typing.Optional[uint] = None
+    userCodeTemporaryDisableTime: typing.Optional[uint] = None
+    sendPINOverTheAir: typing.Optional[bool] = None
+    requirePINforRemoteOperation: typing.Optional[bool] = None
+    expiringUserTimeout: typing.Optional[uint] = None
+    aliroReaderVerificationKey: typing.Union[None, Nullable, bytes] = None
+    aliroReaderGroupIdentifier: typing.Union[None, Nullable, bytes] = None
+    aliroReaderGroupSubIdentifier: typing.Optional[bytes] = None
+    aliroExpeditedTransactionSupportedProtocolVersions: typing.Optional[typing.List[bytes]] = None
+    aliroGroupResolvingKey: typing.Union[None, Nullable, bytes] = None
+    aliroSupportedBLEUWBProtocolVersions: typing.Optional[typing.List[bytes]] = None
+    aliroBLEAdvertisingVersion: typing.Optional[uint] = None
+    numberOfAliroCredentialIssuerKeysSupported: typing.Optional[uint] = None
+    numberOfAliroEndpointKeysSupported: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AlarmCodeEnum(MatterIntEnum):
@@ -28400,7 +28401,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28413,14 +28414,14 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            PINCode: 'typing.Optional[bytes]' = None
+            PINCode: typing.Optional[bytes] = None
 
         @dataclass
         class UnlockDoor(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28433,14 +28434,14 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            PINCode: 'typing.Optional[bytes]' = None
+            PINCode: typing.Optional[bytes] = None
 
         @dataclass
         class UnlockWithTimeout(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28454,15 +28455,15 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            timeout: 'uint' = 0
-            PINCode: 'typing.Optional[bytes]' = None
+            timeout: uint = 0
+            PINCode: typing.Optional[bytes] = None
 
         @dataclass
         class SetWeekDaySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000000B
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28477,13 +28478,13 @@
                         ClusterObjectFieldDescriptor(Label="endMinute", Tag=6, Type=uint),
                     ])
 
-            weekDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
-            daysMask: 'uint' = 0
-            startHour: 'uint' = 0
-            startMinute: 'uint' = 0
-            endHour: 'uint' = 0
-            endMinute: 'uint' = 0
+            weekDayIndex: uint = 0
+            userIndex: uint = 0
+            daysMask: uint = 0
+            startHour: uint = 0
+            startMinute: uint = 0
+            endHour: uint = 0
+            endMinute: uint = 0
 
         @dataclass
         class GetWeekDaySchedule(ClusterCommand):
@@ -28500,15 +28501,15 @@
                         ClusterObjectFieldDescriptor(Label="userIndex", Tag=1, Type=uint),
                     ])
 
-            weekDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
+            weekDayIndex: uint = 0
+            userIndex: uint = 0
 
         @dataclass
         class GetWeekDayScheduleResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000000C
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28524,21 +28525,21 @@
                         ClusterObjectFieldDescriptor(Label="endMinute", Tag=7, Type=typing.Optional[uint]),
                     ])
 
-            weekDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
-            status: 'DoorLock.Enums.DlStatus' = 0
-            daysMask: 'typing.Optional[uint]' = None
-            startHour: 'typing.Optional[uint]' = None
-            startMinute: 'typing.Optional[uint]' = None
-            endHour: 'typing.Optional[uint]' = None
-            endMinute: 'typing.Optional[uint]' = None
+            weekDayIndex: uint = 0
+            userIndex: uint = 0
+            status: DoorLock.Enums.DlStatus = 0
+            daysMask: typing.Optional[uint] = None
+            startHour: typing.Optional[uint] = None
+            startMinute: typing.Optional[uint] = None
+            endHour: typing.Optional[uint] = None
+            endMinute: typing.Optional[uint] = None
 
         @dataclass
         class ClearWeekDaySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000000D
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28548,15 +28549,15 @@
                         ClusterObjectFieldDescriptor(Label="userIndex", Tag=1, Type=uint),
                     ])
 
-            weekDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
+            weekDayIndex: uint = 0
+            userIndex: uint = 0
 
         @dataclass
         class SetYearDaySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000000E
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28568,10 +28569,10 @@
                         ClusterObjectFieldDescriptor(Label="localEndTime", Tag=3, Type=uint),
                     ])
 
-            yearDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
-            localStartTime: 'uint' = 0
-            localEndTime: 'uint' = 0
+            yearDayIndex: uint = 0
+            userIndex: uint = 0
+            localStartTime: uint = 0
+            localEndTime: uint = 0
 
         @dataclass
         class GetYearDaySchedule(ClusterCommand):
@@ -28588,15 +28589,15 @@
                         ClusterObjectFieldDescriptor(Label="userIndex", Tag=1, Type=uint),
                     ])
 
-            yearDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
+            yearDayIndex: uint = 0
+            userIndex: uint = 0
 
         @dataclass
         class GetYearDayScheduleResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000000F
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28609,18 +28610,18 @@
                         ClusterObjectFieldDescriptor(Label="localEndTime", Tag=4, Type=typing.Optional[uint]),
                     ])
 
-            yearDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
-            status: 'DoorLock.Enums.DlStatus' = 0
-            localStartTime: 'typing.Optional[uint]' = None
-            localEndTime: 'typing.Optional[uint]' = None
+            yearDayIndex: uint = 0
+            userIndex: uint = 0
+            status: DoorLock.Enums.DlStatus = 0
+            localStartTime: typing.Optional[uint] = None
+            localEndTime: typing.Optional[uint] = None
 
         @dataclass
         class ClearYearDaySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000010
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28630,15 +28631,15 @@
                         ClusterObjectFieldDescriptor(Label="userIndex", Tag=1, Type=uint),
                     ])
 
-            yearDayIndex: 'uint' = 0
-            userIndex: 'uint' = 0
+            yearDayIndex: uint = 0
+            userIndex: uint = 0
 
         @dataclass
         class SetHolidaySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000011
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28650,10 +28651,10 @@
                         ClusterObjectFieldDescriptor(Label="operatingMode", Tag=3, Type=DoorLock.Enums.OperatingModeEnum),
                     ])
 
-            holidayIndex: 'uint' = 0
-            localStartTime: 'uint' = 0
-            localEndTime: 'uint' = 0
-            operatingMode: 'DoorLock.Enums.OperatingModeEnum' = 0
+            holidayIndex: uint = 0
+            localStartTime: uint = 0
+            localEndTime: uint = 0
+            operatingMode: DoorLock.Enums.OperatingModeEnum = 0
 
         @dataclass
         class GetHolidaySchedule(ClusterCommand):
@@ -28669,14 +28670,14 @@
                         ClusterObjectFieldDescriptor(Label="holidayIndex", Tag=0, Type=uint),
                     ])
 
-            holidayIndex: 'uint' = 0
+            holidayIndex: uint = 0
 
         @dataclass
         class GetHolidayScheduleResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000012
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28689,18 +28690,18 @@
                         ClusterObjectFieldDescriptor(Label="operatingMode", Tag=4, Type=typing.Optional[DoorLock.Enums.OperatingModeEnum]),
                     ])
 
-            holidayIndex: 'uint' = 0
-            status: 'DoorLock.Enums.DlStatus' = 0
-            localStartTime: 'typing.Optional[uint]' = None
-            localEndTime: 'typing.Optional[uint]' = None
-            operatingMode: 'typing.Optional[DoorLock.Enums.OperatingModeEnum]' = None
+            holidayIndex: uint = 0
+            status: DoorLock.Enums.DlStatus = 0
+            localStartTime: typing.Optional[uint] = None
+            localEndTime: typing.Optional[uint] = None
+            operatingMode: typing.Optional[DoorLock.Enums.OperatingModeEnum] = None
 
         @dataclass
         class ClearHolidaySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000013
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28709,14 +28710,14 @@
                         ClusterObjectFieldDescriptor(Label="holidayIndex", Tag=0, Type=uint),
                     ])
 
-            holidayIndex: 'uint' = 0
+            holidayIndex: uint = 0
 
         @dataclass
         class SetUser(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000001A
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28735,13 +28736,13 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            operationType: 'DoorLock.Enums.DataOperationTypeEnum' = 0
-            userIndex: 'uint' = 0
-            userName: 'typing.Union[Nullable, str]' = NullValue
-            userUniqueID: 'typing.Union[Nullable, uint]' = NullValue
-            userStatus: 'typing.Union[Nullable, DoorLock.Enums.UserStatusEnum]' = NullValue
-            userType: 'typing.Union[Nullable, DoorLock.Enums.UserTypeEnum]' = NullValue
-            credentialRule: 'typing.Union[Nullable, DoorLock.Enums.CredentialRuleEnum]' = NullValue
+            operationType: DoorLock.Enums.DataOperationTypeEnum = 0
+            userIndex: uint = 0
+            userName: typing.Union[Nullable, str] = NullValue
+            userUniqueID: typing.Union[Nullable, uint] = NullValue
+            userStatus: typing.Union[Nullable, DoorLock.Enums.UserStatusEnum] = NullValue
+            userType: typing.Union[Nullable, DoorLock.Enums.UserTypeEnum] = NullValue
+            credentialRule: typing.Union[Nullable, DoorLock.Enums.CredentialRuleEnum] = NullValue
 
         @dataclass
         class GetUser(ClusterCommand):
@@ -28757,14 +28758,14 @@
                         ClusterObjectFieldDescriptor(Label="userIndex", Tag=0, Type=uint),
                     ])
 
-            userIndex: 'uint' = 0
+            userIndex: uint = 0
 
         @dataclass
         class GetUserResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000001C
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28782,23 +28783,23 @@
                         ClusterObjectFieldDescriptor(Label="nextUserIndex", Tag=9, Type=typing.Union[Nullable, uint]),
                     ])
 
-            userIndex: 'uint' = 0
-            userName: 'typing.Union[Nullable, str]' = NullValue
-            userUniqueID: 'typing.Union[Nullable, uint]' = NullValue
-            userStatus: 'typing.Union[Nullable, DoorLock.Enums.UserStatusEnum]' = NullValue
-            userType: 'typing.Union[Nullable, DoorLock.Enums.UserTypeEnum]' = NullValue
-            credentialRule: 'typing.Union[Nullable, DoorLock.Enums.CredentialRuleEnum]' = NullValue
-            credentials: 'typing.Union[Nullable, typing.List[DoorLock.Structs.CredentialStruct]]' = NullValue
-            creatorFabricIndex: 'typing.Union[Nullable, uint]' = NullValue
-            lastModifiedFabricIndex: 'typing.Union[Nullable, uint]' = NullValue
-            nextUserIndex: 'typing.Union[Nullable, uint]' = NullValue
+            userIndex: uint = 0
+            userName: typing.Union[Nullable, str] = NullValue
+            userUniqueID: typing.Union[Nullable, uint] = NullValue
+            userStatus: typing.Union[Nullable, DoorLock.Enums.UserStatusEnum] = NullValue
+            userType: typing.Union[Nullable, DoorLock.Enums.UserTypeEnum] = NullValue
+            credentialRule: typing.Union[Nullable, DoorLock.Enums.CredentialRuleEnum] = NullValue
+            credentials: typing.Union[Nullable, typing.List[DoorLock.Structs.CredentialStruct]] = NullValue
+            creatorFabricIndex: typing.Union[Nullable, uint] = NullValue
+            lastModifiedFabricIndex: typing.Union[Nullable, uint] = NullValue
+            nextUserIndex: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class ClearUser(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x0000001D
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28811,7 +28812,7 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            userIndex: 'uint' = 0
+            userIndex: uint = 0
 
         @dataclass
         class SetCredential(ClusterCommand):
@@ -28836,19 +28837,19 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            operationType: 'DoorLock.Enums.DataOperationTypeEnum' = 0
-            credential: 'DoorLock.Structs.CredentialStruct' = field(default_factory=lambda: DoorLock.Structs.CredentialStruct())
-            credentialData: 'bytes' = b""
-            userIndex: 'typing.Union[Nullable, uint]' = NullValue
-            userStatus: 'typing.Union[Nullable, DoorLock.Enums.UserStatusEnum]' = NullValue
-            userType: 'typing.Union[Nullable, DoorLock.Enums.UserTypeEnum]' = NullValue
+            operationType: DoorLock.Enums.DataOperationTypeEnum = 0
+            credential: DoorLock.Structs.CredentialStruct = field(default_factory=lambda: DoorLock.Structs.CredentialStruct())
+            credentialData: bytes = b""
+            userIndex: typing.Union[Nullable, uint] = NullValue
+            userStatus: typing.Union[Nullable, DoorLock.Enums.UserStatusEnum] = NullValue
+            userType: typing.Union[Nullable, DoorLock.Enums.UserTypeEnum] = NullValue
 
         @dataclass
         class SetCredentialResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000023
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28859,9 +28860,9 @@
                         ClusterObjectFieldDescriptor(Label="nextCredentialIndex", Tag=2, Type=typing.Union[Nullable, uint]),
                     ])
 
-            status: 'DoorLock.Enums.DlStatus' = 0
-            userIndex: 'typing.Union[Nullable, uint]' = NullValue
-            nextCredentialIndex: 'typing.Union[Nullable, uint]' = NullValue
+            status: DoorLock.Enums.DlStatus = 0
+            userIndex: typing.Union[Nullable, uint] = NullValue
+            nextCredentialIndex: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class GetCredentialStatus(ClusterCommand):
@@ -28877,14 +28878,14 @@
                         ClusterObjectFieldDescriptor(Label="credential", Tag=0, Type=DoorLock.Structs.CredentialStruct),
                     ])
 
-            credential: 'DoorLock.Structs.CredentialStruct' = field(default_factory=lambda: DoorLock.Structs.CredentialStruct())
+            credential: DoorLock.Structs.CredentialStruct = field(default_factory=lambda: DoorLock.Structs.CredentialStruct())
 
         @dataclass
         class GetCredentialStatusResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000025
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28898,19 +28899,19 @@
                         ClusterObjectFieldDescriptor(Label="credentialData", Tag=5, Type=typing.Union[None, Nullable, bytes]),
                     ])
 
-            credentialExists: 'bool' = False
-            userIndex: 'typing.Union[Nullable, uint]' = NullValue
-            creatorFabricIndex: 'typing.Union[Nullable, uint]' = NullValue
-            lastModifiedFabricIndex: 'typing.Union[Nullable, uint]' = NullValue
-            nextCredentialIndex: 'typing.Union[Nullable, uint]' = NullValue
-            credentialData: 'typing.Union[None, Nullable, bytes]' = None
+            credentialExists: bool = False
+            userIndex: typing.Union[Nullable, uint] = NullValue
+            creatorFabricIndex: typing.Union[Nullable, uint] = NullValue
+            lastModifiedFabricIndex: typing.Union[Nullable, uint] = NullValue
+            nextCredentialIndex: typing.Union[Nullable, uint] = NullValue
+            credentialData: typing.Union[None, Nullable, bytes] = None
 
         @dataclass
         class ClearCredential(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000026
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28923,14 +28924,14 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            credential: 'typing.Union[Nullable, DoorLock.Structs.CredentialStruct]' = NullValue
+            credential: typing.Union[Nullable, DoorLock.Structs.CredentialStruct] = NullValue
 
         @dataclass
         class UnboltDoor(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000027
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28943,14 +28944,14 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            PINCode: 'typing.Optional[bytes]' = None
+            PINCode: typing.Optional[bytes] = None
 
         @dataclass
         class SetAliroReaderConfig(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000028
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -28966,17 +28967,17 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            signingKey: 'bytes' = b""
-            verificationKey: 'bytes' = b""
-            groupIdentifier: 'bytes' = b""
-            groupResolvingKey: 'typing.Optional[bytes]' = None
+            signingKey: bytes = b""
+            verificationKey: bytes = b""
+            groupIdentifier: bytes = b""
+            groupResolvingKey: typing.Optional[bytes] = None
 
         @dataclass
         class ClearAliroReaderConfig(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000101
             command_id: typing.ClassVar[int] = 0x00000029
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -29003,7 +29004,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, DoorLock.Enums.DlLockState])
 
-            value: 'typing.Union[Nullable, DoorLock.Enums.DlLockState]' = NullValue
+            value: typing.Union[Nullable, DoorLock.Enums.DlLockState] = NullValue
 
         @dataclass
         class LockType(ClusterAttributeDescriptor):
@@ -29019,7 +29020,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=DoorLock.Enums.DlLockType)
 
-            value: 'DoorLock.Enums.DlLockType' = 0
+            value: DoorLock.Enums.DlLockType = 0
 
         @dataclass
         class ActuatorEnabled(ClusterAttributeDescriptor):
@@ -29035,7 +29036,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class DoorState(ClusterAttributeDescriptor):
@@ -29051,7 +29052,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, DoorLock.Enums.DoorStateEnum])
 
-            value: 'typing.Union[None, Nullable, DoorLock.Enums.DoorStateEnum]' = None
+            value: typing.Union[None, Nullable, DoorLock.Enums.DoorStateEnum] = None
 
         @dataclass
         class DoorOpenEvents(ClusterAttributeDescriptor):
@@ -29067,7 +29068,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class DoorClosedEvents(ClusterAttributeDescriptor):
@@ -29083,7 +29084,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class OpenPeriod(ClusterAttributeDescriptor):
@@ -29099,7 +29100,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfTotalUsersSupported(ClusterAttributeDescriptor):
@@ -29115,7 +29116,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfPINUsersSupported(ClusterAttributeDescriptor):
@@ -29131,7 +29132,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfRFIDUsersSupported(ClusterAttributeDescriptor):
@@ -29147,7 +29148,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfWeekDaySchedulesSupportedPerUser(ClusterAttributeDescriptor):
@@ -29163,7 +29164,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfYearDaySchedulesSupportedPerUser(ClusterAttributeDescriptor):
@@ -29179,7 +29180,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfHolidaySchedulesSupported(ClusterAttributeDescriptor):
@@ -29195,7 +29196,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MaxPINCodeLength(ClusterAttributeDescriptor):
@@ -29211,7 +29212,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MinPINCodeLength(ClusterAttributeDescriptor):
@@ -29227,7 +29228,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MaxRFIDCodeLength(ClusterAttributeDescriptor):
@@ -29243,7 +29244,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MinRFIDCodeLength(ClusterAttributeDescriptor):
@@ -29259,7 +29260,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CredentialRulesSupport(ClusterAttributeDescriptor):
@@ -29275,7 +29276,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfCredentialsSupportedPerUser(ClusterAttributeDescriptor):
@@ -29291,7 +29292,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Language(ClusterAttributeDescriptor):
@@ -29307,7 +29308,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class LEDSettings(ClusterAttributeDescriptor):
@@ -29323,7 +29324,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AutoRelockTime(ClusterAttributeDescriptor):
@@ -29339,7 +29340,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SoundVolume(ClusterAttributeDescriptor):
@@ -29355,7 +29356,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class OperatingMode(ClusterAttributeDescriptor):
@@ -29371,7 +29372,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=DoorLock.Enums.OperatingModeEnum)
 
-            value: 'DoorLock.Enums.OperatingModeEnum' = 0
+            value: DoorLock.Enums.OperatingModeEnum = 0
 
         @dataclass
         class SupportedOperatingModes(ClusterAttributeDescriptor):
@@ -29387,7 +29388,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class DefaultConfigurationRegister(ClusterAttributeDescriptor):
@@ -29403,7 +29404,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class EnableLocalProgramming(ClusterAttributeDescriptor):
@@ -29419,7 +29420,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class EnableOneTouchLocking(ClusterAttributeDescriptor):
@@ -29435,7 +29436,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class EnableInsideStatusLED(ClusterAttributeDescriptor):
@@ -29451,7 +29452,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class EnablePrivacyModeButton(ClusterAttributeDescriptor):
@@ -29467,7 +29468,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class LocalProgrammingFeatures(ClusterAttributeDescriptor):
@@ -29483,7 +29484,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class WrongCodeEntryLimit(ClusterAttributeDescriptor):
@@ -29499,7 +29500,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class UserCodeTemporaryDisableTime(ClusterAttributeDescriptor):
@@ -29515,7 +29516,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SendPINOverTheAir(ClusterAttributeDescriptor):
@@ -29531,7 +29532,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class RequirePINforRemoteOperation(ClusterAttributeDescriptor):
@@ -29547,7 +29548,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class ExpiringUserTimeout(ClusterAttributeDescriptor):
@@ -29563,7 +29564,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AliroReaderVerificationKey(ClusterAttributeDescriptor):
@@ -29579,7 +29580,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, bytes])
 
-            value: 'typing.Union[None, Nullable, bytes]' = None
+            value: typing.Union[None, Nullable, bytes] = None
 
         @dataclass
         class AliroReaderGroupIdentifier(ClusterAttributeDescriptor):
@@ -29595,7 +29596,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, bytes])
 
-            value: 'typing.Union[None, Nullable, bytes]' = None
+            value: typing.Union[None, Nullable, bytes] = None
 
         @dataclass
         class AliroReaderGroupSubIdentifier(ClusterAttributeDescriptor):
@@ -29611,7 +29612,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bytes])
 
-            value: 'typing.Optional[bytes]' = None
+            value: typing.Optional[bytes] = None
 
         @dataclass
         class AliroExpeditedTransactionSupportedProtocolVersions(ClusterAttributeDescriptor):
@@ -29627,7 +29628,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[bytes]])
 
-            value: 'typing.Optional[typing.List[bytes]]' = None
+            value: typing.Optional[typing.List[bytes]] = None
 
         @dataclass
         class AliroGroupResolvingKey(ClusterAttributeDescriptor):
@@ -29643,7 +29644,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, bytes])
 
-            value: 'typing.Union[None, Nullable, bytes]' = None
+            value: typing.Union[None, Nullable, bytes] = None
 
         @dataclass
         class AliroSupportedBLEUWBProtocolVersions(ClusterAttributeDescriptor):
@@ -29659,7 +29660,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[bytes]])
 
-            value: 'typing.Optional[typing.List[bytes]]' = None
+            value: typing.Optional[typing.List[bytes]] = None
 
         @dataclass
         class AliroBLEAdvertisingVersion(ClusterAttributeDescriptor):
@@ -29675,7 +29676,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfAliroCredentialIssuerKeysSupported(ClusterAttributeDescriptor):
@@ -29691,7 +29692,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfAliroEndpointKeysSupported(ClusterAttributeDescriptor):
@@ -29707,7 +29708,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -29723,7 +29724,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -29739,7 +29740,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -29755,7 +29756,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -29771,7 +29772,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -29787,7 +29788,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -29803,7 +29804,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -29823,7 +29824,7 @@
                         ClusterObjectFieldDescriptor(Label="alarmCode", Tag=0, Type=DoorLock.Enums.AlarmCodeEnum),
                     ])
 
-            alarmCode: 'DoorLock.Enums.AlarmCodeEnum' = 0
+            alarmCode: DoorLock.Enums.AlarmCodeEnum = 0
 
         @dataclass
         class DoorStateChange(ClusterEvent):
@@ -29842,7 +29843,7 @@
                         ClusterObjectFieldDescriptor(Label="doorState", Tag=0, Type=DoorLock.Enums.DoorStateEnum),
                     ])
 
-            doorState: 'DoorLock.Enums.DoorStateEnum' = 0
+            doorState: DoorLock.Enums.DoorStateEnum = 0
 
         @dataclass
         class LockOperation(ClusterEvent):
@@ -29866,12 +29867,12 @@
                         ClusterObjectFieldDescriptor(Label="credentials", Tag=5, Type=typing.Union[None, Nullable, typing.List[DoorLock.Structs.CredentialStruct]]),
                     ])
 
-            lockOperationType: 'DoorLock.Enums.LockOperationTypeEnum' = 0
-            operationSource: 'DoorLock.Enums.OperationSourceEnum' = 0
-            userIndex: 'typing.Union[Nullable, uint]' = NullValue
-            fabricIndex: 'typing.Union[Nullable, uint]' = NullValue
-            sourceNode: 'typing.Union[Nullable, uint]' = NullValue
-            credentials: 'typing.Union[None, Nullable, typing.List[DoorLock.Structs.CredentialStruct]]' = None
+            lockOperationType: DoorLock.Enums.LockOperationTypeEnum = 0
+            operationSource: DoorLock.Enums.OperationSourceEnum = 0
+            userIndex: typing.Union[Nullable, uint] = NullValue
+            fabricIndex: typing.Union[Nullable, uint] = NullValue
+            sourceNode: typing.Union[Nullable, uint] = NullValue
+            credentials: typing.Union[None, Nullable, typing.List[DoorLock.Structs.CredentialStruct]] = None
 
         @dataclass
         class LockOperationError(ClusterEvent):
@@ -29896,13 +29897,13 @@
                         ClusterObjectFieldDescriptor(Label="credentials", Tag=6, Type=typing.Union[None, Nullable, typing.List[DoorLock.Structs.CredentialStruct]]),
                     ])
 
-            lockOperationType: 'DoorLock.Enums.LockOperationTypeEnum' = 0
-            operationSource: 'DoorLock.Enums.OperationSourceEnum' = 0
-            operationError: 'DoorLock.Enums.OperationErrorEnum' = 0
-            userIndex: 'typing.Union[Nullable, uint]' = NullValue
-            fabricIndex: 'typing.Union[Nullable, uint]' = NullValue
-            sourceNode: 'typing.Union[Nullable, uint]' = NullValue
-            credentials: 'typing.Union[None, Nullable, typing.List[DoorLock.Structs.CredentialStruct]]' = None
+            lockOperationType: DoorLock.Enums.LockOperationTypeEnum = 0
+            operationSource: DoorLock.Enums.OperationSourceEnum = 0
+            operationError: DoorLock.Enums.OperationErrorEnum = 0
+            userIndex: typing.Union[Nullable, uint] = NullValue
+            fabricIndex: typing.Union[Nullable, uint] = NullValue
+            sourceNode: typing.Union[Nullable, uint] = NullValue
+            credentials: typing.Union[None, Nullable, typing.List[DoorLock.Structs.CredentialStruct]] = None
 
         @dataclass
         class LockUserChange(ClusterEvent):
@@ -29927,13 +29928,13 @@
                         ClusterObjectFieldDescriptor(Label="dataIndex", Tag=6, Type=typing.Union[Nullable, uint]),
                     ])
 
-            lockDataType: 'DoorLock.Enums.LockDataTypeEnum' = 0
-            dataOperationType: 'DoorLock.Enums.DataOperationTypeEnum' = 0
-            operationSource: 'DoorLock.Enums.OperationSourceEnum' = 0
-            userIndex: 'typing.Union[Nullable, uint]' = NullValue
-            fabricIndex: 'typing.Union[Nullable, uint]' = NullValue
-            sourceNode: 'typing.Union[Nullable, uint]' = NullValue
-            dataIndex: 'typing.Union[Nullable, uint]' = NullValue
+            lockDataType: DoorLock.Enums.LockDataTypeEnum = 0
+            dataOperationType: DoorLock.Enums.DataOperationTypeEnum = 0
+            operationSource: DoorLock.Enums.OperationSourceEnum = 0
+            userIndex: typing.Union[Nullable, uint] = NullValue
+            fabricIndex: typing.Union[Nullable, uint] = NullValue
+            sourceNode: typing.Union[Nullable, uint] = NullValue
+            dataIndex: typing.Union[Nullable, uint] = NullValue
 
 
 @dataclass
@@ -29974,34 +29975,34 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    type: 'WindowCovering.Enums.Type' = None
-    physicalClosedLimitLift: 'typing.Optional[uint]' = None
-    physicalClosedLimitTilt: 'typing.Optional[uint]' = None
-    currentPositionLift: 'typing.Union[None, Nullable, uint]' = None
-    currentPositionTilt: 'typing.Union[None, Nullable, uint]' = None
-    numberOfActuationsLift: 'typing.Optional[uint]' = None
-    numberOfActuationsTilt: 'typing.Optional[uint]' = None
-    configStatus: 'uint' = None
-    currentPositionLiftPercentage: 'typing.Union[None, Nullable, uint]' = None
-    currentPositionTiltPercentage: 'typing.Union[None, Nullable, uint]' = None
-    operationalStatus: 'uint' = None
-    targetPositionLiftPercent100ths: 'typing.Union[None, Nullable, uint]' = None
-    targetPositionTiltPercent100ths: 'typing.Union[None, Nullable, uint]' = None
-    endProductType: 'WindowCovering.Enums.EndProductType' = None
-    currentPositionLiftPercent100ths: 'typing.Union[None, Nullable, uint]' = None
-    currentPositionTiltPercent100ths: 'typing.Union[None, Nullable, uint]' = None
-    installedOpenLimitLift: 'typing.Optional[uint]' = None
-    installedClosedLimitLift: 'typing.Optional[uint]' = None
-    installedOpenLimitTilt: 'typing.Optional[uint]' = None
-    installedClosedLimitTilt: 'typing.Optional[uint]' = None
-    mode: 'uint' = None
-    safetyStatus: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    type: WindowCovering.Enums.Type = 0
+    physicalClosedLimitLift: typing.Optional[uint] = None
+    physicalClosedLimitTilt: typing.Optional[uint] = None
+    currentPositionLift: typing.Union[None, Nullable, uint] = None
+    currentPositionTilt: typing.Union[None, Nullable, uint] = None
+    numberOfActuationsLift: typing.Optional[uint] = None
+    numberOfActuationsTilt: typing.Optional[uint] = None
+    configStatus: uint = 0
+    currentPositionLiftPercentage: typing.Union[None, Nullable, uint] = None
+    currentPositionTiltPercentage: typing.Union[None, Nullable, uint] = None
+    operationalStatus: uint = 0
+    targetPositionLiftPercent100ths: typing.Union[None, Nullable, uint] = None
+    targetPositionTiltPercent100ths: typing.Union[None, Nullable, uint] = None
+    endProductType: WindowCovering.Enums.EndProductType = 0
+    currentPositionLiftPercent100ths: typing.Union[None, Nullable, uint] = None
+    currentPositionTiltPercent100ths: typing.Union[None, Nullable, uint] = None
+    installedOpenLimitLift: typing.Optional[uint] = None
+    installedClosedLimitLift: typing.Optional[uint] = None
+    installedOpenLimitTilt: typing.Optional[uint] = None
+    installedClosedLimitTilt: typing.Optional[uint] = None
+    mode: uint = 0
+    safetyStatus: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class EndProductType(MatterIntEnum):
@@ -30102,7 +30103,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000102
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30115,7 +30116,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000102
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30128,7 +30129,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000102
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30141,7 +30142,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000102
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30150,14 +30151,14 @@
                         ClusterObjectFieldDescriptor(Label="liftValue", Tag=0, Type=uint),
                     ])
 
-            liftValue: 'uint' = 0
+            liftValue: uint = 0
 
         @dataclass
         class GoToLiftPercentage(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000102
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30166,14 +30167,14 @@
                         ClusterObjectFieldDescriptor(Label="liftPercent100thsValue", Tag=0, Type=uint),
                     ])
 
-            liftPercent100thsValue: 'uint' = 0
+            liftPercent100thsValue: uint = 0
 
         @dataclass
         class GoToTiltValue(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000102
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30182,14 +30183,14 @@
                         ClusterObjectFieldDescriptor(Label="tiltValue", Tag=0, Type=uint),
                     ])
 
-            tiltValue: 'uint' = 0
+            tiltValue: uint = 0
 
         @dataclass
         class GoToTiltPercentage(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000102
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30198,7 +30199,7 @@
                         ClusterObjectFieldDescriptor(Label="tiltPercent100thsValue", Tag=0, Type=uint),
                     ])
 
-            tiltPercent100thsValue: 'uint' = 0
+            tiltPercent100thsValue: uint = 0
 
     class Attributes:
         @dataclass
@@ -30215,7 +30216,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=WindowCovering.Enums.Type)
 
-            value: 'WindowCovering.Enums.Type' = 0
+            value: WindowCovering.Enums.Type = 0
 
         @dataclass
         class PhysicalClosedLimitLift(ClusterAttributeDescriptor):
@@ -30231,7 +30232,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PhysicalClosedLimitTilt(ClusterAttributeDescriptor):
@@ -30247,7 +30248,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CurrentPositionLift(ClusterAttributeDescriptor):
@@ -30263,7 +30264,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class CurrentPositionTilt(ClusterAttributeDescriptor):
@@ -30279,7 +30280,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class NumberOfActuationsLift(ClusterAttributeDescriptor):
@@ -30295,7 +30296,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfActuationsTilt(ClusterAttributeDescriptor):
@@ -30311,7 +30312,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ConfigStatus(ClusterAttributeDescriptor):
@@ -30327,7 +30328,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class CurrentPositionLiftPercentage(ClusterAttributeDescriptor):
@@ -30343,7 +30344,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class CurrentPositionTiltPercentage(ClusterAttributeDescriptor):
@@ -30359,7 +30360,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OperationalStatus(ClusterAttributeDescriptor):
@@ -30375,7 +30376,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TargetPositionLiftPercent100ths(ClusterAttributeDescriptor):
@@ -30391,7 +30392,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class TargetPositionTiltPercent100ths(ClusterAttributeDescriptor):
@@ -30407,7 +30408,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class EndProductType(ClusterAttributeDescriptor):
@@ -30423,7 +30424,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=WindowCovering.Enums.EndProductType)
 
-            value: 'WindowCovering.Enums.EndProductType' = 0
+            value: WindowCovering.Enums.EndProductType = 0
 
         @dataclass
         class CurrentPositionLiftPercent100ths(ClusterAttributeDescriptor):
@@ -30439,7 +30440,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class CurrentPositionTiltPercent100ths(ClusterAttributeDescriptor):
@@ -30455,7 +30456,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class InstalledOpenLimitLift(ClusterAttributeDescriptor):
@@ -30471,7 +30472,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class InstalledClosedLimitLift(ClusterAttributeDescriptor):
@@ -30487,7 +30488,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class InstalledOpenLimitTilt(ClusterAttributeDescriptor):
@@ -30503,7 +30504,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class InstalledClosedLimitTilt(ClusterAttributeDescriptor):
@@ -30519,7 +30520,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Mode(ClusterAttributeDescriptor):
@@ -30535,7 +30536,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class SafetyStatus(ClusterAttributeDescriptor):
@@ -30551,7 +30552,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -30567,7 +30568,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -30583,7 +30584,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -30599,7 +30600,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -30615,7 +30616,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -30631,7 +30632,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -30647,7 +30648,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -30672,18 +30673,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedAreas: 'typing.List[ServiceArea.Structs.AreaStruct]' = None
-    supportedMaps: 'typing.Optional[typing.List[ServiceArea.Structs.MapStruct]]' = None
-    selectedAreas: 'typing.List[uint]' = None
-    currentArea: 'typing.Union[None, Nullable, uint]' = None
-    estimatedEndTime: 'typing.Union[None, Nullable, uint]' = None
-    progress: 'typing.Optional[typing.List[ServiceArea.Structs.ProgressStruct]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedAreas: typing.List[ServiceArea.Structs.AreaStruct] = field(default_factory=lambda: [])
+    supportedMaps: typing.Optional[typing.List[ServiceArea.Structs.MapStruct]] = None
+    selectedAreas: typing.List[uint] = field(default_factory=lambda: [])
+    currentArea: typing.Union[None, Nullable, uint] = None
+    estimatedEndTime: typing.Union[None, Nullable, uint] = None
+    progress: typing.Optional[typing.List[ServiceArea.Structs.ProgressStruct]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class OperationalStatusEnum(MatterIntEnum):
@@ -30812,14 +30813,14 @@
                         ClusterObjectFieldDescriptor(Label="newAreas", Tag=0, Type=typing.List[uint]),
                     ])
 
-            newAreas: 'typing.List[uint]' = field(default_factory=lambda: [])
+            newAreas: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class SelectAreasResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000150
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30829,8 +30830,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=str),
                     ])
 
-            status: 'ServiceArea.Enums.SelectAreasStatus' = 0
-            statusText: 'str' = ""
+            status: ServiceArea.Enums.SelectAreasStatus = 0
+            statusText: str = ""
 
         @dataclass
         class SkipArea(ClusterCommand):
@@ -30846,14 +30847,14 @@
                         ClusterObjectFieldDescriptor(Label="skippedArea", Tag=0, Type=uint),
                     ])
 
-            skippedArea: 'uint' = 0
+            skippedArea: uint = 0
 
         @dataclass
         class SkipAreaResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000150
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -30863,8 +30864,8 @@
                         ClusterObjectFieldDescriptor(Label="statusText", Tag=1, Type=str),
                     ])
 
-            status: 'ServiceArea.Enums.SkipAreaStatus' = 0
-            statusText: 'str' = ""
+            status: ServiceArea.Enums.SkipAreaStatus = 0
+            statusText: str = ""
 
     class Attributes:
         @dataclass
@@ -30881,7 +30882,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ServiceArea.Structs.AreaStruct])
 
-            value: 'typing.List[ServiceArea.Structs.AreaStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ServiceArea.Structs.AreaStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class SupportedMaps(ClusterAttributeDescriptor):
@@ -30897,7 +30898,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[ServiceArea.Structs.MapStruct]])
 
-            value: 'typing.Optional[typing.List[ServiceArea.Structs.MapStruct]]' = None
+            value: typing.Optional[typing.List[ServiceArea.Structs.MapStruct]] = None
 
         @dataclass
         class SelectedAreas(ClusterAttributeDescriptor):
@@ -30913,7 +30914,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentArea(ClusterAttributeDescriptor):
@@ -30929,7 +30930,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class EstimatedEndTime(ClusterAttributeDescriptor):
@@ -30945,7 +30946,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Progress(ClusterAttributeDescriptor):
@@ -30961,7 +30962,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[ServiceArea.Structs.ProgressStruct]])
 
-            value: 'typing.Optional[typing.List[ServiceArea.Structs.ProgressStruct]]' = None
+            value: typing.Optional[typing.List[ServiceArea.Structs.ProgressStruct]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -30977,7 +30978,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -30993,7 +30994,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -31009,7 +31010,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -31025,7 +31026,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -31041,7 +31042,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -31057,7 +31058,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -31099,35 +31100,35 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    maxPressure: 'typing.Union[Nullable, int]' = None
-    maxSpeed: 'typing.Union[Nullable, uint]' = None
-    maxFlow: 'typing.Union[Nullable, uint]' = None
-    minConstPressure: 'typing.Union[None, Nullable, int]' = None
-    maxConstPressure: 'typing.Union[None, Nullable, int]' = None
-    minCompPressure: 'typing.Union[None, Nullable, int]' = None
-    maxCompPressure: 'typing.Union[None, Nullable, int]' = None
-    minConstSpeed: 'typing.Union[None, Nullable, uint]' = None
-    maxConstSpeed: 'typing.Union[None, Nullable, uint]' = None
-    minConstFlow: 'typing.Union[None, Nullable, uint]' = None
-    maxConstFlow: 'typing.Union[None, Nullable, uint]' = None
-    minConstTemp: 'typing.Union[None, Nullable, int]' = None
-    maxConstTemp: 'typing.Union[None, Nullable, int]' = None
-    pumpStatus: 'typing.Optional[uint]' = None
-    effectiveOperationMode: 'PumpConfigurationAndControl.Enums.OperationModeEnum' = None
-    effectiveControlMode: 'PumpConfigurationAndControl.Enums.ControlModeEnum' = None
-    capacity: 'typing.Union[Nullable, int]' = None
-    speed: 'typing.Union[None, Nullable, uint]' = None
-    lifetimeRunningHours: 'typing.Union[None, Nullable, uint]' = None
-    power: 'typing.Union[None, Nullable, uint]' = None
-    lifetimeEnergyConsumed: 'typing.Union[None, Nullable, uint]' = None
-    operationMode: 'PumpConfigurationAndControl.Enums.OperationModeEnum' = None
-    controlMode: 'typing.Optional[PumpConfigurationAndControl.Enums.ControlModeEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    maxPressure: typing.Union[Nullable, int] = NullValue
+    maxSpeed: typing.Union[Nullable, uint] = NullValue
+    maxFlow: typing.Union[Nullable, uint] = NullValue
+    minConstPressure: typing.Union[None, Nullable, int] = None
+    maxConstPressure: typing.Union[None, Nullable, int] = None
+    minCompPressure: typing.Union[None, Nullable, int] = None
+    maxCompPressure: typing.Union[None, Nullable, int] = None
+    minConstSpeed: typing.Union[None, Nullable, uint] = None
+    maxConstSpeed: typing.Union[None, Nullable, uint] = None
+    minConstFlow: typing.Union[None, Nullable, uint] = None
+    maxConstFlow: typing.Union[None, Nullable, uint] = None
+    minConstTemp: typing.Union[None, Nullable, int] = None
+    maxConstTemp: typing.Union[None, Nullable, int] = None
+    pumpStatus: typing.Optional[uint] = None
+    effectiveOperationMode: PumpConfigurationAndControl.Enums.OperationModeEnum = 0
+    effectiveControlMode: PumpConfigurationAndControl.Enums.ControlModeEnum = 0
+    capacity: typing.Union[Nullable, int] = NullValue
+    speed: typing.Union[None, Nullable, uint] = None
+    lifetimeRunningHours: typing.Union[None, Nullable, uint] = None
+    power: typing.Union[None, Nullable, uint] = None
+    lifetimeEnergyConsumed: typing.Union[None, Nullable, uint] = None
+    operationMode: PumpConfigurationAndControl.Enums.OperationModeEnum = 0
+    controlMode: typing.Optional[PumpConfigurationAndControl.Enums.ControlModeEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ControlModeEnum(MatterIntEnum):
@@ -31190,7 +31191,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class MaxSpeed(ClusterAttributeDescriptor):
@@ -31206,7 +31207,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MaxFlow(ClusterAttributeDescriptor):
@@ -31222,7 +31223,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MinConstPressure(ClusterAttributeDescriptor):
@@ -31238,7 +31239,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class MaxConstPressure(ClusterAttributeDescriptor):
@@ -31254,7 +31255,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class MinCompPressure(ClusterAttributeDescriptor):
@@ -31270,7 +31271,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class MaxCompPressure(ClusterAttributeDescriptor):
@@ -31286,7 +31287,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class MinConstSpeed(ClusterAttributeDescriptor):
@@ -31302,7 +31303,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class MaxConstSpeed(ClusterAttributeDescriptor):
@@ -31318,7 +31319,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class MinConstFlow(ClusterAttributeDescriptor):
@@ -31334,7 +31335,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class MaxConstFlow(ClusterAttributeDescriptor):
@@ -31350,7 +31351,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class MinConstTemp(ClusterAttributeDescriptor):
@@ -31366,7 +31367,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class MaxConstTemp(ClusterAttributeDescriptor):
@@ -31382,7 +31383,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class PumpStatus(ClusterAttributeDescriptor):
@@ -31398,7 +31399,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class EffectiveOperationMode(ClusterAttributeDescriptor):
@@ -31414,7 +31415,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=PumpConfigurationAndControl.Enums.OperationModeEnum)
 
-            value: 'PumpConfigurationAndControl.Enums.OperationModeEnum' = 0
+            value: PumpConfigurationAndControl.Enums.OperationModeEnum = 0
 
         @dataclass
         class EffectiveControlMode(ClusterAttributeDescriptor):
@@ -31430,7 +31431,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=PumpConfigurationAndControl.Enums.ControlModeEnum)
 
-            value: 'PumpConfigurationAndControl.Enums.ControlModeEnum' = 0
+            value: PumpConfigurationAndControl.Enums.ControlModeEnum = 0
 
         @dataclass
         class Capacity(ClusterAttributeDescriptor):
@@ -31446,7 +31447,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class Speed(ClusterAttributeDescriptor):
@@ -31462,7 +31463,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class LifetimeRunningHours(ClusterAttributeDescriptor):
@@ -31478,7 +31479,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Power(ClusterAttributeDescriptor):
@@ -31494,7 +31495,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class LifetimeEnergyConsumed(ClusterAttributeDescriptor):
@@ -31510,7 +31511,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OperationMode(ClusterAttributeDescriptor):
@@ -31526,7 +31527,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=PumpConfigurationAndControl.Enums.OperationModeEnum)
 
-            value: 'PumpConfigurationAndControl.Enums.OperationModeEnum' = 0
+            value: PumpConfigurationAndControl.Enums.OperationModeEnum = 0
 
         @dataclass
         class ControlMode(ClusterAttributeDescriptor):
@@ -31542,7 +31543,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[PumpConfigurationAndControl.Enums.ControlModeEnum])
 
-            value: 'typing.Optional[PumpConfigurationAndControl.Enums.ControlModeEnum]' = None
+            value: typing.Optional[PumpConfigurationAndControl.Enums.ControlModeEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -31558,7 +31559,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -31574,7 +31575,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -31590,7 +31591,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -31606,7 +31607,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -31622,7 +31623,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -31638,7 +31639,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -31990,72 +31991,72 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    localTemperature: 'typing.Union[Nullable, int]' = None
-    outdoorTemperature: 'typing.Union[None, Nullable, int]' = None
-    occupancy: 'typing.Optional[uint]' = None
-    absMinHeatSetpointLimit: 'typing.Optional[int]' = None
-    absMaxHeatSetpointLimit: 'typing.Optional[int]' = None
-    absMinCoolSetpointLimit: 'typing.Optional[int]' = None
-    absMaxCoolSetpointLimit: 'typing.Optional[int]' = None
-    PICoolingDemand: 'typing.Optional[uint]' = None
-    PIHeatingDemand: 'typing.Optional[uint]' = None
-    HVACSystemTypeConfiguration: 'typing.Optional[uint]' = None
-    localTemperatureCalibration: 'typing.Optional[int]' = None
-    occupiedCoolingSetpoint: 'typing.Optional[int]' = None
-    occupiedHeatingSetpoint: 'typing.Optional[int]' = None
-    unoccupiedCoolingSetpoint: 'typing.Optional[int]' = None
-    unoccupiedHeatingSetpoint: 'typing.Optional[int]' = None
-    minHeatSetpointLimit: 'typing.Optional[int]' = None
-    maxHeatSetpointLimit: 'typing.Optional[int]' = None
-    minCoolSetpointLimit: 'typing.Optional[int]' = None
-    maxCoolSetpointLimit: 'typing.Optional[int]' = None
-    minSetpointDeadBand: 'typing.Optional[int]' = None
-    remoteSensing: 'typing.Optional[uint]' = None
-    controlSequenceOfOperation: 'Thermostat.Enums.ControlSequenceOfOperationEnum' = None
-    systemMode: 'Thermostat.Enums.SystemModeEnum' = None
-    thermostatRunningMode: 'typing.Optional[Thermostat.Enums.ThermostatRunningModeEnum]' = None
-    startOfWeek: 'typing.Optional[Thermostat.Enums.StartOfWeekEnum]' = None
-    numberOfWeeklyTransitions: 'typing.Optional[uint]' = None
-    numberOfDailyTransitions: 'typing.Optional[uint]' = None
-    temperatureSetpointHold: 'typing.Optional[Thermostat.Enums.TemperatureSetpointHoldEnum]' = None
-    temperatureSetpointHoldDuration: 'typing.Union[None, Nullable, uint]' = None
-    thermostatProgrammingOperationMode: 'typing.Optional[uint]' = None
-    thermostatRunningState: 'typing.Optional[uint]' = None
-    setpointChangeSource: 'typing.Optional[Thermostat.Enums.SetpointChangeSourceEnum]' = None
-    setpointChangeAmount: 'typing.Union[None, Nullable, int]' = None
-    setpointChangeSourceTimestamp: 'typing.Optional[uint]' = None
-    occupiedSetback: 'typing.Union[None, Nullable, uint]' = None
-    occupiedSetbackMin: 'typing.Union[None, Nullable, uint]' = None
-    occupiedSetbackMax: 'typing.Union[None, Nullable, uint]' = None
-    unoccupiedSetback: 'typing.Union[None, Nullable, uint]' = None
-    unoccupiedSetbackMin: 'typing.Union[None, Nullable, uint]' = None
-    unoccupiedSetbackMax: 'typing.Union[None, Nullable, uint]' = None
-    emergencyHeatDelta: 'typing.Optional[uint]' = None
-    ACType: 'typing.Optional[Thermostat.Enums.ACTypeEnum]' = None
-    ACCapacity: 'typing.Optional[uint]' = None
-    ACRefrigerantType: 'typing.Optional[Thermostat.Enums.ACRefrigerantTypeEnum]' = None
-    ACCompressorType: 'typing.Optional[Thermostat.Enums.ACCompressorTypeEnum]' = None
-    ACErrorCode: 'typing.Optional[uint]' = None
-    ACLouverPosition: 'typing.Optional[Thermostat.Enums.ACLouverPositionEnum]' = None
-    ACCoilTemperature: 'typing.Union[None, Nullable, int]' = None
-    ACCapacityformat: 'typing.Optional[Thermostat.Enums.ACCapacityFormatEnum]' = None
-    presetTypes: 'typing.Optional[typing.List[Thermostat.Structs.PresetTypeStruct]]' = None
-    scheduleTypes: 'typing.Optional[typing.List[Thermostat.Structs.ScheduleTypeStruct]]' = None
-    numberOfPresets: 'typing.Optional[uint]' = None
-    numberOfSchedules: 'typing.Optional[uint]' = None
-    numberOfScheduleTransitions: 'typing.Optional[uint]' = None
-    numberOfScheduleTransitionPerDay: 'typing.Union[None, Nullable, uint]' = None
-    activePresetHandle: 'typing.Union[None, Nullable, bytes]' = None
-    activeScheduleHandle: 'typing.Union[None, Nullable, bytes]' = None
-    presets: 'typing.Optional[typing.List[Thermostat.Structs.PresetStruct]]' = None
-    schedules: 'typing.Optional[typing.List[Thermostat.Structs.ScheduleStruct]]' = None
-    setpointHoldExpiryTimestamp: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    localTemperature: typing.Union[Nullable, int] = NullValue
+    outdoorTemperature: typing.Union[None, Nullable, int] = None
+    occupancy: typing.Optional[uint] = None
+    absMinHeatSetpointLimit: typing.Optional[int] = None
+    absMaxHeatSetpointLimit: typing.Optional[int] = None
+    absMinCoolSetpointLimit: typing.Optional[int] = None
+    absMaxCoolSetpointLimit: typing.Optional[int] = None
+    PICoolingDemand: typing.Optional[uint] = None
+    PIHeatingDemand: typing.Optional[uint] = None
+    HVACSystemTypeConfiguration: typing.Optional[uint] = None
+    localTemperatureCalibration: typing.Optional[int] = None
+    occupiedCoolingSetpoint: typing.Optional[int] = None
+    occupiedHeatingSetpoint: typing.Optional[int] = None
+    unoccupiedCoolingSetpoint: typing.Optional[int] = None
+    unoccupiedHeatingSetpoint: typing.Optional[int] = None
+    minHeatSetpointLimit: typing.Optional[int] = None
+    maxHeatSetpointLimit: typing.Optional[int] = None
+    minCoolSetpointLimit: typing.Optional[int] = None
+    maxCoolSetpointLimit: typing.Optional[int] = None
+    minSetpointDeadBand: typing.Optional[int] = None
+    remoteSensing: typing.Optional[uint] = None
+    controlSequenceOfOperation: Thermostat.Enums.ControlSequenceOfOperationEnum = 0
+    systemMode: Thermostat.Enums.SystemModeEnum = 0
+    thermostatRunningMode: typing.Optional[Thermostat.Enums.ThermostatRunningModeEnum] = None
+    startOfWeek: typing.Optional[Thermostat.Enums.StartOfWeekEnum] = None
+    numberOfWeeklyTransitions: typing.Optional[uint] = None
+    numberOfDailyTransitions: typing.Optional[uint] = None
+    temperatureSetpointHold: typing.Optional[Thermostat.Enums.TemperatureSetpointHoldEnum] = None
+    temperatureSetpointHoldDuration: typing.Union[None, Nullable, uint] = None
+    thermostatProgrammingOperationMode: typing.Optional[uint] = None
+    thermostatRunningState: typing.Optional[uint] = None
+    setpointChangeSource: typing.Optional[Thermostat.Enums.SetpointChangeSourceEnum] = None
+    setpointChangeAmount: typing.Union[None, Nullable, int] = None
+    setpointChangeSourceTimestamp: typing.Optional[uint] = None
+    occupiedSetback: typing.Union[None, Nullable, uint] = None
+    occupiedSetbackMin: typing.Union[None, Nullable, uint] = None
+    occupiedSetbackMax: typing.Union[None, Nullable, uint] = None
+    unoccupiedSetback: typing.Union[None, Nullable, uint] = None
+    unoccupiedSetbackMin: typing.Union[None, Nullable, uint] = None
+    unoccupiedSetbackMax: typing.Union[None, Nullable, uint] = None
+    emergencyHeatDelta: typing.Optional[uint] = None
+    ACType: typing.Optional[Thermostat.Enums.ACTypeEnum] = None
+    ACCapacity: typing.Optional[uint] = None
+    ACRefrigerantType: typing.Optional[Thermostat.Enums.ACRefrigerantTypeEnum] = None
+    ACCompressorType: typing.Optional[Thermostat.Enums.ACCompressorTypeEnum] = None
+    ACErrorCode: typing.Optional[uint] = None
+    ACLouverPosition: typing.Optional[Thermostat.Enums.ACLouverPositionEnum] = None
+    ACCoilTemperature: typing.Union[None, Nullable, int] = None
+    ACCapacityformat: typing.Optional[Thermostat.Enums.ACCapacityFormatEnum] = None
+    presetTypes: typing.Optional[typing.List[Thermostat.Structs.PresetTypeStruct]] = None
+    scheduleTypes: typing.Optional[typing.List[Thermostat.Structs.ScheduleTypeStruct]] = None
+    numberOfPresets: typing.Optional[uint] = None
+    numberOfSchedules: typing.Optional[uint] = None
+    numberOfScheduleTransitions: typing.Optional[uint] = None
+    numberOfScheduleTransitionPerDay: typing.Union[None, Nullable, uint] = None
+    activePresetHandle: typing.Union[None, Nullable, bytes] = None
+    activeScheduleHandle: typing.Union[None, Nullable, bytes] = None
+    presets: typing.Optional[typing.List[Thermostat.Structs.PresetStruct]] = None
+    schedules: typing.Optional[typing.List[Thermostat.Structs.ScheduleStruct]] = None
+    setpointHoldExpiryTimestamp: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ACCapacityFormatEnum(MatterIntEnum):
@@ -32394,7 +32395,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000201
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -32404,15 +32405,15 @@
                         ClusterObjectFieldDescriptor(Label="amount", Tag=1, Type=int),
                     ])
 
-            mode: 'Thermostat.Enums.SetpointRaiseLowerModeEnum' = 0
-            amount: 'int' = 0
+            mode: Thermostat.Enums.SetpointRaiseLowerModeEnum = 0
+            amount: int = 0
 
         @dataclass
         class GetWeeklyScheduleResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000201
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -32424,17 +32425,17 @@
                         ClusterObjectFieldDescriptor(Label="transitions", Tag=3, Type=typing.List[Thermostat.Structs.WeeklyScheduleTransitionStruct]),
                     ])
 
-            numberOfTransitionsForSequence: 'uint' = 0
-            dayOfWeekForSequence: 'uint' = 0
-            modeForSequence: 'uint' = 0
-            transitions: 'typing.List[Thermostat.Structs.WeeklyScheduleTransitionStruct]' = field(default_factory=lambda: [])
+            numberOfTransitionsForSequence: uint = 0
+            dayOfWeekForSequence: uint = 0
+            modeForSequence: uint = 0
+            transitions: typing.List[Thermostat.Structs.WeeklyScheduleTransitionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class SetWeeklySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000201
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -32446,10 +32447,10 @@
                         ClusterObjectFieldDescriptor(Label="transitions", Tag=3, Type=typing.List[Thermostat.Structs.WeeklyScheduleTransitionStruct]),
                     ])
 
-            numberOfTransitionsForSequence: 'uint' = 0
-            dayOfWeekForSequence: 'uint' = 0
-            modeForSequence: 'uint' = 0
-            transitions: 'typing.List[Thermostat.Structs.WeeklyScheduleTransitionStruct]' = field(default_factory=lambda: [])
+            numberOfTransitionsForSequence: uint = 0
+            dayOfWeekForSequence: uint = 0
+            modeForSequence: uint = 0
+            transitions: typing.List[Thermostat.Structs.WeeklyScheduleTransitionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GetWeeklySchedule(ClusterCommand):
@@ -32466,15 +32467,15 @@
                         ClusterObjectFieldDescriptor(Label="modeToReturn", Tag=1, Type=uint),
                     ])
 
-            daysToReturn: 'uint' = 0
-            modeToReturn: 'uint' = 0
+            daysToReturn: uint = 0
+            modeToReturn: uint = 0
 
         @dataclass
         class ClearWeeklySchedule(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000201
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -32487,7 +32488,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000201
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -32496,14 +32497,14 @@
                         ClusterObjectFieldDescriptor(Label="scheduleHandle", Tag=0, Type=bytes),
                     ])
 
-            scheduleHandle: 'bytes' = b""
+            scheduleHandle: bytes = b""
 
         @dataclass
         class SetActivePresetRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000201
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -32512,14 +32513,14 @@
                         ClusterObjectFieldDescriptor(Label="presetHandle", Tag=0, Type=typing.Union[Nullable, bytes]),
                     ])
 
-            presetHandle: 'typing.Union[Nullable, bytes]' = NullValue
+            presetHandle: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class AtomicResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000201
             command_id: typing.ClassVar[int] = 0x000000FD
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -32530,9 +32531,9 @@
                         ClusterObjectFieldDescriptor(Label="timeout", Tag=2, Type=typing.Optional[uint]),
                     ])
 
-            statusCode: 'uint' = 0
-            attributeStatus: 'typing.List[Globals.Structs.AtomicAttributeStatusStruct]' = field(default_factory=lambda: [])
-            timeout: 'typing.Optional[uint]' = None
+            statusCode: uint = 0
+            attributeStatus: typing.List[Globals.Structs.AtomicAttributeStatusStruct] = field(default_factory=lambda: [])
+            timeout: typing.Optional[uint] = None
 
         @dataclass
         class AtomicRequest(ClusterCommand):
@@ -32550,9 +32551,9 @@
                         ClusterObjectFieldDescriptor(Label="timeout", Tag=2, Type=typing.Optional[uint]),
                     ])
 
-            requestType: 'Globals.Enums.AtomicRequestTypeEnum' = 0
-            attributeRequests: 'typing.List[uint]' = field(default_factory=lambda: [])
-            timeout: 'typing.Optional[uint]' = None
+            requestType: Globals.Enums.AtomicRequestTypeEnum = 0
+            attributeRequests: typing.List[uint] = field(default_factory=lambda: [])
+            timeout: typing.Optional[uint] = None
 
     class Attributes:
         @dataclass
@@ -32569,7 +32570,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class OutdoorTemperature(ClusterAttributeDescriptor):
@@ -32585,7 +32586,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class Occupancy(ClusterAttributeDescriptor):
@@ -32601,7 +32602,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AbsMinHeatSetpointLimit(ClusterAttributeDescriptor):
@@ -32617,7 +32618,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class AbsMaxHeatSetpointLimit(ClusterAttributeDescriptor):
@@ -32633,7 +32634,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class AbsMinCoolSetpointLimit(ClusterAttributeDescriptor):
@@ -32649,7 +32650,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class AbsMaxCoolSetpointLimit(ClusterAttributeDescriptor):
@@ -32665,7 +32666,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class PICoolingDemand(ClusterAttributeDescriptor):
@@ -32681,7 +32682,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PIHeatingDemand(ClusterAttributeDescriptor):
@@ -32697,7 +32698,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class HVACSystemTypeConfiguration(ClusterAttributeDescriptor):
@@ -32713,7 +32714,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class LocalTemperatureCalibration(ClusterAttributeDescriptor):
@@ -32729,7 +32730,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class OccupiedCoolingSetpoint(ClusterAttributeDescriptor):
@@ -32745,7 +32746,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class OccupiedHeatingSetpoint(ClusterAttributeDescriptor):
@@ -32761,7 +32762,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class UnoccupiedCoolingSetpoint(ClusterAttributeDescriptor):
@@ -32777,7 +32778,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class UnoccupiedHeatingSetpoint(ClusterAttributeDescriptor):
@@ -32793,7 +32794,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class MinHeatSetpointLimit(ClusterAttributeDescriptor):
@@ -32809,7 +32810,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class MaxHeatSetpointLimit(ClusterAttributeDescriptor):
@@ -32825,7 +32826,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class MinCoolSetpointLimit(ClusterAttributeDescriptor):
@@ -32841,7 +32842,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class MaxCoolSetpointLimit(ClusterAttributeDescriptor):
@@ -32857,7 +32858,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class MinSetpointDeadBand(ClusterAttributeDescriptor):
@@ -32873,7 +32874,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class RemoteSensing(ClusterAttributeDescriptor):
@@ -32889,7 +32890,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ControlSequenceOfOperation(ClusterAttributeDescriptor):
@@ -32905,7 +32906,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=Thermostat.Enums.ControlSequenceOfOperationEnum)
 
-            value: 'Thermostat.Enums.ControlSequenceOfOperationEnum' = 0
+            value: Thermostat.Enums.ControlSequenceOfOperationEnum = 0
 
         @dataclass
         class SystemMode(ClusterAttributeDescriptor):
@@ -32921,7 +32922,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=Thermostat.Enums.SystemModeEnum)
 
-            value: 'Thermostat.Enums.SystemModeEnum' = 0
+            value: Thermostat.Enums.SystemModeEnum = 0
 
         @dataclass
         class ThermostatRunningMode(ClusterAttributeDescriptor):
@@ -32937,7 +32938,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.ThermostatRunningModeEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.ThermostatRunningModeEnum]' = None
+            value: typing.Optional[Thermostat.Enums.ThermostatRunningModeEnum] = None
 
         @dataclass
         class StartOfWeek(ClusterAttributeDescriptor):
@@ -32953,7 +32954,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.StartOfWeekEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.StartOfWeekEnum]' = None
+            value: typing.Optional[Thermostat.Enums.StartOfWeekEnum] = None
 
         @dataclass
         class NumberOfWeeklyTransitions(ClusterAttributeDescriptor):
@@ -32969,7 +32970,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfDailyTransitions(ClusterAttributeDescriptor):
@@ -32985,7 +32986,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class TemperatureSetpointHold(ClusterAttributeDescriptor):
@@ -33001,7 +33002,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.TemperatureSetpointHoldEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.TemperatureSetpointHoldEnum]' = None
+            value: typing.Optional[Thermostat.Enums.TemperatureSetpointHoldEnum] = None
 
         @dataclass
         class TemperatureSetpointHoldDuration(ClusterAttributeDescriptor):
@@ -33017,7 +33018,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ThermostatProgrammingOperationMode(ClusterAttributeDescriptor):
@@ -33033,7 +33034,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ThermostatRunningState(ClusterAttributeDescriptor):
@@ -33049,7 +33050,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SetpointChangeSource(ClusterAttributeDescriptor):
@@ -33065,7 +33066,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.SetpointChangeSourceEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.SetpointChangeSourceEnum]' = None
+            value: typing.Optional[Thermostat.Enums.SetpointChangeSourceEnum] = None
 
         @dataclass
         class SetpointChangeAmount(ClusterAttributeDescriptor):
@@ -33081,7 +33082,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class SetpointChangeSourceTimestamp(ClusterAttributeDescriptor):
@@ -33097,7 +33098,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class OccupiedSetback(ClusterAttributeDescriptor):
@@ -33113,7 +33114,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OccupiedSetbackMin(ClusterAttributeDescriptor):
@@ -33129,7 +33130,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class OccupiedSetbackMax(ClusterAttributeDescriptor):
@@ -33145,7 +33146,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class UnoccupiedSetback(ClusterAttributeDescriptor):
@@ -33161,7 +33162,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class UnoccupiedSetbackMin(ClusterAttributeDescriptor):
@@ -33177,7 +33178,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class UnoccupiedSetbackMax(ClusterAttributeDescriptor):
@@ -33193,7 +33194,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class EmergencyHeatDelta(ClusterAttributeDescriptor):
@@ -33209,7 +33210,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ACType(ClusterAttributeDescriptor):
@@ -33225,7 +33226,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.ACTypeEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.ACTypeEnum]' = None
+            value: typing.Optional[Thermostat.Enums.ACTypeEnum] = None
 
         @dataclass
         class ACCapacity(ClusterAttributeDescriptor):
@@ -33241,7 +33242,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ACRefrigerantType(ClusterAttributeDescriptor):
@@ -33257,7 +33258,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.ACRefrigerantTypeEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.ACRefrigerantTypeEnum]' = None
+            value: typing.Optional[Thermostat.Enums.ACRefrigerantTypeEnum] = None
 
         @dataclass
         class ACCompressorType(ClusterAttributeDescriptor):
@@ -33273,7 +33274,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.ACCompressorTypeEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.ACCompressorTypeEnum]' = None
+            value: typing.Optional[Thermostat.Enums.ACCompressorTypeEnum] = None
 
         @dataclass
         class ACErrorCode(ClusterAttributeDescriptor):
@@ -33289,7 +33290,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ACLouverPosition(ClusterAttributeDescriptor):
@@ -33305,7 +33306,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.ACLouverPositionEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.ACLouverPositionEnum]' = None
+            value: typing.Optional[Thermostat.Enums.ACLouverPositionEnum] = None
 
         @dataclass
         class ACCoilTemperature(ClusterAttributeDescriptor):
@@ -33321,7 +33322,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class ACCapacityformat(ClusterAttributeDescriptor):
@@ -33337,7 +33338,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Thermostat.Enums.ACCapacityFormatEnum])
 
-            value: 'typing.Optional[Thermostat.Enums.ACCapacityFormatEnum]' = None
+            value: typing.Optional[Thermostat.Enums.ACCapacityFormatEnum] = None
 
         @dataclass
         class PresetTypes(ClusterAttributeDescriptor):
@@ -33353,7 +33354,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[Thermostat.Structs.PresetTypeStruct]])
 
-            value: 'typing.Optional[typing.List[Thermostat.Structs.PresetTypeStruct]]' = None
+            value: typing.Optional[typing.List[Thermostat.Structs.PresetTypeStruct]] = None
 
         @dataclass
         class ScheduleTypes(ClusterAttributeDescriptor):
@@ -33369,7 +33370,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[Thermostat.Structs.ScheduleTypeStruct]])
 
-            value: 'typing.Optional[typing.List[Thermostat.Structs.ScheduleTypeStruct]]' = None
+            value: typing.Optional[typing.List[Thermostat.Structs.ScheduleTypeStruct]] = None
 
         @dataclass
         class NumberOfPresets(ClusterAttributeDescriptor):
@@ -33385,7 +33386,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfSchedules(ClusterAttributeDescriptor):
@@ -33401,7 +33402,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfScheduleTransitions(ClusterAttributeDescriptor):
@@ -33417,7 +33418,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NumberOfScheduleTransitionPerDay(ClusterAttributeDescriptor):
@@ -33433,7 +33434,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ActivePresetHandle(ClusterAttributeDescriptor):
@@ -33449,7 +33450,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, bytes])
 
-            value: 'typing.Union[None, Nullable, bytes]' = None
+            value: typing.Union[None, Nullable, bytes] = None
 
         @dataclass
         class ActiveScheduleHandle(ClusterAttributeDescriptor):
@@ -33465,7 +33466,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, bytes])
 
-            value: 'typing.Union[None, Nullable, bytes]' = None
+            value: typing.Union[None, Nullable, bytes] = None
 
         @dataclass
         class Presets(ClusterAttributeDescriptor):
@@ -33481,7 +33482,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[Thermostat.Structs.PresetStruct]])
 
-            value: 'typing.Optional[typing.List[Thermostat.Structs.PresetStruct]]' = None
+            value: typing.Optional[typing.List[Thermostat.Structs.PresetStruct]] = None
 
         @dataclass
         class Schedules(ClusterAttributeDescriptor):
@@ -33497,7 +33498,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[Thermostat.Structs.ScheduleStruct]])
 
-            value: 'typing.Optional[typing.List[Thermostat.Structs.ScheduleStruct]]' = None
+            value: typing.Optional[typing.List[Thermostat.Structs.ScheduleStruct]] = None
 
         @dataclass
         class SetpointHoldExpiryTimestamp(ClusterAttributeDescriptor):
@@ -33513,7 +33514,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -33529,7 +33530,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -33545,7 +33546,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -33561,7 +33562,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -33577,7 +33578,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -33593,7 +33594,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -33609,7 +33610,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -33640,24 +33641,24 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    fanMode: 'FanControl.Enums.FanModeEnum' = None
-    fanModeSequence: 'FanControl.Enums.FanModeSequenceEnum' = None
-    percentSetting: 'typing.Union[Nullable, uint]' = None
-    percentCurrent: 'uint' = None
-    speedMax: 'typing.Optional[uint]' = None
-    speedSetting: 'typing.Union[None, Nullable, uint]' = None
-    speedCurrent: 'typing.Optional[uint]' = None
-    rockSupport: 'typing.Optional[uint]' = None
-    rockSetting: 'typing.Optional[uint]' = None
-    windSupport: 'typing.Optional[uint]' = None
-    windSetting: 'typing.Optional[uint]' = None
-    airflowDirection: 'typing.Optional[FanControl.Enums.AirflowDirectionEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    fanMode: FanControl.Enums.FanModeEnum = 0
+    fanModeSequence: FanControl.Enums.FanModeSequenceEnum = 0
+    percentSetting: typing.Union[Nullable, uint] = NullValue
+    percentCurrent: uint = 0
+    speedMax: typing.Optional[uint] = None
+    speedSetting: typing.Union[None, Nullable, uint] = None
+    speedCurrent: typing.Optional[uint] = None
+    rockSupport: typing.Optional[uint] = None
+    rockSetting: typing.Optional[uint] = None
+    windSupport: typing.Optional[uint] = None
+    windSetting: typing.Optional[uint] = None
+    airflowDirection: typing.Optional[FanControl.Enums.AirflowDirectionEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AirflowDirectionEnum(MatterIntEnum):
@@ -33729,7 +33730,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000202
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -33740,9 +33741,9 @@
                         ClusterObjectFieldDescriptor(Label="lowestOff", Tag=2, Type=typing.Optional[bool]),
                     ])
 
-            direction: 'FanControl.Enums.StepDirectionEnum' = 0
-            wrap: 'typing.Optional[bool]' = None
-            lowestOff: 'typing.Optional[bool]' = None
+            direction: FanControl.Enums.StepDirectionEnum = 0
+            wrap: typing.Optional[bool] = None
+            lowestOff: typing.Optional[bool] = None
 
     class Attributes:
         @dataclass
@@ -33759,7 +33760,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=FanControl.Enums.FanModeEnum)
 
-            value: 'FanControl.Enums.FanModeEnum' = 0
+            value: FanControl.Enums.FanModeEnum = 0
 
         @dataclass
         class FanModeSequence(ClusterAttributeDescriptor):
@@ -33775,7 +33776,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=FanControl.Enums.FanModeSequenceEnum)
 
-            value: 'FanControl.Enums.FanModeSequenceEnum' = 0
+            value: FanControl.Enums.FanModeSequenceEnum = 0
 
         @dataclass
         class PercentSetting(ClusterAttributeDescriptor):
@@ -33791,7 +33792,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class PercentCurrent(ClusterAttributeDescriptor):
@@ -33807,7 +33808,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class SpeedMax(ClusterAttributeDescriptor):
@@ -33823,7 +33824,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SpeedSetting(ClusterAttributeDescriptor):
@@ -33839,7 +33840,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class SpeedCurrent(ClusterAttributeDescriptor):
@@ -33855,7 +33856,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RockSupport(ClusterAttributeDescriptor):
@@ -33871,7 +33872,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RockSetting(ClusterAttributeDescriptor):
@@ -33887,7 +33888,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class WindSupport(ClusterAttributeDescriptor):
@@ -33903,7 +33904,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class WindSetting(ClusterAttributeDescriptor):
@@ -33919,7 +33920,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AirflowDirection(ClusterAttributeDescriptor):
@@ -33935,7 +33936,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[FanControl.Enums.AirflowDirectionEnum])
 
-            value: 'typing.Optional[FanControl.Enums.AirflowDirectionEnum]' = None
+            value: typing.Optional[FanControl.Enums.AirflowDirectionEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -33951,7 +33952,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -33967,7 +33968,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -33983,7 +33984,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -33999,7 +34000,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -34015,7 +34016,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -34031,7 +34032,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -34053,15 +34054,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    temperatureDisplayMode: 'ThermostatUserInterfaceConfiguration.Enums.TemperatureDisplayModeEnum' = None
-    keypadLockout: 'ThermostatUserInterfaceConfiguration.Enums.KeypadLockoutEnum' = None
-    scheduleProgrammingVisibility: 'typing.Optional[ThermostatUserInterfaceConfiguration.Enums.ScheduleProgrammingVisibilityEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    temperatureDisplayMode: ThermostatUserInterfaceConfiguration.Enums.TemperatureDisplayModeEnum = 0
+    keypadLockout: ThermostatUserInterfaceConfiguration.Enums.KeypadLockoutEnum = 0
+    scheduleProgrammingVisibility: typing.Optional[ThermostatUserInterfaceConfiguration.Enums.ScheduleProgrammingVisibilityEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class KeypadLockoutEnum(MatterIntEnum):
@@ -34110,7 +34111,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ThermostatUserInterfaceConfiguration.Enums.TemperatureDisplayModeEnum)
 
-            value: 'ThermostatUserInterfaceConfiguration.Enums.TemperatureDisplayModeEnum' = 0
+            value: ThermostatUserInterfaceConfiguration.Enums.TemperatureDisplayModeEnum = 0
 
         @dataclass
         class KeypadLockout(ClusterAttributeDescriptor):
@@ -34126,7 +34127,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ThermostatUserInterfaceConfiguration.Enums.KeypadLockoutEnum)
 
-            value: 'ThermostatUserInterfaceConfiguration.Enums.KeypadLockoutEnum' = 0
+            value: ThermostatUserInterfaceConfiguration.Enums.KeypadLockoutEnum = 0
 
         @dataclass
         class ScheduleProgrammingVisibility(ClusterAttributeDescriptor):
@@ -34142,7 +34143,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[ThermostatUserInterfaceConfiguration.Enums.ScheduleProgrammingVisibilityEnum])
 
-            value: 'typing.Optional[ThermostatUserInterfaceConfiguration.Enums.ScheduleProgrammingVisibilityEnum]' = None
+            value: typing.Optional[ThermostatUserInterfaceConfiguration.Enums.ScheduleProgrammingVisibilityEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -34158,7 +34159,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -34174,7 +34175,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -34190,7 +34191,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -34206,7 +34207,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -34222,7 +34223,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -34238,7 +34239,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -34309,64 +34310,64 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    currentHue: 'typing.Optional[uint]' = None
-    currentSaturation: 'typing.Optional[uint]' = None
-    remainingTime: 'typing.Optional[uint]' = None
-    currentX: 'typing.Optional[uint]' = None
-    currentY: 'typing.Optional[uint]' = None
-    driftCompensation: 'typing.Optional[ColorControl.Enums.DriftCompensationEnum]' = None
-    compensationText: 'typing.Optional[str]' = None
-    colorTemperatureMireds: 'typing.Optional[uint]' = None
-    colorMode: 'ColorControl.Enums.ColorModeEnum' = None
-    options: 'uint' = None
-    numberOfPrimaries: 'typing.Union[Nullable, uint]' = None
-    primary1X: 'typing.Optional[uint]' = None
-    primary1Y: 'typing.Optional[uint]' = None
-    primary1Intensity: 'typing.Union[None, Nullable, uint]' = None
-    primary2X: 'typing.Optional[uint]' = None
-    primary2Y: 'typing.Optional[uint]' = None
-    primary2Intensity: 'typing.Union[None, Nullable, uint]' = None
-    primary3X: 'typing.Optional[uint]' = None
-    primary3Y: 'typing.Optional[uint]' = None
-    primary3Intensity: 'typing.Union[None, Nullable, uint]' = None
-    primary4X: 'typing.Optional[uint]' = None
-    primary4Y: 'typing.Optional[uint]' = None
-    primary4Intensity: 'typing.Union[None, Nullable, uint]' = None
-    primary5X: 'typing.Optional[uint]' = None
-    primary5Y: 'typing.Optional[uint]' = None
-    primary5Intensity: 'typing.Union[None, Nullable, uint]' = None
-    primary6X: 'typing.Optional[uint]' = None
-    primary6Y: 'typing.Optional[uint]' = None
-    primary6Intensity: 'typing.Union[None, Nullable, uint]' = None
-    whitePointX: 'typing.Optional[uint]' = None
-    whitePointY: 'typing.Optional[uint]' = None
-    colorPointRX: 'typing.Optional[uint]' = None
-    colorPointRY: 'typing.Optional[uint]' = None
-    colorPointRIntensity: 'typing.Union[None, Nullable, uint]' = None
-    colorPointGX: 'typing.Optional[uint]' = None
-    colorPointGY: 'typing.Optional[uint]' = None
-    colorPointGIntensity: 'typing.Union[None, Nullable, uint]' = None
-    colorPointBX: 'typing.Optional[uint]' = None
-    colorPointBY: 'typing.Optional[uint]' = None
-    colorPointBIntensity: 'typing.Union[None, Nullable, uint]' = None
-    enhancedCurrentHue: 'typing.Optional[uint]' = None
-    enhancedColorMode: 'ColorControl.Enums.EnhancedColorModeEnum' = None
-    colorLoopActive: 'typing.Optional[uint]' = None
-    colorLoopDirection: 'typing.Optional[uint]' = None
-    colorLoopTime: 'typing.Optional[uint]' = None
-    colorLoopStartEnhancedHue: 'typing.Optional[uint]' = None
-    colorLoopStoredEnhancedHue: 'typing.Optional[uint]' = None
-    colorCapabilities: 'uint' = None
-    colorTempPhysicalMinMireds: 'typing.Optional[uint]' = None
-    colorTempPhysicalMaxMireds: 'typing.Optional[uint]' = None
-    coupleColorTempToLevelMinMireds: 'typing.Optional[uint]' = None
-    startUpColorTemperatureMireds: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    currentHue: typing.Optional[uint] = None
+    currentSaturation: typing.Optional[uint] = None
+    remainingTime: typing.Optional[uint] = None
+    currentX: typing.Optional[uint] = None
+    currentY: typing.Optional[uint] = None
+    driftCompensation: typing.Optional[ColorControl.Enums.DriftCompensationEnum] = None
+    compensationText: typing.Optional[str] = None
+    colorTemperatureMireds: typing.Optional[uint] = None
+    colorMode: ColorControl.Enums.ColorModeEnum = 0
+    options: uint = 0
+    numberOfPrimaries: typing.Union[Nullable, uint] = NullValue
+    primary1X: typing.Optional[uint] = None
+    primary1Y: typing.Optional[uint] = None
+    primary1Intensity: typing.Union[None, Nullable, uint] = None
+    primary2X: typing.Optional[uint] = None
+    primary2Y: typing.Optional[uint] = None
+    primary2Intensity: typing.Union[None, Nullable, uint] = None
+    primary3X: typing.Optional[uint] = None
+    primary3Y: typing.Optional[uint] = None
+    primary3Intensity: typing.Union[None, Nullable, uint] = None
+    primary4X: typing.Optional[uint] = None
+    primary4Y: typing.Optional[uint] = None
+    primary4Intensity: typing.Union[None, Nullable, uint] = None
+    primary5X: typing.Optional[uint] = None
+    primary5Y: typing.Optional[uint] = None
+    primary5Intensity: typing.Union[None, Nullable, uint] = None
+    primary6X: typing.Optional[uint] = None
+    primary6Y: typing.Optional[uint] = None
+    primary6Intensity: typing.Union[None, Nullable, uint] = None
+    whitePointX: typing.Optional[uint] = None
+    whitePointY: typing.Optional[uint] = None
+    colorPointRX: typing.Optional[uint] = None
+    colorPointRY: typing.Optional[uint] = None
+    colorPointRIntensity: typing.Union[None, Nullable, uint] = None
+    colorPointGX: typing.Optional[uint] = None
+    colorPointGY: typing.Optional[uint] = None
+    colorPointGIntensity: typing.Union[None, Nullable, uint] = None
+    colorPointBX: typing.Optional[uint] = None
+    colorPointBY: typing.Optional[uint] = None
+    colorPointBIntensity: typing.Union[None, Nullable, uint] = None
+    enhancedCurrentHue: typing.Optional[uint] = None
+    enhancedColorMode: ColorControl.Enums.EnhancedColorModeEnum = 0
+    colorLoopActive: typing.Optional[uint] = None
+    colorLoopDirection: typing.Optional[uint] = None
+    colorLoopTime: typing.Optional[uint] = None
+    colorLoopStartEnhancedHue: typing.Optional[uint] = None
+    colorLoopStoredEnhancedHue: typing.Optional[uint] = None
+    colorCapabilities: uint = 0
+    colorTempPhysicalMinMireds: typing.Optional[uint] = None
+    colorTempPhysicalMaxMireds: typing.Optional[uint] = None
+    coupleColorTempToLevelMinMireds: typing.Optional[uint] = None
+    startUpColorTemperatureMireds: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ColorLoopActionEnum(MatterIntEnum):
@@ -34481,7 +34482,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34494,18 +34495,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            hue: 'uint' = 0
-            direction: 'ColorControl.Enums.DirectionEnum' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            hue: uint = 0
+            direction: ColorControl.Enums.DirectionEnum = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveHue(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34517,17 +34518,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            moveMode: 'ColorControl.Enums.MoveModeEnum' = 0
-            rate: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            moveMode: ColorControl.Enums.MoveModeEnum = 0
+            rate: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class StepHue(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34540,18 +34541,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            stepMode: 'ColorControl.Enums.StepModeEnum' = 0
-            stepSize: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            stepMode: ColorControl.Enums.StepModeEnum = 0
+            stepSize: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveToSaturation(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34563,17 +34564,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            saturation: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            saturation: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveSaturation(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34585,17 +34586,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            moveMode: 'ColorControl.Enums.MoveModeEnum' = 0
-            rate: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            moveMode: ColorControl.Enums.MoveModeEnum = 0
+            rate: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class StepSaturation(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34608,18 +34609,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            stepMode: 'ColorControl.Enums.StepModeEnum' = 0
-            stepSize: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            stepMode: ColorControl.Enums.StepModeEnum = 0
+            stepSize: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveToHueAndSaturation(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34632,18 +34633,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            hue: 'uint' = 0
-            saturation: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            hue: uint = 0
+            saturation: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveToColor(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34656,18 +34657,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            colorX: 'uint' = 0
-            colorY: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            colorX: uint = 0
+            colorY: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveColor(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34679,17 +34680,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            rateX: 'int' = 0
-            rateY: 'int' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            rateX: int = 0
+            rateY: int = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class StepColor(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000009
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34702,18 +34703,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            stepX: 'int' = 0
-            stepY: 'int' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            stepX: int = 0
+            stepY: int = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveToColorTemperature(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x0000000A
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34725,17 +34726,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            colorTemperatureMireds: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            colorTemperatureMireds: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class EnhancedMoveToHue(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000040
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34748,18 +34749,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            enhancedHue: 'uint' = 0
-            direction: 'ColorControl.Enums.DirectionEnum' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            enhancedHue: uint = 0
+            direction: ColorControl.Enums.DirectionEnum = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class EnhancedMoveHue(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000041
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34771,17 +34772,17 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=3, Type=uint),
                     ])
 
-            moveMode: 'ColorControl.Enums.MoveModeEnum' = 0
-            rate: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            moveMode: ColorControl.Enums.MoveModeEnum = 0
+            rate: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class EnhancedStepHue(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000042
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34794,18 +34795,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            stepMode: 'ColorControl.Enums.StepModeEnum' = 0
-            stepSize: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            stepMode: ColorControl.Enums.StepModeEnum = 0
+            stepSize: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class EnhancedMoveToHueAndSaturation(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000043
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34818,18 +34819,18 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=4, Type=uint),
                     ])
 
-            enhancedHue: 'uint' = 0
-            saturation: 'uint' = 0
-            transitionTime: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            enhancedHue: uint = 0
+            saturation: uint = 0
+            transitionTime: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class ColorLoopSet(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000044
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34844,20 +34845,20 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=6, Type=uint),
                     ])
 
-            updateFlags: 'uint' = 0
-            action: 'ColorControl.Enums.ColorLoopActionEnum' = 0
-            direction: 'ColorControl.Enums.ColorLoopDirectionEnum' = 0
-            time: 'uint' = 0
-            startHue: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            updateFlags: uint = 0
+            action: ColorControl.Enums.ColorLoopActionEnum = 0
+            direction: ColorControl.Enums.ColorLoopDirectionEnum = 0
+            time: uint = 0
+            startHue: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class StopMoveStep(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x00000047
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34867,15 +34868,15 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=1, Type=uint),
                     ])
 
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class MoveColorTemperature(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x0000004B
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34889,19 +34890,19 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=5, Type=uint),
                     ])
 
-            moveMode: 'ColorControl.Enums.MoveModeEnum' = 0
-            rate: 'uint' = 0
-            colorTemperatureMinimumMireds: 'uint' = 0
-            colorTemperatureMaximumMireds: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            moveMode: ColorControl.Enums.MoveModeEnum = 0
+            rate: uint = 0
+            colorTemperatureMinimumMireds: uint = 0
+            colorTemperatureMaximumMireds: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
         @dataclass
         class StepColorTemperature(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000300
             command_id: typing.ClassVar[int] = 0x0000004C
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -34916,13 +34917,13 @@
                         ClusterObjectFieldDescriptor(Label="optionsOverride", Tag=6, Type=uint),
                     ])
 
-            stepMode: 'ColorControl.Enums.StepModeEnum' = 0
-            stepSize: 'uint' = 0
-            transitionTime: 'uint' = 0
-            colorTemperatureMinimumMireds: 'uint' = 0
-            colorTemperatureMaximumMireds: 'uint' = 0
-            optionsMask: 'uint' = 0
-            optionsOverride: 'uint' = 0
+            stepMode: ColorControl.Enums.StepModeEnum = 0
+            stepSize: uint = 0
+            transitionTime: uint = 0
+            colorTemperatureMinimumMireds: uint = 0
+            colorTemperatureMaximumMireds: uint = 0
+            optionsMask: uint = 0
+            optionsOverride: uint = 0
 
     class Attributes:
         @dataclass
@@ -34939,7 +34940,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CurrentSaturation(ClusterAttributeDescriptor):
@@ -34955,7 +34956,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RemainingTime(ClusterAttributeDescriptor):
@@ -34971,7 +34972,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CurrentX(ClusterAttributeDescriptor):
@@ -34987,7 +34988,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CurrentY(ClusterAttributeDescriptor):
@@ -35003,7 +35004,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class DriftCompensation(ClusterAttributeDescriptor):
@@ -35019,7 +35020,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[ColorControl.Enums.DriftCompensationEnum])
 
-            value: 'typing.Optional[ColorControl.Enums.DriftCompensationEnum]' = None
+            value: typing.Optional[ColorControl.Enums.DriftCompensationEnum] = None
 
         @dataclass
         class CompensationText(ClusterAttributeDescriptor):
@@ -35035,7 +35036,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ColorTemperatureMireds(ClusterAttributeDescriptor):
@@ -35051,7 +35052,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorMode(ClusterAttributeDescriptor):
@@ -35067,7 +35068,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ColorControl.Enums.ColorModeEnum)
 
-            value: 'ColorControl.Enums.ColorModeEnum' = 0
+            value: ColorControl.Enums.ColorModeEnum = 0
 
         @dataclass
         class Options(ClusterAttributeDescriptor):
@@ -35083,7 +35084,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class NumberOfPrimaries(ClusterAttributeDescriptor):
@@ -35099,7 +35100,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class Primary1X(ClusterAttributeDescriptor):
@@ -35115,7 +35116,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary1Y(ClusterAttributeDescriptor):
@@ -35131,7 +35132,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary1Intensity(ClusterAttributeDescriptor):
@@ -35147,7 +35148,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Primary2X(ClusterAttributeDescriptor):
@@ -35163,7 +35164,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary2Y(ClusterAttributeDescriptor):
@@ -35179,7 +35180,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary2Intensity(ClusterAttributeDescriptor):
@@ -35195,7 +35196,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Primary3X(ClusterAttributeDescriptor):
@@ -35211,7 +35212,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary3Y(ClusterAttributeDescriptor):
@@ -35227,7 +35228,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary3Intensity(ClusterAttributeDescriptor):
@@ -35243,7 +35244,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Primary4X(ClusterAttributeDescriptor):
@@ -35259,7 +35260,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary4Y(ClusterAttributeDescriptor):
@@ -35275,7 +35276,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary4Intensity(ClusterAttributeDescriptor):
@@ -35291,7 +35292,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Primary5X(ClusterAttributeDescriptor):
@@ -35307,7 +35308,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary5Y(ClusterAttributeDescriptor):
@@ -35323,7 +35324,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary5Intensity(ClusterAttributeDescriptor):
@@ -35339,7 +35340,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Primary6X(ClusterAttributeDescriptor):
@@ -35355,7 +35356,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary6Y(ClusterAttributeDescriptor):
@@ -35371,7 +35372,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Primary6Intensity(ClusterAttributeDescriptor):
@@ -35387,7 +35388,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class WhitePointX(ClusterAttributeDescriptor):
@@ -35403,7 +35404,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class WhitePointY(ClusterAttributeDescriptor):
@@ -35419,7 +35420,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorPointRX(ClusterAttributeDescriptor):
@@ -35435,7 +35436,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorPointRY(ClusterAttributeDescriptor):
@@ -35451,7 +35452,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorPointRIntensity(ClusterAttributeDescriptor):
@@ -35467,7 +35468,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ColorPointGX(ClusterAttributeDescriptor):
@@ -35483,7 +35484,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorPointGY(ClusterAttributeDescriptor):
@@ -35499,7 +35500,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorPointGIntensity(ClusterAttributeDescriptor):
@@ -35515,7 +35516,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ColorPointBX(ClusterAttributeDescriptor):
@@ -35531,7 +35532,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorPointBY(ClusterAttributeDescriptor):
@@ -35547,7 +35548,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorPointBIntensity(ClusterAttributeDescriptor):
@@ -35563,7 +35564,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class EnhancedCurrentHue(ClusterAttributeDescriptor):
@@ -35579,7 +35580,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class EnhancedColorMode(ClusterAttributeDescriptor):
@@ -35595,7 +35596,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ColorControl.Enums.EnhancedColorModeEnum)
 
-            value: 'ColorControl.Enums.EnhancedColorModeEnum' = 0
+            value: ColorControl.Enums.EnhancedColorModeEnum = 0
 
         @dataclass
         class ColorLoopActive(ClusterAttributeDescriptor):
@@ -35611,7 +35612,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorLoopDirection(ClusterAttributeDescriptor):
@@ -35627,7 +35628,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorLoopTime(ClusterAttributeDescriptor):
@@ -35643,7 +35644,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorLoopStartEnhancedHue(ClusterAttributeDescriptor):
@@ -35659,7 +35660,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorLoopStoredEnhancedHue(ClusterAttributeDescriptor):
@@ -35675,7 +35676,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorCapabilities(ClusterAttributeDescriptor):
@@ -35691,7 +35692,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ColorTempPhysicalMinMireds(ClusterAttributeDescriptor):
@@ -35707,7 +35708,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ColorTempPhysicalMaxMireds(ClusterAttributeDescriptor):
@@ -35723,7 +35724,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class CoupleColorTempToLevelMinMireds(ClusterAttributeDescriptor):
@@ -35739,7 +35740,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class StartUpColorTemperatureMireds(ClusterAttributeDescriptor):
@@ -35755,7 +35756,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -35771,7 +35772,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -35787,7 +35788,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -35803,7 +35804,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -35819,7 +35820,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -35835,7 +35836,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -35851,7 +35852,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -35884,26 +35885,26 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    physicalMinLevel: 'uint' = None
-    physicalMaxLevel: 'uint' = None
-    ballastStatus: 'typing.Optional[uint]' = None
-    minLevel: 'uint' = None
-    maxLevel: 'uint' = None
-    intrinsicBallastFactor: 'typing.Union[None, Nullable, uint]' = None
-    ballastFactorAdjustment: 'typing.Union[None, Nullable, uint]' = None
-    lampQuantity: 'uint' = None
-    lampType: 'typing.Optional[str]' = None
-    lampManufacturer: 'typing.Optional[str]' = None
-    lampRatedHours: 'typing.Union[None, Nullable, uint]' = None
-    lampBurnHours: 'typing.Union[None, Nullable, uint]' = None
-    lampAlarmMode: 'typing.Optional[uint]' = None
-    lampBurnHoursTripPoint: 'typing.Union[None, Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    physicalMinLevel: uint = 0
+    physicalMaxLevel: uint = 0
+    ballastStatus: typing.Optional[uint] = None
+    minLevel: uint = 0
+    maxLevel: uint = 0
+    intrinsicBallastFactor: typing.Union[None, Nullable, uint] = None
+    ballastFactorAdjustment: typing.Union[None, Nullable, uint] = None
+    lampQuantity: uint = 0
+    lampType: typing.Optional[str] = None
+    lampManufacturer: typing.Optional[str] = None
+    lampRatedHours: typing.Union[None, Nullable, uint] = None
+    lampBurnHours: typing.Union[None, Nullable, uint] = None
+    lampAlarmMode: typing.Optional[uint] = None
+    lampBurnHoursTripPoint: typing.Union[None, Nullable, uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class BallastStatusBitmap(IntFlag):
@@ -35928,7 +35929,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class PhysicalMaxLevel(ClusterAttributeDescriptor):
@@ -35944,7 +35945,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class BallastStatus(ClusterAttributeDescriptor):
@@ -35960,7 +35961,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MinLevel(ClusterAttributeDescriptor):
@@ -35976,7 +35977,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class MaxLevel(ClusterAttributeDescriptor):
@@ -35992,7 +35993,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class IntrinsicBallastFactor(ClusterAttributeDescriptor):
@@ -36008,7 +36009,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class BallastFactorAdjustment(ClusterAttributeDescriptor):
@@ -36024,7 +36025,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class LampQuantity(ClusterAttributeDescriptor):
@@ -36040,7 +36041,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class LampType(ClusterAttributeDescriptor):
@@ -36056,7 +36057,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class LampManufacturer(ClusterAttributeDescriptor):
@@ -36072,7 +36073,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class LampRatedHours(ClusterAttributeDescriptor):
@@ -36088,7 +36089,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class LampBurnHours(ClusterAttributeDescriptor):
@@ -36104,7 +36105,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class LampAlarmMode(ClusterAttributeDescriptor):
@@ -36120,7 +36121,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class LampBurnHoursTripPoint(ClusterAttributeDescriptor):
@@ -36136,7 +36137,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -36152,7 +36153,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -36168,7 +36169,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -36184,7 +36185,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -36200,7 +36201,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -36216,7 +36217,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -36232,7 +36233,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -36256,17 +36257,17 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[Nullable, uint]' = None
-    minMeasuredValue: 'typing.Union[Nullable, uint]' = None
-    maxMeasuredValue: 'typing.Union[Nullable, uint]' = None
-    tolerance: 'typing.Optional[uint]' = None
-    lightSensorType: 'typing.Union[None, Nullable, IlluminanceMeasurement.Enums.LightSensorTypeEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[Nullable, uint] = NullValue
+    minMeasuredValue: typing.Union[Nullable, uint] = NullValue
+    maxMeasuredValue: typing.Union[Nullable, uint] = NullValue
+    tolerance: typing.Optional[uint] = None
+    lightSensorType: typing.Union[None, Nullable, IlluminanceMeasurement.Enums.LightSensorTypeEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LightSensorTypeEnum(MatterIntEnum):
@@ -36293,7 +36294,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -36309,7 +36310,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -36325,7 +36326,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class Tolerance(ClusterAttributeDescriptor):
@@ -36341,7 +36342,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class LightSensorType(ClusterAttributeDescriptor):
@@ -36357,7 +36358,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, IlluminanceMeasurement.Enums.LightSensorTypeEnum])
 
-            value: 'typing.Union[None, Nullable, IlluminanceMeasurement.Enums.LightSensorTypeEnum]' = None
+            value: typing.Union[None, Nullable, IlluminanceMeasurement.Enums.LightSensorTypeEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -36373,7 +36374,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -36389,7 +36390,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -36405,7 +36406,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -36421,7 +36422,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -36437,7 +36438,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -36453,7 +36454,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -36476,16 +36477,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[Nullable, int]' = None
-    minMeasuredValue: 'typing.Union[Nullable, int]' = None
-    maxMeasuredValue: 'typing.Union[Nullable, int]' = None
-    tolerance: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[Nullable, int] = NullValue
+    minMeasuredValue: typing.Union[Nullable, int] = NullValue
+    maxMeasuredValue: typing.Union[Nullable, int] = NullValue
+    tolerance: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -36502,7 +36503,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -36518,7 +36519,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -36534,7 +36535,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class Tolerance(ClusterAttributeDescriptor):
@@ -36550,7 +36551,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -36566,7 +36567,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -36582,7 +36583,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -36598,7 +36599,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -36614,7 +36615,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -36630,7 +36631,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -36646,7 +36647,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -36674,21 +36675,21 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[Nullable, int]' = None
-    minMeasuredValue: 'typing.Union[Nullable, int]' = None
-    maxMeasuredValue: 'typing.Union[Nullable, int]' = None
-    tolerance: 'typing.Optional[uint]' = None
-    scaledValue: 'typing.Union[None, Nullable, int]' = None
-    minScaledValue: 'typing.Union[None, Nullable, int]' = None
-    maxScaledValue: 'typing.Union[None, Nullable, int]' = None
-    scaledTolerance: 'typing.Optional[uint]' = None
-    scale: 'typing.Optional[int]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[Nullable, int] = NullValue
+    minMeasuredValue: typing.Union[Nullable, int] = NullValue
+    maxMeasuredValue: typing.Union[Nullable, int] = NullValue
+    tolerance: typing.Optional[uint] = None
+    scaledValue: typing.Union[None, Nullable, int] = None
+    minScaledValue: typing.Union[None, Nullable, int] = None
+    maxScaledValue: typing.Union[None, Nullable, int] = None
+    scaledTolerance: typing.Optional[uint] = None
+    scale: typing.Optional[int] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -36709,7 +36710,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -36725,7 +36726,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -36741,7 +36742,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class Tolerance(ClusterAttributeDescriptor):
@@ -36757,7 +36758,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ScaledValue(ClusterAttributeDescriptor):
@@ -36773,7 +36774,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class MinScaledValue(ClusterAttributeDescriptor):
@@ -36789,7 +36790,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class MaxScaledValue(ClusterAttributeDescriptor):
@@ -36805,7 +36806,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, int])
 
-            value: 'typing.Union[None, Nullable, int]' = None
+            value: typing.Union[None, Nullable, int] = None
 
         @dataclass
         class ScaledTolerance(ClusterAttributeDescriptor):
@@ -36821,7 +36822,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Scale(ClusterAttributeDescriptor):
@@ -36837,7 +36838,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[int])
 
-            value: 'typing.Optional[int]' = None
+            value: typing.Optional[int] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -36853,7 +36854,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -36869,7 +36870,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -36885,7 +36886,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -36901,7 +36902,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -36917,7 +36918,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -36933,7 +36934,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -36956,16 +36957,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[Nullable, uint]' = None
-    minMeasuredValue: 'typing.Union[Nullable, uint]' = None
-    maxMeasuredValue: 'typing.Union[Nullable, uint]' = None
-    tolerance: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[Nullable, uint] = NullValue
+    minMeasuredValue: typing.Union[Nullable, uint] = NullValue
+    maxMeasuredValue: typing.Union[Nullable, uint] = NullValue
+    tolerance: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -36982,7 +36983,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -36998,7 +36999,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -37014,7 +37015,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class Tolerance(ClusterAttributeDescriptor):
@@ -37030,7 +37031,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -37046,7 +37047,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -37062,7 +37063,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -37078,7 +37079,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -37094,7 +37095,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -37110,7 +37111,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -37126,7 +37127,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -37149,16 +37150,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[Nullable, uint]' = None
-    minMeasuredValue: 'typing.Union[Nullable, uint]' = None
-    maxMeasuredValue: 'typing.Union[Nullable, uint]' = None
-    tolerance: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[Nullable, uint] = NullValue
+    minMeasuredValue: typing.Union[Nullable, uint] = NullValue
+    maxMeasuredValue: typing.Union[Nullable, uint] = NullValue
+    tolerance: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -37175,7 +37176,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -37191,7 +37192,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -37207,7 +37208,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class Tolerance(ClusterAttributeDescriptor):
@@ -37223,7 +37224,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -37239,7 +37240,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -37255,7 +37256,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -37271,7 +37272,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -37287,7 +37288,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -37303,7 +37304,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -37319,7 +37320,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -37352,26 +37353,26 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    occupancy: 'uint' = None
-    occupancySensorType: 'OccupancySensing.Enums.OccupancySensorTypeEnum' = None
-    occupancySensorTypeBitmap: 'uint' = None
-    holdTime: 'typing.Optional[uint]' = None
-    holdTimeLimits: 'typing.Optional[OccupancySensing.Structs.HoldTimeLimitsStruct]' = None
-    PIROccupiedToUnoccupiedDelay: 'typing.Optional[uint]' = None
-    PIRUnoccupiedToOccupiedDelay: 'typing.Optional[uint]' = None
-    PIRUnoccupiedToOccupiedThreshold: 'typing.Optional[uint]' = None
-    ultrasonicOccupiedToUnoccupiedDelay: 'typing.Optional[uint]' = None
-    ultrasonicUnoccupiedToOccupiedDelay: 'typing.Optional[uint]' = None
-    ultrasonicUnoccupiedToOccupiedThreshold: 'typing.Optional[uint]' = None
-    physicalContactOccupiedToUnoccupiedDelay: 'typing.Optional[uint]' = None
-    physicalContactUnoccupiedToOccupiedDelay: 'typing.Optional[uint]' = None
-    physicalContactUnoccupiedToOccupiedThreshold: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    occupancy: uint = 0
+    occupancySensorType: OccupancySensing.Enums.OccupancySensorTypeEnum = 0
+    occupancySensorTypeBitmap: uint = 0
+    holdTime: typing.Optional[uint] = None
+    holdTimeLimits: typing.Optional[OccupancySensing.Structs.HoldTimeLimitsStruct] = None
+    PIROccupiedToUnoccupiedDelay: typing.Optional[uint] = None
+    PIRUnoccupiedToOccupiedDelay: typing.Optional[uint] = None
+    PIRUnoccupiedToOccupiedThreshold: typing.Optional[uint] = None
+    ultrasonicOccupiedToUnoccupiedDelay: typing.Optional[uint] = None
+    ultrasonicUnoccupiedToOccupiedDelay: typing.Optional[uint] = None
+    ultrasonicUnoccupiedToOccupiedThreshold: typing.Optional[uint] = None
+    physicalContactOccupiedToUnoccupiedDelay: typing.Optional[uint] = None
+    physicalContactUnoccupiedToOccupiedDelay: typing.Optional[uint] = None
+    physicalContactUnoccupiedToOccupiedThreshold: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class OccupancySensorTypeEnum(MatterIntEnum):
@@ -37435,7 +37436,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class OccupancySensorType(ClusterAttributeDescriptor):
@@ -37451,7 +37452,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=OccupancySensing.Enums.OccupancySensorTypeEnum)
 
-            value: 'OccupancySensing.Enums.OccupancySensorTypeEnum' = 0
+            value: OccupancySensing.Enums.OccupancySensorTypeEnum = 0
 
         @dataclass
         class OccupancySensorTypeBitmap(ClusterAttributeDescriptor):
@@ -37467,7 +37468,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class HoldTime(ClusterAttributeDescriptor):
@@ -37483,7 +37484,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class HoldTimeLimits(ClusterAttributeDescriptor):
@@ -37499,7 +37500,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[OccupancySensing.Structs.HoldTimeLimitsStruct])
 
-            value: 'typing.Optional[OccupancySensing.Structs.HoldTimeLimitsStruct]' = None
+            value: typing.Optional[OccupancySensing.Structs.HoldTimeLimitsStruct] = None
 
         @dataclass
         class PIROccupiedToUnoccupiedDelay(ClusterAttributeDescriptor):
@@ -37515,7 +37516,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PIRUnoccupiedToOccupiedDelay(ClusterAttributeDescriptor):
@@ -37531,7 +37532,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PIRUnoccupiedToOccupiedThreshold(ClusterAttributeDescriptor):
@@ -37547,7 +37548,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class UltrasonicOccupiedToUnoccupiedDelay(ClusterAttributeDescriptor):
@@ -37563,7 +37564,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class UltrasonicUnoccupiedToOccupiedDelay(ClusterAttributeDescriptor):
@@ -37579,7 +37580,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class UltrasonicUnoccupiedToOccupiedThreshold(ClusterAttributeDescriptor):
@@ -37595,7 +37596,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PhysicalContactOccupiedToUnoccupiedDelay(ClusterAttributeDescriptor):
@@ -37611,7 +37612,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PhysicalContactUnoccupiedToOccupiedDelay(ClusterAttributeDescriptor):
@@ -37627,7 +37628,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class PhysicalContactUnoccupiedToOccupiedThreshold(ClusterAttributeDescriptor):
@@ -37643,7 +37644,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -37659,7 +37660,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -37675,7 +37676,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -37691,7 +37692,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -37707,7 +37708,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -37723,7 +37724,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -37739,7 +37740,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -37759,7 +37760,7 @@
                         ClusterObjectFieldDescriptor(Label="occupancy", Tag=0, Type=uint),
                     ])
 
-            occupancy: 'uint' = 0
+            occupancy: uint = 0
 
 
 @dataclass
@@ -37789,23 +37790,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -37869,7 +37870,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -37885,7 +37886,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -37901,7 +37902,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -37917,7 +37918,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -37933,7 +37934,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -37949,7 +37950,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -37965,7 +37966,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -37981,7 +37982,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -37997,7 +37998,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -38013,7 +38014,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -38029,7 +38030,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[CarbonMonoxideConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -38045,7 +38046,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -38061,7 +38062,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -38077,7 +38078,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -38093,7 +38094,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -38109,7 +38110,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -38125,7 +38126,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -38155,23 +38156,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -38235,7 +38236,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -38251,7 +38252,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -38267,7 +38268,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -38283,7 +38284,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -38299,7 +38300,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -38315,7 +38316,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -38331,7 +38332,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -38347,7 +38348,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -38363,7 +38364,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -38379,7 +38380,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -38395,7 +38396,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[CarbonDioxideConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -38411,7 +38412,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -38427,7 +38428,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -38443,7 +38444,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -38459,7 +38460,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -38475,7 +38476,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -38491,7 +38492,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -38521,23 +38522,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -38601,7 +38602,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -38617,7 +38618,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -38633,7 +38634,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -38649,7 +38650,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -38665,7 +38666,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -38681,7 +38682,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -38697,7 +38698,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -38713,7 +38714,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -38729,7 +38730,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -38745,7 +38746,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -38761,7 +38762,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[NitrogenDioxideConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -38777,7 +38778,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -38793,7 +38794,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -38809,7 +38810,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -38825,7 +38826,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -38841,7 +38842,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -38857,7 +38858,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -38887,23 +38888,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[OzoneConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[OzoneConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -38967,7 +38968,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -38983,7 +38984,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -38999,7 +39000,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -39015,7 +39016,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -39031,7 +39032,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -39047,7 +39048,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -39063,7 +39064,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -39079,7 +39080,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -39095,7 +39096,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -39111,7 +39112,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[OzoneConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -39127,7 +39128,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[OzoneConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[OzoneConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[OzoneConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -39143,7 +39144,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -39159,7 +39160,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -39175,7 +39176,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -39191,7 +39192,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -39207,7 +39208,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -39223,7 +39224,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -39253,23 +39254,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[Pm25ConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[Pm25ConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -39333,7 +39334,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -39349,7 +39350,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -39365,7 +39366,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -39381,7 +39382,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -39397,7 +39398,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -39413,7 +39414,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -39429,7 +39430,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -39445,7 +39446,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -39461,7 +39462,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -39477,7 +39478,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[Pm25ConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -39493,7 +39494,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm25ConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[Pm25ConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[Pm25ConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -39509,7 +39510,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -39525,7 +39526,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -39541,7 +39542,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -39557,7 +39558,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -39573,7 +39574,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -39589,7 +39590,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -39619,23 +39620,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[FormaldehydeConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[FormaldehydeConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -39699,7 +39700,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -39715,7 +39716,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -39731,7 +39732,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -39747,7 +39748,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -39763,7 +39764,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -39779,7 +39780,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -39795,7 +39796,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -39811,7 +39812,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -39827,7 +39828,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -39843,7 +39844,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[FormaldehydeConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -39859,7 +39860,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[FormaldehydeConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[FormaldehydeConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[FormaldehydeConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -39875,7 +39876,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -39891,7 +39892,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -39907,7 +39908,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -39923,7 +39924,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -39939,7 +39940,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -39955,7 +39956,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -39985,23 +39986,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[Pm1ConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[Pm1ConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -40065,7 +40066,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -40081,7 +40082,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -40097,7 +40098,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -40113,7 +40114,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -40129,7 +40130,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -40145,7 +40146,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -40161,7 +40162,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -40177,7 +40178,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -40193,7 +40194,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -40209,7 +40210,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[Pm1ConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -40225,7 +40226,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm1ConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[Pm1ConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[Pm1ConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -40241,7 +40242,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -40257,7 +40258,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -40273,7 +40274,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -40289,7 +40290,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -40305,7 +40306,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -40321,7 +40322,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -40351,23 +40352,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[Pm10ConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[Pm10ConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -40431,7 +40432,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -40447,7 +40448,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -40463,7 +40464,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -40479,7 +40480,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -40495,7 +40496,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -40511,7 +40512,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -40527,7 +40528,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -40543,7 +40544,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -40559,7 +40560,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -40575,7 +40576,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[Pm10ConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -40591,7 +40592,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Pm10ConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[Pm10ConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[Pm10ConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -40607,7 +40608,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -40623,7 +40624,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -40639,7 +40640,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -40655,7 +40656,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -40671,7 +40672,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -40687,7 +40688,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -40717,23 +40718,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -40797,7 +40798,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -40813,7 +40814,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -40829,7 +40830,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -40845,7 +40846,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -40861,7 +40862,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -40877,7 +40878,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -40893,7 +40894,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -40909,7 +40910,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -40925,7 +40926,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -40941,7 +40942,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -40957,7 +40958,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[TotalVolatileOrganicCompoundsConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -40973,7 +40974,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -40989,7 +40990,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -41005,7 +41006,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -41021,7 +41022,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -41037,7 +41038,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -41053,7 +41054,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -41083,23 +41084,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    measuredValue: 'typing.Union[None, Nullable, float32]' = None
-    minMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    maxMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    peakMeasuredValueWindow: 'typing.Optional[uint]' = None
-    averageMeasuredValue: 'typing.Union[None, Nullable, float32]' = None
-    averageMeasuredValueWindow: 'typing.Optional[uint]' = None
-    uncertainty: 'typing.Optional[float32]' = None
-    measurementUnit: 'typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
-    measurementMedium: 'typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
-    levelValue: 'typing.Optional[RadonConcentrationMeasurement.Enums.LevelValueEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    measuredValue: typing.Union[None, Nullable, float32] = None
+    minMeasuredValue: typing.Union[None, Nullable, float32] = None
+    maxMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValue: typing.Union[None, Nullable, float32] = None
+    peakMeasuredValueWindow: typing.Optional[uint] = None
+    averageMeasuredValue: typing.Union[None, Nullable, float32] = None
+    averageMeasuredValueWindow: typing.Optional[uint] = None
+    uncertainty: typing.Optional[float32] = None
+    measurementUnit: typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
+    measurementMedium: typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
+    levelValue: typing.Optional[RadonConcentrationMeasurement.Enums.LevelValueEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class LevelValueEnum(MatterIntEnum):
@@ -41163,7 +41164,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MinMeasuredValue(ClusterAttributeDescriptor):
@@ -41179,7 +41180,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class MaxMeasuredValue(ClusterAttributeDescriptor):
@@ -41195,7 +41196,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValue(ClusterAttributeDescriptor):
@@ -41211,7 +41212,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class PeakMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -41227,7 +41228,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class AverageMeasuredValue(ClusterAttributeDescriptor):
@@ -41243,7 +41244,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, float32])
 
-            value: 'typing.Union[None, Nullable, float32]' = None
+            value: typing.Union[None, Nullable, float32] = None
 
         @dataclass
         class AverageMeasuredValueWindow(ClusterAttributeDescriptor):
@@ -41259,7 +41260,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Uncertainty(ClusterAttributeDescriptor):
@@ -41275,7 +41276,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class MeasurementUnit(ClusterAttributeDescriptor):
@@ -41291,7 +41292,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementUnitEnum])
 
-            value: 'typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementUnitEnum]' = None
+            value: typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementUnitEnum] = None
 
         @dataclass
         class MeasurementMedium(ClusterAttributeDescriptor):
@@ -41307,7 +41308,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementMediumEnum])
 
-            value: 'typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementMediumEnum]' = None
+            value: typing.Optional[RadonConcentrationMeasurement.Enums.MeasurementMediumEnum] = None
 
         @dataclass
         class LevelValue(ClusterAttributeDescriptor):
@@ -41323,7 +41324,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[RadonConcentrationMeasurement.Enums.LevelValueEnum])
 
-            value: 'typing.Optional[RadonConcentrationMeasurement.Enums.LevelValueEnum]' = None
+            value: typing.Optional[RadonConcentrationMeasurement.Enums.LevelValueEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -41339,7 +41340,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -41355,7 +41356,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -41371,7 +41372,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -41387,7 +41388,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -41403,7 +41404,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -41419,7 +41420,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -41440,14 +41441,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    ssid: 'typing.Union[Nullable, bytes]' = None
-    passphraseSurrogate: 'typing.Union[Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    ssid: typing.Union[Nullable, bytes] = NullValue
+    passphraseSurrogate: typing.Union[Nullable, uint] = NullValue
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Commands:
         @dataclass
@@ -41468,7 +41469,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000451
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -41477,7 +41478,7 @@
                         ClusterObjectFieldDescriptor(Label="passphrase", Tag=0, Type=bytes),
                     ])
 
-            passphrase: 'bytes' = b""
+            passphrase: bytes = b""
 
     class Attributes:
         @dataclass
@@ -41494,7 +41495,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes])
 
-            value: 'typing.Union[Nullable, bytes]' = NullValue
+            value: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class PassphraseSurrogate(ClusterAttributeDescriptor):
@@ -41510,7 +41511,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -41526,7 +41527,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -41542,7 +41543,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -41558,7 +41559,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -41574,7 +41575,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -41590,7 +41591,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -41606,7 +41607,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -41631,18 +41632,18 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    borderRouterName: 'str' = None
-    borderAgentID: 'bytes' = None
-    threadVersion: 'uint' = None
-    interfaceEnabled: 'bool' = None
-    activeDatasetTimestamp: 'typing.Union[Nullable, uint]' = None
-    pendingDatasetTimestamp: 'typing.Union[Nullable, uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    borderRouterName: str = ""
+    borderAgentID: bytes = b""
+    threadVersion: uint = 0
+    interfaceEnabled: bool = False
+    activeDatasetTimestamp: typing.Union[Nullable, uint] = NullValue
+    pendingDatasetTimestamp: typing.Union[Nullable, uint] = NullValue
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -41680,7 +41681,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000452
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -41689,14 +41690,14 @@
                         ClusterObjectFieldDescriptor(Label="dataset", Tag=0, Type=bytes),
                     ])
 
-            dataset: 'bytes' = b""
+            dataset: bytes = b""
 
         @dataclass
         class SetActiveDatasetRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000452
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -41706,15 +41707,15 @@
                         ClusterObjectFieldDescriptor(Label="breadcrumb", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            activeDataset: 'bytes' = b""
-            breadcrumb: 'typing.Optional[uint]' = None
+            activeDataset: bytes = b""
+            breadcrumb: typing.Optional[uint] = None
 
         @dataclass
         class SetPendingDatasetRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000452
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -41723,7 +41724,7 @@
                         ClusterObjectFieldDescriptor(Label="pendingDataset", Tag=0, Type=bytes),
                     ])
 
-            pendingDataset: 'bytes' = b""
+            pendingDataset: bytes = b""
 
     class Attributes:
         @dataclass
@@ -41740,7 +41741,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class BorderAgentID(ClusterAttributeDescriptor):
@@ -41756,7 +41757,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bytes)
 
-            value: 'bytes' = b""
+            value: bytes = b""
 
         @dataclass
         class ThreadVersion(ClusterAttributeDescriptor):
@@ -41772,7 +41773,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class InterfaceEnabled(ClusterAttributeDescriptor):
@@ -41788,7 +41789,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class ActiveDatasetTimestamp(ClusterAttributeDescriptor):
@@ -41804,7 +41805,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class PendingDatasetTimestamp(ClusterAttributeDescriptor):
@@ -41820,7 +41821,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -41836,7 +41837,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -41852,7 +41853,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -41868,7 +41869,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -41884,7 +41885,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -41900,7 +41901,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -41916,7 +41917,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -41938,15 +41939,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    preferredExtendedPanID: 'typing.Union[Nullable, bytes]' = None
-    threadNetworks: 'typing.List[ThreadNetworkDirectory.Structs.ThreadNetworkStruct]' = None
-    threadNetworkTableSize: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    preferredExtendedPanID: typing.Union[Nullable, bytes] = NullValue
+    threadNetworks: typing.List[ThreadNetworkDirectory.Structs.ThreadNetworkStruct] = field(default_factory=lambda: [])
+    threadNetworkTableSize: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Structs:
         @dataclass
@@ -41972,7 +41973,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000453
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -41985,14 +41986,14 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            operationalDataset: 'bytes' = b""
+            operationalDataset: bytes = b""
 
         @dataclass
         class RemoveNetwork(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000453
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42005,7 +42006,7 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            extendedPanID: 'bytes' = b""
+            extendedPanID: bytes = b""
 
         @dataclass
         class GetOperationalDataset(ClusterCommand):
@@ -42021,14 +42022,14 @@
                         ClusterObjectFieldDescriptor(Label="extendedPanID", Tag=0, Type=bytes),
                     ])
 
-            extendedPanID: 'bytes' = b""
+            extendedPanID: bytes = b""
 
         @dataclass
         class OperationalDatasetResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000453
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42037,7 +42038,7 @@
                         ClusterObjectFieldDescriptor(Label="operationalDataset", Tag=0, Type=bytes),
                     ])
 
-            operationalDataset: 'bytes' = b""
+            operationalDataset: bytes = b""
 
     class Attributes:
         @dataclass
@@ -42054,7 +42055,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes])
 
-            value: 'typing.Union[Nullable, bytes]' = NullValue
+            value: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class ThreadNetworks(ClusterAttributeDescriptor):
@@ -42070,7 +42071,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ThreadNetworkDirectory.Structs.ThreadNetworkStruct])
 
-            value: 'typing.List[ThreadNetworkDirectory.Structs.ThreadNetworkStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ThreadNetworkDirectory.Structs.ThreadNetworkStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class ThreadNetworkTableSize(ClusterAttributeDescriptor):
@@ -42086,7 +42087,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -42102,7 +42103,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -42118,7 +42119,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -42134,7 +42135,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -42150,7 +42151,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -42166,7 +42167,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -42182,7 +42183,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -42203,14 +42204,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    MACAddress: 'typing.Optional[str]' = None
-    linkLocalAddress: 'typing.Optional[bytes]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    MACAddress: typing.Optional[str] = None
+    linkLocalAddress: typing.Optional[bytes] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Attributes:
         @dataclass
@@ -42227,7 +42228,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class LinkLocalAddress(ClusterAttributeDescriptor):
@@ -42243,7 +42244,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bytes])
 
-            value: 'typing.Optional[bytes]' = None
+            value: typing.Optional[bytes] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -42259,7 +42260,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -42275,7 +42276,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -42291,7 +42292,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -42307,7 +42308,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -42323,7 +42324,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -42339,7 +42340,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -42361,15 +42362,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    channelList: 'typing.Optional[typing.List[Channel.Structs.ChannelInfoStruct]]' = None
-    lineup: 'typing.Union[None, Nullable, Channel.Structs.LineupInfoStruct]' = None
-    currentChannel: 'typing.Union[None, Nullable, Channel.Structs.ChannelInfoStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    channelList: typing.Optional[typing.List[Channel.Structs.ChannelInfoStruct]] = None
+    lineup: typing.Union[None, Nullable, Channel.Structs.LineupInfoStruct] = None
+    currentChannel: typing.Union[None, Nullable, Channel.Structs.ChannelInfoStruct] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ChannelTypeEnum(MatterIntEnum):
@@ -42596,14 +42597,14 @@
                         ClusterObjectFieldDescriptor(Label="match", Tag=0, Type=str),
                     ])
 
-            match: 'str' = ""
+            match: str = ""
 
         @dataclass
         class ChangeChannelResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000504
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42613,15 +42614,15 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'Channel.Enums.StatusEnum' = 0
-            data: 'typing.Optional[str]' = None
+            status: Channel.Enums.StatusEnum = 0
+            data: typing.Optional[str] = None
 
         @dataclass
         class ChangeChannelByNumber(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000504
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42631,15 +42632,15 @@
                         ClusterObjectFieldDescriptor(Label="minorNumber", Tag=1, Type=uint),
                     ])
 
-            majorNumber: 'uint' = 0
-            minorNumber: 'uint' = 0
+            majorNumber: uint = 0
+            minorNumber: uint = 0
 
         @dataclass
         class SkipChannel(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000504
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42648,7 +42649,7 @@
                         ClusterObjectFieldDescriptor(Label="count", Tag=0, Type=int),
                     ])
 
-            count: 'int' = 0
+            count: int = 0
 
         @dataclass
         class GetProgramGuide(ClusterCommand):
@@ -42670,20 +42671,20 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=6, Type=typing.Optional[bytes]),
                     ])
 
-            startTime: 'typing.Optional[uint]' = None
-            endTime: 'typing.Optional[uint]' = None
-            channelList: 'typing.Optional[typing.List[Channel.Structs.ChannelInfoStruct]]' = None
-            pageToken: 'typing.Optional[Channel.Structs.PageTokenStruct]' = None
-            recordingFlag: 'typing.Optional[uint]' = None
-            externalIDList: 'typing.Optional[typing.List[Channel.Structs.AdditionalInfoStruct]]' = None
-            data: 'typing.Optional[bytes]' = None
+            startTime: typing.Optional[uint] = None
+            endTime: typing.Optional[uint] = None
+            channelList: typing.Optional[typing.List[Channel.Structs.ChannelInfoStruct]] = None
+            pageToken: typing.Optional[Channel.Structs.PageTokenStruct] = None
+            recordingFlag: typing.Optional[uint] = None
+            externalIDList: typing.Optional[typing.List[Channel.Structs.AdditionalInfoStruct]] = None
+            data: typing.Optional[bytes] = None
 
         @dataclass
         class ProgramGuideResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000504
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42693,15 +42694,15 @@
                         ClusterObjectFieldDescriptor(Label="programList", Tag=1, Type=typing.List[Channel.Structs.ProgramStruct]),
                     ])
 
-            paging: 'Channel.Structs.ChannelPagingStruct' = field(default_factory=lambda: Channel.Structs.ChannelPagingStruct())
-            programList: 'typing.List[Channel.Structs.ProgramStruct]' = field(default_factory=lambda: [])
+            paging: Channel.Structs.ChannelPagingStruct = field(default_factory=lambda: Channel.Structs.ChannelPagingStruct())
+            programList: typing.List[Channel.Structs.ProgramStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class RecordProgram(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000504
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42713,17 +42714,17 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=3, Type=bytes),
                     ])
 
-            programIdentifier: 'str' = ""
-            shouldRecordSeries: 'bool' = False
-            externalIDList: 'typing.List[Channel.Structs.AdditionalInfoStruct]' = field(default_factory=lambda: [])
-            data: 'bytes' = b""
+            programIdentifier: str = ""
+            shouldRecordSeries: bool = False
+            externalIDList: typing.List[Channel.Structs.AdditionalInfoStruct] = field(default_factory=lambda: [])
+            data: bytes = b""
 
         @dataclass
         class CancelRecordProgram(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000504
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42735,10 +42736,10 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=3, Type=bytes),
                     ])
 
-            programIdentifier: 'str' = ""
-            shouldRecordSeries: 'bool' = False
-            externalIDList: 'typing.List[Channel.Structs.AdditionalInfoStruct]' = field(default_factory=lambda: [])
-            data: 'bytes' = b""
+            programIdentifier: str = ""
+            shouldRecordSeries: bool = False
+            externalIDList: typing.List[Channel.Structs.AdditionalInfoStruct] = field(default_factory=lambda: [])
+            data: bytes = b""
 
     class Attributes:
         @dataclass
@@ -42755,7 +42756,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[Channel.Structs.ChannelInfoStruct]])
 
-            value: 'typing.Optional[typing.List[Channel.Structs.ChannelInfoStruct]]' = None
+            value: typing.Optional[typing.List[Channel.Structs.ChannelInfoStruct]] = None
 
         @dataclass
         class Lineup(ClusterAttributeDescriptor):
@@ -42771,7 +42772,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, Channel.Structs.LineupInfoStruct])
 
-            value: 'typing.Union[None, Nullable, Channel.Structs.LineupInfoStruct]' = None
+            value: typing.Union[None, Nullable, Channel.Structs.LineupInfoStruct] = None
 
         @dataclass
         class CurrentChannel(ClusterAttributeDescriptor):
@@ -42787,7 +42788,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, Channel.Structs.ChannelInfoStruct])
 
-            value: 'typing.Union[None, Nullable, Channel.Structs.ChannelInfoStruct]' = None
+            value: typing.Union[None, Nullable, Channel.Structs.ChannelInfoStruct] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -42803,7 +42804,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -42819,7 +42820,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -42835,7 +42836,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -42851,7 +42852,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -42867,7 +42868,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -42883,7 +42884,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -42904,14 +42905,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    targetList: 'typing.List[TargetNavigator.Structs.TargetInfoStruct]' = None
-    currentTarget: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    targetList: typing.List[TargetNavigator.Structs.TargetInfoStruct] = field(default_factory=lambda: [])
+    currentTarget: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class StatusEnum(MatterIntEnum):
@@ -42954,15 +42955,15 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            target: 'uint' = 0
-            data: 'typing.Optional[str]' = None
+            target: uint = 0
+            data: typing.Optional[str] = None
 
         @dataclass
         class NavigateTargetResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000505
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -42972,8 +42973,8 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'TargetNavigator.Enums.StatusEnum' = 0
-            data: 'typing.Optional[str]' = None
+            status: TargetNavigator.Enums.StatusEnum = 0
+            data: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -42990,7 +42991,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[TargetNavigator.Structs.TargetInfoStruct])
 
-            value: 'typing.List[TargetNavigator.Structs.TargetInfoStruct]' = field(default_factory=lambda: [])
+            value: typing.List[TargetNavigator.Structs.TargetInfoStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentTarget(ClusterAttributeDescriptor):
@@ -43006,7 +43007,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -43022,7 +43023,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -43038,7 +43039,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -43054,7 +43055,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -43070,7 +43071,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -43086,7 +43087,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -43102,7 +43103,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -43124,9 +43125,9 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=2, Type=bytes),
                     ])
 
-            targetList: 'typing.List[TargetNavigator.Structs.TargetInfoStruct]' = field(default_factory=lambda: [])
-            currentTarget: 'uint' = 0
-            data: 'bytes' = b""
+            targetList: typing.List[TargetNavigator.Structs.TargetInfoStruct] = field(default_factory=lambda: [])
+            currentTarget: uint = 0
+            data: bytes = b""
 
 
 @dataclass
@@ -43156,23 +43157,23 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    currentState: 'MediaPlayback.Enums.PlaybackStateEnum' = None
-    startTime: 'typing.Union[None, Nullable, uint]' = None
-    duration: 'typing.Union[None, Nullable, uint]' = None
-    sampledPosition: 'typing.Union[None, Nullable, MediaPlayback.Structs.PlaybackPositionStruct]' = None
-    playbackSpeed: 'typing.Optional[float32]' = None
-    seekRangeEnd: 'typing.Union[None, Nullable, uint]' = None
-    seekRangeStart: 'typing.Union[None, Nullable, uint]' = None
-    activeAudioTrack: 'typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct]' = None
-    availableAudioTracks: 'typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]]' = None
-    activeTextTrack: 'typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct]' = None
-    availableTextTracks: 'typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    currentState: MediaPlayback.Enums.PlaybackStateEnum = 0
+    startTime: typing.Union[None, Nullable, uint] = None
+    duration: typing.Union[None, Nullable, uint] = None
+    sampledPosition: typing.Union[None, Nullable, MediaPlayback.Structs.PlaybackPositionStruct] = None
+    playbackSpeed: typing.Optional[float32] = None
+    seekRangeEnd: typing.Union[None, Nullable, uint] = None
+    seekRangeStart: typing.Union[None, Nullable, uint] = None
+    activeAudioTrack: typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct] = None
+    availableAudioTracks: typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]] = None
+    activeTextTrack: typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct] = None
+    availableTextTracks: typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CharacteristicEnum(MatterIntEnum):
@@ -43365,7 +43366,7 @@
                         ClusterObjectFieldDescriptor(Label="audioAdvanceUnmuted", Tag=0, Type=typing.Optional[bool]),
                     ])
 
-            audioAdvanceUnmuted: 'typing.Optional[bool]' = None
+            audioAdvanceUnmuted: typing.Optional[bool] = None
 
         @dataclass
         class FastForward(ClusterCommand):
@@ -43381,7 +43382,7 @@
                         ClusterObjectFieldDescriptor(Label="audioAdvanceUnmuted", Tag=0, Type=typing.Optional[bool]),
                     ])
 
-            audioAdvanceUnmuted: 'typing.Optional[bool]' = None
+            audioAdvanceUnmuted: typing.Optional[bool] = None
 
         @dataclass
         class SkipForward(ClusterCommand):
@@ -43397,7 +43398,7 @@
                         ClusterObjectFieldDescriptor(Label="deltaPositionMilliseconds", Tag=0, Type=uint),
                     ])
 
-            deltaPositionMilliseconds: 'uint' = 0
+            deltaPositionMilliseconds: uint = 0
 
         @dataclass
         class SkipBackward(ClusterCommand):
@@ -43413,14 +43414,14 @@
                         ClusterObjectFieldDescriptor(Label="deltaPositionMilliseconds", Tag=0, Type=uint),
                     ])
 
-            deltaPositionMilliseconds: 'uint' = 0
+            deltaPositionMilliseconds: uint = 0
 
         @dataclass
         class PlaybackResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000506
             command_id: typing.ClassVar[int] = 0x0000000A
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43430,8 +43431,8 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'MediaPlayback.Enums.StatusEnum' = 0
-            data: 'typing.Optional[str]' = None
+            status: MediaPlayback.Enums.StatusEnum = 0
+            data: typing.Optional[str] = None
 
         @dataclass
         class Seek(ClusterCommand):
@@ -43447,14 +43448,14 @@
                         ClusterObjectFieldDescriptor(Label="position", Tag=0, Type=uint),
                     ])
 
-            position: 'uint' = 0
+            position: uint = 0
 
         @dataclass
         class ActivateAudioTrack(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000506
             command_id: typing.ClassVar[int] = 0x0000000C
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43464,15 +43465,15 @@
                         ClusterObjectFieldDescriptor(Label="audioOutputIndex", Tag=1, Type=uint),
                     ])
 
-            trackID: 'str' = ""
-            audioOutputIndex: 'uint' = 0
+            trackID: str = ""
+            audioOutputIndex: uint = 0
 
         @dataclass
         class ActivateTextTrack(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000506
             command_id: typing.ClassVar[int] = 0x0000000D
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43481,14 +43482,14 @@
                         ClusterObjectFieldDescriptor(Label="trackID", Tag=0, Type=str),
                     ])
 
-            trackID: 'str' = ""
+            trackID: str = ""
 
         @dataclass
         class DeactivateTextTrack(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000506
             command_id: typing.ClassVar[int] = 0x0000000E
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43511,7 +43512,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=MediaPlayback.Enums.PlaybackStateEnum)
 
-            value: 'MediaPlayback.Enums.PlaybackStateEnum' = 0
+            value: MediaPlayback.Enums.PlaybackStateEnum = 0
 
         @dataclass
         class StartTime(ClusterAttributeDescriptor):
@@ -43527,7 +43528,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class Duration(ClusterAttributeDescriptor):
@@ -43543,7 +43544,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class SampledPosition(ClusterAttributeDescriptor):
@@ -43559,7 +43560,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, MediaPlayback.Structs.PlaybackPositionStruct])
 
-            value: 'typing.Union[None, Nullable, MediaPlayback.Structs.PlaybackPositionStruct]' = None
+            value: typing.Union[None, Nullable, MediaPlayback.Structs.PlaybackPositionStruct] = None
 
         @dataclass
         class PlaybackSpeed(ClusterAttributeDescriptor):
@@ -43575,7 +43576,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[float32])
 
-            value: 'typing.Optional[float32]' = None
+            value: typing.Optional[float32] = None
 
         @dataclass
         class SeekRangeEnd(ClusterAttributeDescriptor):
@@ -43591,7 +43592,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class SeekRangeStart(ClusterAttributeDescriptor):
@@ -43607,7 +43608,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, uint])
 
-            value: 'typing.Union[None, Nullable, uint]' = None
+            value: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ActiveAudioTrack(ClusterAttributeDescriptor):
@@ -43623,7 +43624,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct])
 
-            value: 'typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct]' = None
+            value: typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct] = None
 
         @dataclass
         class AvailableAudioTracks(ClusterAttributeDescriptor):
@@ -43639,7 +43640,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]])
 
-            value: 'typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]]' = None
+            value: typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]] = None
 
         @dataclass
         class ActiveTextTrack(ClusterAttributeDescriptor):
@@ -43655,7 +43656,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct])
 
-            value: 'typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct]' = None
+            value: typing.Union[None, Nullable, MediaPlayback.Structs.TrackStruct] = None
 
         @dataclass
         class AvailableTextTracks(ClusterAttributeDescriptor):
@@ -43671,7 +43672,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]])
 
-            value: 'typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]]' = None
+            value: typing.Union[None, Nullable, typing.List[MediaPlayback.Structs.TrackStruct]] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -43687,7 +43688,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -43703,7 +43704,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -43719,7 +43720,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -43735,7 +43736,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -43751,7 +43752,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -43767,7 +43768,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -43795,15 +43796,15 @@
                         ClusterObjectFieldDescriptor(Label="audioAdvanceUnmuted", Tag=8, Type=bool),
                     ])
 
-            currentState: 'MediaPlayback.Enums.PlaybackStateEnum' = 0
-            startTime: 'uint' = 0
-            duration: 'uint' = 0
-            sampledPosition: 'MediaPlayback.Structs.PlaybackPositionStruct' = field(default_factory=lambda: MediaPlayback.Structs.PlaybackPositionStruct())
-            playbackSpeed: 'float32' = 0.0
-            seekRangeEnd: 'uint' = 0
-            seekRangeStart: 'uint' = 0
-            data: 'typing.Optional[bytes]' = None
-            audioAdvanceUnmuted: 'bool' = False
+            currentState: MediaPlayback.Enums.PlaybackStateEnum = 0
+            startTime: uint = 0
+            duration: uint = 0
+            sampledPosition: MediaPlayback.Structs.PlaybackPositionStruct = field(default_factory=lambda: MediaPlayback.Structs.PlaybackPositionStruct())
+            playbackSpeed: float32 = 0.0
+            seekRangeEnd: uint = 0
+            seekRangeStart: uint = 0
+            data: typing.Optional[bytes] = None
+            audioAdvanceUnmuted: bool = False
 
 
 @dataclass
@@ -43824,14 +43825,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    inputList: 'typing.List[MediaInput.Structs.InputInfoStruct]' = None
-    currentInput: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    inputList: typing.List[MediaInput.Structs.InputInfoStruct] = field(default_factory=lambda: [])
+    currentInput: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class InputTypeEnum(MatterIntEnum):
@@ -43881,7 +43882,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000507
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43890,14 +43891,14 @@
                         ClusterObjectFieldDescriptor(Label="index", Tag=0, Type=uint),
                     ])
 
-            index: 'uint' = 0
+            index: uint = 0
 
         @dataclass
         class ShowInputStatus(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000507
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43910,7 +43911,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000507
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43923,7 +43924,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000507
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -43933,8 +43934,8 @@
                         ClusterObjectFieldDescriptor(Label="name", Tag=1, Type=str),
                     ])
 
-            index: 'uint' = 0
-            name: 'str' = ""
+            index: uint = 0
+            name: str = ""
 
     class Attributes:
         @dataclass
@@ -43951,7 +43952,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[MediaInput.Structs.InputInfoStruct])
 
-            value: 'typing.List[MediaInput.Structs.InputInfoStruct]' = field(default_factory=lambda: [])
+            value: typing.List[MediaInput.Structs.InputInfoStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentInput(ClusterAttributeDescriptor):
@@ -43967,7 +43968,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -43983,7 +43984,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -43999,7 +44000,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -44015,7 +44016,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -44031,7 +44032,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -44047,7 +44048,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -44063,7 +44064,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -44082,12 +44083,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Commands:
         @dataclass
@@ -44095,7 +44096,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000508
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -44118,7 +44119,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -44134,7 +44135,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -44150,7 +44151,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -44166,7 +44167,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -44182,7 +44183,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -44198,7 +44199,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -44217,12 +44218,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CECKeyCodeEnum(MatterIntEnum):
@@ -44349,14 +44350,14 @@
                         ClusterObjectFieldDescriptor(Label="keyCode", Tag=0, Type=KeypadInput.Enums.CECKeyCodeEnum),
                     ])
 
-            keyCode: 'KeypadInput.Enums.CECKeyCodeEnum' = 0
+            keyCode: KeypadInput.Enums.CECKeyCodeEnum = 0
 
         @dataclass
         class SendKeyResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000509
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -44365,7 +44366,7 @@
                         ClusterObjectFieldDescriptor(Label="status", Tag=0, Type=KeypadInput.Enums.StatusEnum),
                     ])
 
-            status: 'KeypadInput.Enums.StatusEnum' = 0
+            status: KeypadInput.Enums.StatusEnum = 0
 
     class Attributes:
         @dataclass
@@ -44382,7 +44383,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -44398,7 +44399,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -44414,7 +44415,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -44430,7 +44431,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -44446,7 +44447,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -44462,7 +44463,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -44483,14 +44484,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    acceptHeader: 'typing.Optional[typing.List[str]]' = None
-    supportedStreamingProtocols: 'typing.Optional[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    acceptHeader: typing.Optional[typing.List[str]] = None
+    supportedStreamingProtocols: typing.Optional[uint] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class CharacteristicEnum(MatterIntEnum):
@@ -44715,11 +44716,11 @@
                         ClusterObjectFieldDescriptor(Label="useCurrentContext", Tag=4, Type=typing.Optional[bool]),
                     ])
 
-            search: 'ContentLauncher.Structs.ContentSearchStruct' = field(default_factory=lambda: ContentLauncher.Structs.ContentSearchStruct())
-            autoPlay: 'bool' = False
-            data: 'typing.Optional[str]' = None
-            playbackPreferences: 'typing.Optional[ContentLauncher.Structs.PlaybackPreferencesStruct]' = None
-            useCurrentContext: 'typing.Optional[bool]' = None
+            search: ContentLauncher.Structs.ContentSearchStruct = field(default_factory=lambda: ContentLauncher.Structs.ContentSearchStruct())
+            autoPlay: bool = False
+            data: typing.Optional[str] = None
+            playbackPreferences: typing.Optional[ContentLauncher.Structs.PlaybackPreferencesStruct] = None
+            useCurrentContext: typing.Optional[bool] = None
 
         @dataclass
         class LaunchURL(ClusterCommand):
@@ -44737,16 +44738,16 @@
                         ClusterObjectFieldDescriptor(Label="brandingInformation", Tag=2, Type=typing.Optional[ContentLauncher.Structs.BrandingInformationStruct]),
                     ])
 
-            contentURL: 'str' = ""
-            displayString: 'typing.Optional[str]' = None
-            brandingInformation: 'typing.Optional[ContentLauncher.Structs.BrandingInformationStruct]' = None
+            contentURL: str = ""
+            displayString: typing.Optional[str] = None
+            brandingInformation: typing.Optional[ContentLauncher.Structs.BrandingInformationStruct] = None
 
         @dataclass
         class LauncherResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050A
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -44756,8 +44757,8 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=1, Type=typing.Optional[str]),
                     ])
 
-            status: 'ContentLauncher.Enums.StatusEnum' = 0
-            data: 'typing.Optional[str]' = None
+            status: ContentLauncher.Enums.StatusEnum = 0
+            data: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -44774,7 +44775,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[str]])
 
-            value: 'typing.Optional[typing.List[str]]' = None
+            value: typing.Optional[typing.List[str]] = None
 
         @dataclass
         class SupportedStreamingProtocols(ClusterAttributeDescriptor):
@@ -44790,7 +44791,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -44806,7 +44807,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -44822,7 +44823,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -44838,7 +44839,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -44854,7 +44855,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -44870,7 +44871,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -44886,7 +44887,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -44907,14 +44908,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    outputList: 'typing.List[AudioOutput.Structs.OutputInfoStruct]' = None
-    currentOutput: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    outputList: typing.List[AudioOutput.Structs.OutputInfoStruct] = field(default_factory=lambda: [])
+    currentOutput: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class OutputTypeEnum(MatterIntEnum):
@@ -44956,7 +44957,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000050B
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -44965,14 +44966,14 @@
                         ClusterObjectFieldDescriptor(Label="index", Tag=0, Type=uint),
                     ])
 
-            index: 'uint' = 0
+            index: uint = 0
 
         @dataclass
         class RenameOutput(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050B
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -44982,8 +44983,8 @@
                         ClusterObjectFieldDescriptor(Label="name", Tag=1, Type=str),
                     ])
 
-            index: 'uint' = 0
-            name: 'str' = ""
+            index: uint = 0
+            name: str = ""
 
     class Attributes:
         @dataclass
@@ -45000,7 +45001,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[AudioOutput.Structs.OutputInfoStruct])
 
-            value: 'typing.List[AudioOutput.Structs.OutputInfoStruct]' = field(default_factory=lambda: [])
+            value: typing.List[AudioOutput.Structs.OutputInfoStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class CurrentOutput(ClusterAttributeDescriptor):
@@ -45016,7 +45017,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -45032,7 +45033,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -45048,7 +45049,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -45064,7 +45065,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -45080,7 +45081,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -45096,7 +45097,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -45112,7 +45113,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -45133,14 +45134,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    catalogList: 'typing.Optional[typing.List[uint]]' = None
-    currentApp: 'typing.Union[None, Nullable, ApplicationLauncher.Structs.ApplicationEPStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    catalogList: typing.Optional[typing.List[uint]] = None
+    currentApp: typing.Union[None, Nullable, ApplicationLauncher.Structs.ApplicationEPStruct] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class StatusEnum(MatterIntEnum):
@@ -45203,8 +45204,8 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=1, Type=typing.Optional[bytes]),
                     ])
 
-            application: 'typing.Optional[ApplicationLauncher.Structs.ApplicationStruct]' = None
-            data: 'typing.Optional[bytes]' = None
+            application: typing.Optional[ApplicationLauncher.Structs.ApplicationStruct] = None
+            data: typing.Optional[bytes] = None
 
         @dataclass
         class StopApp(ClusterCommand):
@@ -45220,7 +45221,7 @@
                         ClusterObjectFieldDescriptor(Label="application", Tag=0, Type=typing.Optional[ApplicationLauncher.Structs.ApplicationStruct]),
                     ])
 
-            application: 'typing.Optional[ApplicationLauncher.Structs.ApplicationStruct]' = None
+            application: typing.Optional[ApplicationLauncher.Structs.ApplicationStruct] = None
 
         @dataclass
         class HideApp(ClusterCommand):
@@ -45236,14 +45237,14 @@
                         ClusterObjectFieldDescriptor(Label="application", Tag=0, Type=typing.Optional[ApplicationLauncher.Structs.ApplicationStruct]),
                     ])
 
-            application: 'typing.Optional[ApplicationLauncher.Structs.ApplicationStruct]' = None
+            application: typing.Optional[ApplicationLauncher.Structs.ApplicationStruct] = None
 
         @dataclass
         class LauncherResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050C
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -45253,8 +45254,8 @@
                         ClusterObjectFieldDescriptor(Label="data", Tag=1, Type=typing.Optional[bytes]),
                     ])
 
-            status: 'ApplicationLauncher.Enums.StatusEnum' = 0
-            data: 'typing.Optional[bytes]' = None
+            status: ApplicationLauncher.Enums.StatusEnum = 0
+            data: typing.Optional[bytes] = None
 
     class Attributes:
         @dataclass
@@ -45271,7 +45272,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[uint]])
 
-            value: 'typing.Optional[typing.List[uint]]' = None
+            value: typing.Optional[typing.List[uint]] = None
 
         @dataclass
         class CurrentApp(ClusterAttributeDescriptor):
@@ -45287,7 +45288,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[None, Nullable, ApplicationLauncher.Structs.ApplicationEPStruct])
 
-            value: 'typing.Union[None, Nullable, ApplicationLauncher.Structs.ApplicationEPStruct]' = None
+            value: typing.Union[None, Nullable, ApplicationLauncher.Structs.ApplicationEPStruct] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -45303,7 +45304,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -45319,7 +45320,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -45335,7 +45336,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -45351,7 +45352,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -45367,7 +45368,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -45383,7 +45384,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -45410,20 +45411,20 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    vendorName: 'typing.Optional[str]' = None
-    vendorID: 'typing.Optional[uint]' = None
-    applicationName: 'str' = None
-    productID: 'typing.Optional[uint]' = None
-    application: 'ApplicationBasic.Structs.ApplicationStruct' = None
-    status: 'ApplicationBasic.Enums.ApplicationStatusEnum' = None
-    applicationVersion: 'str' = None
-    allowedVendorList: 'typing.List[uint]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    vendorName: typing.Optional[str] = None
+    vendorID: typing.Optional[uint] = None
+    applicationName: str = ""
+    productID: typing.Optional[uint] = None
+    application: ApplicationBasic.Structs.ApplicationStruct = field(default_factory=lambda: ApplicationBasic.Structs.ApplicationStruct())
+    status: ApplicationBasic.Enums.ApplicationStatusEnum = 0
+    applicationVersion: str = ""
+    allowedVendorList: typing.List[uint] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class ApplicationStatusEnum(MatterIntEnum):
@@ -45466,7 +45467,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class VendorID(ClusterAttributeDescriptor):
@@ -45482,7 +45483,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ApplicationName(ClusterAttributeDescriptor):
@@ -45498,7 +45499,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class ProductID(ClusterAttributeDescriptor):
@@ -45514,7 +45515,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class Application(ClusterAttributeDescriptor):
@@ -45530,7 +45531,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ApplicationBasic.Structs.ApplicationStruct)
 
-            value: 'ApplicationBasic.Structs.ApplicationStruct' = field(default_factory=lambda: ApplicationBasic.Structs.ApplicationStruct())
+            value: ApplicationBasic.Structs.ApplicationStruct = field(default_factory=lambda: ApplicationBasic.Structs.ApplicationStruct())
 
         @dataclass
         class Status(ClusterAttributeDescriptor):
@@ -45546,7 +45547,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=ApplicationBasic.Enums.ApplicationStatusEnum)
 
-            value: 'ApplicationBasic.Enums.ApplicationStatusEnum' = 0
+            value: ApplicationBasic.Enums.ApplicationStatusEnum = 0
 
         @dataclass
         class ApplicationVersion(ClusterAttributeDescriptor):
@@ -45562,7 +45563,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class AllowedVendorList(ClusterAttributeDescriptor):
@@ -45578,7 +45579,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -45594,7 +45595,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -45610,7 +45611,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -45626,7 +45627,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -45642,7 +45643,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -45658,7 +45659,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -45674,7 +45675,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -45693,12 +45694,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Commands:
         @dataclass
@@ -45719,14 +45720,14 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            tempAccountIdentifier: 'str' = ""
+            tempAccountIdentifier: str = ""
 
         @dataclass
         class GetSetupPINResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050E
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -45735,14 +45736,14 @@
                         ClusterObjectFieldDescriptor(Label="setupPIN", Tag=0, Type=str),
                     ])
 
-            setupPIN: 'str' = ""
+            setupPIN: str = ""
 
         @dataclass
         class Login(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050E
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -45757,16 +45758,16 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            tempAccountIdentifier: 'str' = ""
-            setupPIN: 'str' = ""
-            node: 'typing.Optional[uint]' = None
+            tempAccountIdentifier: str = ""
+            setupPIN: str = ""
+            node: typing.Optional[uint] = None
 
         @dataclass
         class Logout(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050E
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -45779,7 +45780,7 @@
             def must_use_timed_invoke(cls) -> bool:
                 return True
 
-            node: 'typing.Optional[uint]' = None
+            node: typing.Optional[uint] = None
 
     class Attributes:
         @dataclass
@@ -45796,7 +45797,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -45812,7 +45813,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -45828,7 +45829,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -45844,7 +45845,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -45860,7 +45861,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -45876,7 +45877,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -45896,7 +45897,7 @@
                         ClusterObjectFieldDescriptor(Label="node", Tag=0, Type=typing.Optional[uint]),
                     ])
 
-            node: 'typing.Optional[uint]' = None
+            node: typing.Optional[uint] = None
 
 
 @dataclass
@@ -45923,20 +45924,20 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    enabled: 'bool' = None
-    onDemandRatings: 'typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]]' = None
-    onDemandRatingThreshold: 'typing.Optional[str]' = None
-    scheduledContentRatings: 'typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]]' = None
-    scheduledContentRatingThreshold: 'typing.Optional[str]' = None
-    screenDailyTime: 'typing.Optional[uint]' = None
-    remainingScreenTime: 'typing.Optional[uint]' = None
-    blockUnrated: 'bool' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    enabled: bool = False
+    onDemandRatings: typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]] = None
+    onDemandRatingThreshold: typing.Optional[str] = None
+    scheduledContentRatings: typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]] = None
+    scheduledContentRatingThreshold: typing.Optional[str] = None
+    screenDailyTime: typing.Optional[uint] = None
+    remainingScreenTime: typing.Optional[uint] = None
+    blockUnrated: bool = False
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class Feature(IntFlag):
@@ -45966,7 +45967,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -45976,8 +45977,8 @@
                         ClusterObjectFieldDescriptor(Label="newPIN", Tag=1, Type=str),
                     ])
 
-            oldPIN: 'typing.Optional[str]' = None
-            newPIN: 'str' = ""
+            oldPIN: typing.Optional[str] = None
+            newPIN: str = ""
 
         @dataclass
         class ResetPIN(ClusterCommand):
@@ -45997,7 +45998,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46006,14 +46007,14 @@
                         ClusterObjectFieldDescriptor(Label="PINCode", Tag=0, Type=str),
                     ])
 
-            PINCode: 'str' = ""
+            PINCode: str = ""
 
         @dataclass
         class Enable(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46026,7 +46027,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46039,7 +46040,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46049,15 +46050,15 @@
                         ClusterObjectFieldDescriptor(Label="bonusTime", Tag=1, Type=typing.Optional[uint]),
                     ])
 
-            PINCode: 'typing.Optional[str]' = None
-            bonusTime: 'typing.Optional[uint]' = None
+            PINCode: typing.Optional[str] = None
+            bonusTime: typing.Optional[uint] = None
 
         @dataclass
         class SetScreenDailyTime(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46066,14 +46067,14 @@
                         ClusterObjectFieldDescriptor(Label="screenTime", Tag=0, Type=uint),
                     ])
 
-            screenTime: 'uint' = 0
+            screenTime: uint = 0
 
         @dataclass
         class BlockUnratedContent(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46086,7 +46087,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46099,7 +46100,7 @@
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x00000009
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46108,14 +46109,14 @@
                         ClusterObjectFieldDescriptor(Label="rating", Tag=0, Type=str),
                     ])
 
-            rating: 'str' = ""
+            rating: str = ""
 
         @dataclass
         class SetScheduledContentRatingThreshold(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x0000050F
             command_id: typing.ClassVar[int] = 0x0000000A
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46124,7 +46125,7 @@
                         ClusterObjectFieldDescriptor(Label="rating", Tag=0, Type=str),
                     ])
 
-            rating: 'str' = ""
+            rating: str = ""
 
     class Attributes:
         @dataclass
@@ -46141,7 +46142,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class OnDemandRatings(ClusterAttributeDescriptor):
@@ -46157,7 +46158,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]])
 
-            value: 'typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]]' = None
+            value: typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]] = None
 
         @dataclass
         class OnDemandRatingThreshold(ClusterAttributeDescriptor):
@@ -46173,7 +46174,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ScheduledContentRatings(ClusterAttributeDescriptor):
@@ -46189,7 +46190,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]])
 
-            value: 'typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]]' = None
+            value: typing.Optional[typing.List[ContentControl.Structs.RatingNameStruct]] = None
 
         @dataclass
         class ScheduledContentRatingThreshold(ClusterAttributeDescriptor):
@@ -46205,7 +46206,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[str])
 
-            value: 'typing.Optional[str]' = None
+            value: typing.Optional[str] = None
 
         @dataclass
         class ScreenDailyTime(ClusterAttributeDescriptor):
@@ -46221,7 +46222,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class RemainingScreenTime(ClusterAttributeDescriptor):
@@ -46237,7 +46238,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class BlockUnrated(ClusterAttributeDescriptor):
@@ -46253,7 +46254,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -46269,7 +46270,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -46285,7 +46286,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -46301,7 +46302,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -46317,7 +46318,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -46333,7 +46334,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -46349,7 +46350,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -46385,12 +46386,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class StatusEnum(MatterIntEnum):
@@ -46418,15 +46419,15 @@
                         ClusterObjectFieldDescriptor(Label="encodingHint", Tag=1, Type=str),
                     ])
 
-            data: 'typing.Optional[str]' = None
-            encodingHint: 'str' = ""
+            data: typing.Optional[str] = None
+            encodingHint: str = ""
 
         @dataclass
         class ContentAppMessageResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000510
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46437,9 +46438,9 @@
                         ClusterObjectFieldDescriptor(Label="encodingHint", Tag=2, Type=typing.Optional[str]),
                     ])
 
-            status: 'ContentAppObserver.Enums.StatusEnum' = 0
-            data: 'typing.Optional[str]' = None
-            encodingHint: 'typing.Optional[str]' = None
+            status: ContentAppObserver.Enums.StatusEnum = 0
+            data: typing.Optional[str] = None
+            encodingHint: typing.Optional[str] = None
 
     class Attributes:
         @dataclass
@@ -46456,7 +46457,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -46472,7 +46473,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -46488,7 +46489,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -46504,7 +46505,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -46520,7 +46521,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -46536,7 +46537,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -46559,16 +46560,16 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedZoneSources: 'typing.List[ZoneManagement.Enums.ZoneSourceEnum]' = None
-    zones: 'typing.Optional[typing.List[ZoneManagement.Structs.ZoneInformationStruct]]' = None
-    timeControl: 'typing.List[ZoneManagement.Structs.ZoneTriggeringTimeControlStruct]' = None
-    sensitivity: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedZoneSources: typing.List[ZoneManagement.Enums.ZoneSourceEnum] = field(default_factory=lambda: [])
+    zones: typing.Optional[typing.List[ZoneManagement.Structs.ZoneInformationStruct]] = None
+    timeControl: typing.List[ZoneManagement.Structs.ZoneTriggeringTimeControlStruct] = field(default_factory=lambda: [])
+    sensitivity: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class StatusCodeEnum(MatterIntEnum):
@@ -46706,14 +46707,14 @@
                         ClusterObjectFieldDescriptor(Label="zone", Tag=0, Type=ZoneManagement.Structs.TwoDCartesianZoneStruct),
                     ])
 
-            zone: 'ZoneManagement.Structs.TwoDCartesianZoneStruct' = field(default_factory=lambda: ZoneManagement.Structs.TwoDCartesianZoneStruct())
+            zone: ZoneManagement.Structs.TwoDCartesianZoneStruct = field(default_factory=lambda: ZoneManagement.Structs.TwoDCartesianZoneStruct())
 
         @dataclass
         class CreateTwoDCartesianZoneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000550
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46722,14 +46723,14 @@
                         ClusterObjectFieldDescriptor(Label="zoneID", Tag=0, Type=uint),
                     ])
 
-            zoneID: 'uint' = 0
+            zoneID: uint = 0
 
         @dataclass
         class UpdateTwoDCartesianZone(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000550
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46739,8 +46740,8 @@
                         ClusterObjectFieldDescriptor(Label="zone", Tag=1, Type=ZoneManagement.Structs.TwoDCartesianZoneStruct),
                     ])
 
-            zoneID: 'uint' = 0
-            zone: 'ZoneManagement.Structs.TwoDCartesianZoneStruct' = field(default_factory=lambda: ZoneManagement.Structs.TwoDCartesianZoneStruct())
+            zoneID: uint = 0
+            zone: ZoneManagement.Structs.TwoDCartesianZoneStruct = field(default_factory=lambda: ZoneManagement.Structs.TwoDCartesianZoneStruct())
 
         @dataclass
         class GetTwoDCartesianZone(ClusterCommand):
@@ -46756,14 +46757,14 @@
                         ClusterObjectFieldDescriptor(Label="zoneID", Tag=0, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            zoneID: 'typing.Union[None, Nullable, uint]' = None
+            zoneID: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class GetTwoDCartesianZoneResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000550
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46772,14 +46773,14 @@
                         ClusterObjectFieldDescriptor(Label="zones", Tag=0, Type=typing.List[ZoneManagement.Structs.TwoDCartesianZoneStruct]),
                     ])
 
-            zones: 'typing.List[ZoneManagement.Structs.TwoDCartesianZoneStruct]' = field(default_factory=lambda: [])
+            zones: typing.List[ZoneManagement.Structs.TwoDCartesianZoneStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class RemoveZone(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000550
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -46788,7 +46789,7 @@
                         ClusterObjectFieldDescriptor(Label="zoneID", Tag=0, Type=uint),
                     ])
 
-            zoneID: 'uint' = 0
+            zoneID: uint = 0
 
     class Attributes:
         @dataclass
@@ -46805,7 +46806,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ZoneManagement.Enums.ZoneSourceEnum])
 
-            value: 'typing.List[ZoneManagement.Enums.ZoneSourceEnum]' = field(default_factory=lambda: [])
+            value: typing.List[ZoneManagement.Enums.ZoneSourceEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class Zones(ClusterAttributeDescriptor):
@@ -46821,7 +46822,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[ZoneManagement.Structs.ZoneInformationStruct]])
 
-            value: 'typing.Optional[typing.List[ZoneManagement.Structs.ZoneInformationStruct]]' = None
+            value: typing.Optional[typing.List[ZoneManagement.Structs.ZoneInformationStruct]] = None
 
         @dataclass
         class TimeControl(ClusterAttributeDescriptor):
@@ -46837,7 +46838,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[ZoneManagement.Structs.ZoneTriggeringTimeControlStruct])
 
-            value: 'typing.List[ZoneManagement.Structs.ZoneTriggeringTimeControlStruct]' = field(default_factory=lambda: [])
+            value: typing.List[ZoneManagement.Structs.ZoneTriggeringTimeControlStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class Sensitivity(ClusterAttributeDescriptor):
@@ -46853,7 +46854,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -46869,7 +46870,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -46885,7 +46886,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -46901,7 +46902,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -46917,7 +46918,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -46933,7 +46934,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -46949,7 +46950,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -46970,8 +46971,8 @@
                         ClusterObjectFieldDescriptor(Label="reason", Tag=1, Type=ZoneManagement.Enums.ZoneEventTriggeredReasonEnum),
                     ])
 
-            zones: 'typing.List[uint]' = field(default_factory=lambda: [])
-            reason: 'ZoneManagement.Enums.ZoneEventTriggeredReasonEnum' = 0
+            zones: typing.List[uint] = field(default_factory=lambda: [])
+            reason: ZoneManagement.Enums.ZoneEventTriggeredReasonEnum = 0
 
         @dataclass
         class ZoneStopped(ClusterEvent):
@@ -46991,8 +46992,8 @@
                         ClusterObjectFieldDescriptor(Label="reason", Tag=1, Type=ZoneManagement.Enums.ZoneEventStoppedReasonEnum),
                     ])
 
-            zones: 'typing.List[uint]' = field(default_factory=lambda: [])
-            reason: 'ZoneManagement.Enums.ZoneEventStoppedReasonEnum' = 0
+            zones: typing.List[uint] = field(default_factory=lambda: [])
+            reason: ZoneManagement.Enums.ZoneEventStoppedReasonEnum = 0
 
 
 @dataclass
@@ -47058,59 +47059,59 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    maxConcurrentVideoEncoders: 'typing.Optional[uint]' = None
-    maxEncodedPixelRate: 'typing.Optional[uint]' = None
-    videoSensorParams: 'typing.Optional[CameraAvStreamManagement.Structs.VideoSensorParamsStruct]' = None
-    nightVisionCapable: 'typing.Optional[bool]' = None
-    minViewport: 'typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct]' = None
-    rateDistortionTradeOffPoints: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.RateDistortionTradeOffPointsStruct]]' = None
-    maxPreRollBufferSize: 'typing.Optional[uint]' = None
-    microphoneCapabilities: 'typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct]' = None
-    speakerCapabilities: 'typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct]' = None
-    twoWayTalkSupport: 'typing.Optional[CameraAvStreamManagement.Enums.TwoWayTalkSupportTypeEnum]' = None
-    supportedSnapshotParams: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotParamsStruct]]' = None
-    maxNetworkBandwidth: 'uint' = None
-    currentFrameRate: 'typing.Optional[uint]' = None
-    HDRModeEnabled: 'typing.Optional[bool]' = None
-    currentVideoCodecs: 'typing.Optional[typing.List[CameraAvStreamManagement.Enums.VideoCodecEnum]]' = None
-    currentSnapshotConfig: 'typing.Optional[CameraAvStreamManagement.Structs.SnapshotParamsStruct]' = None
-    fabricsUsingCamera: 'typing.List[uint]' = None
-    allocatedVideoStreams: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.VideoStreamStruct]]' = None
-    allocatedAudioStreams: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.AudioStreamStruct]]' = None
-    allocatedSnapshotStreams: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotStreamStruct]]' = None
-    rankedVideoStreamPrioritiesList: 'typing.Optional[typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum]]' = None
-    softRecordingPrivacyModeEnabled: 'typing.Optional[bool]' = None
-    softLivestreamPrivacyModeEnabled: 'typing.Optional[bool]' = None
-    hardPrivacyModeOn: 'typing.Optional[bool]' = None
-    nightVision: 'typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum]' = None
-    nightVisionIllum: 'typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum]' = None
-    AWBEnabled: 'typing.Optional[bool]' = None
-    autoShutterSpeedEnabled: 'typing.Optional[bool]' = None
-    autoISOEnabled: 'typing.Optional[bool]' = None
-    viewport: 'typing.Optional[CameraAvStreamManagement.Structs.ViewportStruct]' = None
-    speakerMuted: 'typing.Optional[bool]' = None
-    speakerVolumeLevel: 'typing.Optional[uint]' = None
-    speakerMaxLevel: 'typing.Optional[uint]' = None
-    speakerMinLevel: 'typing.Optional[uint]' = None
-    microphoneMuted: 'typing.Optional[bool]' = None
-    microphoneVolumeLevel: 'typing.Optional[uint]' = None
-    microphoneMaxLevel: 'typing.Optional[uint]' = None
-    microphoneMinLevel: 'typing.Optional[uint]' = None
-    microphoneAGCEnabled: 'typing.Optional[bool]' = None
-    imageRotation: 'typing.Optional[uint]' = None
-    imageFlipHorizontal: 'typing.Optional[bool]' = None
-    imageFlipVertical: 'typing.Optional[bool]' = None
-    localVideoRecordingEnabled: 'typing.Optional[bool]' = None
-    localSnapshotRecordingEnabled: 'typing.Optional[bool]' = None
-    statusLightEnabled: 'typing.Optional[bool]' = None
-    statusLightBrightness: 'typing.Optional[Globals.Enums.ThreeLevelAutoEnum]' = None
-    depthSensorStatus: 'typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    maxConcurrentVideoEncoders: typing.Optional[uint] = None
+    maxEncodedPixelRate: typing.Optional[uint] = None
+    videoSensorParams: typing.Optional[CameraAvStreamManagement.Structs.VideoSensorParamsStruct] = None
+    nightVisionCapable: typing.Optional[bool] = None
+    minViewport: typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct] = None
+    rateDistortionTradeOffPoints: typing.Optional[typing.List[CameraAvStreamManagement.Structs.RateDistortionTradeOffPointsStruct]] = None
+    maxPreRollBufferSize: typing.Optional[uint] = None
+    microphoneCapabilities: typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct] = None
+    speakerCapabilities: typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct] = None
+    twoWayTalkSupport: typing.Optional[CameraAvStreamManagement.Enums.TwoWayTalkSupportTypeEnum] = None
+    supportedSnapshotParams: typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotParamsStruct]] = None
+    maxNetworkBandwidth: uint = 0
+    currentFrameRate: typing.Optional[uint] = None
+    HDRModeEnabled: typing.Optional[bool] = None
+    currentVideoCodecs: typing.Optional[typing.List[CameraAvStreamManagement.Enums.VideoCodecEnum]] = None
+    currentSnapshotConfig: typing.Optional[CameraAvStreamManagement.Structs.SnapshotParamsStruct] = None
+    fabricsUsingCamera: typing.List[uint] = field(default_factory=lambda: [])
+    allocatedVideoStreams: typing.Optional[typing.List[CameraAvStreamManagement.Structs.VideoStreamStruct]] = None
+    allocatedAudioStreams: typing.Optional[typing.List[CameraAvStreamManagement.Structs.AudioStreamStruct]] = None
+    allocatedSnapshotStreams: typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotStreamStruct]] = None
+    rankedVideoStreamPrioritiesList: typing.Optional[typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum]] = None
+    softRecordingPrivacyModeEnabled: typing.Optional[bool] = None
+    softLivestreamPrivacyModeEnabled: typing.Optional[bool] = None
+    hardPrivacyModeOn: typing.Optional[bool] = None
+    nightVision: typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum] = None
+    nightVisionIllum: typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum] = None
+    AWBEnabled: typing.Optional[bool] = None
+    autoShutterSpeedEnabled: typing.Optional[bool] = None
+    autoISOEnabled: typing.Optional[bool] = None
+    viewport: typing.Optional[CameraAvStreamManagement.Structs.ViewportStruct] = None
+    speakerMuted: typing.Optional[bool] = None
+    speakerVolumeLevel: typing.Optional[uint] = None
+    speakerMaxLevel: typing.Optional[uint] = None
+    speakerMinLevel: typing.Optional[uint] = None
+    microphoneMuted: typing.Optional[bool] = None
+    microphoneVolumeLevel: typing.Optional[uint] = None
+    microphoneMaxLevel: typing.Optional[uint] = None
+    microphoneMinLevel: typing.Optional[uint] = None
+    microphoneAGCEnabled: typing.Optional[bool] = None
+    imageRotation: typing.Optional[uint] = None
+    imageFlipHorizontal: typing.Optional[bool] = None
+    imageFlipVertical: typing.Optional[bool] = None
+    localVideoRecordingEnabled: typing.Optional[bool] = None
+    localSnapshotRecordingEnabled: typing.Optional[bool] = None
+    statusLightEnabled: typing.Optional[bool] = None
+    statusLightBrightness: typing.Optional[Globals.Enums.ThreeLevelAutoEnum] = None
+    depthSensorStatus: typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum] = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class AudioCodecEnum(MatterIntEnum):
@@ -47388,19 +47389,19 @@
                         ClusterObjectFieldDescriptor(Label="bitDepth", Tag=5, Type=uint),
                     ])
 
-            streamType: 'CameraAvStreamManagement.Enums.StreamTypeEnum' = 0
-            audioCodec: 'CameraAvStreamManagement.Enums.AudioCodecEnum' = 0
-            channelCount: 'uint' = 0
-            sampleRate: 'uint' = 0
-            bitRate: 'uint' = 0
-            bitDepth: 'uint' = 0
+            streamType: CameraAvStreamManagement.Enums.StreamTypeEnum = 0
+            audioCodec: CameraAvStreamManagement.Enums.AudioCodecEnum = 0
+            channelCount: uint = 0
+            sampleRate: uint = 0
+            bitRate: uint = 0
+            bitDepth: uint = 0
 
         @dataclass
         class AudioStreamAllocateResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47409,14 +47410,14 @@
                         ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=0, Type=uint),
                     ])
 
-            audioStreamID: 'uint' = 0
+            audioStreamID: uint = 0
 
         @dataclass
         class AudioStreamDeallocate(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47425,7 +47426,7 @@
                         ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=0, Type=uint),
                     ])
 
-            audioStreamID: 'uint' = 0
+            audioStreamID: uint = 0
 
         @dataclass
         class VideoStreamAllocate(ClusterCommand):
@@ -47452,25 +47453,25 @@
                         ClusterObjectFieldDescriptor(Label="OSDEnabled", Tag=11, Type=typing.Optional[bool]),
                     ])
 
-            streamType: 'CameraAvStreamManagement.Enums.StreamTypeEnum' = 0
-            videoCodec: 'CameraAvStreamManagement.Enums.VideoCodecEnum' = 0
-            minFrameRate: 'uint' = 0
-            maxFrameRate: 'uint' = 0
-            minResolution: 'CameraAvStreamManagement.Structs.VideoResolutionStruct' = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
-            maxResolution: 'CameraAvStreamManagement.Structs.VideoResolutionStruct' = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
-            minBitRate: 'uint' = 0
-            maxBitRate: 'uint' = 0
-            minFragmentLen: 'uint' = 0
-            maxFragmentLen: 'uint' = 0
-            watermarkEnabled: 'typing.Optional[bool]' = None
-            OSDEnabled: 'typing.Optional[bool]' = None
+            streamType: CameraAvStreamManagement.Enums.StreamTypeEnum = 0
+            videoCodec: CameraAvStreamManagement.Enums.VideoCodecEnum = 0
+            minFrameRate: uint = 0
+            maxFrameRate: uint = 0
+            minResolution: CameraAvStreamManagement.Structs.VideoResolutionStruct = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
+            maxResolution: CameraAvStreamManagement.Structs.VideoResolutionStruct = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
+            minBitRate: uint = 0
+            maxBitRate: uint = 0
+            minFragmentLen: uint = 0
+            maxFragmentLen: uint = 0
+            watermarkEnabled: typing.Optional[bool] = None
+            OSDEnabled: typing.Optional[bool] = None
 
         @dataclass
         class VideoStreamAllocateResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47479,14 +47480,14 @@
                         ClusterObjectFieldDescriptor(Label="videoStreamID", Tag=0, Type=uint),
                     ])
 
-            videoStreamID: 'uint' = 0
+            videoStreamID: uint = 0
 
         @dataclass
         class VideoStreamModify(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47498,17 +47499,17 @@
                         ClusterObjectFieldDescriptor(Label="OSDEnabled", Tag=3, Type=typing.Optional[bool]),
                     ])
 
-            videoStreamID: 'uint' = 0
-            resolution: 'typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct]' = None
-            watermarkEnabled: 'typing.Optional[bool]' = None
-            OSDEnabled: 'typing.Optional[bool]' = None
+            videoStreamID: uint = 0
+            resolution: typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct] = None
+            watermarkEnabled: typing.Optional[bool] = None
+            OSDEnabled: typing.Optional[bool] = None
 
         @dataclass
         class VideoStreamDeallocate(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47517,7 +47518,7 @@
                         ClusterObjectFieldDescriptor(Label="videoStreamID", Tag=0, Type=uint),
                     ])
 
-            videoStreamID: 'uint' = 0
+            videoStreamID: uint = 0
 
         @dataclass
         class SnapshotStreamAllocate(ClusterCommand):
@@ -47538,19 +47539,19 @@
                         ClusterObjectFieldDescriptor(Label="quality", Tag=5, Type=uint),
                     ])
 
-            imageCodec: 'CameraAvStreamManagement.Enums.ImageCodecEnum' = 0
-            frameRate: 'uint' = 0
-            bitRate: 'uint' = 0
-            minResolution: 'CameraAvStreamManagement.Structs.VideoResolutionStruct' = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
-            maxResolution: 'CameraAvStreamManagement.Structs.VideoResolutionStruct' = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
-            quality: 'uint' = 0
+            imageCodec: CameraAvStreamManagement.Enums.ImageCodecEnum = 0
+            frameRate: uint = 0
+            bitRate: uint = 0
+            minResolution: CameraAvStreamManagement.Structs.VideoResolutionStruct = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
+            maxResolution: CameraAvStreamManagement.Structs.VideoResolutionStruct = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
+            quality: uint = 0
 
         @dataclass
         class SnapshotStreamAllocateResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47559,14 +47560,14 @@
                         ClusterObjectFieldDescriptor(Label="snapshotStreamID", Tag=0, Type=uint),
                     ])
 
-            snapshotStreamID: 'uint' = 0
+            snapshotStreamID: uint = 0
 
         @dataclass
         class SnapshotStreamDeallocate(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000009
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47575,14 +47576,14 @@
                         ClusterObjectFieldDescriptor(Label="snapshotStreamID", Tag=0, Type=uint),
                     ])
 
-            snapshotStreamID: 'uint' = 0
+            snapshotStreamID: uint = 0
 
         @dataclass
         class SetStreamPriorities(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x0000000A
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47591,14 +47592,14 @@
                         ClusterObjectFieldDescriptor(Label="streamPriorities", Tag=0, Type=typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum]),
                     ])
 
-            streamPriorities: 'typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum]' = field(default_factory=lambda: [])
+            streamPriorities: typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class CaptureSnapshot(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x0000000B
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47608,15 +47609,15 @@
                         ClusterObjectFieldDescriptor(Label="requestedResolution", Tag=1, Type=CameraAvStreamManagement.Structs.VideoResolutionStruct),
                     ])
 
-            snapshotStreamID: 'uint' = 0
-            requestedResolution: 'CameraAvStreamManagement.Structs.VideoResolutionStruct' = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
+            snapshotStreamID: uint = 0
+            requestedResolution: CameraAvStreamManagement.Structs.VideoResolutionStruct = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
 
         @dataclass
         class CaptureSnapshotResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x0000000C
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47627,16 +47628,16 @@
                         ClusterObjectFieldDescriptor(Label="resolution", Tag=2, Type=CameraAvStreamManagement.Structs.VideoResolutionStruct),
                     ])
 
-            data: 'bytes' = b""
-            imageCodec: 'CameraAvStreamManagement.Enums.ImageCodecEnum' = 0
-            resolution: 'CameraAvStreamManagement.Structs.VideoResolutionStruct' = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
+            data: bytes = b""
+            imageCodec: CameraAvStreamManagement.Enums.ImageCodecEnum = 0
+            resolution: CameraAvStreamManagement.Structs.VideoResolutionStruct = field(default_factory=lambda: CameraAvStreamManagement.Structs.VideoResolutionStruct())
 
         @dataclass
         class SetViewport(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x0000000D
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47645,14 +47646,14 @@
                         ClusterObjectFieldDescriptor(Label="viewport", Tag=0, Type=CameraAvStreamManagement.Structs.ViewportStruct),
                     ])
 
-            viewport: 'CameraAvStreamManagement.Structs.ViewportStruct' = field(default_factory=lambda: CameraAvStreamManagement.Structs.ViewportStruct())
+            viewport: CameraAvStreamManagement.Structs.ViewportStruct = field(default_factory=lambda: CameraAvStreamManagement.Structs.ViewportStruct())
 
         @dataclass
         class SetImageRotation(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x0000000E
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47661,14 +47662,14 @@
                         ClusterObjectFieldDescriptor(Label="angle", Tag=0, Type=uint),
                     ])
 
-            angle: 'uint' = 0
+            angle: uint = 0
 
         @dataclass
         class SetImageFlipHorizontal(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x0000000F
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47677,14 +47678,14 @@
                         ClusterObjectFieldDescriptor(Label="enabled", Tag=0, Type=bool),
                     ])
 
-            enabled: 'bool' = False
+            enabled: bool = False
 
         @dataclass
         class SetImageFlipVertical(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000551
             command_id: typing.ClassVar[int] = 0x00000010
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -47693,7 +47694,7 @@
                         ClusterObjectFieldDescriptor(Label="enabled", Tag=0, Type=bool),
                     ])
 
-            enabled: 'bool' = False
+            enabled: bool = False
 
     class Attributes:
         @dataclass
@@ -47710,7 +47711,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MaxEncodedPixelRate(ClusterAttributeDescriptor):
@@ -47726,7 +47727,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class VideoSensorParams(ClusterAttributeDescriptor):
@@ -47742,7 +47743,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Structs.VideoSensorParamsStruct])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Structs.VideoSensorParamsStruct]' = None
+            value: typing.Optional[CameraAvStreamManagement.Structs.VideoSensorParamsStruct] = None
 
         @dataclass
         class NightVisionCapable(ClusterAttributeDescriptor):
@@ -47758,7 +47759,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class MinViewport(ClusterAttributeDescriptor):
@@ -47774,7 +47775,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct]' = None
+            value: typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct] = None
 
         @dataclass
         class RateDistortionTradeOffPoints(ClusterAttributeDescriptor):
@@ -47790,7 +47791,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[CameraAvStreamManagement.Structs.RateDistortionTradeOffPointsStruct]])
 
-            value: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.RateDistortionTradeOffPointsStruct]]' = None
+            value: typing.Optional[typing.List[CameraAvStreamManagement.Structs.RateDistortionTradeOffPointsStruct]] = None
 
         @dataclass
         class MaxPreRollBufferSize(ClusterAttributeDescriptor):
@@ -47806,7 +47807,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MicrophoneCapabilities(ClusterAttributeDescriptor):
@@ -47822,7 +47823,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct]' = None
+            value: typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct] = None
 
         @dataclass
         class SpeakerCapabilities(ClusterAttributeDescriptor):
@@ -47838,7 +47839,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct]' = None
+            value: typing.Optional[CameraAvStreamManagement.Structs.AudioCapabilitiesStruct] = None
 
         @dataclass
         class TwoWayTalkSupport(ClusterAttributeDescriptor):
@@ -47854,7 +47855,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Enums.TwoWayTalkSupportTypeEnum])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Enums.TwoWayTalkSupportTypeEnum]' = None
+            value: typing.Optional[CameraAvStreamManagement.Enums.TwoWayTalkSupportTypeEnum] = None
 
         @dataclass
         class SupportedSnapshotParams(ClusterAttributeDescriptor):
@@ -47870,7 +47871,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotParamsStruct]])
 
-            value: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotParamsStruct]]' = None
+            value: typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotParamsStruct]] = None
 
         @dataclass
         class MaxNetworkBandwidth(ClusterAttributeDescriptor):
@@ -47886,7 +47887,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class CurrentFrameRate(ClusterAttributeDescriptor):
@@ -47902,7 +47903,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class HDRModeEnabled(ClusterAttributeDescriptor):
@@ -47918,7 +47919,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class CurrentVideoCodecs(ClusterAttributeDescriptor):
@@ -47934,7 +47935,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[CameraAvStreamManagement.Enums.VideoCodecEnum]])
 
-            value: 'typing.Optional[typing.List[CameraAvStreamManagement.Enums.VideoCodecEnum]]' = None
+            value: typing.Optional[typing.List[CameraAvStreamManagement.Enums.VideoCodecEnum]] = None
 
         @dataclass
         class CurrentSnapshotConfig(ClusterAttributeDescriptor):
@@ -47950,7 +47951,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Structs.SnapshotParamsStruct])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Structs.SnapshotParamsStruct]' = None
+            value: typing.Optional[CameraAvStreamManagement.Structs.SnapshotParamsStruct] = None
 
         @dataclass
         class FabricsUsingCamera(ClusterAttributeDescriptor):
@@ -47966,7 +47967,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AllocatedVideoStreams(ClusterAttributeDescriptor):
@@ -47982,7 +47983,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[CameraAvStreamManagement.Structs.VideoStreamStruct]])
 
-            value: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.VideoStreamStruct]]' = None
+            value: typing.Optional[typing.List[CameraAvStreamManagement.Structs.VideoStreamStruct]] = None
 
         @dataclass
         class AllocatedAudioStreams(ClusterAttributeDescriptor):
@@ -47998,7 +47999,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[CameraAvStreamManagement.Structs.AudioStreamStruct]])
 
-            value: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.AudioStreamStruct]]' = None
+            value: typing.Optional[typing.List[CameraAvStreamManagement.Structs.AudioStreamStruct]] = None
 
         @dataclass
         class AllocatedSnapshotStreams(ClusterAttributeDescriptor):
@@ -48014,7 +48015,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotStreamStruct]])
 
-            value: 'typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotStreamStruct]]' = None
+            value: typing.Optional[typing.List[CameraAvStreamManagement.Structs.SnapshotStreamStruct]] = None
 
         @dataclass
         class RankedVideoStreamPrioritiesList(ClusterAttributeDescriptor):
@@ -48030,7 +48031,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum]])
 
-            value: 'typing.Optional[typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum]]' = None
+            value: typing.Optional[typing.List[CameraAvStreamManagement.Enums.StreamTypeEnum]] = None
 
         @dataclass
         class SoftRecordingPrivacyModeEnabled(ClusterAttributeDescriptor):
@@ -48046,7 +48047,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class SoftLivestreamPrivacyModeEnabled(ClusterAttributeDescriptor):
@@ -48062,7 +48063,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class HardPrivacyModeOn(ClusterAttributeDescriptor):
@@ -48078,7 +48079,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class NightVision(ClusterAttributeDescriptor):
@@ -48094,7 +48095,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum]' = None
+            value: typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum] = None
 
         @dataclass
         class NightVisionIllum(ClusterAttributeDescriptor):
@@ -48110,7 +48111,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum]' = None
+            value: typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum] = None
 
         @dataclass
         class AWBEnabled(ClusterAttributeDescriptor):
@@ -48126,7 +48127,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class AutoShutterSpeedEnabled(ClusterAttributeDescriptor):
@@ -48142,7 +48143,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class AutoISOEnabled(ClusterAttributeDescriptor):
@@ -48158,7 +48159,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class Viewport(ClusterAttributeDescriptor):
@@ -48174,7 +48175,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Structs.ViewportStruct])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Structs.ViewportStruct]' = None
+            value: typing.Optional[CameraAvStreamManagement.Structs.ViewportStruct] = None
 
         @dataclass
         class SpeakerMuted(ClusterAttributeDescriptor):
@@ -48190,7 +48191,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class SpeakerVolumeLevel(ClusterAttributeDescriptor):
@@ -48206,7 +48207,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SpeakerMaxLevel(ClusterAttributeDescriptor):
@@ -48222,7 +48223,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class SpeakerMinLevel(ClusterAttributeDescriptor):
@@ -48238,7 +48239,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MicrophoneMuted(ClusterAttributeDescriptor):
@@ -48254,7 +48255,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class MicrophoneVolumeLevel(ClusterAttributeDescriptor):
@@ -48270,7 +48271,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MicrophoneMaxLevel(ClusterAttributeDescriptor):
@@ -48286,7 +48287,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MicrophoneMinLevel(ClusterAttributeDescriptor):
@@ -48302,7 +48303,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class MicrophoneAGCEnabled(ClusterAttributeDescriptor):
@@ -48318,7 +48319,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class ImageRotation(ClusterAttributeDescriptor):
@@ -48334,7 +48335,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class ImageFlipHorizontal(ClusterAttributeDescriptor):
@@ -48350,7 +48351,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class ImageFlipVertical(ClusterAttributeDescriptor):
@@ -48366,7 +48367,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class LocalVideoRecordingEnabled(ClusterAttributeDescriptor):
@@ -48382,7 +48383,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class LocalSnapshotRecordingEnabled(ClusterAttributeDescriptor):
@@ -48398,7 +48399,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class StatusLightEnabled(ClusterAttributeDescriptor):
@@ -48414,7 +48415,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class StatusLightBrightness(ClusterAttributeDescriptor):
@@ -48430,7 +48431,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[Globals.Enums.ThreeLevelAutoEnum])
 
-            value: 'typing.Optional[Globals.Enums.ThreeLevelAutoEnum]' = None
+            value: typing.Optional[Globals.Enums.ThreeLevelAutoEnum] = None
 
         @dataclass
         class DepthSensorStatus(ClusterAttributeDescriptor):
@@ -48446,7 +48447,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum])
 
-            value: 'typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum]' = None
+            value: typing.Optional[CameraAvStreamManagement.Enums.TriStateAutoEnum] = None
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -48462,7 +48463,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -48478,7 +48479,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -48494,7 +48495,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -48510,7 +48511,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -48526,7 +48527,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -48542,7 +48543,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -48572,17 +48573,17 @@
                         ClusterObjectFieldDescriptor(Label="maxFragmentLen", Tag=10, Type=typing.Optional[uint]),
                     ])
 
-            videoStreamID: 'uint' = 0
-            streamType: 'typing.Optional[CameraAvStreamManagement.Enums.StreamTypeEnum]' = None
-            videoCodec: 'typing.Optional[CameraAvStreamManagement.Enums.VideoCodecEnum]' = None
-            minFrameRate: 'typing.Optional[uint]' = None
-            maxFrameRate: 'typing.Optional[uint]' = None
-            minResolution: 'typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct]' = None
-            maxResolution: 'typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct]' = None
-            minBitRate: 'typing.Optional[uint]' = None
-            maxBitRate: 'typing.Optional[uint]' = None
-            minFragmentLen: 'typing.Optional[uint]' = None
-            maxFragmentLen: 'typing.Optional[uint]' = None
+            videoStreamID: uint = 0
+            streamType: typing.Optional[CameraAvStreamManagement.Enums.StreamTypeEnum] = None
+            videoCodec: typing.Optional[CameraAvStreamManagement.Enums.VideoCodecEnum] = None
+            minFrameRate: typing.Optional[uint] = None
+            maxFrameRate: typing.Optional[uint] = None
+            minResolution: typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct] = None
+            maxResolution: typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct] = None
+            minBitRate: typing.Optional[uint] = None
+            maxBitRate: typing.Optional[uint] = None
+            minFragmentLen: typing.Optional[uint] = None
+            maxFragmentLen: typing.Optional[uint] = None
 
         @dataclass
         class AudioStreamChanged(ClusterEvent):
@@ -48607,13 +48608,13 @@
                         ClusterObjectFieldDescriptor(Label="bitDepth", Tag=6, Type=typing.Optional[uint]),
                     ])
 
-            audioStreamID: 'uint' = 0
-            streamType: 'typing.Optional[CameraAvStreamManagement.Enums.StreamTypeEnum]' = None
-            audioCodec: 'typing.Optional[CameraAvStreamManagement.Enums.AudioCodecEnum]' = None
-            channelCount: 'typing.Optional[uint]' = None
-            sampleRate: 'typing.Optional[uint]' = None
-            bitRate: 'typing.Optional[uint]' = None
-            bitDepth: 'typing.Optional[uint]' = None
+            audioStreamID: uint = 0
+            streamType: typing.Optional[CameraAvStreamManagement.Enums.StreamTypeEnum] = None
+            audioCodec: typing.Optional[CameraAvStreamManagement.Enums.AudioCodecEnum] = None
+            channelCount: typing.Optional[uint] = None
+            sampleRate: typing.Optional[uint] = None
+            bitRate: typing.Optional[uint] = None
+            bitDepth: typing.Optional[uint] = None
 
         @dataclass
         class SnapshotStreamChanged(ClusterEvent):
@@ -48638,13 +48639,13 @@
                         ClusterObjectFieldDescriptor(Label="quality", Tag=6, Type=typing.Optional[uint]),
                     ])
 
-            snapshotStreamID: 'uint' = 0
-            imageCodec: 'typing.Optional[CameraAvStreamManagement.Enums.ImageCodecEnum]' = None
-            frameRate: 'typing.Optional[uint]' = None
-            bitRate: 'typing.Optional[uint]' = None
-            minResolution: 'typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct]' = None
-            maxResolution: 'typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct]' = None
-            quality: 'typing.Optional[uint]' = None
+            snapshotStreamID: uint = 0
+            imageCodec: typing.Optional[CameraAvStreamManagement.Enums.ImageCodecEnum] = None
+            frameRate: typing.Optional[uint] = None
+            bitRate: typing.Optional[uint] = None
+            minResolution: typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct] = None
+            maxResolution: typing.Optional[CameraAvStreamManagement.Structs.VideoResolutionStruct] = None
+            quality: typing.Optional[uint] = None
 
 
 @dataclass
@@ -48664,13 +48665,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    currentSessions: 'typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    currentSessions: typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class StreamTypeEnum(MatterIntEnum):
@@ -48768,19 +48769,19 @@
                         ClusterObjectFieldDescriptor(Label="metadataOptions", Tag=5, Type=typing.Optional[uint]),
                     ])
 
-            streamType: 'WebRTCTransportProvider.Enums.StreamTypeEnum' = 0
-            videoStreamID: 'typing.Union[None, Nullable, uint]' = None
-            audioStreamID: 'typing.Union[None, Nullable, uint]' = None
-            ICEServers: 'typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]]' = None
-            ICETransportPolicy: 'typing.Optional[str]' = None
-            metadataOptions: 'typing.Optional[uint]' = None
+            streamType: WebRTCTransportProvider.Enums.StreamTypeEnum = 0
+            videoStreamID: typing.Union[None, Nullable, uint] = None
+            audioStreamID: typing.Union[None, Nullable, uint] = None
+            ICEServers: typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]] = None
+            ICETransportPolicy: typing.Optional[str] = None
+            metadataOptions: typing.Optional[uint] = None
 
         @dataclass
         class SolicitOfferResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000553
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -48792,10 +48793,10 @@
                         ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=3, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            deferredOffer: 'bool' = False
-            videoStreamID: 'typing.Union[None, Nullable, uint]' = None
-            audioStreamID: 'typing.Union[None, Nullable, uint]' = None
+            webRTCSessionID: uint = 0
+            deferredOffer: bool = False
+            videoStreamID: typing.Union[None, Nullable, uint] = None
+            audioStreamID: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class ProvideOffer(ClusterCommand):
@@ -48818,21 +48819,21 @@
                         ClusterObjectFieldDescriptor(Label="metadataOptions", Tag=7, Type=typing.Optional[uint]),
                     ])
 
-            webRTCSessionID: 'typing.Union[Nullable, uint]' = NullValue
-            sdp: 'str' = ""
-            streamType: 'WebRTCTransportProvider.Enums.StreamTypeEnum' = 0
-            videoStreamID: 'typing.Union[None, Nullable, uint]' = None
-            audioStreamID: 'typing.Union[None, Nullable, uint]' = None
-            ICEServers: 'typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]]' = None
-            ICETransportPolicy: 'typing.Optional[str]' = None
-            metadataOptions: 'typing.Optional[uint]' = None
+            webRTCSessionID: typing.Union[Nullable, uint] = NullValue
+            sdp: str = ""
+            streamType: WebRTCTransportProvider.Enums.StreamTypeEnum = 0
+            videoStreamID: typing.Union[None, Nullable, uint] = None
+            audioStreamID: typing.Union[None, Nullable, uint] = None
+            ICEServers: typing.Optional[typing.List[WebRTCTransportProvider.Structs.ICEServerStruct]] = None
+            ICETransportPolicy: typing.Optional[str] = None
+            metadataOptions: typing.Optional[uint] = None
 
         @dataclass
         class ProvideOfferResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000553
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -48843,16 +48844,16 @@
                         ClusterObjectFieldDescriptor(Label="audioStreamID", Tag=2, Type=uint),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            videoStreamID: 'uint' = 0
-            audioStreamID: 'uint' = 0
+            webRTCSessionID: uint = 0
+            videoStreamID: uint = 0
+            audioStreamID: uint = 0
 
         @dataclass
         class ProvideAnswer(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000553
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -48862,15 +48863,15 @@
                         ClusterObjectFieldDescriptor(Label="sdp", Tag=1, Type=str),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            sdp: 'str' = ""
+            webRTCSessionID: uint = 0
+            sdp: str = ""
 
         @dataclass
         class ProvideICECandidate(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000553
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -48880,15 +48881,15 @@
                         ClusterObjectFieldDescriptor(Label="ICECandidate", Tag=1, Type=str),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            ICECandidate: 'str' = ""
+            webRTCSessionID: uint = 0
+            ICECandidate: str = ""
 
         @dataclass
         class EndSession(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000553
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -48898,8 +48899,8 @@
                         ClusterObjectFieldDescriptor(Label="reason", Tag=1, Type=WebRTCTransportProvider.Enums.WebRTCEndReasonEnum),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            reason: 'WebRTCTransportProvider.Enums.WebRTCEndReasonEnum' = 0
+            webRTCSessionID: uint = 0
+            reason: WebRTCTransportProvider.Enums.WebRTCEndReasonEnum = 0
 
     class Attributes:
         @dataclass
@@ -48916,7 +48917,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct])
 
-            value: 'typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[WebRTCTransportProvider.Structs.WebRTCSessionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -48932,7 +48933,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -48948,7 +48949,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -48964,7 +48965,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -48980,7 +48981,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -48996,7 +48997,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -49012,7 +49013,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -49032,13 +49033,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    currentSessions: 'typing.List[WebRTCTransportRequestor.Structs.WebRTCSessionStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    currentSessions: typing.List[WebRTCTransportRequestor.Structs.WebRTCSessionStruct] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class StreamTypeEnum(MatterIntEnum):
@@ -49122,7 +49123,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000554
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -49134,17 +49135,17 @@
                         ClusterObjectFieldDescriptor(Label="ICETransportPolicy", Tag=3, Type=typing.Optional[str]),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            sdp: 'str' = ""
-            ICEServers: 'typing.Optional[typing.List[WebRTCTransportRequestor.Structs.ICEServerStruct]]' = None
-            ICETransportPolicy: 'typing.Optional[str]' = None
+            webRTCSessionID: uint = 0
+            sdp: str = ""
+            ICEServers: typing.Optional[typing.List[WebRTCTransportRequestor.Structs.ICEServerStruct]] = None
+            ICETransportPolicy: typing.Optional[str] = None
 
         @dataclass
         class Answer(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000554
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -49154,15 +49155,15 @@
                         ClusterObjectFieldDescriptor(Label="sdp", Tag=1, Type=str),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            sdp: 'str' = ""
+            webRTCSessionID: uint = 0
+            sdp: str = ""
 
         @dataclass
         class ICECandidate(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000554
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -49172,15 +49173,15 @@
                         ClusterObjectFieldDescriptor(Label="ICECandidate", Tag=1, Type=str),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            ICECandidate: 'str' = ""
+            webRTCSessionID: uint = 0
+            ICECandidate: str = ""
 
         @dataclass
         class End(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000554
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -49190,8 +49191,8 @@
                         ClusterObjectFieldDescriptor(Label="reason", Tag=1, Type=WebRTCTransportRequestor.Enums.WebRTCEndReasonEnum),
                     ])
 
-            webRTCSessionID: 'uint' = 0
-            reason: 'WebRTCTransportRequestor.Enums.WebRTCEndReasonEnum' = 0
+            webRTCSessionID: uint = 0
+            reason: WebRTCTransportRequestor.Enums.WebRTCEndReasonEnum = 0
 
     class Attributes:
         @dataclass
@@ -49208,7 +49209,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[WebRTCTransportRequestor.Structs.WebRTCSessionStruct])
 
-            value: 'typing.List[WebRTCTransportRequestor.Structs.WebRTCSessionStruct]' = field(default_factory=lambda: [])
+            value: typing.List[WebRTCTransportRequestor.Structs.WebRTCSessionStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -49224,7 +49225,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -49240,7 +49241,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -49256,7 +49257,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -49272,7 +49273,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -49288,7 +49289,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -49304,7 +49305,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -49326,15 +49327,15 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    installedChimeSounds: 'typing.List[Chime.Structs.ChimeSoundStruct]' = None
-    activeChimeID: 'uint' = None
-    enabled: 'bool' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    installedChimeSounds: typing.List[Chime.Structs.ChimeSoundStruct] = field(default_factory=lambda: [])
+    activeChimeID: uint = 0
+    enabled: bool = False
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Structs:
         @dataclass
@@ -49356,7 +49357,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000556
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -49379,7 +49380,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[Chime.Structs.ChimeSoundStruct])
 
-            value: 'typing.List[Chime.Structs.ChimeSoundStruct]' = field(default_factory=lambda: [])
+            value: typing.List[Chime.Structs.ChimeSoundStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class ActiveChimeID(ClusterAttributeDescriptor):
@@ -49395,7 +49396,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Enabled(ClusterAttributeDescriptor):
@@ -49411,7 +49412,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -49427,7 +49428,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -49443,7 +49444,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -49459,7 +49460,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -49475,7 +49476,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -49491,7 +49492,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -49507,7 +49508,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -49528,14 +49529,14 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    deviceDirectory: 'typing.List[EcosystemInformation.Structs.EcosystemDeviceStruct]' = None
-    locationDirectory: 'typing.List[EcosystemInformation.Structs.EcosystemLocationStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    deviceDirectory: typing.List[EcosystemInformation.Structs.EcosystemDeviceStruct] = field(default_factory=lambda: [])
+    locationDirectory: typing.List[EcosystemInformation.Structs.EcosystemLocationStruct] = field(default_factory=lambda: [])
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Structs:
         @dataclass
@@ -49608,7 +49609,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[EcosystemInformation.Structs.EcosystemDeviceStruct])
 
-            value: 'typing.List[EcosystemInformation.Structs.EcosystemDeviceStruct]' = field(default_factory=lambda: [])
+            value: typing.List[EcosystemInformation.Structs.EcosystemDeviceStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class LocationDirectory(ClusterAttributeDescriptor):
@@ -49624,7 +49625,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[EcosystemInformation.Structs.EcosystemLocationStruct])
 
-            value: 'typing.List[EcosystemInformation.Structs.EcosystemLocationStruct]' = field(default_factory=lambda: [])
+            value: typing.List[EcosystemInformation.Structs.EcosystemLocationStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -49640,7 +49641,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -49656,7 +49657,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -49672,7 +49673,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -49688,7 +49689,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -49704,7 +49705,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -49720,7 +49721,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -49740,13 +49741,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    supportedDeviceCategories: 'uint' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    supportedDeviceCategories: uint = 0
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Bitmaps:
         class SupportedDeviceCategoryBitmap(IntFlag):
@@ -49758,7 +49759,7 @@
             cluster_id: typing.ClassVar[int] = 0x00000751
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -49770,10 +49771,10 @@
                         ClusterObjectFieldDescriptor(Label="label", Tag=3, Type=typing.Optional[str]),
                     ])
 
-            requestID: 'uint' = 0
-            vendorID: 'uint' = 0
-            productID: 'uint' = 0
-            label: 'typing.Optional[str]' = None
+            requestID: uint = 0
+            vendorID: uint = 0
+            productID: uint = 0
+            label: typing.Optional[str] = None
 
         @dataclass
         class CommissionNode(ClusterCommand):
@@ -49790,15 +49791,15 @@
                         ClusterObjectFieldDescriptor(Label="responseTimeoutSeconds", Tag=1, Type=uint),
                     ])
 
-            requestID: 'uint' = 0
-            responseTimeoutSeconds: 'uint' = 0
+            requestID: uint = 0
+            responseTimeoutSeconds: uint = 0
 
         @dataclass
         class ReverseOpenCommissioningWindow(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0x00000751
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -49811,11 +49812,11 @@
                         ClusterObjectFieldDescriptor(Label="salt", Tag=4, Type=bytes),
                     ])
 
-            commissioningTimeout: 'uint' = 0
-            PAKEPasscodeVerifier: 'bytes' = b""
-            discriminator: 'uint' = 0
-            iterations: 'uint' = 0
-            salt: 'bytes' = b""
+            commissioningTimeout: uint = 0
+            PAKEPasscodeVerifier: bytes = b""
+            discriminator: uint = 0
+            iterations: uint = 0
+            salt: bytes = b""
 
     class Attributes:
         @dataclass
@@ -49832,7 +49833,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -49848,7 +49849,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -49864,7 +49865,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -49880,7 +49881,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -49896,7 +49897,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -49912,7 +49913,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -49928,7 +49929,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -49951,10 +49952,10 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=254, Type=uint),
                     ])
 
-            requestID: 'uint' = 0
-            clientNodeID: 'uint' = 0
-            statusCode: 'uint' = 0
-            fabricIndex: 'uint' = 0
+            requestID: uint = 0
+            clientNodeID: uint = 0
+            statusCode: uint = 0
+            fabricIndex: uint = 0
 
 
 @dataclass
@@ -50062,101 +50063,101 @@
                 ClusterObjectFieldDescriptor(Label="meiInt8u", Tag=0xFFF24F01, Type=uint),
             ])
 
-    boolean: 'bool' = None
-    bitmap8: 'uint' = None
-    bitmap16: 'uint' = None
-    bitmap32: 'uint' = None
-    bitmap64: 'uint' = None
-    int8u: 'uint' = None
-    int16u: 'uint' = None
-    int24u: 'uint' = None
-    int32u: 'uint' = None
-    int40u: 'uint' = None
-    int48u: 'uint' = None
-    int56u: 'uint' = None
-    int64u: 'uint' = None
-    int8s: 'int' = None
-    int16s: 'int' = None
-    int24s: 'int' = None
-    int32s: 'int' = None
-    int40s: 'int' = None
-    int48s: 'int' = None
-    int56s: 'int' = None
-    int64s: 'int' = None
-    enum8: 'uint' = None
-    enum16: 'uint' = None
-    floatSingle: 'float32' = None
-    floatDouble: 'float' = None
-    octetString: 'bytes' = None
-    listInt8u: 'typing.List[uint]' = None
-    listOctetString: 'typing.List[bytes]' = None
-    listStructOctetString: 'typing.List[UnitTesting.Structs.TestListStructOctet]' = None
-    longOctetString: 'bytes' = None
-    charString: 'str' = None
-    longCharString: 'str' = None
-    epochUs: 'uint' = None
-    epochS: 'uint' = None
-    vendorId: 'uint' = None
-    listNullablesAndOptionalsStruct: 'typing.List[UnitTesting.Structs.NullablesAndOptionalsStruct]' = None
-    enumAttr: 'UnitTesting.Enums.SimpleEnum' = None
-    structAttr: 'UnitTesting.Structs.SimpleStruct' = None
-    rangeRestrictedInt8u: 'uint' = None
-    rangeRestrictedInt8s: 'int' = None
-    rangeRestrictedInt16u: 'uint' = None
-    rangeRestrictedInt16s: 'int' = None
-    listLongOctetString: 'typing.List[bytes]' = None
-    listFabricScoped: 'typing.List[UnitTesting.Structs.TestFabricScoped]' = None
-    timedWriteBoolean: 'bool' = None
-    generalErrorBoolean: 'bool' = None
-    clusterErrorBoolean: 'bool' = None
-    globalEnum: 'Globals.Enums.TestGlobalEnum' = None
-    globalStruct: 'Globals.Structs.TestGlobalStruct' = None
-    unsupported: 'typing.Optional[bool]' = None
-    readFailureCode: 'typing.Optional[uint]' = None
-    failureInt32U: 'typing.Optional[uint]' = None
-    nullableBoolean: 'typing.Union[Nullable, bool]' = None
-    nullableBitmap8: 'typing.Union[Nullable, uint]' = None
-    nullableBitmap16: 'typing.Union[Nullable, uint]' = None
-    nullableBitmap32: 'typing.Union[Nullable, uint]' = None
-    nullableBitmap64: 'typing.Union[Nullable, uint]' = None
-    nullableInt8u: 'typing.Union[Nullable, uint]' = None
-    nullableInt16u: 'typing.Union[Nullable, uint]' = None
-    nullableInt24u: 'typing.Union[Nullable, uint]' = None
-    nullableInt32u: 'typing.Union[Nullable, uint]' = None
-    nullableInt40u: 'typing.Union[Nullable, uint]' = None
-    nullableInt48u: 'typing.Union[Nullable, uint]' = None
-    nullableInt56u: 'typing.Union[Nullable, uint]' = None
-    nullableInt64u: 'typing.Union[Nullable, uint]' = None
-    nullableInt8s: 'typing.Union[Nullable, int]' = None
-    nullableInt16s: 'typing.Union[Nullable, int]' = None
-    nullableInt24s: 'typing.Union[Nullable, int]' = None
-    nullableInt32s: 'typing.Union[Nullable, int]' = None
-    nullableInt40s: 'typing.Union[Nullable, int]' = None
-    nullableInt48s: 'typing.Union[Nullable, int]' = None
-    nullableInt56s: 'typing.Union[Nullable, int]' = None
-    nullableInt64s: 'typing.Union[Nullable, int]' = None
-    nullableEnum8: 'typing.Union[Nullable, uint]' = None
-    nullableEnum16: 'typing.Union[Nullable, uint]' = None
-    nullableFloatSingle: 'typing.Union[Nullable, float32]' = None
-    nullableFloatDouble: 'typing.Union[Nullable, float]' = None
-    nullableOctetString: 'typing.Union[Nullable, bytes]' = None
-    nullableCharString: 'typing.Union[Nullable, str]' = None
-    nullableEnumAttr: 'typing.Union[Nullable, UnitTesting.Enums.SimpleEnum]' = None
-    nullableStruct: 'typing.Union[Nullable, UnitTesting.Structs.SimpleStruct]' = None
-    nullableRangeRestrictedInt8u: 'typing.Union[Nullable, uint]' = None
-    nullableRangeRestrictedInt8s: 'typing.Union[Nullable, int]' = None
-    nullableRangeRestrictedInt16u: 'typing.Union[Nullable, uint]' = None
-    nullableRangeRestrictedInt16s: 'typing.Union[Nullable, int]' = None
-    writeOnlyInt8u: 'typing.Optional[uint]' = None
-    nullableGlobalEnum: 'typing.Union[Nullable, Globals.Enums.TestGlobalEnum]' = None
-    nullableGlobalStruct: 'typing.Union[Nullable, Globals.Structs.TestGlobalStruct]' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
-    meiInt8u: 'uint' = None
+    boolean: bool = False
+    bitmap8: uint = 0
+    bitmap16: uint = 0
+    bitmap32: uint = 0
+    bitmap64: uint = 0
+    int8u: uint = 0
+    int16u: uint = 0
+    int24u: uint = 0
+    int32u: uint = 0
+    int40u: uint = 0
+    int48u: uint = 0
+    int56u: uint = 0
+    int64u: uint = 0
+    int8s: int = 0
+    int16s: int = 0
+    int24s: int = 0
+    int32s: int = 0
+    int40s: int = 0
+    int48s: int = 0
+    int56s: int = 0
+    int64s: int = 0
+    enum8: uint = 0
+    enum16: uint = 0
+    floatSingle: float32 = 0.0
+    floatDouble: float = 0.0
+    octetString: bytes = b""
+    listInt8u: typing.List[uint] = field(default_factory=lambda: [])
+    listOctetString: typing.List[bytes] = field(default_factory=lambda: [])
+    listStructOctetString: typing.List[UnitTesting.Structs.TestListStructOctet] = field(default_factory=lambda: [])
+    longOctetString: bytes = b""
+    charString: str = ""
+    longCharString: str = ""
+    epochUs: uint = 0
+    epochS: uint = 0
+    vendorId: uint = 0
+    listNullablesAndOptionalsStruct: typing.List[UnitTesting.Structs.NullablesAndOptionalsStruct] = field(default_factory=lambda: [])
+    enumAttr: UnitTesting.Enums.SimpleEnum = 0
+    structAttr: UnitTesting.Structs.SimpleStruct = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
+    rangeRestrictedInt8u: uint = 0
+    rangeRestrictedInt8s: int = 0
+    rangeRestrictedInt16u: uint = 0
+    rangeRestrictedInt16s: int = 0
+    listLongOctetString: typing.List[bytes] = field(default_factory=lambda: [])
+    listFabricScoped: typing.List[UnitTesting.Structs.TestFabricScoped] = field(default_factory=lambda: [])
+    timedWriteBoolean: bool = False
+    generalErrorBoolean: bool = False
+    clusterErrorBoolean: bool = False
+    globalEnum: Globals.Enums.TestGlobalEnum = 0
+    globalStruct: Globals.Structs.TestGlobalStruct = field(default_factory=lambda: Globals.Structs.TestGlobalStruct())
+    unsupported: typing.Optional[bool] = None
+    readFailureCode: typing.Optional[uint] = None
+    failureInt32U: typing.Optional[uint] = None
+    nullableBoolean: typing.Union[Nullable, bool] = NullValue
+    nullableBitmap8: typing.Union[Nullable, uint] = NullValue
+    nullableBitmap16: typing.Union[Nullable, uint] = NullValue
+    nullableBitmap32: typing.Union[Nullable, uint] = NullValue
+    nullableBitmap64: typing.Union[Nullable, uint] = NullValue
+    nullableInt8u: typing.Union[Nullable, uint] = NullValue
+    nullableInt16u: typing.Union[Nullable, uint] = NullValue
+    nullableInt24u: typing.Union[Nullable, uint] = NullValue
+    nullableInt32u: typing.Union[Nullable, uint] = NullValue
+    nullableInt40u: typing.Union[Nullable, uint] = NullValue
+    nullableInt48u: typing.Union[Nullable, uint] = NullValue
+    nullableInt56u: typing.Union[Nullable, uint] = NullValue
+    nullableInt64u: typing.Union[Nullable, uint] = NullValue
+    nullableInt8s: typing.Union[Nullable, int] = NullValue
+    nullableInt16s: typing.Union[Nullable, int] = NullValue
+    nullableInt24s: typing.Union[Nullable, int] = NullValue
+    nullableInt32s: typing.Union[Nullable, int] = NullValue
+    nullableInt40s: typing.Union[Nullable, int] = NullValue
+    nullableInt48s: typing.Union[Nullable, int] = NullValue
+    nullableInt56s: typing.Union[Nullable, int] = NullValue
+    nullableInt64s: typing.Union[Nullable, int] = NullValue
+    nullableEnum8: typing.Union[Nullable, uint] = NullValue
+    nullableEnum16: typing.Union[Nullable, uint] = NullValue
+    nullableFloatSingle: typing.Union[Nullable, float32] = NullValue
+    nullableFloatDouble: typing.Union[Nullable, float] = NullValue
+    nullableOctetString: typing.Union[Nullable, bytes] = NullValue
+    nullableCharString: typing.Union[Nullable, str] = NullValue
+    nullableEnumAttr: typing.Union[Nullable, UnitTesting.Enums.SimpleEnum] = NullValue
+    nullableStruct: typing.Union[Nullable, UnitTesting.Structs.SimpleStruct] = NullValue
+    nullableRangeRestrictedInt8u: typing.Union[Nullable, uint] = NullValue
+    nullableRangeRestrictedInt8s: typing.Union[Nullable, int] = NullValue
+    nullableRangeRestrictedInt16u: typing.Union[Nullable, uint] = NullValue
+    nullableRangeRestrictedInt16s: typing.Union[Nullable, int] = NullValue
+    writeOnlyInt8u: typing.Optional[uint] = None
+    nullableGlobalEnum: typing.Union[Nullable, Globals.Enums.TestGlobalEnum] = NullValue
+    nullableGlobalStruct: typing.Union[Nullable, Globals.Structs.TestGlobalStruct] = NullValue
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
+    meiInt8u: uint = 0
 
     class Enums:
         class SimpleEnum(MatterIntEnum):
@@ -50356,7 +50357,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50369,7 +50370,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50378,14 +50379,14 @@
                         ClusterObjectFieldDescriptor(Label="returnValue", Tag=0, Type=uint),
                     ])
 
-            returnValue: 'uint' = 0
+            returnValue: uint = 0
 
         @dataclass
         class TestNotHandled(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50398,7 +50399,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50407,7 +50408,7 @@
                         ClusterObjectFieldDescriptor(Label="returnValue", Tag=0, Type=uint),
                     ])
 
-            returnValue: 'uint' = 0
+            returnValue: uint = 0
 
         @dataclass
         class TestSpecific(ClusterCommand):
@@ -50427,7 +50428,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000002
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50436,14 +50437,14 @@
                         ClusterObjectFieldDescriptor(Label="returnValue", Tag=0, Type=bool),
                     ])
 
-            returnValue: 'bool' = False
+            returnValue: bool = False
 
         @dataclass
         class TestUnknownCommand(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50456,7 +50457,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000003
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50470,12 +50471,12 @@
                         ClusterObjectFieldDescriptor(Label="arg6", Tag=5, Type=bool),
                     ])
 
-            arg1: 'typing.List[UnitTesting.Structs.NestedStructList]' = field(default_factory=lambda: [])
-            arg2: 'typing.List[UnitTesting.Structs.SimpleStruct]' = field(default_factory=lambda: [])
-            arg3: 'typing.List[UnitTesting.Enums.SimpleEnum]' = field(default_factory=lambda: [])
-            arg4: 'typing.List[bool]' = field(default_factory=lambda: [])
-            arg5: 'UnitTesting.Enums.SimpleEnum' = 0
-            arg6: 'bool' = False
+            arg1: typing.List[UnitTesting.Structs.NestedStructList] = field(default_factory=lambda: [])
+            arg2: typing.List[UnitTesting.Structs.SimpleStruct] = field(default_factory=lambda: [])
+            arg3: typing.List[UnitTesting.Enums.SimpleEnum] = field(default_factory=lambda: [])
+            arg4: typing.List[bool] = field(default_factory=lambda: [])
+            arg5: UnitTesting.Enums.SimpleEnum = 0
+            arg6: bool = False
 
         @dataclass
         class TestAddArguments(ClusterCommand):
@@ -50492,15 +50493,15 @@
                         ClusterObjectFieldDescriptor(Label="arg2", Tag=1, Type=uint),
                     ])
 
-            arg1: 'uint' = 0
-            arg2: 'uint' = 0
+            arg1: uint = 0
+            arg2: uint = 0
 
         @dataclass
         class TestListInt8UReverseResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000004
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50509,7 +50510,7 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=typing.List[uint]),
                     ])
 
-            arg1: 'typing.List[uint]' = field(default_factory=lambda: [])
+            arg1: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class TestSimpleArgumentRequest(ClusterCommand):
@@ -50525,14 +50526,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=bool),
                     ])
 
-            arg1: 'bool' = False
+            arg1: bool = False
 
         @dataclass
         class TestEnumsResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000005
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50542,8 +50543,8 @@
                         ClusterObjectFieldDescriptor(Label="arg2", Tag=1, Type=UnitTesting.Enums.SimpleEnum),
                     ])
 
-            arg1: 'uint' = 0
-            arg2: 'UnitTesting.Enums.SimpleEnum' = 0
+            arg1: uint = 0
+            arg2: UnitTesting.Enums.SimpleEnum = 0
 
         @dataclass
         class TestStructArrayArgumentRequest(ClusterCommand):
@@ -50564,19 +50565,19 @@
                         ClusterObjectFieldDescriptor(Label="arg6", Tag=5, Type=bool),
                     ])
 
-            arg1: 'typing.List[UnitTesting.Structs.NestedStructList]' = field(default_factory=lambda: [])
-            arg2: 'typing.List[UnitTesting.Structs.SimpleStruct]' = field(default_factory=lambda: [])
-            arg3: 'typing.List[UnitTesting.Enums.SimpleEnum]' = field(default_factory=lambda: [])
-            arg4: 'typing.List[bool]' = field(default_factory=lambda: [])
-            arg5: 'UnitTesting.Enums.SimpleEnum' = 0
-            arg6: 'bool' = False
+            arg1: typing.List[UnitTesting.Structs.NestedStructList] = field(default_factory=lambda: [])
+            arg2: typing.List[UnitTesting.Structs.SimpleStruct] = field(default_factory=lambda: [])
+            arg3: typing.List[UnitTesting.Enums.SimpleEnum] = field(default_factory=lambda: [])
+            arg4: typing.List[bool] = field(default_factory=lambda: [])
+            arg5: UnitTesting.Enums.SimpleEnum = 0
+            arg6: bool = False
 
         @dataclass
         class TestNullableOptionalResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000006
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50588,10 +50589,10 @@
                         ClusterObjectFieldDescriptor(Label="originalValue", Tag=3, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            wasPresent: 'bool' = False
-            wasNull: 'typing.Optional[bool]' = None
-            value: 'typing.Optional[uint]' = None
-            originalValue: 'typing.Union[None, Nullable, uint]' = None
+            wasPresent: bool = False
+            wasNull: typing.Optional[bool] = None
+            value: typing.Optional[uint] = None
+            originalValue: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class TestStructArgumentRequest(ClusterCommand):
@@ -50607,14 +50608,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=UnitTesting.Structs.SimpleStruct),
                     ])
 
-            arg1: 'UnitTesting.Structs.SimpleStruct' = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
+            arg1: UnitTesting.Structs.SimpleStruct = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
 
         @dataclass
         class TestComplexNullableOptionalResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000007
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50650,34 +50651,34 @@
                         ClusterObjectFieldDescriptor(Label="nullableOptionalListValue", Tag=27, Type=typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]]),
                     ])
 
-            nullableIntWasNull: 'bool' = False
-            nullableIntValue: 'typing.Optional[uint]' = None
-            optionalIntWasPresent: 'bool' = False
-            optionalIntValue: 'typing.Optional[uint]' = None
-            nullableOptionalIntWasPresent: 'bool' = False
-            nullableOptionalIntWasNull: 'typing.Optional[bool]' = None
-            nullableOptionalIntValue: 'typing.Optional[uint]' = None
-            nullableStringWasNull: 'bool' = False
-            nullableStringValue: 'typing.Optional[str]' = None
-            optionalStringWasPresent: 'bool' = False
-            optionalStringValue: 'typing.Optional[str]' = None
-            nullableOptionalStringWasPresent: 'bool' = False
-            nullableOptionalStringWasNull: 'typing.Optional[bool]' = None
-            nullableOptionalStringValue: 'typing.Optional[str]' = None
-            nullableStructWasNull: 'bool' = False
-            nullableStructValue: 'typing.Optional[UnitTesting.Structs.SimpleStruct]' = None
-            optionalStructWasPresent: 'bool' = False
-            optionalStructValue: 'typing.Optional[UnitTesting.Structs.SimpleStruct]' = None
-            nullableOptionalStructWasPresent: 'bool' = False
-            nullableOptionalStructWasNull: 'typing.Optional[bool]' = None
-            nullableOptionalStructValue: 'typing.Optional[UnitTesting.Structs.SimpleStruct]' = None
-            nullableListWasNull: 'bool' = False
-            nullableListValue: 'typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]]' = None
-            optionalListWasPresent: 'bool' = False
-            optionalListValue: 'typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]]' = None
-            nullableOptionalListWasPresent: 'bool' = False
-            nullableOptionalListWasNull: 'typing.Optional[bool]' = None
-            nullableOptionalListValue: 'typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]]' = None
+            nullableIntWasNull: bool = False
+            nullableIntValue: typing.Optional[uint] = None
+            optionalIntWasPresent: bool = False
+            optionalIntValue: typing.Optional[uint] = None
+            nullableOptionalIntWasPresent: bool = False
+            nullableOptionalIntWasNull: typing.Optional[bool] = None
+            nullableOptionalIntValue: typing.Optional[uint] = None
+            nullableStringWasNull: bool = False
+            nullableStringValue: typing.Optional[str] = None
+            optionalStringWasPresent: bool = False
+            optionalStringValue: typing.Optional[str] = None
+            nullableOptionalStringWasPresent: bool = False
+            nullableOptionalStringWasNull: typing.Optional[bool] = None
+            nullableOptionalStringValue: typing.Optional[str] = None
+            nullableStructWasNull: bool = False
+            nullableStructValue: typing.Optional[UnitTesting.Structs.SimpleStruct] = None
+            optionalStructWasPresent: bool = False
+            optionalStructValue: typing.Optional[UnitTesting.Structs.SimpleStruct] = None
+            nullableOptionalStructWasPresent: bool = False
+            nullableOptionalStructWasNull: typing.Optional[bool] = None
+            nullableOptionalStructValue: typing.Optional[UnitTesting.Structs.SimpleStruct] = None
+            nullableListWasNull: bool = False
+            nullableListValue: typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]] = None
+            optionalListWasPresent: bool = False
+            optionalListValue: typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]] = None
+            nullableOptionalListWasPresent: bool = False
+            nullableOptionalListWasNull: typing.Optional[bool] = None
+            nullableOptionalListValue: typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]] = None
 
         @dataclass
         class TestNestedStructArgumentRequest(ClusterCommand):
@@ -50693,14 +50694,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=UnitTesting.Structs.NestedStruct),
                     ])
 
-            arg1: 'UnitTesting.Structs.NestedStruct' = field(default_factory=lambda: UnitTesting.Structs.NestedStruct())
+            arg1: UnitTesting.Structs.NestedStruct = field(default_factory=lambda: UnitTesting.Structs.NestedStruct())
 
         @dataclass
         class BooleanResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000008
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50709,7 +50710,7 @@
                         ClusterObjectFieldDescriptor(Label="value", Tag=0, Type=bool),
                     ])
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class TestListStructArgumentRequest(ClusterCommand):
@@ -50725,14 +50726,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=typing.List[UnitTesting.Structs.SimpleStruct]),
                     ])
 
-            arg1: 'typing.List[UnitTesting.Structs.SimpleStruct]' = field(default_factory=lambda: [])
+            arg1: typing.List[UnitTesting.Structs.SimpleStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class SimpleStructResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000009
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50741,7 +50742,7 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=UnitTesting.Structs.SimpleStruct),
                     ])
 
-            arg1: 'UnitTesting.Structs.SimpleStruct' = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
+            arg1: UnitTesting.Structs.SimpleStruct = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
 
         @dataclass
         class TestListInt8UArgumentRequest(ClusterCommand):
@@ -50757,14 +50758,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=typing.List[uint]),
                     ])
 
-            arg1: 'typing.List[uint]' = field(default_factory=lambda: [])
+            arg1: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class TestEmitTestEventResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x0000000A
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50773,7 +50774,7 @@
                         ClusterObjectFieldDescriptor(Label="value", Tag=0, Type=uint),
                     ])
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TestNestedStructListArgumentRequest(ClusterCommand):
@@ -50789,14 +50790,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=UnitTesting.Structs.NestedStructList),
                     ])
 
-            arg1: 'UnitTesting.Structs.NestedStructList' = field(default_factory=lambda: UnitTesting.Structs.NestedStructList())
+            arg1: UnitTesting.Structs.NestedStructList = field(default_factory=lambda: UnitTesting.Structs.NestedStructList())
 
         @dataclass
         class TestEmitTestFabricScopedEventResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x0000000B
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50805,7 +50806,7 @@
                         ClusterObjectFieldDescriptor(Label="value", Tag=0, Type=uint),
                     ])
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class TestListNestedStructListArgumentRequest(ClusterCommand):
@@ -50821,14 +50822,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=typing.List[UnitTesting.Structs.NestedStructList]),
                     ])
 
-            arg1: 'typing.List[UnitTesting.Structs.NestedStructList]' = field(default_factory=lambda: [])
+            arg1: typing.List[UnitTesting.Structs.NestedStructList] = field(default_factory=lambda: [])
 
         @dataclass
         class TestBatchHelperResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x0000000C
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50837,7 +50838,7 @@
                         ClusterObjectFieldDescriptor(Label="buffer", Tag=0, Type=bytes),
                     ])
 
-            buffer: 'bytes' = b""
+            buffer: bytes = b""
 
         @dataclass
         class TestListInt8UReverseRequest(ClusterCommand):
@@ -50853,14 +50854,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=typing.List[uint]),
                     ])
 
-            arg1: 'typing.List[uint]' = field(default_factory=lambda: [])
+            arg1: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class StringEchoResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x0000000D
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50869,7 +50870,7 @@
                         ClusterObjectFieldDescriptor(Label="payload", Tag=0, Type=bytes),
                     ])
 
-            payload: 'bytes' = b""
+            payload: bytes = b""
 
         @dataclass
         class TestEnumsRequest(ClusterCommand):
@@ -50886,15 +50887,15 @@
                         ClusterObjectFieldDescriptor(Label="arg2", Tag=1, Type=UnitTesting.Enums.SimpleEnum),
                     ])
 
-            arg1: 'uint' = 0
-            arg2: 'UnitTesting.Enums.SimpleEnum' = 0
+            arg1: uint = 0
+            arg2: UnitTesting.Enums.SimpleEnum = 0
 
         @dataclass
         class GlobalEchoResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x0000000E
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50904,8 +50905,8 @@
                         ClusterObjectFieldDescriptor(Label="field2", Tag=1, Type=Globals.Enums.TestGlobalEnum),
                     ])
 
-            field1: 'Globals.Structs.TestGlobalStruct' = field(default_factory=lambda: Globals.Structs.TestGlobalStruct())
-            field2: 'Globals.Enums.TestGlobalEnum' = 0
+            field1: Globals.Structs.TestGlobalStruct = field(default_factory=lambda: Globals.Structs.TestGlobalStruct())
+            field2: Globals.Enums.TestGlobalEnum = 0
 
         @dataclass
         class TestNullableOptionalRequest(ClusterCommand):
@@ -50921,7 +50922,7 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=typing.Union[None, Nullable, uint]),
                     ])
 
-            arg1: 'typing.Union[None, Nullable, uint]' = None
+            arg1: typing.Union[None, Nullable, uint] = None
 
         @dataclass
         class TestComplexNullableOptionalRequest(ClusterCommand):
@@ -50948,18 +50949,18 @@
                         ClusterObjectFieldDescriptor(Label="nullableOptionalList", Tag=11, Type=typing.Union[None, Nullable, typing.List[UnitTesting.Enums.SimpleEnum]]),
                     ])
 
-            nullableInt: 'typing.Union[Nullable, uint]' = NullValue
-            optionalInt: 'typing.Optional[uint]' = None
-            nullableOptionalInt: 'typing.Union[None, Nullable, uint]' = None
-            nullableString: 'typing.Union[Nullable, str]' = NullValue
-            optionalString: 'typing.Optional[str]' = None
-            nullableOptionalString: 'typing.Union[None, Nullable, str]' = None
-            nullableStruct: 'typing.Union[Nullable, UnitTesting.Structs.SimpleStruct]' = NullValue
-            optionalStruct: 'typing.Optional[UnitTesting.Structs.SimpleStruct]' = None
-            nullableOptionalStruct: 'typing.Union[None, Nullable, UnitTesting.Structs.SimpleStruct]' = None
-            nullableList: 'typing.Union[Nullable, typing.List[UnitTesting.Enums.SimpleEnum]]' = NullValue
-            optionalList: 'typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]]' = None
-            nullableOptionalList: 'typing.Union[None, Nullable, typing.List[UnitTesting.Enums.SimpleEnum]]' = None
+            nullableInt: typing.Union[Nullable, uint] = NullValue
+            optionalInt: typing.Optional[uint] = None
+            nullableOptionalInt: typing.Union[None, Nullable, uint] = None
+            nullableString: typing.Union[Nullable, str] = NullValue
+            optionalString: typing.Optional[str] = None
+            nullableOptionalString: typing.Union[None, Nullable, str] = None
+            nullableStruct: typing.Union[Nullable, UnitTesting.Structs.SimpleStruct] = NullValue
+            optionalStruct: typing.Optional[UnitTesting.Structs.SimpleStruct] = None
+            nullableOptionalStruct: typing.Union[None, Nullable, UnitTesting.Structs.SimpleStruct] = None
+            nullableList: typing.Union[Nullable, typing.List[UnitTesting.Enums.SimpleEnum]] = NullValue
+            optionalList: typing.Optional[typing.List[UnitTesting.Enums.SimpleEnum]] = None
+            nullableOptionalList: typing.Union[None, Nullable, typing.List[UnitTesting.Enums.SimpleEnum]] = None
 
         @dataclass
         class SimpleStructEchoRequest(ClusterCommand):
@@ -50975,14 +50976,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=UnitTesting.Structs.SimpleStruct),
                     ])
 
-            arg1: 'UnitTesting.Structs.SimpleStruct' = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
+            arg1: UnitTesting.Structs.SimpleStruct = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
 
         @dataclass
         class TimedInvokeRequest(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000012
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -50999,7 +51000,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0x00000013
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -51008,7 +51009,7 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=typing.Optional[bool]),
                     ])
 
-            arg1: 'typing.Optional[bool]' = None
+            arg1: typing.Optional[bool] = None
 
         @dataclass
         class TestEmitTestEventRequest(ClusterCommand):
@@ -51026,9 +51027,9 @@
                         ClusterObjectFieldDescriptor(Label="arg3", Tag=2, Type=bool),
                     ])
 
-            arg1: 'uint' = 0
-            arg2: 'UnitTesting.Enums.SimpleEnum' = 0
-            arg3: 'bool' = False
+            arg1: uint = 0
+            arg2: UnitTesting.Enums.SimpleEnum = 0
+            arg3: bool = False
 
         @dataclass
         class TestEmitTestFabricScopedEventRequest(ClusterCommand):
@@ -51044,7 +51045,7 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=uint),
                     ])
 
-            arg1: 'uint' = 0
+            arg1: uint = 0
 
         @dataclass
         class TestBatchHelperRequest(ClusterCommand):
@@ -51062,9 +51063,9 @@
                         ClusterObjectFieldDescriptor(Label="fillCharacter", Tag=2, Type=uint),
                     ])
 
-            sleepBeforeResponseTimeMs: 'uint' = 0
-            sizeOfResponseBuffer: 'uint' = 0
-            fillCharacter: 'uint' = 0
+            sleepBeforeResponseTimeMs: uint = 0
+            sizeOfResponseBuffer: uint = 0
+            fillCharacter: uint = 0
 
         @dataclass
         class TestSecondBatchHelperRequest(ClusterCommand):
@@ -51082,9 +51083,9 @@
                         ClusterObjectFieldDescriptor(Label="fillCharacter", Tag=2, Type=uint),
                     ])
 
-            sleepBeforeResponseTimeMs: 'uint' = 0
-            sizeOfResponseBuffer: 'uint' = 0
-            fillCharacter: 'uint' = 0
+            sleepBeforeResponseTimeMs: uint = 0
+            sizeOfResponseBuffer: uint = 0
+            fillCharacter: uint = 0
 
         @dataclass
         class StringEchoRequest(ClusterCommand):
@@ -51100,7 +51101,7 @@
                         ClusterObjectFieldDescriptor(Label="payload", Tag=0, Type=bytes),
                     ])
 
-            payload: 'bytes' = b""
+            payload: bytes = b""
 
         @dataclass
         class GlobalEchoRequest(ClusterCommand):
@@ -51117,8 +51118,8 @@
                         ClusterObjectFieldDescriptor(Label="field2", Tag=1, Type=Globals.Enums.TestGlobalEnum),
                     ])
 
-            field1: 'Globals.Structs.TestGlobalStruct' = field(default_factory=lambda: Globals.Structs.TestGlobalStruct())
-            field2: 'Globals.Enums.TestGlobalEnum' = 0
+            field1: Globals.Structs.TestGlobalStruct = field(default_factory=lambda: Globals.Structs.TestGlobalStruct())
+            field2: Globals.Enums.TestGlobalEnum = 0
 
         @dataclass
         class TestDifferentVendorMeiRequest(ClusterCommand):
@@ -51134,14 +51135,14 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=0, Type=uint),
                     ])
 
-            arg1: 'uint' = 0
+            arg1: uint = 0
 
         @dataclass
         class TestDifferentVendorMeiResponse(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC05
             command_id: typing.ClassVar[int] = 0xFFF200BB
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -51151,8 +51152,8 @@
                         ClusterObjectFieldDescriptor(Label="eventNumber", Tag=1, Type=uint),
                     ])
 
-            arg1: 'uint' = 0
-            eventNumber: 'uint' = 0
+            arg1: uint = 0
+            eventNumber: uint = 0
 
     class Attributes:
         @dataclass
@@ -51169,7 +51170,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class Bitmap8(ClusterAttributeDescriptor):
@@ -51185,7 +51186,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Bitmap16(ClusterAttributeDescriptor):
@@ -51201,7 +51202,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Bitmap32(ClusterAttributeDescriptor):
@@ -51217,7 +51218,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Bitmap64(ClusterAttributeDescriptor):
@@ -51233,7 +51234,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int8u(ClusterAttributeDescriptor):
@@ -51249,7 +51250,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int16u(ClusterAttributeDescriptor):
@@ -51265,7 +51266,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int24u(ClusterAttributeDescriptor):
@@ -51281,7 +51282,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int32u(ClusterAttributeDescriptor):
@@ -51297,7 +51298,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int40u(ClusterAttributeDescriptor):
@@ -51313,7 +51314,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int48u(ClusterAttributeDescriptor):
@@ -51329,7 +51330,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int56u(ClusterAttributeDescriptor):
@@ -51345,7 +51346,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int64u(ClusterAttributeDescriptor):
@@ -51361,7 +51362,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Int8s(ClusterAttributeDescriptor):
@@ -51377,7 +51378,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Int16s(ClusterAttributeDescriptor):
@@ -51393,7 +51394,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Int24s(ClusterAttributeDescriptor):
@@ -51409,7 +51410,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Int32s(ClusterAttributeDescriptor):
@@ -51425,7 +51426,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Int40s(ClusterAttributeDescriptor):
@@ -51441,7 +51442,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Int48s(ClusterAttributeDescriptor):
@@ -51457,7 +51458,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Int56s(ClusterAttributeDescriptor):
@@ -51473,7 +51474,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Int64s(ClusterAttributeDescriptor):
@@ -51489,7 +51490,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class Enum8(ClusterAttributeDescriptor):
@@ -51505,7 +51506,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class Enum16(ClusterAttributeDescriptor):
@@ -51521,7 +51522,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class FloatSingle(ClusterAttributeDescriptor):
@@ -51537,7 +51538,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=float32)
 
-            value: 'float32' = 0.0
+            value: float32 = 0.0
 
         @dataclass
         class FloatDouble(ClusterAttributeDescriptor):
@@ -51553,7 +51554,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=float)
 
-            value: 'float' = 0.0
+            value: float = 0.0
 
         @dataclass
         class OctetString(ClusterAttributeDescriptor):
@@ -51569,7 +51570,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bytes)
 
-            value: 'bytes' = b""
+            value: bytes = b""
 
         @dataclass
         class ListInt8u(ClusterAttributeDescriptor):
@@ -51585,7 +51586,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class ListOctetString(ClusterAttributeDescriptor):
@@ -51601,7 +51602,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[bytes])
 
-            value: 'typing.List[bytes]' = field(default_factory=lambda: [])
+            value: typing.List[bytes] = field(default_factory=lambda: [])
 
         @dataclass
         class ListStructOctetString(ClusterAttributeDescriptor):
@@ -51617,7 +51618,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[UnitTesting.Structs.TestListStructOctet])
 
-            value: 'typing.List[UnitTesting.Structs.TestListStructOctet]' = field(default_factory=lambda: [])
+            value: typing.List[UnitTesting.Structs.TestListStructOctet] = field(default_factory=lambda: [])
 
         @dataclass
         class LongOctetString(ClusterAttributeDescriptor):
@@ -51633,7 +51634,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bytes)
 
-            value: 'bytes' = b""
+            value: bytes = b""
 
         @dataclass
         class CharString(ClusterAttributeDescriptor):
@@ -51649,7 +51650,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class LongCharString(ClusterAttributeDescriptor):
@@ -51665,7 +51666,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=str)
 
-            value: 'str' = ""
+            value: str = ""
 
         @dataclass
         class EpochUs(ClusterAttributeDescriptor):
@@ -51681,7 +51682,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class EpochS(ClusterAttributeDescriptor):
@@ -51697,7 +51698,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class VendorId(ClusterAttributeDescriptor):
@@ -51713,7 +51714,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ListNullablesAndOptionalsStruct(ClusterAttributeDescriptor):
@@ -51729,7 +51730,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[UnitTesting.Structs.NullablesAndOptionalsStruct])
 
-            value: 'typing.List[UnitTesting.Structs.NullablesAndOptionalsStruct]' = field(default_factory=lambda: [])
+            value: typing.List[UnitTesting.Structs.NullablesAndOptionalsStruct] = field(default_factory=lambda: [])
 
         @dataclass
         class EnumAttr(ClusterAttributeDescriptor):
@@ -51745,7 +51746,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=UnitTesting.Enums.SimpleEnum)
 
-            value: 'UnitTesting.Enums.SimpleEnum' = 0
+            value: UnitTesting.Enums.SimpleEnum = 0
 
         @dataclass
         class StructAttr(ClusterAttributeDescriptor):
@@ -51761,7 +51762,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=UnitTesting.Structs.SimpleStruct)
 
-            value: 'UnitTesting.Structs.SimpleStruct' = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
+            value: UnitTesting.Structs.SimpleStruct = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
 
         @dataclass
         class RangeRestrictedInt8u(ClusterAttributeDescriptor):
@@ -51777,7 +51778,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class RangeRestrictedInt8s(ClusterAttributeDescriptor):
@@ -51793,7 +51794,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class RangeRestrictedInt16u(ClusterAttributeDescriptor):
@@ -51809,7 +51810,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class RangeRestrictedInt16s(ClusterAttributeDescriptor):
@@ -51825,7 +51826,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=int)
 
-            value: 'int' = 0
+            value: int = 0
 
         @dataclass
         class ListLongOctetString(ClusterAttributeDescriptor):
@@ -51841,7 +51842,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[bytes])
 
-            value: 'typing.List[bytes]' = field(default_factory=lambda: [])
+            value: typing.List[bytes] = field(default_factory=lambda: [])
 
         @dataclass
         class ListFabricScoped(ClusterAttributeDescriptor):
@@ -51857,7 +51858,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[UnitTesting.Structs.TestFabricScoped])
 
-            value: 'typing.List[UnitTesting.Structs.TestFabricScoped]' = field(default_factory=lambda: [])
+            value: typing.List[UnitTesting.Structs.TestFabricScoped] = field(default_factory=lambda: [])
 
         @dataclass
         class TimedWriteBoolean(ClusterAttributeDescriptor):
@@ -51877,7 +51878,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GeneralErrorBoolean(ClusterAttributeDescriptor):
@@ -51893,7 +51894,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class ClusterErrorBoolean(ClusterAttributeDescriptor):
@@ -51909,7 +51910,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GlobalEnum(ClusterAttributeDescriptor):
@@ -51925,7 +51926,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=Globals.Enums.TestGlobalEnum)
 
-            value: 'Globals.Enums.TestGlobalEnum' = 0
+            value: Globals.Enums.TestGlobalEnum = 0
 
         @dataclass
         class GlobalStruct(ClusterAttributeDescriptor):
@@ -51941,7 +51942,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=Globals.Structs.TestGlobalStruct)
 
-            value: 'Globals.Structs.TestGlobalStruct' = field(default_factory=lambda: Globals.Structs.TestGlobalStruct())
+            value: Globals.Structs.TestGlobalStruct = field(default_factory=lambda: Globals.Structs.TestGlobalStruct())
 
         @dataclass
         class Unsupported(ClusterAttributeDescriptor):
@@ -51957,7 +51958,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[bool])
 
-            value: 'typing.Optional[bool]' = None
+            value: typing.Optional[bool] = None
 
         @dataclass
         class ReadFailureCode(ClusterAttributeDescriptor):
@@ -51973,7 +51974,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class FailureInt32U(ClusterAttributeDescriptor):
@@ -51989,7 +51990,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NullableBoolean(ClusterAttributeDescriptor):
@@ -52005,7 +52006,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bool])
 
-            value: 'typing.Union[Nullable, bool]' = NullValue
+            value: typing.Union[Nullable, bool] = NullValue
 
         @dataclass
         class NullableBitmap8(ClusterAttributeDescriptor):
@@ -52021,7 +52022,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableBitmap16(ClusterAttributeDescriptor):
@@ -52037,7 +52038,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableBitmap32(ClusterAttributeDescriptor):
@@ -52053,7 +52054,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableBitmap64(ClusterAttributeDescriptor):
@@ -52069,7 +52070,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt8u(ClusterAttributeDescriptor):
@@ -52085,7 +52086,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt16u(ClusterAttributeDescriptor):
@@ -52101,7 +52102,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt24u(ClusterAttributeDescriptor):
@@ -52117,7 +52118,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt32u(ClusterAttributeDescriptor):
@@ -52133,7 +52134,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt40u(ClusterAttributeDescriptor):
@@ -52149,7 +52150,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt48u(ClusterAttributeDescriptor):
@@ -52165,7 +52166,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt56u(ClusterAttributeDescriptor):
@@ -52181,7 +52182,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt64u(ClusterAttributeDescriptor):
@@ -52197,7 +52198,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableInt8s(ClusterAttributeDescriptor):
@@ -52213,7 +52214,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableInt16s(ClusterAttributeDescriptor):
@@ -52229,7 +52230,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableInt24s(ClusterAttributeDescriptor):
@@ -52245,7 +52246,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableInt32s(ClusterAttributeDescriptor):
@@ -52261,7 +52262,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableInt40s(ClusterAttributeDescriptor):
@@ -52277,7 +52278,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableInt48s(ClusterAttributeDescriptor):
@@ -52293,7 +52294,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableInt56s(ClusterAttributeDescriptor):
@@ -52309,7 +52310,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableInt64s(ClusterAttributeDescriptor):
@@ -52325,7 +52326,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableEnum8(ClusterAttributeDescriptor):
@@ -52341,7 +52342,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableEnum16(ClusterAttributeDescriptor):
@@ -52357,7 +52358,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableFloatSingle(ClusterAttributeDescriptor):
@@ -52373,7 +52374,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, float32])
 
-            value: 'typing.Union[Nullable, float32]' = NullValue
+            value: typing.Union[Nullable, float32] = NullValue
 
         @dataclass
         class NullableFloatDouble(ClusterAttributeDescriptor):
@@ -52389,7 +52390,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, float])
 
-            value: 'typing.Union[Nullable, float]' = NullValue
+            value: typing.Union[Nullable, float] = NullValue
 
         @dataclass
         class NullableOctetString(ClusterAttributeDescriptor):
@@ -52405,7 +52406,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, bytes])
 
-            value: 'typing.Union[Nullable, bytes]' = NullValue
+            value: typing.Union[Nullable, bytes] = NullValue
 
         @dataclass
         class NullableCharString(ClusterAttributeDescriptor):
@@ -52421,7 +52422,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, str])
 
-            value: 'typing.Union[Nullable, str]' = NullValue
+            value: typing.Union[Nullable, str] = NullValue
 
         @dataclass
         class NullableEnumAttr(ClusterAttributeDescriptor):
@@ -52437,7 +52438,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, UnitTesting.Enums.SimpleEnum])
 
-            value: 'typing.Union[Nullable, UnitTesting.Enums.SimpleEnum]' = NullValue
+            value: typing.Union[Nullable, UnitTesting.Enums.SimpleEnum] = NullValue
 
         @dataclass
         class NullableStruct(ClusterAttributeDescriptor):
@@ -52453,7 +52454,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, UnitTesting.Structs.SimpleStruct])
 
-            value: 'typing.Union[Nullable, UnitTesting.Structs.SimpleStruct]' = NullValue
+            value: typing.Union[Nullable, UnitTesting.Structs.SimpleStruct] = NullValue
 
         @dataclass
         class NullableRangeRestrictedInt8u(ClusterAttributeDescriptor):
@@ -52469,7 +52470,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableRangeRestrictedInt8s(ClusterAttributeDescriptor):
@@ -52485,7 +52486,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class NullableRangeRestrictedInt16u(ClusterAttributeDescriptor):
@@ -52501,7 +52502,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, uint])
 
-            value: 'typing.Union[Nullable, uint]' = NullValue
+            value: typing.Union[Nullable, uint] = NullValue
 
         @dataclass
         class NullableRangeRestrictedInt16s(ClusterAttributeDescriptor):
@@ -52517,7 +52518,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, int])
 
-            value: 'typing.Union[Nullable, int]' = NullValue
+            value: typing.Union[Nullable, int] = NullValue
 
         @dataclass
         class WriteOnlyInt8u(ClusterAttributeDescriptor):
@@ -52533,7 +52534,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Optional[uint])
 
-            value: 'typing.Optional[uint]' = None
+            value: typing.Optional[uint] = None
 
         @dataclass
         class NullableGlobalEnum(ClusterAttributeDescriptor):
@@ -52549,7 +52550,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, Globals.Enums.TestGlobalEnum])
 
-            value: 'typing.Union[Nullable, Globals.Enums.TestGlobalEnum]' = NullValue
+            value: typing.Union[Nullable, Globals.Enums.TestGlobalEnum] = NullValue
 
         @dataclass
         class NullableGlobalStruct(ClusterAttributeDescriptor):
@@ -52565,7 +52566,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.Union[Nullable, Globals.Structs.TestGlobalStruct])
 
-            value: 'typing.Union[Nullable, Globals.Structs.TestGlobalStruct]' = NullValue
+            value: typing.Union[Nullable, Globals.Structs.TestGlobalStruct] = NullValue
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -52581,7 +52582,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -52597,7 +52598,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -52613,7 +52614,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -52629,7 +52630,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -52645,7 +52646,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -52661,7 +52662,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class MeiInt8u(ClusterAttributeDescriptor):
@@ -52677,7 +52678,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -52702,12 +52703,12 @@
                         ClusterObjectFieldDescriptor(Label="arg6", Tag=6, Type=typing.List[UnitTesting.Enums.SimpleEnum]),
                     ])
 
-            arg1: 'uint' = 0
-            arg2: 'UnitTesting.Enums.SimpleEnum' = 0
-            arg3: 'bool' = False
-            arg4: 'UnitTesting.Structs.SimpleStruct' = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
-            arg5: 'typing.List[UnitTesting.Structs.SimpleStruct]' = field(default_factory=lambda: [])
-            arg6: 'typing.List[UnitTesting.Enums.SimpleEnum]' = field(default_factory=lambda: [])
+            arg1: uint = 0
+            arg2: UnitTesting.Enums.SimpleEnum = 0
+            arg3: bool = False
+            arg4: UnitTesting.Structs.SimpleStruct = field(default_factory=lambda: UnitTesting.Structs.SimpleStruct())
+            arg5: typing.List[UnitTesting.Structs.SimpleStruct] = field(default_factory=lambda: [])
+            arg6: typing.List[UnitTesting.Enums.SimpleEnum] = field(default_factory=lambda: [])
 
         @dataclass
         class TestFabricScopedEvent(ClusterEvent):
@@ -52726,7 +52727,7 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=254, Type=uint),
                     ])
 
-            fabricIndex: 'uint' = 0
+            fabricIndex: uint = 0
 
         @dataclass
         class TestDifferentVendorMeiEvent(ClusterEvent):
@@ -52745,7 +52746,7 @@
                         ClusterObjectFieldDescriptor(Label="arg1", Tag=1, Type=uint),
                     ])
 
-            arg1: 'uint' = 0
+            arg1: uint = 0
 
 
 @dataclass
@@ -52764,12 +52765,12 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Enums:
         class FaultType(MatterIntEnum):
@@ -52790,7 +52791,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC06
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -52803,18 +52804,18 @@
                         ClusterObjectFieldDescriptor(Label="takeMutex", Tag=4, Type=bool),
                     ])
 
-            type: 'FaultInjection.Enums.FaultType' = 0
-            id: 'uint' = 0
-            numCallsToSkip: 'uint' = 0
-            numCallsToFail: 'uint' = 0
-            takeMutex: 'bool' = False
+            type: FaultInjection.Enums.FaultType = 0
+            id: uint = 0
+            numCallsToSkip: uint = 0
+            numCallsToFail: uint = 0
+            takeMutex: bool = False
 
         @dataclass
         class FailRandomlyAtFault(ClusterCommand):
             cluster_id: typing.ClassVar[int] = 0xFFF1FC06
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -52825,9 +52826,9 @@
                         ClusterObjectFieldDescriptor(Label="percentage", Tag=2, Type=uint),
                     ])
 
-            type: 'FaultInjection.Enums.FaultType' = 0
-            id: 'uint' = 0
-            percentage: 'uint' = 0
+            type: FaultInjection.Enums.FaultType = 0
+            id: uint = 0
+            percentage: uint = 0
 
     class Attributes:
         @dataclass
@@ -52844,7 +52845,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -52860,7 +52861,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -52876,7 +52877,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -52892,7 +52893,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -52908,7 +52909,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -52924,7 +52925,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
 
 @dataclass
@@ -52944,13 +52945,13 @@
                 ClusterObjectFieldDescriptor(Label="clusterRevision", Tag=0x0000FFFD, Type=uint),
             ])
 
-    flipFlop: 'bool' = None
-    generatedCommandList: 'typing.List[uint]' = None
-    acceptedCommandList: 'typing.List[uint]' = None
-    eventList: 'typing.List[uint]' = None
-    attributeList: 'typing.List[uint]' = None
-    featureMap: 'uint' = None
-    clusterRevision: 'uint' = None
+    flipFlop: bool = False
+    generatedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    acceptedCommandList: typing.List[uint] = field(default_factory=lambda: [])
+    eventList: typing.List[uint] = field(default_factory=lambda: [])
+    attributeList: typing.List[uint] = field(default_factory=lambda: [])
+    featureMap: uint = 0
+    clusterRevision: uint = 0
 
     class Commands:
         @dataclass
@@ -52958,7 +52959,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC20
             command_id: typing.ClassVar[int] = 0x00000000
             is_client: typing.ClassVar[bool] = True
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -52971,7 +52972,7 @@
             cluster_id: typing.ClassVar[int] = 0xFFF1FC20
             command_id: typing.ClassVar[int] = 0x00000001
             is_client: typing.ClassVar[bool] = False
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
 
             @ChipUtility.classproperty
             def descriptor(cls) -> ClusterObjectDescriptor:
@@ -52980,7 +52981,7 @@
                         ClusterObjectFieldDescriptor(Label="returnValue", Tag=0, Type=uint),
                     ])
 
-            returnValue: 'uint' = 0
+            returnValue: uint = 0
 
         @dataclass
         class AddArguments(ClusterCommand):
@@ -52997,8 +52998,8 @@
                         ClusterObjectFieldDescriptor(Label="arg2", Tag=1, Type=uint),
                     ])
 
-            arg1: 'uint' = 0
-            arg2: 'uint' = 0
+            arg1: uint = 0
+            arg2: uint = 0
 
     class Attributes:
         @dataclass
@@ -53015,7 +53016,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=bool)
 
-            value: 'bool' = False
+            value: bool = False
 
         @dataclass
         class GeneratedCommandList(ClusterAttributeDescriptor):
@@ -53031,7 +53032,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AcceptedCommandList(ClusterAttributeDescriptor):
@@ -53047,7 +53048,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class EventList(ClusterAttributeDescriptor):
@@ -53063,7 +53064,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class AttributeList(ClusterAttributeDescriptor):
@@ -53079,7 +53080,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=typing.List[uint])
 
-            value: 'typing.List[uint]' = field(default_factory=lambda: [])
+            value: typing.List[uint] = field(default_factory=lambda: [])
 
         @dataclass
         class FeatureMap(ClusterAttributeDescriptor):
@@ -53095,7 +53096,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
         @dataclass
         class ClusterRevision(ClusterAttributeDescriptor):
@@ -53111,7 +53112,7 @@
             def attribute_type(cls) -> ClusterObjectFieldDescriptor:
                 return ClusterObjectFieldDescriptor(Type=uint)
 
-            value: 'uint' = 0
+            value: uint = 0
 
     class Events:
         @dataclass
@@ -53132,6 +53133,6 @@
                         ClusterObjectFieldDescriptor(Label="fabricIndex", Tag=254, Type=uint),
                     ])
 
-            count: 'uint' = 0
-            fabricIndex: 'uint' = 0
+            count: uint = 0
+            fabricIndex: uint = 0
 
diff --git a/src/controller/python/templates/python-cluster-Objects-py.zapt b/src/controller/python/templates/python-cluster-Objects-py.zapt
index 3cb973d..381d266 100644
--- a/src/controller/python/templates/python-cluster-Objects-py.zapt
+++ b/src/controller/python/templates/python-cluster-Objects-py.zapt
@@ -6,6 +6,7 @@
 # Users are not expected to import this file, instead, users can use import chip.clusters,
 # which will import all symbols from this file and can get a readable, pretty naming like
 # clusters.OnOff.commands.OnCommand
+from __future__ import annotations
 
 import typing
 from dataclasses import dataclass, field
@@ -76,9 +77,9 @@
 
 {{#zcl_attributes_server}}
 {{#if entryType}}
-    {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}' = None
+    {{ asLowerCamelCase label }}: {{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}} = {{getPythonFieldDefault entryType ns=(asUpperCamelCase parent.name)}}
 {{else}}
-    {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}}' = None
+    {{ asLowerCamelCase label }}: {{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}} = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.name)}}
 {{/if}}
 {{/zcl_attributes_server}}
 
@@ -121,7 +122,7 @@
             {{~#if responseName}}
             response_type: typing.ClassVar[str] = '{{asUpperCamelCase responseName}}'
             {{else}}
-            response_type: typing.ClassVar[str] = None
+            response_type: typing.ClassVar[typing.Optional[str]] = None
             {{/if}}
 
             @ChipUtility.classproperty
@@ -142,7 +143,7 @@
             {{#first}}
 
             {{/first}}
-            {{ asLowerCamelCase label }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}}
+            {{ asLowerCamelCase label }}: {{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}} = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}}
             {{/zcl_command_arguments}}
 
 {{/zcl_commands}}
@@ -175,9 +176,9 @@
             {{/if}}
 
             {{#if entryType}}
-            value: '{{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}' = {{getPythonFieldDefault entryType ns=(asUpperCamelCase parent.name)}}
+            value: {{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}} = {{getPythonFieldDefault entryType ns=(asUpperCamelCase parent.name)}}
             {{else}}
-            value: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.name)}}
+            value: {{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}} = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.name)}}
             {{/if}}
 
 {{/zcl_attributes_server}}
@@ -207,7 +208,7 @@
             {{#first}}
 
             {{/first}}
-            {{ asLowerCamelCase name }}: '{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}' = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}}
+            {{ asLowerCamelCase name }}: {{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}} = {{getPythonFieldDefault type ns=(asUpperCamelCase parent.parent.name)}}
             {{/zcl_event_fields}}
 
 {{/zcl_events}}
