diff --git a/examples/darwin-framework-tool/templates/tests/ciTests.json b/examples/darwin-framework-tool/templates/tests/ciTests.json
index 7260c76..f20fb16 100644
--- a/examples/darwin-framework-tool/templates/tests/ciTests.json
+++ b/examples/darwin-framework-tool/templates/tests/ciTests.json
@@ -114,6 +114,8 @@
         "Test_TC_ACFREMON_2_1",
         "Disabled due to HEPAFilterMonitoring not being enabled in Matter.framework for now:",
         "Test_TC_HEPAFREMON_1_1",
-        "Test_TC_HEPAFREMON_2_1"
+        "Test_TC_HEPAFREMON_2_1",
+        "Disabled due to Events verification not supported",
+        "Test_TC_BINFO_2_2"
     ]
 }
diff --git a/src/app/tests/suites/certification/Test_TC_ACL_2_2.yaml b/src/app/tests/suites/certification/Test_TC_ACL_2_2.yaml
index 87fd561..24e18d9 100644
--- a/src/app/tests/suites/certification/Test_TC_ACL_2_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_ACL_2_2.yaml
@@ -22,9 +22,11 @@
     nodeId: 0x12344321
     cluster: "Access Control"
     endpoint: 0
+    #Configurable endpoint except 0
+    Endpoint_Except_Zero: 1
 
 tests:
-    - label: "Wait for the commissioned device to be retrieved"
+    - label: "Step 1: Wait for the commissioned device to be retrieved"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -33,79 +35,24 @@
                 value: nodeId
 
     - label:
-          "TH1 reads DUT Descriptor cluster ServerList attribute from Endpoint 0"
-      command: "readAttribute"
+          "Step 2: TH reads DUT Descriptor cluster ServerList attribute from
+          Endpoint 0"
       cluster: "Descriptor"
+      command: "readAttribute"
       attribute: "ServerList"
       response:
           constraints:
               type: list
               contains: [31]
 
-    #Endpoint configuration is not supported in YAML
     - label:
-          "TH1 reads DUT Descriptor cluster ServerList attribute from every
-          Endpoint except 0"
-      verification: |
-          ./chip-tool  descriptor read server-list 1 1
-
-
-          On TH1(Chiptool) ,Verify the serverList attribute of Descriptor Cluster without  an element of 31( 0x001F)
-
-          [1676442452.204523][8902:8904] CHIP:TOO: Endpoint: 1 Cluster: 0x0000_001D Attribute 0x0000_0001 DataVersion: 1718800852
-          [1676442452.204637][8902:8904] CHIP:TOO:   ServerList: 45 entries
-          [1676442452.204655][8902:8904] CHIP:TOO:     [1]: 3
-          [1676442452.204670][8902:8904] CHIP:TOO:     [2]: 4
-          [1676442452.204685][8902:8904] CHIP:TOO:     [3]: 5
-          [1676442452.204700][8902:8904] CHIP:TOO:     [4]: 6
-          [1676442452.204715][8902:8904] CHIP:TOO:     [5]: 7
-          [1676442452.204729][8902:8904] CHIP:TOO:     [6]: 8
-          [1676442452.204744][8902:8904] CHIP:TOO:     [7]: 15
-          [1676442452.204759][8902:8904] CHIP:TOO:     [8]: 29
-          [1676442452.204774][8902:8904] CHIP:TOO:     [9]: 30
-          [1676442452.204789][8902:8904] CHIP:TOO:     [10]: 37
-          [1676442452.204804][8902:8904] CHIP:TOO:     [11]: 47
-          [1676442452.204820][8902:8904] CHIP:TOO:     [12]: 59
-          [1676442452.204835][8902:8904] CHIP:TOO:     [13]: 64
-          [1676442452.204849][8902:8904] CHIP:TOO:     [14]: 65
-          [1676442452.204864][8902:8904] CHIP:TOO:     [15]: 69
-          [1676442452.204879][8902:8904] CHIP:TOO:     [16]: 80
-          [1676442452.204894][8902:8904] CHIP:TOO:     [17]: 257
-          [1676442452.204909][8902:8904] CHIP:TOO:     [18]: 258
-          [1676442452.204923][8902:8904] CHIP:TOO:     [19]: 259
-          [1676442452.204938][8902:8904] CHIP:TOO:     [20]: 512
-          [1676442452.204953][8902:8904] CHIP:TOO:     [21]: 513
-          [1676442452.204968][8902:8904] CHIP:TOO:     [22]: 514
-          [1676442452.204983][8902:8904] CHIP:TOO:     [23]: 516
-          [1676442452.204998][8902:8904] CHIP:TOO:     [24]: 768
-          [1676442452.205013][8902:8904] CHIP:TOO:     [25]: 769
-          [1676442452.205028][8902:8904] CHIP:TOO:     [26]: 1024
-          [1676442452.205043][8902:8904] CHIP:TOO:     [27]: 1026
-          [1676442452.205058][8902:8904] CHIP:TOO:     [28]: 1027
-          [1676442452.205072][8902:8904] CHIP:TOO:     [29]: 1028
-          [1676442452.205088][8902:8904] CHIP:TOO:     [30]: 1029
-          [1676442452.205103][8902:8904] CHIP:TOO:     [31]: 1030
-          [1676442452.205117][8902:8904] CHIP:TOO:     [32]: 1283
-          [1676442452.205133][8902:8904] CHIP:TOO:     [33]: 1284
-          [1676442452.205148][8902:8904] CHIP:TOO:     [34]: 1285
-          [1676442452.205168][8902:8904] CHIP:TOO:     [35]: 1286
-          [1676442452.205185][8902:8904] CHIP:TOO:     [36]: 1287
-          [1676442452.205199][8902:8904] CHIP:TOO:     [37]: 1288
-          [1676442452.205215][8902:8904] CHIP:TOO:     [38]: 1289
-          [1676442452.205230][8902:8904] CHIP:TOO:     [39]: 1290
-          [1676442452.205245][8902:8904] CHIP:TOO:     [40]: 1291
-          [1676442452.205260][8902:8904] CHIP:TOO:     [41]: 1292
-          [1676442452.205275][8902:8904] CHIP:TOO:     [42]: 1293
-          [1676442452.205290][8902:8904] CHIP:TOO:     [43]: 1294
-          [1676442452.205319][8902:8904] CHIP:TOO:     [44]: 2820
-          [1676442452.205331][8902:8904] CHIP:TOO:     [45]: 4294048773
-          [1676442452.205454][8902:8904] CHIP:EM: <<< [E:56665i M:248848283 (Ack:9298405)] (S) Msg TX to 1:00000000
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_USER_PROMPT
-      arguments:
-          values:
-              - name: "message"
-                value: "Factory Reset the DUT and enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
+          "Step 3: TH reads DUT Descriptor cluster ServerList attribute from
+          every Endpoint except 0"
+      endpoint: Endpoint_Except_Zero
+      cluster: "Descriptor"
+      command: "readAttribute"
+      attribute: "ServerList"
+      response:
+          constraints:
+              type: list
+              excludes: [31]
diff --git a/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_8.yaml b/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_8.yaml
index d1633f3..94a5bcc 100644
--- a/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_8.yaml
+++ b/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_8.yaml
@@ -27,9 +27,11 @@
     applicationId:
         type: char_string
         defaultValue: "exampleid"
+    #ApplicationBasic cluster endpoint
+    ApplicationBasic.Endpoint: 3
 
 tests:
-    - label: "Wait for the commissioned device to be retrieved"
+    - label: "Step 0: Wait for the commissioned device to be retrieved"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -37,7 +39,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "Stop an app with the provided application ID"
+    - label: "Step 1: Stop an app with the provided application ID"
       PICS: APPLAUNCHER.S.C01.Rsp
       command: "StopApp"
       arguments:
@@ -53,25 +55,10 @@
               - name: "Status"
                 value: 0
 
-    #Endpoint configuration is not supported in YAML
-    - label: "Reads the Status attribute"
-      PICS: PICS_USER_PROMPT
-      verification: |
-          The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
-          ./chip-tool applicationbasic read status 1 3
-          ./chip-tv-casting-app applicationbasic read status 1 3
-
-          On TH verify that the Status attribute  value as 0
-          [1658208937.049446][2428:2433] CHIP:DMG:         InteractionModelRevision = 1
-          [1658208937.049483][2428:2433] CHIP:DMG: }
-          [1658208937.049690][2428:2433] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_050D Attribute 0x0000_0005 DataVersion: 3850684771
-          [1658208937.049809][2428:2433] CHIP:TOO:   Status: 0
-          [1658208937.049922][2428:2433] CHIP:EM: Sending Standalone Ack for MessageCounter:75774840 on exchange 3041i
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      arguments:
-          values:
-              - name: "message"
-                value: "Please enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
+    - label: "Step 2: Reads the Status attribute"
+      endpoint: ApplicationBasic.Endpoint
+      cluster: "Application Basic"
+      command: "readAttribute"
+      attribute: "Status"
+      response:
+          value: 0
diff --git a/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_9.yaml b/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_9.yaml
index 8f7b493..a61053a 100644
--- a/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_9.yaml
+++ b/src/app/tests/suites/certification/Test_TC_APPLAUNCHER_3_9.yaml
@@ -27,9 +27,11 @@
     applicationId:
         type: char_string
         defaultValue: "exampleid"
+    #ApplicationBasic cluster endpoint
+    ApplicationBasic.Endpoint: 3
 
 tests:
-    - label: "Wait for the commissioned device to be retrieved"
+    - label: "Step 0: Wait for the commissioned device to be retrieved"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -37,7 +39,7 @@
               - name: "nodeId"
                 value: nodeId
 
-    - label: "TH sends HideApp command to DUT"
+    - label: "Step 1: TH sends HideApp command to DUT"
       PICS: APPLAUNCHER.S.C02.Rsp
       command: "HideApp"
       arguments:
@@ -49,24 +51,11 @@
                         ApplicationID: applicationId,
                     }
 
-    #Expected status attribute response ACTIVE_HIDDEN or STOPPED 'OR' condition is not supported in YAML
-    - label: "Reads the Status attribute"
-      verification: |
-          The TH commands for this test step can be invoked using chip-tool (when DUT is a commissionee) or tv-casting-app (when DUT is a commissioner):
-          ./chip-tool applicationbasic read status 1 3
-          ./chip-tool applicationbasic read status 1 3
-
-          On TH verify that the Status attribute  value as 0
-          [1658209002.942766][2442:2447] CHIP:DMG: }
-          [1658209002.942976][2442:2447] CHIP:TOO: Endpoint: 3 Cluster: 0x0000_050D Attribute 0x0000_0005 DataVersion: 3850684771
-          [1658209002.943067][2442:2447] CHIP:TOO:   Status: 0
-          [1658209002.943177][2442:2447] CHIP:EM: Sending Standalone Ack for MessageCounter:54939405 on exchange 63408i"
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_USER_PROMPT
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
+    - label: "Step 2: Reads the Status attribute"
+      endpoint: ApplicationBasic.Endpoint
+      cluster: "Application Basic"
+      command: "readAttribute"
+      attribute: "Status"
+      response:
+          constraints:
+              anyOf: [0, 2]
diff --git a/src/app/tests/suites/certification/Test_TC_BINFO_2_2.yaml b/src/app/tests/suites/certification/Test_TC_BINFO_2_2.yaml
index 5037d20..f409844 100644
--- a/src/app/tests/suites/certification/Test_TC_BINFO_2_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_BINFO_2_2.yaml
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Project CHIP Authors
+# Copyright (c) 2023 Project CHIP Authors
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -11,7 +11,6 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-# Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
 
 name: 12.2.2. [TC-BINFO-2.2] Events [DUT-Server]
 
@@ -24,64 +23,128 @@
     endpoint: 0
 
 tests:
-    - label: "Precondition"
-      verification: |
-          1. DUT and TH can interact with each other. DUT is commissioned.
+    - label: "Step 0: Wait for the commissioned device to be retrieved"
+      cluster: "DelayCommands"
+      command: "WaitForCommissionee"
+      arguments:
+          values:
+              - name: "nodeId"
+                value: nodeId
+    - label:
+          "TH reads SoftwareVersion attribute from DUT and saves for future use"
+      PICS: BINFO.S.A0009
+      command: "readAttribute"
+      attribute: "SoftwareVersion"
+      response:
+          saveAs: SoftwareVersionValue
 
-          2. BINFO.S.A0009(SoftwareVersion) - TH reads SoftwareVersion attribute from DUT and saves for future use
+    - label:
+          "Precondition: TH reads Reachable attribute from DUT and saves for
+          future use"
+      PICS: BINFO.S.A0011
+      command: "readAttribute"
+      attribute: "Reachable"
+      response:
+          value: true
+          saveAs: ReachableValue
 
-          3. BINFO.S.A0011(Reachable) - TH reads Reachable attribute from DUT and saves for future use(should be true)
+    - label: "Precondition: TH saves the FabricIndex during commissioning"
+      command: "readAttribute"
+      cluster: "Operational Credentials"
+      attribute: "CurrentFabricIndex"
+      response:
+          saveAs: CurrentFabricIndexValue
 
-          4. BINFO.S.E00(StartUp) | BINFO.S.E01(ShutDown) || BINFO.S.E02(Leave) - TH subscribes to StartUp, ShutDown, Leave and ReachableChanged events on the Basic Information cluster of the DUT
-
-          5. TH saves the FabricIndex during commissioning
-      disabled: true
-
-    - label: "Reboot the DUT TH reads the StartUp event from DUT"
+    - label:
+          "Precondition: TH subscribes to StartUp event on the Basic Information
+          cluster of the DUT"
       PICS: BINFO.S.E00
-      verification: |
-          To verify StartUp event follow the below commands , Pls use equivalent command on the respective DUT
+      command: "subscribeEvent"
+      event: "StartUp"
+      minInterval: 30
+      maxInterval: 100
+      response:
+          constraints:
+              type: StartUp
 
-
-          ./chip-tool  basicinformation read-event start-up 1 0
-
-          Verify that StartUp event priority is set is to CRITICAL and software verision is 1 on TH(chip-tool)
-
-          [1657193007.841105][5422:5427] CHIP:DMG:         ],
-          [1657193007.841137][5422:5427] CHIP:DMG:
-          [1657193007.841162][5422:5427] CHIP:DMG:         SuppressResponse = true,
-          [1657193007.841186][5422:5427] CHIP:DMG:         InteractionModelRevision = 1
-          [1657193007.841209][5422:5427] CHIP:DMG: }
-          [1657193007.841358][5422:5427] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0028 Event 0x0000_0000
-          [1657193007.841387][5422:5427] CHIP:TOO:          Event number: 0
-          [1657193007.841409][5422:5427] CHIP:TOO:          Priority: Critical
-          [1657193007.841431][5422:5427] CHIP:TOO:          Timestamp: 132146
-          [1657193007.841531][5422:5427] CHIP:TOO:   StartUp: {
-          [1657193007.841570][5422:5427] CHIP:TOO:     SoftwareVersion: 1
-          [1657193007.841594][5422:5427] CHIP:TOO:    }
-          [1657193007.841691][5422:5427] CHIP:EM: Sending Standalone Ack for MessageCounter:91740387 on exchange 60385i
-      disabled: true
-
-    - label: "TH subscribes to the ShutDown event on the DUT. Shutdown DUT."
+    - label:
+          "Precondition: TH subscribes to ShutDown event on the Basic
+          Information cluster of the DUT"
       PICS: BINFO.S.E01
+      command: "subscribeEvent"
+      event: "ShutDown"
+      minInterval: 30
+      maxInterval: 100
+
+    - label:
+          "Precondition: TH subscribes to Leave event on the Basic Information
+          cluster of the DUT"
+      PICS: BINFO.S.E02
+      command: "subscribeEvent"
+      event: "Leave"
+      minInterval: 30
+      maxInterval: 100
+
+    ### DUT TurnOff
+    - label: "Step 1: Reboot the DUT"
+      PICS: PICS_SDK_CI_ONLY
+      cluster: "SystemCommands"
+      command: "Reboot"
+
+    - label: "Step 1: Reboot target device(DUT)"
       verification: |
-          To verify ShutDown event follow the below commands , Pls use equivalent command on the respective DUT
+          Did the DUT successfully reboot?
+      cluster: "LogCommands"
+      command: "UserPrompt"
+      PICS: PICS_SKIP_SAMPLE_APP
+      arguments:
+          values:
+              - name: "message"
+                value: "Please reboot the DUT and enter 'y' after DUT starts"
+              - name: "expectedValue"
+                value: "y"
 
+    - label: "Wait for the commissioned device to be retrieved"
+      cluster: "DelayCommands"
+      command: "WaitForCommissionee"
+      arguments:
+          values:
+              - name: "nodeId"
+                value: nodeId
 
-          1. Launch chip-tool into interactive mode with the command
+    - label: "Step 2: TH reads the StartUp event from DUT"
+      PICS: BINFO.S.E00
+      command: "readEvent"
+      event: "StartUp"
+      response:
+          value: { SoftwareVersion: SoftwareVersionValue }
 
-          ./chip-tool interactive start
+    - label: "Verify that StartUp event has priority set as CRITICAL"
+      cluster: "LogCommands"
+      command: "UserPrompt"
+      PICS: PICS_SKIP_SAMPLE_APP && BINFO.S.E00
+      arguments:
+          values:
+              - name: "message"
+                value: "If priority set as CRITICAL enter 'y' for success"
+              - name: "expectedValue"
+                value: "y"
 
-          2.  run below command in interactive mode shell and  Turn down the DUT
-          basicinformation subscribe-event shut-down 20 100 1 0
+    - label:
+          "Step 3: TH subscribes to the ShutDown event on the DUT. Shutdown DUT."
+      PICS: BINFO.S.E01
+      command: "subscribeEvent"
+      event: "ShutDown"
+      minInterval: 30
+      maxInterval: 100
 
-          verify that ShutDown event as priority set has CRITICAL on TH(Chip-tool)
-
-          CHIP:TOO: Endpoint: 0 Cluster: 0x0000_0028 Event 0x0000_0001
-          [1653050528.900202][119367:119372] CHIP:TOO:          Event number: 5
-          [1653050528.900295][119367:119372] CHIP:TOO:          Priority: Critical
-          [1653050528.900386][119367:119372] CHIP:TOO:          Timestamp: 289436805
-          [1653050528.900630][119367:119372] CHIP:TOO:   ShutDown: {
-          [1653050528.900732][119367:119372] CHIP:TOO:    }
-          [1653050528.900892][119367:119372] CHIP:DMG: Refresh LivenessCheckTime for 28000 milliseconds with SubscriptionId = 0x27408c83 Peer = 01:0000000000000001
-      disabled: true
+    - label: "Verify that ShutDown event has priority set as CRITICAL"
+      cluster: "LogCommands"
+      command: "UserPrompt"
+      PICS: PICS_SKIP_SAMPLE_APP && BINFO.S.E01
+      arguments:
+          values:
+              - name: "message"
+                value: "If priority set as CRITICAL enter 'y' for success"
+              - name: "expectedValue"
+                value: "y"
diff --git a/src/app/tests/suites/certification/Test_TC_SC_5_1.yaml b/src/app/tests/suites/certification/Test_TC_SC_5_1.yaml
index 69b942f..812dd47 100644
--- a/src/app/tests/suites/certification/Test_TC_SC_5_1.yaml
+++ b/src/app/tests/suites/certification/Test_TC_SC_5_1.yaml
@@ -13,7 +13,9 @@
 # limitations under the License.
 # Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
 
-name: 19.1.1. [TC-SC-5.1] Adding member to a group
+name:
+    26.1.1. [TC-SC-5.1] Adding member to a group - TH as Admin and DUT as Group
+    Member
 
 PICS:
     - MCORE.ROLE.COMMISSIONEE
@@ -21,11 +23,13 @@
 config:
     nodeId: 0x12344321
     cluster: "Groups"
+    endpoint: 0
+
     # Users should set endpoint value on the command line to PIXIT.G.ENDPOINT
-    endpoint: 1
+    Groups.Endpoint: 1
 
 tests:
-    - label: "Wait for the commissioned device to be retrieved"
+    - label: "Step 0: Wait for the commissioned device to be retrieved"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -41,10 +45,8 @@
               - name: "nodeId"
                 saveAs: commissionerNodeId
 
-    - label: "TH adds ACL Operate privileges for Group 0x0103"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 1: TH adds ACL Operate privileges for Group 0x0103"
       cluster: "Access Control"
-      endpoint: 0
       command: "writeAttribute"
       attribute: "ACL"
       arguments:
@@ -66,84 +68,8 @@
                   },
               ]
 
-    - label: "TH adds ACL Operate privileges for Group 0x0103"
-      verification: |
-          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null },{"fabricIndex": 1, "privilege": 3, "authMode": 3, "subjects": ["0x0103"], "targets": null }]' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674109884.293472][29548:29550] CHIP:DMG: WriteResponseMessage =
-          [1674109884.293477][29548:29550] CHIP:DMG: {
-          [1674109884.293479][29548:29550] CHIP:DMG:         AttributeStatusIBs =
-          [1674109884.293486][29548:29550] CHIP:DMG:         [
-          [1674109884.293489][29548:29550] CHIP:DMG:                 AttributeStatusIB =
-          [1674109884.293494][29548:29550] CHIP:DMG:                 {
-          [1674109884.293497][29548:29550] CHIP:DMG:                         AttributePathIB =
-          [1674109884.293502][29548:29550] CHIP:DMG:                         {
-          [1674109884.293506][29548:29550] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674109884.293510][29548:29550] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674109884.293514][29548:29550] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674109884.293518][29548:29550] CHIP:DMG:                         }
-          [1674109884.293523][29548:29550] CHIP:DMG:
-          [1674109884.293527][29548:29550] CHIP:DMG:                         StatusIB =
-          [1674109884.293531][29548:29550] CHIP:DMG:                         {
-          [1674109884.293536][29548:29550] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674109884.293539][29548:29550] CHIP:DMG:                         },
-          [1674109884.293543][29548:29550] CHIP:DMG:
-          [1674109884.293547][29548:29550] CHIP:DMG:                 },
-          [1674109884.293572][29548:29550] CHIP:DMG:
-          [1674109884.293575][29548:29550] CHIP:DMG:                 AttributeStatusIB =
-          [1674109884.293579][29548:29550] CHIP:DMG:                 {
-          [1674109884.293582][29548:29550] CHIP:DMG:                         AttributePathIB =
-          [1674109884.293586][29548:29550] CHIP:DMG:                         {
-          [1674109884.293590][29548:29550] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674109884.293594][29548:29550] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674109884.293598][29548:29550] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674109884.293602][29548:29550] CHIP:DMG:                                 ListIndex = Null,
-          [1674109884.293605][29548:29550] CHIP:DMG:                         }
-          [1674109884.293611][29548:29550] CHIP:DMG:
-          [1674109884.293614][29548:29550] CHIP:DMG:                         StatusIB =
-          [1674109884.293618][29548:29550] CHIP:DMG:                         {
-          [1674109884.293621][29548:29550] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674109884.293625][29548:29550] CHIP:DMG:                         },
-          [1674109884.293629][29548:29550] CHIP:DMG:
-          [1674109884.293632][29548:29550] CHIP:DMG:                 },
-          [1674109884.293640][29548:29550] CHIP:DMG:
-          [1674109884.293643][29548:29550] CHIP:DMG:                 AttributeStatusIB =
-          [1674109884.293647][29548:29550] CHIP:DMG:                 {
-          [1674109884.293650][29548:29550] CHIP:DMG:                         AttributePathIB =
-          [1674109884.293654][29548:29550] CHIP:DMG:                         {
-          [1674109884.293657][29548:29550] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674109884.293661][29548:29550] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674109884.293665][29548:29550] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674109884.293669][29548:29550] CHIP:DMG:                                 ListIndex = Null,
-          [1674109884.293672][29548:29550] CHIP:DMG:                         }
-          [1674109884.293678][29548:29550] CHIP:DMG:
-          [1674109884.293681][29548:29550] CHIP:DMG:                         StatusIB =
-          [1674109884.293685][29548:29550] CHIP:DMG:                         {
-          [1674109884.293689][29548:29550] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674109884.293692][29548:29550] CHIP:DMG:                         },
-          [1674109884.293696][29548:29550] CHIP:DMG:
-          [1674109884.293699][29548:29550] CHIP:DMG:                 },
-          [1674109884.293704][29548:29550] CHIP:DMG:
-          [1674109884.293707][29548:29550] CHIP:DMG:         ],
-          [1674109884.293717][29548:29550] CHIP:DMG:
-          [1674109884.293721][29548:29550] CHIP:DMG:         InteractionModelRevision = 1
-          [1674109884.293724][29548:29550] CHIP:DMG: }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH sends KeySetWrite command with incorrect key"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 2a: TH sends KeySetWrite command with incorrect key"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "KeySetWrite"
       arguments:
           values:
@@ -160,55 +86,8 @@
                         EpochStartTime2: 333,
                     }
 
-    - label: "TH sends KeySetWrite command with incorrect key"
-      verification: |
-          ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID": "0x01a3","groupKeySecurityPolicy": 0, "epochKey0":"00000000000000000000000000000001", "epochStartTime0": 111,"epochKey1":"00000000000000000000000000000002", "epochStartTime1": 222,"epochKey2":"00000000000000000000000000000003", "epochStartTime2": 333 }' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674109957.007856][29570:29572] CHIP:DMG: InvokeResponseMessage =
-          [1674109957.007859][29570:29572] CHIP:DMG: {
-          [1674109957.007862][29570:29572] CHIP:DMG:         suppressResponse = false,
-          [1674109957.007865][29570:29572] CHIP:DMG:         InvokeResponseIBs =
-          [1674109957.007872][29570:29572] CHIP:DMG:         [
-          [1674109957.007875][29570:29572] CHIP:DMG:                 InvokeResponseIB =
-          [1674109957.007880][29570:29572] CHIP:DMG:                 {
-          [1674109957.007883][29570:29572] CHIP:DMG:                         CommandStatusIB =
-          [1674109957.007887][29570:29572] CHIP:DMG:                         {
-          [1674109957.007890][29570:29572] CHIP:DMG:                                 CommandPathIB =
-          [1674109957.007894][29570:29572] CHIP:DMG:                                 {
-          [1674109957.007898][29570:29572] CHIP:DMG:                                         EndpointId = 0x0,
-          [1674109957.007901][29570:29572] CHIP:DMG:                                         ClusterId = 0x3f,
-          [1674109957.007905][29570:29572] CHIP:DMG:                                         CommandId = 0x0,
-          [1674109957.007909][29570:29572] CHIP:DMG:                                 },
-          [1674109957.007913][29570:29572] CHIP:DMG:
-          [1674109957.007917][29570:29572] CHIP:DMG:                                 StatusIB =
-          [1674109957.007921][29570:29572] CHIP:DMG:                                 {
-          [1674109957.007924][29570:29572] CHIP:DMG:                                         status = 0x00 (SUCCESS),
-          [1674109957.007927][29570:29572] CHIP:DMG:                                 },
-          [1674109957.007931][29570:29572] CHIP:DMG:
-          [1674109957.007933][29570:29572] CHIP:DMG:                         },
-          [1674109957.007938][29570:29572] CHIP:DMG:
-          [1674109957.007941][29570:29572] CHIP:DMG:                 },
-          [1674109957.007946][29570:29572] CHIP:DMG:
-          [1674109957.007948][29570:29572] CHIP:DMG:         ],
-          [1674109957.007953][29570:29572] CHIP:DMG:
-          [1674109957.007956][29570:29572] CHIP:DMG:         InteractionModelRevision = 1
-          [1674109957.007958][29570:29572] CHIP:DMG: },
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH sends KeySetWrite command with TH key"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 2b: TH sends KeySetWrite command with TH key"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "KeySetWrite"
       arguments:
           values:
@@ -225,121 +104,21 @@
                         EpochStartTime2: 2220002,
                     }
 
-    - label: "TH sends KeySetWrite command with TH key"
-      verification: |
-          ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID": "0x01a3","groupKeySecurityPolicy": 0, "epochKey0":"d0d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime0": 2220000,"epochKey1":"d1d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime1": 2220001,"epochKey2":"d2d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime2": 2220002 }' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674110035.037849][29578:29580] CHIP:DMG: InvokeResponseMessage =
-          [1674110035.037852][29578:29580] CHIP:DMG: {
-          [1674110035.037856][29578:29580] CHIP:DMG:         suppressResponse = false,
-          [1674110035.037859][29578:29580] CHIP:DMG:         InvokeResponseIBs =
-          [1674110035.037864][29578:29580] CHIP:DMG:         [
-          [1674110035.037867][29578:29580] CHIP:DMG:                 InvokeResponseIB =
-          [1674110035.037872][29578:29580] CHIP:DMG:                 {
-          [1674110035.037875][29578:29580] CHIP:DMG:                         CommandStatusIB =
-          [1674110035.037879][29578:29580] CHIP:DMG:                         {
-          [1674110035.037882][29578:29580] CHIP:DMG:                                 CommandPathIB =
-          [1674110035.037886][29578:29580] CHIP:DMG:                                 {
-          [1674110035.037890][29578:29580] CHIP:DMG:                                         EndpointId = 0x0,
-          [1674110035.037893][29578:29580] CHIP:DMG:                                         ClusterId = 0x3f,
-          [1674110035.037897][29578:29580] CHIP:DMG:                                         CommandId = 0x0,
-          [1674110035.037900][29578:29580] CHIP:DMG:                                 },
-          [1674110035.037905][29578:29580] CHIP:DMG:
-          [1674110035.037908][29578:29580] CHIP:DMG:                                 StatusIB =
-          [1674110035.037912][29578:29580] CHIP:DMG:                                 {
-          [1674110035.037916][29578:29580] CHIP:DMG:                                         status = 0x00 (SUCCESS),
-          [1674110035.037920][29578:29580] CHIP:DMG:                                 },
-          [1674110035.037925][29578:29580] CHIP:DMG:
-          [1674110035.037929][29578:29580] CHIP:DMG:                         },
-          [1674110035.037934][29578:29580] CHIP:DMG:
-          [1674110035.037938][29578:29580] CHIP:DMG:                 },
-          [1674110035.037944][29578:29580] CHIP:DMG:
-          [1674110035.037948][29578:29580] CHIP:DMG:         ],
-          [1674110035.037954][29578:29580] CHIP:DMG:
-          [1674110035.037957][29578:29580] CHIP:DMG:         InteractionModelRevision = 1
-          [1674110035.037960][29578:29580] CHIP:DMG: },
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH binds GroupId to GroupKeySet"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 3: TH binds GroupId to GroupKeySet"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "writeAttribute"
       attribute: "GroupKeyMap"
       arguments:
           value: [{ FabricIndex: 1, GroupId: 0x0103, GroupKeySetID: 0x01a3 }]
 
-    - label: "TH binds GroupId to GroupKeySet"
-      verification: |
-          ./chip-tool groupkeymanagement write group-key-map '[{"groupId": "0x0103", "groupKeySetID": "0x01a3", "fabricIndex": 1}]' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674110101.932149][29586:29588] CHIP:DMG: WriteResponseMessage =
-          [1674110101.932152][29586:29588] CHIP:DMG: {
-          [1674110101.932155][29586:29588] CHIP:DMG:         AttributeStatusIBs =
-          [1674110101.932161][29586:29588] CHIP:DMG:         [
-          [1674110101.932164][29586:29588] CHIP:DMG:                 AttributeStatusIB =
-          [1674110101.932169][29586:29588] CHIP:DMG:                 {
-          [1674110101.932173][29586:29588] CHIP:DMG:                         AttributePathIB =
-          [1674110101.932177][29586:29588] CHIP:DMG:                         {
-          [1674110101.932181][29586:29588] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674110101.932185][29586:29588] CHIP:DMG:                                 Cluster = 0x3f,
-          [1674110101.932189][29586:29588] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674110101.932193][29586:29588] CHIP:DMG:                         }
-          [1674110101.932198][29586:29588] CHIP:DMG:
-          [1674110101.932201][29586:29588] CHIP:DMG:                         StatusIB =
-          [1674110101.932206][29586:29588] CHIP:DMG:                         {
-          [1674110101.932210][29586:29588] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674110101.932213][29586:29588] CHIP:DMG:                         },
-          [1674110101.932217][29586:29588] CHIP:DMG:
-          [1674110101.932220][29586:29588] CHIP:DMG:                 },
-          [1674110101.932227][29586:29588] CHIP:DMG:
-          [1674110101.932230][29586:29588] CHIP:DMG:                 AttributeStatusIB =
-          [1674110101.932234][29586:29588] CHIP:DMG:                 {
-          [1674110101.932237][29586:29588] CHIP:DMG:                         AttributePathIB =
-          [1674110101.932240][29586:29588] CHIP:DMG:                         {
-          [1674110101.932244][29586:29588] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674110101.932248][29586:29588] CHIP:DMG:                                 Cluster = 0x3f,
-          [1674110101.932252][29586:29588] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674110101.932256][29586:29588] CHIP:DMG:                                 ListIndex = Null,
-          [1674110101.932259][29586:29588] CHIP:DMG:                         }
-          [1674110101.932264][29586:29588] CHIP:DMG:
-          [1674110101.932267][29586:29588] CHIP:DMG:                         StatusIB =
-          [1674110101.932270][29586:29588] CHIP:DMG:                         {
-          [1674110101.932273][29586:29588] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674110101.932276][29586:29588] CHIP:DMG:                         },
-          [1674110101.932280][29586:29588] CHIP:DMG:
-          [1674110101.932283][29586:29588] CHIP:DMG:                 },
-          [1674110101.932288][29586:29588] CHIP:DMG:
-          [1674110101.932291][29586:29588] CHIP:DMG:         ],
-          [1674110101.932298][29586:29588] CHIP:DMG:
-          [1674110101.932301][29586:29588] CHIP:DMG:         InteractionModelRevision = 1
-          [1674110101.932305][29586:29588] CHIP:DMG: }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH sends RemoveAllGroups command"
+    - label:
+          "Step 4: TH sends RemoveAllGroups command to the DUT on
+          PIXIT.G.ENDPOINT "
+      endpoint: Groups.Endpoint
       command: "RemoveAllGroups"
 
-    - label: "TH sends AddGroup command"
+    - label: "Step 5: TH sends AddGroup command to DUT on PIXIT.G.ENDPOINT"
+      endpoint: Groups.Endpoint
       command: "AddGroup"
       arguments:
           values:
@@ -348,8 +127,9 @@
               - name: GroupName
                 value: "Test Group"
 
-    - label: "TH sends ViewGroup command"
+    - label: "Step 6a: TH sends ViewGroup command to DUT on PIXIT.G.ENDPOINT"
       PICS: G.S.F00
+      endpoint: Groups.Endpoint
       command: "ViewGroup"
       arguments:
           values:
@@ -364,8 +144,9 @@
               - name: GroupName
                 value: "Test Group"
 
-    - label: "TH sends ViewGroup command"
+    - label: "Step 6b: TH sends ViewGroup command to DUT on PIXIT.G.ENDPOINT"
       PICS: "!(G.S.F00)"
+      endpoint: Groups.Endpoint
       command: "ViewGroup"
       arguments:
           values:
@@ -380,10 +161,8 @@
               - name: GroupName
                 value: ""
 
-    - label: "TH sends KeySetRead"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 7: TH sends KeySetRead"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "KeySetRead"
       arguments:
           values:
@@ -404,82 +183,18 @@
                         EpochStartTime2: 2220002,
                     }
 
-    - label: "TH sends KeySetRead"
-      verification: |
-          ./chip-tool groupkeymanagement key-set-read "0x01a3" 1 0
-
-          Verify DUT sends a KeySetReadResponse with the GroupKeySet having the following fields:
-          GroupKeySetID: 0x01a3(Decimal value 419)
-          GroupKeySecurityPolicy: TrustFirst (0)
-          EpochKey0: null
-          EpochStartTime0: 2220000
-          EpochKey1: null
-          EpochStartTime1: 2220001
-          EpochKey2: null
-          EpochStartTime0: 2220002 on TH(chip-tool)  Logs:
-
-          [1674110375.913702][29626:29628] CHIP:DMG: Received Command Response Data, Endpoint=0 Cluster=0x0000_003F Command=0x0000_0002
-          [1674110375.913742][29626:29628] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Command 0x0000_0002
-          [1674110375.914256][29626:29628] CHIP:TOO:   KeySetReadResponse: {
-          [1674110375.914277][29626:29628] CHIP:TOO:     groupKeySet: {
-          [1674110375.914293][29626:29628] CHIP:TOO:       GroupKeySetID: 419
-          [1674110375.914306][29626:29628] CHIP:TOO:       GroupKeySecurityPolicy: 0
-          [1674110375.914317][29626:29628] CHIP:TOO:       EpochKey0: null
-          [1674110375.914329][29626:29628] CHIP:TOO:       EpochStartTime0: 2220000
-          [1674110375.914339][29626:29628] CHIP:TOO:       EpochKey1: null
-          [1674110375.914350][29626:29628] CHIP:TOO:       EpochStartTime1: 2220001
-          [1674110375.914359][29626:29628] CHIP:TOO:       EpochKey2: null
-          [1674110375.914369][29626:29628] CHIP:TOO:       EpochStartTime2: 2220002
-          [1674110375.914379][29626:29628] CHIP:TOO:      }
-          [1674110375.914390][29626:29628] CHIP:TOO:    }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
     - label:
-          "TH reads GroupKeyMap Attribute from the GroupKeyManagement cluster"
+          "Step 8: TH reads GroupKeyMap Attribute from the GroupKeyManagement
+          cluster"
       cluster: "Group Key Management"
-      PICS: PICS_SDK_CI_ONLY
-      endpoint: 0
       command: "readAttribute"
       attribute: "GroupKeyMap"
       response:
           value: [{ FabricIndex: 1, GroupId: 0x0103, GroupKeySetID: 0x01a3 }]
 
-    - label:
-          "TH reads GroupKeyMap Attribute from the GroupKeyManagement cluster"
-      verification: |
-          ./chip-tool groupkeymanagement read group-key-map 1 0
-
-          Verify GroupKeyMap attribute list containing GroupId: 0x0103(Decimal value 259) and  GroupKeySetId: 0x01a3(Decimal value 419 ) on TH(chip-tool)  Logs:
-
-          [1674110435.952959][29634:29636] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0000 DataVersion: 624171954
-          [1674110435.953367][29634:29636] CHIP:TOO:   GroupKeyMap: 1 entries
-          [1674110435.953401][29634:29636] CHIP:TOO:     [1]: {
-          [1674110435.953407][29634:29636] CHIP:TOO:       GroupId: 259
-          [1674110435.953411][29634:29636] CHIP:TOO:       GroupKeySetID: 419
-          [1674110435.953414][29634:29636] CHIP:TOO:       FabricIndex: 1
-          [1674110435.953417][29634:29636] CHIP:TOO:      }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH reads GroupTable attribute"
+    - label: "Step 9a: TH reads GroupTable attribute"
       cluster: "Group Key Management"
-      endpoint: 0
-      PICS: G.S.F00 && PICS_SDK_CI_ONLY
+      PICS: G.S.F00
       command: "readAttribute"
       attribute: "GroupTable"
       response:
@@ -487,244 +202,52 @@
               [
                   {
                       GroupId: 0x0103,
-                      Endpoints: [endpoint],
+                      Endpoints: [Groups.Endpoint],
                       GroupName: "Test Group",
                   },
               ]
 
-    - label: "TH reads GroupTable attribute"
-      verification: |
-          ./chip-tool groupkeymanagement read group-table 1 0
-
-          Verify GroupTable attribute list containing GroupId: 0x0103(Decimal value 259),  Endpoint:0 and  GroupKeySetId: 0x01a3(Decimal value 419 ) on TH(chip-tool)  Logs:
-
-          [1674110549.621751][29686:29688] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 624171954
-          [1674110549.621779][29686:29688] CHIP:TOO:   GroupTable: 1 entries
-          [1674110549.621810][29686:29688] CHIP:TOO:     [1]: {
-          [1674110549.621819][29686:29688] CHIP:TOO:       GroupId: 259
-          [1674110549.621826][29686:29688] CHIP:TOO:       Endpoints: 1 entries
-          [1674110549.621833][29686:29688] CHIP:TOO:         [1]: 0
-          [1674110549.621839][29686:29688] CHIP:TOO:       GroupName: Test Group
-          [1674110549.621845][29686:29688] CHIP:TOO:       FabricIndex: 1
-          [1674110549.621849][29686:29688] CHIP:TOO:      }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP && G.S.F00
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH reads GroupTable attribute"
+    - label: "Step 9b: TH reads GroupTable attribute"
       cluster: "Group Key Management"
-      endpoint: 0
-      PICS: PICS_SDK_CI_ONLY && !G.S.F00
+      PICS: " !G.S.F00 "
       command: "readAttribute"
       attribute: "GroupTable"
       response:
-          value: [{ GroupId: 0x0103, Endpoints: [endpoint], GroupName: "" }]
+          value:
+              [{ GroupId: 0x0103, Endpoints: [Groups.Endpoint], GroupName: "" }]
 
-    - label: "TH reads GroupTable attribute"
-      verification: |
-          If F00(GN) feature is not supporting for GroupTable attribute
-
-          ./chip-tool groupkeymanagement read group-table 1 0
-
-          Verify GroupTable attribute list containing GroupId: 0x0103(Decimal value 259),  Endpoint:0 and  GroupKeySetId: 0x01a3(Decimal value 419 ) on TH(chip-tool)  Logs:
-
-          [1674110549.621751][29686:29688] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 624171954
-          [1674110549.621779][29686:29688] CHIP:TOO:   GroupTable: 1 entries
-          [1674110549.621810][29686:29688] CHIP:TOO:     [1]: {
-          [1674110549.621819][29686:29688] CHIP:TOO:       GroupId: 259
-          [1674110549.621826][29686:29688] CHIP:TOO:       Endpoints: 1 entries
-          [1674110549.621833][29686:29688] CHIP:TOO:         [1]: 0
-          [1674110549.621839][29686:29688] CHIP:TOO:       GroupName: Test Group
-          [1674110549.621845][29686:29688] CHIP:TOO:       FabricIndex: 1
-          [1674110549.621849][29686:29688] CHIP:TOO:      }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP && !G.S.F00
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH removes the GroupKeySet"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 10: TH removes the GroupKeySet"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "KeySetRemove"
       arguments:
           values:
               - name: GroupKeySetID
                 value: 0x01a3
 
-    - label: "TH removes the GroupKeySet"
-      verification: |
-          ./chip-tool groupkeymanagement key-set-remove "0x01a3" 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on TH(chip-tool)  Logs:
-
-          [1674110684.044225][29696:29698] CHIP:DMG: InvokeResponseMessage =
-          [1674110684.044235][29696:29698] CHIP:DMG: {
-          [1674110684.044246][29696:29698] CHIP:DMG:         suppressResponse = false,
-          [1674110684.044256][29696:29698] CHIP:DMG:         InvokeResponseIBs =
-          [1674110684.044277][29696:29698] CHIP:DMG:         [
-          [1674110684.044288][29696:29698] CHIP:DMG:                 InvokeResponseIB =
-          [1674110684.044310][29696:29698] CHIP:DMG:                 {
-          [1674110684.044320][29696:29698] CHIP:DMG:                         CommandStatusIB =
-          [1674110684.044334][29696:29698] CHIP:DMG:                         {
-          [1674110684.044345][29696:29698] CHIP:DMG:                                 CommandPathIB =
-          [1674110684.044358][29696:29698] CHIP:DMG:                                 {
-          [1674110684.044372][29696:29698] CHIP:DMG:                                         EndpointId = 0x0,
-          [1674110684.044385][29696:29698] CHIP:DMG:                                         ClusterId = 0x3f,
-          [1674110684.044397][29696:29698] CHIP:DMG:                                         CommandId = 0x3,
-          [1674110684.044408][29696:29698] CHIP:DMG:                                 },
-          [1674110684.044426][29696:29698] CHIP:DMG:
-          [1674110684.044438][29696:29698] CHIP:DMG:                                 StatusIB =
-          [1674110684.044452][29696:29698] CHIP:DMG:                                 {
-          [1674110684.044465][29696:29698] CHIP:DMG:                                         status = 0x00 (SUCCESS),
-          [1674110684.044476][29696:29698] CHIP:DMG:                                 },
-          [1674110684.044490][29696:29698] CHIP:DMG:
-          [1674110684.044499][29696:29698] CHIP:DMG:                         },
-          [1674110684.044517][29696:29698] CHIP:DMG:
-          [1674110684.044527][29696:29698] CHIP:DMG:                 },
-          [1674110684.044543][29696:29698] CHIP:DMG:
-          [1674110684.044553][29696:29698] CHIP:DMG:         ],
-          [1674110684.044572][29696:29698] CHIP:DMG:
-          [1674110684.044583][29696:29698] CHIP:DMG:         InteractionModelRevision = 1
-          [1674110684.044592][29696:29698] CHIP:DMG: },
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH verifies the corresponding GroupKeyMap entry has been removed"
-      PICS: PICS_SDK_CI_ONLY
+    - label:
+          "Step 11: TH verifies the corresponding GroupKeyMap entry has been
+          removed"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "readAttribute"
       attribute: "GroupKeyMap"
       response:
           value: []
 
-    - label: "TH verifies the corresponding GroupKeyMap entry has been removed"
-      verification: |
-          ./chip-tool groupkeymanagement read group-key-map 1 0
-
-          Verify GroupKeyMap containing empty list on TH(chip-tool)  Logs:
-
-          [1674110744.294550][29707:29709] CHIP:DMG: ReportDataMessage =
-          [1674110744.294570][29707:29709] CHIP:DMG: {
-          [1674110744.294583][29707:29709] CHIP:DMG:         AttributeReportIBs =
-          [1674110744.294611][29707:29709] CHIP:DMG:         [
-          [1674110744.294626][29707:29709] CHIP:DMG:                 AttributeReportIB =
-          [1674110744.294654][29707:29709] CHIP:DMG:                 {
-          [1674110744.294667][29707:29709] CHIP:DMG:                         AttributeDataIB =
-          [1674110744.294686][29707:29709] CHIP:DMG:                         {
-          [1674110744.294703][29707:29709] CHIP:DMG:                                 DataVersion = 0x25341bb2,
-          [1674110744.294719][29707:29709] CHIP:DMG:                                 AttributePathIB =
-          [1674110744.294739][29707:29709] CHIP:DMG:                                 {
-          [1674110744.294756][29707:29709] CHIP:DMG:                                         Endpoint = 0x0,
-          [1674110744.294773][29707:29709] CHIP:DMG:                                         Cluster = 0x3f,
-          [1674110744.294847][29707:29709] CHIP:DMG:                                         Attribute = 0x0000_0000,
-          [1674110744.294864][29707:29709] CHIP:DMG:                                 }
-          [1674110744.294885][29707:29709] CHIP:DMG:
-          [1674110744.294900][29707:29709] CHIP:DMG:                                 Data = [
-          [1674110744.294917][29707:29709] CHIP:DMG:
-          [1674110744.294935][29707:29709] CHIP:DMG:                                 ],
-          [1674110744.294950][29707:29709] CHIP:DMG:                         },
-          [1674110744.294974][29707:29709] CHIP:DMG:
-          [1674110744.294986][29707:29709] CHIP:DMG:                 },
-          [1674110744.295012][29707:29709] CHIP:DMG:
-          [1674110744.295023][29707:29709] CHIP:DMG:         ],
-          [1674110744.295050][29707:29709] CHIP:DMG:
-          [1674110744.295063][29707:29709] CHIP:DMG:         SuppressResponse = true,
-          [1674110744.295079][29707:29709] CHIP:DMG:         InteractionModelRevision = 1
-          [1674110744.295093][29707:29709] CHIP:DMG: }
-          [1674110744.295288][29707:29709] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0000 DataVersion: 624171954
-          [1674110744.295368][29707:29709] CHIP:TOO:   GroupKeyMap: 0 entries
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH cleans up groups using RemoveAllGroups command"
+    - label:
+          "Step 12: TH cleans up groups using RemoveAllGroups command to the DUT
+          on PIXIT.G.ENDPOINT"
+      endpoint: Groups.Endpoint
       command: "RemoveAllGroups"
 
-    - label: "TH verifies the group has been removed in the GroupTable"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 13: TH verifies the group has been removed in the GroupTable"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "readAttribute"
       attribute: "GroupTable"
       response:
           value: []
 
-    - label: "TH verifies the group has been removed in the GroupTable"
-      verification: |
-          ./chip-tool groupkeymanagement read group-table 1 0
-
-          Verify GroupTable containing empty list on TH(chip-tool)  Logs:
-
-          [1674110892.787761][29730:29732] CHIP:DMG: ReportDataMessage =
-          [1674110892.787768][29730:29732] CHIP:DMG: {
-          [1674110892.787772][29730:29732] CHIP:DMG:         AttributeReportIBs =
-          [1674110892.787780][29730:29732] CHIP:DMG:         [
-          [1674110892.787783][29730:29732] CHIP:DMG:                 AttributeReportIB =
-          [1674110892.787789][29730:29732] CHIP:DMG:                 {
-          [1674110892.787792][29730:29732] CHIP:DMG:                         AttributeDataIB =
-          [1674110892.787797][29730:29732] CHIP:DMG:                         {
-          [1674110892.787803][29730:29732] CHIP:DMG:                                 DataVersion = 0x25341bb2,
-          [1674110892.787806][29730:29732] CHIP:DMG:                                 AttributePathIB =
-          [1674110892.787811][29730:29732] CHIP:DMG:                                 {
-          [1674110892.787815][29730:29732] CHIP:DMG:                                         Endpoint = 0x0,
-          [1674110892.787819][29730:29732] CHIP:DMG:                                         Cluster = 0x3f,
-          [1674110892.787825][29730:29732] CHIP:DMG:                                         Attribute = 0x0000_0001,
-          [1674110892.787828][29730:29732] CHIP:DMG:                                 }
-          [1674110892.787834][29730:29732] CHIP:DMG:
-          [1674110892.787840][29730:29732] CHIP:DMG:                                 Data = [
-          [1674110892.787843][29730:29732] CHIP:DMG:
-          [1674110892.787847][29730:29732] CHIP:DMG:                                 ],
-          [1674110892.787850][29730:29732] CHIP:DMG:                         },
-          [1674110892.787855][29730:29732] CHIP:DMG:
-          [1674110892.787858][29730:29732] CHIP:DMG:                 },
-          [1674110892.787863][29730:29732] CHIP:DMG:
-          [1674110892.787865][29730:29732] CHIP:DMG:         ],
-          [1674110892.787871][29730:29732] CHIP:DMG:
-          [1674110892.787875][29730:29732] CHIP:DMG:         SuppressResponse = true,
-          [1674110892.787878][29730:29732] CHIP:DMG:         InteractionModelRevision = 1
-          [1674110892.787881][29730:29732] CHIP:DMG: }
-          [1674110892.787953][29730:29732] CHIP:TOO: Endpoint: 0 Cluster: 0x0000_003F Attribute 0x0000_0001 DataVersion: 624171954
-          [1674110892.787973][29730:29732] CHIP:TOO:   GroupTable: 0 entries
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH removes ACL Operate privileges for Group 0x0103"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 14: TH removes ACL Operate privileges for Group 0x0103"
       cluster: "Access Control"
-      endpoint: 0
       command: "writeAttribute"
       attribute: "ACL"
       arguments:
@@ -738,60 +261,3 @@
                       Targets: null,
                   },
               ]
-
-    - label: "TH removes ACL Operate privileges for Group 0x0103"
-      verification: |
-          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null }]' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674209548.549754][6888:6890] CHIP:DMG: WriteResponseMessage =
-          [1674209548.549758][6888:6890] CHIP:DMG: {
-          [1674209548.549760][6888:6890] CHIP:DMG:         AttributeStatusIBs =
-          [1674209548.549765][6888:6890] CHIP:DMG:         [
-          [1674209548.549768][6888:6890] CHIP:DMG:                 AttributeStatusIB =
-          [1674209548.549772][6888:6890] CHIP:DMG:                 {
-          [1674209548.549775][6888:6890] CHIP:DMG:                         AttributePathIB =
-          [1674209548.549779][6888:6890] CHIP:DMG:                         {
-          [1674209548.549782][6888:6890] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674209548.549786][6888:6890] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674209548.549789][6888:6890] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674209548.549792][6888:6890] CHIP:DMG:                         }
-          [1674209548.549797][6888:6890] CHIP:DMG:
-          [1674209548.549800][6888:6890] CHIP:DMG:                         StatusIB =
-          [1674209548.549804][6888:6890] CHIP:DMG:                         {
-          [1674209548.549807][6888:6890] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674209548.549810][6888:6890] CHIP:DMG:                         },
-          [1674209548.549813][6888:6890] CHIP:DMG:
-          [1674209548.549816][6888:6890] CHIP:DMG:                 },
-          [1674209548.549823][6888:6890] CHIP:DMG:
-          [1674209548.549825][6888:6890] CHIP:DMG:                 AttributeStatusIB =
-          [1674209548.549828][6888:6890] CHIP:DMG:                 {
-          [1674209548.549831][6888:6890] CHIP:DMG:                         AttributePathIB =
-          [1674209548.549836][6888:6890] CHIP:DMG:                         {
-          [1674209548.549839][6888:6890] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674209548.549842][6888:6890] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674209548.549845][6888:6890] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674209548.549849][6888:6890] CHIP:DMG:                                 ListIndex = Null,
-          [1674209548.549852][6888:6890] CHIP:DMG:                         }
-          [1674209548.549856][6888:6890] CHIP:DMG:
-          [1674209548.549859][6888:6890] CHIP:DMG:                         StatusIB =
-          [1674209548.549862][6888:6890] CHIP:DMG:                         {
-          [1674209548.549865][6888:6890] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674209548.549868][6888:6890] CHIP:DMG:                         },
-          [1674209548.549871][6888:6890] CHIP:DMG:
-          [1674209548.549873][6888:6890] CHIP:DMG:                 },
-          [1674209548.549878][6888:6890] CHIP:DMG:
-          [1674209548.549881][6888:6890] CHIP:DMG:         ],
-          [1674209548.549887][6888:6890] CHIP:DMG:
-          [1674209548.549890][6888:6890] CHIP:DMG:         InteractionModelRevision = 1
-          [1674209548.549892][6888:6890] CHIP:DMG: }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
diff --git a/src/app/tests/suites/certification/Test_TC_SC_5_2.yaml b/src/app/tests/suites/certification/Test_TC_SC_5_2.yaml
index 1eed00b..d6fa8b8 100644
--- a/src/app/tests/suites/certification/Test_TC_SC_5_2.yaml
+++ b/src/app/tests/suites/certification/Test_TC_SC_5_2.yaml
@@ -13,7 +13,7 @@
 # limitations under the License.
 # Auto-generated scripts for harness use only, please review before automation. The endpoints and cluster names are currently set to default
 
-name: 19.1.2. [TC-SC-5.2] Receiving a group message - TH to DUT
+name: 26.1.2. [TC-SC-5.2] Receiving a group message - TH to DUT
 
 PICS:
     - MCORE.ROLE.COMMISSIONEE
@@ -21,11 +21,13 @@
 config:
     nodeId: 0x12344321
     cluster: "Groups"
+    endpoint: 0
+
     # Users should set endpoint value on the command line to PIXIT.G.ENDPOINT
-    endpoint: 1
+    Groups.Endpoint: 1
 
 tests:
-    - label: "Wait for the commissioned device to be retrieved"
+    - label: "Step 0: Wait for the commissioned device to be retrieved"
       cluster: "DelayCommands"
       command: "WaitForCommissionee"
       arguments:
@@ -41,10 +43,8 @@
               - name: "nodeId"
                 saveAs: commissionerNodeId
 
-    - label: "TH adds ACL Operate privileges for Group 0x0103"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 1: TH adds ACL Operate privileges for Group 0x0103"
       cluster: "Access Control"
-      endpoint: 0
       command: "writeAttribute"
       attribute: "ACL"
       arguments:
@@ -66,84 +66,8 @@
                   },
               ]
 
-    - label: "TH adds ACL Operate privileges for Group 0x0103"
-      verification: |
-          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null },{"fabricIndex": 1, "privilege": 4, "authMode": 3, "subjects": ["0x0103"], "targets": null }]' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674197827.380263][1821:1823] CHIP:DMG: WriteResponseMessage =
-          [1674197827.380335][1821:1823] CHIP:DMG: {
-          [1674197827.380364][1821:1823] CHIP:DMG:         AttributeStatusIBs =
-          [1674197827.380405][1821:1823] CHIP:DMG:         [
-          [1674197827.380449][1821:1823] CHIP:DMG:                 AttributeStatusIB =
-          [1674197827.380486][1821:1823] CHIP:DMG:                 {
-          [1674197827.380541][1821:1823] CHIP:DMG:                         AttributePathIB =
-          [1674197827.380582][1821:1823] CHIP:DMG:                         {
-          [1674197827.380635][1821:1823] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674197827.380677][1821:1823] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674197827.380732][1821:1823] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674197827.380784][1821:1823] CHIP:DMG:                         }
-          [1674197827.380829][1821:1823] CHIP:DMG:
-          [1674197827.380878][1821:1823] CHIP:DMG:                         StatusIB =
-          [1674197827.380918][1821:1823] CHIP:DMG:                         {
-          [1674197827.380968][1821:1823] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674197827.381010][1821:1823] CHIP:DMG:                         },
-          [1674197827.381061][1821:1823] CHIP:DMG:
-          [1674197827.381094][1821:1823] CHIP:DMG:                 },
-          [1674197827.381152][1821:1823] CHIP:DMG:
-          [1674197827.381184][1821:1823] CHIP:DMG:                 AttributeStatusIB =
-          [1674197827.381230][1821:1823] CHIP:DMG:                 {
-          [1674197827.381263][1821:1823] CHIP:DMG:                         AttributePathIB =
-          [1674197827.381301][1821:1823] CHIP:DMG:                         {
-          [1674197827.381352][1821:1823] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674197827.381406][1821:1823] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674197827.381449][1821:1823] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674197827.381502][1821:1823] CHIP:DMG:                                 ListIndex = Null,
-          [1674197827.381543][1821:1823] CHIP:DMG:                         }
-          [1674197827.381597][1821:1823] CHIP:DMG:
-          [1674197827.381635][1821:1823] CHIP:DMG:                         StatusIB =
-          [1674197827.381673][1821:1823] CHIP:DMG:                         {
-          [1674197827.381725][1821:1823] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674197827.381763][1821:1823] CHIP:DMG:                         },
-          [1674197827.381814][1821:1823] CHIP:DMG:
-          [1674197827.381846][1821:1823] CHIP:DMG:                 },
-          [1674197827.381910][1821:1823] CHIP:DMG:
-          [1674197827.381942][1821:1823] CHIP:DMG:                 AttributeStatusIB =
-          [1674197827.381988][1821:1823] CHIP:DMG:                 {
-          [1674197827.382021][1821:1823] CHIP:DMG:                         AttributePathIB =
-          [1674197827.382070][1821:1823] CHIP:DMG:                         {
-          [1674197827.382109][1821:1823] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674197827.382161][1821:1823] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674197827.382204][1821:1823] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674197827.382255][1821:1823] CHIP:DMG:                                 ListIndex = Null,
-          [1674197827.382295][1821:1823] CHIP:DMG:                         }
-          [1674197827.382349][1821:1823] CHIP:DMG:
-          [1674197827.382387][1821:1823] CHIP:DMG:                         StatusIB =
-          [1674197827.382436][1821:1823] CHIP:DMG:                         {
-          [1674197827.382476][1821:1823] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674197827.382527][1821:1823] CHIP:DMG:                         },
-          [1674197827.382566][1821:1823] CHIP:DMG:
-          [1674197827.382599][1821:1823] CHIP:DMG:                 },
-          [1674197827.382650][1821:1823] CHIP:DMG:
-          [1674197827.382681][1821:1823] CHIP:DMG:         ],
-          [1674197827.382729][1821:1823] CHIP:DMG:
-          [1674197827.382759][1821:1823] CHIP:DMG:         InteractionModelRevision = 1
-          [1674197827.382789][1821:1823] CHIP:DMG: }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH sends KeySetWrite command with TH key"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 2: TH sends KeySetWrite command with TH key"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "KeySetWrite"
       arguments:
           values:
@@ -160,125 +84,25 @@
                         EpochStartTime2: 2220002,
                     }
 
-    - label: "TH sends KeySetWrite command with TH key"
-      verification: |
-          ./chip-tool groupkeymanagement key-set-write '{"groupKeySetID": "0x01a3","groupKeySecurityPolicy": 0, "epochKey0":"d0d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime0": 2220000,"epochKey1":"d1d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime1": 2220001,"epochKey2":"d2d1d2d3d4d5d6d7d8d9dadbdcdddedf", "epochStartTime2": 2220002 }' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674198053.466794][1826:1829] CHIP:DMG: InvokeResponseMessage =
-          [1674198053.466849][1826:1829] CHIP:DMG: {
-          [1674198053.466903][1826:1829] CHIP:DMG:         suppressResponse = false,
-          [1674198053.466962][1826:1829] CHIP:DMG:         InvokeResponseIBs =
-          [1674198053.467036][1826:1829] CHIP:DMG:         [
-          [1674198053.467093][1826:1829] CHIP:DMG:                 InvokeResponseIB =
-          [1674198053.467170][1826:1829] CHIP:DMG:                 {
-          [1674198053.467231][1826:1829] CHIP:DMG:                         CommandStatusIB =
-          [1674198053.467304][1826:1829] CHIP:DMG:                         {
-          [1674198053.467371][1826:1829] CHIP:DMG:                                 CommandPathIB =
-          [1674198053.467449][1826:1829] CHIP:DMG:                                 {
-          [1674198053.467525][1826:1829] CHIP:DMG:                                         EndpointId = 0x0,
-          [1674198053.467606][1826:1829] CHIP:DMG:                                         ClusterId = 0x3f,
-          [1674198053.467691][1826:1829] CHIP:DMG:                                         CommandId = 0x0,
-          [1674198053.467769][1826:1829] CHIP:DMG:                                 },
-          [1674198053.467854][1826:1829] CHIP:DMG:
-          [1674198053.467922][1826:1829] CHIP:DMG:                                 StatusIB =
-          [1674198053.467999][1826:1829] CHIP:DMG:                                 {
-          [1674198053.468076][1826:1829] CHIP:DMG:                                         status = 0x00 (SUCCESS),
-          [1674198053.468154][1826:1829] CHIP:DMG:                                 },
-          [1674198053.468231][1826:1829] CHIP:DMG:
-          [1674198053.468338][1826:1829] CHIP:DMG:                         },
-          [1674198053.468419][1826:1829] CHIP:DMG:
-          [1674198053.468479][1826:1829] CHIP:DMG:                 },
-          [1674198053.468550][1826:1829] CHIP:DMG:
-          [1674198053.468606][1826:1829] CHIP:DMG:         ],
-          [1674198053.468676][1826:1829] CHIP:DMG:
-          [1674198053.468731][1826:1829] CHIP:DMG:         InteractionModelRevision = 1
-          [1674198053.468788][1826:1829] CHIP:DMG: },
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH binds GroupId to GroupKeySet"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 3: TH binds GroupId to GroupKeySet"
       cluster: "Group Key Management"
-      endpoint: 0
       command: "writeAttribute"
       attribute: "GroupKeyMap"
       arguments:
           value:
               [
-                  { FabricIndex: 1, GroupId: 0x0101, GroupKeySetID: 0x01a3 },
                   { FabricIndex: 1, GroupId: 0x0103, GroupKeySetID: 0x01a3 },
+                  { FabricIndex: 1, GroupId: 0x0101, GroupKeySetID: 0x01a3 },
               ]
 
-    - label: "TH binds GroupId to GroupKeySet"
-      verification: |
-          ./chip-tool groupkeymanagement write group-key-map '[{"groupId": "0x0103", "groupKeySetID": "0x01a3", "fabricIndex": 1},{"groupId": "0x0101", "groupKeySetID": "0x01a3", "fabricIndex": 1}]' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on  TH(chip-tool)  Logs:
-
-          [1674198154.629775][1837:1839] CHIP:DMG: WriteResponseMessage =
-          [1674198154.629832][1837:1839] CHIP:DMG: {
-          [1674198154.629908][1837:1839] CHIP:DMG:         AttributeStatusIBs =
-          [1674198154.629983][1837:1839] CHIP:DMG:         [
-          [1674198154.630064][1837:1839] CHIP:DMG:                 AttributeStatusIB =
-          [1674198154.630105][1837:1839] CHIP:DMG:                 {
-          [1674198154.630142][1837:1839] CHIP:DMG:                         AttributePathIB =
-          [1674198154.630178][1837:1839] CHIP:DMG:                         {
-          [1674198154.630290][1837:1839] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674198154.630325][1837:1839] CHIP:DMG:                                 Cluster = 0x3f,
-          [1674198154.630358][1837:1839] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674198154.630400][1837:1839] CHIP:DMG:                         }
-          [1674198154.630437][1837:1839] CHIP:DMG:
-          [1674198154.630476][1837:1839] CHIP:DMG:                         StatusIB =
-          [1674198154.630508][1837:1839] CHIP:DMG:                         {
-          [1674198154.630549][1837:1839] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674198154.630581][1837:1839] CHIP:DMG:                         },
-          [1674198154.630621][1837:1839] CHIP:DMG:
-          [1674198154.630648][1837:1839] CHIP:DMG:                 },
-          [1674198154.630695][1837:1839] CHIP:DMG:
-          [1674198154.630721][1837:1839] CHIP:DMG:                 AttributeStatusIB =
-          [1674198154.630748][1837:1839] CHIP:DMG:                 {
-          [1674198154.630784][1837:1839] CHIP:DMG:                         AttributePathIB =
-          [1674198154.630814][1837:1839] CHIP:DMG:                         {
-          [1674198154.630854][1837:1839] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674198154.630887][1837:1839] CHIP:DMG:                                 Cluster = 0x3f,
-          [1674198154.630929][1837:1839] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674198154.630964][1837:1839] CHIP:DMG:                                 ListIndex = Null,
-          [1674198154.631004][1837:1839] CHIP:DMG:                         }
-          [1674198154.631039][1837:1839] CHIP:DMG:
-          [1674198154.631077][1837:1839] CHIP:DMG:                         StatusIB =
-          [1674198154.631108][1837:1839] CHIP:DMG:                         {
-          [1674198154.631148][1837:1839] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674198154.631179][1837:1839] CHIP:DMG:                         },
-          [1674198154.631208][1837:1839] CHIP:DMG:
-          [1674198154.631244][1837:1839] CHIP:DMG:                 },
-          [1674198154.631275][1837:1839] CHIP:DMG:
-          [1674198154.631310][1837:1839] CHIP:DMG:         ],
-          [1674198154.631345][1837:1839] CHIP:DMG:
-          [1674198154.631378][1837:1839] CHIP:DMG:         InteractionModelRevision = 1
-          [1674198154.631403][1837:1839] CHIP:DMG: }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH sends RemoveAllGroups command"
+    - label:
+          "Step 4: TH sends RemoveAllGroups command to the DUT on
+          PIXIT.G.ENDPOINT"
+      endpoint: Groups.Endpoint
       command: "RemoveAllGroups"
 
-    - label: "TH sends AddGroup command"
+    - label: "Step 5: TH sends AddGroup command to the DUT on PIXIT.G.ENDPOINT"
+      endpoint: Groups.Endpoint
       command: "AddGroup"
       arguments:
           values:
@@ -294,7 +118,8 @@
                 value: 0x0103
 
     - label:
-          "TH sends AddGroup command again but using group messaging (0x0103)"
+          "Step 6: TH sends AddGroup command again but using group messaging
+          (0x0103)"
       groupId: 0x0103
       command: "AddGroup"
       arguments:
@@ -325,8 +150,9 @@
               - name: "expectedValue"
                 value: "y"
 
-    - label: "TH sends ViewGroup command"
+    - label: "Step 7: TH sends ViewGroup command on Endpoint PIXIT.G.ENDPOINT "
       PICS: G.S.F00
+      endpoint: Groups.Endpoint
       command: "ViewGroup"
       arguments:
           values:
@@ -341,8 +167,9 @@
               - name: GroupName
                 value: "Test Group 0101"
 
-    - label: "TH sends ViewGroup command"
+    - label: "Step 8: TH sends ViewGroup command on Endpoint PIXIT.G.ENDPOINT "
       PICS: "!(G.S.F00)"
+      endpoint: Groups.Endpoint
       command: "ViewGroup"
       arguments:
           values:
@@ -357,68 +184,22 @@
               - name: GroupName
                 value: ""
 
-    - label: "TH removes the GroupKeySet"
+    - label: "Step 9: TH removes the GroupKeySet"
       cluster: "Group Key Management"
-      PICS: PICS_SDK_CI_ONLY
-      endpoint: 0
       command: "KeySetRemove"
       arguments:
           values:
               - name: GroupKeySetID
                 value: 0x01a3
 
-    - label: "TH removes the GroupKeySet"
-      verification: |
-          ./chip-tool groupkeymanagement key-set-remove "0x01a3" 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on TH(chip-tool)  Logs:
-
-          [1674199244.259870][1870:1872] CHIP:DMG: InvokeResponseMessage =
-          [1674199244.259895][1870:1872] CHIP:DMG: {
-          [1674199244.259918][1870:1872] CHIP:DMG:         suppressResponse = false,
-          [1674199244.259943][1870:1872] CHIP:DMG:         InvokeResponseIBs =
-          [1674199244.259975][1870:1872] CHIP:DMG:         [
-          [1674199244.259999][1870:1872] CHIP:DMG:                 InvokeResponseIB =
-          [1674199244.260035][1870:1872] CHIP:DMG:                 {
-          [1674199244.260061][1870:1872] CHIP:DMG:                         CommandStatusIB =
-          [1674199244.260093][1870:1872] CHIP:DMG:                         {
-          [1674199244.260120][1870:1872] CHIP:DMG:                                 CommandPathIB =
-          [1674199244.260154][1870:1872] CHIP:DMG:                                 {
-          [1674199244.260187][1870:1872] CHIP:DMG:                                         EndpointId = 0x0,
-          [1674199244.260222][1870:1872] CHIP:DMG:                                         ClusterId = 0x3f,
-          [1674199244.260257][1870:1872] CHIP:DMG:                                         CommandId = 0x3,
-          [1674199244.260305][1870:1872] CHIP:DMG:                                 },
-          [1674199244.260344][1870:1872] CHIP:DMG:
-          [1674199244.260373][1870:1872] CHIP:DMG:                                 StatusIB =
-          [1674199244.260406][1870:1872] CHIP:DMG:                                 {
-          [1674199244.260443][1870:1872] CHIP:DMG:                                         status = 0x00 (SUCCESS),
-          [1674199244.260476][1870:1872] CHIP:DMG:                                 },
-          [1674199244.260507][1870:1872] CHIP:DMG:
-          [1674199244.260536][1870:1872] CHIP:DMG:                         },
-          [1674199244.260569][1870:1872] CHIP:DMG:
-          [1674199244.260595][1870:1872] CHIP:DMG:                 },
-          [1674199244.260625][1870:1872] CHIP:DMG:
-          [1674199244.260650][1870:1872] CHIP:DMG:         ],
-          [1674199244.260680][1870:1872] CHIP:DMG:
-          [1674199244.260704][1870:1872] CHIP:DMG:         InteractionModelRevision = 1
-          [1674199244.260728][1870:1872] CHIP:DMG: },
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
-
-    - label: "TH cleans up groups using RemoveAllGroups command"
+    - label:
+          "Step 10: TH cleans up groups using RemoveAllGroups command to the DUT
+          on PIXIT.G.ENDPOINT"
+      endpoint: Groups.Endpoint
       command: "RemoveAllGroups"
 
-    - label: "TH removes ACL Operate privileges for Group 0x0103"
-      PICS: PICS_SDK_CI_ONLY
+    - label: "Step 11: TH removes ACL Operate privileges for Group 0x0103"
       cluster: "Access Control"
-      endpoint: 0
       command: "writeAttribute"
       attribute: "ACL"
       arguments:
@@ -432,60 +213,3 @@
                       Targets: null,
                   },
               ]
-
-    - label: "TH removes ACL Operate privileges for Group 0x0103"
-      verification: |
-          ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null }]' 1 0
-
-          Verify DUT sends SUCCESS(0x00) response on TH(chip-tool)  Logs:
-
-          [1674209548.549754][6888:6890] CHIP:DMG: WriteResponseMessage =
-          [1674209548.549758][6888:6890] CHIP:DMG: {
-          [1674209548.549760][6888:6890] CHIP:DMG:         AttributeStatusIBs =
-          [1674209548.549765][6888:6890] CHIP:DMG:         [
-          [1674209548.549768][6888:6890] CHIP:DMG:                 AttributeStatusIB =
-          [1674209548.549772][6888:6890] CHIP:DMG:                 {
-          [1674209548.549775][6888:6890] CHIP:DMG:                         AttributePathIB =
-          [1674209548.549779][6888:6890] CHIP:DMG:                         {
-          [1674209548.549782][6888:6890] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674209548.549786][6888:6890] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674209548.549789][6888:6890] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674209548.549792][6888:6890] CHIP:DMG:                         }
-          [1674209548.549797][6888:6890] CHIP:DMG:
-          [1674209548.549800][6888:6890] CHIP:DMG:                         StatusIB =
-          [1674209548.549804][6888:6890] CHIP:DMG:                         {
-          [1674209548.549807][6888:6890] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674209548.549810][6888:6890] CHIP:DMG:                         },
-          [1674209548.549813][6888:6890] CHIP:DMG:
-          [1674209548.549816][6888:6890] CHIP:DMG:                 },
-          [1674209548.549823][6888:6890] CHIP:DMG:
-          [1674209548.549825][6888:6890] CHIP:DMG:                 AttributeStatusIB =
-          [1674209548.549828][6888:6890] CHIP:DMG:                 {
-          [1674209548.549831][6888:6890] CHIP:DMG:                         AttributePathIB =
-          [1674209548.549836][6888:6890] CHIP:DMG:                         {
-          [1674209548.549839][6888:6890] CHIP:DMG:                                 Endpoint = 0x0,
-          [1674209548.549842][6888:6890] CHIP:DMG:                                 Cluster = 0x1f,
-          [1674209548.549845][6888:6890] CHIP:DMG:                                 Attribute = 0x0000_0000,
-          [1674209548.549849][6888:6890] CHIP:DMG:                                 ListIndex = Null,
-          [1674209548.549852][6888:6890] CHIP:DMG:                         }
-          [1674209548.549856][6888:6890] CHIP:DMG:
-          [1674209548.549859][6888:6890] CHIP:DMG:                         StatusIB =
-          [1674209548.549862][6888:6890] CHIP:DMG:                         {
-          [1674209548.549865][6888:6890] CHIP:DMG:                                 status = 0x00 (SUCCESS),
-          [1674209548.549868][6888:6890] CHIP:DMG:                         },
-          [1674209548.549871][6888:6890] CHIP:DMG:
-          [1674209548.549873][6888:6890] CHIP:DMG:                 },
-          [1674209548.549878][6888:6890] CHIP:DMG:
-          [1674209548.549881][6888:6890] CHIP:DMG:         ],
-          [1674209548.549887][6888:6890] CHIP:DMG:
-          [1674209548.549890][6888:6890] CHIP:DMG:         InteractionModelRevision = 1
-          [1674209548.549892][6888:6890] CHIP:DMG: }
-      cluster: "LogCommands"
-      command: "UserPrompt"
-      PICS: PICS_SKIP_SAMPLE_APP
-      arguments:
-          values:
-              - name: "message"
-                value: "Enter 'y' after success"
-              - name: "expectedValue"
-                value: "y"
diff --git a/src/app/tests/suites/ciTests.json b/src/app/tests/suites/ciTests.json
index 71a6406..33909c2 100644
--- a/src/app/tests/suites/ciTests.json
+++ b/src/app/tests/suites/ciTests.json
@@ -3,7 +3,6 @@
         "TestAccessControlCluster",
         "Test_TC_ACL_1_1",
         "Test_TC_ACL_2_1",
-        "Test_TC_ACL_2_2",
         "Test_TC_ACL_2_3",
         "Test_TC_ACL_2_4",
         "Test_TC_ACL_2_7",
@@ -127,8 +126,6 @@
         "Test_TC_APPLAUNCHER_3_5",
         "Test_TC_APPLAUNCHER_3_6",
         "Test_TC_APPLAUNCHER_3_7",
-        "Test_TC_APPLAUNCHER_3_8",
-        "Test_TC_APPLAUNCHER_3_9",
         "Test_TC_MEDIAINPUT_3_10",
         "Test_TC_MEDIAINPUT_3_11",
         "Test_TC_MEDIAINPUT_3_12",
@@ -175,7 +172,7 @@
     ],
     "PowerSourceConfiguration": ["Test_TC_PSCFG_1_1", "Test_TC_PSCFG_2_1"],
     "RelativeHumidityMeasurement": ["Test_TC_RH_1_1", "Test_TC_RH_2_1"],
-    "SecureChannel": ["Test_TC_SC_5_1", "Test_TC_SC_5_2"],
+    "SecureChannel": [],
     "Switch": ["Test_TC_SWTCH_1_1", "Test_TC_SWTCH_2_1"],
     "TemperatureMeasurement": ["Test_TC_TMP_1_1", "Test_TC_TMP_2_1"],
     "Thermostat": ["Test_TC_TSTAT_1_1", "Test_TC_TSTAT_2_1"],
diff --git a/src/app/tests/suites/manualTests.json b/src/app/tests/suites/manualTests.json
index 5fd2b51..1d420ee1 100644
--- a/src/app/tests/suites/manualTests.json
+++ b/src/app/tests/suites/manualTests.json
@@ -65,7 +65,6 @@
         "Test_TC_DA_1_6"
     ],
     "DeviceManagement": [
-        "Test_TC_BINFO_2_2",
         "Test_TC_BINFO_2_4",
         "Test_TC_OPCREDS_3_1",
         "Test_TC_OPCREDS_3_2",
diff --git a/zzz_generated/chip-tool/zap-generated/test/Commands.h b/zzz_generated/chip-tool/zap-generated/test/Commands.h
index feda117..1c16f25 100644
--- a/zzz_generated/chip-tool/zap-generated/test/Commands.h
+++ b/zzz_generated/chip-tool/zap-generated/test/Commands.h
@@ -38,7 +38,6 @@
         printf("TestAccessControlCluster\n");
         printf("Test_TC_ACL_1_1\n");
         printf("Test_TC_ACL_2_1\n");
-        printf("Test_TC_ACL_2_2\n");
         printf("Test_TC_ACL_2_3\n");
         printf("Test_TC_ACL_2_4\n");
         printf("Test_TC_ACL_2_7\n");
@@ -162,8 +161,6 @@
         printf("Test_TC_APPLAUNCHER_3_5\n");
         printf("Test_TC_APPLAUNCHER_3_6\n");
         printf("Test_TC_APPLAUNCHER_3_7\n");
-        printf("Test_TC_APPLAUNCHER_3_8\n");
-        printf("Test_TC_APPLAUNCHER_3_9\n");
         printf("Test_TC_MEDIAINPUT_3_10\n");
         printf("Test_TC_MEDIAINPUT_3_11\n");
         printf("Test_TC_MEDIAINPUT_3_12\n");
@@ -208,8 +205,6 @@
         printf("Test_TC_PSCFG_2_1\n");
         printf("Test_TC_RH_1_1\n");
         printf("Test_TC_RH_2_1\n");
-        printf("Test_TC_SC_5_1\n");
-        printf("Test_TC_SC_5_2\n");
         printf("Test_TC_SWTCH_1_1\n");
         printf("Test_TC_SWTCH_2_1\n");
         printf("Test_TC_TMP_1_1\n");
@@ -408,7 +403,6 @@
         printf("Test_TC_DA_1_4\n");
         printf("Test_TC_DA_1_5\n");
         printf("Test_TC_DA_1_6\n");
-        printf("Test_TC_BINFO_2_2\n");
         printf("Test_TC_BINFO_2_4\n");
         printf("Test_TC_OPCREDS_3_1\n");
         printf("Test_TC_OPCREDS_3_2\n");
@@ -2514,102 +2508,6 @@
     }
 };
 
-class Test_TC_ACL_2_2Suite : public TestCommand
-{
-public:
-    Test_TC_ACL_2_2Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_ACL_2_2", 3, credsIssuerConfig)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-
-    ~Test_TC_ACL_2_2Suite() {}
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mTimeout;
-
-    chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
-    //
-    // Tests methods
-    //
-
-    void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
-    {
-        bool shouldContinue = false;
-
-        switch (mTestIndex - 1)
-        {
-        case 0:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 1:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::DataModel::DecodableList<chip::ClusterId> value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckConstraintType("value", "list", "list"));
-                VerifyOrReturn(CheckConstraintContains("value", value, 31UL));
-            }
-            break;
-        case 2:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        default:
-            LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
-        }
-
-        if (shouldContinue)
-        {
-            ContinueOnChipMainThread(CHIP_NO_ERROR);
-        }
-    }
-
-    CHIP_ERROR DoTestStep(uint16_t testIndex) override
-    {
-        using namespace chip::app::Clusters;
-        switch (testIndex)
-        {
-        case 0: {
-            LogStep(0, "Wait for the commissioned device to be retrieved");
-            ListFreer listFreer;
-            chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
-            value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
-            return WaitForCommissionee(kIdentityAlpha, value);
-        }
-        case 1: {
-            LogStep(1, "TH1 reads DUT Descriptor cluster ServerList attribute from Endpoint 0");
-            return ReadAttribute(kIdentityAlpha, GetEndpoint(0), Descriptor::Id, Descriptor::Attributes::ServerList::Id, true,
-                                 chip::NullOptional);
-        }
-        case 2: {
-            LogStep(2, "TH1 reads DUT Descriptor cluster ServerList attribute from every Endpoint except 0");
-            VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message =
-                chip::Span<const char>("Factory Reset the DUT and enter 'y' after successgarbage: not in length on purpose", 49);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        }
-        return CHIP_NO_ERROR;
-    }
-};
-
 class Test_TC_ACL_2_3Suite : public TestCommand
 {
 public:
@@ -47522,225 +47420,6 @@
     }
 };
 
-class Test_TC_APPLAUNCHER_3_8Suite : public TestCommand
-{
-public:
-    Test_TC_APPLAUNCHER_3_8Suite(CredentialIssuerCommands * credsIssuerConfig) :
-        TestCommand("Test_TC_APPLAUNCHER_3_8", 3, credsIssuerConfig)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("catalogVendorId", 0, UINT16_MAX, &mCatalogVendorId);
-        AddArgument("applicationId", &mApplicationId);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-
-    ~Test_TC_APPLAUNCHER_3_8Suite() {}
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mCatalogVendorId;
-    chip::Optional<chip::CharSpan> mApplicationId;
-    chip::Optional<uint16_t> mTimeout;
-
-    chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
-    //
-    // Tests methods
-    //
-
-    void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
-    {
-        bool shouldContinue = false;
-
-        switch (mTestIndex - 1)
-        {
-        case 0:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 1:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::ApplicationLauncher::Commands::LauncherResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckValue("status", value.status, 0U));
-            }
-            break;
-        case 2:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        default:
-            LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
-        }
-
-        if (shouldContinue)
-        {
-            ContinueOnChipMainThread(CHIP_NO_ERROR);
-        }
-    }
-
-    CHIP_ERROR DoTestStep(uint16_t testIndex) override
-    {
-        using namespace chip::app::Clusters;
-        switch (testIndex)
-        {
-        case 0: {
-            LogStep(0, "Wait for the commissioned device to be retrieved");
-            ListFreer listFreer;
-            chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
-            value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
-            return WaitForCommissionee(kIdentityAlpha, value);
-        }
-        case 1: {
-            LogStep(1, "Stop an app with the provided application ID");
-            VerifyOrDo(!ShouldSkip("APPLAUNCHER.S.C01.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::ApplicationLauncher::Commands::StopApp::Type value;
-            value.application.Emplace();
-
-            value.application.Value().catalogVendorID = mCatalogVendorId.HasValue() ? mCatalogVendorId.Value() : 123U;
-            value.application.Value().applicationID =
-                mApplicationId.HasValue() ? mApplicationId.Value() : chip::Span<const char>("exampleid", 9);
-
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), ApplicationLauncher::Id, ApplicationLauncher::Commands::StopApp::Id,
-                               value, chip::NullOptional
-
-            );
-        }
-        case 2: {
-            LogStep(2, "Reads the Status attribute");
-            VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Please enter 'y' after successgarbage: not in length on purpose", 30);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        }
-        return CHIP_NO_ERROR;
-    }
-};
-
-class Test_TC_APPLAUNCHER_3_9Suite : public TestCommand
-{
-public:
-    Test_TC_APPLAUNCHER_3_9Suite(CredentialIssuerCommands * credsIssuerConfig) :
-        TestCommand("Test_TC_APPLAUNCHER_3_9", 3, credsIssuerConfig)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("catalogVendorId", 0, UINT16_MAX, &mCatalogVendorId);
-        AddArgument("applicationId", &mApplicationId);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-
-    ~Test_TC_APPLAUNCHER_3_9Suite() {}
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mCatalogVendorId;
-    chip::Optional<chip::CharSpan> mApplicationId;
-    chip::Optional<uint16_t> mTimeout;
-
-    chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
-    //
-    // Tests methods
-    //
-
-    void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
-    {
-        bool shouldContinue = false;
-
-        switch (mTestIndex - 1)
-        {
-        case 0:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 1:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::ApplicationLauncher::Commands::LauncherResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-            }
-            break;
-        case 2:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        default:
-            LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
-        }
-
-        if (shouldContinue)
-        {
-            ContinueOnChipMainThread(CHIP_NO_ERROR);
-        }
-    }
-
-    CHIP_ERROR DoTestStep(uint16_t testIndex) override
-    {
-        using namespace chip::app::Clusters;
-        switch (testIndex)
-        {
-        case 0: {
-            LogStep(0, "Wait for the commissioned device to be retrieved");
-            ListFreer listFreer;
-            chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
-            value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
-            return WaitForCommissionee(kIdentityAlpha, value);
-        }
-        case 1: {
-            LogStep(1, "TH sends HideApp command to DUT");
-            VerifyOrDo(!ShouldSkip("APPLAUNCHER.S.C02.Rsp"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::ApplicationLauncher::Commands::HideApp::Type value;
-            value.application.Emplace();
-
-            value.application.Value().catalogVendorID = mCatalogVendorId.HasValue() ? mCatalogVendorId.Value() : 123U;
-            value.application.Value().applicationID =
-                mApplicationId.HasValue() ? mApplicationId.Value() : chip::Span<const char>("exampleid", 9);
-
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), ApplicationLauncher::Id, ApplicationLauncher::Commands::HideApp::Id,
-                               value, chip::NullOptional
-
-            );
-        }
-        case 2: {
-            LogStep(2, "Reads the Status attribute");
-            VerifyOrDo(!ShouldSkip("PICS_USER_PROMPT"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        }
-        return CHIP_NO_ERROR;
-    }
-};
-
 class Test_TC_MEDIAINPUT_3_10Suite : public TestCommand
 {
 public:
@@ -58136,1145 +57815,6 @@
     }
 };
 
-class Test_TC_SC_5_1Suite : public TestCommand
-{
-public:
-    Test_TC_SC_5_1Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SC_5_1", 31, credsIssuerConfig)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-
-    ~Test_TC_SC_5_1Suite() {}
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mTimeout;
-
-    chip::NodeId commissionerNodeId;
-
-    chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
-    //
-    // Tests methods
-    //
-
-    void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
-    {
-        bool shouldContinue = false;
-
-        switch (mTestIndex - 1)
-        {
-        case 0:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 1:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::CommissionerCommands::Commands::GetCommissionerNodeIdResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                commissionerNodeId = value.nodeId;
-            }
-            shouldContinue = true;
-            break;
-        case 2:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 3:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 4:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 5:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 6:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 7:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 8:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 9:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 10:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 11:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::Groups::Commands::AddGroupResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-            }
-            break;
-        case 12:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::Groups::Commands::ViewGroupResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckValue("status", value.status, 0U));
-                VerifyOrReturn(CheckValue("groupID", value.groupID, 259U));
-                VerifyOrReturn(CheckValueAsString("groupName", value.groupName, chip::CharSpan("Test Group", 10)));
-            }
-            break;
-        case 13:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::Groups::Commands::ViewGroupResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckValue("status", value.status, 0U));
-                VerifyOrReturn(CheckValue("groupID", value.groupID, 259U));
-                VerifyOrReturn(CheckValueAsString("groupName", value.groupName, chip::CharSpan("", 0)));
-            }
-            break;
-        case 14:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::GroupKeyManagement::Commands::KeySetReadResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckValue("groupKeySet.groupKeySetID", value.groupKeySet.groupKeySetID, 419U));
-                VerifyOrReturn(CheckValue("groupKeySet.groupKeySecurityPolicy", value.groupKeySet.groupKeySecurityPolicy, 0U));
-                VerifyOrReturn(CheckValueNull("groupKeySet.epochKey0", value.groupKeySet.epochKey0));
-                VerifyOrReturn(CheckValueNonNull("groupKeySet.epochStartTime0", value.groupKeySet.epochStartTime0));
-                VerifyOrReturn(
-                    CheckValue("groupKeySet.epochStartTime0.Value()", value.groupKeySet.epochStartTime0.Value(), 2220000ULL));
-                VerifyOrReturn(CheckValueNull("groupKeySet.epochKey1", value.groupKeySet.epochKey1));
-                VerifyOrReturn(CheckValueNonNull("groupKeySet.epochStartTime1", value.groupKeySet.epochStartTime1));
-                VerifyOrReturn(
-                    CheckValue("groupKeySet.epochStartTime1.Value()", value.groupKeySet.epochStartTime1.Value(), 2220001ULL));
-                VerifyOrReturn(CheckValueNull("groupKeySet.epochKey2", value.groupKeySet.epochKey2));
-                VerifyOrReturn(CheckValueNonNull("groupKeySet.epochStartTime2", value.groupKeySet.epochStartTime2));
-                VerifyOrReturn(
-                    CheckValue("groupKeySet.epochStartTime2.Value()", value.groupKeySet.epochStartTime2.Value(), 2220002ULL));
-            }
-            break;
-        case 15:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 16:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::DataModel::DecodableList<
-                    chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::DecodableType>
-                    value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                {
-                    auto iter_0 = value.begin();
-                    VerifyOrReturn(CheckNextListItemDecodes<decltype(value)>("groupKeyMap", iter_0, 0));
-                    VerifyOrReturn(CheckValue("groupKeyMap[0].groupId", iter_0.GetValue().groupId, 259U));
-                    VerifyOrReturn(CheckValue("groupKeyMap[0].groupKeySetID", iter_0.GetValue().groupKeySetID, 419U));
-                    VerifyOrReturn(CheckValue("groupKeyMap[0].fabricIndex", iter_0.GetValue().fabricIndex, 1U));
-                    VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("groupKeyMap", iter_0, 1));
-                }
-            }
-            break;
-        case 17:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 18:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::DataModel::DecodableList<
-                    chip::app::Clusters::GroupKeyManagement::Structs::GroupInfoMapStruct::DecodableType>
-                    value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                {
-                    auto iter_0 = value.begin();
-                    VerifyOrReturn(CheckNextListItemDecodes<decltype(value)>("groupTable", iter_0, 0));
-                    VerifyOrReturn(CheckValue("groupTable[0].groupId", iter_0.GetValue().groupId, 259U));
-                    {
-                        auto iter_2 = iter_0.GetValue().endpoints.begin();
-                        VerifyOrReturn(
-                            CheckNextListItemDecodes<decltype(iter_0.GetValue().endpoints)>("groupTable[0].endpoints", iter_2, 0));
-                        VerifyOrReturn(CheckValue("groupTable[0].endpoints[0]", iter_2.GetValue(),
-                                                  mEndpoint.HasValue() ? mEndpoint.Value() : 1U));
-                        VerifyOrReturn(
-                            CheckNoMoreListItems<decltype(iter_0.GetValue().endpoints)>("groupTable[0].endpoints", iter_2, 1));
-                    }
-                    VerifyOrReturn(CheckValuePresent("groupTable[0].groupName", iter_0.GetValue().groupName));
-                    VerifyOrReturn(CheckValueAsString("groupTable[0].groupName.Value()", iter_0.GetValue().groupName.Value(),
-                                                      chip::CharSpan("Test Group", 10)));
-                    VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("groupTable", iter_0, 1));
-                }
-            }
-            break;
-        case 19:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 20:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::DataModel::DecodableList<
-                    chip::app::Clusters::GroupKeyManagement::Structs::GroupInfoMapStruct::DecodableType>
-                    value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                {
-                    auto iter_0 = value.begin();
-                    VerifyOrReturn(CheckNextListItemDecodes<decltype(value)>("groupTable", iter_0, 0));
-                    VerifyOrReturn(CheckValue("groupTable[0].groupId", iter_0.GetValue().groupId, 259U));
-                    {
-                        auto iter_2 = iter_0.GetValue().endpoints.begin();
-                        VerifyOrReturn(
-                            CheckNextListItemDecodes<decltype(iter_0.GetValue().endpoints)>("groupTable[0].endpoints", iter_2, 0));
-                        VerifyOrReturn(CheckValue("groupTable[0].endpoints[0]", iter_2.GetValue(),
-                                                  mEndpoint.HasValue() ? mEndpoint.Value() : 1U));
-                        VerifyOrReturn(
-                            CheckNoMoreListItems<decltype(iter_0.GetValue().endpoints)>("groupTable[0].endpoints", iter_2, 1));
-                    }
-                    VerifyOrReturn(CheckValuePresent("groupTable[0].groupName", iter_0.GetValue().groupName));
-                    VerifyOrReturn(CheckValueAsString("groupTable[0].groupName.Value()", iter_0.GetValue().groupName.Value(),
-                                                      chip::CharSpan("", 0)));
-                    VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("groupTable", iter_0, 1));
-                }
-            }
-            break;
-        case 21:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 22:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 23:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 24:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::DataModel::DecodableList<
-                    chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::DecodableType>
-                    value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                {
-                    auto iter_0 = value.begin();
-                    VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("groupKeyMap", iter_0, 0));
-                }
-            }
-            break;
-        case 25:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 26:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 27:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::DataModel::DecodableList<
-                    chip::app::Clusters::GroupKeyManagement::Structs::GroupInfoMapStruct::DecodableType>
-                    value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                {
-                    auto iter_0 = value.begin();
-                    VerifyOrReturn(CheckNoMoreListItems<decltype(value)>("groupTable", iter_0, 0));
-                }
-            }
-            break;
-        case 28:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 29:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 30:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        default:
-            LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
-        }
-
-        if (shouldContinue)
-        {
-            ContinueOnChipMainThread(CHIP_NO_ERROR);
-        }
-    }
-
-    CHIP_ERROR DoTestStep(uint16_t testIndex) override
-    {
-        using namespace chip::app::Clusters;
-        switch (testIndex)
-        {
-        case 0: {
-            LogStep(0, "Wait for the commissioned device to be retrieved");
-            ListFreer listFreer;
-            chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
-            value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
-            return WaitForCommissionee(kIdentityAlpha, value);
-        }
-        case 1: {
-            LogStep(1, "Read the commissioner node ID");
-            ListFreer listFreer;
-            chip::app::Clusters::CommissionerCommands::Commands::GetCommissionerNodeId::Type value;
-            return GetCommissionerNodeId(kIdentityAlpha, value);
-        }
-        case 2: {
-            LogStep(2, "TH adds ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type> value;
-
-            {
-                auto * listHolder_0 =
-                    new ListHolder<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(2);
-                listFreer.add(listHolder_0);
-
-                listHolder_0->mList[0].privilege =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryPrivilegeEnum>(5);
-                listHolder_0->mList[0].authMode =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryAuthModeEnum>(2);
-                listHolder_0->mList[0].subjects.SetNonNull();
-
-                {
-                    auto * listHolder_3 = new ListHolder<uint64_t>(1);
-                    listFreer.add(listHolder_3);
-                    listHolder_3->mList[0]                  = commissionerNodeId;
-                    listHolder_0->mList[0].subjects.Value() = chip::app::DataModel::List<uint64_t>(listHolder_3->mList, 1);
-                }
-                listHolder_0->mList[0].targets.SetNull();
-                listHolder_0->mList[0].fabricIndex = 1U;
-
-                listHolder_0->mList[1].privilege =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryPrivilegeEnum>(3);
-                listHolder_0->mList[1].authMode =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryAuthModeEnum>(3);
-                listHolder_0->mList[1].subjects.SetNonNull();
-
-                {
-                    auto * listHolder_3 = new ListHolder<uint64_t>(1);
-                    listFreer.add(listHolder_3);
-                    listHolder_3->mList[0]                  = 259ULL;
-                    listHolder_0->mList[1].subjects.Value() = chip::app::DataModel::List<uint64_t>(listHolder_3->mList, 1);
-                }
-                listHolder_0->mList[1].targets.SetNull();
-                listHolder_0->mList[1].fabricIndex = 1U;
-
-                value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(
-                    listHolder_0->mList, 2);
-            }
-            return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Acl::Id, value,
-                                  chip::NullOptional, chip::NullOptional);
-        }
-        case 3: {
-            LogStep(3, "TH adds ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 4: {
-            LogStep(4, "TH sends KeySetWrite command with incorrect key");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::GroupKeyManagement::Commands::KeySetWrite::Type value;
-
-            value.groupKeySet.groupKeySetID = 419U;
-            value.groupKeySet.groupKeySecurityPolicy =
-                static_cast<chip::app::Clusters::GroupKeyManagement::GroupKeySecurityPolicyEnum>(0);
-            value.groupKeySet.epochKey0.SetNonNull();
-            value.groupKeySet.epochKey0.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01garbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime0.SetNonNull();
-            value.groupKeySet.epochStartTime0.Value() = 111ULL;
-            value.groupKeySet.epochKey1.SetNonNull();
-            value.groupKeySet.epochKey1.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02garbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime1.SetNonNull();
-            value.groupKeySet.epochStartTime1.Value() = 222ULL;
-            value.groupKeySet.epochKey2.SetNonNull();
-            value.groupKeySet.epochKey2.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03garbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime2.SetNonNull();
-            value.groupKeySet.epochStartTime2.Value() = 333ULL;
-
-            return SendCommand(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                               GroupKeyManagement::Commands::KeySetWrite::Id, value, chip::NullOptional
-
-            );
-        }
-        case 5: {
-            LogStep(5, "TH sends KeySetWrite command with incorrect key");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 6: {
-            LogStep(6, "TH sends KeySetWrite command with TH key");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::GroupKeyManagement::Commands::KeySetWrite::Type value;
-
-            value.groupKeySet.groupKeySetID = 419U;
-            value.groupKeySet.groupKeySecurityPolicy =
-                static_cast<chip::app::Clusters::GroupKeyManagement::GroupKeySecurityPolicyEnum>(0);
-            value.groupKeySet.epochKey0.SetNonNull();
-            value.groupKeySet.epochKey0.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdfgarbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime0.SetNonNull();
-            value.groupKeySet.epochStartTime0.Value() = 2220000ULL;
-            value.groupKeySet.epochKey1.SetNonNull();
-            value.groupKeySet.epochKey1.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\xd1\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdfgarbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime1.SetNonNull();
-            value.groupKeySet.epochStartTime1.Value() = 2220001ULL;
-            value.groupKeySet.epochKey2.SetNonNull();
-            value.groupKeySet.epochKey2.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\xd2\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdfgarbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime2.SetNonNull();
-            value.groupKeySet.epochStartTime2.Value() = 2220002ULL;
-
-            return SendCommand(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                               GroupKeyManagement::Commands::KeySetWrite::Id, value, chip::NullOptional
-
-            );
-        }
-        case 7: {
-            LogStep(7, "TH sends KeySetWrite command with TH key");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 8: {
-            LogStep(8, "TH binds GroupId to GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::DataModel::List<const chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::Type> value;
-
-            {
-                auto * listHolder_0 = new ListHolder<chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::Type>(1);
-                listFreer.add(listHolder_0);
-
-                listHolder_0->mList[0].groupId       = 259U;
-                listHolder_0->mList[0].groupKeySetID = 419U;
-                listHolder_0->mList[0].fabricIndex   = 1U;
-
-                value = chip::app::DataModel::List<chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::Type>(
-                    listHolder_0->mList, 1);
-            }
-            return WriteAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                                  GroupKeyManagement::Attributes::GroupKeyMap::Id, value, chip::NullOptional, chip::NullOptional);
-        }
-        case 9: {
-            LogStep(9, "TH binds GroupId to GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 10: {
-            LogStep(10, "TH sends RemoveAllGroups command");
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::RemoveAllGroups::Type value;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::RemoveAllGroups::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 11: {
-            LogStep(11, "TH sends AddGroup command");
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::AddGroup::Type value;
-            value.groupID   = 259U;
-            value.groupName = chip::Span<const char>("Test Groupgarbage: not in length on purpose", 10);
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::AddGroup::Id, value, chip::NullOptional
-
-            );
-        }
-        case 12: {
-            LogStep(12, "TH sends ViewGroup command");
-            VerifyOrDo(!ShouldSkip("G.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::ViewGroup::Type value;
-            value.groupID = 259U;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::ViewGroup::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 13: {
-            LogStep(13, "TH sends ViewGroup command");
-            VerifyOrDo(!ShouldSkip("!(G.S.F00)"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::ViewGroup::Type value;
-            value.groupID = 259U;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::ViewGroup::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 14: {
-            LogStep(14, "TH sends KeySetRead");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::GroupKeyManagement::Commands::KeySetRead::Type value;
-            value.groupKeySetID = 419U;
-            return SendCommand(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id, GroupKeyManagement::Commands::KeySetRead::Id,
-                               value, chip::NullOptional
-
-            );
-        }
-        case 15: {
-            LogStep(15, "TH sends KeySetRead");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 16: {
-            LogStep(16, "TH reads GroupKeyMap Attribute from the GroupKeyManagement cluster");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                                 GroupKeyManagement::Attributes::GroupKeyMap::Id, true, chip::NullOptional);
-        }
-        case 17: {
-            LogStep(17, "TH reads GroupKeyMap Attribute from the GroupKeyManagement cluster");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 18: {
-            LogStep(18, "TH reads GroupTable attribute");
-            VerifyOrDo(!ShouldSkip("G.S.F00 && PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                                 GroupKeyManagement::Attributes::GroupTable::Id, true, chip::NullOptional);
-        }
-        case 19: {
-            LogStep(19, "TH reads GroupTable attribute");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP && G.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 20: {
-            LogStep(20, "TH reads GroupTable attribute");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY && !G.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                                 GroupKeyManagement::Attributes::GroupTable::Id, true, chip::NullOptional);
-        }
-        case 21: {
-            LogStep(21, "TH reads GroupTable attribute");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP && !G.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 22: {
-            LogStep(22, "TH removes the GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::GroupKeyManagement::Commands::KeySetRemove::Type value;
-            value.groupKeySetID = 419U;
-            return SendCommand(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                               GroupKeyManagement::Commands::KeySetRemove::Id, value, chip::NullOptional
-
-            );
-        }
-        case 23: {
-            LogStep(23, "TH removes the GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 24: {
-            LogStep(24, "TH verifies the corresponding GroupKeyMap entry has been removed");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                                 GroupKeyManagement::Attributes::GroupKeyMap::Id, true, chip::NullOptional);
-        }
-        case 25: {
-            LogStep(25, "TH verifies the corresponding GroupKeyMap entry has been removed");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 26: {
-            LogStep(26, "TH cleans up groups using RemoveAllGroups command");
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::RemoveAllGroups::Type value;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::RemoveAllGroups::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 27: {
-            LogStep(27, "TH verifies the group has been removed in the GroupTable");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            return ReadAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                                 GroupKeyManagement::Attributes::GroupTable::Id, true, chip::NullOptional);
-        }
-        case 28: {
-            LogStep(28, "TH verifies the group has been removed in the GroupTable");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 29: {
-            LogStep(29, "TH removes ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type> value;
-
-            {
-                auto * listHolder_0 =
-                    new ListHolder<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(1);
-                listFreer.add(listHolder_0);
-
-                listHolder_0->mList[0].privilege =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryPrivilegeEnum>(5);
-                listHolder_0->mList[0].authMode =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryAuthModeEnum>(2);
-                listHolder_0->mList[0].subjects.SetNonNull();
-
-                {
-                    auto * listHolder_3 = new ListHolder<uint64_t>(1);
-                    listFreer.add(listHolder_3);
-                    listHolder_3->mList[0]                  = commissionerNodeId;
-                    listHolder_0->mList[0].subjects.Value() = chip::app::DataModel::List<uint64_t>(listHolder_3->mList, 1);
-                }
-                listHolder_0->mList[0].targets.SetNull();
-                listHolder_0->mList[0].fabricIndex = 1U;
-
-                value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(
-                    listHolder_0->mList, 1);
-            }
-            return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Acl::Id, value,
-                                  chip::NullOptional, chip::NullOptional);
-        }
-        case 30: {
-            LogStep(30, "TH removes ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        }
-        return CHIP_NO_ERROR;
-    }
-};
-
-class Test_TC_SC_5_2Suite : public TestCommand
-{
-public:
-    Test_TC_SC_5_2Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_SC_5_2", 20, credsIssuerConfig)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-
-    ~Test_TC_SC_5_2Suite() {}
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mTimeout;
-
-    chip::NodeId commissionerNodeId;
-
-    chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
-    //
-    // Tests methods
-    //
-
-    void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
-    {
-        bool shouldContinue = false;
-
-        switch (mTestIndex - 1)
-        {
-        case 0:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 1:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::CommissionerCommands::Commands::GetCommissionerNodeIdResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                commissionerNodeId = value.nodeId;
-            }
-            shouldContinue = true;
-            break;
-        case 2:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 3:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 4:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 5:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 6:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 7:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 8:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 9:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::Groups::Commands::AddGroupResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckValue("status", value.status, 0U));
-                VerifyOrReturn(CheckValue("groupID", value.groupID, 259U));
-            }
-            break;
-        case 10:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::Groups::Commands::AddGroupResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-            }
-            break;
-        case 11:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 12:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 13:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::Groups::Commands::ViewGroupResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckValue("status", value.status, 0U));
-                VerifyOrReturn(CheckValue("groupID", value.groupID, 257U));
-                VerifyOrReturn(CheckValueAsString("groupName", value.groupName, chip::CharSpan("Test Group 0101", 15)));
-            }
-            break;
-        case 14:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            {
-                chip::app::Clusters::Groups::Commands::ViewGroupResponse::DecodableType value;
-                VerifyOrReturn(CheckDecodeValue(chip::app::DataModel::Decode(*data, value)));
-                VerifyOrReturn(CheckValue("status", value.status, 0U));
-                VerifyOrReturn(CheckValue("groupID", value.groupID, 257U));
-                VerifyOrReturn(CheckValueAsString("groupName", value.groupName, chip::CharSpan("", 0)));
-            }
-            break;
-        case 15:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 16:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        case 17:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 18:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 19:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            shouldContinue = true;
-            break;
-        default:
-            LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
-        }
-
-        if (shouldContinue)
-        {
-            ContinueOnChipMainThread(CHIP_NO_ERROR);
-        }
-    }
-
-    CHIP_ERROR DoTestStep(uint16_t testIndex) override
-    {
-        using namespace chip::app::Clusters;
-        switch (testIndex)
-        {
-        case 0: {
-            LogStep(0, "Wait for the commissioned device to be retrieved");
-            ListFreer listFreer;
-            chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
-            value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
-            return WaitForCommissionee(kIdentityAlpha, value);
-        }
-        case 1: {
-            LogStep(1, "Read the commissioner node ID");
-            ListFreer listFreer;
-            chip::app::Clusters::CommissionerCommands::Commands::GetCommissionerNodeId::Type value;
-            return GetCommissionerNodeId(kIdentityAlpha, value);
-        }
-        case 2: {
-            LogStep(2, "TH adds ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type> value;
-
-            {
-                auto * listHolder_0 =
-                    new ListHolder<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(2);
-                listFreer.add(listHolder_0);
-
-                listHolder_0->mList[0].privilege =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryPrivilegeEnum>(5);
-                listHolder_0->mList[0].authMode =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryAuthModeEnum>(2);
-                listHolder_0->mList[0].subjects.SetNonNull();
-
-                {
-                    auto * listHolder_3 = new ListHolder<uint64_t>(1);
-                    listFreer.add(listHolder_3);
-                    listHolder_3->mList[0]                  = commissionerNodeId;
-                    listHolder_0->mList[0].subjects.Value() = chip::app::DataModel::List<uint64_t>(listHolder_3->mList, 1);
-                }
-                listHolder_0->mList[0].targets.SetNull();
-                listHolder_0->mList[0].fabricIndex = 1U;
-
-                listHolder_0->mList[1].privilege =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryPrivilegeEnum>(4);
-                listHolder_0->mList[1].authMode =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryAuthModeEnum>(3);
-                listHolder_0->mList[1].subjects.SetNonNull();
-
-                {
-                    auto * listHolder_3 = new ListHolder<uint64_t>(1);
-                    listFreer.add(listHolder_3);
-                    listHolder_3->mList[0]                  = 259ULL;
-                    listHolder_0->mList[1].subjects.Value() = chip::app::DataModel::List<uint64_t>(listHolder_3->mList, 1);
-                }
-                listHolder_0->mList[1].targets.SetNull();
-                listHolder_0->mList[1].fabricIndex = 1U;
-
-                value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(
-                    listHolder_0->mList, 2);
-            }
-            return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Acl::Id, value,
-                                  chip::NullOptional, chip::NullOptional);
-        }
-        case 3: {
-            LogStep(3, "TH adds ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 4: {
-            LogStep(4, "TH sends KeySetWrite command with TH key");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::GroupKeyManagement::Commands::KeySetWrite::Type value;
-
-            value.groupKeySet.groupKeySetID = 419U;
-            value.groupKeySet.groupKeySecurityPolicy =
-                static_cast<chip::app::Clusters::GroupKeyManagement::GroupKeySecurityPolicyEnum>(0);
-            value.groupKeySet.epochKey0.SetNonNull();
-            value.groupKeySet.epochKey0.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdfgarbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime0.SetNonNull();
-            value.groupKeySet.epochStartTime0.Value() = 2220000ULL;
-            value.groupKeySet.epochKey1.SetNonNull();
-            value.groupKeySet.epochKey1.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\xd1\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdfgarbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime1.SetNonNull();
-            value.groupKeySet.epochStartTime1.Value() = 2220001ULL;
-            value.groupKeySet.epochKey2.SetNonNull();
-            value.groupKeySet.epochKey2.Value() = chip::ByteSpan(
-                chip::Uint8::from_const_char(
-                    "\xd2\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdfgarbage: not in length on purpose"),
-                16);
-            value.groupKeySet.epochStartTime2.SetNonNull();
-            value.groupKeySet.epochStartTime2.Value() = 2220002ULL;
-
-            return SendCommand(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                               GroupKeyManagement::Commands::KeySetWrite::Id, value, chip::NullOptional
-
-            );
-        }
-        case 5: {
-            LogStep(5, "TH sends KeySetWrite command with TH key");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 6: {
-            LogStep(6, "TH binds GroupId to GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::DataModel::List<const chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::Type> value;
-
-            {
-                auto * listHolder_0 = new ListHolder<chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::Type>(2);
-                listFreer.add(listHolder_0);
-
-                listHolder_0->mList[0].groupId       = 257U;
-                listHolder_0->mList[0].groupKeySetID = 419U;
-                listHolder_0->mList[0].fabricIndex   = 1U;
-
-                listHolder_0->mList[1].groupId       = 259U;
-                listHolder_0->mList[1].groupKeySetID = 419U;
-                listHolder_0->mList[1].fabricIndex   = 1U;
-
-                value = chip::app::DataModel::List<chip::app::Clusters::GroupKeyManagement::Structs::GroupKeyMapStruct::Type>(
-                    listHolder_0->mList, 2);
-            }
-            return WriteAttribute(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                                  GroupKeyManagement::Attributes::GroupKeyMap::Id, value, chip::NullOptional, chip::NullOptional);
-        }
-        case 7: {
-            LogStep(7, "TH binds GroupId to GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 8: {
-            LogStep(8, "TH sends RemoveAllGroups command");
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::RemoveAllGroups::Type value;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::RemoveAllGroups::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 9: {
-            LogStep(9, "TH sends AddGroup command");
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::AddGroup::Type value;
-            value.groupID   = 259U;
-            value.groupName = chip::Span<const char>("Test Group 0103garbage: not in length on purpose", 15);
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::AddGroup::Id, value, chip::NullOptional
-
-            );
-        }
-        case 10: {
-            LogStep(10, "TH sends AddGroup command again but using group messaging (0x0103)");
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::AddGroup::Type value;
-            value.groupID   = 257U;
-            value.groupName = chip::Span<const char>("Test Group 0101garbage: not in length on purpose", 15);
-            return SendGroupCommand(kIdentityAlpha, 259, Groups::Id, Groups::Commands::AddGroup::Id, value);
-        }
-        case 11: {
-            LogStep(11, "Wait for AddGroup");
-            ListFreer listFreer;
-            chip::app::Clusters::DelayCommands::Commands::WaitForMs::Type value;
-            value.ms = 1000UL;
-            return WaitForMs(kIdentityAlpha, value);
-        }
-        case 12: {
-            LogStep(12, "Verify there is no response from DUT");
-            VerifyOrDo(!ShouldSkip("!PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message =
-                chip::Span<const char>("Verify that there is no response from DUTgarbage: not in length on purpose", 41);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 13: {
-            LogStep(13, "TH sends ViewGroup command");
-            VerifyOrDo(!ShouldSkip("G.S.F00"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::ViewGroup::Type value;
-            value.groupID = 257U;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::ViewGroup::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 14: {
-            LogStep(14, "TH sends ViewGroup command");
-            VerifyOrDo(!ShouldSkip("!(G.S.F00)"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::ViewGroup::Type value;
-            value.groupID = 257U;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::ViewGroup::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 15: {
-            LogStep(15, "TH removes the GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::GroupKeyManagement::Commands::KeySetRemove::Type value;
-            value.groupKeySetID = 419U;
-            return SendCommand(kIdentityAlpha, GetEndpoint(0), GroupKeyManagement::Id,
-                               GroupKeyManagement::Commands::KeySetRemove::Id, value, chip::NullOptional
-
-            );
-        }
-        case 16: {
-            LogStep(16, "TH removes the GroupKeySet");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        case 17: {
-            LogStep(17, "TH cleans up groups using RemoveAllGroups command");
-            ListFreer listFreer;
-            chip::app::Clusters::Groups::Commands::RemoveAllGroups::Type value;
-            return SendCommand(kIdentityAlpha, GetEndpoint(1), Groups::Id, Groups::Commands::RemoveAllGroups::Id, value,
-                               chip::NullOptional
-
-            );
-        }
-        case 18: {
-            LogStep(18, "TH removes ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SDK_CI_ONLY"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::DataModel::List<const chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type> value;
-
-            {
-                auto * listHolder_0 =
-                    new ListHolder<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(1);
-                listFreer.add(listHolder_0);
-
-                listHolder_0->mList[0].privilege =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryPrivilegeEnum>(5);
-                listHolder_0->mList[0].authMode =
-                    static_cast<chip::app::Clusters::AccessControl::AccessControlEntryAuthModeEnum>(2);
-                listHolder_0->mList[0].subjects.SetNonNull();
-
-                {
-                    auto * listHolder_3 = new ListHolder<uint64_t>(1);
-                    listFreer.add(listHolder_3);
-                    listHolder_3->mList[0]                  = commissionerNodeId;
-                    listHolder_0->mList[0].subjects.Value() = chip::app::DataModel::List<uint64_t>(listHolder_3->mList, 1);
-                }
-                listHolder_0->mList[0].targets.SetNull();
-                listHolder_0->mList[0].fabricIndex = 1U;
-
-                value = chip::app::DataModel::List<chip::app::Clusters::AccessControl::Structs::AccessControlEntryStruct::Type>(
-                    listHolder_0->mList, 1);
-            }
-            return WriteAttribute(kIdentityAlpha, GetEndpoint(0), AccessControl::Id, AccessControl::Attributes::Acl::Id, value,
-                                  chip::NullOptional, chip::NullOptional);
-        }
-        case 19: {
-            LogStep(19, "TH removes ACL Operate privileges for Group 0x0103");
-            VerifyOrDo(!ShouldSkip("PICS_SKIP_SAMPLE_APP"), return ContinueOnChipMainThread(CHIP_NO_ERROR));
-            ListFreer listFreer;
-            chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-            value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-            value.expectedValue.Emplace();
-            value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-            return UserPrompt(kIdentityAlpha, value);
-        }
-        }
-        return CHIP_NO_ERROR;
-    }
-};
-
 class Test_TC_SWTCH_1_1Suite : public TestCommand
 {
 public:
@@ -116152,61 +114692,6 @@
     }
 };
 
-class Test_TC_BINFO_2_2Suite : public TestCommand
-{
-public:
-    Test_TC_BINFO_2_2Suite(CredentialIssuerCommands * credsIssuerConfig) : TestCommand("Test_TC_BINFO_2_2", 0, credsIssuerConfig)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-
-    ~Test_TC_BINFO_2_2Suite() {}
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mTimeout;
-
-    chip::EndpointId GetEndpoint(chip::EndpointId endpoint) { return mEndpoint.HasValue() ? mEndpoint.Value() : endpoint; }
-
-    //
-    // Tests methods
-    //
-
-    void OnResponse(const chip::app::StatusIB & status, chip::TLV::TLVReader * data) override
-    {
-        bool shouldContinue = false;
-
-        switch (mTestIndex - 1)
-        {
-        default:
-            LogErrorOnFailure(ContinueOnChipMainThread(CHIP_ERROR_INVALID_ARGUMENT));
-        }
-
-        if (shouldContinue)
-        {
-            ContinueOnChipMainThread(CHIP_NO_ERROR);
-        }
-    }
-
-    CHIP_ERROR DoTestStep(uint16_t testIndex) override
-    {
-        using namespace chip::app::Clusters;
-        switch (testIndex)
-        {}
-        return CHIP_NO_ERROR;
-    }
-};
-
 class Test_TC_BINFO_2_4Suite : public TestCommand
 {
 public:
@@ -138894,7 +137379,6 @@
         make_unique<TestAccessControlClusterSuite>(credsIssuerConfig),
         make_unique<Test_TC_ACL_1_1Suite>(credsIssuerConfig),
         make_unique<Test_TC_ACL_2_1Suite>(credsIssuerConfig),
-        make_unique<Test_TC_ACL_2_2Suite>(credsIssuerConfig),
         make_unique<Test_TC_ACL_2_3Suite>(credsIssuerConfig),
         make_unique<Test_TC_ACL_2_4Suite>(credsIssuerConfig),
         make_unique<Test_TC_ACL_2_7Suite>(credsIssuerConfig),
@@ -139018,8 +137502,6 @@
         make_unique<Test_TC_APPLAUNCHER_3_5Suite>(credsIssuerConfig),
         make_unique<Test_TC_APPLAUNCHER_3_6Suite>(credsIssuerConfig),
         make_unique<Test_TC_APPLAUNCHER_3_7Suite>(credsIssuerConfig),
-        make_unique<Test_TC_APPLAUNCHER_3_8Suite>(credsIssuerConfig),
-        make_unique<Test_TC_APPLAUNCHER_3_9Suite>(credsIssuerConfig),
         make_unique<Test_TC_MEDIAINPUT_3_10Suite>(credsIssuerConfig),
         make_unique<Test_TC_MEDIAINPUT_3_11Suite>(credsIssuerConfig),
         make_unique<Test_TC_MEDIAINPUT_3_12Suite>(credsIssuerConfig),
@@ -139064,8 +137546,6 @@
         make_unique<Test_TC_PSCFG_2_1Suite>(credsIssuerConfig),
         make_unique<Test_TC_RH_1_1Suite>(credsIssuerConfig),
         make_unique<Test_TC_RH_2_1Suite>(credsIssuerConfig),
-        make_unique<Test_TC_SC_5_1Suite>(credsIssuerConfig),
-        make_unique<Test_TC_SC_5_2Suite>(credsIssuerConfig),
         make_unique<Test_TC_SWTCH_1_1Suite>(credsIssuerConfig),
         make_unique<Test_TC_SWTCH_2_1Suite>(credsIssuerConfig),
         make_unique<Test_TC_TMP_1_1Suite>(credsIssuerConfig),
@@ -139253,7 +137733,6 @@
         make_unique<Test_TC_DA_1_4Suite>(credsIssuerConfig),
         make_unique<Test_TC_DA_1_5Suite>(credsIssuerConfig),
         make_unique<Test_TC_DA_1_6Suite>(credsIssuerConfig),
-        make_unique<Test_TC_BINFO_2_2Suite>(credsIssuerConfig),
         make_unique<Test_TC_BINFO_2_4Suite>(credsIssuerConfig),
         make_unique<Test_TC_OPCREDS_3_1Suite>(credsIssuerConfig),
         make_unique<Test_TC_OPCREDS_3_2Suite>(credsIssuerConfig),
diff --git a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
index 7e47aa2..8cbd89f 100644
--- a/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
+++ b/zzz_generated/darwin-framework-tool/zap-generated/test/Commands.h
@@ -39,7 +39,6 @@
         printf("TestAccessControlCluster\n");
         printf("Test_TC_ACL_1_1\n");
         printf("Test_TC_ACL_2_1\n");
-        printf("Test_TC_ACL_2_2\n");
         printf("Test_TC_ACL_2_3\n");
         printf("Test_TC_ACE_1_1\n");
         printf("Test_TC_ACE_1_5\n");
@@ -168,7 +167,6 @@
         printf("Test_TC_PSCFG_2_1\n");
         printf("Test_TC_RH_1_1\n");
         printf("Test_TC_RH_2_1\n");
-        printf("Test_TC_SC_5_1\n");
         printf("Test_TC_SWTCH_1_1\n");
         printf("Test_TC_TMP_1_1\n");
         printf("Test_TC_TMP_2_1\n");
@@ -2964,143 +2962,6 @@
     }
 };
 
-class Test_TC_ACL_2_2 : public TestCommandBridge {
-public:
-    // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
-    Test_TC_ACL_2_2()
-        : TestCommandBridge("Test_TC_ACL_2_2")
-        , mTestIndex(0)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-    // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull)
-
-    ~Test_TC_ACL_2_2() {}
-
-    /////////// TestCommand Interface /////////
-    void NextTest() override
-    {
-        CHIP_ERROR err = CHIP_NO_ERROR;
-
-        if (0 == mTestIndex) {
-            ChipLogProgress(chipTool, " **** Test Start: Test_TC_ACL_2_2\n");
-        }
-
-        if (mTestCount == mTestIndex) {
-            ChipLogProgress(chipTool, " **** Test Complete: Test_TC_ACL_2_2\n");
-            SetCommandExitStatus(CHIP_NO_ERROR);
-            return;
-        }
-
-        Wait();
-
-        // Ensure we increment mTestIndex before we start running the relevant
-        // command.  That way if we lose the timeslice after we send the message
-        // but before our function call returns, we won't end up with an
-        // incorrect mTestIndex value observed when we get the response.
-        switch (mTestIndex++) {
-        case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n");
-            err = TestWaitForTheCommissionedDeviceToBeRetrieved_0();
-            break;
-        case 1:
-            ChipLogProgress(
-                chipTool, " ***** Test Step 1 : TH1 reads DUT Descriptor cluster ServerList attribute from Endpoint 0\n");
-            err = TestTh1ReadsDutDescriptorClusterServerListAttributeFromEndpoint0_1();
-            break;
-        case 2:
-            ChipLogProgress(chipTool,
-                " ***** Test Step 2 : TH1 reads DUT Descriptor cluster ServerList attribute from every Endpoint except 0\n");
-            if (ShouldSkip("PICS_USER_PROMPT")) {
-                NextTest();
-                return;
-            }
-            err = TestTh1ReadsDutDescriptorClusterServerListAttributeFromEveryEndpointExcept0_2();
-            break;
-        }
-
-        if (CHIP_NO_ERROR != err) {
-            ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err));
-            SetCommandExitStatus(err);
-        }
-    }
-
-    void OnStatusUpdate(const chip::app::StatusIB & status) override
-    {
-        switch (mTestIndex - 1) {
-        case 0:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 1:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 2:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        }
-
-        // Go on to the next test.
-        ContinueOnChipMainThread(CHIP_NO_ERROR);
-    }
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 3;
-
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mTimeout;
-
-    CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0()
-    {
-
-        chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
-        value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
-        return WaitForCommissionee("alpha", value);
-    }
-
-    CHIP_ERROR TestTh1ReadsDutDescriptorClusterServerListAttributeFromEndpoint0_1()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterDescriptor alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster readAttributeServerListWithCompletion:^(NSArray * _Nullable value, NSError * _Nullable err) {
-            NSLog(@"TH1 reads DUT Descriptor cluster ServerList attribute from Endpoint 0 Error: %@", err);
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            VerifyOrReturn(CheckConstraintType("serverList", "list", "list"));
-            VerifyOrReturn(CheckConstraintContains("serverList", value, 31UL));
-
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestTh1ReadsDutDescriptorClusterServerListAttributeFromEveryEndpointExcept0_2()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message
-            = chip::Span<const char>("Factory Reset the DUT and enter 'y' after successgarbage: not in length on purpose", 49);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-};
-
 class Test_TC_ACL_2_3 : public TestCommandBridge {
 public:
     // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
@@ -69984,1112 +69845,6 @@
     }
 };
 
-class Test_TC_SC_5_1 : public TestCommandBridge {
-public:
-    // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
-    Test_TC_SC_5_1()
-        : TestCommandBridge("Test_TC_SC_5_1")
-        , mTestIndex(0)
-    {
-        AddArgument("nodeId", 0, UINT64_MAX, &mNodeId);
-        AddArgument("cluster", &mCluster);
-        AddArgument("endpoint", 0, UINT16_MAX, &mEndpoint);
-        AddArgument("timeout", 0, UINT16_MAX, &mTimeout);
-    }
-    // NOLINTEND(clang-analyzer-nullability.NullPassedToNonnull)
-
-    ~Test_TC_SC_5_1() {}
-
-    /////////// TestCommand Interface /////////
-    void NextTest() override
-    {
-        CHIP_ERROR err = CHIP_NO_ERROR;
-
-        if (0 == mTestIndex) {
-            ChipLogProgress(chipTool, " **** Test Start: Test_TC_SC_5_1\n");
-        }
-
-        if (mTestCount == mTestIndex) {
-            ChipLogProgress(chipTool, " **** Test Complete: Test_TC_SC_5_1\n");
-            SetCommandExitStatus(CHIP_NO_ERROR);
-            return;
-        }
-
-        Wait();
-
-        // Ensure we increment mTestIndex before we start running the relevant
-        // command.  That way if we lose the timeslice after we send the message
-        // but before our function call returns, we won't end up with an
-        // incorrect mTestIndex value observed when we get the response.
-        switch (mTestIndex++) {
-        case 0:
-            ChipLogProgress(chipTool, " ***** Test Step 0 : Wait for the commissioned device to be retrieved\n");
-            err = TestWaitForTheCommissionedDeviceToBeRetrieved_0();
-            break;
-        case 1:
-            ChipLogProgress(chipTool, " ***** Test Step 1 : Read the commissioner node ID\n");
-            err = TestReadTheCommissionerNodeId_1();
-            break;
-        case 2:
-            ChipLogProgress(chipTool, " ***** Test Step 2 : TH adds ACL Operate privileges for Group 0x0103\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThAddsAclOperatePrivilegesForGroup0x0103_2();
-            break;
-        case 3:
-            ChipLogProgress(chipTool, " ***** Test Step 3 : TH adds ACL Operate privileges for Group 0x0103\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThAddsAclOperatePrivilegesForGroup0x0103_3();
-            break;
-        case 4:
-            ChipLogProgress(chipTool, " ***** Test Step 4 : TH sends KeySetWrite command with incorrect key\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsKeySetWriteCommandWithIncorrectKey_4();
-            break;
-        case 5:
-            ChipLogProgress(chipTool, " ***** Test Step 5 : TH sends KeySetWrite command with incorrect key\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsKeySetWriteCommandWithIncorrectKey_5();
-            break;
-        case 6:
-            ChipLogProgress(chipTool, " ***** Test Step 6 : TH sends KeySetWrite command with TH key\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsKeySetWriteCommandWithThKey_6();
-            break;
-        case 7:
-            ChipLogProgress(chipTool, " ***** Test Step 7 : TH sends KeySetWrite command with TH key\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsKeySetWriteCommandWithThKey_7();
-            break;
-        case 8:
-            ChipLogProgress(chipTool, " ***** Test Step 8 : TH binds GroupId to GroupKeySet\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThBindsGroupIdToGroupKeySet_8();
-            break;
-        case 9:
-            ChipLogProgress(chipTool, " ***** Test Step 9 : TH binds GroupId to GroupKeySet\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThBindsGroupIdToGroupKeySet_9();
-            break;
-        case 10:
-            ChipLogProgress(chipTool, " ***** Test Step 10 : TH sends RemoveAllGroups command\n");
-            err = TestThSendsRemoveAllGroupsCommand_10();
-            break;
-        case 11:
-            ChipLogProgress(chipTool, " ***** Test Step 11 : TH sends AddGroup command\n");
-            err = TestThSendsAddGroupCommand_11();
-            break;
-        case 12:
-            ChipLogProgress(chipTool, " ***** Test Step 12 : TH sends ViewGroup command\n");
-            if (ShouldSkip("G.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsViewGroupCommand_12();
-            break;
-        case 13:
-            ChipLogProgress(chipTool, " ***** Test Step 13 : TH sends ViewGroup command\n");
-            if (ShouldSkip("!(G.S.F00)")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsViewGroupCommand_13();
-            break;
-        case 14:
-            ChipLogProgress(chipTool, " ***** Test Step 14 : TH sends KeySetRead\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsKeySetRead_14();
-            break;
-        case 15:
-            ChipLogProgress(chipTool, " ***** Test Step 15 : TH sends KeySetRead\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThSendsKeySetRead_15();
-            break;
-        case 16:
-            ChipLogProgress(chipTool, " ***** Test Step 16 : TH reads GroupKeyMap Attribute from the GroupKeyManagement cluster\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThReadsGroupKeyMapAttributeFromTheGroupKeyManagementCluster_16();
-            break;
-        case 17:
-            ChipLogProgress(chipTool, " ***** Test Step 17 : TH reads GroupKeyMap Attribute from the GroupKeyManagement cluster\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThReadsGroupKeyMapAttributeFromTheGroupKeyManagementCluster_17();
-            break;
-        case 18:
-            ChipLogProgress(chipTool, " ***** Test Step 18 : TH reads GroupTable attribute\n");
-            if (ShouldSkip("G.S.F00 && PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThReadsGroupTableAttribute_18();
-            break;
-        case 19:
-            ChipLogProgress(chipTool, " ***** Test Step 19 : TH reads GroupTable attribute\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP && G.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestThReadsGroupTableAttribute_19();
-            break;
-        case 20:
-            ChipLogProgress(chipTool, " ***** Test Step 20 : TH reads GroupTable attribute\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY && !G.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestThReadsGroupTableAttribute_20();
-            break;
-        case 21:
-            ChipLogProgress(chipTool, " ***** Test Step 21 : TH reads GroupTable attribute\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP && !G.S.F00")) {
-                NextTest();
-                return;
-            }
-            err = TestThReadsGroupTableAttribute_21();
-            break;
-        case 22:
-            ChipLogProgress(chipTool, " ***** Test Step 22 : TH removes the GroupKeySet\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThRemovesTheGroupKeySet_22();
-            break;
-        case 23:
-            ChipLogProgress(chipTool, " ***** Test Step 23 : TH removes the GroupKeySet\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThRemovesTheGroupKeySet_23();
-            break;
-        case 24:
-            ChipLogProgress(chipTool, " ***** Test Step 24 : TH verifies the corresponding GroupKeyMap entry has been removed\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThVerifiesTheCorrespondingGroupKeyMapEntryHasBeenRemoved_24();
-            break;
-        case 25:
-            ChipLogProgress(chipTool, " ***** Test Step 25 : TH verifies the corresponding GroupKeyMap entry has been removed\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThVerifiesTheCorrespondingGroupKeyMapEntryHasBeenRemoved_25();
-            break;
-        case 26:
-            ChipLogProgress(chipTool, " ***** Test Step 26 : TH cleans up groups using RemoveAllGroups command\n");
-            err = TestThCleansUpGroupsUsingRemoveAllGroupsCommand_26();
-            break;
-        case 27:
-            ChipLogProgress(chipTool, " ***** Test Step 27 : TH verifies the group has been removed in the GroupTable\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThVerifiesTheGroupHasBeenRemovedInTheGroupTable_27();
-            break;
-        case 28:
-            ChipLogProgress(chipTool, " ***** Test Step 28 : TH verifies the group has been removed in the GroupTable\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThVerifiesTheGroupHasBeenRemovedInTheGroupTable_28();
-            break;
-        case 29:
-            ChipLogProgress(chipTool, " ***** Test Step 29 : TH removes ACL Operate privileges for Group 0x0103\n");
-            if (ShouldSkip("PICS_SDK_CI_ONLY")) {
-                NextTest();
-                return;
-            }
-            err = TestThRemovesAclOperatePrivilegesForGroup0x0103_29();
-            break;
-        case 30:
-            ChipLogProgress(chipTool, " ***** Test Step 30 : TH removes ACL Operate privileges for Group 0x0103\n");
-            if (ShouldSkip("PICS_SKIP_SAMPLE_APP")) {
-                NextTest();
-                return;
-            }
-            err = TestThRemovesAclOperatePrivilegesForGroup0x0103_30();
-            break;
-        }
-
-        if (CHIP_NO_ERROR != err) {
-            ChipLogError(chipTool, " ***** Test Failure: %s\n", chip::ErrorStr(err));
-            SetCommandExitStatus(err);
-        }
-    }
-
-    void OnStatusUpdate(const chip::app::StatusIB & status) override
-    {
-        switch (mTestIndex - 1) {
-        case 0:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 1:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 2:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 3:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 4:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 5:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 6:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 7:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 8:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 9:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 10:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 11:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 12:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 13:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 14:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 15:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 16:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 17:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 18:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 19:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 20:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 21:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 22:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 23:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 24:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 25:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 26:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 27:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 28:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 29:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        case 30:
-            VerifyOrReturn(CheckValue("status", chip::to_underlying(status.mStatus), 0));
-            break;
-        }
-
-        // Go on to the next test.
-        ContinueOnChipMainThread(CHIP_NO_ERROR);
-    }
-
-    chip::System::Clock::Timeout GetWaitDuration() const override
-    {
-        return chip::System::Clock::Seconds16(mTimeout.ValueOr(kTimeoutInSeconds));
-    }
-
-private:
-    std::atomic_uint16_t mTestIndex;
-    const uint16_t mTestCount = 31;
-
-    chip::Optional<chip::NodeId> mNodeId;
-    chip::Optional<chip::CharSpan> mCluster;
-    chip::Optional<chip::EndpointId> mEndpoint;
-    chip::Optional<uint16_t> mTimeout;
-
-    CHIP_ERROR TestWaitForTheCommissionedDeviceToBeRetrieved_0()
-    {
-
-        chip::app::Clusters::DelayCommands::Commands::WaitForCommissionee::Type value;
-        value.nodeId = mNodeId.HasValue() ? mNodeId.Value() : 305414945ULL;
-        return WaitForCommissionee("alpha", value);
-    }
-    NSNumber * _Nonnull commissionerNodeId;
-
-    CHIP_ERROR TestReadTheCommissionerNodeId_1()
-    {
-
-        chip::app::Clusters::CommissionerCommands::Commands::GetCommissionerNodeId::Type value;
-        return GetCommissionerNodeId("alpha", value, ^(const chip::GetCommissionerNodeIdResponse & values) {
-            {
-                commissionerNodeId = [[NSNumber alloc] initWithUnsignedLongLong:values.nodeId];
-            }
-            NextTest();
-        });
-    }
-
-    CHIP_ERROR TestThAddsAclOperatePrivilegesForGroup0x0103_2()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        id aclArgument;
-        {
-            NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
-            temp_0[0] = [[MTRAccessControlClusterAccessControlEntryStruct alloc] init];
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).privilege = [NSNumber numberWithUnsignedChar:5U];
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).authMode = [NSNumber numberWithUnsignedChar:2U];
-            {
-                NSMutableArray * temp_3 = [[NSMutableArray alloc] init];
-                temp_3[0] = [commissionerNodeId copy];
-                ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).subjects = temp_3;
-            }
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).targets = nil;
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).fabricIndex = [NSNumber numberWithUnsignedChar:1U];
-
-            temp_0[1] = [[MTRAccessControlClusterAccessControlEntryStruct alloc] init];
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[1]).privilege = [NSNumber numberWithUnsignedChar:3U];
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[1]).authMode = [NSNumber numberWithUnsignedChar:3U];
-            {
-                NSMutableArray * temp_3 = [[NSMutableArray alloc] init];
-                temp_3[0] = [NSNumber numberWithUnsignedLongLong:259ULL];
-                ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[1]).subjects = temp_3;
-            }
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[1]).targets = nil;
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[1]).fabricIndex = [NSNumber numberWithUnsignedChar:1U];
-
-            aclArgument = temp_0;
-        }
-        [cluster writeAttributeACLWithValue:aclArgument
-                                 completion:^(NSError * _Nullable err) {
-                                     NSLog(@"TH adds ACL Operate privileges for Group 0x0103 Error: %@", err);
-
-                                     VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                     NextTest();
-                                 }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThAddsAclOperatePrivilegesForGroup0x0103_3()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThSendsKeySetWriteCommandWithIncorrectKey_4()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRGroupKeyManagementClusterKeySetWriteParams alloc] init];
-        params.groupKeySet = [[MTRGroupKeyManagementClusterGroupKeySetStruct alloc] init];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).groupKeySetID =
-            [NSNumber numberWithUnsignedShort:419U];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).groupKeySecurityPolicy =
-            [NSNumber numberWithUnsignedChar:0U];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochKey0 =
-            [[NSData alloc] initWithBytes:"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01" length:16];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochStartTime0 =
-            [NSNumber numberWithUnsignedLongLong:111ULL];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochKey1 =
-            [[NSData alloc] initWithBytes:"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" length:16];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochStartTime1 =
-            [NSNumber numberWithUnsignedLongLong:222ULL];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochKey2 =
-            [[NSData alloc] initWithBytes:"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03" length:16];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochStartTime2 =
-            [NSNumber numberWithUnsignedLongLong:333ULL];
-
-        [cluster keySetWriteWithParams:params
-                            completion:^(NSError * _Nullable err) {
-                                NSLog(@"TH sends KeySetWrite command with incorrect key Error: %@", err);
-
-                                VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                NextTest();
-                            }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThSendsKeySetWriteCommandWithIncorrectKey_5()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThSendsKeySetWriteCommandWithThKey_6()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRGroupKeyManagementClusterKeySetWriteParams alloc] init];
-        params.groupKeySet = [[MTRGroupKeyManagementClusterGroupKeySetStruct alloc] init];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).groupKeySetID =
-            [NSNumber numberWithUnsignedShort:419U];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).groupKeySecurityPolicy =
-            [NSNumber numberWithUnsignedChar:0U];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochKey0 =
-            [[NSData alloc] initWithBytes:"\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" length:16];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochStartTime0 =
-            [NSNumber numberWithUnsignedLongLong:2220000ULL];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochKey1 =
-            [[NSData alloc] initWithBytes:"\xd1\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" length:16];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochStartTime1 =
-            [NSNumber numberWithUnsignedLongLong:2220001ULL];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochKey2 =
-            [[NSData alloc] initWithBytes:"\xd2\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf" length:16];
-        ((MTRGroupKeyManagementClusterGroupKeySetStruct *) params.groupKeySet).epochStartTime2 =
-            [NSNumber numberWithUnsignedLongLong:2220002ULL];
-
-        [cluster keySetWriteWithParams:params
-                            completion:^(NSError * _Nullable err) {
-                                NSLog(@"TH sends KeySetWrite command with TH key Error: %@", err);
-
-                                VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                NextTest();
-                            }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThSendsKeySetWriteCommandWithThKey_7()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThBindsGroupIdToGroupKeySet_8()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        id groupKeyMapArgument;
-        {
-            NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
-            temp_0[0] = [[MTRGroupKeyManagementClusterGroupKeyMapStruct alloc] init];
-            ((MTRGroupKeyManagementClusterGroupKeyMapStruct *) temp_0[0]).groupId = [NSNumber numberWithUnsignedShort:259U];
-            ((MTRGroupKeyManagementClusterGroupKeyMapStruct *) temp_0[0]).groupKeySetID = [NSNumber numberWithUnsignedShort:419U];
-            ((MTRGroupKeyManagementClusterGroupKeyMapStruct *) temp_0[0]).fabricIndex = [NSNumber numberWithUnsignedChar:1U];
-
-            groupKeyMapArgument = temp_0;
-        }
-        [cluster writeAttributeGroupKeyMapWithValue:groupKeyMapArgument
-                                         completion:^(NSError * _Nullable err) {
-                                             NSLog(@"TH binds GroupId to GroupKeySet Error: %@", err);
-
-                                             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                             NextTest();
-                                         }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThBindsGroupIdToGroupKeySet_9()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThSendsRemoveAllGroupsCommand_10()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroups alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster removeAllGroupsWithCompletion:^(NSError * _Nullable err) {
-            NSLog(@"TH sends RemoveAllGroups command Error: %@", err);
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThSendsAddGroupCommand_11()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroups alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRGroupsClusterAddGroupParams alloc] init];
-        params.groupID = [NSNumber numberWithUnsignedShort:259U];
-        params.groupName = @"Test Group";
-        [cluster addGroupWithParams:params
-                         completion:^(MTRGroupsClusterAddGroupResponseParams * _Nullable values, NSError * _Nullable err) {
-                             NSLog(@"TH sends AddGroup command Error: %@", err);
-
-                             VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                             NextTest();
-                         }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThSendsViewGroupCommand_12()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroups alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRGroupsClusterViewGroupParams alloc] init];
-        params.groupID = [NSNumber numberWithUnsignedShort:259U];
-        [cluster viewGroupWithParams:params
-                          completion:^(MTRGroupsClusterViewGroupResponseParams * _Nullable values, NSError * _Nullable err) {
-                              NSLog(@"TH sends ViewGroup command Error: %@", err);
-
-                              VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                              {
-                                  id actualValue = values.status;
-                                  VerifyOrReturn(CheckValue("Status", actualValue, 0U));
-                              }
-
-                              {
-                                  id actualValue = values.groupID;
-                                  VerifyOrReturn(CheckValue("GroupID", actualValue, 259U));
-                              }
-
-                              {
-                                  id actualValue = values.groupName;
-                                  VerifyOrReturn(CheckValueAsString("GroupName", actualValue, @"Test Group"));
-                              }
-
-                              NextTest();
-                          }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThSendsViewGroupCommand_13()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroups alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRGroupsClusterViewGroupParams alloc] init];
-        params.groupID = [NSNumber numberWithUnsignedShort:259U];
-        [cluster viewGroupWithParams:params
-                          completion:^(MTRGroupsClusterViewGroupResponseParams * _Nullable values, NSError * _Nullable err) {
-                              NSLog(@"TH sends ViewGroup command Error: %@", err);
-
-                              VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                              {
-                                  id actualValue = values.status;
-                                  VerifyOrReturn(CheckValue("Status", actualValue, 0U));
-                              }
-
-                              {
-                                  id actualValue = values.groupID;
-                                  VerifyOrReturn(CheckValue("GroupID", actualValue, 259U));
-                              }
-
-                              {
-                                  id actualValue = values.groupName;
-                                  VerifyOrReturn(CheckValueAsString("GroupName", actualValue, @""));
-                              }
-
-                              NextTest();
-                          }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThSendsKeySetRead_14()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRGroupKeyManagementClusterKeySetReadParams alloc] init];
-        params.groupKeySetID = [NSNumber numberWithUnsignedShort:419U];
-        [cluster
-            keySetReadWithParams:params
-                      completion:^(
-                          MTRGroupKeyManagementClusterKeySetReadResponseParams * _Nullable values, NSError * _Nullable err) {
-                          NSLog(@"TH sends KeySetRead Error: %@", err);
-
-                          VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                          {
-                              id actualValue = values.groupKeySet;
-                              VerifyOrReturn(CheckValue("GroupKeySetID",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).groupKeySetID, 419U));
-                              VerifyOrReturn(CheckValue("GroupKeySecurityPolicy",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).groupKeySecurityPolicy, 0U));
-                              VerifyOrReturn(CheckValueNull(
-                                  "EpochKey0", ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochKey0));
-                              VerifyOrReturn(CheckValueNonNull("EpochStartTime0",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochStartTime0));
-                              VerifyOrReturn(CheckValue("EpochStartTime0",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochStartTime0, 2220000ULL));
-                              VerifyOrReturn(CheckValueNull(
-                                  "EpochKey1", ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochKey1));
-                              VerifyOrReturn(CheckValueNonNull("EpochStartTime1",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochStartTime1));
-                              VerifyOrReturn(CheckValue("EpochStartTime1",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochStartTime1, 2220001ULL));
-                              VerifyOrReturn(CheckValueNull(
-                                  "EpochKey2", ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochKey2));
-                              VerifyOrReturn(CheckValueNonNull("EpochStartTime2",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochStartTime2));
-                              VerifyOrReturn(CheckValue("EpochStartTime2",
-                                  ((MTRGroupKeyManagementClusterGroupKeySetStruct *) actualValue).epochStartTime2, 2220002ULL));
-                          }
-
-                          NextTest();
-                      }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThSendsKeySetRead_15()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThReadsGroupKeyMapAttributeFromTheGroupKeyManagementCluster_16()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRReadParams alloc] init];
-        params.filterByFabric = true;
-        [cluster
-            readAttributeGroupKeyMapWithParams:params
-                                    completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
-                                        NSLog(@"TH reads GroupKeyMap Attribute from the GroupKeyManagement cluster Error: %@", err);
-
-                                        VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                        {
-                                            id actualValue = value;
-                                            VerifyOrReturn(
-                                                CheckValue("GroupKeyMap", [actualValue count], static_cast<uint32_t>(1)));
-                                            VerifyOrReturn(CheckValue("GroupId",
-                                                ((MTRGroupKeyManagementClusterGroupKeyMapStruct *) actualValue[0]).groupId, 259U));
-                                            VerifyOrReturn(CheckValue("GroupKeySetID",
-                                                ((MTRGroupKeyManagementClusterGroupKeyMapStruct *) actualValue[0]).groupKeySetID,
-                                                419U));
-                                            VerifyOrReturn(CheckValue("FabricIndex",
-                                                ((MTRGroupKeyManagementClusterGroupKeyMapStruct *) actualValue[0]).fabricIndex,
-                                                1U));
-                                        }
-
-                                        NextTest();
-                                    }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThReadsGroupKeyMapAttributeFromTheGroupKeyManagementCluster_17()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThReadsGroupTableAttribute_18()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRReadParams alloc] init];
-        params.filterByFabric = true;
-        [cluster
-            readAttributeGroupTableWithParams:params
-                                   completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
-                                       NSLog(@"TH reads GroupTable attribute Error: %@", err);
-
-                                       VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                       {
-                                           id actualValue = value;
-                                           VerifyOrReturn(CheckValue("GroupTable", [actualValue count], static_cast<uint32_t>(1)));
-                                           VerifyOrReturn(CheckValue("GroupId",
-                                               ((MTRGroupKeyManagementClusterGroupInfoMapStruct *) actualValue[0]).groupId, 259U));
-                                           VerifyOrReturn(CheckValue("Endpoints",
-                                               [((MTRGroupKeyManagementClusterGroupInfoMapStruct *)
-                                                       actualValue[0]).endpoints count],
-                                               static_cast<uint32_t>(1)));
-                                           VerifyOrReturn(CheckValue("",
-                                               ((MTRGroupKeyManagementClusterGroupInfoMapStruct *) actualValue[0]).endpoints[0],
-                                               mEndpoint.HasValue() ? mEndpoint.Value() : 1U));
-                                           VerifyOrReturn(CheckValueAsString("GroupName",
-                                               ((MTRGroupKeyManagementClusterGroupInfoMapStruct *) actualValue[0]).groupName,
-                                               @"Test Group"));
-                                       }
-
-                                       NextTest();
-                                   }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThReadsGroupTableAttribute_19()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThReadsGroupTableAttribute_20()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRReadParams alloc] init];
-        params.filterByFabric = true;
-        [cluster
-            readAttributeGroupTableWithParams:params
-                                   completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
-                                       NSLog(@"TH reads GroupTable attribute Error: %@", err);
-
-                                       VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                       {
-                                           id actualValue = value;
-                                           VerifyOrReturn(CheckValue("GroupTable", [actualValue count], static_cast<uint32_t>(1)));
-                                           VerifyOrReturn(CheckValue("GroupId",
-                                               ((MTRGroupKeyManagementClusterGroupInfoMapStruct *) actualValue[0]).groupId, 259U));
-                                           VerifyOrReturn(CheckValue("Endpoints",
-                                               [((MTRGroupKeyManagementClusterGroupInfoMapStruct *)
-                                                       actualValue[0]).endpoints count],
-                                               static_cast<uint32_t>(1)));
-                                           VerifyOrReturn(CheckValue("",
-                                               ((MTRGroupKeyManagementClusterGroupInfoMapStruct *) actualValue[0]).endpoints[0],
-                                               mEndpoint.HasValue() ? mEndpoint.Value() : 1U));
-                                           VerifyOrReturn(CheckValueAsString("GroupName",
-                                               ((MTRGroupKeyManagementClusterGroupInfoMapStruct *) actualValue[0]).groupName, @""));
-                                       }
-
-                                       NextTest();
-                                   }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThReadsGroupTableAttribute_21()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThRemovesTheGroupKeySet_22()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRGroupKeyManagementClusterKeySetRemoveParams alloc] init];
-        params.groupKeySetID = [NSNumber numberWithUnsignedShort:419U];
-        [cluster keySetRemoveWithParams:params
-                             completion:^(NSError * _Nullable err) {
-                                 NSLog(@"TH removes the GroupKeySet Error: %@", err);
-
-                                 VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                 NextTest();
-                             }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThRemovesTheGroupKeySet_23()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThVerifiesTheCorrespondingGroupKeyMapEntryHasBeenRemoved_24()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRReadParams alloc] init];
-        params.filterByFabric = true;
-        [cluster
-            readAttributeGroupKeyMapWithParams:params
-                                    completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
-                                        NSLog(@"TH verifies the corresponding GroupKeyMap entry has been removed Error: %@", err);
-
-                                        VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                        {
-                                            id actualValue = value;
-                                            VerifyOrReturn(
-                                                CheckValue("GroupKeyMap", [actualValue count], static_cast<uint32_t>(0)));
-                                        }
-
-                                        NextTest();
-                                    }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThVerifiesTheCorrespondingGroupKeyMapEntryHasBeenRemoved_25()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThCleansUpGroupsUsingRemoveAllGroupsCommand_26()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroups alloc] initWithDevice:device endpointID:@(1) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        [cluster removeAllGroupsWithCompletion:^(NSError * _Nullable err) {
-            NSLog(@"TH cleans up groups using RemoveAllGroups command Error: %@", err);
-
-            VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-            NextTest();
-        }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThVerifiesTheGroupHasBeenRemovedInTheGroupTable_27()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterGroupKeyManagement alloc] initWithDevice:device
-                                                                              endpointID:@(0)
-                                                                                   queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        __auto_type * params = [[MTRReadParams alloc] init];
-        params.filterByFabric = true;
-        [cluster
-            readAttributeGroupTableWithParams:params
-                                   completion:^(NSArray * _Nullable value, NSError * _Nullable err) {
-                                       NSLog(@"TH verifies the group has been removed in the GroupTable Error: %@", err);
-
-                                       VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                       {
-                                           id actualValue = value;
-                                           VerifyOrReturn(CheckValue("GroupTable", [actualValue count], static_cast<uint32_t>(0)));
-                                       }
-
-                                       NextTest();
-                                   }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThVerifiesTheGroupHasBeenRemovedInTheGroupTable_28()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-
-    CHIP_ERROR TestThRemovesAclOperatePrivilegesForGroup0x0103_29()
-    {
-
-        MTRBaseDevice * device = GetDevice("alpha");
-        __auto_type * cluster = [[MTRBaseClusterAccessControl alloc] initWithDevice:device endpointID:@(0) queue:mCallbackQueue];
-        VerifyOrReturnError(cluster != nil, CHIP_ERROR_INCORRECT_STATE);
-
-        id aclArgument;
-        {
-            NSMutableArray * temp_0 = [[NSMutableArray alloc] init];
-            temp_0[0] = [[MTRAccessControlClusterAccessControlEntryStruct alloc] init];
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).privilege = [NSNumber numberWithUnsignedChar:5U];
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).authMode = [NSNumber numberWithUnsignedChar:2U];
-            {
-                NSMutableArray * temp_3 = [[NSMutableArray alloc] init];
-                temp_3[0] = [commissionerNodeId copy];
-                ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).subjects = temp_3;
-            }
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).targets = nil;
-            ((MTRAccessControlClusterAccessControlEntryStruct *) temp_0[0]).fabricIndex = [NSNumber numberWithUnsignedChar:1U];
-
-            aclArgument = temp_0;
-        }
-        [cluster writeAttributeACLWithValue:aclArgument
-                                 completion:^(NSError * _Nullable err) {
-                                     NSLog(@"TH removes ACL Operate privileges for Group 0x0103 Error: %@", err);
-
-                                     VerifyOrReturn(CheckValue("status", err ? err.code : 0, 0));
-
-                                     NextTest();
-                                 }];
-
-        return CHIP_NO_ERROR;
-    }
-
-    CHIP_ERROR TestThRemovesAclOperatePrivilegesForGroup0x0103_30()
-    {
-
-        chip::app::Clusters::LogCommands::Commands::UserPrompt::Type value;
-        value.message = chip::Span<const char>("Enter 'y' after successgarbage: not in length on purpose", 23);
-        value.expectedValue.Emplace();
-        value.expectedValue.Value() = chip::Span<const char>("ygarbage: not in length on purpose", 1);
-        return UserPrompt("alpha", value);
-    }
-};
-
 class Test_TC_SWTCH_1_1 : public TestCommandBridge {
 public:
     // NOLINTBEGIN(clang-analyzer-nullability.NullPassedToNonnull): Test constructor nullability not enforced
@@ -149785,7 +148540,6 @@
         make_unique<TestAccessControlCluster>(),
         make_unique<Test_TC_ACL_1_1>(),
         make_unique<Test_TC_ACL_2_1>(),
-        make_unique<Test_TC_ACL_2_2>(),
         make_unique<Test_TC_ACL_2_3>(),
         make_unique<Test_TC_ACE_1_1>(),
         make_unique<Test_TC_ACE_1_5>(),
@@ -149914,7 +148668,6 @@
         make_unique<Test_TC_PSCFG_2_1>(),
         make_unique<Test_TC_RH_1_1>(),
         make_unique<Test_TC_RH_2_1>(),
-        make_unique<Test_TC_SC_5_1>(),
         make_unique<Test_TC_SWTCH_1_1>(),
         make_unique<Test_TC_TMP_1_1>(),
         make_unique<Test_TC_TMP_2_1>(),
